]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
set packet->code from DHCP-Message-Type
authorAlan T. DeKok <aland@freeradius.org>
Thu, 22 Nov 2018 12:21:06 +0000 (07:21 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 22 Nov 2018 12:27:40 +0000 (07:27 -0500)
src/modules/proto_dhcpv4/proto_dhcpv4.c
src/modules/rlm_radius/rlm_radius_udp.c

index 465a3ea3405f9dd30b8134a2de7a5ea219916bee..53f49e896a3e7ce2fedc87e77f0fc2074826534a 100644 (file)
@@ -267,6 +267,7 @@ static int mod_decode(void const *instance, REQUEST *request, uint8_t *const dat
        fr_io_track_t const *track = talloc_get_type_abort_const(request->async->packet_ctx, fr_io_track_t);
        fr_io_address_t *address = track->address;
        RADCLIENT const *client;
+       VALUE_PAIR *vp;
 
        rad_assert(data[0] < FR_MAX_PACKET_CODE);
 
@@ -287,7 +288,6 @@ static int mod_decode(void const *instance, REQUEST *request, uint8_t *const dat
        /*
         *      Hacks for now until we have a lower-level decode routine.
         */
-       request->packet->code = data[0];
        request->packet->id = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7];
        request->reply->id = request->packet->id;
        memcpy(request->packet->vector, data + 4, sizeof(request->packet->vector));
@@ -305,6 +305,14 @@ static int mod_decode(void const *instance, REQUEST *request, uint8_t *const dat
                return -1;
        }
 
+       vp = fr_pair_find_by_da(request->packet->vps, attr_message_type, TAG_ANY);
+       if (!vp) {
+               RPEDEBUG("Packet does not contain DHCP-Message-Type");
+               return -1;
+       }
+
+       request->packet->code = vp->vp_uint8;
+
        /*
         *      Set the rest of the fields.
         */
index 3886738fec847bbbb091bb59bb2c025351f60baa..66b94aa585617a9690f31a4a34f57c2f96eb6467 100644 (file)
@@ -2330,7 +2330,6 @@ static fr_connection_state_t _conn_open(UNUSED fr_event_list_t *el, int fd, void
                                if ((c->inst->parent->status_check != FR_CODE_ACCESS_REQUEST) &&
                                    (map->lhs->tmpl_da == attr_user_password)) continue;
 
-
                                (void) map_to_request(request, map, map_to_vp, NULL);
                        }