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