]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
fix fr_dhcpv6_ok() for relay message
authorAlan T. DeKok <aland@freeradius.org>
Fri, 2 Oct 2020 15:54:37 +0000 (11:54 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 2 Oct 2020 15:54:37 +0000 (11:54 -0400)
src/protocols/dhcpv6/base.c

index 6897931b5494342b5315e14f4ab60ba6f5f960cf..763d8f8449691b45d5947557f89b45b1a6604c53 100644 (file)
@@ -183,15 +183,21 @@ bool fr_dhcpv6_ok(uint8_t const *packet, size_t packet_len,
        uint8_t const *end;
        uint32_t attributes;
 
-       /*
-        *      8 bit code + 24 bits of transaction ID
-        */
-       if (packet_len < 4) return false;
+       if ((packet[0] == FR_DHCPV6_RELAY_FORWARD) ||
+           (packet[0] == FR_DHCPV6_RELAY_REPLY)) {
+               if (packet_len < 2 + 32) return false;
 
-       if (packet_len == 4) return true;
+               p = packet + 2 + 32;
+       } else {
+               /*
+                *      8 bit code + 24 bits of transaction ID
+                */
+               if (packet_len < 4) return false;
+
+               p = packet + 4;
+       }
 
        attributes = 0;
-       p = packet + 4;
        end = packet + packet_len;
 
        while (p < end) {