X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fprotocol_edge.c;h=7569e231834f047fa0a042d895d9a80b0b0412a1;hb=8c10a4131f19dc27b0bc56ef48ae481d1fa03cb0;hp=18b6befeca0b77d4b8aaad1e76efe39870973633;hpb=f6e87ab476a0faf8b124ecaaa27f967d825e6457;p=tinc diff --git a/src/protocol_edge.c b/src/protocol_edge.c index 18b6befe..7569e231 100644 --- a/src/protocol_edge.c +++ b/src/protocol_edge.c @@ -22,11 +22,11 @@ #include "system.h" #include "conf.h" +#include "crypto.h" #include "connection.h" #include "edge.h" #include "graph.h" #include "logger.h" -#include "meta.h" #include "net.h" #include "netutl.h" #include "node.h" @@ -44,13 +44,13 @@ bool send_add_edge(connection_t *c, const edge_t *e) { char *local_address, *local_port; sockaddr2str(&e->local_address, &local_address, &local_port); - x = send_request(c, "%d %x %s %s %s %s %x %d %s %s", ADD_EDGE, rand(), + x = send_request(c, "%d %x %s %s %s %s %x %d %s %s", ADD_EDGE, prng(UINT32_MAX), e->from->name, e->to->name, address, port, e->options, e->weight, local_address, local_port); free(local_address); free(local_port); } else { - x = send_request(c, "%d %x %s %s %s %s %x %d", ADD_EDGE, rand(), + x = send_request(c, "%d %x %s %s %s %s %x %d", ADD_EDGE, prng(UINT32_MAX), e->from->name, e->to->name, address, port, e->options, e->weight); } @@ -70,7 +70,7 @@ bool add_edge_h(connection_t *c, const char *request) { char to_port[MAX_STRING_SIZE]; char address_local[MAX_STRING_SIZE]; char port_local[MAX_STRING_SIZE]; - sockaddr_t address, local_address = {{0}}; + sockaddr_t address, local_address = {0}; uint32_t options; int weight; @@ -85,7 +85,7 @@ bool add_edge_h(connection_t *c, const char *request) { /* Check if names are valid */ - if(!check_id(from_name) || !check_id(to_name)) { + if(!check_id(from_name) || !check_id(to_name) || !strcmp(from_name, to_name)) { logger(DEBUG_ALWAYS, LOG_ERR, "Got bad %s from %s (%s): %s", "ADD_EDGE", c->name, c->hostname, "invalid name"); return false; @@ -178,9 +178,9 @@ bool add_edge_h(connection_t *c, const char *request) { } if(e->weight != weight) { - splay_node_t *node = splay_unlink(edge_weight_tree, e); + splay_node_t *node = splay_unlink(&edge_weight_tree, e); e->weight = weight; - splay_insert_node(edge_weight_tree, node); + splay_insert_node(&edge_weight_tree, node); } } else if(from == myself) { logger(DEBUG_PROTOCOL, LOG_WARNING, "Got %s from %s (%s) for ourself which does not exist", @@ -219,7 +219,7 @@ bool add_edge_h(connection_t *c, const char *request) { } bool send_del_edge(connection_t *c, const edge_t *e) { - return send_request(c, "%d %x %s %s", DEL_EDGE, rand(), + return send_request(c, "%d %x %s %s", DEL_EDGE, prng(UINT32_MAX), e->from->name, e->to->name); } @@ -237,7 +237,7 @@ bool del_edge_h(connection_t *c, const char *request) { /* Check if names are valid */ - if(!check_id(from_name) || !check_id(to_name)) { + if(!check_id(from_name) || !check_id(to_name) || !strcmp(from_name, to_name)) { logger(DEBUG_ALWAYS, LOG_ERR, "Got bad %s from %s (%s): %s", "DEL_EDGE", c->name, c->hostname, "invalid name"); return false;