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

Diff for /src/usr.bin/ssh/ssh-pkcs11-helper.c between version 1.21 and 1.22

version 1.21, 2019/09/06 05:23:55 version 1.22, 2020/01/25 00:03:36
Line 41 
Line 41 
   
 struct pkcs11_keyinfo {  struct pkcs11_keyinfo {
         struct sshkey   *key;          struct sshkey   *key;
         char            *providername;          char            *providername, *label;
         TAILQ_ENTRY(pkcs11_keyinfo) next;          TAILQ_ENTRY(pkcs11_keyinfo) next;
 };  };
   
Line 54 
Line 54 
 struct sshbuf *oqueue;  struct sshbuf *oqueue;
   
 static void  static void
 add_key(struct sshkey *k, char *name)  add_key(struct sshkey *k, char *name, char *label)
 {  {
         struct pkcs11_keyinfo *ki;          struct pkcs11_keyinfo *ki;
   
         ki = xcalloc(1, sizeof(*ki));          ki = xcalloc(1, sizeof(*ki));
         ki->providername = xstrdup(name);          ki->providername = xstrdup(name);
         ki->key = k;          ki->key = k;
           ki->label = xstrdup(label);
         TAILQ_INSERT_TAIL(&pkcs11_keylist, ki, next);          TAILQ_INSERT_TAIL(&pkcs11_keylist, ki, next);
 }  }
   
Line 74 
Line 75 
                 if (!strcmp(ki->providername, name)) {                  if (!strcmp(ki->providername, name)) {
                         TAILQ_REMOVE(&pkcs11_keylist, ki, next);                          TAILQ_REMOVE(&pkcs11_keylist, ki, next);
                         free(ki->providername);                          free(ki->providername);
                           free(ki->label);
                         sshkey_free(ki->key);                          sshkey_free(ki->key);
                         free(ki);                          free(ki);
                 }                  }
Line 87 
Line 89 
         struct pkcs11_keyinfo *ki;          struct pkcs11_keyinfo *ki;
   
         TAILQ_FOREACH(ki, &pkcs11_keylist, next) {          TAILQ_FOREACH(ki, &pkcs11_keylist, next) {
                 debug("check %p %s", ki, ki->providername);                  debug("check %p %s %s", ki, ki->providername, ki->label);
                 if (sshkey_equal(k, ki->key))                  if (sshkey_equal(k, ki->key))
                         return (ki->key);                          return (ki->key);
         }          }
Line 112 
Line 114 
         u_char *blob;          u_char *blob;
         size_t blen;          size_t blen;
         struct sshbuf *msg;          struct sshbuf *msg;
           char **labels = NULL;
   
         if ((msg = sshbuf_new()) == NULL)          if ((msg = sshbuf_new()) == NULL)
                 fatal("%s: sshbuf_new failed", __func__);                  fatal("%s: sshbuf_new failed", __func__);
         if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 ||          if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 ||
             (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0)              (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0)
                 fatal("%s: buffer error: %s", __func__, ssh_err(r));                  fatal("%s: buffer error: %s", __func__, ssh_err(r));
         if ((nkeys = pkcs11_add_provider(name, pin, &keys)) > 0) {          if ((nkeys = pkcs11_add_provider(name, pin, &keys, &labels)) > 0) {
                 if ((r = sshbuf_put_u8(msg,                  if ((r = sshbuf_put_u8(msg,
                     SSH2_AGENT_IDENTITIES_ANSWER)) != 0 ||                      SSH2_AGENT_IDENTITIES_ANSWER)) != 0 ||
                     (r = sshbuf_put_u32(msg, nkeys)) != 0)                      (r = sshbuf_put_u32(msg, nkeys)) != 0)
Line 130 
Line 133 
                                 continue;                                  continue;
                         }                          }
                         if ((r = sshbuf_put_string(msg, blob, blen)) != 0 ||                          if ((r = sshbuf_put_string(msg, blob, blen)) != 0 ||
                             (r = sshbuf_put_cstring(msg, name)) != 0)                              (r = sshbuf_put_cstring(msg, labels[i])) != 0)
                                 fatal("%s: buffer error: %s",                                  fatal("%s: buffer error: %s",
                                     __func__, ssh_err(r));                                      __func__, ssh_err(r));
                         free(blob);                          free(blob);
                         add_key(keys[i], name);                          add_key(keys[i], name, labels[i]);
                           free(labels[i]);
                 }                  }
         } else {          } else {
                 if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0)                  if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0)
Line 142 
Line 146 
                 if ((r = sshbuf_put_u32(msg, -nkeys)) != 0)                  if ((r = sshbuf_put_u32(msg, -nkeys)) != 0)
                         fatal("%s: buffer error: %s", __func__, ssh_err(r));                          fatal("%s: buffer error: %s", __func__, ssh_err(r));
         }          }
         free(keys);          free(labels);
           free(keys); /* keys themselves are transferred to pkcs11_keylist */
         free(pin);          free(pin);
         free(name);          free(name);
         send_msg(msg);          send_msg(msg);

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.22