.\" File automatically generated by doxy2man0.3 .\" Generation date: Wed Aug 19 2026 .TH rc_avpair_gen 3 2026-08-19 "radcli" "Radius client library" .SH "NAME" rc_avpair_gen \- Decode a raw RADIUS attribute buffer into a VALUE_PAIR list. .SH SYNOPSIS .nf .B #include .sp \fBVALUE_PAIR * rc_avpair_gen\fP( \fBrc_handle const *\fP\fIrh\fP, \fBVALUE_PAIR *\fP\fIpair\fP, \fBunsigned char const *\fP\fIptr\fP, \fBint \fP\fIlength\fP, \fBuint32_t \fP\fIvendorspec\fP ); .fi .SH DESCRIPTION .PP This is a low-level function retained for ABI compatibility with freeradius-client and radiusclient-ng. Application code should not call it directly; build requests with rc_avpair_add() and send them with rc_auth() or rc_acct(), which handle wire encoding and decoding internally. .PP Decodes the attribute/value region of a received RADIUS packet (the bytes that follow the 20-byte fixed header) into a linked list of VALUE_PAIR structures. Unknown attributes are logged and skipped; they are not a hard error. .SH PARAMETERS .TP .B rh a handle to parsed configuration (used for dictionary lookups). .TP .B pair optional existing VALUE_PAIR list to append decoded attributes to; pass NULL to start a fresh list. .TP .B ptr pointer to the start of the attribute data region. .TP .B length number of bytes in the attribute region. .TP .B vendorspec vendor PEN when decoding a vendor-specific sub-attribute block; pass 0 for top-level packet attributes. .SH STRUCTURES .SS "" .PP .sp .PP Avoid using this structure directly. Use rc_avpair_get_uint32() for integer/IPv4/date values, rc_avpair_get_in6() for IPv6 addresses and prefixes, rc_avpair_get_raw() for string/binary values, and rc_avpair_get_attr() to read the attribute type and ID. To iterate the list use rc_avpair_next(). Free the entire list with rc_avpair_free(). .sp .RS .nf \fB struct rc_value_pair { char \fIname\fP[RC_NAME_LENGTH+1]; // attribute name if known. uint64_t \fIattribute\fP; // attribute numeric value of type rc_attr_id including vendor; use VENDOR() and ATTRID() to separate. rc_attr_type \fItype\fP; // attribute type. uint32_t \fIlvalue\fP; // attribute value if type is PW_TYPE_INTEGER, PW_TYPE_DATE or PW_TYPE_IPADDR. char \fIstrvalue\fP[AUTH_STRING_LEN+1]; // contains attribute value in other cases. struct rc_value_pair *\fInext\fP; char \fIpad\fP[32]; // unused pad }; \fP .fi .RE .SH RETURN VALUE .PP head of the (possibly extended) VALUE_PAIR list, or NULL on a hard decode error (malformed length field, allocation failure). .SH SEE ALSO .PP .nh .ad l \fIrc_aaa\fP(3), \fIrc_aaa_ctx\fP(3), \fIrc_aaa_ctx_free\fP(3), \fIrc_aaa_ctx_get_secret\fP(3), \fIrc_aaa_ctx_get_vector\fP(3), \fIrc_aaa_ctx_server\fP(3), \fIrc_acct\fP(3), \fIrc_acct_async\fP(3), \fIrc_acct_proxy\fP(3), \fIrc_add_config\fP(3), \fIrc_apply_config\fP(3), \fIrc_auth\fP(3), \fIrc_auth_proxy\fP(3), \fIrc_avpair_add\fP(3), \fIrc_avpair_assign\fP(3), \fIrc_avpair_copy\fP(3), \fIrc_avpair_free\fP(3), \fIrc_avpair_get\fP(3), \fIrc_avpair_get_attr\fP(3), \fIrc_avpair_get_in6\fP(3), \fIrc_avpair_get_raw\fP(3), \fIrc_avpair_get_uint32\fP(3), \fIrc_avpair_insert\fP(3), \fIrc_avpair_log\fP(3), \fIrc_avpair_new\fP(3), \fIrc_avpair_next\fP(3), \fIrc_avpair_parse\fP(3), \fIrc_avpair_remove\fP(3), \fIrc_avpair_tostr\fP(3), \fIrc_buildreq\fP(3), \fIrc_check\fP(3), \fIrc_conf_int\fP(3), \fIrc_conf_srv\fP(3), \fIrc_conf_str\fP(3), \fIrc_config_free\fP(3), \fIrc_config_init\fP(3), \fIrc_destroy\fP(3), \fIrc_dict_addattr\fP(3), \fIrc_dict_addval\fP(3), \fIrc_dict_addvend\fP(3), \fIrc_dict_findattr\fP(3), \fIrc_dict_findval\fP(3), \fIrc_dict_findvend\fP(3), \fIrc_dict_free\fP(3), \fIrc_dict_getattr\fP(3), \fIrc_dict_getval\fP(3), \fIrc_dict_getvend\fP(3), \fIrc_find_server_addr\fP(3), \fIrc_get_socket_type\fP(3), \fIrc_new\fP(3), \fIrc_read_config\fP(3), \fIrc_read_dictionary\fP(3), \fIrc_read_dictionary_from_buffer\fP(3), \fIrc_send_server\fP(3), \fIrc_test_config\fP(3) .ad .hy