From: Michael Tokarev Date: Thu, 21 May 2009 21:01:35 +0000 (+0400) Subject: ignore indirect edge registrations in tunnelserver mode X-Git-Tag: release-1.0.10~70 X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=7e4d57adf54ce369e4111bde0ccd3ea4b9e853ee;ds=sidebyside ignore indirect edge registrations in tunnelserver mode In tunnelserver mode we're not interested to hear about our client edges, just like in case of subnets. Just ignore all requests which are not about our node or the client node. The fix is very similar to what was done for subnets. Note that we don't need to add the "unknown" nodes to the list in tunnelserver mode too, so move allocation of new nodes down the line. --- diff --git a/src/protocol_edge.c b/src/protocol_edge.c index bcc17db0..0db3e7b7 100644 --- a/src/protocol_edge.c +++ b/src/protocol_edge.c @@ -95,6 +95,17 @@ bool add_edge_h(connection_t *c) /* Lookup nodes */ from = lookup_node(from_name); + to = lookup_node(to_name); + + if(tunnelserver && + from != myself && from != c->node && + to != myself && to != c->node) { + /* ignore indirect edge registrations for tunnelserver */ + ifdebug(PROTOCOL) logger(LOG_WARNING, + _("Ignoring indirect %s from %s (%s)"), + "ADD_EDGE", c->name, c->hostname); + return true; + } if(!from) { from = new_node(); @@ -102,16 +113,12 @@ bool add_edge_h(connection_t *c) node_add(from); } - to = lookup_node(to_name); - if(!to) { to = new_node(); to->name = xstrdup(to_name); node_add(to); } - if(tunnelserver && from != myself && from != c->node && to != myself && to != c->node) - return false; /* Convert addresses */ @@ -210,6 +217,17 @@ bool del_edge_h(connection_t *c) /* Lookup nodes */ from = lookup_node(from_name); + to = lookup_node(to_name); + + if(tunnelserver && + from != myself && from != c->node && + to != myself && to != c->node) { + /* ignore indirect edge registrations for tunnelserver */ + ifdebug(PROTOCOL) logger(LOG_WARNING, + _("Ignoring indirect %s from %s (%s)"), + "DEL_EDGE", c->name, c->hostname); + return true; + } if(!from) { ifdebug(PROTOCOL) logger(LOG_ERR, _("Got %s from %s (%s) which does not appear in the edge tree"), @@ -217,17 +235,12 @@ bool del_edge_h(connection_t *c) return true; } - to = lookup_node(to_name); - if(!to) { ifdebug(PROTOCOL) logger(LOG_ERR, _("Got %s from %s (%s) which does not appear in the edge tree"), "DEL_EDGE", c->name, c->hostname); return true; } - if(tunnelserver && from != myself && from != c->node && to != myself && to != c->node) - return false; - /* Check if edge exists */ e = lookup_edge(from, to);