xref: /plan9/sys/src/cmd/unix/drawterm/libauthsrv/authdial.c (revision 8ccd4a6360d974db7bd7bbd4f37e7018419ea908)
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