Доброго времени суток!
Захотелось написать свой редиректор на perl'е. Вкратце суть такова:
Есть в mysql базе табличка, в которой указаны ip-адреса, c которых можно использвоать инет. Сквид в числе параметров передает редиректору ip-адрес клиента, откоторого пришел запрос. Хочу, чтобы редиректор проверял если есть адрес клиента в базе, то ходи в нет, иначе ходи на другой адрес, где написано типа доступ запрещен.
Строго прошу не судить, т.к. с перлом до этого работать не приодилось, а с редиректорами темболее. Вот код:#!/usr/bin/perl
use DBI;
use DBI::DBD;
require "/etc/squid/logger.cfg";
$dbh = DBI->connect("DBI:mysql:$dbname:$dbhost:$dbport", $dbuser, $dbpass) or die "Cannot connect to DataBase";
my $ips = $dbh->selectall_hashref("SELECT cl_ip FROM auth;",1);
$|=1;
while (<>) {
($url, $cl_ip, $ident, $method) = split;
if (exists $ips->{$cl_ip})
{
print "$url $cl_ip $ident $method\n" ;
}
else
{
print "$red_url $cl_ip $ident $method\n" ;
}
}
$dbh->disconnect;
По итогу не могу понять где что неправильно... Реально добавил руками в табличку свой ip_адрес и при попытке пойти на какую-нибудь страницу почему-то срабатывает ветка в условии, которая идёт по else. Хотя (может это глюк) иногда один раз пропускает по нормальному, а при попытке пойти дальше происходит редирект на страницу запрещения доступа...
Буду рад, если укажете, в чем моя ошибка и выскажете прежложения по улучшению.
>Захотелось написать свой редиректор на perl'е. Вкратце суть такова:
>Есть в mysql базе табличка, в которой указаны ip-адреса, c которых можно
>использвоать инет. Сквид в числе параметров передает редиректору ip-адрес клиента, откоторого
>пришел запрос. Хочу, чтобы редиректор проверял если есть адрес клиента в
>базе, то ходи в нет, иначе ходи на другой адрес, где
>написано типа доступ запрещен.А в .../squid/errors/Russian-koi8-r/ERR_ACCESS_DENIED или около того текст или редирект написать, а адрес проверять "acl ... src"+http_access ?
>По итогу не могу понять где что неправильно...
Вставь отладочные print-ы во временный файл и отлаживай.
>Доброго времени суток!
>Захотелось написать свой редиректор на perl'е. Вкратце суть такова:
>Есть в mysql базе табличка, в которой указаны ip-адреса, c которых можно
>использвоать инет. Сквид в числе параметров передает редиректору ip-адрес клиента, откоторого
>пришел запрос. Хочу, чтобы редиректор проверял если есть адрес клиента вЕсли ip вбил после запуска редиректора, то все правильно.
Редиректор при запуске зачитал список ip и по этому, один раз зачитанному списку и работает.>[оверквотинг удален]
>$dbh->disconnect;
>
>
>По итогу не могу понять где что неправильно... Реально добавил руками в
>табличку свой ip_адрес и при попытке пойти на какую-нибудь страницу почему-то
>срабатывает ветка в условии, которая идёт по else. Хотя (может это
>глюк) иногда один раз пропускает по нормальному, а при попытке пойти
>дальше происходит редирект на страницу запрещения доступа...
>Буду рад, если укажете, в чем моя ошибка и выскажете прежложения по
>улучшению.
Вот кусок из squid.conf....
acl privnet src 172.16.22.0/255.255.255.0
.....
http_access allow privnetА страница, на которую делается редирект - на самом шлюзе лежит.
про отладочные print'ы сегодня попробую... посмотрю, что пишет...
> Вот кусок из squid.conf
> ....
> acl privnet src 172.16.22.0/255.255.255.0
> .....
> http_access allow privnet
> А страница, на которую делается редирект - на самом шлюзе лежит.
> про отладочные print'ы сегодня попробую... посмотрю, что пишет...Интересно узнать, получилось у вас допилить скрипт до работоспособного или нет?