---
name: "rc_aaa_ctx_server"
section: "3"
platform: "linux"
package: "radcli"
version: "2.0.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/rc_aaa_ctx_server"
---

# rc\_aaa\_ctx\_server(3)

Builds an authentication/accounting request and submits it to a specific server.

## NAME

rc\_aaa\_ctx\_server - Builds an authentication/accounting request and submits it to a specific server.

## SYNOPSIS

```
#include <radcli/>

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
);
```

## DESCRIPTION

Like rc\_aaa\_ctx() but sends to aaaserver instead of the server list from the configuration. Use this when the caller has already selected the server (e.g., in proxy scenarios).

## PARAMETERS

- **rh**

  a handle to parsed configuration.

- **ctx**

  if non-NULL, receives an allocated RC\_AAA\_CTX on success; the caller must free it with rc\_aaa\_ctx\_free(). Pass NULL if not needed.

- **aaaserver**

  a non-NULL SERVER describing the target server(s).

- **type**

  AUTH to use the authentication port, ACCT for the accounting port. Under TLS/DTLS only AUTH is valid (both auth and acct share the same TLS connection to the authserver).

- **nas\_port**

  the physical NAS port number to include (may be zero).

- **send**

  VALUE\_PAIR list of attributes to send (e.g., PW\_USER\_NAME).

- **received**

  on success, receives the server's reply VALUE\_PAIR list; the caller must free it with rc\_avpair\_free().

- **msg**

  if non-NULL, must point to a buffer of PW\_MAX\_MSG\_SIZE bytes; will contain the concatenation of any PW\_REPLY\_MESSAGE attributes received.

- **add\_nas\_port**

  if non-zero, PW\_NAS\_PORT is added to the sent pairs.

- **request\_type**

  one of the standard RADIUS codes (e.g., PW\_ACCESS\_REQUEST).

## RETURN VALUE

OK\_RC (0) on success, CHALLENGE\_RC (3) on Access-Challenge, REJECT\_RC (2) on Access-Reject, or a negative error code on failure.

## SEE ALSO

[*rc\_aaa*(3)](/rc_aaa/3.md), [*rc\_aaa\_ctx*(3)](/rc_aaa_ctx/3.md), [*rc\_aaa\_ctx\_free*(3)](/rc_aaa_ctx_free/3.md), [*rc\_aaa\_ctx\_get\_secret*(3)](/rc_aaa_ctx_get_secret/3.md), [*rc\_aaa\_ctx\_get\_vector*(3)](/rc_aaa_ctx_get_vector/3.md), [*rc\_acct*(3)](/rc_acct/3.md), [*rc\_acct\_async*(3)](/rc_acct_async/3.md), [*rc\_acct\_proxy*(3)](/rc_acct_proxy/3.md), [*rc\_auth*(3)](/rc_auth/3.md), [*rc\_auth\_proxy*(3)](/rc_auth_proxy/3.md), [*rc\_avpair\_add*(3)](/rc_avpair_add/3.md), [*rc\_avpair\_assign*(3)](/rc_avpair_assign/3.md), [*rc\_avpair\_copy*(3)](/rc_avpair_copy/3.md), [*rc\_avpair\_free*(3)](/rc_avpair_free/3.md), [*rc\_avpair\_gen*(3)](/rc_avpair_gen/3.md), [*rc\_avpair\_get*(3)](/rc_avpair_get/3.md), [*rc\_avpair\_get\_attr*(3)](/rc_avpair_get_attr/3.md), [*rc\_avpair\_get\_in6*(3)](/rc_avpair_get_in6/3.md), [*rc\_avpair\_get\_raw*(3)](/rc_avpair_get_raw/3.md), [*rc\_avpair\_get\_uint32*(3)](/rc_avpair_get_uint32/3.md), [*rc\_avpair\_insert*(3)](/rc_avpair_insert/3.md), [*rc\_avpair\_log*(3)](/rc_avpair_log/3.md), [*rc\_avpair\_new*(3)](/rc_avpair_new/3.md), [*rc\_avpair\_next*(3)](/rc_avpair_next/3.md), [*rc\_avpair\_parse*(3)](/rc_avpair_parse/3.md), [*rc\_avpair\_remove*(3)](/rc_avpair_remove/3.md), [*rc\_avpair\_tostr*(3)](/rc_avpair_tostr/3.md), [*rc\_buildreq*(3)](/rc_buildreq/3.md), [*rc\_check*(3)](/rc_check/3.md), [*rc\_dict\_addattr*(3)](/rc_dict_addattr/3.md), [*rc\_dict\_addval*(3)](/rc_dict_addval/3.md), [*rc\_dict\_addvend*(3)](/rc_dict_addvend/3.md), [*rc\_dict\_findattr*(3)](/rc_dict_findattr/3.md), [*rc\_dict\_findval*(3)](/rc_dict_findval/3.md), [*rc\_dict\_findvend*(3)](/rc_dict_findvend/3.md), [*rc\_dict\_getattr*(3)](/rc_dict_getattr/3.md), [*rc\_dict\_getval*(3)](/rc_dict_getval/3.md), [*rc\_dict\_getvend*(3)](/rc_dict_getvend/3.md), [*rc\_send\_server*(3)](/rc_send_server/3.md)
