]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Dump invalid diameter attrs in TTLS inner tunnel
authorAlan T. DeKok <aland@freeradius.org>
Fri, 27 Jul 2012 20:51:14 +0000 (16:51 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 27 Jul 2012 20:53:08 +0000 (16:53 -0400)
src/modules/rlm_eap/types/rlm_eap_ttls/ttls.c

index 6402bd6511090d85f05a21dffe95d9ec174c2d8d..7c966803e78def820c20be52ae2e774eeb3d4463 100644 (file)
@@ -56,6 +56,20 @@ static int diameter_verify(REQUEST *request,
 
                if (data_len < 12) {
                        RDEBUG2(" Diameter attribute is too small to contain a Diameter header");
+#ifndef NDEBUG
+               dump_hex:
+                       if (debug_flag) {
+                               unsigned int i;
+
+                               for (i = 0; i < data_len; i++) {
+                                       if ((i & 0x0f) == 0) printf("%04x: ", i);
+                                       printf("%02x ", data[i]);
+                                       if ((i & 0x0f) == 0x0f) printf("\n");
+                               }
+                               if ((data_len & 0x0f) != 0x0f) printf("\n");
+                       }
+#endif
+
                        return 0;
                }
 
@@ -67,7 +81,7 @@ static int diameter_verify(REQUEST *request,
                if ((data[4] & 0x80) != 0) {
                        if (data_len < 16) {
                                RDEBUG2(" Diameter attribute is too small to contain a Diameter header with Vendor-Id");
-                               return 0;
+                               goto dump_hex;
                        }
 
                        hdr_len = 16;
@@ -83,12 +97,12 @@ static int diameter_verify(REQUEST *request,
                 */
                if (length <= (hdr_len - 4)) {
                        RDEBUG2("Tunneled attribute %u is too short (%u < %u) to contain anything useful.", attr, length, hdr_len);
-                       return 0;
+                       goto dump_hex;
                }
 
                if (length > data_left) {
                        RDEBUG2("Tunneled attribute %u is longer than room left in the packet (%u > %u).", attr, length, data_left);
-                       return 0;
+                       goto dump_hex;
                }
 
                /*
@@ -114,7 +128,7 @@ static int diameter_verify(REQUEST *request,
                 */
                if (data_left < length) {
                        RDEBUG2("ERROR! Diameter attribute overflows packet!");
-                       return 0;
+                       goto dump_hex;
                }
 
                /*