Include session-state in rlm_perl
authorHerwin Weststrate <herwin@quarantainenet.nl>
Mon, 21 Sep 2015 10:42:18 +0000 (12:42 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 24 Sep 2015 15:19:05 +0000 (11:19 -0400)
Via the new variable %RAD_STATE.

raddb/mods-config/perl/example.pl
src/modules/rlm_perl/rlm_perl.c

index 7c82f11..cec4c02 100644 (file)
@@ -34,7 +34,7 @@ use warnings;
 use Data::Dumper;
 
 # Bring the global hashes into the package scope
-our (%RAD_REQUEST, %RAD_REPLY, %RAD_CHECK);
+our (%RAD_REQUEST, %RAD_REPLY, %RAD_CHECK, %RAD_STATE);
 
 # This is hash wich hold original request from radius
 #my %RAD_REQUEST;
@@ -42,6 +42,8 @@ our (%RAD_REQUEST, %RAD_REPLY, %RAD_CHECK);
 #my %RAD_REPLY;
 #This is for check items
 #my %RAD_CHECK;
+# This is the session-sate
+#my %RAD_STATE;
 # This is configuration items from "config" perl module configuration section
 #my %RAD_PERLCONF;
 
index 9a35484..2f9eb23 100644 (file)
@@ -766,6 +766,7 @@ static int do_perl(void *instance, REQUEST *request, char const *function_name)
        HV              *rad_check_hv;
        HV              *rad_config_hv;
        HV              *rad_request_hv;
+       HV              *rad_state_hv;
 #ifdef WITH_PROXY
        HV              *rad_request_proxy_hv;
        HV              *rad_request_proxy_reply_hv;
@@ -803,11 +804,13 @@ static int do_perl(void *instance, REQUEST *request, char const *function_name)
                rad_check_hv = get_hv("RAD_CHECK", 1);
                rad_config_hv = get_hv("RAD_CONFIG", 1);
                rad_request_hv = get_hv("RAD_REQUEST", 1);
+               rad_state_hv = get_hv("RAD_STATE", 1);
 
                perl_store_vps(request->packet, request, &request->packet->vps, rad_request_hv, "RAD_REQUEST", "request");
                perl_store_vps(request->reply, request, &request->reply->vps, rad_reply_hv, "RAD_REPLY", "reply");
                perl_store_vps(request, request, &request->config, rad_check_hv, "RAD_CHECK", "control");
                perl_store_vps(request, request, &request->config, rad_config_hv, "RAD_CONFIG", "control");
+               perl_store_vps(request, request, &request->state, rad_state_hv, "RAD_STATE", "session-state");
 
 #ifdef WITH_PROXY
                rad_request_proxy_hv = get_hv("RAD_REQUEST_PROXY",1);
@@ -886,6 +889,12 @@ static int do_perl(void *instance, REQUEST *request, char const *function_name)
                        vp = NULL;
                }
 
+               if ((get_hv_content(request, request, rad_state_hv, &vp, "RAD_STATE", "session-state")) == 0) {
+                       fr_pair_list_free(&request->state);
+                       request->state = vp;
+                       vp = NULL;
+               }
+
 #ifdef WITH_PROXY
                if (request->proxy &&
                    (get_hv_content(request->proxy, request, rad_request_proxy_hv, &vp,