понедельник, 22 января 2007 г.

Система аутентификации пользователей Squid

Данная система призвана обеспечить аутентификацию пользователей Squid через базу данных. В моем случае СУБД Firebird, но т.к. используется DBI, то можно использовать любую СУБД, для которой есть соответствующие драйверы.
В базе данных есть только одна таблица USERS.
Почитав комментарии в конфигурационном файле Squid, можно узнать что в принципе внешняя программа для аутентификации должна на выходе выдавать OK в случае успеха или ERR в случае неудачи процесса аутентификации.
Пароли в базе данных в поле PASSWD хранятся в шифрованном виде и их можно только поменять на новые. Добавление и редактирование пользователей осуществляются через веб-интерфейс (выложено будет позже).
А пока вот программа аутентификации, написана на Perl.

#!/usr/bin/perl

use DBI;

$_=<>;
chomp;
($login, $passwd) = split / +/;

$dbh = DBI->connect(
'dbi:InterBase:' .
'dbname=/home/data/squid.gdb;' .
'host=localhost;' .
'ib_charset=win1251;' ,
'SYSDBA',
'masterkey', { RaiseError => 1, AutoCommit => 0 });

$sql = "select passwd from users where login='$login'";
$sth = $dbh->prepare( $sql );
$sth->execute();
@res = $sth->fetchrow_array;
$pass=$res [ 0 ];
$sth->finish();
$dbh->commit();
$dbh->disconnect();
unless($pass) {
print "ERR\n";
} else {
if ($pass eq crypt($passwd, $passwd)) {
print "OK\n";
} else {
print "ERR\n";
}
}
© Ramzaj

Комментариев нет: