summaryrefslogtreecommitdiff
path: root/sys/src/libauthsrv/authdial.c
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 15:46:40 +0300
commite5888a1ffdae813d7575f5fb02275c6bb07e5199 (patch)
treed8d51eac403f07814b9e936eed0c9a79195e2450 /sys/src/libauthsrv/authdial.c
Import sources from 2011-03-30 iso image
Diffstat (limited to 'sys/src/libauthsrv/authdial.c')
-rwxr-xr-xsys/src/libauthsrv/authdial.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/sys/src/libauthsrv/authdial.c b/sys/src/libauthsrv/authdial.c
new file mode 100755
index 000000000..c54803ba7
--- /dev/null
+++ b/sys/src/libauthsrv/authdial.c
@@ -0,0 +1,36 @@
+#include <u.h>
+#include <libc.h>
+#include <authsrv.h>
+#include <bio.h>
+#include <ndb.h>
+
+int
+authdial(char *netroot, char *dom)
+{
+ char *p;
+ int rv;
+
+ if(dom == nil)
+ /* look for one relative to my machine */
+ return dial(netmkaddr("$auth", netroot, "ticket"), 0, 0, 0);
+
+ /* look up an auth server in an authentication domain */
+ p = csgetvalue(netroot, "authdom", dom, "auth", nil);
+
+ /* if that didn't work, just try the IP domain */
+ if(p == nil)
+ p = csgetvalue(netroot, "dom", dom, "auth", nil);
+ /*
+ * if that didn't work, try p9auth.$dom. this is very helpful if
+ * you can't edit /lib/ndb.
+ */
+ if(p == nil)
+ p = smprint("p9auth.%s", dom);
+ if(p == nil){ /* should no longer ever happen */
+ werrstr("no auth server found for %s", dom);
+ return -1;
+ }
+ rv = dial(netmkaddr(p, netroot, "ticket"), 0, 0, 0);
+ free(p);
+ return rv;
+}