1*63afb9a5SDavid du Colombier #include "ssh.h"
2*63afb9a5SDavid du Colombier
3*63afb9a5SDavid du Colombier static int
authpasswordfn(Conn * c)4*63afb9a5SDavid du Colombier authpasswordfn(Conn *c)
5*63afb9a5SDavid du Colombier {
6*63afb9a5SDavid du Colombier Msg *m;
7*63afb9a5SDavid du Colombier UserPasswd *up;
8*63afb9a5SDavid du Colombier
9*63afb9a5SDavid du Colombier up = auth_getuserpasswd(c->interactive ? auth_getkey : nil, "proto=pass service=ssh server=%q user=%q", c->host, c->user);
10*63afb9a5SDavid du Colombier if(up == nil){
11*63afb9a5SDavid du Colombier debug(DBG_AUTH, "getuserpasswd returned nothing (interactive=%d)\n", c->interactive);
12*63afb9a5SDavid du Colombier return -1;
13*63afb9a5SDavid du Colombier }
14*63afb9a5SDavid du Colombier
15*63afb9a5SDavid du Colombier debug(DBG_AUTH, "try using password from factotum\n");
16*63afb9a5SDavid du Colombier m = allocmsg(c, SSH_CMSG_AUTH_PASSWORD, 4+strlen(up->passwd));
17*63afb9a5SDavid du Colombier putstring(m, up->passwd);
18*63afb9a5SDavid du Colombier sendmsg(m);
19*63afb9a5SDavid du Colombier
20*63afb9a5SDavid du Colombier m = recvmsg(c, -1);
21*63afb9a5SDavid du Colombier switch(m->type){
22*63afb9a5SDavid du Colombier default:
23*63afb9a5SDavid du Colombier badmsg(m, 0);
24*63afb9a5SDavid du Colombier case SSH_SMSG_SUCCESS:
25*63afb9a5SDavid du Colombier free(m);
26*63afb9a5SDavid du Colombier return 0;
27*63afb9a5SDavid du Colombier case SSH_SMSG_FAILURE:
28*63afb9a5SDavid du Colombier free(m);
29*63afb9a5SDavid du Colombier return -1;
30*63afb9a5SDavid du Colombier }
31*63afb9a5SDavid du Colombier }
32*63afb9a5SDavid du Colombier
33*63afb9a5SDavid du Colombier Auth authpassword =
34*63afb9a5SDavid du Colombier {
35*63afb9a5SDavid du Colombier SSH_AUTH_PASSWORD,
36*63afb9a5SDavid du Colombier "password",
37*63afb9a5SDavid du Colombier authpasswordfn,
38*63afb9a5SDavid du Colombier };
39