# Allow us to skip prompt and (and for) tests use Getopt::Std qw(getopts); use vars qw($opt_n); getopts('n'); #unless (getopts("n")) { # die "Usage: $0 [-n]\n"; #} my($errors, $warnings); my $necessary_modules = { # 'Apache' => 'The Apache Perl API', 'Apache::Session 1.54' => 'A persistence framework for session data' }; my $optional_modules = { 'Apache::Request 0.33' => 'Apache API to manage HTTP cookies (CGI::Cookie will be used instead)', 'CGI::Cookie' => 'CGI library to manage HTTP cookies (used only if Apache::Request isn\'t installed)' }; print "Checking for REQUIRED modules...\n"; # Check mod_perl version my ($mp1,$mp2) = which_mod_perl(); print " --> mod_perl... "; if ( ! $mp1 && ! $mp2 ) { $errors++; print "NOT FOUND\n"; print " !!! Please install either mod_perl (version 1 or 2) in order to use Apache::SessionMananger!\n"; } else { print 'found (version 1: ' . (($mp1) ? $mp1 : 'none') . ', version 2: ' . (($mp2) ? $mp2 : 'none') . ")\n"; } for (sort keys %$necessary_modules) { eval 'use ' . $_ ; my $module_display = $_; $module_display =~ s/( [\d\.]+)$/ \>\=$1/isg; print " --> $module_display... "; if ($@) { $errors++; print "NOT FOUND\n"; print " !!! you need module: $module_display\n"; print " CAUSE: $necessary_modules->{$_}\n"; } else { print "found.\n"; } } print "\nChecking for OPTIONAL modules...\n"; for (sort keys %$optional_modules) { my $data = $optional_modules->{$_}; my $message = ref($data) ? $data->{message} : $data; # if there is a test for this module run it and if returns false # skip this module's message, first so UNIX users don't see # message about, ad ex., Win32::OLE if (ref($data) && $data->{test} && ! eval($data->{test})) { next; } { local $SIG{__DIE__} = sub { die(@_); }; eval 'use ' . $_ ; my $module_display = $_; $module_display =~ s/( [\d\.]+)$/ \>\=$1/isg; print " --> $module_display... "; if ($@) { $warnings++; print "NOT FOUND\n"; print " ??? you may need module: $module_display\n"; print " CAUSE: $optional_modules->{$_}\n"; # print " ERROR: $@\n"; } else { print "found.\n"; } } } my $CPAN = < install Apache::Session and cpan will do this for you. For more information, please view the CPAN docs with: % perldoc CPAN -=-= CPAN HELP =-=- CPAN if ($errors) { print "\n***\n*** Required modules not founded!\n***\n"; print $CPAN,"\n"; } elsif ($warnings) { print $CPAN; } else { print "\nRequired modules founded!\n"; } # Check Apache / mod_perl test my ($apache_Test,$apache_testold) = which_test_suite($mp1,$mp2); # Skip test with -n command line option unless ( $opt_n ) { # Tests under Apache::Test are coming soon... :-) if ( $mp2 || $apache_Test ) { print "\n*** Sorry, Apache::Test has been detected, but there aren't (not yet) tests under this suite."; } # Run tests under Apache::testold if ( $mp1 ) { if ( ! $apache_testold ) { print "\n*** Sorry, the mod_perl 1 version ($mp1) is too old to run Apache::testold tests.\n*** Please install a version >= 1.27 in order to run tests."; } else { print "\n*** Configuring test under Apache::testold suite...\n"; print "*** Note that Apache::testold suite can run only under Apache 1.x/mod_perl 1.x\n"; # Currently, there is only Apache::testold tests :-(... require Apache::testold; my %params = Apache::testold->get_test_params(); Apache::testold->write_httpd_conf( %params, include => join('', ) ); *MY::test = sub { Apache::testold->MM_test(%params) }; } } print "\n\n"; } else { print "\n*** You've launched Makefile.PL with '-n' option. Tests will be skipped.\n\n"; } use ExtUtils::MakeMaker; # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. WriteMakefile( 'NAME' => 'Apache::SessionManager', 'AUTHOR' => 'Enrico Sorcinelli ', 'ABSTRACT' => 'Apache mod_perl module to manage HTTP sessions', 'VERSION_FROM' => 'SessionManager.pm', # finds $VERSION 'PREREQ_PM' => { 'mod_perl' => 1.24, 'Apache::Session' => 1.54, #"Apache::Request" => "0.33", }, # e.g., Module::Name => 1.1 'clean' => {FILES => 't/httpd.conf t/error_log t/httpd'}, ); sub which_mod_perl { my ($mp1,$mp2); # First, we check mod_perl version in standard dir $mp1 = require_mod_perl(); # Check if mod_perl installed version is mp1 or mp2 generation if ( $mp1 >= 1.99 ) { $mp2 = $mp1; $mp1 = 0; } # Check mp2 under Apache2 dir else { $mp2 = require_mod_perl(2); } return ($mp1,$mp2); } sub require_mod_perl { my $mp = shift; # Check mod_perl 2 under Apache2 dir if ( $mp == 2 ) { delete $INC{'mod_perl.pm'}; eval { require Apache2 }; return 0 if ($@); } eval { require mod_perl }; unless ($@) { return $mod_perl::VERSION; } return 0; } sub which_test_suite { my ($mp1,$mp2) = @_; # default: no mod_perl at all my ($apache_Test, $apache_testold) = (0,0); if ( $mp1 ) { $apache_testold = ($mp1 >= 1.28) ? 1 : 0; eval { require Apache::Test }; $apache_Test = 1 unless ($@); } if ( $mp2 ) { $apache_Test = 1; } return ($apache_Test, $apache_testold); } __DATA__ # Enable perl-status console PerlModule Apache::Status SetHandler perl-script PerlHandler Apache::Status # Apache::SessionManager configuration section PerlModule Apache::SessionManager PerlTransHandler Apache::SessionManager PerlSetVar SessionManagerTracking On PerlSetVar SessionManagerDebug 5 # These documents require cookies session SetHandler perl-script PerlHandler PrintEnv PerlSetVar SessionManagerExpire 0 PerlSetVar SessionManagerStore File PerlSetVar SessionManagerLock Null PerlSetVar SessionManagerCookieArgs "Path => /session, Secure => 0, Extras => some_value" PerlSetVar SessionManagerStoreArgs "Directory => /tmp" PerlSetVar SessionManagerSetEnv On # These documents require cookies session (OO Apache::SessionManager interface) SetHandler perl-script PerlHandler PrintEnvOO PerlSetVar SessionManagerStore File PerlSetVar SessionManagerLock Null PerlSetVar SessionManagerCookieArgs "Path => /session-OO, Secure => 0, Extras => some_value" PerlSetVar SessionManagerStoreArgs "Directory => /tmp" PerlSetVar SessionManagerSetEnv On # These documents require cookies session (OO Apache::SessionManager interface) # with header exclusion list SetHandler perl-script PerlHandler PrintEnvOO PerlSetVar SessionManagerStore File PerlSetVar SessionManagerLock Null PerlSetVar SessionManagerCookieArgs "Path => /session-header_exclude, Secure => 0" PerlSetVar SessionManagerStoreArgs "Directory => /tmp" PerlSetVar SessionManagerSetEnv On PerlSetVar SessionManagerHeaderExclude "User-Agent = > Opera\s*\d" PerlAddVar SessionManagerHeaderExclude "User-Agent => lynx" PerlAddVar SessionManagerHeaderExclude "Referer => ^http://localhost" # These documents require cookies session (OO Apache::SessionManager interface) # with ip exclusion list SetHandler perl-script PerlHandler PrintEnvOO PerlSetVar SessionManagerStore File PerlSetVar SessionManagerLock Null PerlSetVar SessionManagerCookieArgs "Path => /session-ip_exclude, Secure => 0" PerlSetVar SessionManagerStoreArgs "Directory => /tmp" PerlSetVar SessionManagerSetEnv On PerlSetVar SessionManagerIPExclude "192.168.0.1 127.0.0.0/8" # These documents require cookies session w/authentication SetHandler perl-script PerlHandler PrintEnv PerlSetVar SessionManagerStore File PerlSetVar SessionManagerLock Null PerlSetVar SessionManagerCookieArgs "Path => /session-auth, Secure => 0" PerlSetVar SessionManagerStoreArgs "Directory => /tmp" PerlSetVar SessionManagerSetEnv On AuthName "Reserved Club" AuthType Basic require valid-user PerlAuthenHandler MyAuth PerlSetVar MyAuthLogin /protected/login.html # These documents URI tracking session SetHandler perl-script PerlHandler PrintEnv PerlSetVar SessionManagerExpire none PerlSetVar SessionManagerURITracking On PerlSetVar SessionManagerStore File PerlSetVar SessionManagerLock Null PerlSetVar SessionManagerStoreArgs "Directory => /tmp" PerlSetVar SessionManagerSetEnv On # These documents require cookies session + mod_backhand cookie load-balancing SetHandler perl-script PerlHandler PrintEnv PerlSetVar SessionManagerStore File PerlSetVar SessionManagerLock Null PerlSetVar SessionManagerCookieArgs "Path => /session-bh" PerlSetVar SessionManagerStoreArgs "Directory => /tmp" PerlSetVar SessionManagerEnableModBackhand On PerlSetVar SessionManagerSetEnv On # These documents don't require cookies session SetHandler perl-script PerlHandler PrintEnv PerlSetVar SessionManagerTracking Off # These documents require MySQL as backend datastore for cookies session (OO Apache::SessionManager interface) # Not used in live tests (t/httpd -f `pwd`/t/httpd.conf -DDBI) PerlModule Apache::DBI SetHandler perl-script PerlHandler PrintEnvOO PerlSetVar SessionManagerName SESSION-MySQL PerlSetVar SessionManagerStore MySQL PerlSetVar SessionManagerStoreArgs "DataSource => dbi:mysql:sessions, \ UserName => sesman, \ Password => sesman" PerlSetVar SessionManagerCookieArgs "Path => /session-OO-DBI" PerlSetVar SessionManagerSetEnv On