Просто небольшое обновление к превосходному ответу David Gil del Rosal
, которое обеспечивает идеальное решение для первоначально поставленной задачи.
Так как я не Perl
парень, я сталкиваюсь с рядом проблем, пытаясь реализовать объясненное в ответе решение.
Вот список того, что я сделал, чтобы это заработало.
Мои настройки Ubuntu 16.04
, Apache 2.4.18
и Perl 5.22
- Установить
libapache2-mod-perl2
- Создать файл для размещения пользовательского обработчика
Модуль Apache2 mod_perl (libapache2-mod-perl2
) ожидает найти пользовательский код в одном из следующих мест
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.22.1
/usr/local/share/perl/5.22.1
/usr/lib/x86_64-linux-gnu/perl5/5.22
/usr/share/perl5
/usr/lib/x86_64-linux-gnu/perl/5.22
/usr/share/perl/5.22
/usr/local/lib/site_perl
/etc/apache2
Я выбрал /etc/perl
, это может быть не лучшее место, но именно это я и использовал.
Используется в примере пакета MyApache2::ConvertUsrToLowercase
и выбранное мной местоположение переведено в /etc/perl/MyApache2/ConvertUsrToLowercase.pm
файл
- Конфигурация обработчика
В моем случае это было /etc/apache2/mods-available/dav_svn.conf
<Location /xyz>
DAV svn
...
AuthzForceUsernameCase Lower
PerlHeaderParserHandler MyApache2::ConvertUsrToLowercase
...
</Location>
- Изменения в коде обработчика
Из-за некоторых ошибок компиляции пришлось добавить пару пакетов
use APR::Table;
use Apache2::Access;
Финальный код
# /etc/perl/MyApache2/ConvertUsrToLowercase.pm
package MyApache2::ConvertUsrToLowercase;
use strict;
use APR::Base64;
use APR::Table;
use Apache2::RequestRec;
use Apache2::Access;
use Apache2::Const -compile => qw(OK DECLINED);
sub handler {
my $request = shift;
my $header = "Authorization";
my ($res, $passwd) = $request->get_basic_auth_pw; # get passwd
my $user = lc $request->user; # get lowercase login
my $auth_header = APR::Base64::encode("$user:$passwd");
# rewrite header & return OK
$request->headers_in->{'Authorization'} = "Basic $auth_header";
return Apache2::Const::OK;
}
1;
- Устранение всех неполадок было выполнено путем просмотра файла журнала ошибок apache2
/var/log/apache2/error.log