]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/mount.c
9bootfat: rename open() to fileinit and make it static as its really a internal funct...
[plan9front.git] / sys / src / cmd / mount.c
1 #include <u.h>
2 #include <libc.h>
3 #include <auth.h>
4
5 void    usage(void);
6 void    catch(void*, char*);
7
8 char *keyspec = "";
9
10 int
11 amount0(int fd, char *mntpt, int flags, char *aname, char *keyspec)
12 {
13         int rv, afd;
14         AuthInfo *ai;
15
16         afd = fauth(fd, aname);
17         if(afd >= 0){
18                 ai = auth_proxy(afd, amount_getkey, "proto=p9any role=client %s", keyspec);
19                 if(ai != nil)
20                         auth_freeAI(ai);
21                 else
22                         fprint(2, "%s: auth_proxy: %r\n", argv0);
23         }
24         rv = mount(fd, afd, mntpt, flags, aname);
25         if(afd >= 0)
26                 close(afd);
27         return rv;
28 }
29
30 void
31 main(int argc, char *argv[])
32 {
33         char *spec;
34         ulong flag = 0;
35         int qflag = 0;
36         int noauth = 0;
37         int fd, rv;
38
39         ARGBEGIN{
40         case 'a':
41                 flag |= MAFTER;
42                 break;
43         case 'b':
44                 flag |= MBEFORE;
45                 break;
46         case 'c':
47                 flag |= MCREATE;
48                 break;
49         case 'C':
50                 flag |= MCACHE;
51                 break;
52         case 'k':
53                 keyspec = EARGF(usage());
54                 break;
55         case 'n':
56                 noauth = 1;
57                 break;
58         case 'q':
59                 qflag = 1;
60                 break;
61         default:
62                 usage();
63         }ARGEND
64
65         spec = 0;
66         if(argc == 2)
67                 spec = "";
68         else if(argc == 3)
69                 spec = argv[2];
70         else
71                 usage();
72
73         if((flag&MAFTER)&&(flag&MBEFORE))
74                 usage();
75
76         fd = open(argv[0], ORDWR);
77         if(fd < 0){
78                 if(qflag)
79                         exits(0);
80                 fprint(2, "%s: can't open %s: %r\n", argv0, argv[0]);
81                 exits("open");
82         }
83
84         notify(catch);
85         if(noauth)
86                 rv = mount(fd, -1, argv[1], flag, spec);
87         else
88                 rv = amount0(fd, argv[1], flag, spec, keyspec);
89         if(rv < 0){
90                 if(qflag)
91                         exits(0);
92                 fprint(2, "%s: mount %s: %r\n", argv0, argv[1]);
93                 exits("mount");
94         }
95         exits(0);
96 }
97
98 void
99 catch(void *x, char *m)
100 {
101         USED(x);
102         fprint(2, "mount: %s\n", m);
103         exits(m);
104 }
105
106 void
107 usage(void)
108 {
109         fprint(2, "usage: mount [-a|-b] [-cnq] [-k keypattern] /srv/service dir [spec]\n");
110         exits("usage");
111 }