Доброго времени суток.
Такая проблема -
Написал свой авторизатор для Сквида
#!/usr/bin/perluse DBI;
my $user = "User";
my $pass = "passwd";
my $database = "billing";
my $host="x.x.x.x";
my $port="5432";my $dbh=DBI->connect("dbi:Pg:dbname=$database;host=$host;port=$port", $user, $pass, {RaiseError => 1})
or die $DBI::errstr;$|=1;
while (<>)
{
chop;
($user, $pass)=split;
$ans = Check($user, $pass);
$dbh->disconnect;
print ("$ans\n");
}sub Check() {
my $qrystr="select count(*) from users where login = '$user' and passwd = '$pass' ;";
my $result=$dbh->prepare($qrystr);
$result->execute();
@count = $result->fetchrow_array;
$result->finish;
if ($count[0] > 0) {
return ("OK");
} else
{
return ("ERR");
}
Поставил в Сквиде
auth_param basic program /usr/local/etc/squid/sqauth.pl
acl authuser proxy_auth
http_access allow authuser
если запускать этот файлик и вводить через пробел Логин/пароль то все норма, выдает ОК или ERR соответственно
однако-же через сквид он 1 раз может пустить а потом все. В чем может быть трабл?
Может быть из за того что база лежит на удаленном серваке, а у сквида есть определенное время ожидания ответа? если так то где его можно исправить, помогите плиззз. уже 2 недели парюсь.............
Народ ну не молчите, выскажите хотя-бы предположения свои. плизз.........
>Народ ну не молчите, выскажите хотя-бы предположения свои. плизз.........столько дыр в такой маленькой программе
>>Народ ну не молчите, выскажите хотя-бы предположения свои. плизз.........
>
>столько дыр в такой маленькой программе
Каких например?
Например, для любого пользователя (даже несуществующего) подходит пароль "' or 1=1 ;--".
>Например, для любого пользователя (даже несуществующего) подходит пароль "' or 1=1 ;--".
>
понял, поправим, но вопрос был не в этом, а в том из-за чего сквид не пропускает, хотелось бы все таки узнать..................
>>Например, для любого пользователя (даже несуществующего) подходит пароль "' or 1=1 ;--".
>>
>
>
>понял, поправим, но вопрос был не в этом, а в том из-за
>чего сквид не пропускает, хотелось бы все таки узнать..................Кстати этот пароль не проходит, скрипт ведь сначала делает split по строке и получает 2 значения в Логин и пароль если по вашему то он получит в $user = "'" а в $paswd = "or"
>Кстати этот пароль не проходит, скрипт ведь сначала делает split по строке
>и получает 2 значения в Логин и пароль если по вашему
>то он получит в $user = "'" а в $paswd =
>"orМожет в данном конкретном случае и пронесет, но лучше так не делать.
По существу вопроса: попробуй disconnect из цикла убрать.
>>Кстати этот пароль не проходит, скрипт ведь сначала делает split по строке
>>и получает 2 значения в Логин и пароль если по вашему
>>то он получит в $user = "'" а в $paswd =
>>"or
>
>Может в данном конкретном случае и пронесет, но лучше так не делать.
>
>
>По существу вопроса: попробуй disconnect из цикла убрать.
Не помогает, может сквиду на самом деле нужно отдавать ответ за определенное время?