Add script to delete session (#1697)

This commit is contained in:
Xavier Guimard 2019-04-03 09:51:32 +02:00
parent e4bc7c55d6
commit 0ca4d1a724
3 changed files with 132 additions and 0 deletions

View File

@ -599,6 +599,7 @@ install_bin: install_conf_dir
@cp -f\
${SRCHANDLERDIR}/eg/scripts/purgeLocalCache \
${SRCPORTALDIR}/site/cron/purgeCentralCache \
${SRCPORTALDIR}/scripts/llngDeleteSession \
${SRCCOMMONDIR}/scripts/convertConfig \
${SRCCOMMONDIR}/scripts/lmMigrateConfFiles2ini \
${SRCCOMMONDIR}/scripts/rotateOidcKeys \

View File

@ -143,6 +143,7 @@ MANIFEST This list of files
META.json
META.yml
README
scripts/llngDeleteSession
site/coffee/2fregistration.coffee
site/coffee/autoRenew.coffee
site/coffee/confirm.coffee

View File

@ -0,0 +1,130 @@
#!/usr/bin/perl
#=============================================================================
# Cleaner for LemonLDAP::NG: removes old sessions from Apache::Session
#
# This module is written to be used by cron to clean old sessions from
# Apache::Session. It does not works with Apache::Session::Memcached
#
# This is part of LemonLDAP::NG product, released under GPL
#=============================================================================
use Lemonldap::NG::Common::Conf;
use Lemonldap::NG::Common::Conf::Constants;
use Lemonldap::NG::Common::Apache::Session;
use Lemonldap::NG::Common::Session;
use strict;
use Getopt::Std;
# Options
# -d: debug mode
# -f: force delete of corrupted sessions
our $opt_d;
our $opt_f;
getopts('df');
my $debug = $opt_d;
my $force = $opt_f;
my $nb_purged = 0;
my $nb_error = 0;
unless (@ARGV) {
print STDERR "Usage: $0 <uid>\n";
exit 1;
}
#=============================================================================
# Load configuration
#=============================================================================
my $lmconf = Lemonldap::NG::Common::Conf->new()
or die $Lemonldap::NG::Common::Conf::msg;
my $conf = $lmconf->getConf or die "Unable to get configuration ($!)";
my $localconf = $lmconf->getLocalConf(PORTALSECTION)
or die "Unable to get local configuration ($!)";
if ($localconf) {
$conf->{$_} = $localconf->{$_} foreach ( keys %$localconf );
}
print "Configuration loaded\n" if $debug;
#=============================================================================
# Timeout
#=============================================================================
print "Timeout value: " . $conf->{timeout} . "\n" if $debug;
#=============================================================================
# Apache::Session backends
#=============================================================================
my @backends;
my $module;
# Sessions
if ( defined $conf->{globalStorage} ) {
# Load module
$module = $conf->{globalStorage};
eval "use $module";
die $@ if ($@);
$conf->{globalStorageOptions}->{backend} = $module;
# Add module in managed backends
push @backends, $conf->{globalStorageOptions};
print "Session backend $module will be used\n" if $debug;
}
else {
print STDERR "Unable to find 'globalStorage' configuration key, aborting\n";
exit 1;
}
#=============================================================================
# Load and purge sessions
#=============================================================================
for my $options (@backends) {
next if ( $options->{backend} eq "Apache::Session::Memcached" );
# Get all expired sessions
foreach my $reSession (@ARGV) {
my $sessions =
Lemonldap::NG::Common::Apache::Session->searchOnExpr( $options,
$conf->{whatToTrace}, $reSession );
foreach my $id ( keys %$sessions ) {
my $session = Lemonldap::NG::Common::Session->new(
storageModule => $options->{backend},
storageModuleOptions => $options,
cacheModule => $conf->{localSessionStorage},
cacheModuleOptions => $conf->{localSessionStorageOptions},
id => $id,
);
unless ( $session->data ) {
print "Error while opening session $id\n" if $debug;
print STDERR "Error on session $id\n";
$nb_error++;
next;
}
unless ( $session->remove ) {
print "Error while deleting session $id\n" if $debug;
print STDERR "Error on session $id\n";
$nb_error++;
next;
}
print "Session $id has been purged\n" if $debug;
$nb_purged++;
}
}
}
#=============================================================================
# Exit
#=============================================================================
print "$nb_purged sessions have been purged\n" if $debug;
print STDERR
"$nb_error sessions remaining, try to purge them with force (option -f)\n"
if $nb_error;
my $exit = $nb_error ? 1 : $nb_purged ? 0 : 1;
exit $exit;