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 startup.pl, 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. Cheers, Andrew. -- Andrew Green Article Seven Limited http://www.article7.co.uk/ <http://www.article7.co.uk/> Article Seven Limited is a registered company in England and Wales. Registered number: 5703656. Registered office: 10 Hamilton Road, Sidcup, Kent, DA15 7HB.