From ffb120199a951396f7e99aeca453715dc4e65601 Mon Sep 17 00:00:00 2001 From: cinap_lenrek Date: Sun, 23 Mar 2014 18:10:04 +0100 Subject: [PATCH] auth/login: find authdom instead of using hardcoded cs.bell-labs.com (thanks erik) --- sys/man/8/auth | 4 ++++ sys/src/cmd/auth/login.c | 51 +++++++++++++++++++++++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/sys/man/8/auth b/sys/man/8/auth index 3a537262a..a73076672 100644 --- a/sys/man/8/auth +++ b/sys/man/8/auth @@ -35,6 +35,10 @@ changeuser, convkeys, convkeys2, printnetkey, status, enable, disable, authsrv, .B auth/wrkey .PP .B auth/login +[ +.B -a +.I authdom +] .I user .PP .B auth/newns diff --git a/sys/src/cmd/auth/login.c b/sys/src/cmd/auth/login.c index 4f487c513..79a415806 100644 --- a/sys/src/cmd/auth/login.c +++ b/sys/src/cmd/auth/login.c @@ -2,6 +2,10 @@ #include #include #include +#include +#include + +char *authdom; void readln(char *prompt, char *line, int len, int raw) @@ -110,6 +114,35 @@ mountfactotum(char *srvname) close(fd); } +/* + * find 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 */ @@ -141,10 +174,17 @@ startfactotum(char *user, char *password, char *srvname) 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[]) { @@ -156,8 +196,17 @@ main(int argc, char *argv[]) AuthInfo *ai; ARGBEGIN{ + case 'a': + authdom = EARGF(usage()); + break; + default: + usage(); + break; }ARGEND; + if(argc != 1) + usage(); + rfork(RFENVG|RFNAMEG); service = getenv("service");