static char * radius_msg_dump_attr_val(struct radius_attr_hdr *hdr, char * outbuf, size_t buflen) { struct radius_attr_type *attr; int i, len; unsigned char *pos; u8 attrtype; memset(outbuf, 0, buflen); attr = radius_get_attr_type(hdr->type); if (attr == NULL) attrtype = RADIUS_ATTR_HEXDUMP; else attrtype = attr->data_type; len = hdr->length - sizeof(struct radius_attr_hdr); pos = (unsigned char *) (hdr + 1); switch (attrtype) { case RADIUS_ATTR_TEXT: snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Value: '"); for (i = 0; i < len; i++) snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), "%s", print_char(pos[i])); snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), "'"); break; case RADIUS_ATTR_IP: if (len == 4) { struct in_addr addr; os_memcpy(&addr, pos, 4); snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Value: %s", inet_ntoa(addr)); } else snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Invalid IP address length %d", len); break; case RADIUS_ATTR_IPV6: if (len == 16) { char buf[128]; const char *atxt; struct in6_addr *addr = (struct in6_addr *) pos; atxt = inet_ntop(AF_INET6, addr, buf, sizeof(buf)); snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Value: %s", atxt ? atxt : "?"); } else snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Invalid IPv6 address length %d", len); break; case RADIUS_ATTR_INT32: if (len == 4) snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Value: %u", WPA_GET_BE32(pos)); else snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Invalid INT32 length %d", len); break; case RADIUS_ATTR_HEXDUMP: case RADIUS_ATTR_UNDIST: default: snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " Value:"); for (i = 0; i < len; i++) snprintf(outbuf + strlen(outbuf), buflen - strlen(outbuf), " %02x", pos[i]); break; } return outbuf; }
static void radius_msg_dump_attr(struct radius_attr_hdr *hdr) { struct radius_attr_type *attr; int i, len; unsigned char *pos; attr = radius_get_attr_type(hdr->type); printf(" Attribute %d (%s) length=%d\n", hdr->type, attr ? attr->name : "?Unknown?", hdr->length); if (attr == NULL) return; len = hdr->length - sizeof(struct radius_attr_hdr); pos = (unsigned char *) (hdr + 1); switch (attr->data_type) { case RADIUS_ATTR_TEXT: printf(" Value: '"); for (i = 0; i < len; i++) print_char(pos[i]); printf("'\n"); break; case RADIUS_ATTR_IP: if (len == 4) { struct in_addr addr; os_memcpy(&addr, pos, 4); printf(" Value: %s\n", inet_ntoa(addr)); } else printf(" Invalid IP address length %d\n", len); break; #ifdef CONFIG_IPV6 case RADIUS_ATTR_IPV6: if (len == 16) { char buf[128]; const char *atxt; struct in6_addr *addr = (struct in6_addr *) pos; atxt = inet_ntop(AF_INET6, addr, buf, sizeof(buf)); printf(" Value: %s\n", atxt ? atxt : "?"); } else printf(" Invalid IPv6 address length %d\n", len); break; #endif /* CONFIG_IPV6 */ case RADIUS_ATTR_HEXDUMP: case RADIUS_ATTR_UNDIST: printf(" Value:"); for (i = 0; i < len; i++) printf(" %02x", pos[i]); printf("\n"); break; case RADIUS_ATTR_INT32: if (len == 4) printf(" Value: %u\n", WPA_GET_BE32(pos)); else printf(" Invalid INT32 length %d\n", len); break; default: break; } }
static void radius_msg_dump_attr(struct radius_attr_hdr *hdr) { struct radius_attr_type *attr; int len; unsigned char *pos; char buf[1000]; attr = radius_get_attr_type(hdr->type); wpa_printf(MSG_INFO, " Attribute %d (%s) length=%d", hdr->type, attr ? attr->name : "?Unknown?", hdr->length); if (attr == NULL || hdr->length < sizeof(struct radius_attr_hdr)) return; len = hdr->length - sizeof(struct radius_attr_hdr); pos = (unsigned char *) (hdr + 1); switch (attr->data_type) { case RADIUS_ATTR_TEXT: printf_encode(buf, sizeof(buf), pos, len); wpa_printf(MSG_INFO, " Value: '%s'", buf); break; case RADIUS_ATTR_IP: if (len == 4) { struct in_addr addr; os_memcpy(&addr, pos, 4); wpa_printf(MSG_INFO, " Value: %s", inet_ntoa(addr)); } else { wpa_printf(MSG_INFO, " Invalid IP address length %d", len); } break; #ifdef CONFIG_IPV6 case RADIUS_ATTR_IPV6: if (len == 16) { const char *atxt; struct in6_addr *addr = (struct in6_addr *) pos; atxt = inet_ntop(AF_INET6, addr, buf, sizeof(buf)); wpa_printf(MSG_INFO, " Value: %s", atxt ? atxt : "?"); } else { wpa_printf(MSG_INFO, " Invalid IPv6 address length %d", len); } break; #endif /* CONFIG_IPV6 */ case RADIUS_ATTR_HEXDUMP: case RADIUS_ATTR_UNDIST: wpa_snprintf_hex(buf, sizeof(buf), pos, len); wpa_printf(MSG_INFO, " Value: %s", buf); break; case RADIUS_ATTR_INT32: if (len == 4) wpa_printf(MSG_INFO, " Value: %u", WPA_GET_BE32(pos)); else wpa_printf(MSG_INFO, " Invalid INT32 length %d", len); break; default: break; } }