Пытаюсь нормально настроить squidguard.cgiНо в нем не правильно указано регулярное выражение для парсинга строки
строка:
clientaddr=192.168.16.1+clientname=+clientident=login+srcclass=sample-clients+targetclass=porn+url=http://www.sex.ru/Код для парсинга
if (defined($query)) {
while ($query =~ /^\&?([^\&=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\&?([^\&=]+)=([^\&=]*)(.*)/) {
my $key = $1;
my $value = $2;
$value = %word->{"unknown"}->{$lang} unless(defined($value) && $value && $value ne "unknown");
$query = $3;
if ($key =~ /^(clientaddr|clientident|clientuser|clientgroup|targetgroup|url)$/) {
eval "\$$key = \$value";
}
if ($query =~ /^url=(.*)/) {
$url = $1;
last;
}
}
}Если убрать в выражении кавычки - получим что все кроме урла забьется в clientaddr. А иначе - вобще не парсит толком
то, что сразу бросается в глаза:
скрипт ожидает в качестве разделителя '&' а в указанной строке используется '+'.
т.о. образом нужно заменить$query =~ /^\&?([^\&=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\&?([^\&=]+)=([^\&=]*)(.*)/
на
$query =~ /^\+?([^\+=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\+?([^\+=]+)=([^\+=]*)(.*)/
но честно говоря, криво это как-то всё, может где-то ещё что вылезет :(
>[оверквотинг удален]
>т.о. образом нужно заменить
>
>$query =~ /^\&?([^\&=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\&?([^\&=]+)=([^\&=]*)(.*)/
>
>на
>
>$query =~ /^\+?([^\+=]+)=\"([^\"]*)\"(.*)/ || $query =~ /^\+?([^\+=]+)=([^\+=]*)(.*)/
>
>но честно говоря, криво это как-то всё, может где-то ещё что вылезет
>:(Поменять надо + на & и все будет ок