return;
}
+static const char *tabs = "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t";
+
+static void print_hex_data(const uint8_t *ptr, int attrlen, int depth)
+{
+ int i;
+
+ for (i = 0; i < attrlen; i++) {
+ if ((i > 0) && ((i & 0x0f) == 0x00))
+ fprintf(fr_log_fp, "%.*s", depth, tabs);
+ fprintf(fr_log_fp, "%02x ", ptr[i]);
+ if ((i & 0x0f) == 0x0f) fprintf(fr_log_fp, "\n");
+ }
+ if ((i & 0x0f) != 0) fprintf(fr_log_fp, "\n");
+}
+
+
void rad_print_hex(RADIUS_PACKET *packet)
{
int i;
- if (!packet->data) return;
+ if (!packet->data || !fr_log_fp) return;
- printf(" Code:\t\t%u\n", packet->data[0]);
- printf(" Id:\t\t%u\n", packet->data[1]);
- printf(" Length:\t%u\n", ((packet->data[2] << 8) |
+ fprintf(fr_log_fp, " Code:\t\t%u\n", packet->data[0]);
+ fprintf(fr_log_fp, " Id:\t\t%u\n", packet->data[1]);
+ fprintf(fr_log_fp, " Length:\t%u\n", ((packet->data[2] << 8) |
(packet->data[3])));
- printf(" Vector:\t");
+ fprintf(fr_log_fp, " Vector:\t");
for (i = 4; i < 20; i++) {
- printf("%02x", packet->data[i]);
+ fprintf(fr_log_fp, "%02x", packet->data[i]);
}
- printf("\n");
+ fprintf(fr_log_fp, "\n");
if (packet->data_len > 20) {
int total;
const uint8_t *ptr;
- printf(" Data:");
+ fprintf(fr_log_fp, " Data:");
total = packet->data_len - 20;
ptr = packet->data + 20;
int attrlen;
unsigned int vendor = 0;
- printf("\t\t");
+ fprintf(fr_log_fp, "\t\t");
if (total < 2) { /* too short */
- printf("%02x\n", *ptr);
+ fprintf(fr_log_fp, "%02x\n", *ptr);
break;
}
if (ptr[1] > total) { /* too long */
for (i = 0; i < total; i++) {
- printf("%02x ", ptr[i]);
+ fprintf(fr_log_fp, "%02x ", ptr[i]);
}
break;
}
- printf("%02x %02x ", ptr[0], ptr[1]);
+ fprintf(fr_log_fp, "%02x %02x ", ptr[0], ptr[1]);
attrlen = ptr[1] - 2;
if ((ptr[0] == PW_VENDOR_SPECIFIC) &&
(attrlen > 4)) {
vendor = (ptr[3] << 16) | (ptr[4] << 8) | ptr[5];
- printf("%02x%02x%02x%02x (%u) ",
+ fprintf(fr_log_fp, "%02x%02x%02x%02x (%u) ",
ptr[2], ptr[3], ptr[4], ptr[5], vendor);
attrlen -= 4;
ptr += 6;
vendor = 0;
}
- for (i = 0; i < attrlen; i++) {
- if ((i > 0) && ((i & 0x0f) == 0x00))
- printf("\t\t\t");
- printf("%02x ", ptr[i]);
- if ((i & 0x0f) == 0x0f) printf("\n");
- }
+ print_hex_data(ptr, attrlen, 3);
- if ((attrlen & 0x0f) != 0x00) printf("\n");
+ if ((attrlen & 0x0f) != 0x00) fprintf(fr_log_fp, "\n");
ptr += attrlen;
total -= attrlen;
/* len can NEVER be more than 253 */
ptr[1] += len;
+
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) {
+ fprintf(fr_log_fp, "\t\t%02x %02x ", ptr[0], ptr[1]);
+ print_hex_data(ptr + 2, len, 3);
+ }
+#endif
+
room -= ptr[1];
ptr += ptr[1];
*pvp = vp;
if (!do_next_tlv(old_vp, nest)) break;
+ debug_pair(vp);
}
return ptr - start;
ptr[1] += len;
ptr[7] += len;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) {
+ DICT_ATTR *da;
+
+ da = dict_attrbyvalue(ptr[6], vp->vendor);
+ if (da && (da->type == PW_TYPE_TLV)) {
+ fprintf(fr_log_fp, "\t%s = ...\n", da->name);
+ }
+
+ fprintf(fr_log_fp, "\t\t%02x %02x %02x%02x%02x%02x (%u) %02x %02x %02x ",
+ ptr[0], ptr[1],
+ ptr[2], ptr[3], ptr[4], ptr[5],
+ (ptr[3] << 16) | (ptr[4] << 8) | ptr[5],
+ ptr[6], ptr[7], ptr[8]);
+ print_hex_data(ptr + 9, len, 3);
+ }
+#endif
+
return (ptr + ptr[1]) - start;
}
ptr[1] += len;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) {
+ fprintf(fr_log_fp, "\t\t%02x %02x ", ptr[0], ptr[1]);
+ print_hex_data(ptr + 2, len, 3);
+ }
+#endif
+
return ptr[1];
}
ptr[1] = (attribute >> 16) & 0xff;
ptr[2] = (attribute >> 8) & 0xff;
ptr[3] = attribute & 0xff;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) fprintf(fr_log_fp, "\t\t%02x%02x%02x%02x ",
+ ptr[0], ptr[1], ptr[2], ptr[3]);
+#endif
break;
case 2:
ptr[0] = (attribute >> 8) & 0xff;
ptr[1] = attribute & 0xff;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) fprintf(fr_log_fp, "\t\t%02x%02x ", ptr[0], ptr[1]);
+#endif
break;
case 1:
ptr[0] = attribute & 0xff;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) fprintf(fr_log_fp, "\t\t%02x ", ptr[0]);
+#endif
break;
}
case 2:
ptr[dv->type] = 0;
- /* FALL-THROUGH */
+ ptr[dv->type + 1] = dv->type + 2;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) fprintf(fr_log_fp, "%02x%02x ",
+ ptr[dv->type],
+ ptr[dv->type + 1]);
+#endif
+ break;
case 1:
- ptr[dv->type + dv->length - 1] = dv->type + dv->length;
+ ptr[dv->type] = dv->type;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) fprintf(fr_log_fp, "%02x ", ptr[dv->type]);
+#endif
break;
}
if (dv->length) ptr[dv->type + dv->length - 1] += len;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) {
+ print_hex_data(ptr + dv->type + dv->length, len, 3);
+ }
+#endif
+
return dv->type + dv->length + len;
}
ptr + ptr[1], room);
if (len < 0) return len;
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) {
+ fprintf(fr_log_fp, "\t\t%02x %02x %02x%02x%02x%02x (%u) ",
+ ptr[0], ptr[1],
+ ptr[2], ptr[3], ptr[4], ptr[5],
+ (ptr[3] << 16) | (ptr[4] << 8) | ptr[5]);
+ print_hex_data(ptr + 6, len, 3);
+ }
+#endif
+
ptr[1] += len;
return ptr[1];
start[0] = PW_MESSAGE_AUTHENTICATOR;
start[1] = 18;
memset(start + 2, 0, 16);
+#ifndef NDEBUG
+ if ((fr_debug_flag > 3) && fr_log_fp) {
+ fprintf(fr_log_fp, "\t\t50 12 ...\n");
+ }
+#endif
+
*pvp = (*pvp)->next;
return 18;
}
}
#ifndef NDEBUG
- if (fr_debug_flag > 3) rad_print_hex(packet);
+ if ((fr_debug_flag > 3) && fr_log_fp) rad_print_hex(packet);
#endif
/*
}
#ifndef NDEBUG
- if (fr_debug_flag > 3) rad_print_hex(packet);
+ if ((fr_debug_flag > 3) && fr_log_fp) rad_print_hex(packet);
#endif
return packet;