по этому посту пытался делать 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"
Спасибо!