]> andersk Git - openssh.git/blobdiff - ssh-keygen.c
- (tim) [configure.ac] Add AC_REVISION. Add sys/time.h to lastlog.h test
[openssh.git] / ssh-keygen.c
index bee4312425d01497fa7d86b734e55d330e7074a7..64fadc7a1d7fdb65a93ba3bacaaa80aa1c96d3d1 100644 (file)
@@ -12,7 +12,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: ssh-keygen.c,v 1.124 2005/05/23 22:44:01 avsm Exp $");
+RCSID("$OpenBSD: ssh-keygen.c,v 1.135 2005/11/29 02:04:55 dtucker Exp $");
 
 #include <openssl/evp.h>
 #include <openssl/pem.h>
@@ -35,8 +35,10 @@ RCSID("$OpenBSD: ssh-keygen.c,v 1.124 2005/05/23 22:44:01 avsm Exp $");
 #endif
 #include "dns.h"
 
-/* Number of bits in the RSA/DSA key.  This value can be changed on the command line. */
-u_int32_t bits = 1024;
+/* Number of bits in the RSA/DSA key.  This value can be set on the command line. */
+#define DEFAULT_BITS           2048
+#define DEFAULT_BITS_DSA       1024
+u_int32_t bits = 0;
 
 /*
  * Flag indicating that we just want to change the passphrase.  This can be
@@ -738,7 +740,7 @@ do_known_hosts(struct passwd *pw, const char *name)
                        fprintf(stderr, "WARNING: %s contains unhashed "
                            "entries\n", old);
                        fprintf(stderr, "Delete this file to ensure privacy "
-                            "of hostnames\n");
+                           "of hostnames\n");
                }
        }
 
@@ -1008,15 +1010,18 @@ main(int ac, char **av)
        struct passwd *pw;
        struct stat st;
        int opt, type, fd, download = 0;
-        uint32_t memory = 0, generator_wanted = 0, trials = 100;
+       u_int32_t memory = 0, generator_wanted = 0, trials = 100;
        int do_gen_candidates = 0, do_screen_candidates = 0;
        int log_level = SYSLOG_LEVEL_INFO;
        BIGNUM *start = NULL;
        FILE *f;
+       const char *errstr;
 
        extern int optind;
        extern char *optarg;
-       const char *errstr;
+
+       /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
+       sanitise_stdfd();
 
        __progname = ssh_get_progname(av[0]);
 
@@ -1041,11 +1046,10 @@ main(int ac, char **av)
            "degiqpclBHvxXyF:b:f:t:U:D:P:N:C:r:g:R:T:G:M:S:a:W:")) != -1) {
                switch (opt) {
                case 'b':
-                       bits = strtonum(optarg, 512, 32768, &errstr);
-                       if (errstr) {
-                               printf("Bits has bad value %s (%s)\n", optarg, errstr);
-                               exit(1);
-                       }
+                       bits = strtonum(optarg, 768, 32768, &errstr);
+                       if (errstr)
+                               fatal("Bits has bad value %s (%s)",
+                                       optarg, errstr);
                        break;
                case 'F':
                        find_host = 1;
@@ -1215,8 +1219,10 @@ main(int ac, char **av)
                            out_file, strerror(errno));
                        return (1);
                }
+               if (bits == 0)
+                       bits = DEFAULT_BITS;
                if (gen_candidates(out, memory, bits, start) != 0)
-                       fatal("modulus candidate generation failed\n");
+                       fatal("modulus candidate generation failed");
 
                return (0);
        }
@@ -1239,21 +1245,24 @@ main(int ac, char **av)
                            out_file, strerror(errno));
                }
                if (prime_test(in, out, trials, generator_wanted) != 0)
-                       fatal("modulus screening failed\n");
+                       fatal("modulus screening failed");
                return (0);
        }
 
        arc4random_stir();
 
-       if (key_type_name == NULL) {
-               printf("You must specify a key type (-t).\n");
-               usage();
-       }
+       if (key_type_name == NULL)
+               key_type_name = "rsa";
+
        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 (bits == 0)
+               bits = (type == KEY_DSA) ? DEFAULT_BITS_DSA : DEFAULT_BITS;
+       if (type == KEY_DSA && bits != 1024)
+               fatal("DSA keys must be 1024 bits");
        if (!quiet)
                printf("Generating public/private %s key pair.\n", key_type_name);
        private = key_generate(type, bits);
@@ -1266,7 +1275,7 @@ main(int ac, char **av)
        if (!have_identity)
                ask_filename(pw, "Enter file in which to save the key");
 
-       /* Create ~/.ssh directory if it doesn\'t already exist. */
+       /* Create ~/.ssh directory if it doesn't already exist. */
        snprintf(dotsshdir, sizeof dotsshdir, "%s/%s", pw->pw_dir, _PATH_SSH_USER_DIR);
        if (strstr(identity_file, dotsshdir) != NULL &&
            stat(dotsshdir, &st) < 0) {
This page took 0.039586 seconds and 4 git commands to generate.