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

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
UDAR_nick
рядовой
Сообщения: 12
Зарегистрирован: 2009-12-22 11:27:22

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

Непрочитанное сообщение UDAR_nick » 2010-03-10 18:12:07

Приветствую заглянувших!

по этому посту пытался делать 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"
подскажите ПОЖАЛУЙСТА в чем ошибка!!!!!!! ОЧЕНЬ ПРОШУ!! сам в перле ноль полный

Спасибо!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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

Непрочитанное сообщение ProFTP » 2010-03-11 7:34:24

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" то назовите переменную чтобы она не называлась на цифру
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

UDAR_nick
рядовой
Сообщения: 12
Зарегистрирован: 2009-12-22 11:27:22

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

Непрочитанное сообщение UDAR_nick » 2010-03-11 12:39:00

Спасибо что откликнулись!

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

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

#!/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 "))"
Помогите пожалуйста!
Спасибо
Александр

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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

Непрочитанное сообщение ProFTP » 2010-03-11 12:43:04

лишние кавычки где-то

где стркоа 22?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

UDAR_nick
рядовой
Сообщения: 12
Зарегистрирован: 2009-12-22 11:27:22

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

Непрочитанное сообщение UDAR_nick » 2010-03-11 12:54:12

ProFTP писал(а):лишние кавычки где-то

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

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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

Непрочитанное сообщение ProFTP » 2010-03-11 12:56:11

походу тут

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

(strftime "%02Y_%02m_%02d", localtime($GDaysAgo)))
одну убрать навреное
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

UDAR_nick
рядовой
Сообщения: 12
Зарегистрирован: 2009-12-22 11:27:22

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

Непрочитанное сообщение UDAR_nick » 2010-03-11 13:09:06

убрал одну скобку ")"

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

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

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

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

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

Непрочитанное сообщение ProFTP » 2010-03-11 13:25:41

ну по ищите не закрытую кавычку... тут запутано...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ADRE
майор
Сообщения: 2641
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

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

Непрочитанное сообщение ADRE » 2010-03-12 20:16:22

молодой человек а вы чем скрипты редактируете? в консольки без подсветки чтоли?
//del