Страница 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 почти не приходилось работать, поэтому прошу у знающих помощи... как будет выглядеть такой скрипт авторизации. Может я туплю и вообще как-то иначе можно это решить :oops:
Вот так выглядит строка в файле паролей 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
чет не совсем вопросов понимаю :oops:
мне нужно авторизовать пользователя по первому (serge@server.ru) и второму ($2a$04$MFyzbaFqX0HQZOZxiZ24PulzyHVr028aAz/ye19EkVY21nZ) полю, а вернуть имя пользователя ($ENV{'REMOTE_USER'}) (последнюю после всех слэшей часть) из последнего поля (virtuser_1036)

Re: Форма авторизации на Perl

Добавлено: 2008-07-03 22:23:48
Alex Keda

Код: Выделить всё

mod_auth_*
там в портах - пачка модулей...
не искал - может мона внешние аутентификаторы привернуть?
а уж в скрипте как угодно вывернешься...

Re: Форма авторизации на Perl

Добавлено: 2008-07-03 22:34:58
serge
Я хотел mod_auth_pop3, но его в портах нет (или искал плохо), а mod_auth_imap2 чето не стал работать.
===
Чет видимо нада книгами и гуглями обкладываться и Perl учить :cz2:

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