From: Arran Cudbard-Bell Date: Thu, 31 Jul 2025 01:55:05 +0000 (-0700) Subject: attr: These conversions are all fine X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ebbc225d0a70ee92da5cd9e43ebc896af379f5c;p=thirdparty%2Ffreeradius-server.git attr: These conversions are all fine --- diff --git a/src/lib/json/json.c b/src/lib/json/json.c index 595008430e..434a667a08 100644 --- a/src/lib/json/json.c +++ b/src/lib/json/json.c @@ -429,6 +429,7 @@ fr_slen_t fr_json_str_from_value(fr_sbuff_t *out, fr_value_box_t *vb, bool inclu case FR_TYPE_ETHERNET: case FR_TYPE_DATE: case FR_TYPE_TIME_DELTA: + case FR_TYPE_ATTR: { fr_slen_t slen; @@ -443,7 +444,6 @@ fr_slen_t fr_json_str_from_value(fr_sbuff_t *out, fr_value_box_t *vb, bool inclu fr_strerror_const("Structural boxes not yet supported"); return -1; - case FR_TYPE_ATTR: case FR_TYPE_INTERNAL: fr_strerror_printf("Box type %s cannot be converted to string", fr_type_to_str(vb->type)); return -1; diff --git a/src/modules/rlm_lua/lua.c b/src/modules/rlm_lua/lua.c index 91b7ad88ff..eb23db1b23 100644 --- a/src/modules/rlm_lua/lua.c +++ b/src/modules/rlm_lua/lua.c @@ -113,6 +113,7 @@ static int fr_lua_marshall(request_t *request, lua_State *L, fr_pair_t const *vp case FR_TYPE_COMBO_IP_PREFIX: case FR_TYPE_IFID: case FR_TYPE_TIME_DELTA: + case FR_TYPE_ATTR: { char buff[128]; ssize_t slen; @@ -193,7 +194,6 @@ static int fr_lua_marshall(request_t *request, lua_State *L, fr_pair_t const *vp lua_pushinteger(L, (lua_Integer)vp->vp_size); break; - case FR_TYPE_ATTR: case FR_TYPE_NON_LEAF: REDEBUG("Cannot convert %s to Lua type", fr_type_to_str(vp->vp_type)); return -1; diff --git a/src/modules/rlm_mruby/mruby.c b/src/modules/rlm_mruby/mruby.c index 86aa512371..fb7bb0de19 100644 --- a/src/modules/rlm_mruby/mruby.c +++ b/src/modules/rlm_mruby/mruby.c @@ -250,6 +250,7 @@ static mrb_value mruby_pair_value_to_ruby(mrb_state *mrb, request_t *request, fr case FR_TYPE_IFID: case FR_TYPE_TIME_DELTA: case FR_TYPE_DATE: + case FR_TYPE_ATTR: { char *in; size_t len; @@ -261,7 +262,6 @@ static mrb_value mruby_pair_value_to_ruby(mrb_state *mrb, request_t *request, fr return value; } - case FR_TYPE_ATTR: case FR_TYPE_NON_LEAF: REDEBUG("Cannot convert %s to ruby type", fr_type_to_str(vp->vp_type)); break; @@ -319,7 +319,7 @@ static void mruby_pair_parent_build(mrb_state *mrb, mruby_pair_t *pair) /** Convert a ruby value to a fr_pair_t value * */ -static void mruby_roby_to_pair_value(mrb_state *mrb, mrb_value *value, fr_pair_t *vp) +static void mruby_ruby_to_pair_value(mrb_state *mrb, mrb_value *value, fr_pair_t *vp) { switch (vp->vp_type) { case FR_TYPE_STRING: @@ -367,6 +367,23 @@ static void mruby_roby_to_pair_value(mrb_state *mrb, mrb_value *value, fr_pair_t RUBYSETFLOAT(32) RUBYSETFLOAT(64) + case FR_TYPE_SIZE: + if (mrb_type(*value) != MRB_TT_INTEGER) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "Integer value required"); + } + vp->vp_size = mrb_integer(*value); + break; + + case FR_TYPE_BOOL: + if (mrb_type(*value) == MRB_TT_TRUE) { + vp->vp_bool = true; + } else if (mrb_type(*value) == MRB_TT_FALSE) { + vp->vp_bool = false; + } else { + mrb_raise(mrb, E_ARGUMENT_ERROR, "Boolean value required"); + } + break; + case FR_TYPE_ETHERNET: case FR_TYPE_IPV4_ADDR: case FR_TYPE_IPV6_ADDR: @@ -377,13 +394,15 @@ static void mruby_roby_to_pair_value(mrb_state *mrb, mrb_value *value, fr_pair_t case FR_TYPE_IFID: case FR_TYPE_TIME_DELTA: case FR_TYPE_DATE: + case FR_TYPE_ATTR: + *value = mrb_obj_as_string(mrb, *value); if (fr_pair_value_from_str(vp, RSTRING_PTR(*value), RSTRING_LEN(*value), NULL, false) < 0) { mrb_raise(mrb, E_RUNTIME_ERROR, "Failed populating pair"); } break; - default: + case FR_TYPE_NON_LEAF: fr_assert(0); break; } @@ -429,7 +448,7 @@ static mrb_value mruby_value_pair_set(mrb_state *mrb, mrb_value self) } } - mruby_roby_to_pair_value(mrb, &value, vp); + mruby_ruby_to_pair_value(mrb, &value, vp); RDEBUG2("%pP", vp); return mrb_nil_value(); @@ -459,7 +478,7 @@ static mrb_value mruby_value_pair_append(mrb_state *mrb, mrb_value self) mrb_raisef(mrb, E_RUNTIME_ERROR, "Failed adding %s", pair->da->name); } - mruby_roby_to_pair_value(mrb, &value, vp); + mruby_ruby_to_pair_value(mrb, &value, vp); RDEBUG2("%pP", vp); return mrb_nil_value(); diff --git a/src/modules/rlm_perl/rlm_perl.c b/src/modules/rlm_perl/rlm_perl.c index f9e6ea7bb6..6d7df01547 100644 --- a/src/modules/rlm_perl/rlm_perl.c +++ b/src/modules/rlm_perl/rlm_perl.c @@ -603,6 +603,7 @@ static int perl_value_marshal(fr_pair_t *vp, SV **value) case FR_TYPE_IFID: case FR_TYPE_DATE: case FR_TYPE_TIME_DELTA: + case FR_TYPE_ATTR: { char buff[128]; ssize_t slen; @@ -619,7 +620,6 @@ static int perl_value_marshal(fr_pair_t *vp, SV **value) break; /* Only leaf nodes should be able to call this */ - case FR_TYPE_ATTR: case FR_TYPE_NON_LEAF: croak("Cannot convert %s to Perl type", fr_type_to_str(vp->vp_type)); return -1;