Написал следующий редиректор для squid'а:
#!/usr/bin/perl
use DBI; # вызов модуля для обращения к базам
$driver = "mysql"; # определение символьных переменных для
# подключения базы
$database="ipacct"; # в данном случае - имя базы
$hostname="localhost"; # имя сервера - адрес комьютера где
# запущены серверы
$user="---"; # имя пользователя (по умолчанию)
$password="---"; # пароль (по умолчанию)
# Подлючение к серверу MySQL
$dbh = DBI->connect("DBI:$driver:$database", $user) || die print "Can't connect";
$| = 1;
while (<>) {
chop;
($URL1, $SrcAddr, $Ident, $Method) = split;
$URL2 = CheckReq ($URL1, $SrcAddr, $Ident, $Method);
print "$URL2\n";
}
sub CheckReq {
my ($URL, $SrcAddr, $Ident, $Method) = @_;
($SrcIP, $SrcFQDN) = split (/\//, $SrcAddr);
($domain, $Ident) = split (/\\/, $Ident);
$Ident = $domain if ($Ident eq '');
$sql = "SELECT Bytes FROM traf_auth WHERE Ident='$Ident'";
$sth = $dbh->prepare($sql);
$sth->execute;
@rv = $sth->fetchrow_array;
$sth -> finish;
$limit = 20000000;
$limit = 0 if (!(check ($Ident, 'Inet')));
$limit = 30000000 if (check ($Ident, '_Inet30'));
$limit = 40000000 if (check ($Ident, '_Inet40'));
$limit = 999999999 if (check ($Ident, '_InetAllow_All'));
#print "$rv[0]\t$limit\n";
if ($rv[0] >= $limit) {
return "http://---/ERR_ACCESS_LIMIT.htm" }
else {
return $URL }
}
sub check {
local($user, $group) = @_;
$groupSID = `wbinfo -n "$group"`;
chop $groupSID;
$groupGID = `wbinfo -Y $groupSID`;
chop $groupGID;
return 1 if(`wbinfo -r \Q$user\E` =~ /^$groupGID$/m);
return 0;
}
Если используем его, то странички грузятся значительно медленнее.
Думал компиляция (perlcc) поможет, но при запуске откомпилированной
копии выдает ошибку:
Can't locate object method "connect" via package "DBI".
Может кто наставит на путь истинный?
Заранее благодарен за ответы.