From 01785de79207633872cbffdf3420d7adc79c35ab Mon Sep 17 00:00:00 2001 From: Xavier Guimard Date: Sun, 31 Jan 2010 08:25:05 +0000 Subject: [PATCH] * "SKIP" in SAML tests * "= splice @_" instead of "= @_" avoid memory duplication --- .../liblemonldap-ng-portal-perl.install | 1 - .../lib/Lemonldap/NG/Handler/AuthBasic.pm | 2 +- .../lib/Lemonldap/NG/Handler/CDA.pm | 1 + .../lib/Lemonldap/NG/Handler/CGI.pm | 8 +-- .../lib/Lemonldap/NG/Handler/Proxy.pm | 2 +- .../lib/Lemonldap/NG/Handler/SharedConf.pm | 14 ++--- .../lib/Lemonldap/NG/Handler/Simple.pm | 58 +++++++++---------- .../lib/Lemonldap/NG/Handler/Status.pm | 2 +- .../lib/Lemonldap/NG/Handler/Vhost.pm | 6 +- .../lib/Lemonldap/NG/Portal/Menu.pm | 17 ++---- .../lib/Lemonldap/NG/Portal/Notification.pm | 10 ++-- .../lib/Lemonldap/NG/Portal/UserDBLDAP.pm | 4 +- .../lib/Lemonldap/NG/Portal/_LDAP.pm | 6 +- .../lib/Lemonldap/NG/Portal/_Multi.pm | 8 +-- .../lib/Lemonldap/NG/Portal/_SOAP.pm | 12 ++-- .../lib/Lemonldap/NG/Portal/_i18n.pm | 4 +- .../t/60-Lemonldap-NG-Portal-IssuerDBSAML.t | 18 ++---- .../t/63-Lemonldap-NG-Portal-AuthSAML.t | 18 ++---- .../t/64-Lemonldap-NG-Portal-UserDBSAML.t | 18 ++---- 19 files changed, 88 insertions(+), 121 deletions(-) diff --git a/build/lemonldap-ng/debian/liblemonldap-ng-portal-perl.install b/build/lemonldap-ng/debian/liblemonldap-ng-portal-perl.install index e5300f7d8..cf7e917eb 100644 --- a/build/lemonldap-ng/debian/liblemonldap-ng-portal-perl.install +++ b/build/lemonldap-ng/debian/liblemonldap-ng-portal-perl.install @@ -1,4 +1,3 @@ -debian/tmp/etc/lemonldap-ng/apps-list* debian/tmp/usr/share/lemonldap-ng/bin/purgeCentralCache debian/tmp/usr/share/lemonldap-ng/portal-skins debian/tmp/usr/share/man/man3/Lemonldap::NG::Portal* diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/AuthBasic.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/AuthBasic.pm index 3f5a05648..8286a1de9 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/AuthBasic.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/AuthBasic.pm @@ -38,7 +38,7 @@ BEGIN { # @return Apache constant sub run ($$) { my $class; - ( $class, $apacheRequest ) = @_; + ( $class, $apacheRequest ) = splice @_; if ( time() - $lastReload > $reloadTime ) { unless ( my $tmp = $class->testConf(1) == OK ) { $class->lmLog( "$class: No configuration found", 'error' ); diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CDA.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CDA.pm index 3d3081ae8..6a242b4d9 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CDA.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CDA.pm @@ -19,6 +19,7 @@ use base qw(Lemonldap::NG::Handler::SharedConf); # @return Apache constant sub run ($$) { my $class; + ( $class, $apacheRequest ) = splice @_; $cda = 1; return $class->SUPER::run($apacheRequest); } diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CGI.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CGI.pm index 9e78306c6..abebaaacb 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CGI.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/CGI.pm @@ -35,7 +35,7 @@ sub new { unless Lemonldap::NG::Handler::_CGI->testConf() == OK; # Arguments - my @args = @_; + my @args = splice @_; if ( ref( $args[0] ) ) { %$self = ( %$self, %{ $args[0] } ); } @@ -143,7 +143,7 @@ sub user { # @param $group name of the Lemonldap::NG group to test # @return boolean : true if user is in this group sub group { - my ( $self, $group ) = @_; + my ( $self, $group ) = splice @_; return ( $datas->{groups} =~ /\b$group\b/ ); } @@ -203,7 +203,7 @@ sub lmLog { # @param $vhost Virtual Host to test # @return boolean : true if $vhost is available sub vhostAvailable { - my ( $self, $vhost ) = @_; + my ( $self, $vhost ) = splice @_; return defined( $defaultCondition->{$vhost} ); } @@ -212,7 +212,7 @@ sub vhostAvailable { # @param $uri URI string # @param $vhost Optional virtual host (default current virtual host) sub grant { - my ( $self, $uri, $vhost ) = @_; + my ( $self, $uri, $vhost ) = splice @_; $vhost ||= $ENV{SERVER_NAME}; $apacheRequest = Lemonldap::NG::Apache::Request->new( { diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Proxy.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Proxy.pm index c256f35d5..a741f5ca6 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Proxy.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Proxy.pm @@ -56,7 +56,7 @@ $UA->requests_redirectable( [] ); # Called for Apache response (PerlResponseHandler). # @return Apache constant sub run($$) { - ( $class, $r ) = @_; + ( $class, $r ) = splice @_; my $url = $r->uri; $url .= "?" . $r->args if ( $r->args ); diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/SharedConf.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/SharedConf.pm index c94fcff15..9a81a93f5 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/SharedConf.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/SharedConf.pm @@ -61,7 +61,7 @@ BEGIN { # init is overloaded to call only localInit. globalInit is called later. # @param $args hash containing parameters sub init($$) { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; # TODO reloadTime in defaultValuesInit ? $reloadTime = $args->{reloadTime} || 600; $class->localInit($args); @@ -72,7 +72,7 @@ sub init($$) { # @param $args hash containing parameters # @return boolean sub defaultValuesInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; # Local configuration overrides global configuration my %h = ( %$args, %$localConfig ); @@ -83,7 +83,7 @@ sub defaultValuesInit { # Load parameters and build the Lemonldap::NG::Common::Conf object. # @return boolean sub localInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; die( "$class : unable to build configuration : $Lemonldap::NG::Common::Conf::msg" ) @@ -118,7 +118,7 @@ sub localInit { # @param $r Apache2::RequestRec object # @return Apache constant sub run($$) { - my ( $class, $r ) = @_; + my ( $class, $r ) = splice @_; if ( time() - $lastReload > $reloadTime ) { unless ( my $tmp = $class->testConf(1) == OK ) { $class->lmLog( "$class: No configuration found", 'error' ); @@ -138,7 +138,7 @@ sub run($$) { # @param $local boolean # @return Apache constant sub testConf { - my ( $class, $local ) = @_; + my ( $class, $local ) = splice @_; my $conf = $lmConf->getConf( { local => $local } ); unless ( ref($conf) ) { $class->lmLog( @@ -163,7 +163,7 @@ sub testConf { # Local parameters have best precedence on configuration parameters. # @return Apache constant sub setConf { - my ( $class, $conf ) = @_; + my ( $class, $conf ) = splice @_; # Local configuration overrides global configuration $cfgNum = $conf->{cfgNum}; @@ -183,7 +183,7 @@ sub setConf { # @param $r current request # @return Apache constant (OK or SERVER_ERROR) sub refresh($$) { - my ( $class, $r ) = @_; + my ( $class, $r ) = splice @_; $class->lmLog( "$class: request for configuration reload", 'notice' ); $r->handler("perl-script"); if ( $class->testConf(0) == OK ) { 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 43e394b7f..e13251ec8 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Simple.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Simple.pm @@ -183,7 +183,7 @@ sub logout_mp2 : method { # @param $mess message to log # @param $level string (debug, info, warning or error) sub lmLog { - my ( $class, $mess, $level ) = @_; + my ( $class, $mess, $level ) = splice @_; die "Level is required" unless ($level); if ( MP() == 2 ) { Apache2::ServerRec->log->$level($mess); @@ -201,7 +201,7 @@ sub lmLog { # @param $r current request # @param $s string to use sub lmSetApacheUser { - my ( $class, $r, $s ) = @_; + my ( $class, $r, $s ) = splice @_; return unless ($s); if ( MP() == 2 ) { $r->user($s); @@ -216,7 +216,7 @@ sub lmSetApacheUser { # @param $str string # @return string sub regRemoteIp { - my ( $class, $str ) = @_; + my ( $class, $str ) = splice @_; if ( MP() == 2 ) { $str =~ s/\$datas->\{ip\}/\$apacheRequest->connection->remote_ip/g; } @@ -232,7 +232,7 @@ sub regRemoteIp { # @param $h Name of the header # @param $v Value of the header sub lmSetHeaderIn { - my ( $r, $h, $v ) = @_; + my ( $r, $h, $v ) = splice @_; if ( MP() == 2 ) { return $r->headers_in->set( $h => $v ); } @@ -247,7 +247,7 @@ sub lmSetHeaderIn { # @param $h Name of the header # @return Value of the header sub lmHeaderIn { - my ( $r, $h ) = @_; + my ( $r, $h ) = splice @_; if ( MP() == 2 ) { return $r->headers_in->{$h}; } @@ -262,7 +262,7 @@ sub lmHeaderIn { # @param $h Name of the header # @param $v Value of the header sub lmSetErrHeaderOut { - my ( $r, $h, $v ) = @_; + my ( $r, $h, $v ) = splice @_; if ( MP() == 2 ) { return $r->err_headers_out->set( $h => $v ); } @@ -277,7 +277,7 @@ sub lmSetErrHeaderOut { # @param $h Name of the header # @param $v Value of the header sub lmSetHeaderOut { - my ( $r, $h, $v ) = @_; + my ( $r, $h, $v ) = splice @_; if ( MP() == 2 ) { return $r->headers_out->set( $h => $v ); } @@ -292,7 +292,7 @@ sub lmSetHeaderOut { # @param $h Name of the header # @return Value of the header sub lmHeaderOut { - my ( $r, $h, $v ) = @_; + my ( $r, $h, $v ) = splice @_; if ( MP() == 2 ) { return $r->headers_out->{$h}; } @@ -391,7 +391,7 @@ sub init($$) { # (statusProcess()) in wanted and launch childInit(). # @param $args reference to the initialization hash sub localInit($$) { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; if ( $localStorage = $args->{localStorage} ) { $localStorageOptions = $args->{localStorageOptions}; $localStorageOptions->{namespace} ||= "lemonldap"; @@ -420,7 +420,7 @@ sub localInit($$) { # - cleanLocalStorage() after each requests # @return True sub childInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; return 1 if ($childInitDone); # We don't initialise local storage in the "init" subroutine because it can @@ -436,7 +436,7 @@ sub childInit { sub { return $class->initLocalStorage( $_[1], $_[0] ); } ); $s->push_handlers( PerlPostConfigHandler => sub { - my ( $c, $l, $t, $s ) = @_; + my ( $c, $l, $t, $s ) = splice @_; $s->add_version_component('Lemonldap::NG::Handler'); } ) unless ( $args->{hideSignature} ); @@ -499,7 +499,7 @@ sub globalInit { # - the list of the compiled functions (compiled with conditionSub()) # @param $args reference to the configuration hash sub locationRulesInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; $locationCount = 0; # Pre compilation : both regexp and conditions @@ -527,7 +527,7 @@ sub locationRulesInit { # locationRulesInit(). # @param $cond The boolean expression to use sub conditionSub { - my ( $class, $cond ) = @_; + my ( $class, $cond ) = splice @_; return sub { 1 } if ( $cond =~ /^accept$/i ); return sub { 0 } @@ -581,7 +581,7 @@ sub conditionSub { # Set default values for non-customized variables # @param $args reference to the configuration hash sub defaultValuesInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; # Other values $cookieName = $args->{cookieName} || $cookieName || 'lemonldap'; @@ -603,7 +603,7 @@ sub defaultValuesInit { # Verify that portal variable exists. Die unless # @param $args reference to the configuration hash sub portalInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; die("portal parameter required") unless ( $args->{portal} ); if ( $args->{portal} =~ /[\$\(&\|"']/ ) { my $portal = $class->conditionSub( $args->{portal} ); @@ -620,7 +620,7 @@ sub portalInit { # Initialize the Apache::Session::* module choosed to share user's variables. # @param $args reference to the configuration hash sub globalStorageInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; $globalStorage = $args->{globalStorage} or die "globalStorage required"; eval "use $globalStorage;"; die($@) if ($@); @@ -632,7 +632,7 @@ sub globalStorageInit { # headers into the HTTP request. # @param $args reference to the configuration hash sub forgeHeadersInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; # Creation of the subroutine who will generate headers my %tmp; @@ -663,7 +663,7 @@ sub forgeHeadersInit { # Prepare local cache (if not done before by Lemonldap::NG::Common::Conf) # @return Apache2::Const::DECLINED sub initLocalStorage { - my ( $class, $r ) = @_; + my ( $class, $r ) = splice @_; if ( $localStorage and not $refLocalStorage ) { eval "use $localStorage;\$refLocalStorage = new $localStorage(\$localStorageOptions);"; @@ -676,7 +676,7 @@ sub initLocalStorage { ## @imethod protected void postUrlInit() # Prepare methods to post form attributes sub postUrlInit { - my ( $class, $args ) = @_; + my ( $class, $args ) = splice @_; return unless ( $args->{post} ); eval 'use Apache2::Filter;use URI'; $transform = {}; @@ -750,7 +750,7 @@ qq{
" . $apacheRequest->hostname @@ -763,7 +763,7 @@ sub updateStatus { # Grant or refuse client using compiled regexp and functions # @return True if the user is granted to access to the current URL sub grant { - my ( $class, $uri ) = @_; + my ( $class, $uri ) = splice @_; for ( my $i = 0 ; $i < $locationCount ; $i++ ) { return &{ $locationCondition->[$i] }($datas) if ( $uri =~ $locationRegexp->[$i] ); @@ -776,7 +776,7 @@ sub grant { # Inform the status processus and call logForbidden(). # @return Apache2::Const::FORBIDDEN sub forbidden { - my ( $class, $uri ) = @_; + my ( $class, $uri ) = splice @_; if ( $datas->{_logout} ) { $class->updateStatus( $datas->{$whatToTrace}, $_[0], 'LOGOUT' ); my $u = $datas->{_logout}; @@ -796,7 +796,7 @@ sub forbidden { # @param $uri uri asked # @param $datas hash re to user's datas sub logForbidden { - my ( $class, $uri, $datas ) = @_; + my ( $class, $uri, $datas ) = splice @_; $class->lmLog( 'User "' . $datas->{$whatToTrace} @@ -811,7 +811,7 @@ sub logForbidden { # authorizated. This method has to be overloaded to use different logs systems # @param $uri uri asked sub logGranted { - my ( $class, $uri, $datas ) = @_; + my ( $class, $uri, $datas ) = splice @_; $class->lmLog( 'User "' . $datas->{$whatToTrace} @@ -834,7 +834,7 @@ sub hideCookie { ## @rmethod protected string encodeUrl(string url) # Encode URl in the format used by Lemonldap::NG::Portal for redirections. sub encodeUrl { - my ( $class, $url ) = @_; + my ( $class, $url ) = splice @_; my $u = $url; if ( $url !~ m#^https?://# ) { my $portString = $port || $apacheRequest->get_server_port(); @@ -857,7 +857,7 @@ sub encodeUrl { # @param $arg optionnal GET parameters # @return Apache2::Const::REDIRECT sub goToPortal { - my ( $class, $url, $arg ) = @_; + my ( $class, $url, $arg ) = splice @_; $class->lmLog( "Redirect " . $apacheRequest->connection->remote_ip @@ -896,7 +896,7 @@ sub fetchId { # @return Apache2::Const value (OK, FORBIDDEN, REDIRECT or SERVER_ERROR) sub run ($$) { my $class; - ( $class, $apacheRequest ) = @_; + ( $class, $apacheRequest ) = splice @_; return DECLINED unless ( $apacheRequest->is_initial_req ); my $args = $apacheRequest->args; @@ -1038,7 +1038,7 @@ sub localUnlog { # @return Apache2::Const value returned by goToPortal() sub unlog ($$) { my $class; - ( $class, $apacheRequest ) = @_; + ( $class, $apacheRequest ) = splice @_; $class->localUnlog; $class->updateStatus( $apacheRequest->connection->remote_ip, $apacheRequest->uri, 'LOGOUT' ); @@ -1085,7 +1085,7 @@ sub redirectFilter { # @param $r Current request # @return Apache2::Const::OK sub status($$) { - my ( $class, $r ) = @_; + my ( $class, $r ) = splice @_; $class->lmLog( "$class: request for status", 'debug' ); unless ( $statusPipe and $statusOut ) { $class->lmLog( "$class: status page can not be displayed", 'error' ); diff --git a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Status.pm b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Status.pm index 9c45b908b..df4a60c00 100644 --- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Status.pm +++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Status.pm @@ -242,7 +242,7 @@ sub timeUp { # @param $cat Category to display # @param $max Number of lines to display sub topByCat { - my ( $cat, $max ) = @_; + my ( $cat, $max ) = splice @_; my $i = 0; print "
\n";
     foreach (
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 60ca82e4f..9d026271b 100644
--- a/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Vhost.pm
+++ b/modules/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Vhost.pm
@@ -24,7 +24,7 @@ our $VERSION = '0.55';
 # virtual host
 # @param $args reference to the configuration hash
 sub locationRulesInit {
-    my ( $class, $args ) = @_;
+    my ( $class, $args ) = splice @_;
     foreach my $vhost ( keys %{ $args->{locationRules} } ) {
         $locationCount->{$vhost} = 0;
         foreach ( sort keys %{ $args->{locationRules}->{$vhost} } ) {
@@ -53,7 +53,7 @@ sub locationRulesInit {
 # headers into the HTTP request.
 # @param $args reference to the configuration hash
 sub forgeHeadersInit {
-    my ( $class, $args ) = @_;
+    my ( $class, $args ) = splice @_;
 
     # Creation of the subroutine who will generate headers
     foreach my $vhost ( keys %{ $args->{exportedHeaders} } ) {
@@ -98,7 +98,7 @@ sub sendHeaders {
 # Grant or refuse client using compiled regexp and functions
 # @return True if the user is granted to access to the current URL
 sub grant {
-    my ( $class, $uri ) = @_;
+    my ( $class, $uri ) = splice @_;
     my $vhost = $apacheRequest->hostname;
     for ( my $i = 0 ; $i < $locationCount->{$vhost} ; $i++ ) {
         if ( $uri =~ $locationRegexp->{$vhost}->[$i] ) {
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 73ec22e9b..7af01de41 100644
--- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm
+++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Menu.pm
@@ -142,8 +142,7 @@ sub new {
 # @param $modulename string
 # @return boolean
 sub displayModule {
-    my $self = shift;
-    my ($modulename) = @_;
+    my ( $self, $modulename ) = splice @_;
 
     # Manage "0" and "1" rules
     return 1 if ( $self->{modules}->{$modulename} eq "1" );
@@ -237,8 +236,7 @@ sub appslistDescription {
 # @param catlevel Category level
 # @return HTML string
 sub _displayConfCategory {
-    my $self = shift;
-    my ( $catname, $cathash, $catlevel ) = @_;
+    my ( $self, $catname, $cathash, $catlevel ) = splice @_;
     my $html;
     my $key;
 
@@ -289,7 +287,7 @@ sub _displayConfCategory {
 # @param $arg string to modify
 # @return string modified
 sub _userParam {
-    my ( $self, $arg ) = @_;
+    my ( $self, $arg ) = splice @_;
     $arg =~ s/\$([\w]+)/$self->{portalObject}->{sessionInfo}->{$1}/g;
     return $arg;
 }
@@ -385,8 +383,7 @@ sub _displayConfDescription {
 # @param $apphash Menu elements
 # @return filtered hash
 sub _filter {
-    my $self = shift;
-    my ($apphash) = @_;
+    my ( $self, $apphash ) = splice @_;
     my $filteredHash;
     my $key;
 
@@ -501,8 +498,7 @@ sub _isCategoryEmpty {
 # @param $uri URL string
 # @return True if granted
 sub _grant {
-    my $self = shift;
-    my ($uri) = @_;
+    my ( $self, $uri ) = splice @_;
     $uri =~ m{(\w+)://([^/:]+)(:\d+)?(/.*)?$} or return 0;
     my ( $protocol, $vhost, $port );
     ( $protocol, $vhost, $port, $path ) = ( $1, $2, $3, $4 );
@@ -562,8 +558,7 @@ sub _compileRules {
 # @param $cond boolean expression
 # @return Compiled routine
 sub _conditionSub {
-    my $self = shift;
-    my ($cond) = @_;
+    my ( $self, $cond ) = splice @_;
     return sub { 1 }
       if ( $cond =~ /^accept$/i );
     return sub { 0 }
diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Notification.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Notification.pm
index e98d79d9d..ac1a6eb2a 100644
--- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Notification.pm
+++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Notification.pm
@@ -61,7 +61,7 @@ BEGIN {
 # @param $storage same syntax as Lemonldap::NG::Common::Conf object
 # @return Lemonldap::NG::Portal::Notification object
 sub new {
-    my ( $class, $storage ) = @_;
+    my ( $class, $storage ) = splice @_;
     my $self = bless {}, $class;
     (%$self) = (%$storage);
     unless ( $self->{p} ) {
@@ -87,7 +87,7 @@ sub new {
 # @param $mess Text to log
 # @param $level Level (debug|info|notice|error)
 sub lmLog {
-    my ( $self, $mess, $level ) = @_;
+    my ( $self, $mess, $level ) = splice @_;
     $self->{p}->lmLog( "[Notification] $mess", $level );
 }
 
@@ -97,7 +97,7 @@ sub lmLog {
 # @param $portal Lemonldap::NG::Portal object that call
 # @return HTML fragment containing form content
 sub getNotification {
-    my ( $self, $portal ) = @_;
+    my ( $self, $portal ) = splice @_;
     my ( @notifs, $form );
 
     # Get user datas,
@@ -157,7 +157,7 @@ sub getNotification {
 # @param $portal Lemonldap::NG::Portal object that call
 # @return true if all checkboxes have been checked
 sub checkNotification {
-    my ( $self, $portal ) = @_;
+    my ( $self, $portal ) = splice @_, 0, 2;
     my ( $refs, $checks );
 
     # First, rebuild environment (cookies,...)
@@ -260,7 +260,7 @@ sub checkNotification {
 # @param $xml XML string containing notification
 # @return number of notifications done
 sub newNotification {
-    my ( $self, $xml ) = @_;
+    my ( $self, $xml ) = splice @_;
     eval { $xml = $parser->parse_string($xml); };
     if ($@) {
         $self->lmLog( "Unable to read XML file : $@", 'error' );
diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBLDAP.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBLDAP.pm
index 7c8e6352a..03e4fec9b 100644
--- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBLDAP.pm
+++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/UserDBLDAP.pm
@@ -90,7 +90,7 @@ sub search {
 # '; ' separator
 # @return Lemonldap::NG::Portal constant
 sub setSessionInfo {
-    my ($self) = @_;
+    my $self = shift;
     $self->{sessionInfo}->{dn} = $self->{dn};
     unless ( $self->{exportedVars} ) {
         foreach (qw(uid cn mail)) {
@@ -121,7 +121,7 @@ sub setSessionInfo {
 # Load all groups in $groups.
 # @return Lemonldap::NG::Portal constant
 sub setGroups {
-    my ($self) = @_;
+    my $self = shift;
     my $groups = $self->{sessionInfo}->{groups};
 
     $self->{ldapGroupObjectClass}         ||= "groupOfNames";
diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_LDAP.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_LDAP.pm
index 92762f9d2..1c28f2bec 100644
--- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_LDAP.pm
+++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_LDAP.pm
@@ -74,7 +74,7 @@ sub new {
 sub bind {
     my $self = shift;
     my $mesg;
-    my ( $dn, %args ) = @_;
+    my ( $dn, %args ) = splice @_;
     unless ($dn) {
         $dn = $self->{portal}->{managerDn};
         $args{password} = $self->{portal}->{managerPassword};
@@ -186,9 +186,7 @@ sub userBind {
 # @param $oldpassword Current password
 # @return Lemonldap::NG::Portal constant
 sub userModifyPassword {
-
-    my $self = shift;
-    my ( $dn, $newpassword, $confirmpassword, $oldpassword ) = @_;
+    my ( $self, $dn, $newpassword, $confirmpassword, $oldpassword ) = splice @_;
     my $err;
     my $mesg;
 
diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Multi.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Multi.pm
index 554147b03..2e9c68b8e 100644
--- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Multi.pm
+++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_Multi.pm
@@ -19,7 +19,7 @@ our $VERSION = '0.11';
 # @param $portal Lemonldap::NG::Portal::Simple object
 # @return new Lemonldap::NG::Portal::_Multi object
 sub new {
-    my ( $class, $portal ) = @_;
+    my ( $class, $portal ) = splice @_;
     my $self = bless { p => $portal, res => PE_NOSCHEME }, $class;
     my @stack = ( $portal->{authentication}, $portal->{userDB} );
     for ( my $i = 0 ; $i < 2 ; $i++ ) {
@@ -50,7 +50,7 @@ sub new {
 # @param type 0 for authentication, 1 for userDB
 # @return Lemonldap::NG::Portal error code returned by method $sub
 sub try {
-    my ( $self, $sub, $type ) = @_;
+    my ( $self, $sub, $type ) = splice @_;
     my $res;
     my $s   = $self->{stack}->[$type]->[0]->{m} . "::$sub";
     my $old = $self->{stack}->[$type]->[0]->{n};
@@ -91,7 +91,7 @@ sub try {
 # @param type 0 for authentication, 1 for userDB
 # return true if an other module is available
 sub next {
-    my ( $self, $type ) = @_;
+    my ( $self, $type ) = splice @_;
     if ( $self->{stack}->[$type]->[0]->{n} eq
             $self->{stack}->[ 1 - $type ]->[0]->{n}
         and $self->{stack}->[ 1 - $type ]->[1] )
@@ -112,7 +112,7 @@ sub next {
 # @param $sub name of the method who has failed
 # @return Lemonldap::NG::Portal error code
 sub replay {
-    my ( $self, $sub ) = @_;
+    my ( $self, $sub ) = splice @_;
     my @subs = ();
     foreach (
         qw(authInit extractFormInfo setAuthSessionInfo userDBInit getUser
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 b1b5ad5db..d8f11ca2c 100644
--- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SOAP.pm
+++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_SOAP.pm
@@ -112,7 +112,7 @@ _RETURN $getAttributesResponse Response
 # @param $id Cookie value
 # @return SOAP::Data sequence
 sub getAttributes {
-    my ( $self, $id ) = @_;
+    my ( $self, $id ) = splice @_;
     die 'id is required' unless ($id);
     my $h = $self->getApacheSession( $id, 1 );
     my @tmp = ();
@@ -140,7 +140,7 @@ sub getAttributes {
 # @param $args datas to store
 # @return true if succeed
 sub setAttributes {
-    my ( $self, $id, $args ) = @_;
+    my ( $self, $id, $args ) = splice @_;
     die 'id is required' unless ($id);
     my $h = $self->getApacheSession($id);
     unless ($h) {
@@ -178,7 +178,7 @@ sub lastCfg {
 # Store a new session.
 # @return Session datas
 sub newSession {
-    my ( $self, $args ) = @_;
+    my ( $self, $args ) = splice @_;
     my $h = $self->getApacheSession();
     if ($@) {
         $self->lmLog( "Unable to create session", 'error' );
@@ -196,7 +196,7 @@ sub newSession {
 ## @method SOAP::Data deleteSession()
 # Deletes an existing session
 sub deleteSession {
-    my ( $self, $id ) = @_;
+    my ( $self, $id ) = splice @_;
     die('id parameter is required') unless ($id);
     my $h = $self->getApacheSession($id);
     return 0 if ($@);
@@ -353,9 +353,7 @@ sub _buildSoapHash {
 # @param $cond boolean expression
 # @return Compiled routine
 sub _conditionSub {
-    my $self = shift;
-    my $id = shift;
-    my ($cond) = @_;
+    my ( $self, $id, $cond ) = splice @_;
     my $h = $self->getApacheSession( $id, 1 );
     return sub { 1 }
       if ( $cond =~ /^accept$/i );
diff --git a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_i18n.pm b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_i18n.pm
index 2227e7700..eb98aa8b3 100644
--- a/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_i18n.pm
+++ b/modules/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/_i18n.pm
@@ -15,7 +15,7 @@ our $VERSION = '0.5';
 # @param $lang Language or Accepted-Language HTTP header string
 # @return Error string for the $code in the $lang language
 sub error {
-    my ( $error, $lang ) = @_;
+    my ( $error, $lang ) = splice @_;
     $lang = lc($lang);
     $lang =~ s/-/_/g;
     $error = 0 if ( $error < 0 );
@@ -37,7 +37,7 @@ sub error {
 # @param $lang Language or Accepted-Language HTTP header string
 # @return Error string for the $code in the $lang language
 sub msg {
-    my ( $msg, $lang ) = @_;
+    my ( $msg, $lang ) = splice @_;
     $lang = lc($lang);
     $lang =~ s/-/_/g;
     $msg = 0 if ( $msg < 0 );
diff --git a/modules/lemonldap-ng-portal/t/60-Lemonldap-NG-Portal-IssuerDBSAML.t b/modules/lemonldap-ng-portal/t/60-Lemonldap-NG-Portal-IssuerDBSAML.t
index 354be86f2..b946145bf 100644
--- a/modules/lemonldap-ng-portal/t/60-Lemonldap-NG-Portal-IssuerDBSAML.t
+++ b/modules/lemonldap-ng-portal/t/60-Lemonldap-NG-Portal-IssuerDBSAML.t
@@ -1,15 +1,7 @@
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-SAMLIssuer.t'
-
-#########################
-
-# change 'tests => 1' to 'tests => last_test_to_print';
-
 use Test::More tests => 1;
-BEGIN { use_ok('Lemonldap::NG::Portal::IssuerDBSAML') };
-
-#########################
-
-# Insert your test code below, the Test::More module is use()ed here so read
-# its man page ( perldoc Test::More ) for help writing this test script.
 
+SKIP: {
+    eval "use Lasso;";
+    skip "Lasso is not installed, can't test SAML features", 1 if ($@);
+    use_ok('Lemonldap::NG::Portal::IssuerDBSAML');
+}
diff --git a/modules/lemonldap-ng-portal/t/63-Lemonldap-NG-Portal-AuthSAML.t b/modules/lemonldap-ng-portal/t/63-Lemonldap-NG-Portal-AuthSAML.t
index 029250cb3..650bb3755 100644
--- a/modules/lemonldap-ng-portal/t/63-Lemonldap-NG-Portal-AuthSAML.t
+++ b/modules/lemonldap-ng-portal/t/63-Lemonldap-NG-Portal-AuthSAML.t
@@ -1,15 +1,7 @@
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-AuthSAML.t'
-
-#########################
-
-# change 'tests => 1' to 'tests => last_test_to_print';
-
 use Test::More tests => 1;
-BEGIN { use_ok('Lemonldap::NG::Portal::AuthSAML') };
-
-#########################
-
-# Insert your test code below, the Test::More module is use()ed here so read
-# its man page ( perldoc Test::More ) for help writing this test script.
 
+SKIP: {
+    eval "use Lasso;";
+    skip "Lasso is not installed, can't test SAML features", 1 if ($@);
+    use_ok('Lemonldap::NG::Portal::AuthSAML');
+}
diff --git a/modules/lemonldap-ng-portal/t/64-Lemonldap-NG-Portal-UserDBSAML.t b/modules/lemonldap-ng-portal/t/64-Lemonldap-NG-Portal-UserDBSAML.t
index 622189fec..82818e279 100644
--- a/modules/lemonldap-ng-portal/t/64-Lemonldap-NG-Portal-UserDBSAML.t
+++ b/modules/lemonldap-ng-portal/t/64-Lemonldap-NG-Portal-UserDBSAML.t
@@ -1,15 +1,7 @@
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl Lemonldap-NG-Portal-UserDBSAML.t'
-
-#########################
-
-# change 'tests => 1' to 'tests => last_test_to_print';
-
 use Test::More tests => 1;
-BEGIN { use_ok('Lemonldap::NG::Portal::UserDBSAML') };
-
-#########################
-
-# Insert your test code below, the Test::More module is use()ed here so read
-# its man page ( perldoc Test::More ) for help writing this test script.
 
+SKIP: {
+    eval "use Lasso;";
+    skip "Lasso is not installed, can't test SAML features", 1 if ($@);
+    use_ok('Lemonldap::NG::Portal::UserDBSAML');
+}