diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Simple.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Simple.pm index ee92acf23..96e4c05ba 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Simple.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Simple.pm @@ -373,7 +373,7 @@ sub safe { }"; $class->lmLog( $@, 'error' ) if ($@); } - $safe->share_from( 'main', ['%ENV'] ); + $safe->share_from( 'main', ['%ENV', 'APR::Table::set'] ); $safe->share_from( 'Lemonldap::NG::Common::Safelib', $Lemonldap::NG::Common::Safelib::functions ); $safe->share( '&encode_base64', '$datas', '&lmSetHeaderIn', @@ -609,7 +609,9 @@ sub conditionSub { $cond =~ s/\$datas->{vhost}/\$apacheRequest->hostname/g; # Eval sub - my $sub = $class->safe->reval("sub {return ( $cond )}"); + my $sub = + $class->safe->wrap_code_ref( + $class->safe->reval("sub {return ( $cond )}") ); # Return sub and protected flag return ( $sub, 1 ); @@ -693,7 +695,8 @@ sub forgeHeadersInit { "lmSetHeaderIn(\$apacheRequest,'$_' => join('',split(/[\\r\\n]+/," . $tmp{$_} . ")));"; } - $forgeHeaders = $class->safe->reval("sub {$sub};"); + $forgeHeaders = + $class->safe->wrap_code_ref( $class->safe->reval("sub {$sub};") ); $class->lmLog( "$class: Unable to forge headers: $@: sub {$sub}", 'error' ) if ($@); 1; @@ -734,8 +737,9 @@ sub postUrlInit { $h{$_} = "'$h{$_}'" if ( $h{$_} =~ /^\w+$/ ); $tmp .= "'$_'=>$h{$_},"; } - my $sub = $class->safe->reval( - "sub{ + my $sub = $class->safe->wrap_code_ref( + $class->safe->reval( + "sub{ my \$f = shift; my \$l; unless(\$f->ctx){ @@ -752,6 +756,7 @@ sub postUrlInit { } return OK; }" + ) ); $class->lmLog( "Compiling POST request for $url", 'debug' ); $transform->{$url} = sub { diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Vhost.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Vhost.pm index c818ae850..2d507164e 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Vhost.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Vhost.pm @@ -78,7 +78,8 @@ sub forgeHeadersInit { #$sub = "\$forgeHeaders->{'$vhost'} = sub {$sub};"; #eval "$sub"; - $forgeHeaders->{$vhost} = $class->safe->reval("sub {$sub}"); + $forgeHeaders->{$vhost} = + $class->safe->wrap_code_ref( $class->safe->reval("sub {$sub}") ); $class->lmLog( "$class: Unable to forge headers: $@: sub {$sub}", 'error' ) if ($@); diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm index 7575bfb3e..8ee0d1c21 100644 --- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm +++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm @@ -151,7 +151,8 @@ sub displayModule { # Else parse display condition my $cond = $self->{modules}->{$modulename}; $cond =~ s/\$(\w+)/$self->{portalObject}->{sessionInfo}->{$1}/g; - return $self->_safe->reval("sub {return ( $cond )}"); + return $self->safe->wrap_code_ref( + $self->_safe->reval("sub {return ( $cond )}") ); return 0; } @@ -565,7 +566,9 @@ sub _conditionSub { $cond =~ s/\$date/&POSIX::strftime("%Y%m%d%H%M%S",localtime())/e; $cond =~ s/\$(\w+)/\$self->{portalObject}->{sessionInfo}->{$1}/g; my $sub; - $sub = $self->_safe->reval("sub {my \$self = shift; return ( $cond )}"); + $sub = + $self->safe->wrap_code_ref( + $self->_safe->reval("sub {my \$self = shift; return ( $cond )}") ); return $sub; } diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SOAP.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SOAP.pm index 835ff849b..7cdc197f7 100644 --- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SOAP.pm +++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SOAP.pm @@ -368,7 +368,9 @@ sub _conditionSub { $cond =~ s/\$date/&POSIX::strftime("%Y%m%d%H%M%S",localtime())/e; $cond =~ s/\$(\w+)/$h->{$1}/g; my $sub; - $sub = $self->safe->reval("sub {my \$self = shift; return ( $cond )}"); + $sub = + $self->safe->wrap_code_ref( + $self->safe->reval("sub {my \$self = shift; return ( $cond )}") ); return $sub; }