Detect and prevent two nodes with the same Name being on the VPN simultaneously.
[oweals/tinc.git] / src / net.c
index 64bca947ff08b80c25b4735e68b06321c4e5ae39..ee58ac0a0b943bf1f2e1c8e0f9bba3f179189925 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -44,6 +44,8 @@ bool do_purge = false;
 volatile bool running = false;
 
 time_t now = 0;
 volatile bool running = false;
 
 time_t now = 0;
+int contradicting_add_edge = 0;
+int contradicting_del_edge = 0;
 
 /* Purge edges and subnets of unreachable nodes. Use carefully. */
 
 
 /* Purge edges and subnets of unreachable nodes. Use carefully. */
 
@@ -415,6 +417,19 @@ int main_loop(void) {
                                send_key_changed(broadcast, myself);
                                keyexpires = now + keylifetime;
                        }
                                send_key_changed(broadcast, myself);
                                keyexpires = now + keylifetime;
                        }
+
+                       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!");
+                                       running = false;
+                                       break;
+                               }
+
+                               contradicting_add_edge = 0;
+                               contradicting_del_edge = 0;
+                       }
                }
 
                if(sigalrm) {
                }
 
                if(sigalrm) {