{
static int cnt;
CONF_SECTION *cs;
- char buffer[256];
fr_client_t *c;
fr_sbuff_t *tmp;
- fr_token_t v_token = T_BARE_WORD;
if (!request) return NULL;
- FR_SBUFF_TALLOC_THREAD_LOCAL(&tmp, 1024, SIZE_MAX);
+ FR_SBUFF_TALLOC_THREAD_LOCAL(&tmp, 128, SIZE_MAX);
if (unlikely(fr_sbuff_in_sprintf(tmp, "dynamic_%i_", cnt++) <= 0)) {
name_error:
if (unlikely(fr_value_box_print(tmp, fr_box_ipaddr(request->packet->socket.inet.src_ipaddr), NULL) <= 0)) goto name_error;
fr_sbuff_set_to_start(tmp);
- cs = cf_section_alloc(ctx, NULL, "client", buffer);
+ cs = cf_section_alloc(ctx, NULL, "client", fr_sbuff_current(tmp));
RDEBUG2("Converting &control.FreeRADIUS-Client-* to client {...} section");
RINDENT();
CONF_PAIR *cp = NULL;
char const *value;
char const *attr;
+ fr_token_t v_token = T_BARE_WORD;
if (!fr_dict_attr_is_top_level(vp->da)) continue;
switch (vp->da->attr) {
case FR_FREERADIUS_CLIENT_IP_ADDRESS:
attr = "ipv4addr";
- value = fr_inet_ntop(buffer, sizeof(buffer), &vp->vp_ip);
+ vb_to_str:
+ if (unlikely(fr_pair_print_value_quoted(tmp, vp, T_BARE_WORD) < 0)) {
+ RERROR("Failed to convert %pP to string", vp);
+ error:
+ talloc_free(cs);
+ return NULL;
+ }
+ value = fr_sbuff_start(tmp);
break;
case FR_FREERADIUS_CLIENT_IP_PREFIX:
attr = "ipv4addr";
- value = fr_inet_ntop_prefix(buffer, sizeof(buffer), &vp->vp_ip);
- break;
+ goto vb_to_str;
case FR_FREERADIUS_CLIENT_IPV6_ADDRESS:
attr = "ipv6addr";
- value = fr_inet_ntop(buffer, sizeof(buffer), &vp->vp_ip);
- break;
+ goto vb_to_str;
case FR_FREERADIUS_CLIENT_IPV6_PREFIX:
attr = "ipv6addr";
- value = fr_inet_ntop_prefix(buffer, sizeof(buffer), &vp->vp_ip);
- break;
+ goto vb_to_str;
case FR_FREERADIUS_CLIENT_SECRET:
attr = "secret";
case FR_FREERADIUS_CLIENT_SRC_IP_ADDRESS:
attr = "src_ipaddr";
- value = fr_inet_ntop(buffer, sizeof(buffer), &vp->vp_ip);
- break;
+ goto vb_to_str;
case FR_FREERADIUS_CLIENT_REQUIRE_MA:
attr = "require_message_authenticator";
- switch(vp->vp_uint8) {
- case FR_FREERADIUS_CLIENT_REQUIRE_MA_VALUE_NO:
- value = "no";
- break;
-
- case FR_FREERADIUS_CLIENT_REQUIRE_MA_VALUE_AUTO:
- value = "auto";
- break;
-
- case FR_FREERADIUS_CLIENT_REQUIRE_MA_VALUE_YES:
- value = "yes";
- break;
-
- default:
- RERROR("Invalid value for FreeRADIUS-Client-Require-MA");
- goto error;
- }
- break;
+ goto vb_to_str;
case FR_FREERADIUS_CLIENT_LIMIT_PROXY_STATE:
attr = "limit_proxy_state";
- switch(vp->vp_uint8) {
- case FR_FREERADIUS_CLIENT_LIMIT_PROXY_STATE_VALUE_NO:
- value = "no";
- break;
-
- case FR_FREERADIUS_CLIENT_LIMIT_PROXY_STATE_VALUE_AUTO:
- value = "auto";
- break;
-
- case FR_FREERADIUS_CLIENT_LIMIT_PROXY_STATE_VALUE_YES:
- value = "yes";
- break;
-
- default:
- RERROR("Invalid value for FreeRADIUS-Client-Limit-Proxy-State");
- goto error;
- }
- break;
+ goto vb_to_str;
case FR_FREERADIUS_CLIENT_TRACK_CONNECTIONS:
attr = "track_connections";
- if (vp->vp_bool) {
- value = "true";
- } else {
- value = "false";
- }
- break;
+ goto vb_to_str;
default:
RDEBUG2("Adding custom attribute %pP", vp);
* src IP, protocol, etc. This should all be in TLVs..
*/
c = client_afrom_cs(cs, cs, unlang_call_current(request), 0);
- if (!c) {
- error:
- talloc_free(cs);
- return NULL;
- }
+ if (!c) goto error;
return c;
}