Страница 1 из 1
Форма авторизации на Perl
Добавлено: 2008-07-03 20:39:57
serge
Есть необходимость авторизовать в apache пользователей на основе файла паролей dovecot (smtp сервер sendmail и пользователи соответственно виртуальные). Все вроде просто за исключением одного но... авторизовывать нужно по логину реальному (
serge@server.ru) нужно вернуть в ответе логин именно виртуального пользователя (virtuser_1036), который затем будет принимать dspam webgui.
dspam написан на perl. Авторизации своей у него нет, используется mod_auth (basic) из apache. Может это можно сделать средствами apache, но я не понял как. Поэтому мне думается что нужно дописать в dspam свою авторизация.
С Perl почти не приходилось работать, поэтому прошу у знающих помощи... как будет выглядеть такой скрипт авторизации. Может я туплю и вообще как-то иначе можно это решить
Вот так выглядит строка в файле паролей dovecot
Код: Выделить всё
serge@server.ru:$2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ:1036:1002::/home/serge:::/var/mail/virtuser_1036
Re: Форма авторизации на Perl
Добавлено: 2008-07-03 20:48:03
ProFTP
еще есть такое как сессии и куки, ты хочешь морду сделать?
это
Код: Выделить всё
$2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ
пароль?
Re: Форма авторизации на Perl
Добавлено: 2008-07-03 20:53:33
serge
Веб морда есть уже... повторяю, что это dspam. Мне лишь нужно ему нужного пользователя передать после авторизации.
ProFTP писал(а):этоКод: Выделить всё$2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZпароль?
Да, точнее его хзш.
Re: Форма авторизации на Perl
Добавлено: 2008-07-03 21:00:23
ProFTP
dspam на perl работает? нужно посмотреть как там, там есть данные с email? наверное нужно чтобы чтобы ассоциация была с этим файлом, который ты показал
UPD:
тебе нужео сделать поиск по эмайл - найт истроку, потом вывести /var/mail/virtuser_1036 щас гляну
тут точно 3 точки ::: везде? но эмайлы повтряться не могут?
Re: Форма авторизации на Perl
Добавлено: 2008-07-03 21:04:32
serge
чет не совсем вопросов понимаю
мне нужно авторизовать пользователя по первому (
serge@server.ru) и второму ($2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ) полю, а вернуть имя пользователя ($ENV{'REMOTE_USER'}) (последнюю после всех слэшей часть) из последнего поля (virtuser_1036)
Re: Форма авторизации на Perl
Добавлено: 2008-07-03 22:23:48
Alex Keda
там в портах - пачка модулей...
не искал - может мона внешние аутентификаторы привернуть?
а уж в скрипте как угодно вывернешься...
Re: Форма авторизации на Perl
Добавлено: 2008-07-03 22:34:58
serge
Я хотел mod_auth_pop3, но его в портах нет (или искал плохо), а mod_auth_imap2 чето не стал работать.
===
Чет видимо нада книгами и гуглями обкладываться и Perl учить

Re: Форма авторизации на Perl
Добавлено: 2008-07-04 2:03:43
ProFTP
Код: Выделить всё
#!/usr/bin/perl
#use strict;
#use diagnostics;
$email = "2serge\@server.ru";
# Open the file
my $filename = "test.txt";
open FILE, $filename
or die qq{Cannot read "$filename": $! };
# Iterate through each line of the file,
# printing all lines that match
while ($line = <FILE>) {
if ($line =~ /$email/) {
my ($bla, $google) = split /:::/, $line, 2;
my ($dir0, $dir1, $dir2, $dir3) = split /\//, $google, 4;
print "$dir3";
}
}
close FILE;
Код: Выделить всё
serge@server.ru:$2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ:1036:1002::/home/serge:::/var/mail/virtuser_1036
2serge@server.ru:$2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ:1036:1002::/home/serge:::/var/mail/virtuser_1037
если написать
serge@server.ru то выдаст сразу две строки!!
может кто знает как "заэкранировать"?
похожу так :
Код: Выделить всё
:serge@server.ru:$2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ:1036:1002::/home/serge:::/var/mail/virtuser_1036
:2serge@server.ru:$2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ:1036:1002::/home/serge:::/var/mail/virtuser_1037
или нет?
Re: Форма авторизации на Perl
Добавлено: 2008-07-04 8:44:45
serge
Спс всем. Сделал как мог, но все таки работает.
Вот такой код в верху в двух скриптах dspam.cgi и admin.cgi делает то что мне нужно.
Код: Выделить всё
open(FILE, "/usr/local/etc/dovecot.passwd");
while(<FILE>) {
chomp;
if ($_ =~ $ENV{'REMOTE_USER'}) {
($CONFIG{'login'}, $CONFIG{'passwd'}, $CONFIG{'uid'}, $CONFIG{'gid'}, $CONFIG{'gcos'}, $CONFIG{'home'}, $CONFIG{'sh
ell'}, $CONFIG{'fld8'}, $CONFIG{'path'}) = split(/:/);
($CONFIG{'s1'}, $CONFIG{'s2'}, $CONFIG{'s3'}, $CONFIG{'s4'}) = split(/\//, $CONFIG{'path'});
$ENV{'REMOTE_USER'} = $CONFIG{'s4'};
}
}
close(FILE);
Терь уже можно его в красивый вид привести

т.к. чувствую можно было это проще написать.
===
Теперь dspam еще и к sendmail прикручивать научился

Вот только чувствуется должен быть инструмент для работы с вирт. пользователями, но чето ничего не нагуглил про это. Многие мануалы (в инете которые попадались) для sendmail настраиваются просто на пересылку на ящики (spam-; notspam-), но а там где речь про webgui идет ничего не сказано про то какие там пользователи.