X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet_setup.c;h=43895dda251fe87c72a2c7f8c467357305e03048;hb=6debc6c79ba385d35f646e0958f84ace5b8f4b4d;hp=d4993fa9f11eb08bb76fae3fda7886b2a7a98b04;hpb=3a149f7521dfff67e6a790c1a830afc649ae083e;p=tinc diff --git a/src/net_setup.c b/src/net_setup.c index d4993fa9..43895dda 100644 --- a/src/net_setup.c +++ b/src/net_setup.c @@ -28,6 +28,7 @@ #include "connection.h" #include "compression.h" #include "control.h" +#include "crypto.h" #include "device.h" #include "digest.h" #include "ecdsa.h" @@ -142,7 +143,7 @@ static timeout_t keyexpire_timeout; static void keyexpire_handler(void *data) { regenerate_key(); timeout_set(data, &(struct timeval) { - keylifetime, rand() % 100000 + keylifetime, jitter() }); } #endif @@ -820,16 +821,21 @@ static bool setup_myself(void) { if(!strcasecmp(cipher, "none")) { myself->incipher = NULL; - } else if(!(myself->incipher = cipher_open_by_name(cipher))) { - logger(DEBUG_ALWAYS, LOG_ERR, "Unrecognized cipher type!"); - free(cipher); - return false; + } else { + myself->incipher = cipher_alloc(); + + if(!cipher_open_by_name(myself->incipher, cipher)) { + logger(DEBUG_ALWAYS, LOG_ERR, "Unrecognized cipher type!"); + cipher_free(&myself->incipher); + free(cipher); + return false; + } } free(cipher); timeout_add(&keyexpire_timeout, keyexpire_handler, &keyexpire_timeout, &(struct timeval) { - keylifetime, rand() % 100000 + keylifetime, jitter() }); /* Check if we want to use message authentication codes... */ @@ -850,10 +856,15 @@ static bool setup_myself(void) { if(!strcasecmp(digest, "none")) { myself->indigest = NULL; - } else if(!(myself->indigest = digest_open_by_name(digest, maclength))) { - logger(DEBUG_ALWAYS, LOG_ERR, "Unrecognized digest type!"); - free(digest); - return false; + } else { + myself->indigest = digest_alloc(); + + if(!digest_open_by_name(myself->indigest, digest, maclength)) { + logger(DEBUG_ALWAYS, LOG_ERR, "Unrecognized digest type!"); + digest_free(&myself->indigest); + free(digest); + return false; + } } free(digest);