perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Green <>
Subject Re: Upgrading a mod_perl application from Apache 2.2 to Apache 2.4
Date Thu, 06 Dec 2018 15:25:18 GMT
Hi all,

Huge thanks to everyone for your replies on this.  I’ve now been able to work through everything,
and I thought I’d post a quick update with some additional notes in case there’s anyone
else in the same boat searching the archives in the future!

1. I was able to use the following as a way of determining which version of Apache is in use
at runtime:

my $server_version = Apache2::ServerUtil::get_server_banner();
my $is_old_apache = ($server_version =~ /Apache\/2\.2/) ? 1 : 0;

2. My app sets up authen and authz handlers dynamically, from a trans handler. André was
right, this was by far the biggest pain point!

My before code looked like this:

$r->push_handlers(PerlMapToStorageHandler => sub {
   $r->add_config(['Require valid-user']);
   $r->add_config(['AuthType cookie']);

$r->set_handlers(PerlAuthenHandler => [MyApp::Authen]);
$r->set_handlers(PerlAuthzHandler => [MyApp::Authz]);

As far as I can tell, I have to pre-declare the new Authz provider in my server config:

PerlAddAuthzProvider myapp MyApp::Authz

I didn’t find a way of doing that bit dynamically at runtime.

But I can still conditionally trigger the provider for individual requests from my trans handler,
like this:

$r->push_handlers(PerlMapToStorageHandler => sub {
   $r->add_config(['Require myapp']);

$r->set_handlers(PerlAuthenHandler => [MyApp::Authen]);

3. Combining #1 and #2 meant I’m able to have the same trans handler run under both Apache
2.2 and 2.4.  I was also able to get my authz handler to run under both by:

a. Having the call to Apache2::Compat -compile happen in the server, and not in
my module.

b. Wrapping the return value like this:

sub authz_granted {

   my $self = shift;

   # So this compiles under old Apache
   no strict 'subs';

   if ($self->is_old_apache) {
      return Apache2::Const::OK;
   } else {
      return Apache2::Const::AUTHZ_GRANTED;


Thanks again to you all for your help.


Andrew Green
Article Seven Limited <>

Article Seven Limited is a registered company in England and Wales.  Registered number: 5703656.
Registered office: 10 Hamilton Road, Sidcup, Kent, DA15 7HB.

View raw message