Move source from lib/ to src/.
[tinc] / src / net_packet.c
index df6f482..b50ddc4 100644 (file)
@@ -515,7 +515,7 @@ static node_t *try_harder(const sockaddr_t *from, const vpn_packet_t *pkt) {
        for(node = node_tree->head; node; node = node->next) {
                n = node->data;
 
-               if(n == myself || !digest_active(&n->indigest))
+               if(n == myself || !n->status.reachable || !digest_active(&n->indigest))
                        continue;
 
                if(try_mac(n, pkt)) {
@@ -533,15 +533,18 @@ void handle_incoming_vpn_data(int sock, short events, void *data) {
        sockaddr_t from;
        socklen_t fromlen = sizeof from;
        node_t *n;
+       int len;
 
-       pkt.len = recvfrom(sock, (char *) &pkt.seqno, MAXSIZE, 0, &from.sa, &fromlen);
+       len = recvfrom(sock, (char *) &pkt.seqno, MAXSIZE, 0, &from.sa, &fromlen);
 
-       if(pkt.len < 0) {
+       if(len <= 0 || len > MAXSIZE) {
                if(!sockwouldblock(sockerrno))
                        logger(LOG_ERR, "Receiving packet failed: %s", sockstrerror(sockerrno));
                return;
        }
 
+       pkt.len = len;
+
        sockaddrunmap(&from);           /* Some braindead IPv6 implementations do stupid things. */
 
        n = lookup_node_udp(&from);