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