Fix formatting of --help output.
[tinc] / src / tincd.c
index 7efc632..c0c12ad 100644 (file)
 #include <sys/mman.h>
 #endif
 
-#include <openssl/rand.h>
-#include <openssl/rsa.h>
-#include <openssl/pem.h>
-#include <openssl/evp.h>
-#include <openssl/engine.h>
-
 #include LZO1X_H
 
 #include <getopt.h>
 
 #include "conf.h"
 #include "control.h"
+#include "crypto.h"
 #include "device.h"
 #include "logger.h"
 #include "net.h"
@@ -61,9 +56,6 @@ bool show_help = false;
 /* If nonzero, print the version on standard output and exit.  */
 bool show_version = false;
 
-/* If nonzero, generate public/private keypair for this host/net. */
-int generate_keys = 0;
-
 /* If nonzero, use null ciphers and skip all key exchanges. */
 bool bypass_security = false;
 
@@ -86,7 +78,6 @@ static struct option const long_options[] = {
        {"help", no_argument, NULL, 1},
        {"version", no_argument, NULL, 2},
        {"no-detach", no_argument, NULL, 'D'},
-       {"generate-keys", optional_argument, NULL, 'K'},
        {"debug", optional_argument, NULL, 'd'},
        {"bypass-security", no_argument, NULL, 3},
        {"mlock", no_argument, NULL, 'L'},
@@ -106,11 +97,10 @@ static void usage(bool status)
                                program_name);
        else {
                printf(_("Usage: %s [option]...\n\n"), program_name);
-               printf(_("  -c, --config=DIR                     Read configuration options from DIR.\n"
+               printf(_(       "  -c, --config=DIR              Read configuration options from DIR.\n"
                                "  -D, --no-detach               Don't fork and detach.\n"
                                "  -d, --debug[=LEVEL]           Increase debug level or set it to LEVEL.\n"
                                "  -n, --net=NETNAME             Connect to net NETNAME.\n"
-                               "  -K, --generate-keys[=BITS]    Generate public/private RSA keypair.\n"
                                "  -L, --mlock                   Lock tinc into main memory.\n"
                                "      --logfile[=FILENAME]      Write log entries to a logfile.\n"
                                "      --controlsocket=FILENAME  Open control socket at FILENAME.\n"
@@ -125,7 +115,7 @@ static bool parse_options(int argc, char **argv)
        int r;
        int option_index = 0;
 
-       while((r = getopt_long(argc, argv, "c:DLd::n:K::", long_options, &option_index)) != EOF) {
+       while((r = getopt_long(argc, argv, "c:DLd::n:", long_options, &option_index)) != EOF) {
                switch (r) {
                        case 0:                         /* long option */
                                break;
@@ -153,22 +143,6 @@ static bool parse_options(int argc, char **argv)
                                netname = xstrdup(optarg);
                                break;
 
-                       case 'K':                               /* generate public/private keypair */
-                               if(optarg) {
-                                       generate_keys = atoi(optarg);
-
-                                       if(generate_keys < 512) {
-                                               fprintf(stderr, _("Invalid argument `%s'; BITS must be a number equal to or greater than 512.\n"),
-                                                               optarg);
-                                               usage(true);
-                                               return false;
-                                       }
-
-                                       generate_keys &= ~7;    /* Round it to bytes */
-                               } else
-                                       generate_keys = 1024;
-                               break;
-
                        case 1:                                 /* show help */
                                show_help = true;
                                break;
@@ -203,103 +177,6 @@ static bool parse_options(int argc, char **argv)
        return true;
 }
 
-/* This function prettyprints the key generation process */
-
-static void indicator(int a, int b, void *p)
-{
-       switch (a) {
-               case 0:
-                       fprintf(stderr, ".");
-                       break;
-
-               case 1:
-                       fprintf(stderr, "+");
-                       break;
-
-               case 2:
-                       fprintf(stderr, "-");
-                       break;
-
-               case 3:
-                       switch (b) {
-                               case 0:
-                                       fprintf(stderr, " p\n");
-                                       break;
-
-                               case 1:
-                                       fprintf(stderr, " q\n");
-                                       break;
-
-                               default:
-                                       fprintf(stderr, "?");
-                       }
-                       break;
-
-               default:
-                       fprintf(stderr, "?");
-       }
-}
-
-/*
-  Generate a public/private RSA keypair, and ask for a file to store
-  them in.
-*/
-static bool keygen(int bits)
-{
-       RSA *rsa_key;
-       FILE *f;
-       char *name = NULL;
-       char *filename;
-
-       fprintf(stderr, _("Generating %d bits keys:\n"), bits);
-       rsa_key = RSA_generate_key(bits, 0x10001, indicator, NULL);
-
-       if(!rsa_key) {
-               fprintf(stderr, _("Error during key generation!\n"));
-               return false;
-       } else
-               fprintf(stderr, _("Done.\n"));
-
-       asprintf(&filename, "%s/rsa_key.priv", confbase);
-       f = ask_and_open(filename, _("private RSA key"), "a");
-
-       if(!f)
-               return false;
-  
-#ifdef HAVE_FCHMOD
-       /* Make it unreadable for others. */
-       fchmod(fileno(f), 0600);
-#endif
-               
-       if(ftell(f))
-               fprintf(stderr, _("Appending key to existing contents.\nMake sure only one key is stored in the file.\n"));
-
-       PEM_write_RSAPrivateKey(f, rsa_key, NULL, NULL, 0, NULL, NULL);
-       fclose(f);
-       free(filename);
-
-       get_config_string(lookup_config(config_tree, "Name"), &name);
-
-       if(name)
-               asprintf(&filename, "%s/hosts/%s", confbase, name);
-       else
-               asprintf(&filename, "%s/rsa_key.pub", confbase);
-
-       f = ask_and_open(filename, _("public RSA key"), "a");
-
-       if(!f)
-               return false;
-
-       if(ftell(f))
-               fprintf(stderr, _("Appending key to existing contents.\nMake sure only one key is stored in the file.\n"));
-
-       PEM_write_RSAPublicKey(f, rsa_key);
-       fclose(f);
-       free(filename);
-
-       return true;
-}
-
 /*
   Set all files and paths according to netname
 */
@@ -412,17 +289,7 @@ int main(int argc, char **argv)
        /* Slllluuuuuuurrrrp! */
 
        srand(time(NULL));
-       RAND_load_file("/dev/urandom", 1024);
-
-       ENGINE_load_builtin_engines();
-       ENGINE_register_all_complete();
-
-       OpenSSL_add_all_algorithms();
-
-       if(generate_keys) {
-               read_server_config();
-               return !keygen(generate_keys);
-       }
+       crypto_init();
 
        if(!read_server_config())
                return 1;
@@ -475,7 +342,7 @@ end:
        exit_control();
 #endif
 
-       EVP_cleanup();
-       
+       crypto_exit();
+
        return status;
 }