Require OpenSSL 1.1.0 or later.
[tinc] / src / tincd.c
index db6b213..c1f2e5a 100644 (file)
@@ -1,7 +1,7 @@
 /*
     tincd.c -- the main file for tincd
     Copyright (C) 1998-2005 Ivo Timmermans
-                  2000-2017 Guus Sliepen <guus@tinc-vpn.org>
+                  2000-2019 Guus Sliepen <guus@tinc-vpn.org>
                   2008      Max Rijevski <maksuf@gmail.com>
                   2009      Michael Tokarev <mjt@tls.msk.ru>
                   2010      Julien Muchembled <jm@jmuchemb.eu>
@@ -38,6 +38,7 @@
 #include <openssl/pem.h>
 #include <openssl/evp.h>
 #include <openssl/engine.h>
+#include <openssl/bn.h>
 
 #ifdef HAVE_LZO
 #include LZO1X_H
@@ -363,6 +364,8 @@ static bool parse_options(int argc, char **argv) {
 /* This function prettyprints the key generation process */
 
 static int indicator(int a, int b, BN_GENCB *cb) {
+       (void)cb;
+
        switch(a) {
        case 0:
                fprintf(stderr, ".");
@@ -399,16 +402,6 @@ static int indicator(int a, int b, BN_GENCB *cb) {
        return 1;
 }
 
-#ifndef HAVE_BN_GENCB_NEW
-BN_GENCB *BN_GENCB_new(void) {
-       return xmalloc_and_zero(sizeof(BN_GENCB));
-}
-
-void BN_GENCB_free(BN_GENCB *cb) {
-       free(cb);
-}
-#endif
-
 /*
   Generate a public/private RSA keypair, and ask for a file to store
   them in.
@@ -432,7 +425,10 @@ static bool keygen(int bits) {
        BN_GENCB_set(cb, indicator, NULL);
 
        rsa_key = RSA_new();
-       BN_hex2bn(&e, "10001");
+
+       if(BN_hex2bn(&e, "10001") == 0) {
+               abort();
+       }
 
        if(!rsa_key || !e) {
                abort();
@@ -536,7 +532,7 @@ static void make_names(void) {
 #endif
 
        if(!pidfilename) {
-               xasprintf(&pidfilename, LOCALSTATEDIR "/run/%s.pid", identname);
+               xasprintf(&pidfilename, RUNSTATEDIR "/%s.pid", identname);
        }
 
        if(!logfilename) {
@@ -557,25 +553,11 @@ static void make_names(void) {
 }
 
 static void free_names() {
-       if(identname) {
-               free(identname);
-       }
-
-       if(netname) {
-               free(netname);
-       }
-
-       if(pidfilename) {
-               free(pidfilename);
-       }
-
-       if(logfilename) {
-               free(logfilename);
-       }
-
-       if(confbase) {
-               free(confbase);
-       }
+       free(identname);
+       free(netname);
+       free(pidfilename);
+       free(logfilename);
+       free(confbase);
 }
 
 static bool drop_privs() {
@@ -658,11 +640,9 @@ int main(int argc, char **argv) {
                return 1;
        }
 
-       make_names();
-
        if(show_version) {
                printf("%s version %s\n", PACKAGE, VERSION);
-               printf("Copyright (C) 1998-2017 Ivo Timmermans, Guus Sliepen and others.\n"
+               printf("Copyright (C) 1998-2019 Ivo Timmermans, Guus Sliepen and others.\n"
                       "See the AUTHORS file for a complete list.\n\n"
                       "tinc comes with ABSOLUTELY NO WARRANTY.  This is free software,\n"
                       "and you are welcome to redistribute it under certain conditions;\n"
@@ -676,6 +656,8 @@ int main(int argc, char **argv) {
                return 0;
        }
 
+       make_names();
+
        if(kill_tincd) {
                return !kill_other(kill_tincd);
        }
@@ -694,14 +676,7 @@ int main(int argc, char **argv) {
 
        init_configuration(&config_tree);
 
-       /* Slllluuuuuuurrrrp! */
-
-       RAND_load_file("/dev/urandom", 1024);
-
        ENGINE_load_builtin_engines();
-       ENGINE_register_all_complete();
-
-       OpenSSL_add_all_algorithms();
 
        if(generate_keys) {
                read_server_config();
@@ -820,16 +795,6 @@ end:
 
        free(priority);
 
-       EVP_cleanup();
-       ENGINE_cleanup();
-       CRYPTO_cleanup_all_ex_data();
-#ifdef HAVE_ERR_REMOVE_STATE
-       // OpenSSL claims this function was deprecated in 1.0.0,
-       // but valgrind's leak detector shows you still need to call it to make sure OpenSSL cleans up properly.
-       ERR_remove_state(0);
-#endif
-       ERR_free_strings();
-
        exit_configuration(&config_tree);
        list_delete_list(cmdline_conf);
        free_names();