]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
attr: These conversions are all fine
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 31 Jul 2025 01:55:05 +0000 (18:55 -0700)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Thu, 31 Jul 2025 01:55:05 +0000 (18:55 -0700)
src/lib/json/json.c
src/modules/rlm_lua/lua.c
src/modules/rlm_mruby/mruby.c
src/modules/rlm_perl/rlm_perl.c

index 595008430eab2f4cc238242e23c6fe146bdf469b..434a667a0820bbe020760d8c3d160fe832ace3c1 100644 (file)
@@ -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;
index 91b7ad88ffe453e3a2d6fe33eb8e34dbf7299aec..eb23db1b23124097286a47fe48d3e19347a679f1 100644 (file)
@@ -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;
index 86aa51237182174b8541ea29e8c13a53be76ec66..fb7bb0de1926547e498246d971d0559ba2190b5d 100644 (file)
@@ -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();
index f9e6ea7bb63c35c0c293f35cbb7d25db3d871aa0..6d7df015474fca040f0e84f1d84be5092c9db30c 100644 (file)
@@ -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;