1 #include "ssh.h"
2
3 static AuthInfo*
authsrvtisfn(Conn * conn,Msg * m)4 authsrvtisfn(Conn *conn, Msg *m)
5 {
6 char *s;
7 AuthInfo *ai;
8 Chalstate *c;
9
10 free(m);
11 if((c = auth_challenge("proto=p9cr user=%q role=server", conn->user)) == nil){
12 sshlog("auth_challenge failed for %s", conn->user);
13 return nil;
14 }
15 s = smprint("Challenge: %s\nResponse: ", c->chal);
16 if(s == nil){
17 auth_freechal(c);
18 return nil;
19 }
20 m = allocmsg(conn, SSH_SMSG_AUTH_TIS_CHALLENGE, 4+strlen(s));
21 putstring(m, s);
22 sendmsg(m);
23 free(s);
24
25 m = recvmsg(conn, 0);
26 if(m == nil){
27 auth_freechal(c);
28 return nil;
29 }
30 if(m->type != SSH_CMSG_AUTH_TIS_RESPONSE){
31 /*
32 * apparently you can just give up on
33 * this protocol and start a new one.
34 */
35 unrecvmsg(conn, m);
36 return nil;
37 }
38
39 c->resp = getstring(m);
40 c->nresp = strlen(c->resp);
41 ai = auth_response(c);
42 auth_freechal(c);
43 return ai;
44 }
45
46 Authsrv authsrvtis =
47 {
48 SSH_AUTH_TIS,
49 "tis",
50 SSH_CMSG_AUTH_TIS,
51 authsrvtisfn,
52 };
53