1*63afb9a5SDavid du Colombier #include "ssh.h"
2*63afb9a5SDavid du Colombier
3*63afb9a5SDavid du Colombier static int
authtisfn(Conn * c)4*63afb9a5SDavid du Colombier authtisfn(Conn *c)
5*63afb9a5SDavid du Colombier {
6*63afb9a5SDavid du Colombier int fd, n;
7*63afb9a5SDavid du Colombier char *chal, resp[256];
8*63afb9a5SDavid du Colombier Msg *m;
9*63afb9a5SDavid du Colombier
10*63afb9a5SDavid du Colombier if(!c->interactive)
11*63afb9a5SDavid du Colombier return -1;
12*63afb9a5SDavid du Colombier
13*63afb9a5SDavid du Colombier debug(DBG_AUTH, "try TIS\n");
14*63afb9a5SDavid du Colombier sendmsg(allocmsg(c, SSH_CMSG_AUTH_TIS, 0));
15*63afb9a5SDavid du Colombier
16*63afb9a5SDavid du Colombier m = recvmsg(c, -1);
17*63afb9a5SDavid du Colombier switch(m->type){
18*63afb9a5SDavid du Colombier default:
19*63afb9a5SDavid du Colombier badmsg(m, SSH_SMSG_AUTH_TIS_CHALLENGE);
20*63afb9a5SDavid du Colombier case SSH_SMSG_FAILURE:
21*63afb9a5SDavid du Colombier free(m);
22*63afb9a5SDavid du Colombier return -1;
23*63afb9a5SDavid du Colombier case SSH_SMSG_AUTH_TIS_CHALLENGE:
24*63afb9a5SDavid du Colombier break;
25*63afb9a5SDavid du Colombier }
26*63afb9a5SDavid du Colombier
27*63afb9a5SDavid du Colombier chal = getstring(m);
28*63afb9a5SDavid du Colombier free(m);
29*63afb9a5SDavid du Colombier
30*63afb9a5SDavid du Colombier if((fd = open("/dev/cons", ORDWR)) < 0)
31*63afb9a5SDavid du Colombier error("can't open console");
32*63afb9a5SDavid du Colombier
33*63afb9a5SDavid du Colombier fprint(fd, "TIS Authentication\n%s", chal);
34*63afb9a5SDavid du Colombier n = read(fd, resp, sizeof resp-1);
35*63afb9a5SDavid du Colombier if(n < 0)
36*63afb9a5SDavid du Colombier resp[0] = '\0';
37*63afb9a5SDavid du Colombier else
38*63afb9a5SDavid du Colombier resp[n] = '\0';
39*63afb9a5SDavid du Colombier
40*63afb9a5SDavid du Colombier if(resp[0] == 0 || resp[0] == '\n')
41*63afb9a5SDavid du Colombier return -1;
42*63afb9a5SDavid du Colombier
43*63afb9a5SDavid du Colombier m = allocmsg(c, SSH_CMSG_AUTH_TIS_RESPONSE, 4+strlen(resp));
44*63afb9a5SDavid du Colombier putstring(m, resp);
45*63afb9a5SDavid du Colombier sendmsg(m);
46*63afb9a5SDavid du Colombier
47*63afb9a5SDavid du Colombier m = recvmsg(c, -1);
48*63afb9a5SDavid du Colombier switch(m->type){
49*63afb9a5SDavid du Colombier default:
50*63afb9a5SDavid du Colombier badmsg(m, 0);
51*63afb9a5SDavid du Colombier case SSH_SMSG_SUCCESS:
52*63afb9a5SDavid du Colombier free(m);
53*63afb9a5SDavid du Colombier return 0;
54*63afb9a5SDavid du Colombier case SSH_SMSG_FAILURE:
55*63afb9a5SDavid du Colombier free(m);
56*63afb9a5SDavid du Colombier return -1;
57*63afb9a5SDavid du Colombier }
58*63afb9a5SDavid du Colombier }
59*63afb9a5SDavid du Colombier
60*63afb9a5SDavid du Colombier Auth authtis =
61*63afb9a5SDavid du Colombier {
62*63afb9a5SDavid du Colombier SSH_AUTH_TIS,
63*63afb9a5SDavid du Colombier "tis",
64*63afb9a5SDavid du Colombier authtisfn,
65*63afb9a5SDavid du Colombier };
66