]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - pageant.c
Remove duplicate definition of AGENT_MAX_MSGLEN.
[PuTTY.git] / pageant.c
index da320681ff138feddb5d85bf6f4769e583cf1ee2..31a5540c45f9d36275d532de5fad93d6e6f36b50 100644 (file)
--- a/pageant.c
+++ b/pageant.c
@@ -674,7 +674,7 @@ void *pageant_handle_msg(const void *msg, int msglen, int *outlen,
            }
 
            bloblen = msgend - p;
-           key->data = key->alg->openssh_createkey(&p, &bloblen);
+           key->data = key->alg->openssh_createkey(key->alg, &p, &bloblen);
            if (!key->data) {
                sfree(key);
                 fail_reason = "key setup failed";
@@ -1100,6 +1100,7 @@ static int pageant_listen_accepting(Plug plug,
     struct pageant_listen_state *pl = (struct pageant_listen_state *)plug;
     struct pageant_conn_state *pc;
     const char *err;
+    char *peerinfo;
 
     pc = snew(struct pageant_conn_state);
     pc->fn = &connection_fn_table;
@@ -1116,8 +1117,13 @@ static int pageant_listen_accepting(Plug plug,
 
     sk_set_frozen(pc->connsock, 0);
 
-    /* FIXME: can we get any useful peer id info? */
-    plog(pl->logctx, pl->logfn, "%p: new connection", pc);
+    peerinfo = sk_peer_info(pc->connsock);
+    if (peerinfo) {
+        plog(pl->logctx, pl->logfn, "%p: new connection from %s",
+             pc, peerinfo);
+    } else {
+        plog(pl->logctx, pl->logfn, "%p: new connection", pc);
+    }
 
     return 0;
 }
@@ -1190,12 +1196,12 @@ void *pageant_get_keylist1(int *length)
     if (!pageant_local) {
        unsigned char request[5], *response;
        void *vresponse;
-       int resplen, retval;
+       int resplen;
+
        request[4] = SSH1_AGENTC_REQUEST_RSA_IDENTITIES;
        PUT_32BIT(request, 1);
 
-       retval = agent_query(request, 5, &vresponse, &resplen, NULL, NULL);
-       assert(retval == 1);
+        agent_query_synchronous(request, 5, &vresponse, &resplen);
        response = vresponse;
        if (resplen < 5 || response[4] != SSH1_AGENT_RSA_IDENTITIES_ANSWER) {
             sfree(response);
@@ -1221,13 +1227,12 @@ void *pageant_get_keylist2(int *length)
     if (!pageant_local) {
        unsigned char request[5], *response;
        void *vresponse;
-       int resplen, retval;
+       int resplen;
 
        request[4] = SSH2_AGENTC_REQUEST_IDENTITIES;
        PUT_32BIT(request, 1);
 
-       retval = agent_query(request, 5, &vresponse, &resplen, NULL, NULL);
-       assert(retval == 1);
+       agent_query_synchronous(request, 5, &vresponse, &resplen);
        response = vresponse;
        if (resplen < 5 || response[4] != SSH2_AGENT_IDENTITIES_ANSWER) {
             sfree(response);
@@ -1339,8 +1344,11 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
                         *retstr = dupstr("Received broken key list from agent");
                         return PAGEANT_ACTION_FAILURE;
                    }
-                   n = toint(4 + GET_32BIT(p));
-                   if (n < 0 || keylistlen < n) {
+                   n = GET_32BIT(p);
+                    p += 4;
+                    keylistlen -= 4;
+
+                   if (n < 0 || n > keylistlen) {
                         *retstr = dupstr("Received broken key list from agent");
                         return PAGEANT_ACTION_FAILURE;
                    }
@@ -1354,8 +1362,11 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
                         *retstr = dupstr("Received broken key list from agent");
                         return PAGEANT_ACTION_FAILURE;
                    }
-                   n = toint(4 + GET_32BIT(p));
-                   if (n < 0 || keylistlen < n) {
+                   n = GET_32BIT(p);
+                    p += 4;
+                    keylistlen -= 4;
+
+                   if (n < 0 || n > keylistlen) {
                         *retstr = dupstr("Received broken key list from agent");
                         return PAGEANT_ACTION_FAILURE;
                    }
@@ -1465,7 +1476,7 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
        if (!pageant_local) {
            unsigned char *request, *response;
            void *vresponse;
-           int reqlen, clen, resplen, ret;
+           int reqlen, clen, resplen;
 
            clen = strlen(rkey->comment);
 
@@ -1498,9 +1509,7 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
            reqlen += 4 + clen;
            PUT_32BIT(request, reqlen - 4);
 
-           ret = agent_query(request, reqlen, &vresponse, &resplen,
-                             NULL, NULL);
-           assert(ret == 1);
+           agent_query_synchronous(request, reqlen, &vresponse, &resplen);
            response = vresponse;
            if (resplen < 5 || response[4] != SSH_AGENT_SUCCESS) {
                *retstr = dupstr("The already running Pageant "
@@ -1518,7 +1527,7 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
        if (!pageant_local) {
            unsigned char *request, *response;
            void *vresponse;
-           int reqlen, alglen, clen, keybloblen, resplen, ret;
+           int reqlen, alglen, clen, keybloblen, resplen;
            alglen = strlen(skey->alg->name);
            clen = strlen(skey->comment);
 
@@ -1546,9 +1555,7 @@ int pageant_add_keyfile(Filename *filename, const char *passphrase,
            reqlen += clen + 4;
            PUT_32BIT(request, reqlen - 4);
 
-           ret = agent_query(request, reqlen, &vresponse, &resplen,
-                             NULL, NULL);
-           assert(ret == 1);
+           agent_query_synchronous(request, reqlen, &vresponse, &resplen);
            response = vresponse;
            if (resplen < 5 || response[4] != SSH_AGENT_SUCCESS) {
                *retstr = dupstr("The already running Pageant "
@@ -1735,8 +1742,7 @@ int pageant_delete_key(struct pageant_pubkey *key, char **retstr)
         memcpy(request + 9, key->blob, key->bloblen);
     }
 
-    ret = agent_query(request, reqlen, &vresponse, &resplen, NULL, NULL);
-    assert(ret == 1);
+    agent_query_synchronous(request, reqlen, &vresponse, &resplen);
     response = vresponse;
     if (resplen < 5 || response[4] != SSH_AGENT_SUCCESS) {
         *retstr = dupstr("Agent failed to delete key");
@@ -1753,14 +1759,13 @@ int pageant_delete_key(struct pageant_pubkey *key, char **retstr)
 int pageant_delete_all_keys(char **retstr)
 {
     unsigned char request[5], *response;
-    int reqlen, resplen, success, ret;
+    int reqlen, resplen, success;
     void *vresponse;
 
     PUT_32BIT(request, 1);
     request[4] = SSH2_AGENTC_REMOVE_ALL_IDENTITIES;
     reqlen = 5;
-    ret = agent_query(request, reqlen, &vresponse, &resplen, NULL, NULL);
-    assert(ret == 1);
+    agent_query_synchronous(request, reqlen, &vresponse, &resplen);
     response = vresponse;
     success = (resplen >= 4 && response[4] == SSH_AGENT_SUCCESS);
     sfree(response);
@@ -1772,8 +1777,7 @@ int pageant_delete_all_keys(char **retstr)
     PUT_32BIT(request, 1);
     request[4] = SSH1_AGENTC_REMOVE_ALL_RSA_IDENTITIES;
     reqlen = 5;
-    ret = agent_query(request, reqlen, &vresponse, &resplen, NULL, NULL);
-    assert(ret == 1);
+    agent_query_synchronous(request, reqlen, &vresponse, &resplen);
     response = vresponse;
     success = (resplen >= 4 && response[4] == SSH_AGENT_SUCCESS);
     sfree(response);