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.
This commit is contained in:
Michael Tokarev 2009-05-22 01:01:35 +04:00 committed by Guus Sliepen
parent 3759aa5f77
commit 7e4d57adf5

View file

@ -95,6 +95,17 @@ bool add_edge_h(connection_t *c)
/* Lookup nodes */ /* Lookup nodes */
from = lookup_node(from_name); 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) { if(!from) {
from = new_node(); from = new_node();
@ -102,16 +113,12 @@ bool add_edge_h(connection_t *c)
node_add(from); node_add(from);
} }
to = lookup_node(to_name);
if(!to) { if(!to) {
to = new_node(); to = new_node();
to->name = xstrdup(to_name); to->name = xstrdup(to_name);
node_add(to); node_add(to);
} }
if(tunnelserver && from != myself && from != c->node && to != myself && to != c->node)
return false;
/* Convert addresses */ /* Convert addresses */
@ -210,6 +217,17 @@ bool del_edge_h(connection_t *c)
/* Lookup nodes */ /* Lookup nodes */
from = lookup_node(from_name); 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) { if(!from) {
ifdebug(PROTOCOL) logger(LOG_ERR, _("Got %s from %s (%s) which does not appear in the edge tree"), 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; return true;
} }
to = lookup_node(to_name);
if(!to) { if(!to) {
ifdebug(PROTOCOL) logger(LOG_ERR, _("Got %s from %s (%s) which does not appear in the edge tree"), ifdebug(PROTOCOL) logger(LOG_ERR, _("Got %s from %s (%s) which does not appear in the edge tree"),
"DEL_EDGE", c->name, c->hostname); "DEL_EDGE", c->name, c->hostname);
return true; return true;
} }
if(tunnelserver && from != myself && from != c->node && to != myself && to != c->node)
return false;
/* Check if edge exists */ /* Check if edge exists */
e = lookup_edge(from, to); e = lookup_edge(from, to);