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