diff options
-rw-r--r-- | usr.bin/ssh/ssh-keygen.c | 45 | ||||
-rw-r--r-- | usr.bin/ssh/ssh.h | 3 |
2 files changed, 29 insertions, 19 deletions
diff --git a/usr.bin/ssh/ssh-keygen.c b/usr.bin/ssh/ssh-keygen.c index 05c4f70bfaf..bfa68e428f3 100644 --- a/usr.bin/ssh/ssh-keygen.c +++ b/usr.bin/ssh/ssh-keygen.c @@ -12,7 +12,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh-keygen.c,v 1.34 2000/11/15 20:24:43 millert Exp $"); +RCSID("$OpenBSD: ssh-keygen.c,v 1.35 2000/11/25 17:19:33 markus Exp $"); #include <openssl/evp.h> #include <openssl/pem.h> @@ -67,9 +67,8 @@ int convert_to_ssh2 = 0; int convert_from_ssh2 = 0; int print_public = 0; -/* key type */ -int dsa_mode = 0; /* compat */ -char *key_type_name = NULL; +/* default to RSA for SSH-1 */ +char *key_type_name = "rsa1"; /* argv0 */ extern char *__progname; @@ -80,9 +79,24 @@ void ask_filename(struct passwd *pw, const char *prompt) { char buf[1024]; - snprintf(identity_file, sizeof(identity_file), "%s/%s", - pw->pw_dir, - dsa_mode ? SSH_CLIENT_ID_DSA: SSH_CLIENT_IDENTITY); + char *name = NULL; + + switch (key_type_from_name(key_type_name)) { + case KEY_RSA1: + name = SSH_CLIENT_IDENTITY; + break; + case KEY_DSA: + name = SSH_CLIENT_ID_DSA; + break; + case KEY_RSA: + name = SSH_CLIENT_ID_RSA; + break; + default: + fprintf(stderr, "bad key type"); + exit(1); + break; + } + snprintf(identity_file, sizeof(identity_file), "%s/%s", pw->pw_dir, name); printf("%s (%s): ", prompt, identity_file); fflush(stdout); if (fgets(buf, sizeof(buf), stdin) == NULL) @@ -596,10 +610,9 @@ main(int ac, char **av) { char dotsshdir[16 * 1024], comment[1024], *passphrase1, *passphrase2; struct passwd *pw; - int opt; + int opt, type; struct stat st; FILE *f; - int type = KEY_RSA1; Key *private; Key *public; @@ -681,12 +694,10 @@ main(int ac, char **av) case 'd': key_type_name = "dsa"; - dsa_mode = 1; break; case 't': key_type_name = optarg; - dsa_mode = (strcmp(optarg, "dsa") == 0); break; case '?': @@ -717,15 +728,13 @@ main(int ac, char **av) arc4random_stir(); - if (key_type_name != NULL) { - type = key_type_from_name(key_type_name); - if (type == KEY_UNSPEC) { - fprintf(stderr, "unknown key type %s\n", key_type_name); - exit(1); - } + type = key_type_from_name(key_type_name); + if (type == KEY_UNSPEC) { + fprintf(stderr, "unknown key type %s\n", key_type_name); + exit(1); } if (!quiet) - printf("Generating public/private key pair.\n"); + printf("Generating public/private %s key pair.\n", key_type_name); private = key_generate(type, bits); if (private == NULL) { fprintf(stderr, "key_generate failed"); diff --git a/usr.bin/ssh/ssh.h b/usr.bin/ssh/ssh.h index f8c58e6051c..67df3d43208 100644 --- a/usr.bin/ssh/ssh.h +++ b/usr.bin/ssh/ssh.h @@ -12,7 +12,7 @@ * called by a name other than "ssh" or "Secure Shell". */ -/* RCSID("$OpenBSD: ssh.h,v 1.54 2000/10/11 20:27:24 markus Exp $"); */ +/* RCSID("$OpenBSD: ssh.h,v 1.55 2000/11/25 17:19:33 markus Exp $"); */ #ifndef SSH_H #define SSH_H @@ -103,6 +103,7 @@ */ #define SSH_CLIENT_IDENTITY ".ssh/identity" #define SSH_CLIENT_ID_DSA ".ssh/id_dsa" +#define SSH_CLIENT_ID_RSA ".ssh/id_rsa" /* * Configuration file in user\'s home directory. This file need not be |