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

Diff for /src/usr.bin/ssh/ssh-keygen.c between version 1.6 and 1.7

version 1.6, 1999/10/01 02:38:09 version 1.7, 1999/11/16 22:27:54
Line 55 
Line 55 
 /* Perform changing a passphrase.  The argument is the passwd structure  /* Perform changing a passphrase.  The argument is the passwd structure
    for the current user. */     for the current user. */
   
 void  char *
 do_change_passphrase(struct passwd *pw)  get_filename(struct passwd *pw, const char *prompt)
 {  {
   char buf[1024], *comment;    char buf[1024], default_file[1024];
   char *old_passphrase, *passphrase1, *passphrase2;  
   struct stat st;  
   RSA *private_key;  
   
   /* Read key file name. */    /* Read key file name. */
   if (identity_file != NULL) {    if (identity_file != NULL) {
       strncpy(buf, identity_file, sizeof(buf));      return xstrdup(identity_file);
       buf[sizeof(buf) - 1] = '\0';  
   } else {    } else {
     printf("Enter file in which the key is ($HOME/%s): ", SSH_CLIENT_IDENTITY);      snprintf(default_file, sizeof default_file, "%s/%s",
                pw->pw_dir, SSH_CLIENT_IDENTITY);
       printf("%s (%s): ", prompt, default_file);
     fflush(stdout);      fflush(stdout);
     if (fgets(buf, sizeof(buf), stdin) == NULL)      if (fgets(buf, sizeof(buf), stdin) == NULL)
       exit(1);        exit(1);
     if (strchr(buf, '\n'))      if (strchr(buf, '\n'))
       *strchr(buf, '\n') = 0;        *strchr(buf, '\n') = 0;
     if (strcmp(buf, "") == 0)      if (strcmp(buf, "") == 0)
       snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, SSH_CLIENT_IDENTITY);        return xstrdup(default_file);
   }    }
     return xstrdup(buf);
   }
   
   void
   do_change_passphrase(struct passwd *pw)
   {
     char *file, *comment;
     char *old_passphrase, *passphrase1, *passphrase2;
     struct stat st;
     RSA *private_key;
   
     file = get_filename(pw, "Enter file in which the key is");
   /* Check if the file exists. */    /* Check if the file exists. */
   if (stat(buf, &st) < 0)    if (stat(file, &st) < 0)
     {      {
       perror(buf);        perror(file);
       exit(1);        exit(1);
     }      }
   
   /* Try to load the public key from the file the verify that it is    /* Try to load the public key from the file the verify that it is
      readable and of the proper format. */       readable and of the proper format. */
   public_key = RSA_new();    public_key = RSA_new();
   if (!load_public_key(buf, public_key, NULL))    if (!load_public_key(file, public_key, NULL))
     {      {
       printf("%s is not a valid key file.\n", buf);        printf("%s is not a valid key file.\n", file);
       exit(1);        exit(1);
     }      }
   /* Clear the public key since we are just about to load the whole file. */    /* Clear the public key since we are just about to load the whole file. */
Line 98 
Line 107 
   
   /* Try to load the file with empty passphrase. */    /* Try to load the file with empty passphrase. */
   private_key = RSA_new();    private_key = RSA_new();
   if (!load_private_key(buf, "", private_key, &comment)) {    if (!load_private_key(file, "", private_key, &comment)) {
     /* Read passphrase from the user. */      /* Read passphrase from the user. */
     if (identity_passphrase)      if (identity_passphrase)
       old_passphrase = xstrdup(identity_passphrase);        old_passphrase = xstrdup(identity_passphrase);
     else      else
       old_passphrase = read_passphrase("Enter old passphrase: ", 1);        old_passphrase = read_passphrase("Enter old passphrase: ", 1);
     /* Try to load using the passphrase. */      /* Try to load using the passphrase. */
     if (!load_private_key(buf, old_passphrase, private_key, &comment))      if (!load_private_key(file, old_passphrase, private_key, &comment))
       {        {
         memset(old_passphrase, 0, strlen(old_passphrase));          memset(old_passphrase, 0, strlen(old_passphrase));
         xfree(old_passphrase);          xfree(old_passphrase);
Line 146 
Line 155 
     }      }
   
   /* Save the file using the new passphrase. */    /* Save the file using the new passphrase. */
   if (!save_private_key(buf, passphrase1, private_key, comment))    if (!save_private_key(file, passphrase1, private_key, comment))
     {      {
       printf("Saving the key failed: %s: %s.\n",        printf("Saving the key failed: %s: %s.\n",
              buf, strerror(errno));               file, strerror(errno));
       memset(passphrase1, 0, strlen(passphrase1));        memset(passphrase1, 0, strlen(passphrase1));
       xfree(passphrase1);        xfree(passphrase1);
       RSA_free(private_key);        RSA_free(private_key);
Line 171 
Line 180 
 void  void
 do_change_comment(struct passwd *pw)  do_change_comment(struct passwd *pw)
 {  {
   char buf[1024], new_comment[1024], *comment;    char new_comment[1024], *file, *comment;
   RSA *private_key;    RSA *private_key;
   char *passphrase;    char *passphrase;
   struct stat st;    struct stat st;
   FILE *f;    FILE *f;
   char *tmpbuf;    char *tmpbuf;
   
   /* Read key file name. */    file = get_filename(pw, "Enter file in which the key is");
   if (identity_file)  
     {  
       strncpy(buf, identity_file, sizeof(buf));  
       buf[sizeof(buf) - 1] = '\0';  
     }  
   else  
     {  
       printf("Enter file in which the key is ($HOME/%s): ",  
              SSH_CLIENT_IDENTITY);  
       fflush(stdout);  
       if (fgets(buf, sizeof(buf), stdin) == NULL)  
         exit(1);  
       if (strchr(buf, '\n'))  
         *strchr(buf, '\n') = 0;  
       if (strcmp(buf, "") == 0)  
         snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, SSH_CLIENT_IDENTITY);  
     }  
   
   /* Check if the file exists. */    /* Check if the file exists. */
   if (stat(buf, &st) < 0)    if (stat(file, &st) < 0)
     {      {
       perror(buf);        perror(file);
       exit(1);        exit(1);
     }      }
   
   /* Try to load the public key from the file the verify that it is    /* Try to load the public key from the file the verify that it is
      readable and of the proper format. */       readable and of the proper format. */
   public_key = RSA_new();    public_key = RSA_new();
   if (!load_public_key(buf, public_key, NULL))    if (!load_public_key(file, public_key, NULL))
     {      {
       printf("%s is not a valid key file.\n", buf);        printf("%s is not a valid key file.\n", file);
       exit(1);        exit(1);
     }      }
   
   private_key = RSA_new();    private_key = RSA_new();
   /* Try to load the file with empty passphrase. */    /* Try to load the file with empty passphrase. */
   if (load_private_key(buf, "", private_key, &comment))    if (load_private_key(file, "", private_key, &comment))
     passphrase = xstrdup("");      passphrase = xstrdup("");
   else    else
     {      {
Line 228 
Line 219 
         else          else
           passphrase = read_passphrase("Enter passphrase: ", 1);            passphrase = read_passphrase("Enter passphrase: ", 1);
       /* Try to load using the passphrase. */        /* Try to load using the passphrase. */
       if (!load_private_key(buf, passphrase, private_key, &comment))        if (!load_private_key(file, passphrase, private_key, &comment))
         {          {
           memset(passphrase, 0, strlen(passphrase));            memset(passphrase, 0, strlen(passphrase));
           xfree(passphrase);            xfree(passphrase);
Line 240 
Line 231 
   
   if (identity_comment)    if (identity_comment)
     {      {
       strncpy(new_comment, identity_comment, sizeof(new_comment));        strlcpy(new_comment, identity_comment, sizeof(new_comment));
       new_comment[sizeof(new_comment) - 1] = '\0';  
     }      }
   else    else
     {      {
Line 260 
Line 250 
     }      }
   
   /* Save the file using the new passphrase. */    /* Save the file using the new passphrase. */
   if (!save_private_key(buf, passphrase, private_key, new_comment))    if (!save_private_key(file, passphrase, private_key, new_comment))
     {      {
       printf("Saving the key failed: %s: %s.\n",        printf("Saving the key failed: %s: %s.\n",
              buf, strerror(errno));               file, strerror(errno));
       memset(passphrase, 0, strlen(passphrase));        memset(passphrase, 0, strlen(passphrase));
       xfree(passphrase);        xfree(passphrase);
       RSA_free(private_key);        RSA_free(private_key);
Line 278 
Line 268 
   
   /* Save the public key in text format in a file with the same name but    /* Save the public key in text format in a file with the same name but
      .pub appended. */       .pub appended. */
   strcat(buf, ".pub");    strcat(file, ".pub");
   f = fopen(buf, "w");    f = fopen(file, "w");
   if (!f)    if (!f)
     {      {
       printf("Could not save your public key in %s\n", buf);        printf("Could not save your public key in %s\n", file);
       exit(1);        exit(1);
     }      }
   fprintf(f, "%d ", BN_num_bits(public_key->n));    fprintf(f, "%d ", BN_num_bits(public_key->n));
Line 307 
Line 297 
 {  {
   char buf[16384], buf2[1024], *passphrase1, *passphrase2;    char buf[16384], buf2[1024], *passphrase1, *passphrase2;
   struct passwd *pw;    struct passwd *pw;
   char *tmpbuf;    char *file, *tmpbuf;
   int opt;    int opt;
   struct stat st;    struct stat st;
   FILE *f;    FILE *f;
Line 421 
Line 411 
   
  ask_file_again:   ask_file_again:
   
   /* Ask for a file to save the key in. */    file = get_filename(pw, "Enter file in which to save the key");
   if (identity_file)  
     {  
       strncpy(buf, identity_file, sizeof(buf));  
       buf[sizeof(buf) - 1] = '\0';  
     }  
   else  
     {  
       printf("Enter file in which to save the key ($HOME/%s): ",  
              SSH_CLIENT_IDENTITY);  
       fflush(stdout);  
       if (fgets(buf, sizeof(buf), stdin) == NULL)  
         exit(1);  
       if (strchr(buf, '\n'))  
         *strchr(buf, '\n') = 0;  
       if (strcmp(buf, "") == 0)  
         snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, SSH_CLIENT_IDENTITY);  
     }  
   
   /* If the file aready exists, ask the user to confirm. */    /* If the file aready exists, ask the user to confirm. */
   if (stat(buf, &st) >= 0)    if (stat(file, &st) >= 0)
     {      {
       printf("%s already exists.\n", buf);        printf("%s already exists.\n", file);
       printf("Overwrite (y/n)? ");        printf("Overwrite (y/n)? ");
       fflush(stdout);        fflush(stdout);
       if (fgets(buf2, sizeof(buf2), stdin) == NULL)        if (fgets(buf2, sizeof(buf2), stdin) == NULL)
Line 496 
Line 469 
     }      }
   
   /* Save the key with the given passphrase and comment. */    /* Save the key with the given passphrase and comment. */
   if (!save_private_key(buf, passphrase1, private_key, buf2))    if (!save_private_key(file, passphrase1, private_key, buf2))
     {      {
       printf("Saving the key failed: %s: %s.\n",        printf("Saving the key failed: %s: %s.\n",
              buf, strerror(errno));               file, strerror(errno));
       memset(passphrase1, 0, strlen(passphrase1));        memset(passphrase1, 0, strlen(passphrase1));
       xfree(passphrase1);        xfree(passphrase1);
         xfree(file);
       goto ask_file_again;        goto ask_file_again;
     }      }
   /* Clear the passphrase. */    /* Clear the passphrase. */
Line 513 
Line 487 
   arc4random_stir();    arc4random_stir();
   
   if (!quiet)    if (!quiet)
     printf("Your identification has been saved in %s.\n", buf);      printf("Your identification has been saved in %s.\n", file);
   
   /* Display the public key on the screen. */    /* Display the public key on the screen. */
   if (!quiet) {    if (!quiet) {
Line 529 
Line 503 
   
   /* Save the public key in text format in a file with the same name but    /* Save the public key in text format in a file with the same name but
      .pub appended. */       .pub appended. */
   strcat(buf, ".pub");    strcat(file, ".pub");
   f = fopen(buf, "w");    f = fopen(file, "w");
   if (!f)    if (!f)
     {      {
       printf("Could not save your public key in %s\n", buf);        printf("Could not save your public key in %s\n", file);
       exit(1);        exit(1);
     }      }
   fprintf(f, "%d ", BN_num_bits(public_key->n));    fprintf(f, "%d ", BN_num_bits(public_key->n));
Line 546 
Line 520 
   fclose(f);    fclose(f);
   
   if (!quiet)    if (!quiet)
     printf("Your public key has been saved in %s\n", buf);      printf("Your public key has been saved in %s\n", file);
   
   exit(0);    exit(0);
 }  }

Legend:
Removed from v.1.6  
changed lines
  Added in v.1.7