X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;ds=sidebyside;f=src%2Fprotocol_key.c;h=f045009f5df084d64bdd7deacf2b9ca8de8e9c2d;hb=c55480eff9eded93c66505a764be7967c3a1dbe6;hp=29fe509081812799ba70cf96bae0b107a3318d97;hpb=2c6b2d70e6640f39563ad7bb0aa0ba87f883848c;p=tinc diff --git a/src/protocol_key.c b/src/protocol_key.c index 29fe5090..f045009f 100644 --- a/src/protocol_key.c +++ b/src/protocol_key.c @@ -39,7 +39,7 @@ void send_key_changed(void) { /* Immediately send new keys to directly connected nodes to keep UDP mappings alive */ - for list_each(connection_t, c, connection_list) { + for list_each(connection_t, c, &connection_list) { if(c->edge && c->node && c->node->status.reachable && !c->node->status.sptps) { send_ans_key(c->node); } @@ -50,7 +50,7 @@ void send_key_changed(void) { /* Force key exchange for connections using SPTPS */ if(experimental) { - for splay_each(node_t, n, node_tree) { + for splay_each(node_t, n, &node_tree) { if(n->status.reachable && n->status.validkey && n->status.sptps) { sptps_force_kex(&n->sptps); } @@ -340,13 +340,13 @@ bool send_ans_key(node_t *to) { randomize(key, keylen); - cipher_close(to->incipher); - digest_close(to->indigest); + cipher_free(&to->incipher); + digest_free(&to->indigest); if(myself->incipher) { - to->incipher = cipher_open_by_nid(cipher_get_nid(myself->incipher)); + to->incipher = cipher_alloc(); - if(!to->incipher) { + if(!cipher_open_by_nid(to->incipher, cipher_get_nid(myself->incipher))) { abort(); } @@ -356,10 +356,11 @@ bool send_ans_key(node_t *to) { } if(myself->indigest) { - to->indigest = digest_open_by_nid(digest_get_nid(myself->indigest), - digest_length(myself->indigest)); + to->indigest = digest_alloc(); - if(!to->indigest) { + if(!digest_open_by_nid(to->indigest, + digest_get_nid(myself->indigest), + digest_length(myself->indigest))) { abort(); } @@ -459,8 +460,8 @@ bool ans_key_h(connection_t *c, const char *request) { #ifndef DISABLE_LEGACY /* Don't use key material until every check has passed. */ - cipher_close(from->outcipher); - digest_close(from->outdigest); + cipher_free(&from->outcipher); + digest_free(&from->outdigest); #endif if(!from->status.sptps) { @@ -555,7 +556,10 @@ bool ans_key_h(connection_t *c, const char *request) { /* Check and lookup cipher and digest algorithms */ if(cipher) { - if(!(from->outcipher = cipher_open_by_nid(cipher))) { + from->outcipher = cipher_alloc(); + + if(!cipher_open_by_nid(from->outcipher, cipher)) { + cipher_free(&from->outcipher); logger(DEBUG_ALWAYS, LOG_ERR, "Node %s (%s) uses unknown cipher!", from->name, from->hostname); return false; } @@ -564,7 +568,10 @@ bool ans_key_h(connection_t *c, const char *request) { } if(digest) { - if(!(from->outdigest = digest_open_by_nid(digest, maclength))) { + from->outdigest = digest_alloc(); + + if(!digest_open_by_nid(from->outdigest, digest, maclength)) { + digest_free(&from->outdigest); logger(DEBUG_ALWAYS, LOG_ERR, "Node %s (%s) uses unknown digest!", from->name, from->hostname); return false; }