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

Diff for /src/usr.bin/ssh/ssh-add.c between version 1.155 and 1.156

version 1.155, 2020/03/16 02:17:02 version 1.156, 2020/06/26 05:04:07
Line 104 
Line 104 
 }  }
   
 static int  static int
   delete_one(int agent_fd, const struct sshkey *key, const char *comment,
       const char *path, int qflag)
   {
           int r;
   
           if ((r = ssh_remove_identity(agent_fd, key)) != 0) {
                   fprintf(stderr, "Could not remove identity \"%s\": %s\n",
                       path, ssh_err(r));
                   return r;
           }
           if (!qflag) {
                   fprintf(stderr, "Identity removed: %s %s (%s)\n", path,
                       sshkey_type(key), comment);
           }
           return 0;
   }
   
   static int
   delete_stdin(int agent_fd, int qflag)
   {
           char *line = NULL, *cp;
           size_t linesize = 0;
           struct sshkey *key = NULL;
           int lnum = 0, r, ret = -1;
   
           while (getline(&line, &linesize, stdin) != -1) {
                   lnum++;
                   sshkey_free(key);
                   key = NULL;
                   line[strcspn(line, "\n")] = '\0';
                   cp = line + strspn(line, " \t");
                   if (*cp == '#' || *cp == '\0')
                           continue;
                   if ((key = sshkey_new(KEY_UNSPEC)) == NULL)
                           fatal("%s: sshkey_new", __func__);
                   if ((r = sshkey_read(key, &cp)) != 0) {
                           error("(stdin):%d: invalid key: %s", lnum, ssh_err(r));
                           continue;
                   }
                   if (delete_one(agent_fd, key, cp, "(stdin)", qflag) == 0)
                           ret = 0;
           }
           sshkey_free(key);
           free(line);
           return ret;
   }
   
   static int
 delete_file(int agent_fd, const char *filename, int key_only, int qflag)  delete_file(int agent_fd, const char *filename, int key_only, int qflag)
 {  {
         struct sshkey *public, *cert = NULL;          struct sshkey *public, *cert = NULL;
         char *certpath = NULL, *comment = NULL;          char *certpath = NULL, *comment = NULL;
         int r, ret = -1;          int r, ret = -1;
   
           if (strcmp(filename, "-") == 0)
                   return delete_stdin(agent_fd, qflag);
   
         if ((r = sshkey_load_public(filename, &public,  &comment)) != 0) {          if ((r = sshkey_load_public(filename, &public,  &comment)) != 0) {
                 printf("Bad key file %s: %s\n", filename, ssh_err(r));                  printf("Bad key file %s: %s\n", filename, ssh_err(r));
                 return -1;                  return -1;
         }          }
         if ((r = ssh_remove_identity(agent_fd, public)) == 0) {          if (delete_one(agent_fd, public, comment, filename, qflag) == 0)
                 if (!qflag) {  
                         fprintf(stderr, "Identity removed: %s (%s)\n",  
                             filename, comment);  
                 }  
                 ret = 0;                  ret = 0;
         } else  
                 fprintf(stderr, "Could not remove identity \"%s\": %s\n",  
                     filename, ssh_err(r));  
   
         if (key_only)          if (key_only)
                 goto out;                  goto out;
Line 142 
Line 186 
                 fatal("Certificate %s does not match private key %s",                  fatal("Certificate %s does not match private key %s",
                     certpath, filename);                      certpath, filename);
   
         if ((r = ssh_remove_identity(agent_fd, cert)) == 0) {          if (delete_one(agent_fd, cert, comment, certpath, qflag) == 0)
                 if (!qflag) {  
                         fprintf(stderr, "Identity removed: %s (%s)\n",  
                             certpath, comment);  
                 }  
                 ret = 0;                  ret = 0;
         } else  
                 fprintf(stderr, "Could not remove identity \"%s\": %s\n",  
                     certpath, ssh_err(r));  
   
  out:   out:
         sshkey_free(cert);          sshkey_free(cert);

Legend:
Removed from v.1.155  
changed lines
  Added in v.1.156