X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;ds=sidebyside;f=src%2Fnet.c;h=0fcc6fae31b4c590fad73d92fa65bc31608679b0;hb=ce8775000ab38229a78ecf3dc26bab008ca0f332;hp=0e5823641de349b1bb2321623be9820e0a37891c;hpb=79e46d08a46f2fef2ee4e8eac7ba487007160564;p=tinc diff --git a/src/net.c b/src/net.c index 0e582364..0fcc6fae 100644 --- a/src/net.c +++ b/src/net.c @@ -1,7 +1,7 @@ /* net.c -- most of the network code Copyright (C) 1998-2005 Ivo Timmermans, - 2000-2010 Guus Sliepen + 2000-2011 Guus Sliepen 2006 Scott Lamb This program is free software; you can redistribute it and/or modify @@ -36,6 +36,9 @@ #include "subnet.h" #include "xalloc.h" +int contradicting_add_edge = 0; +int contradicting_del_edge = 0; + /* Purge edges and subnets of unreachable nodes. Use carefully. */ void purge(void) { @@ -189,6 +192,19 @@ static void timeout_handler(int fd, short events, void *event) { } } + if(contradicting_del_edge && contradicting_add_edge) { + logger(LOG_WARNING, "Possible node with same Name as us!"); + + if(rand() % 3 == 0) { + logger(LOG_ERR, "Shutting down, check configuration of all nodes for duplicate Names!"); + event_loopexit(NULL); + return; + } + + contradicting_add_edge = 0; + contradicting_del_edge = 0; + } + event_add(event, &(struct timeval){pingtimeout, 0}); } @@ -275,6 +291,7 @@ int reload_configuration(void) { if(strictsubnets) { subnet_t *subnet; + for(node = subnet_tree->head; node; node = node->next) { subnet = node->data; subnet->expires = 1;