]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Convert structural data into Perl hashes
authorNick Porter <nick@portercomputing.co.uk>
Thu, 19 Sep 2024 13:32:54 +0000 (14:32 +0100)
committerNick Porter <nick@portercomputing.co.uk>
Mon, 23 Sep 2024 10:50:27 +0000 (11:50 +0100)
src/modules/rlm_perl/rlm_perl.c

index 96d01784d1a45d318df69fbed2b23e30b0fd93e0..f74a1ab61aed786207404c832c0d7b54f99b5136 100644 (file)
@@ -599,7 +599,10 @@ static void perl_parse_config(CONF_SECTION *cs, int lvl, HV *rad_hv)
        DEBUG("%*s}", indent_section, " ");
 }
 
-static void perl_vp_to_svpvn_element(request_t *request, AV *av, fr_pair_t const *vp,
+static void perl_store_vps(request_t *request, fr_pair_list_t *vps, HV *rad_hv,
+                          const char *hash_name, bool dbg_print);
+
+static void perl_vp_to_svpvn_element(request_t *request, AV *av, fr_pair_t *vp,
                                     int *i, const char *hash_name, bool dbg_print)
 {
 
@@ -615,6 +618,15 @@ static void perl_vp_to_svpvn_element(request_t *request, AV *av, fr_pair_t const
                sv = newSVpvn((char const *)vp->vp_octets, vp->vp_length);
                break;
 
+       case FR_TYPE_STRUCTURAL:
+       {
+               HV              *hv;
+               hv = newHV();
+               perl_store_vps(request, &vp->vp_group, hv, vp->da->name, false);
+               sv = newRV_noinc((SV *)hv);
+       }
+               break;
+
        default:
        {
                char    buffer[1024];
@@ -690,6 +702,15 @@ static void perl_store_vps(request_t *request, fr_pair_list_t *vps, HV *rad_hv,
                                       newSVpvn((char const *)vp->vp_octets, vp->vp_length), 0);
                        break;
 
+               case FR_TYPE_STRUCTURAL:
+               {
+                       HV *hv;
+                       hv = newHV();
+                       perl_store_vps(request, &vp->vp_group, hv, vp->da->name, false);
+                       (void)hv_store(rad_hv, name, strlen(name), newRV_noinc((SV *)hv), 0);
+               }
+                       break;
+
                default:
                {
                        char buffer[1024];