From 7e4d57adf54ce369e4111bde0ccd3ea4b9e853ee Mon Sep 17 00:00:00 2001 From: Michael Tokarev Date: Fri, 22 May 2009 01:01:35 +0400 Subject: [PATCH] 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. --- src/protocol_edge.c | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/src/protocol_edge.c b/src/protocol_edge.c index bcc17db..0db3e7b 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); -- 2.25.1