[BACK]Return to ssh-agent.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / ssh

Diff for /src/usr.bin/ssh/ssh-agent.c between version 1.194 and 1.195

version 1.194, 2015/01/14 13:09:09 version 1.195, 2015/01/14 19:33:41
Line 357 
Line 357 
         int r, ok = -1;          int r, ok = -1;
         struct sshbuf *msg;          struct sshbuf *msg;
         struct sshkey *key;          struct sshkey *key;
           struct identity *id;
   
           if ((msg = sshbuf_new()) == NULL)
                   fatal("%s: sshbuf_new failed", __func__);
         if ((r = sshbuf_get_string(e->request, &blob, &blen)) != 0 ||          if ((r = sshbuf_get_string(e->request, &blob, &blen)) != 0 ||
             (r = sshbuf_get_string(e->request, &data, &dlen)) != 0 ||              (r = sshbuf_get_string(e->request, &data, &dlen)) != 0 ||
             (r = sshbuf_get_u32(e->request, &flags)) != 0)              (r = sshbuf_get_u32(e->request, &flags)) != 0)
                 fatal("%s: buffer error: %s", __func__, ssh_err(r));                  fatal("%s: buffer error: %s", __func__, ssh_err(r));
         if (flags & SSH_AGENT_OLD_SIGNATURE)          if (flags & SSH_AGENT_OLD_SIGNATURE)
                 compat = SSH_BUG_SIGBLOB;                  compat = SSH_BUG_SIGBLOB;
           if ((r = sshkey_from_blob(blob, blen, &key)) != 0) {
         if ((ok = sshkey_from_blob(blob, blen, &key)) != 0)  
                 error("%s: cannot parse key blob: %s", __func__, ssh_err(ok));                  error("%s: cannot parse key blob: %s", __func__, ssh_err(ok));
         else {                  goto send;
                 Identity *id = lookup_identity(key, 2);  
                 if (id != NULL && (!id->confirm || confirm_key(id) == 0)) {  
                         if ((ok = sshkey_sign(id->key, &signature, &slen,  
                             data, dlen, compat)) != 0)  
                                 error("%s: sshkey_sign: %s",  
                                     __func__, ssh_err(ok));  
                 }  
                 sshkey_free(key);  
         }          }
         if ((msg = sshbuf_new()) == NULL)          if ((id = lookup_identity(key, 2)) == NULL) {
                 fatal("%s: sshbuf_new failed", __func__);                  verbose("%s: %s key not found", __func__, sshkey_type(key));
                   goto send;
           }
           if (id->confirm && confirm_key(id) != 0) {
                   verbose("%s: user refused key", __func__);
                   goto send;
           }
           if ((r = sshkey_sign(id->key, &signature, &slen,
               data, dlen, compat)) != 0) {
                   error("%s: sshkey_sign: %s", __func__, ssh_err(ok));
                   goto send;
           }
           /* Success */
           ok = 0;
    send:
           sshkey_free(key);
         if (ok == 0) {          if (ok == 0) {
                 if ((r = sshbuf_put_u8(msg, SSH2_AGENT_SIGN_RESPONSE)) != 0 ||                  if ((r = sshbuf_put_u8(msg, SSH2_AGENT_SIGN_RESPONSE)) != 0 ||
                     (r = sshbuf_put_string(msg, signature, slen)) != 0)                      (r = sshbuf_put_string(msg, signature, slen)) != 0)

Legend:
Removed from v.1.194  
changed lines
  Added in v.1.195