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

exim_4.67. Не могу сделать силами exim, делаю силами perl

Добавлено: 2007-04-25 9:29:51
cyrus_user
Привет снова.
Я использую встроенный обработчик перла для следующих проверок:
1. Проверяю наличие сразу в 2-х rbl базах. Наличие в одной слишком частый случай для нужных отправителей.

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

deny  hosts = +rbl_hosts                                                                                            
condition = ${if eqi {${perl{rblcheck}}} {yes}}                                                            
message = Blocked. Host From RBLs Databases                                                                     
log_message = Host From RBL   $sender_host_address
нет смысла приводить всю подпрограмму, покажи лишь что нужно:

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

my @rbl=("blackholes.mail-abuse.org",                                                                                   
"bl.spamcop.net",                                                                                                       
"cbl.abuseat.org",                                                                                                      
"dnsbl.njabl.org",                                                                                                      
"dnsbl.sorbs.net",                                                                                                      
"sbl-xbl.spamhaus.org",                                                                                                 
"list.dsbl.org",                                                                                                        
"dnsbl.void.ru");                                                                                                       
my $ip=join('.',reverse(split/\./,$host));                                                                              
foreach(@rbl)                                                                                                           
{my $string = "$ip.$_"; $cnt++ if h2ip($string) ne 0; if($cnt == 2){return "yes";}                                      
}return "fail";}
в свете изменений в 4.67
PH/03 Added additional dnslists conditions == and =& which are different from
= and & when the dns lookup returns more than one IP address.
всё равно не могу придумать конструкцию на встроенном языке exim-a для аналогичной проверки, поскольку на perl это не true-way :)

Если есть мысли, милости прошу совета

2. Проверяю квоту в cyrus

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

quota_router:                                                                                                           
no_verify                                                                                                           
driver = redirect                                                                                                   
data = "${if eqi {${perl{quotacheck}}} {yes} {:fail:Mailbox Is Full. Overquota.} {$local_part@$domain}}"            
allow_fail
ну и интересующий кусок проверяет заполненность ящика на 95%:

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

my @quota = $imap->get_quota($box);                                                                                     
    if($quota[2]) {                                                                                                     
    if($quota[1]*100/$quota[2]>=95) { return "yes";}                                                                    
    else {return "fail";}} 
опять же perl для больших нагрузок это не наш выбор, как бы это можно заменить на встроенные в exim механизмы. У cyrus есть notify, возможно ли как-то его задействовать для проверки квот..

Re: exim_4.67. Не могу сделать силами exim, делаю силами perl

Добавлено: 2008-11-11 10:16:22
Alex Keda
встроенные перл - он запускается один раз - при запуске экзима.
Дальше лишь вызывается функция.
Это совсем не много ресурсов.

Re: exim_4.67. Не могу сделать силами exim, делаю силами perl

Добавлено: 2008-11-12 20:38:19
Alex_hha
Может я чо то не понимаю, а чо нельзя при попадании в первый список присвоить acl_m1 = 1, при проверке по второму списку проверять значение этой переменной и если оно равно 1, то делать реджект?

Re: exim_4.67. Не могу сделать силами exim, делаю силами perl

Добавлено: 2008-11-14 19:15:42
cyrus_user
ну вы быстрые :)

p.s. см. дату вопроса. спасибо, но уже давно всё решено.