Fix reception of SPTPS UDP packets.
[tinc] / src / net_packet.c
index a01b635..ccc1de6 100644 (file)
@@ -372,7 +372,7 @@ static bool receive_udppacket(node_t *n, vpn_packet_t *inpkt) {
                        }
                        return false;
                }
-               if(!sptps_receive_data(&n->sptps, ((sptps_packet_t *)&inpkt)->data, inpkt->len)) {
+               if(!sptps_receive_data(&n->sptps, ((sptps_packet_t *)inpkt)->data, inpkt->len)) {
                        logger(DEBUG_TRAFFIC, LOG_ERR, "Got bad packet from %s (%s)", n->name, n->hostname);
                        return false;
                }
@@ -1056,7 +1056,7 @@ void handle_incoming_vpn_data(void *data, int flags) {
                // It might be from a 1.1 node, which might have a source ID in the packet.
                from = lookup_node_id(&spkt->srcid);
                if(from && !memcmp(&spkt->dstid, &nullid, sizeof nullid) && from->status.sptps) {
-                       if(sptps_verify_datagram(&n->sptps, spkt->data, spkt->len - sizeof(spkt->srcid) - sizeof(spkt->dstid)))
+                       if(sptps_verify_datagram(&from->sptps, spkt->data, spkt->len - sizeof(spkt->srcid) - sizeof(spkt->dstid)))
                                n = from;
                        else
                                goto skip_harder;
@@ -1077,7 +1077,7 @@ skip_harder:
        }
 
        if(n->status.sptps) {
-               if(memcmp(&spkt->dstid, &nullid, sizeof nullid)) {
+               if(!memcmp(&spkt->dstid, &nullid, sizeof nullid)) {
                        direct = true;
                        from = n;
                        to = myself;