LINUX.ORG.RU

Fake-авторизация по IP (Apache)


0

0

Доброго времени суток!

Есть внутренняя сеть, каждому пользователю выдаётся динамический IP, и это соответствие имя-адрес держится в базе данных.

Есть некие WEB-сервисы, которые берут имя пользователя из переменной REMOTE_USER.

Хочется сделать так, чтобы Apache httpd не посылал клиенту ответ типа 'Authorization required', а по IP-адресу, с которого пришёл запрос, восстанавливал из базы данных имя пользователя в REMOTE_USER.

Главное - чтобы с точки зрения WEB-сервисов всё выглядело так, будто бы прошла нормальная авторизация, но дополнительного взаимодействия с пользователями не требовалось.

Кто-нибудь такое встречал? Или, может, есть какие-либо идеи?


> Есть внутренняя сеть, каждому пользователю выдаётся динамический IP > это соответствие имя-адрес держится в базе данных.

а авторизация зачем тебе ? При первом обращении создай сессию и через нее передавай имя.

phasma ★☆
()
Ответ на: комментарий от phasma

> а авторизация зачем тебе?

Авторизация-то мне не нужна.

Мне нужно, чтобы при обращении к cgi-шке в её переменных окружения появилась переменная REMOTE_USER. Т.е. какая-то программа должна вызываться апачем _до_ вызова cgi'шки, анализировать, откуда пришёл запрос, брать из базы имя пользователя и выставлять переменную REMOTE_USER.

Ну и, обобщая требования, то же самое для всяких скриптов, выполняемых модулями, будь то mod_perl, mod_python и т.п.

eliterr
() автор топика
Ответ на: комментарий от phasma

> При первом обращении создай сессию и через нее передавай имя.

Это хорошо, если программа моя. А я как раз не хочу модифицировать программы.

Вот есть у меня, например, Bugzilla, MovableType и Subversion и ещё куча всякой всячины. Всем этим системам нужно знать имя пользователя. Они умеют брать его из REMOTE_USER, но обычно REMOTE_USER устанавливается только после авторизации.

Мне бы хотелось, не модифицируя эти системы и не требуя от пользователя авторизации, выставить REMOTE_USER в имя пользователя. Парой строк в конфиге апача.

Вообще это, наверное, можно было бы сделать статически, директивами SetEnvIf. Но тогда после каждого изменения соответствия нужно перечитывать этот кусок конфига...

eliterr
() автор топика
Ответ на: комментарий от eliterr

Напиши свой модуль. который будет это дело разруливать.

INFOMAN ★★★★★
()

элементарно, Ватсон:
http.conf:

RewriteEngine On
RewriteMap addrtouser   prg://tmp/rewrite.pl
RewriteCond %{REMOTE_ADDR} ^(.*)$
RewriteRule ^(.*) - [E=REMOTE_USER:${addrtouser:%1}]


/tmp/rewrite.pl:

#!/usr/bin/perl
$| = 1;
while (<STDIN>) {
    if (/192.168.188.128/){
                print "admin\n";
    }else{
                print "guest\n";
    }
}

borisych ★★★★★
()
Ответ на: комментарий от borisych

даже проще:

RewriteEngine On
RewriteMap addrtouser   prg://tmp/rewrite.pl
RewriteRule ^(.*) - [E=REMOTE_USER:${addrtouser:%{REMOTE_ADDR}}]

borisych ★★★★★
()
Ответ на: комментарий от borisych

Спасибо, borisych, то, что надо!

Как-то я сам просмотрел возможность модификации переменных вызовом внешней программы через mod_rewrite...

eliterr
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.