more bug fixes
This commit is contained in:
parent
8e4cf69e46
commit
e1a2296329
3 changed files with 14 additions and 25 deletions
|
|
@ -260,7 +260,7 @@ rpcrespondn(Conv *c, char *verb, void *data, int count)
|
||||||
p = c->reply + strlen(c->reply);
|
p = c->reply + strlen(c->reply);
|
||||||
*p++ = ' ';
|
*p++ = ' ';
|
||||||
if(hex){
|
if(hex){
|
||||||
enc16(p, 2*count, data, count);
|
enc16(p, 2*count+1, data, count);
|
||||||
p += 2*count;
|
p += 2*count;
|
||||||
}else{
|
}else{
|
||||||
memmove(p, data, count);
|
memmove(p, data, count);
|
||||||
|
|
|
||||||
|
|
@ -66,12 +66,12 @@ xrsadecrypt(Conv *c)
|
||||||
if(m == nil)
|
if(m == nil)
|
||||||
goto out;
|
goto out;
|
||||||
if(strcmp(role, "decrypt") == 0)
|
if(strcmp(role, "decrypt") == 0)
|
||||||
mm = rsadecrypt(key, m, m);
|
mm = rsadecrypt(key, m, nil);
|
||||||
else
|
else
|
||||||
mm = rsaencrypt(&key->pub, m, nil);
|
mm = rsaencrypt(&key->pub, m, nil);
|
||||||
if(mm == nil)
|
if(mm == nil)
|
||||||
goto out;
|
goto out;
|
||||||
n = mptobe(m, buf, sizeof buf, nil);
|
n = mptobe(mm, buf, sizeof buf, nil);
|
||||||
|
|
||||||
/* send response */
|
/* send response */
|
||||||
c->state = "write";
|
c->state = "write";
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,9 @@ threadmain(int argc, char **argv)
|
||||||
fmtinstall('[', encodefmt);
|
fmtinstall('[', encodefmt);
|
||||||
|
|
||||||
ARGBEGIN{
|
ARGBEGIN{
|
||||||
|
case '9':
|
||||||
|
chatty9pclient++;
|
||||||
|
break;
|
||||||
case 'D':
|
case 'D':
|
||||||
chatty++;
|
chatty++;
|
||||||
break;
|
break;
|
||||||
|
|
@ -138,8 +141,6 @@ threadmain(int argc, char **argv)
|
||||||
if((afd = announce(addr, adir)) < 0)
|
if((afd = announce(addr, adir)) < 0)
|
||||||
sysfatal("announce %s: %r", addr);
|
sysfatal("announce %s: %r", addr);
|
||||||
|
|
||||||
proccreate(listenproc, nil, STACK);
|
|
||||||
|
|
||||||
print("SSH_AUTH_SOCK=%s;\n", sock);
|
print("SSH_AUTH_SOCK=%s;\n", sock);
|
||||||
if(export)
|
if(export)
|
||||||
print("export SSH_AUTH_SOCK;\n");
|
print("export SSH_AUTH_SOCK;\n");
|
||||||
|
|
@ -147,6 +148,8 @@ threadmain(int argc, char **argv)
|
||||||
if(export)
|
if(export)
|
||||||
print("export SSH_AGENT_PID;\n");
|
print("export SSH_AGENT_PID;\n");
|
||||||
close(1);
|
close(1);
|
||||||
|
rfork(RFNOTEG);
|
||||||
|
proccreate(listenproc, nil, STACK);
|
||||||
threadexits(0);
|
threadexits(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -655,7 +658,7 @@ listkeys(Msg *m, int version)
|
||||||
nk = 0;
|
nk = 0;
|
||||||
pnk = m->p;
|
pnk = m->p;
|
||||||
put4(m, 0);
|
put4(m, 0);
|
||||||
if((fid = nsopen("factotum", nil, "ctl", OREAD)) == nil){
|
if((fid = nsopen(factotum, nil, "ctl", OREAD)) == nil){
|
||||||
fprint(2, "ssh-agent: open factotum: %r\n");
|
fprint(2, "ssh-agent: open factotum: %r\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
@ -775,7 +778,6 @@ static int
|
||||||
dorsa(Aconn *a, mpint *mod, mpint *exp, mpint *chal, uchar chalbuf[32])
|
dorsa(Aconn *a, mpint *mod, mpint *exp, mpint *chal, uchar chalbuf[32])
|
||||||
{
|
{
|
||||||
AuthRpc *rpc;
|
AuthRpc *rpc;
|
||||||
mpint *m;
|
|
||||||
char buf[4096], *p;
|
char buf[4096], *p;
|
||||||
mpint *decr, *unpad;
|
mpint *decr, *unpad;
|
||||||
|
|
||||||
|
|
@ -784,7 +786,7 @@ dorsa(Aconn *a, mpint *mod, mpint *exp, mpint *chal, uchar chalbuf[32])
|
||||||
fprint(2, "ssh-agent: auth_allocrpc: %r\n");
|
fprint(2, "ssh-agent: auth_allocrpc: %r\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
snprint(buf, sizeof buf, "proto=rsa service=ssh role=client n=%lB ek=%lB", mod, exp);
|
snprint(buf, sizeof buf, "proto=rsa service=ssh role=decrypt n=%lB ek=%lB", mod, exp);
|
||||||
if(chatty)
|
if(chatty)
|
||||||
fprint(2, "ssh-agent: start %s\n", buf);
|
fprint(2, "ssh-agent: start %s\n", buf);
|
||||||
if(auth_rpc(rpc, "start", buf, strlen(buf)) != ARok){
|
if(auth_rpc(rpc, "start", buf, strlen(buf)) != ARok){
|
||||||
|
|
@ -793,20 +795,6 @@ dorsa(Aconn *a, mpint *mod, mpint *exp, mpint *chal, uchar chalbuf[32])
|
||||||
auth_freerpc(rpc);
|
auth_freerpc(rpc);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
m = nil;
|
|
||||||
if(auth_rpc(rpc, "read", nil, 0) != ARok){
|
|
||||||
fprint(2, "ssh-agent: did not find negotiated key\n");
|
|
||||||
goto Die;
|
|
||||||
}
|
|
||||||
if(chatty)
|
|
||||||
fprint(2, "read key %s\n", (char*)rpc->arg);
|
|
||||||
m = strtomp(rpc->arg, nil, 16, nil);
|
|
||||||
if(mpcmp(m, mod) != 0){
|
|
||||||
fprint(2, "ssh-agent: found wrong key\n");
|
|
||||||
mpfree(m);
|
|
||||||
goto Die;
|
|
||||||
}
|
|
||||||
mpfree(m);
|
|
||||||
|
|
||||||
p = mptoa(chal, 16, nil, 0);
|
p = mptoa(chal, 16, nil, 0);
|
||||||
if(p == nil){
|
if(p == nil){
|
||||||
|
|
@ -815,13 +803,13 @@ dorsa(Aconn *a, mpint *mod, mpint *exp, mpint *chal, uchar chalbuf[32])
|
||||||
}
|
}
|
||||||
if(chatty)
|
if(chatty)
|
||||||
fprint(2, "ssh-agent: challenge %B => %s\n", chal, p);
|
fprint(2, "ssh-agent: challenge %B => %s\n", chal, p);
|
||||||
if(auth_rpc(rpc, "write", p, strlen(p)) != ARok){
|
if(auth_rpc(rpc, "writehex", p, strlen(p)) != ARok){
|
||||||
fprint(2, "ssh-agent: dorsa: auth 'write': %r\n");
|
fprint(2, "ssh-agent: dorsa: auth 'write': %r\n");
|
||||||
free(p);
|
free(p);
|
||||||
goto Die;
|
goto Die;
|
||||||
}
|
}
|
||||||
free(p);
|
free(p);
|
||||||
if(auth_rpc(rpc, "read", nil, 0) != ARok){
|
if(auth_rpc(rpc, "readhex", nil, 0) != ARok){
|
||||||
fprint(2, "ssh-agent: dorsa: auth 'read': %r\n");
|
fprint(2, "ssh-agent: dorsa: auth 'read': %r\n");
|
||||||
goto Die;
|
goto Die;
|
||||||
}
|
}
|
||||||
|
|
@ -973,6 +961,7 @@ runmsg(Aconn *a)
|
||||||
if(s == nil)
|
if(s == nil)
|
||||||
goto Failchal;
|
goto Failchal;
|
||||||
md5(sessid, 16, digest, s);
|
md5(sessid, 16, digest, s);
|
||||||
|
print("md5 %.*H %.*H => %.*H\n", 32, chalbuf, 16, sessid, MD5dlen, digest);
|
||||||
|
|
||||||
newreply(&m, SSH_AGENT_RSA_RESPONSE);
|
newreply(&m, SSH_AGENT_RSA_RESPONSE);
|
||||||
putn(&m, digest, 16);
|
putn(&m, digest, 16);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue