1*8ccd4a63SDavid du Colombier #include <u.h>
2*8ccd4a63SDavid du Colombier #include <libc.h>
3*8ccd4a63SDavid du Colombier #include <authsrv.h>
4*8ccd4a63SDavid du Colombier #include <bio.h>
5*8ccd4a63SDavid du Colombier #include <ndb.h>
6*8ccd4a63SDavid du Colombier
7*8ccd4a63SDavid du Colombier int
authdial(char * netroot,char * dom)8*8ccd4a63SDavid du Colombier authdial(char *netroot, char *dom)
9*8ccd4a63SDavid du Colombier {
10*8ccd4a63SDavid du Colombier char server[Ndbvlen];
11*8ccd4a63SDavid du Colombier Ndbtuple *nt;
12*8ccd4a63SDavid du Colombier
13*8ccd4a63SDavid du Colombier
14*8ccd4a63SDavid du Colombier if(dom != nil){
15*8ccd4a63SDavid du Colombier /* look up an auth server in an authentication domain */
16*8ccd4a63SDavid du Colombier nt = csgetval(netroot, "authdom", dom, "auth", server);
17*8ccd4a63SDavid du Colombier
18*8ccd4a63SDavid du Colombier /* if that didn't work, just try the IP domain */
19*8ccd4a63SDavid du Colombier if(nt == nil)
20*8ccd4a63SDavid du Colombier nt = csgetval(netroot, "dom", dom, "auth", server);
21*8ccd4a63SDavid du Colombier if(nt == nil){
22*8ccd4a63SDavid du Colombier werrstr("no auth server found for %s", dom);
23*8ccd4a63SDavid du Colombier return -1;
24*8ccd4a63SDavid du Colombier }
25*8ccd4a63SDavid du Colombier ndbfree(nt);
26*8ccd4a63SDavid du Colombier return dial(netmkaddr(server, netroot, "ticket"), 0, 0, 0);
27*8ccd4a63SDavid du Colombier } else {
28*8ccd4a63SDavid du Colombier /* look for one relative to my machine */
29*8ccd4a63SDavid du Colombier return dial(netmkaddr("$auth", netroot, "ticket"), 0, 0, 0);
30*8ccd4a63SDavid du Colombier }
31*8ccd4a63SDavid du Colombier }
32