From: Michael Tokarev Date: Mon, 9 Feb 2009 22:51:10 +0000 (+0100) Subject: Allow tunnelserver to work with clients that have other peers. X-Git-Tag: release-1.0.10~86 X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=2327d3f6eb5982bcc922ff1ab1ec436ba6aeffdc;hp=23730375f27c32e0fe1a59c7a761dd85296a7a4a Allow tunnelserver to work with clients that have other peers. In TunnelServer mode, tinc server disconnects any client if it announces indirect subnets -- subnets that are not theirs (e.g. subnets for nodes the CLIENT has connections now, even if those nodes are known to the server too). Fix that by ignoring such (indirect) announces instead. While we're at it, move check for such indirect subnet registration to before allocating new node structure, as in TunnelServer mode we don't really need to know that other node. --- diff --git a/src/protocol_subnet.c b/src/protocol_subnet.c index e3600bdf..22fb0588 100644 --- a/src/protocol_subnet.c +++ b/src/protocol_subnet.c @@ -83,15 +83,19 @@ bool add_subnet_h(connection_t *c) owner = lookup_node(name); + if(tunnelserver && owner != myself && owner != c->node) { + /* in case of tunnelserver, ignore indirect subnet registrations */ + ifdebug(PROTOCOL) logger(LOG_WARNING, _("Ignoring indirect %s from %s (%s) for %s"), + "ADD_SUBNET", c->name, c->hostname, subnetstr); + return true; + } + if(!owner) { owner = new_node(); owner->name = xstrdup(name); node_add(owner); } - if(tunnelserver && owner != myself && owner != c->node) - return false; - /* Check if we already know this subnet */ if(lookup_subnet(owner, &s))