diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-12-22 21:39:59 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-12-22 21:39:59 +0100 |
commit | 82bf19941ed8dc4626e8fb3c12b2f67d7d331093 (patch) | |
tree | 7e343feefd6ad2ee224fd7ae8c954d66eea7a014 /sys/src/cmd/auth/newns.c | |
parent | 640adc8f8211d26f75c79b2c345040b9d490811f (diff) |
auth/as, auth/none, auth/newns: consistent handling of command arguments, cleanup
Diffstat (limited to 'sys/src/cmd/auth/newns.c')
-rw-r--r-- | sys/src/cmd/auth/newns.c | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/sys/src/cmd/auth/newns.c b/sys/src/cmd/auth/newns.c index 792e8e55c..f1762d819 100644 --- a/sys/src/cmd/auth/newns.c +++ b/sys/src/cmd/auth/newns.c @@ -2,36 +2,35 @@ #include <libc.h> #include <auth.h> +extern int newnsdebug; + +char *defargv[] = { "/bin/rc", "-i", nil }; +char *namespace = "/lib/namespace"; +int add = 0; + void usage(void) { - fprint(2, "usage: newns [-ad] [-n namespace] [cmd [args...]]\n"); + fprint(2, "usage: %s [-ad] [-n namespace] [cmd [args...]]\n", argv0); exits("usage"); } -static int -rooted(char *s) +void +run(char **a) { - if(s[0] == '/') - return 1; - if(s[0] == '.' && s[1] == '/') - return 1; - if(s[0] == '.' && s[1] == '.' && s[2] == '/') - return 1; - return 0; + exec(a[0], a); + + if(a[0][0] != '/' && a[0][0] != '#' && + (a[0][0] != '.' || (a[0][1] != '/' && + (a[0][1] != '.' || a[0][2] != '/')))) + exec(smprint("/bin/%s", a[0]), a); + + sysfatal("exec: %s: %r", a[0]); } void main(int argc, char **argv) { - extern int newnsdebug; - char *defargv[] = { "/bin/rc", "-i", nil }; - char *nsfile, err[ERRMAX]; - int add; - - rfork(RFNAMEG); - add = 0; - nsfile = "/lib/namespace"; ARGBEGIN{ case 'a': add = 1; @@ -40,23 +39,21 @@ main(int argc, char **argv) newnsdebug = 1; break; case 'n': - nsfile = ARGF(); + namespace = EARGF(usage()); break; default: usage(); break; }ARGEND + + if(add){ + rfork(RFNAMEG); + addns(getuser(), namespace); + }else + newns(getuser(), namespace); + if(argc == 0) argv = defargv; - if (add) - addns(getuser(), nsfile); - else - newns(getuser(), nsfile); - exec(argv[0], argv); - if(!rooted(argv[0])){ - rerrstr(err, sizeof err); - exec(smprint("/bin/%s", argv[0]), argv); - errstr(err, sizeof err); - } - sysfatal("exec: %s: %r", argv[0]); + + run(argv); } |