[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.54.2.2 and 1.54.2.3

version 1.54.2.2, 2002/03/09 00:20:45 version 1.54.2.3, 2002/06/02 22:56:11
Line 52 
Line 52 
 #include "log.h"  #include "log.h"
   
 #ifdef SMARTCARD  #ifdef SMARTCARD
 #include <openssl/engine.h>  
 #include "scard.h"  #include "scard.h"
 #endif  #endif
   
Line 443 
Line 442 
 static void  static void
 process_add_smartcard_key (SocketEntry *e)  process_add_smartcard_key (SocketEntry *e)
 {  {
           Identity *id;
         Idtab *tab;          Idtab *tab;
         Key *n = NULL, *k = NULL;          Key **keys, *k;
         char *sc_reader_id = NULL;          char *sc_reader_id = NULL, *pin;
         int success = 0;          int i, version, success = 0;
   
         sc_reader_id = buffer_get_string(&e->input, NULL);          sc_reader_id = buffer_get_string(&e->input, NULL);
         k = sc_get_key(sc_reader_id);          pin = buffer_get_string(&e->input, NULL);
           keys = sc_get_keys(sc_reader_id, pin);
         xfree(sc_reader_id);          xfree(sc_reader_id);
           xfree(pin);
   
         if (k == NULL) {          if (keys == NULL || keys[0] == NULL) {
                 error("sc_get_pubkey failed");                  error("sc_get_keys failed");
                 goto send;                  goto send;
         }          }
         success = 1;          for (i = 0; keys[i] != NULL; i++) {
                   k = keys[i];
         tab = idtab_lookup(1);                  version = k->type == KEY_RSA1 ? 1 : 2;
         k->type = KEY_RSA1;                  tab = idtab_lookup(version);
         if (lookup_identity(k, 1) == NULL) {                  if (lookup_identity(k, version) == NULL) {
                 Identity *id = xmalloc(sizeof(Identity));                          id = xmalloc(sizeof(Identity));
                 n = key_new(KEY_RSA1);                          id->key = k;
                 BN_copy(n->rsa->n, k->rsa->n);                          id->comment = xstrdup("smartcard key");
                 BN_copy(n->rsa->e, k->rsa->e);                          TAILQ_INSERT_TAIL(&tab->idlist, id, next);
                 RSA_set_method(n->rsa, sc_get_engine());                          tab->nentries++;
                 id->key = n;                          success = 1;
                 id->comment = xstrdup("rsa1 smartcard");                  } else {
                 TAILQ_INSERT_TAIL(&tab->idlist, id, next);                          key_free(k);
                 tab->nentries++;                  }
                   keys[i] = NULL;
         }          }
         k->type = KEY_RSA;          xfree(keys);
         tab = idtab_lookup(2);  
         if (lookup_identity(k, 2) == NULL) {  
                 Identity *id = xmalloc(sizeof(Identity));  
                 n = key_new(KEY_RSA);  
                 BN_copy(n->rsa->n, k->rsa->n);  
                 BN_copy(n->rsa->e, k->rsa->e);  
                 RSA_set_method(n->rsa, sc_get_engine());  
                 id->key = n;  
                 id->comment = xstrdup("rsa smartcard");  
                 TAILQ_INSERT_TAIL(&tab->idlist, id, next);  
                 tab->nentries++;  
         }  
         key_free(k);  
 send:  send:
         buffer_put_int(&e->output, 1);          buffer_put_int(&e->output, 1);
         buffer_put_char(&e->output,          buffer_put_char(&e->output,
Line 494 
Line 484 
 static void  static void
 process_remove_smartcard_key(SocketEntry *e)  process_remove_smartcard_key(SocketEntry *e)
 {  {
         Key *k = NULL;          Identity *id;
         int success = 0;          Idtab *tab;
         char *sc_reader_id = NULL;          Key **keys, *k = NULL;
           char *sc_reader_id = NULL, *pin;
           int i, version, success = 0;
   
         sc_reader_id = buffer_get_string(&e->input, NULL);          sc_reader_id = buffer_get_string(&e->input, NULL);
         k = sc_get_key(sc_reader_id);          pin = buffer_get_string(&e->input, NULL);
           keys = sc_get_keys(sc_reader_id, pin);
         xfree(sc_reader_id);          xfree(sc_reader_id);
           xfree(pin);
   
         if (k == NULL) {          if (keys == NULL || keys[0] == NULL) {
                 error("sc_get_pubkey failed");                  error("sc_get_keys failed");
         } else {                  goto send;
                 Identity *id;          }
                 k->type = KEY_RSA1;          for (i = 0; keys[i] != NULL; i++) {
                 id = lookup_identity(k, 1);                  k = keys[i];
                 if (id != NULL) {                  version = k->type == KEY_RSA1 ? 1 : 2;
                         Idtab *tab = idtab_lookup(1);                  if ((id = lookup_identity(k, version)) != NULL) {
                         TAILQ_REMOVE(&tab->idlist, id, next);                          tab = idtab_lookup(version);
                         free_identity(id);                          TAILQ_REMOVE(&tab->idlist, id, next);
                         tab->nentries--;                          tab->nentries--;
                         success = 1;  
                 }  
                 k->type = KEY_RSA;  
                 id = lookup_identity(k, 2);  
                 if (id != NULL) {  
                         Idtab *tab = idtab_lookup(2);  
                         TAILQ_REMOVE(&tab->idlist, id, next);  
                         free_identity(id);                          free_identity(id);
                         tab->nentries--;  
                         success = 1;                          success = 1;
                 }                  }
                 key_free(k);                  key_free(k);
                   keys[i] = NULL;
         }          }
           xfree(keys);
   send:
         buffer_put_int(&e->output, 1);          buffer_put_int(&e->output, 1);
         buffer_put_char(&e->output,          buffer_put_char(&e->output,
             success ? SSH_AGENT_SUCCESS : SSH_AGENT_FAILURE);              success ? SSH_AGENT_SUCCESS : SSH_AGENT_FAILURE);
Line 857 
Line 845 
         if (ac > 0 && (c_flag || k_flag || s_flag || d_flag))          if (ac > 0 && (c_flag || k_flag || s_flag || d_flag))
                 usage();                  usage();
   
         if (ac == 0 && !c_flag && !k_flag && !s_flag && !d_flag) {          if (ac == 0 && !c_flag && !s_flag) {
                 shell = getenv("SHELL");                  shell = getenv("SHELL");
                 if (shell != NULL && strncmp(shell + strlen(shell) - 3, "csh", 3) == 0)                  if (shell != NULL && strncmp(shell + strlen(shell) - 3, "csh", 3) == 0)
                         c_flag = 1;                          c_flag = 1;

Legend:
Removed from v.1.54.2.2  
changed lines
  Added in v.1.54.2.3