aboutsummaryrefslogtreecommitdiff
path: root/src/libauthsrv/authdial.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libauthsrv/authdial.c')
-rw-r--r--src/libauthsrv/authdial.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/libauthsrv/authdial.c b/src/libauthsrv/authdial.c
index 5e608058..5e305a54 100644
--- a/src/libauthsrv/authdial.c
+++ b/src/libauthsrv/authdial.c
@@ -9,23 +9,30 @@ authdial(char *netroot, char *dom)
{
char *p;
int rv;
-
- if(dom != nil){
- /* look up an auth server in an authentication domain */
- p = csgetvalue(netroot, "authdom", dom, "auth", nil);
+ Ndb *db;
+ char *file;
- /* if that didn't work, just try the IP domain */
- if(p == nil)
- p = csgetvalue(netroot, "dom", dom, "auth", nil);
- if(p == nil){
- werrstr("no auth server found for %s", dom);
+ if(dom){
+ file = unsharp("#9/ndb/local");
+ db = ndbopen(file);
+ if(db == nil){
+ fprint(2, "open %s: %r\n", file);
+ free(file);
return -1;
}
- rv = dial(netmkaddr(p, netroot, "ticket"), 0, 0, 0);
- free(p);
+ free(file);
+ p = ndbgetvalue(db, nil, "authdom", dom, "auth", nil);
+ if(p == nil)
+ p = ndbgetvalue(db, nil, "dom", dom, "auth", nil);
+ if(p == nil)
+ p = dom;
+ rv = dial(netmkaddr(p, "tcp", "ticket"), 0, 0, 0);
+ if(p != dom)
+ free(p);
return rv;
- } else {
- /* look for one relative to my machine */
- return dial(netmkaddr("$auth", netroot, "ticket"), 0, 0, 0);
}
+ p = getenv("auth");
+ if(p == nil)
+ p = "$auth";
+ return dial(netmkaddr(p, "tcp", "ticket"), 0, 0, 0);
}