diff --git a/lemonldap-ng-common/lib/Lemonldap/NG/Common/CGI.pm b/lemonldap-ng-common/lib/Lemonldap/NG/Common/CGI.pm
index 4d0481a52..8446036f8 100644
--- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/CGI.pm
+++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/CGI.pm
@@ -18,8 +18,8 @@ use Net::CIDR::Lite;
#parameter syslog Indicates syslog facility for logging user actions
our $VERSION = '1.2.3';
-
-use base qw(CGI);
+our $_SUPER;
+our @ISA;
BEGIN {
if ( exists $ENV{MOD_PERL} ) {
@@ -33,6 +33,18 @@ BEGIN {
else {
eval 'use constant MP => 0;';
}
+ $_SUPER = 'CGI';
+ @ISA = ('CGI');
+}
+
+sub import {
+ my $pkg = shift;
+ if ( $pkg eq __PACKAGE__ and @_ and $_[0] eq "fast" ) {
+ eval 'use CGI::Fast';
+ die($@) if ($@);
+ unshift @ISA, 'CGI::Fast';
+ $_SUPER = 'CGI::Fast';
+ }
}
## @cmethod Lemonldap::NG::Common::CGI new(@p)
@@ -42,7 +54,7 @@ BEGIN {
# @return new Lemonldap::NG::Common::CGI object
sub new {
my $class = shift;
- my $self = CGI->new(@_);
+ my $self = $_SUPER->new(@_) or return undef;
$self->{_prm} = {};
my @tmp = $self->param();
foreach (@tmp) {
@@ -209,7 +221,7 @@ sub header_public {
$ref = timegm( $6, $5, $4, $1, $m, $3 );
if ( $ref == $date ) {
print $self->SUPER::header( -status => '304 Not Modified', @_ );
- exit;
+ $self->quit();
}
}
}
@@ -260,7 +272,7 @@ a {
print
'
LemonLDAP::NG';
print STDERR ( ref($self) || $self ) . " error: $t1, $t2\n";
- exit;
+ $self->quit();
}
##@method private void startSyslog()
@@ -404,7 +416,13 @@ sub session_template {
## @method private void quit()
# Simply exit.
sub quit {
- exit;
+ my $self = shift;
+ if ( $_SUPER eq 'CGI::Fast' ) {
+ next LMAUTH;
+ }
+ else {
+ exit;
+ }
}
##@method string ipAddr()
diff --git a/lemonldap-ng-portal/MANIFEST b/lemonldap-ng-portal/MANIFEST
index fb0c10dcb..46fcb04a8 100644
--- a/lemonldap-ng-portal/MANIFEST
+++ b/lemonldap-ng-portal/MANIFEST
@@ -1,6 +1,7 @@
Changes
example/cas.pl
example/cdc.pl
+example/index.fcgi
example/index.pl
example/index_simple.pl
example/index_skin.pl
diff --git a/lemonldap-ng-portal/example/index.fcgi b/lemonldap-ng-portal/example/index.fcgi
new file mode 100755
index 000000000..e41c49264
--- /dev/null
+++ b/lemonldap-ng-portal/example/index.fcgi
@@ -0,0 +1,66 @@
+#!/usr/bin/perl
+
+use Lemonldap::NG::Common::CGI qw(fast);
+use Lemonldap::NG::Portal::SharedConf;
+use HTML::Template;
+use strict;
+
+LMAUTH:
+while (
+ my $portal = Lemonldap::NG::Portal::SharedConf->new(
+ {
+
+ # ACCESS TO CONFIGURATION
+ # By default, Lemonldap::NG uses the default lemonldap-ng.ini file to
+ # know where to find its configuration
+ # (generaly /etc/lemonldap-ng/lemonldap-ng.ini)
+ # You can specify by yourself this file :
+ #configStorage => { confFile => '/path/to/my/file' },
+ # or set explicitely parameters :
+ #configStorage => {
+ # type => 'File',
+ # dirName => '/usr/local/lemonldap-ng/data//conf'
+ #},
+ # Note that YOU HAVE TO SET configStorage here if you've declared this
+ # portal as SOAP configuration server in the manager
+
+ # OTHERS
+ # You can also overload any parameter issued from manager
+ # configuration. Example:
+ #globalStorage => 'Apache::Session::File',
+ #globalStorageOptions => {
+ # 'Directory' => '/var/lib/lemonldap-ng/sessions/',
+ # 'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock/',
+ #},
+ # Note that YOU HAVE TO SET globalStorage here if you've declared this
+ # portal as SOAP session server in the manager
+ }
+ )
+ )
+{
+
+ # Get skin and template parameters
+ my ( $templateName, %templateParams ) = $portal->display();
+
+ # HTML template creation
+ my $template = HTML::Template->new(
+ filename => "$templateName",
+ die_on_bad_params => 0,
+ cache => 0,
+ global_vars => 1,
+ loop_context_vars => 1,
+ filter => [
+ sub { $portal->translate_template(@_) },
+ sub { $portal->session_template(@_) }
+ ],
+ );
+
+ # Give parameters to the template
+ while ( my ( $k, $v ) = each %templateParams ) {
+ $template->param( $k, $v );
+ }
+
+ # Display it
+ print $portal->header('text/html; charset=utf-8');
+ print $template->output;
+}
diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm
index 5b42d180a..e8ffe6982 100644
--- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm
+++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Simple.pm
@@ -233,7 +233,7 @@ sub new {
binmode( STDOUT, ":utf8" );
my $class = shift;
return $class if ( ref($class) );
- my $self = $class->SUPER::new();
+ my $self = $class->SUPER::new() or return undef;
# Reinit _url
$self->{_url} = '';