11 dorpc(AuthRpc *rpc, char *verb, char *val, int len, AuthGetkey *getkey)
16 if((ret = auth_rpc(rpc, verb, val, len)) != ARneedkey && ret != ARbadkey)
19 return ARgiveup; /* don't know how */
20 if((*getkey)(rpc->arg) < 0)
21 return ARgiveup; /* user punted */
26 dorespond(void *chal, uint nchal, char *user, uint nuser, void *resp, uint nresp,
27 AuthInfo **ai, AuthGetkey *getkey, char *fmt, va_list arg)
34 if((afd = open("/mnt/factotum/rpc", ORDWR|OCEXEC)) < 0)
37 if((rpc = auth_allocrpc(afd)) == nil){
42 quotefmtinstall(); /* just in case */
44 if((p = vsmprint(fmt, arg))==nil
45 || dorpc(rpc, "start", p, strlen(p), getkey) != ARok
46 || dorpc(rpc, "write", chal, nchal, getkey) != ARok
47 || dorpc(rpc, "read", nil, 0, getkey) != ARok){
57 memmove(resp, rpc->arg, nresp);
60 *ai = auth_getinfo(rpc);
62 if((a = auth_attr(rpc)) != nil
63 && (s = _strfindattr(a, "user")) != nil && strlen(s) < nuser)
75 auth_respond(void *chal, uint nchal, char *user, uint nuser, void *resp, uint nresp,
76 AuthGetkey *getkey, char *fmt, ...)
82 ret = dorespond(chal, nchal, user, nuser, resp, nresp, nil, getkey, fmt, arg);
88 auth_respondAI(void *chal, uint nchal, char *user, uint nuser, void *resp, uint nresp,
89 AuthInfo **ai, AuthGetkey *getkey, char *fmt, ...)
95 ret = dorespond(chal, nchal, user, nuser, resp, nresp, ai, getkey, fmt, arg);