Здравствуйте.
Поставил новый сервер с Centos 5.4 x86_64, на нём squid-2.6.STABLE21-3.
Пытаюсь в сквиде настроить авторизацию юзеров через базу mysql как у меня давным давно успешно работает на старом сервере (asplinux 9.2 squid-2.5.STABLE9-1.92.7asp). Но почему-то не работает :(Вот часть конфига squid.conf:
auth_param basic program /usr/libexec/squid/sq_auth.pl
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl inetusers proxy_auth REQUIRED
http_access allow inetusers
sq_auth.pl - простенький скрипт:
#!/usr/bin/perl -w
$|=1;
$mysqluser="login";
$mysqlpass="pass";
$mysqlhost="host.my";
$mysqlport="3306";
$mysqldbas="base";
$mysqltabl="table";
use DBI;
while(<>) {
if ($_ =~ m/^(\w+)(\@(\w+))*\s([^ ].+)$/) {
$login=$1; $realm=$3; $Ppasswd=$4;
} else {
$login=''; $realm=''; $Ppasswd='';
}
$db=DBI->connect("DBI:mysql:database=$mysqldbas;host=$mysqlhost;port=$mysqlport",$mysqluser,$mysqlpass,{AutoCommit=>1,RaiseError=>0,PrintError=>1})|| die "Can't connect to database";
$statement="SELECT passwd FROM $mysqltabl WHERE login='$login";
if ($realm) { $statement=$statement."\@$realm'"; }
else { $statement=$statement."'"; }
$stn=$db->prepare($statement);
$stn->execute;
$numrows=$stn->rows;
if(!$numrows) {
print "ERR\n"
} else {
@row=$stn->fetchrow;
$Gpasswd=$row[0];
if (crypt($Ppasswd, $Gpasswd) eq $Gpasswd) {
print "OK\n";
} else {
print "ERR\n";
}
}
$stn->finish;
$db->disconnect;
};
При запуске сквида запускается, как положено, 5 процессов sq_auth.pl, попытка клиента авторизоваться не проходит, а в логе пишется:
DBI connect('base:host.my','login',...) failed: Can't connect to MySQL server on 'host.my' (13) at /usr/libexec/squid/sq_auth.pl line 38
Can't connect to database at /usr/libexec/squid/sq_auth.pl line 38, <> line 1.
Если tcpdump смотреть, то никаких пакетов в сторону host.my не уходит, т.е. он даже не пытается коннектиться к базе...
Поднял локально mysql, подправил в скрипте адрес хоста на localhost, но не помогло:
DBI connect('base:localhost','login',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13) at /usr/libexec/squid/sq_auth.pl line 38
Can't connect to database at /usr/libexec/squid/sq_auth.pl line 38, <> line 1.
Если скрипт руками запустить, то он работает (и с локальным mysql, и с удаленным): логин, пароль принимает, OK или ERR выдаёт как надо. А под сквидом не хочет :(
Что может быть не так? В центосе как-то хитро сквид собран?
Пробовал сквид 3.0 вот отсюда: http://people.redhat.com/jskala/squid/squid-3.0.STABLE16-1.el5 всё тоже самое :(
Но в Fedora11 squid 3.0 замечательно работает!