1 #include "ssh.h" 2 3 static AuthInfo* 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