summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-08-10 10:11:45 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2015-08-10 10:11:45 +0200
commit23742053f5ee70cd394c33f28f3e6547e9e8e31d (patch)
tree0ce952aeda0f616e7a79701b514ba7a07cbd2bd6
parentb241dd11596ac16cb21ba1ffc24abd7a46153a09 (diff)
mount, srv: add -N flag to skip authentication and attach anonymously as "none"
-rw-r--r--sys/man/1/bind7
-rw-r--r--sys/man/4/srv5
-rw-r--r--sys/src/cmd/mount.c36
-rw-r--r--sys/src/cmd/srv.c17
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;