From: Alan T. DeKok Date: Thu, 22 Nov 2018 12:21:06 +0000 (-0500) Subject: set packet->code from DHCP-Message-Type X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f418187866db6dceed968b66c84ade3acda687db;p=thirdparty%2Ffreeradius-server.git set packet->code from DHCP-Message-Type --- diff --git a/src/modules/proto_dhcpv4/proto_dhcpv4.c b/src/modules/proto_dhcpv4/proto_dhcpv4.c index 465a3ea3405..53f49e896a3 100644 --- a/src/modules/proto_dhcpv4/proto_dhcpv4.c +++ b/src/modules/proto_dhcpv4/proto_dhcpv4.c @@ -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. */ diff --git a/src/modules/rlm_radius/rlm_radius_udp.c b/src/modules/rlm_radius/rlm_radius_udp.c index 3886738fec8..66b94aa5856 100644 --- a/src/modules/rlm_radius/rlm_radius_udp.c +++ b/src/modules/rlm_radius/rlm_radius_udp.c @@ -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); }