look up authdom Reference: /n/atom/patch/applied/loginauthdom Date: Sun Mar 23 15:15:44 CET 2014 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/auth/login.c Sun Mar 23 15:15:40 2014 +++ /sys/src/cmd/auth/login.c Sun Mar 23 15:15:41 2014 @@ -111,6 +111,38 @@ } /* + * find authdom + */ +#include +#include +char *authdom; +char* +getauthdom(void) +{ + char *sysname, *s; + Ndbtuple *t, *p; + + if(authdom != nil) + return authdom; + + sysname = getenv("sysname"); + if(sysname == nil) + return strdup("cs.bell-labs.com"); + + s = "authdom"; + t = csipinfo(nil, "sys", sysname, &s, 1); + free(sysname); + for(p = t; p != nil; p = p->entry) + if(strcmp(p->attr, s) == 0){ + authdom = strdup(p->val); + break; + } + ndbfree(t); +fprint(2, "authdom=%s\n", authdom); + return authdom; +} + +/* * start a new factotum and pass it the username and password */ void @@ -141,11 +173,18 @@ fd = open("/mnt/factotum/ctl", ORDWR); if(fd < 0) sysfatal("opening factotum: %r"); - fprint(fd, "key proto=p9sk1 dom=cs.bell-labs.com user=%q !password=%q", user, password); + fprint(fd, "key proto=p9sk1 dom=%s user=%q !password=%q", getauthdom(), user, password); close(fd); } void +usage(void) +{ + fprint(2, "usage: %s [-a authdom] user\n", argv0); + exits(""); +} + +void main(int argc, char *argv[]) { char pass[ANAMELEN]; @@ -156,7 +195,16 @@ AuthInfo *ai; ARGBEGIN{ + case 'a': + authdom = EARGF(usage()); + break; + default: + usage(); + break; }ARGEND; + + if(argc != 1) + usage(); rfork(RFENVG|RFNAMEG);