From: Alan T. DeKok Date: Thu, 5 Feb 2026 18:36:05 +0000 (-0500) Subject: print out the full socket information when decoding fails X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06add391e2a406292c0f8df2d08fdc90be80453c;p=thirdparty%2Ffreeradius-server.git print out the full socket information when decoding fails --- diff --git a/src/listen/radius/proto_radius.c b/src/listen/radius/proto_radius.c index 1e1e4e26f25..c4b943f2e87 100644 --- a/src/listen/radius/proto_radius.c +++ b/src/listen/radius/proto_radius.c @@ -225,7 +225,7 @@ DIAG_OFF(format-nonliteral) * * 'fmt' is from our source code, so we don't care about format literals. */ -void proto_radius_log(fr_listen_t *li, char const *name, fr_radius_decode_fail_t reason, +void proto_radius_log(fr_listen_t const *li, fr_radius_decode_fail_t reason, fr_socket_t const *sock, char const *fmt, ...) { va_list ap; @@ -238,14 +238,14 @@ void proto_radius_log(fr_listen_t *li, char const *name, fr_radius_decode_fail_t va_end(ap); if (sock) { - EDEBUG2("proto_%s - discarding packet on socket %s from client %pV port %u - %s (%s)", - li->app_io->common.name, name, + EDEBUG2("proto_radius - discarding packet on socket %s from client %pV port %u - %s (%s)", + li->name, fr_box_ipaddr(sock->inet.src_ipaddr), sock->inet.src_port, msg, fr_radius_decode_fail_reason[reason]); } else { - EDEBUG2("proto_%s - discarding packet on socket %s - %s (%s)", - li->app_io->common.name, name, msg, fr_radius_decode_fail_reason[reason]); + EDEBUG2("proto_radius - discarding packet on socket %s - %s (%s)", + li->name, msg, fr_radius_decode_fail_reason[reason]); } EDEBUG2("For more information, please see " DOC_ROOT_URL "/troubleshooting/network/%s.html", url[reason]); @@ -327,14 +327,8 @@ static int mod_decode(void const *instance, request_t *request, uint8_t *const d data, data_len, &decode_ctx) < 0) { talloc_free(decode_ctx.tmp_ctx); - /* - * @todo - print out socket name, too. - */ - EDEBUG2("proto_%s - discarding packet - failed decode (%s)", - inst->io.app_io->common.name, fr_radius_decode_fail_reason[decode_ctx.reason]); - EDEBUG2("For more information, please see " DOC_ROOT_URL "/troubleshooting/network/%s.html", - url[decode_ctx.reason]); - + proto_radius_log(track->li, decode_ctx.reason, &address->socket, + "decoding failed"); return -1; } talloc_free(decode_ctx.tmp_ctx); diff --git a/src/listen/radius/proto_radius.h b/src/listen/radius/proto_radius.h index 47cf7755ca3..9ae199af410 100644 --- a/src/listen/radius/proto_radius.h +++ b/src/listen/radius/proto_radius.h @@ -56,4 +56,4 @@ struct proto_radius_io_thread_s { }; -void proto_radius_log(fr_listen_t *li, char const *name, fr_radius_decode_fail_t reason, fr_socket_t const *sock, char const *fmt, ...); +void proto_radius_log(fr_listen_t const *li, fr_radius_decode_fail_t reason, fr_socket_t const *sock, char const *fmt, ...); diff --git a/src/listen/radius/proto_radius_tcp.c b/src/listen/radius/proto_radius_tcp.c index 7f9dccb85d3..276097d37d4 100644 --- a/src/listen/radius/proto_radius_tcp.c +++ b/src/listen/radius/proto_radius_tcp.c @@ -145,7 +145,7 @@ static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *re break; } - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_IO_ERROR, NULL, + proto_radius_log(li, FR_RADIUS_FAIL_IO_ERROR, NULL, "%s", fr_strerror()); return data_size; } @@ -160,7 +160,7 @@ static ssize_t mod_read(fr_listen_t *li, UNUSED void **packet_ctx, fr_time_t *re * TCP read of zero means the socket is dead. */ if (!data_size) { - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_IO_ERROR, NULL, + proto_radius_log(li, FR_RADIUS_FAIL_IO_ERROR, NULL, "Client closed the connection"); return -1; } @@ -170,7 +170,7 @@ have_packet: * We MUST always start with a known RADIUS packet. */ if ((buffer[0] == 0) || (buffer[0] >= FR_RADIUS_CODE_MAX)) { - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_UNKNOWN_PACKET_CODE, NULL, + proto_radius_log(li, FR_RADIUS_FAIL_UNKNOWN_PACKET_CODE, NULL, "Received packet code %u", buffer[0]); thread->stats.total_unknown_types++; return -1; @@ -210,7 +210,7 @@ have_packet: * If it's not a RADIUS packet, ignore it. */ if (!fr_radius_ok(buffer, &packet_len, inst->max_attributes, false, &reason)) { - proto_radius_log(li, thread->name, reason, NULL, "Received invalid packet"); + proto_radius_log(li, reason, NULL, "Received invalid packet"); thread->stats.total_malformed_requests++; return -1; } diff --git a/src/listen/radius/proto_radius_udp.c b/src/listen/radius/proto_radius_udp.c index 16d188522a0..69bf13412ad 100644 --- a/src/listen/radius/proto_radius_udp.c +++ b/src/listen/radius/proto_radius_udp.c @@ -136,13 +136,13 @@ static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time data_size = udp_recv(thread->sockfd, flags, &address->socket, buffer, buffer_len, recv_time_p); if (data_size < 0) { - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_IO_ERROR, NULL, + proto_radius_log(li, FR_RADIUS_FAIL_IO_ERROR, NULL, "%s", fr_strerror()); return data_size; } if (!data_size) { - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_IO_ERROR, NULL, + proto_radius_log(li, FR_RADIUS_FAIL_IO_ERROR, NULL, "Received no data"); return 0; } @@ -150,21 +150,21 @@ static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time packet_len = data_size; if (data_size < 20) { - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_MIN_LENGTH_PACKET, &address->socket, + proto_radius_log(li, FR_RADIUS_FAIL_MIN_LENGTH_PACKET, &address->socket, "Received packet length %zu", packet_len); thread->stats.total_malformed_requests++; return 0; } if (packet_len > inst->max_packet_size) { - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_MIN_LENGTH_PACKET, &address->socket, + proto_radius_log(li, FR_RADIUS_FAIL_MIN_LENGTH_PACKET, &address->socket, "Received packet length %zu"); thread->stats.total_malformed_requests++; return 0; } if ((buffer[0] == 0) || (buffer[0] >= FR_RADIUS_CODE_MAX)) { - proto_radius_log(li, thread->name, FR_RADIUS_FAIL_UNKNOWN_PACKET_CODE, &address->socket, + proto_radius_log(li, FR_RADIUS_FAIL_UNKNOWN_PACKET_CODE, &address->socket, "Received packet code %u", buffer[0]); thread->stats.total_unknown_types++; return 0; @@ -174,7 +174,7 @@ static ssize_t mod_read(fr_listen_t *li, void **packet_ctx, fr_time_t *recv_time * If it's not well-formed, discard it. */ if (!fr_radius_ok(buffer, &packet_len, inst->max_attributes, false, &reason)) { - proto_radius_log(li, thread->name, reason, &address->socket, + proto_radius_log(li, reason, &address->socket, "Received invalid packet"); thread->stats.total_malformed_requests++; return 0;