]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
print out the full socket information when decoding fails developer/alandekok
authorAlan T. DeKok <aland@freeradius.org>
Thu, 5 Feb 2026 18:36:05 +0000 (13:36 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 5 Feb 2026 18:56:41 +0000 (13:56 -0500)
src/listen/radius/proto_radius.c
src/listen/radius/proto_radius.h
src/listen/radius/proto_radius_tcp.c
src/listen/radius/proto_radius_udp.c

index 1e1e4e26f25d7936549ff95eb0607916e77772d2..c4b943f2e8779306cb2046e9ae65efc2c63fe87e 100644 (file)
@@ -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);
index 47cf7755ca3609ecc8ac8826646faf2f565b4bd3..9ae199af410119241795cdc69b70cf7d729c03bc 100644 (file)
@@ -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, ...);
index 7f9dccb85d3db92f1e9ea4194b001776c6e6553f..276097d37d4c9a37c372c4acca3185c405d7b523 100644 (file)
@@ -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;
        }
index 16d188522a0b3dbb31c3ba7b773379d2eedc7d1b..69bf13412adde6697ade71a0a2f6b050fe617089 100644 (file)
@@ -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;