Better test harness for newns.
[rsc] --rw-rw-r-- M 923680 rsc sys 962 Oct 5 15:28 sys/src/cmd/auth/newns.c
/n/sourcesdump/2005/1005/plan9/sys/src/cmd/auth/newns.c:5,22 -
/n/sourcesdump/2005/1006/plan9/sys/src/cmd/auth/newns.c:5,43
void
usage(void)
{
- fprint(2, "usage: newns [-n namespace] [cmd [args...]]\n");
+ fprint(2, "usage: newns [-ad] [-n namespace] [cmd [args...]]\n");
exits("usage");
}
+ static int
+ rooted(char *s)
+ {
+ if(s[0] == '/')
+ return 1;
+ if(s[0] == '.' && s[1] == '/')
+ return 1;
+ if(s[0] == '.' && s[1] == '.' && s[2] == '/')
+ return 1;
+ return 0;
+ }
+
void
main(int argc, char **argv)
{
- char *nsfile;
+ extern int newnsdebug;
char *defargv[] = { "/bin/rc", "-i", nil };
+ char *nsfile, err[ERRMAX];
+ int add;
+ add = 0;
nsfile = "/lib/namespace";
ARGBEGIN{
+ case 'a':
+ add = 1;
+ break;
+ case 'd':
+ newnsdebug = 1;
+ break;
case 'n':
nsfile = ARGF();
break;
/n/sourcesdump/2005/1005/plan9/sys/src/cmd/auth/newns.c:26,32 -
/n/sourcesdump/2005/1006/plan9/sys/src/cmd/auth/newns.c:47,61
}ARGEND
if(argc == 0)
argv = defargv;
- newns(getuser(), nsfile);
+ 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]);
}
|