Radcli library 1.4.0
A simple radius library
|
Main API Functions. More...
Data Structures | |
struct | server |
struct | dict_attr |
struct | dict_value |
struct | dict_vendor |
struct | rc_value_pair |
struct | send_data |
Macros | |
#define | TRUE 1 |
#define | FALSE 0 |
#define | AUTH_PASS_LEN (8 * 16) /* multiple of 16 */ |
#define | AUTH_ID_LEN 64 |
#define | RC_BUFFER_LEN 8192 |
#define | RC_NAME_LENGTH 32 |
#define | MAX_SECRET_LENGTH (16 * 16) /* MUST be multiple of 16 */ |
#define | RADCLI_VENDOR_MASK 0xffffffff |
#define | VENDOR_BIT_SIZE 32 |
#define | RADCLI_VENDOR_ATTR_SET(attr, vendor) ((attr)|((uint64_t)((vendor)&RADCLI_VENDOR_MASK)) << VENDOR_BIT_SIZE) |
#define | VENDOR(x) (((x) >> VENDOR_BIT_SIZE) & 0xffffffff) |
#define | ATTRID(x) ((x) & 0xffffffff) |
#define | PW_MAX_MSG_SIZE 4096 |
#define | RC_SERVER_MAX 8 |
#define | AUTH_LOCAL_FST (1<<0) |
#define | AUTH_RADIUS_FST (1<<1) |
#define | AUTH_LOCAL_SND (1<<2) |
#define | AUTH_RADIUS_SND (1<<3) |
#define | AUTH_HDR_LEN 20 |
#define | CHAP_VALUE_LENGTH 16 |
#define | PW_AUTH_UDP_PORT 1812 |
#define | PW_ACCT_UDP_PORT 1813 |
#define | PW_DUMB 0 |
1 and 2 are defined in FRAMED PROTOCOLS. | |
#define | PW_AUTH_ONLY 3 |
#define | PW_ALL 255 |
#define | MGMT_POLL_SECRET "Hardlyasecret" |
Default for Merit radiusd. | |
#define | AUTH_STRING_LEN 253 /* maximum of 253 */ |
#define | AUTH_VECTOR_LEN 16 |
#define | RC_MIN(a, b) ((a) < (b) ? (a) : (b)) |
#define | RC_MAX(a, b) ((a) > (b) ? (a) : (b)) |
#define | PATH_MAX 1024 |
#define | ENV_SIZE 128 |
Typedefs | |
typedef enum rc_type | rc_type |
typedef struct rc_conf | rc_handle |
typedef struct server | SERVER |
typedef enum rc_socket_type | rc_socket_type |
typedef enum rc_attr_type | rc_attr_type |
typedef enum rc_standard_codes | rc_standard_codes |
typedef enum rc_attr_id | rc_attr_id |
typedef enum rc_service_type | rc_service_type |
typedef enum rc_framed_protocol | rc_framed_protocol |
typedef enum rc_framed_routing_type | rc_framed_routing_type |
typedef enum rc_framed_comp | rc_framed_comp |
typedef enum rc_login_service_type | rc_login_service_type |
typedef enum rc_termination_action | rc_termination_action |
typedef enum rc_acct_status_type | rc_acct_status_type |
typedef enum rc_acct_terminate_cause | rc_acct_terminate_cause |
typedef enum rc_nas_port_type | rc_nas_port_type |
typedef enum rc_acct_auth_type | rc_acct_auth_type |
typedef enum rc_vendor_pec | rc_vendor_type |
typedef struct dict_attr | DICT_ATTR |
typedef struct dict_value | DICT_VALUE |
typedef struct dict_vendor | DICT_VENDOR |
typedef enum rc_send_status | rc_send_status |
typedef struct rc_value_pair | VALUE_PAIR |
typedef struct send_data | SEND_DATA |
typedef struct rc_aaa_ctx_st | RC_AAA_CTX |
Enumerations | |
enum | rc_type { AUTH = 0 , ACCT = 1 } |
enum | rc_socket_type { RC_SOCKET_UDP = 0 , RC_SOCKET_TLS = 1 , RC_SOCKET_DTLS = 2 , RC_SOCKET_TCP = 3 } |
enum | rc_attr_type { PW_TYPE_STRING =0 , PW_TYPE_INTEGER =1 , PW_TYPE_IPADDR =2 , PW_TYPE_DATE =3 , PW_TYPE_IPV6ADDR =4 , PW_TYPE_IPV6PREFIX =5 , PW_TYPE_MAX =6 } |
enum | rc_standard_codes { PW_ACCESS_REQUEST =1 , PW_ACCESS_ACCEPT =2 , PW_ACCESS_REJECT =3 , PW_ACCOUNTING_REQUEST =4 , PW_ACCOUNTING_RESPONSE =5 , PW_ACCOUNTING_STATUS =6 , PW_PASSWORD_REQUEST =7 , PW_PASSWORD_ACK =8 , PW_PASSWORD_REJECT =9 , PW_ACCOUNTING_MESSAGE =10 , PW_ACCESS_CHALLENGE =11 , PW_STATUS_SERVER =12 , PW_STATUS_CLIENT =13 } |
enum | rc_attr_id { PW_USER_NAME =1 , PW_USER_PASSWORD =2 , PW_CHAP_PASSWORD =3 , PW_NAS_IP_ADDRESS =4 , PW_NAS_PORT =5 , PW_SERVICE_TYPE =6 , PW_FRAMED_PROTOCOL =7 , PW_FRAMED_IP_ADDRESS =8 , PW_FRAMED_IP_NETMASK =9 , PW_FRAMED_ROUTING =10 , PW_FILTER_ID =11 , PW_FRAMED_MTU =12 , PW_FRAMED_COMPRESSION =13 , PW_LOGIN_IP_HOST =14 , PW_LOGIN_SERVICE =15 , PW_LOGIN_PORT =16 , PW_OLD_PASSWORD =17 , PW_REPLY_MESSAGE =18 , PW_LOGIN_CALLBACK_NUMBER =19 , PW_FRAMED_CALLBACK_ID =20 , PW_EXPIRATION =21 , PW_FRAMED_ROUTE =22 , PW_FRAMED_IPX_NETWORK =23 , PW_STATE =24 , PW_CLASS =25 , PW_VENDOR_SPECIFIC =26 , PW_SESSION_TIMEOUT =27 , PW_IDLE_TIMEOUT =28 , PW_TERMINATION_ACTION =29 , PW_CALLED_STATION_ID =30 , PW_CALLING_STATION_ID =31 , PW_NAS_IDENTIFIER =32 , PW_PROXY_STATE =33 , PW_LOGIN_LAT_SERVICE =34 , PW_LOGIN_LAT_NODE =35 , PW_LOGIN_LAT_GROUP =36 , PW_FRAMED_APPLETALK_LINK =37 , PW_FRAMED_APPLETALK_NETWORK =38 , PW_FRAMED_APPLETALK_ZONE =39 , PW_ACCT_STATUS_TYPE =40 , PW_ACCT_DELAY_TIME =41 , PW_ACCT_INPUT_OCTETS =42 , PW_ACCT_OUTPUT_OCTETS =43 , PW_ACCT_SESSION_ID =44 , PW_ACCT_AUTHENTIC =45 , PW_ACCT_SESSION_TIME =46 , PW_ACCT_INPUT_PACKETS =47 , PW_ACCT_OUTPUT_PACKETS =48 , PW_ACCT_TERMINATE_CAUSE =49 , PW_ACCT_MULTI_SESSION_ID =50 , PW_ACCT_LINK_COUNT =51 , PW_ACCT_INPUT_GIGAWORDS =52 , PW_ACCT_OUTPUT_GIGAWORDS =53 , PW_EVENT_TIMESTAMP =55 , PW_EGRESS_VLANID =56 , PW_INGRESS_FILTERS =57 , PW_EGRESS_VLAN_NAME =58 , PW_USER_PRIORITY_TABLE =59 , PW_CHAP_CHALLENGE =60 , PW_NAS_PORT_TYPE =61 , PW_PORT_LIMIT =62 , PW_LOGIN_LAT_PORT =63 , PW_TUNNEL_TYPE =64 , PW_TUNNEL_MEDIUM_TYPE =65 , PW_TUNNEL_CLIENT_ENDPOINT =66 , PW_TUNNEL_SERVER_ENDPOINT =67 , PW_ACCT_TUNNEL_CONNECTION =68 , PW_TUNNEL_PASSWORD =69 , PW_ARAP_PASSWORD =70 , PW_ARAP_FEATURES =71 , PW_ARAP_ZONE_ACCESS =72 , PW_ARAP_SECURITY =73 , PW_ARAP_SECURITY_DATA =74 , PW_PASSWORD_RETRY =75 , PW_PROMPT =76 , PW_CONNECT_INFO =77 , PW_CONFIGURATION_TOKEN =78 , PW_EAP_MESSAGE =79 , PW_MESSAGE_AUTHENTICATOR =80 , PW_TUNNEL_PRIVATE_GROUP_ID =81 , PW_TUNNEL_ASSIGNMENT_ID =82 , PW_TUNNEL_PREFERENCE =83 , PW_ARAP_CHALLENGE_RESPONSE =84 , PW_ACCT_INTERIM_INTERVAL =85 , PW_ACCT_TUNNEL_PACKETS_LOST =86 , PW_NAS_PORT_ID_STRING =87 , PW_FRAMED_POOL =88 , PW_CHARGEABLE_USER_IDENTITY =89 , PW_CUI =89 , PW_TUNNEL_CLIENT_AUTH_ID =90 , PW_TUNNEL_SERVER_AUTH_ID =91 , PW_NAS_FILTER_RULE =92 , PW_ORIGINATING_LINE_INFO =94 , PW_NAS_IPV6_ADDRESS =95 , PW_FRAMED_INTERFACE_ID =96 , PW_FRAMED_IPV6_PREFIX =97 , PW_LOGIN_IPV6_HOST =98 , PW_FRAMED_IPV6_ROUTE =99 , PW_FRAMED_IPV6_POOL =100 , PW_ERROR_CAUSE =101 , PW_EAP_KEY_NAME =102 , PW_DELEGATED_IPV6_PREFIX =123 , PW_FRAMED_IPV6_ADDRESS =168 , PW_DNS_SERVER_IPV6_ADDRESS =169 , PW_ROUTE_IPV6_INFORMATION =170 , PW_DIGEST_RESPONSE =206 , PW_DIGEST_ATTRIBUTES =207 , PW_DIGEST_REALM =1063 , PW_DIGEST_NONCE =1064 , PW_DIGEST_METHOD =1065 , PW_DIGEST_URI =1066 , PW_DIGEST_QOP =1067 , PW_DIGEST_ALGORITHM =1068 , PW_DIGEST_BODY_DIGEST =1069 , PW_DIGEST_CNONCE =1070 , PW_DIGEST_NONCE_COUNT =1071 , PW_DIGEST_USER_NAME =1072 , PW_USER_ID =222 , PW_USER_REALM =223 } |
enum | rc_service_type { PW_LOGIN =1 , PW_FRAMED =2 , PW_CALLBACK_LOGIN =3 , PW_CALLBACK_FRAMED =4 , PW_OUTBOUND =5 , PW_ADMINISTRATIVE =6 , PW_NAS_PROMPT =7 , PW_AUTHENTICATE_ONLY =8 , PW_CALLBACK_NAS_PROMPT =9 } |
enum | rc_framed_protocol { PW_PPP =1 , PW_SLIP =2 , PW_ARA = 3 , PW_GANDALF =4 , PW_XYLOGICS =5 } |
enum | rc_framed_routing_type { PW_NONE =0 , PW_BROADCAST =1 , PW_LISTEN =2 , PW_BROADCAST_LISTEN =3 } |
enum | rc_framed_comp { PW_COMP_NONE =0 , PW_VAN_JACOBSON_TCP_IP =1 , PW_IPX_HEADER_COMPRESSION =2 , PW_COMP_LZS =3 } |
enum | rc_login_service_type { PW_TELNET =0 , PW_RLOGIN =1 , PW_TCP_CLEAR =2 , PW_PORTMASTER =3 , PW_LAT =4 , PW_X25_PAD =5 , PW_X25_T3POS =6 } |
enum | rc_termination_action { PW_DEFAULT =0 , PW_RADIUS_REQUEST =1 } |
enum | rc_acct_status_type { PW_STATUS_START =1 , PW_STATUS_STOP =2 , PW_STATUS_ALIVE =3 , PW_STATUS_MODEM_START =4 , PW_STATUS_MODEM_STOP =5 , PW_STATUS_CANCEL =6 , PW_ACCOUNTING_ON =7 , PW_ACCOUNTING_OFF =8 } |
enum | rc_acct_terminate_cause { PW_USER_REQUEST =1 , PW_LOST_CARRIER =2 , PW_LOST_SERVICE =3 , PW_ACCT_IDLE_TIMEOUT =4 , PW_ACCT_SESSION_TIMEOUT =5 , PW_ADMIN_RESET =6 , PW_ADMIN_REBOOT =7 , PW_PORT_ERROR =8 , PW_NAS_ERROR =9 , PW_NAS_REQUEST =10 , PW_NAS_REBOOT =11 , PW_PORT_UNNEEDED =12 , PW_PORT_PREEMPTED =13 , PW_PORT_SUSPENDED =14 , PW_SERVICE_UNAVAILABLE =15 , PW_CALLBACK =16 , PW_USER_ERROR =17 , PW_HOST_REQUEST =18 } |
enum | rc_nas_port_type { PW_ASYNC =0 , PW_SYNC =1 , PW_ISDN_SYNC =2 , PW_ISDN_SYNC_V120 =3 , PW_ISDN_SYNC_V110 =4 , PW_VIRTUAL =5 } |
enum | rc_acct_auth_type { PW_RADIUS =1 , PW_LOCAL =2 , PW_REMOTE =3 } |
enum | rc_vendor_pec { VENDOR_NONE =0 , VENDOR_MICROSOFT = 311 , VENDOR_ROARING_PENGUIN = 10055 } |
enum | rc_vendor_attr_microsoft { PW_MS_CHAP_CHALLENGE = 11 , PW_MS_CHAP_RESPONSE = 1 , PW_MS_CHAP2_RESPONSE = 25 , PW_MS_CHAP2_SUCCESS = 26 , PW_MS_MPPE_ENCRYPTION_POLICY = 7 , PW_MS_MPPE_ENCRYPTION_TYPE = 8 , PW_MS_MPPE_ENCRYPTION_TYPES =PW_MS_MPPE_ENCRYPTION_TYPE , PW_MS_CHAP_MPPE_KEYS = 12 , PW_MS_MPPE_SEND_KEY = 16 , PW_MS_MPPE_RECV_KEY = 17 , PW_MS_PRIMARY_DNS_SERVER = 28 , PW_MS_SECONDARY_DNS_SERVER = 29 , PW_MS_PRIMARY_NBNS_SERVER = 30 , PW_MS_SECONDARY_NBNS_SERVER = 31 } |
enum | rc_vendor_attr_roaringpenguin { PW_RP_UPSTREAM_LIMIT =1 , PW_RP_DOWNSTREAM_LIMIT =2 } |
enum | rc_send_status { NETUNREACH_RC =-4 , BADRESPID_RC =-3 , BADRESP_RC =-2 , ERROR_RC =-1 , OK_RC =0 , TIMEOUT_RC =1 , REJECT_RC =2 , CHALLENGE_RC =3 } |
Functions | |
const char * | rc_aaa_ctx_get_secret (RC_AAA_CTX *ctx) |
const void * | rc_aaa_ctx_get_vector (RC_AAA_CTX *ctx) |
void | rc_aaa_ctx_free (RC_AAA_CTX *ctx) |
VALUE_PAIR * | rc_avpair_add (rc_handle const *rh, VALUE_PAIR **list, uint32_t attrid, void const *pval, int len, uint32_t vendorspec) |
void | rc_avpair_remove (VALUE_PAIR **list, uint32_t attrid, uint32_t vendorspec) |
VALUE_PAIR * | rc_avpair_next (VALUE_PAIR *t) |
int | rc_avpair_assign (VALUE_PAIR *vp, void const *pval, int len) |
VALUE_PAIR * | rc_avpair_new (rc_handle const *rh, uint32_t attrid, void const *pval, int len, uint32_t vendorspec) |
VALUE_PAIR * | rc_avpair_gen (rc_handle const *rh, VALUE_PAIR *pair, unsigned char const *ptr, int length, uint32_t vendorspec) |
VALUE_PAIR * | rc_avpair_get (VALUE_PAIR *vp, uint32_t attrid, uint32_t vendorspec) |
VALUE_PAIR * | rc_avpair_copy (VALUE_PAIR *p) |
void | rc_avpair_insert (VALUE_PAIR **a, VALUE_PAIR *p, VALUE_PAIR *b) |
void | rc_avpair_free (VALUE_PAIR *pair) |
int | rc_avpair_parse (rc_handle const *rh, char const *buffer, VALUE_PAIR **first_pair) |
int | rc_avpair_tostr (rc_handle const *rh, VALUE_PAIR *pair, char *name, int ln, char *value, int lv) |
char * | rc_avpair_log (rc_handle const *rh, VALUE_PAIR *pair, char *buf, size_t buf_len) |
int | rc_avpair_get_uint32 (VALUE_PAIR *vp, uint32_t *res) |
int | rc_avpair_get_in6 (VALUE_PAIR *vp, struct in6_addr *res, unsigned *prefix) |
int | rc_avpair_get_raw (VALUE_PAIR *vp, char **res, unsigned *res_size) |
void | rc_avpair_get_attr (VALUE_PAIR *vp, unsigned *type, unsigned *id) |
void | rc_buildreq (rc_handle const *rh, SEND_DATA *data, int code, char *server, unsigned short port, char *secret, int timeout, int retries) |
int | rc_aaa_ctx (rc_handle *rh, RC_AAA_CTX **ctx, uint32_t nas_port, VALUE_PAIR *send, VALUE_PAIR **received, char *msg, int add_nas_port, rc_standard_codes request_type) |
int | rc_aaa_ctx_server (rc_handle *rh, RC_AAA_CTX **ctx, SERVER *aaaserver, rc_type type, uint32_t nas_port, VALUE_PAIR *send, VALUE_PAIR **received, char *msg, int add_nas_port, rc_standard_codes request_type) |
int | rc_aaa (rc_handle *rh, uint32_t nas_port, VALUE_PAIR *send, VALUE_PAIR **received, char *msg, int add_nas_port, rc_standard_codes request_type) |
int | rc_auth (rc_handle *rh, uint32_t nas_port, VALUE_PAIR *send, VALUE_PAIR **received, char *msg) |
int | rc_auth_proxy (rc_handle *rh, VALUE_PAIR *send, VALUE_PAIR **received, char *msg) |
int | rc_acct (rc_handle *rh, uint32_t nas_port, VALUE_PAIR *send) |
int | rc_acct_proxy (rc_handle *rh, VALUE_PAIR *send) |
int | rc_check (rc_handle *rh, char *host, char *secret, unsigned short port, char *msg) |
int | rc_add_config (rc_handle *rh, char const *option_name, char const *option_val, char const *source, int line) |
rc_handle * | rc_config_init (rc_handle *rh) |
int | rc_apply_config (rc_handle *rh) |
rc_handle * | rc_read_config (char const *filename) |
char * | rc_conf_str (rc_handle const *rh, char const *optname) |
int | rc_conf_int (rc_handle const *rh, char const *optname) |
SERVER * | rc_conf_srv (rc_handle const *rh, char const *optname) |
int | rc_test_config (rc_handle *rh, char const *filename) |
int | rc_find_server_addr (rc_handle const *rh, char const *server_name, struct addrinfo **info, char *secret, rc_type type) |
void | rc_config_free (rc_handle *rh) |
rc_handle * | rc_new (void) |
void | rc_destroy (rc_handle *rh) |
rc_socket_type | rc_get_socket_type (rc_handle *rh) |
DICT_ATTR * | rc_dict_addattr (rc_handle *rh, char const *namestr, uint32_t value, int type, uint32_t vendorspec) |
DICT_VALUE * | rc_dict_addval (rc_handle *rh, char const *attrstr, char const *namestr, uint32_t value) |
DICT_VENDOR * | rc_dict_addvend (rc_handle *rh, char const *namestr, uint32_t vendorspec) |
int | rc_read_dictionary (rc_handle *rh, char const *filename) |
int | rc_read_dictionary_from_buffer (rc_handle *rh, char const *buf, size_t size) |
DICT_ATTR * | rc_dict_getattr (rc_handle const *rh, uint64_t attribute) |
DICT_ATTR * | rc_dict_findattr (rc_handle const *rh, char const *attrname) |
DICT_VALUE * | rc_dict_findval (rc_handle const *rh, char const *valname) |
DICT_VENDOR * | rc_dict_findvend (rc_handle const *rh, char const *vendorname) |
DICT_VENDOR * | rc_dict_getvend (rc_handle const *rh, uint32_t vendorspec) |
DICT_VALUE * | rc_dict_getval (rc_handle const *rh, uint32_t value, char const *attrname) |
void | rc_dict_free (rc_handle *rh) |
int | rc_send_server (rc_handle *rh, SEND_DATA *data, char *msg, rc_type type) |
Main API Functions.
#define MAX_SECRET_LENGTH (16 * 16) /* MUST be multiple of 16 */ |
#define MGMT_POLL_SECRET "Hardlyasecret" |
#define RADCLI_VENDOR_ATTR_SET | ( | attr, | |
vendor ) ((attr)|((uint64_t)((vendor)&RADCLI_VENDOR_MASK)) << VENDOR_BIT_SIZE) |
enum rc_acct_auth_type |
enum rc_acct_status_type |
enum rc_attr_id |
Standard RADIUS attribute-value pair identifiers
enum rc_attr_type |
Attribute types
enum rc_framed_comp |
enum rc_framed_protocol |
enum rc_nas_port_type |
enum rc_send_status |
Return codes for rc_send_server()
enum rc_service_type |
enum rc_socket_type |
enum rc_standard_codes |
enum rc_type |
int rc_aaa | ( | rc_handle * | rh, |
uint32_t | nas_port, | ||
VALUE_PAIR * | send, | ||
VALUE_PAIR ** | received, | ||
char * | msg, | ||
int | add_nas_port, | ||
rc_standard_codes | request_type ) |
Builds an authentication/accounting request for port id nas_port with the value_pairs send and submits it to a server
rh | a handle to parsed configuration. |
nas_port | the physical NAS port number to use (may be zero). |
send | a VALUE_PAIR array of values (e.g., PW_USER_NAME). |
received | an allocated array of received values. |
msg | must be an array of PW_MAX_MSG_SIZE or NULL; will contain the concatenation of any PW_REPLY_MESSAGE received. |
add_nas_port | this should be zero; if non-zero it will include PW_NAS_PORT in sent pairs. |
request_type | one of standard RADIUS codes (e.g., PW_ACCESS_REQUEST). |
Definition at line 215 of file buildreq.c.
int rc_aaa_ctx | ( | rc_handle * | rh, |
RC_AAA_CTX ** | ctx, | ||
uint32_t | nas_port, | ||
VALUE_PAIR * | send, | ||
VALUE_PAIR ** | received, | ||
char * | msg, | ||
int | add_nas_port, | ||
rc_standard_codes | request_type ) |
Builds an authentication/accounting request for port id nas_port with the value_pairs send and submits it to a server. This function keeps its state in ctx after a successful operation. It can be deallocated using rc_aaa_ctx_free().
rh | a handle to parsed configuration. |
ctx | if non-NULL it will contain the context of the request; Its initial value should be NULL and it must be released using rc_aaa_ctx_free(). |
nas_port | the physical NAS port number to use (may be zero). |
send | a VALUE_PAIR array of values (e.g., PW_USER_NAME). |
received | an allocated array of received values. |
msg | must be an array of PW_MAX_MSG_SIZE or NULL; will contain the concatenation of any PW_REPLY_MESSAGE received. |
add_nas_port | this should be zero; if non-zero it will include PW_NAS_PORT in sent pairs. |
request_type | one of standard RADIUS codes (e.g., PW_ACCESS_REQUEST). |
Definition at line 70 of file buildreq.c.
void rc_aaa_ctx_free | ( | RC_AAA_CTX * | ctx | ) |
const char * rc_aaa_ctx_get_secret | ( | RC_AAA_CTX * | ctx | ) |
const void * rc_aaa_ctx_get_vector | ( | RC_AAA_CTX * | ctx | ) |
int rc_aaa_ctx_server | ( | rc_handle * | rh, |
RC_AAA_CTX ** | ctx, | ||
SERVER * | aaaserver, | ||
rc_type | type, | ||
uint32_t | nas_port, | ||
VALUE_PAIR * | send, | ||
VALUE_PAIR ** | received, | ||
char * | msg, | ||
int | add_nas_port, | ||
rc_standard_codes | request_type ) |
Builds an authentication/accounting request for port id nas_port with the value_pairs send and submits it to a specified server. This function keeps its state in ctx after a successful operation. It can be deallocated using rc_aaa_ctx_free().
rh | a handle to parsed configuration. |
ctx | if non-NULL it will contain the context of the request; Its initial value should be NULL and it must be released using rc_aaa_ctx_free(). |
aaaserver | a non-NULL SERVER to send the message to. |
nas_port | the physical NAS port number to use (may be zero). |
send | a VALUE_PAIR array of values (e.g., PW_USER_NAME). |
received | an allocated array of received values. |
msg | must be an array of PW_MAX_MSG_SIZE or NULL; will contain the concatenation of any PW_REPLY_MESSAGE received. |
add_nas_port | this should be zero; if non-zero it will include PW_NAS_PORT in sent pairs. |
request_type | one of standard RADIUS codes (e.g., PW_ACCESS_REQUEST). |
Definition at line 111 of file buildreq.c.
int rc_acct | ( | rc_handle * | rh, |
uint32_t | nas_port, | ||
VALUE_PAIR * | send ) |
Builds an accounting request for port id nas_port with the value_pairs at send
rh | a handle to parsed configuration. |
nas_port | the physical NAS port number to use (may be zero). |
send | a VALUE_PAIR array of values (e.g., PW_USER_NAME). |
Definition at line 274 of file buildreq.c.
int rc_acct_proxy | ( | rc_handle * | rh, |
VALUE_PAIR * | send ) |
Builds an accounting request with the value_pairs at send
rh | a handle to parsed configuration. |
send | a VALUE_PAIR array of values (e.g., PW_USER_NAME). |
Definition at line 287 of file buildreq.c.
int rc_add_config | ( | rc_handle * | rh, |
char const * | option_name, | ||
char const * | option_val, | ||
char const * | source, | ||
int | line ) |
Allow a config option to be added to rc_handle from inside a program.
That allows programs to setup a handle without loading a configuration file.
rh | a handle to parsed configuration. |
option_name | the name of the option. |
option_val | the value to be added. |
source | typically should be FILE or func for logging purposes. |
line | LINE for logging purposes. |
int rc_apply_config | ( | rc_handle * | rh | ) |
Applies and initializes any parameters from the radcli configuration
When no configuration file is provided and the configuration is provided via rc_add_config(), radcli requires the call of this function in order to initialize items for the connection.
rh | a handle to parsed configuration. |
int rc_auth | ( | rc_handle * | rh, |
uint32_t | nas_port, | ||
VALUE_PAIR * | send, | ||
VALUE_PAIR ** | received, | ||
char * | msg ) |
Builds an authentication request for port id nas_port with the value_pairs send and submits it to a server
rh | a handle to parsed configuration. |
nas_port | the physical NAS port number to use (may be zero). |
send | a VALUE_PAIR array of values (e.g., PW_USER_NAME). |
received | an allocated array of received values. |
msg | must be an array of PW_MAX_MSG_SIZE or NULL; will contain the concatenation of any PW_REPLY_MESSAGE received. |
Definition at line 235 of file buildreq.c.
int rc_auth_proxy | ( | rc_handle * | rh, |
VALUE_PAIR * | send, | ||
VALUE_PAIR ** | received, | ||
char * | msg ) |
Builds an authentication request for proxying
Builds an authentication request with the value_pairs send and submits it to a server. Works for a proxy; does not add IP address, and does does not rely on config file.
rh | a handle to parsed configuration. |
send | a VALUE_PAIR array of values (e.g., PW_USER_NAME). |
received | an allocated array of received values. |
msg | must be an array of PW_MAX_MSG_SIZE or NULL; will contain the concatenation of any PW_REPLY_MESSAGE received. |
Definition at line 257 of file buildreq.c.
VALUE_PAIR * rc_avpair_add | ( | rc_handle const * | rh, |
VALUE_PAIR ** | list, | ||
uint32_t | attrid, | ||
void const * | pval, | ||
int | len, | ||
uint32_t | vendorspec ) |
Adds an attribute-value pair to the given list
See rc_avpair_assign() for the format of the data.
rh | a handle to parsed configuration. |
list | a VALUE_PAIR array of values; initially must be NULL. |
attrid | The attribute of the pair to add (e.g., PW_USER_NAME). |
pval | the value (e.g., the actual username). |
len | the length of pval, or -1 if to calculate (in case of strings). |
vendorspec | The vendor ID in case of a vendor specific value - 0 otherwise. |
int rc_avpair_assign | ( | VALUE_PAIR * | vp, |
void const * | pval, | ||
int | len ) |
Assigns the given value to an attribute-value pair
If the value is of type PW_TYPE_STRING it must either be a null terminated string with len set to -1, or raw data with length properly set. For PW_TYPE_DATE, PW_TYPE_INTEGER, and PW_TYPE_IPADDR an uint32_t number should be set at pval. For IPv4 addresses it should be in host byte order.
For PW_TYPE_IPV6ADDR type a 16-byte long address is expected, and for PW_TYPE_IPV6PREFIX the rfc3162 prefix format is expected. Simply that is a zero byte, a byte with the value of prefix (e.g., 112), and the remaining bytes are the IPv6 address.
vp | a pointer to a VALUE_PAIR structure. |
pval | the value (e.g., the actual username). |
len | the length of pval, or -1 if to calculate (in case of strings). |
VALUE_PAIR * rc_avpair_copy | ( | VALUE_PAIR * | p | ) |
void rc_avpair_free | ( | VALUE_PAIR * | pair | ) |
VALUE_PAIR * rc_avpair_gen | ( | rc_handle const * | rh, |
VALUE_PAIR * | pair, | ||
unsigned char const * | ptr, | ||
int | length, | ||
uint32_t | vendorspec ) |
Takes attribute/value pairs from buffer and builds a value_pair list using allocated memory
rh | a handle to parsed configuration. |
pair | a pointer to a VALUE_PAIR structure. |
ptr | the value (e.g., the actual username). |
length | the length of ptr, or -1 if to calculate (in case of strings). |
vendorspec | The vendor ID in case of a vendor specific value - 0 otherwise. |
VALUE_PAIR * rc_avpair_get | ( | VALUE_PAIR * | vp, |
uint32_t | attrid, | ||
uint32_t | vendorspec ) |
Find the first attribute value-pair (which matches the given attribute) from the specified value-pair list
vp | a pointer to a VALUE_PAIR structure. |
attrid | The attribute of the pair to find (e.g., PW_USER_NAME). |
vendorspec | The vendor ID in case of a vendor specific value - 0 otherwise. |
void rc_avpair_get_attr | ( | VALUE_PAIR * | vp, |
unsigned * | type, | ||
unsigned * | id ) |
int rc_avpair_get_in6 | ( | VALUE_PAIR * | vp, |
struct in6_addr * | res, | ||
unsigned * | prefix ) |
Get the IPv6 address and prefix value of the given attribute value-pair
This function is valid for PW_TYPE_IPV6ADDR, PW_TYPE_IPV6PREFIX.
vp | a pointer to a VALUE_PAIR structure. |
res | An in6_addr structure for result to be copied in. |
prefix | If of type PW_TYPE_IPV6PREFIX the prefix will be copied (may be NULL). |
int rc_avpair_get_raw | ( | VALUE_PAIR * | vp, |
char ** | res, | ||
unsigned * | res_size ) |
Get the raw value of the given attribute value-pair
This function is valid for PW_TYPE_STRING, PW_TYPE_IPV6ADDR, PW_TYPE_IPV6PREFIX.
vp | a pointer to a VALUE_PAIR structure. |
res | Will contain pointer to the data value. |
res_size | Will contain the data size. |
int rc_avpair_get_uint32 | ( | VALUE_PAIR * | vp, |
uint32_t * | res ) |
Get the integer value of the given attribute value-pair
This function is valid for PW_TYPE_INTEGER, PW_TYPE_IPADDR. PW_TYPE_DATE. In PW_TYPE_IPADDR this value will contain the IPv4 address in host by order.
vp | a pointer to a VALUE_PAIR structure. |
res | The integer value returned. |
void rc_avpair_insert | ( | VALUE_PAIR ** | a, |
VALUE_PAIR * | p, | ||
VALUE_PAIR * | b ) |
Insert a VALUE_PAIR into a list
Given the address of an existing list "a" and a pointer to an entry "p" in that list, add the value pair "b" to the "a" list after the "p" entry. If "p" is NULL, add the value pair "b" to the end of "a".
a | a VALUE_PAIR array of values. |
p | a pointer to a VALUE_PAIR in a. |
b | The VALUE_PAIR pointer to add in a. |
char * rc_avpair_log | ( | rc_handle const * | rh, |
VALUE_PAIR * | pair, | ||
char * | buf, | ||
size_t | buf_len ) |
Format a sequence of attribute value pairs into a printable string
The caller should provide a storage buffer and the buffer length.
rh | a handle to parsed configuration. |
pair | a pointer to a VALUE_PAIR structure. |
buf | will hold the string output of the pair. |
buf_len | the size of buf. |
VALUE_PAIR * rc_avpair_new | ( | rc_handle const * | rh, |
uint32_t | attrid, | ||
void const * | pval, | ||
int | len, | ||
uint32_t | vendorspec ) |
Make a new attribute-value pair with given parameters
See rc_avpair_assign() for the format of the data.
rh | a handle to parsed configuration. |
attrid | The attribute of the pair to add (e.g., PW_USER_NAME). |
pval | the value (e.g., the actual username). |
len | the length of pval, or -1 if to calculate (in case of strings). |
vendorspec | The vendor ID in case of a vendor specific value - 0 otherwise. |
VALUE_PAIR * rc_avpair_next | ( | VALUE_PAIR * | t | ) |
Iterates through the attribute-value pairs
The attribute-value are organized in a linked-list, and this function provides a way to iterate them given the first element initially.
t | the current pair. |
int rc_avpair_parse | ( | rc_handle const * | rh, |
char const * | buffer, | ||
VALUE_PAIR ** | first_pair ) |
Parses the buffer to extract the attribute-value pairs
rh | a handle to parsed configuration. |
buffer | the buffer to be parsed. |
first_pair | an allocated array of values. |
void rc_avpair_remove | ( | VALUE_PAIR ** | list, |
uint32_t | attrid, | ||
uint32_t | vendorspec ) |
Removes an attribute-value pair from the given list
See rc_avpair_assign() for the format of the data.
list | a VALUE_PAIR array of values |
attrid | The attribute of the pair to remove (e.g., PW_USER_NAME). |
vendorspec | The vendor ID in case of a vendor specific value - 0 otherwise. |
int rc_avpair_tostr | ( | rc_handle const * | rh, |
VALUE_PAIR * | pair, | ||
char * | name, | ||
int | ln, | ||
char * | value, | ||
int | lv ) |
Translate an av_pair into printable strings
rh | a handle to parsed configuration. |
pair | a pointer to a VALUE_PAIR structure. |
name | the name of the pair. |
ln | the size of name. |
value | the value of the pair. |
lv | the size of value. |
void rc_buildreq | ( | rc_handle const * | rh, |
SEND_DATA * | data, | ||
int | code, | ||
char * | server, | ||
unsigned short | port, | ||
char * | secret, | ||
int | timeout, | ||
int | retries ) |
Build a skeleton RADIUS request using information from the config file
rh | a handle to parsed configuration. |
data | a pointer to a SEND_DATA structure. |
code | one of standard RADIUS codes (e.g., PW_ACCESS_REQUEST). |
server | the name of the server. |
port | the server's port number. |
secret | the secret used by the server. |
timeout | the timeout in seconds of a message. |
retries | the number of retries. |
Definition at line 41 of file buildreq.c.
int rc_check | ( | rc_handle * | rh, |
char * | host, | ||
char * | secret, | ||
unsigned short | port, | ||
char * | msg ) |
Asks the server hostname on the specified port for a status message
rh | a handle to parsed configuration. |
host | the name of the server. |
secret | the secret used by the server. |
port | the server's port number. |
msg | must be an array of PW_MAX_MSG_SIZE or NULL; will contain the concatenation of any PW_REPLY_MESSAGE received. |
Definition at line 303 of file buildreq.c.
int rc_conf_int | ( | rc_handle const * | rh, |
char const * | optname ) |
SERVER * rc_conf_srv | ( | rc_handle const * | rh, |
char const * | optname ) |
char * rc_conf_str | ( | rc_handle const * | rh, |
char const * | optname ) |
void rc_config_free | ( | rc_handle * | rh | ) |
rc_config_free:
rh | a handle to parsed configuration |
Free allocated config values. For legacy compatibility reasons this will not release any dictionary entries. To release all memory from the handle use rc_destroy() instead.
rc_handle * rc_config_init | ( | rc_handle * | rh | ) |
Initialise a configuration structure
Initialize the configuration structure from an external program. For use when not running a standalone client that reads from a config file.
The provided handled must have been allocated using rc_new().
rh | a handle to parsed configuration. |
void rc_destroy | ( | rc_handle * | rh | ) |
DICT_ATTR * rc_dict_addattr | ( | rc_handle * | rh, |
char const * | namestr, | ||
uint32_t | value, | ||
int | type, | ||
uint32_t | vendorspec ) |
DICT_VALUE * rc_dict_addval | ( | rc_handle * | rh, |
char const * | attrstr, | ||
char const * | namestr, | ||
uint32_t | value ) |
DICT_VENDOR * rc_dict_addvend | ( | rc_handle * | rh, |
char const * | namestr, | ||
uint32_t | vendorspec ) |
DICT_ATTR * rc_dict_findattr | ( | rc_handle const * | rh, |
char const * | attrname ) |
DICT_VALUE * rc_dict_findval | ( | rc_handle const * | rh, |
char const * | valname ) |
DICT_VENDOR * rc_dict_findvend | ( | rc_handle const * | rh, |
char const * | vendorname ) |
void rc_dict_free | ( | rc_handle * | rh | ) |
DICT_ATTR * rc_dict_getattr | ( | rc_handle const * | rh, |
uint64_t | attribute ) |
DICT_VALUE * rc_dict_getval | ( | rc_handle const * | rh, |
uint32_t | value, | ||
char const * | attrname ) |
DICT_VENDOR * rc_dict_getvend | ( | rc_handle const * | rh, |
uint32_t | vendorspec ) |
int rc_find_server_addr | ( | rc_handle const * | rh, |
char const * | server_name, | ||
struct addrinfo ** | info, | ||
char * | secret, | ||
rc_type | type ) |
Locate a server in the rh config or if not found, check for a servers file
rh | a handle to parsed configuration. |
server_name | the name of the server. |
info | will hold a pointer to addrinfo |
secret | will hold the server's secret (of MAX_SECRET_LENGTH). |
type | AUTH or ACCT |
rc_socket_type rc_get_socket_type | ( | rc_handle * | rh | ) |
rc_handle * rc_new | ( | void | ) |
rc_handle * rc_read_config | ( | char const * | filename | ) |
Read the global config file
This function will load the provided configuration file, and any other files such as the dictionary. This is the most common mode of use of this library. The configuration format is compatible with the radiusclient-ng and freeradius-client formats.
Note: To preserve compatibility with libraries of the same API which don't load the dictionary care is taken not to reload the same filename twice even if instructed to.
filename | a name of a file. |
int rc_read_dictionary | ( | rc_handle * | rh, |
char const * | filename ) |
int rc_read_dictionary_from_buffer | ( | rc_handle * | rh, |
char const * | buf, | ||
size_t | size ) |
Initialize the dictionary from Buffer
Read all ATTRIBUTES into the dictionary_attributes list. Read all VALUES into the dictionary_values list.
rh | a handle to parsed configuration. |
buf | buffer holding Dictionary info |
size | size of buffer |
Sends a request to a RADIUS server and waits for the reply
rh | a handle to parsed configuration |
data | a pointer to a SEND_DATA structure |
msg | must be an array of PW_MAX_MSG_SIZE or NULL; will contain the concatenation of any PW_REPLY_MESSAGE received. |
type | must be AUTH or ACCT |
Definition at line 232 of file sendserver.c.