Detect duplicate outgoing connections.
authorGuus Sliepen <guus@tinc-vpn.org>
Fri, 18 May 2007 10:29:10 +0000 (10:29 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Fri, 18 May 2007 10:29:10 +0000 (10:29 +0000)
src/protocol_auth.c

index 70ccda178b983cfd1a3788d46c06253ac867bb1b..18fbb64af0438eac8deb38fc16187272bec26083 100644 (file)
@@ -540,8 +540,17 @@ bool ack_h(connection_t *c) {
        } else {
                if(n->connection) {
                        /* Oh dear, we already have a connection to this node. */
-                       ifdebug(CONNECTIONS) logger(LOG_DEBUG, _("Established a second connection with %s (%s), closing old connection"),
-                                          n->name, n->hostname);
+                       ifdebug(CONNECTIONS) logger(LOG_DEBUG, _("Established a second connection with %s (%s), closing old connection"), n->connection->name, n->connection->hostname);
+
+                       if(n->connection->outgoing) {
+                               if(c->outgoing)
+                                       logger(LOG_WARNING, _("Two outgoing connections to the same node!"));
+                               else
+                                       c->outgoing = n->connection->outgoing;
+
+                               n->connection->outgoing = NULL;
+                       }
+
                        terminate_connection(n->connection, false);
                        /* Run graph algorithm to purge key and make sure up/down scripts are rerun with new IP addresses and stuff */
                        graph();