]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Don't lose tags
authorAlan T. DeKok <aland@freeradius.org>
Wed, 22 Apr 2009 12:42:13 +0000 (14:42 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 22 Apr 2009 12:42:13 +0000 (14:42 +0200)
src/modules/rlm_perl/rlm_perl.c

index 8c44bca142c55caddb47d998ff442f10d792f82d..1df206be5e7f25a90e614e2568d162faa8ebe765 100644 (file)
@@ -513,6 +513,7 @@ static void perl_store_vps(VALUE_PAIR *vp, HV *rad_hv)
 {
         VALUE_PAIR     *nvp, *vpa, *vpn;
        AV              *av;
+       char            namebuf[256], *name;
        char            buffer[1024];
        int             attr, len;
 
@@ -520,8 +521,10 @@ static void perl_store_vps(VALUE_PAIR *vp, HV *rad_hv)
        nvp = paircopy(vp);
 
        while (nvp != NULL) {
+               name = nvp->name;
                attr = nvp->attribute;
                vpa = paircopy2(nvp,attr);
+
                if (vpa->next) {
                        av = newAV();
                        vpn = vpa;
@@ -534,10 +537,17 @@ static void perl_store_vps(VALUE_PAIR *vp, HV *rad_hv)
                        hv_store(rad_hv, nvp->name, strlen(nvp->name),
                                        newRV_noinc((SV *) av), 0);
                } else {
+                       if ((vpa->flags.has_tag) &&
+                           (vpa->flags.tag != 0)) {
+                               snprintf(namebuf, sizeof(namebuf), "%s:%d",
+                                        nvp->name, nvp->flags.tag);
+                               name = namebuf;
+                       }
+
                        len = vp_prints_value(buffer, sizeof(buffer),
-                                       vpa, FALSE);
-                       hv_store(rad_hv, vpa->name, strlen(vpa->name),
-                                       newSVpv(buffer, len), 0);
+                                             vpa, FALSE);
+                       hv_store(rad_hv, name, strlen(name),
+                                newSVpv(buffer, len), 0);
                }
 
                pairfree(&vpa);