]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
more debugging
authorAlan T. DeKok <aland@freeradius.org>
Mon, 6 Aug 2018 14:27:19 +0000 (10:27 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 6 Aug 2018 14:27:19 +0000 (10:27 -0400)
src/modules/proto_radius/proto_radius_udp.c

index 71164862ab3a0716dd2e728b6eb9ab80c354c6e3..9d2c067956436c4955bb3aadb97d4a2821770b2a 100644 (file)
@@ -193,7 +193,7 @@ static ssize_t mod_read(void *instance, void **packet_ctx, fr_time_t **recv_time
 }
 
 
-static ssize_t mod_write(void *instance, void *packet_ctx, UNUSED fr_time_t request_time,
+static ssize_t mod_write(void *instance, void *packet_ctx, fr_time_t request_time,
                         uint8_t *buffer, size_t buffer_len, UNUSED size_t written)
 {
        proto_radius_udp_t              *inst = talloc_get_type_abort(instance, proto_radius_udp_t);
@@ -228,14 +228,6 @@ static ssize_t mod_write(void *instance, void *packet_ctx, UNUSED fr_time_t requ
 
                        memcpy(&packet, &track->reply, sizeof(packet)); /* const issues */
 
-#if 0
-                       if (fr_radius_verify(track->reply, track->packet,
-                                            (uint8_t const *) track->address->radclient->secret,
-                                            talloc_array_length(track->address->radclient->secret) - 1) < 0) {
-                               rad_assert("packet is corrupted before sending" == NULL);
-                       }
-#endif
-
                        (void) udp_send(inst->sockfd, packet, track->reply_len, flags,
                                        &address->dst_ipaddr, address->dst_port,
                                        address->if_index,
@@ -250,6 +242,22 @@ static ssize_t mod_write(void *instance, void *packet_ctx, UNUSED fr_time_t requ
         */
        rad_assert(buffer_len >= 20);
 
+#if 0
+       if (fr_radius_verify(track->reply, track->packet,
+                            (uint8_t const *) track->address->radclient->secret,
+                            talloc_array_length(track->address->radclient->secret) - 1) < 0) {
+               rad_assert("packet is corrupted before sending" == NULL);
+       }
+#endif
+
+       /*
+        *      Drop packet if it's too late.
+        */
+       if (request_time != track->timestamp) {
+               ERROR("Dropping packet");
+               return data_size;
+       }
+
        /*
         *      Only write replies if they're RADIUS packets.
         *      sometimes we want to NOT send a reply...