From: Etienne Dechamps Date: Mon, 18 May 2015 19:48:45 +0000 (+0100) Subject: Don't parse node IDs if the sending node doesn't support them. X-Git-Tag: release-1.1pre12~150 X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=commitdiff_plain;h=fef29d0193afc7e0a9dc766ef75b79cd4dc6fa37 Don't parse node IDs if the sending node doesn't support them. Currently, tinc tries to parse node IDs for all SPTPS packets, including ones sent from older, pre-node-IDs tinc-1.1 nodes, and therefore doesn't recognize packets from these nodes. This commit fixes that. It also makes code slightly clearer by reducing the amount of fiddling around packet offset/length. --- diff --git a/src/net_packet.c b/src/net_packet.c index e169e2cd..4c060453 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -282,9 +282,8 @@ static bool receive_udppacket(node_t *n, vpn_packet_t *inpkt) { } return false; } - inpkt->offset += 2 * sizeof(node_id_t); n->status.udppacket = true; - bool result = sptps_receive_data(&n->sptps, DATA(inpkt), inpkt->len - 2 * sizeof(node_id_t)); + bool result = sptps_receive_data(&n->sptps, DATA(inpkt), inpkt->len); n->status.udppacket = false; if(!result) { @@ -1440,10 +1439,16 @@ skip_harder: return; } + pkt.offset = 0; + if(n->status.sptps) { - pkt.offset = 2 * sizeof(node_id_t); + bool relay_enabled = (n->options >> 24) >= 4; + if (relay_enabled) { + pkt.offset = 2 * sizeof(node_id_t); + pkt.len -= pkt.offset; + } - if(!memcmp(DSTID(&pkt), &nullid, sizeof nullid)) { + if(!memcmp(DSTID(&pkt), &nullid, sizeof nullid) || !relay_enabled) { direct = true; from = n; to = myself; @@ -1468,7 +1473,7 @@ skip_harder: /* If we're not the final recipient, relay the packet. */ if(to != myself) { - send_sptps_data(to, from, 0, DATA(&pkt), pkt.len - 2 * sizeof(node_id_t)); + send_sptps_data(to, from, 0, DATA(&pkt), pkt.len); try_tx_sptps(to, true); return; } @@ -1477,7 +1482,6 @@ skip_harder: from = n; } - pkt.offset = 0; if(!receive_udppacket(from, &pkt)) return;