xref: /plan9/sys/src/cmd/ssh1/authsrvtis.c (revision 63afb9a5d3f910047231762bcce0ee49fed3d07c)
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