Страница 1 из 1

толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-10 18:12:07
UDAR_nick
Приветствую заглянувших!

по этому посту пытался делать whitelist для Exim
http://forum.lissyara.su/viewtopic.php? ... 577#p33729

скрипт на Perl

скопировал один-в-один
только везде по скрипту менял $acl_m0 на $acl_m9 и $acl_m1 на $acl_m10 (так как в моем конфиге $acl_m0 и $acl_m1 задействованны)

Скрипт в результате выглядит так:

Код: Выделить всё

#!/usr/bin/perl -w
#добавление адреса в файл
sub white_senders_add () {
my $rcpt = Exim::expand_string('$acl_m9\@$acl_m10');
open FILE,">>/usr/local/etc/exim/acls/32.white.senders";
printf FILE "%s %u_%02u_%02u\n",$rcpt,(localtime time)[5]+1900,(localtime time)[4]+1,(localtime time)[3];
close FILE; return; }

#изменение даты у адреса, чтобы список был актуальный. меняем старую дату, на текущую
sub white_senders_date () {
my $rcpt = Exim::expand_string('$acl_m9\@$acl_m10');
my $datenow=sprintf '%u_%02u_%02u',(localtime time)[5]+1900,(localtime time)[4]+1,(localtime time)[3];
local $^I = ''; #если мы укажем local $^I = '*.bak'; то старая версия файла попадёт в 32.white.senders.bak
local @ARGV = ("/usr/local/etc/exim/acls/32.white.senders");
while (<>) { ($mail, $data,) = split(/\s/); s/$data/$datenow/ if $mail eq $rcpt; print;} return;}

#удаление старых адресов (удаляем адреса 2-х месячной давности).
sub report_time {my ($s)=@_; $s =~ s/\_//g;return $s;}
sub white_senders_del() {
use POSIX qw(strftime); my $thisday = time; my $60DaysAgo = $thisday - 60*24*60*60;
local $^I = '.old'; local @ARGV = ("/usr/local/etc/exim/acls/32.white.senders");
while (<>) {($mail, $data,) = split(/\s/); print "$mail $data\n" if report_time($data) >= report_time(strftime "%02Y_%02m_%02d", localtime($60DaysAgo))); } return; }}
В результате при попытке отправки письма в мир от авторизированного пользователя в логах екзима получаю:

Код: Выделить всё

2010-03-10 18:07:35 H=(admin03) [192.168.1.4]:10811 I=[192.168.1.101]:25 F=<admin@example.ru> temporarily rejected RCPT <someuser@ya.ru>: failed to expand ACL string "${perl{white_senders_add}}": error in perl_startup code: Can't use global $60 in "my" at /usr/local/etc/xams/exim-perl.pl line 20, near "my $60"
подскажите ПОЖАЛУЙСТА в чем ошибка!!!!!!! ОЧЕНЬ ПРОШУ!! сам в перле ноль полный

Спасибо!

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-11 7:34:24
ProFTP
UDAR_nick писал(а):

Код: Выделить всё

 error in perl_startup code: Can't use global $60 in "my" at /usr/local/etc/xams/exim-perl.pl line 20, near "my $60"
написано что глобальная переменная которая называется на цифру не может быть локальная в "my" области видимости

если хотите обявить "my" то назовите переменную чтобы она не называлась на цифру

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-11 12:39:00
UDAR_nick
Спасибо что откликнулись!

Изменил переменную, теперь скрипт выглядит так:

Код: Выделить всё

#!/usr/bin/perl -w
#добавление адреса в файл
sub white_senders_add () {
my $rcpt = Exim::expand_string('$acl_m9\@$acl_m10');
open FILE,">>/usr/local/etc/exim/acls/32.white.senders";
printf FILE "%s %u_%02u_%02u\n",$rcpt,(localtime time)[5]+1900,(localtime time)[4]+1,(localtime time)[3];
close FILE; return; }

#изменение даты у адреса, чтобы список был актуальный. меняем старую дату, на текущую
sub white_senders_date () {
my $rcpt = Exim::expand_string('$acl_m9\@$acl_m10');
my $datenow=sprintf '%u_%02u_%02u',(localtime time)[5]+1900,(localtime time)[4]+1,(localtime time)[3];
local $^I = ''; #если мы укажем local $^I = '*.bak'; то старая версия файла попадёт в 32.white.senders.bak
local @ARGV = ("/usr/local/etc/exim/acls/32.white.senders");
while (<>) { ($mail, $data,) = split(/\s/); s/$data/$datenow/ if $mail eq $rcpt; print;} return;}

#удаление старых адресов (удаляем адреса 2-х месячной давности).
sub report_time {my ($s)=@_; $s =~ s/\_//g;return $s;}
sub white_senders_del() {
use POSIX qw(strftime); my $thisday = time; my $GDaysAgo = $thisday - 60*24*60*60;
local $^I = '.old'; local @ARGV = ("/usr/local/etc/exim/acls/32.white.senders");
while (<>) {($mail, $data,) = split(/\s/); print "$mail $data\n" if report_time($data) >= report_time(strftime "%02Y_%02m_%02d", localtime($GDaysAgo))); } return; }}
Теперь в логах екзима такая ошибка:

Код: Выделить всё

2010-03-11 12:32:46 H=(admin03) [192.168.1.4]:1455 I=[192.168.1.101]:25 F=<admin@exapmle.ru> temporarily rejected RCPT <someuser@ya.ru>: failed to expand ACL string "${perl{white_senders_add}}": error in perl_startup code: syntax error at /usr/local/etc/xams/exim-perl.pl line 22, near "))"
Помогите пожалуйста!
Спасибо
Александр

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-11 12:43:04
ProFTP
лишние кавычки где-то

где стркоа 22?

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-11 12:54:12
UDAR_nick
ProFTP писал(а):лишние кавычки где-то

где стркоа 22?
последняя в коде скрипта

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-11 12:56:11
ProFTP
походу тут

Код: Выделить всё

(strftime "%02Y_%02m_%02d", localtime($GDaysAgo)))
одну убрать навреное

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-11 13:09:06
UDAR_nick
убрал одну скобку ")"

теперь в логах екзима такое:

Код: Выделить всё

2010-03-11 13:06:45 H=(admin03) [192.168.1.4]:2077 I=[192.168.1.101]:25 F=<admin@example.ru> temporarily rejected RCPT <someuser@ya.ru>: failed to expand ACL string "${perl{white_senders_add}}": error in perl_startup code: Unmatched right curly bracket at /usr/local/etc/xams/exim-perl.pl line 22, at end of line

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-11 13:25:41
ProFTP
ну по ищите не закрытую кавычку... тут запутано...

Re: толи ошибка в скрипте толи кривые руки

Добавлено: 2010-03-12 20:16:22
ADRE
молодой человек а вы чем скрипты редактируете? в консольки без подсветки чтоли?