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:
parent
3759aa5f77
commit
7e4d57adf5
1 changed files with 22 additions and 9 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue