=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh-add.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- src/usr.bin/ssh/ssh-add.c 2001/03/12 22:02:02 1.30 +++ src/usr.bin/ssh/ssh-add.c 2001/03/26 08:07:08 1.31 @@ -35,7 +35,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh-add.c,v 1.30 2001/03/12 22:02:02 markus Exp $"); +RCSID("$OpenBSD: ssh-add.c,v 1.31 2001/03/26 08:07:08 markus Exp $"); #include @@ -55,14 +55,10 @@ Key *public; char *comment; - public = key_new(KEY_RSA1); - if (!load_public_key(filename, public, &comment)) { - key_free(public); - public = key_new(KEY_UNSPEC); - if (!try_load_public_key(filename, public, &comment)) { - printf("Bad key file %s\n", filename); - return; - } + public = key_load_public(filename, &comment); + if (public == NULL) { + printf("Bad key file %s\n", filename); + return; } if (ssh_remove_identity(ac, public)) fprintf(stderr, "Identity removed: %s (%s)\n", filename, comment); @@ -133,30 +129,15 @@ add_file(AuthenticationConnection *ac, const char *filename) { struct stat st; - Key *public; Key *private; - char *saved_comment, *comment, *askpass = NULL; + char *comment, *askpass = NULL, *pass; char buf[1024], msg[1024]; - int success; int interactive = isatty(STDIN_FILENO); - int type = KEY_RSA1; if (stat(filename, &st) < 0) { perror(filename); exit(1); } - /* - * try to load the public key. right now this only works for RSA, - * since DSA keys are fully encrypted - */ - public = key_new(KEY_RSA1); - if (!load_public_key(filename, public, &saved_comment)) { - /* ok, so we will assume this is 'some' key */ - type = KEY_UNSPEC; - saved_comment = xstrdup(filename); - } - key_free(public); - if (!interactive && getenv("DISPLAY")) { if (getenv(SSH_ASKPASS_ENV)) askpass = getenv(SSH_ASKPASS_ENV); @@ -165,17 +146,17 @@ } /* At first, try empty passphrase */ - private = key_new(type); - success = load_private_key(filename, "", private, &comment); - if (!success) { + private = key_load_private(filename, "", &comment); + if (comment == NULL) + comment = xstrdup(filename); + if (private == NULL) { printf("Need passphrase for %.200s\n", filename); if (!interactive && askpass == NULL) { - xfree(saved_comment); + xfree(comment); return; } - snprintf(msg, sizeof msg, "Enter passphrase for %.200s", saved_comment); + snprintf(msg, sizeof msg, "Enter passphrase for %.200s", comment); for (;;) { - char *pass; if (interactive) { snprintf(buf, sizeof buf, "%s: ", msg); pass = read_passphrase(buf, 1); @@ -184,24 +165,23 @@ } if (strcmp(pass, "") == 0) { xfree(pass); - xfree(saved_comment); + xfree(comment); return; } - success = load_private_key(filename, pass, private, &comment); + private = key_load_private(filename, pass, &comment); memset(pass, 0, strlen(pass)); xfree(pass); - if (success) + if (private != NULL) break; strlcpy(msg, "Bad passphrase, try again", sizeof msg); } } - xfree(comment); - if (ssh_add_identity(ac, private, saved_comment)) - fprintf(stderr, "Identity added: %s (%s)\n", filename, saved_comment); + if (ssh_add_identity(ac, private, comment)) + fprintf(stderr, "Identity added: %s (%s)\n", filename, comment); else fprintf(stderr, "Could not add identity: %s\n", filename); + xfree(comment); key_free(private); - xfree(saved_comment); } void