diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-10 10:11:45 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-08-10 10:11:45 +0200 |
commit | 23742053f5ee70cd394c33f28f3e6547e9e8e31d (patch) | |
tree | 0ce952aeda0f616e7a79701b514ba7a07cbd2bd6 | |
parent | b241dd11596ac16cb21ba1ffc24abd7a46153a09 (diff) |
mount, srv: add -N flag to skip authentication and attach anonymously as "none"
-rw-r--r-- | sys/man/1/bind | 7 | ||||
-rw-r--r-- | sys/man/4/srv | 5 | ||||
-rw-r--r-- | sys/src/cmd/mount.c | 36 | ||||
-rw-r--r-- | sys/src/cmd/srv.c | 17 |
4 files changed, 47 insertions, 18 deletions
diff --git a/sys/man/1/bind b/sys/man/1/bind index 7994f7192..e4816c41e 100644 --- a/sys/man/1/bind +++ b/sys/man/1/bind @@ -144,7 +144,7 @@ operation fails. .PD .PP .I Mount -takes two additional options. +takes three additional options. The first, .B -k .IR keypattern , @@ -156,6 +156,11 @@ The second, causes .I mount to skip authentication entirely. +The third, +.BR -N , +skips authentication and specifies +.B none +as the username to the fileserver. .PP The .I spec diff --git a/sys/man/4/srv b/sys/man/4/srv index 6770de13e..9c83e26cd 100644 --- a/sys/man/4/srv +++ b/sys/man/4/srv @@ -4,7 +4,7 @@ srv, srvold9p, 9fs, srvssh \- start network file service .SH SYNOPSIS .B srv [ -.B -abcCemnq +.B -abcCemnNq ] [ .B -s .I seconds @@ -114,7 +114,8 @@ The .BR c , .BR C , and -.B n +.BR n , +.B N options are used to control the mount flags as in .I mount (see diff --git a/sys/src/cmd/mount.c b/sys/src/cmd/mount.c index 48251fbab..20c27405c 100644 --- a/sys/src/cmd/mount.c +++ b/sys/src/cmd/mount.c @@ -6,6 +6,11 @@ void usage(void); void catch(void*, char*); char *keyspec = ""; +char *spec = ""; +int flag = MREPL; +int qflag = 0; +int noauth = 0; +int asnone = 0; int amount0(int fd, char *mntpt, int flags, char *aname, char *keyspec) @@ -30,10 +35,6 @@ amount0(int fd, char *mntpt, int flags, char *aname, char *keyspec) void main(int argc, char *argv[]) { - char *spec; - ulong flag = 0; - int qflag = 0; - int noauth = 0; int fd, rv; ARGBEGIN{ @@ -52,6 +53,9 @@ main(int argc, char *argv[]) case 'k': keyspec = EARGF(usage()); break; + case 'N': + asnone = 1; + /* no break */ case 'n': noauth = 1; break; @@ -62,12 +66,9 @@ main(int argc, char *argv[]) usage(); }ARGEND - spec = 0; - if(argc == 2) - spec = ""; - else if(argc == 3) + if(argc == 3) spec = argv[2]; - else + else if(argc != 2) usage(); if((flag&MAFTER)&&(flag&MBEFORE)) @@ -81,6 +82,16 @@ main(int argc, char *argv[]) exits("open"); } + if(asnone){ + rv = open("#c/user", OWRITE); + if(rv < 0 || write(rv, "none", 4) != 4){ + if(qflag) + exits(0); + fprint(2, "%s: can't become none: %r\n", argv0); + exits("becomenone"); + } + } + notify(catch); if(noauth) rv = mount(fd, -1, argv[1], flag, spec); @@ -96,16 +107,15 @@ main(int argc, char *argv[]) } void -catch(void *x, char *m) +catch(void *, char *m) { - USED(x); - fprint(2, "mount: %s\n", m); + fprint(2, "%s: %s\n", argv0, m); exits(m); } void usage(void) { - fprint(2, "usage: mount [-a|-b] [-cnq] [-k keypattern] /srv/service dir [spec]\n"); + fprint(2, "usage: mount [-a|-b] [-cCnNq] [-k keypattern] /srv/service dir [spec]\n"); exits("usage"); } diff --git a/sys/src/cmd/srv.c b/sys/src/cmd/srv.c index c42132e25..b706e3fa7 100644 --- a/sys/src/cmd/srv.c +++ b/sys/src/cmd/srv.c @@ -10,12 +10,13 @@ void rpc(int, int); void post(char*, int); void mountfs(char*, int); int doauth = 1; +int asnone = 0; void usage(void) { - fprint(2, "usage: %s [-abcCm] [net!]host [srvname [mtpt]]\n", argv0); - fprint(2, " or %s -e [-abcCm] command [srvname [mtpt]]\n", argv0); + fprint(2, "usage: %s [-abcCmnNq] [net!]host [srvname [mtpt]]\n", argv0); + fprint(2, " or %s -e [-abcCmnNq] command [srvname [mtpt]]\n", argv0); exits("usage"); } @@ -106,6 +107,9 @@ main(int argc, char *argv[]) domount = 1; reallymount = 1; break; + case 'N': + asnone = 1; + /* no break */ case 'n': doauth = 0; break; @@ -197,6 +201,15 @@ Mount: if(domount == 0 || reallymount == 0) exits(0); + if(asnone){ + try = open("#c/user", OWRITE); + if(try < 0 || write(try, "none", 4) != 4){ + fprint(2, "srv %s: can't become none: %r\n", dest); + exits("becomenone"); + } + try = 0; + } + if((!doauth && mount(fd, -1, mtpt, mountflag, "") < 0) || (doauth && amount(fd, mtpt, mountflag, "") < 0)){ err[0] = 0; |