]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Fix stupid errors in DHCPv6 state tables and restore code
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sun, 21 Mar 2021 21:57:56 +0000 (21:57 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Wed, 31 Mar 2021 15:08:24 +0000 (16:08 +0100)
src/process/dhcpv6/base.c
src/tests/keywords/map-xlat-struct.attrs

index d93aeee916ab7c70d0131d194811f6e5ddd86d9f..1e6f99c4a878d690dbc59564412258e54dd74e9f 100644 (file)
@@ -298,13 +298,15 @@ int restore_field(request_t *request, fr_pair_t **to_restore)
 {
        fr_pair_t                       *vp;
 
+       VP_VERIFY(*to_restore);
+
        vp = fr_pair_find_by_da(&request->reply_pairs, (*to_restore)->da);
        if (vp) {
                if (fr_pair_cmp(vp, *to_restore) != 0) {
                        RWDEBUG("&reply.%pP does not match &request.%pP", vp, *to_restore);
                        return 0;
                }
-       } else if (fr_pair_steal_append(&request->reply_ctx, &request->reply_pairs, *to_restore) < 0) {
+       } else if (fr_pair_steal_append(request->reply_ctx, &request->reply_pairs, *to_restore) < 0) {
                RPERROR("Failed adding %s", (*to_restore)->da->name);
                return -1;
        }
@@ -868,28 +870,23 @@ static fr_process_state_t const process_state[] = {
                .send = send_generic,
                .resume = resume_send_to_client,
                .packet_type = {
-                       [RLM_MODULE_NOOP]       = FR_DHCPV6_REPLY,
-                       [RLM_MODULE_OK]         = FR_DHCPV6_REPLY,
-                       [RLM_MODULE_UPDATED]    = FR_DHCPV6_REPLY,
-                       /* RLM_MODULE_HANDLED   - Requires the user to set packet-type */
-
-                       [RLM_MODULE_FAIL]       = FR_DHCPV6_REPLY,
+                       [RLM_MODULE_FAIL]       = FR_DHCPV6_DO_NOT_RESPOND,
                        [RLM_MODULE_INVALID]    = FR_DHCPV6_DO_NOT_RESPOND,
-                       [RLM_MODULE_REJECT]     = FR_DHCPV6_REPLY,
-                       [RLM_MODULE_DISALLOW]   = FR_DHCPV6_REPLY,
-                       [RLM_MODULE_NOTFOUND]   = FR_DHCPV6_REPLY
+                       [RLM_MODULE_REJECT]     = FR_DHCPV6_DO_NOT_RESPOND,
+                       [RLM_MODULE_DISALLOW]   = FR_DHCPV6_DO_NOT_RESPOND,
+                       [RLM_MODULE_NOTFOUND]   = FR_DHCPV6_DO_NOT_RESPOND
                },
                .status_codes = {
-                       [RLM_MODULE_NOOP]       = &enum_status_code_unspec_fail,
+                       [RLM_MODULE_NOOP]       = &enum_status_code_success,
                        [RLM_MODULE_OK]         = &enum_status_code_success,
                        [RLM_MODULE_UPDATED]    = &enum_status_code_success,
                        /* RLM_MODULE_HANDLED   - Requires the user to set status-code */
 
-                       [RLM_MODULE_FAIL]       = &enum_status_code_unspec_fail,
+                       /* RLM_MODULE_FAIL      - No response */
                        /* RLM_MODULE_INVALID   - No response */
-                       [RLM_MODULE_REJECT]     = &enum_status_code_unspec_fail,
-                       [RLM_MODULE_DISALLOW]   = &enum_status_code_unspec_fail,
-                       [RLM_MODULE_NOTFOUND]   = &enum_status_code_unspec_fail
+                       /* RLM_MODULE_REJECT    - No response */
+                       /* RLM_MODULE_DISALLOW  - No response */
+                       /* RLM_MODULE_NOTFOUND  - No response */
                },
                .rcode = RLM_MODULE_NOOP,
                .section_offset = offsetof(process_dhcpv6_sections_t, send_advertise),
@@ -913,10 +910,6 @@ static fr_process_state_t const process_state[] = {
                .send = send_generic,
                .resume = resume_send_to_client,
                .packet_type = {
-                       [RLM_MODULE_NOOP]       = FR_DHCPV6_REPLY,
-                       [RLM_MODULE_OK]         = FR_DHCPV6_REPLY,
-                       [RLM_MODULE_UPDATED]    = FR_DHCPV6_REPLY,
-                       /* RLM_MODULE_HANDLED   - Requires the user to set packet-type */
 
                        [RLM_MODULE_FAIL]       = FR_DHCPV6_REPLY,
                        [RLM_MODULE_INVALID]    = FR_DHCPV6_DO_NOT_RESPOND,
@@ -925,7 +918,7 @@ static fr_process_state_t const process_state[] = {
                        [RLM_MODULE_NOTFOUND]   = FR_DHCPV6_REPLY
                },
                .status_codes = {
-                       [RLM_MODULE_NOOP]       = &enum_status_code_unspec_fail,
+                       [RLM_MODULE_NOOP]       = &enum_status_code_success,
                        [RLM_MODULE_OK]         = &enum_status_code_success,
                        [RLM_MODULE_UPDATED]    = &enum_status_code_success,
                        /* RLM_MODULE_HANDLED   - Requires the user to set status-code */
@@ -953,11 +946,6 @@ static fr_process_state_t const process_state[] = {
                .send = send_generic,
                .resume = resume_send_to_relay,
                .packet_type = {
-                       [RLM_MODULE_NOOP]       = FR_DHCPV6_RELAY_REPLY,
-                       [RLM_MODULE_OK]         = FR_DHCPV6_RELAY_REPLY,
-                       [RLM_MODULE_UPDATED]    = FR_DHCPV6_RELAY_REPLY,
-                       /* RLM_MODULE_HANDLED   - Requires the user to set packet-type */
-
                        [RLM_MODULE_FAIL]       = FR_DHCPV6_RELAY_REPLY,
                        [RLM_MODULE_INVALID]    = FR_DHCPV6_DO_NOT_RESPOND,
                        [RLM_MODULE_REJECT]     = FR_DHCPV6_RELAY_REPLY,
@@ -965,7 +953,7 @@ static fr_process_state_t const process_state[] = {
                        [RLM_MODULE_NOTFOUND]   = FR_DHCPV6_RELAY_REPLY
                },
                .status_codes = {
-                       [RLM_MODULE_NOOP]       = &enum_status_code_unspec_fail,
+                       [RLM_MODULE_NOOP]       = &enum_status_code_success,
                        [RLM_MODULE_OK]         = &enum_status_code_success,
                        [RLM_MODULE_UPDATED]    = &enum_status_code_success,
                        /* RLM_MODULE_HANDLED   - Requires the user to set status-code */
index eef05fb7dba0fcc058df1050934eeb4e8c293d85..7a040b5462f77436a8fa99c6c135a620268139ad 100644 (file)
@@ -4,3 +4,6 @@ Client-ID.DUID.UUID.Value = 0xc1b91af2314149b4b53f60c5d2d4197d
 
 Packet-Type == Advertise
 Result-Status == "success"
+Status-Code.Value == 0
+Transaction-ID == 0xFFFFFF
+Client-ID.DUID.UUID.Value == 0xc1b91af2314149b4b53f60c5d2d4197d