ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_greylist_relays: # acl_arg1 - время жизни записи в минутах # acl_arg2 - причина занесения в серый список warn set acl_m_reason = ${if eq{$acl_arg2}{}{relay address greylisted early}{$acl_arg2}} warn set acl_m_ttl = ifelse(confGREYLIST_BACKEND, `DBM', `dnl set acl_m2 = ${lookup{$sender_host_address}dbm{confGREYLIST_RELAYS_DBM}} ') dnl ifelse(confGREYLIST_BACKEND, `DBM') ifelse(confGREYLIST_BACKEND, `MEMCACHED', `dnl set acl_m2 = ${acl{acl_memcached_get}{confGREYLIST_RELAYS_RECORD_PREFIX`'$sender_host_address}} ') dnl ifelse(confGREYLIST_BACKEND, `MEMCACHED') ifelse(confGREYLIST_BACKEND, `REDIS', `dnl set acl_m2 = ${acl{acl_redis_get}{confGREYLIST_RELAYS_RECORD_PREFIX`'$sender_host_address}} ') dnl ifelse(confGREYLIST_BACKEND, `REDIS') ifelse(confGREYLIST_BACKEND, `SQLITE', `dnl set acl_m2 = ${lookup sqlite,file=confGREYLIST_RELAYS_SQLITE{confGREYLIST_RELAYS_SQLITE_SELECT}} ') dnl ifelse(confGREYLIST_BACKEND, `SQLITE') ifelse(confGREYLIST_BACKEND, `MYSQL', `dnl set acl_m2 = ${lookup mysql{confGREYLIST_RELAYS_MYSQL_SELECT}} ') dnl ifelse(confGREYLIST_BACKEND, `MYSQL') # если хост грейлистится навсегда warn condition = ${if or{\ {eq{$acl_arg1}{0}}\ {eq{$acl_arg1}{}}\ }{yes}{no}} set acl_m_ttl = 0 # запись в кеше не найдена warn condition = ${if eq{$acl_m_ttl}{}{yes}{no}} condition = ${if eq{$acl_m2}{}{yes}{no}} set acl_m_ttl = ${eval:$tod_epoch+$acl_arg1*60} # если хост уже загрейлистен навсегде warn condition = ${if eq{$acl_m_ttl}{}{yes}{no}} condition = ${if eq{${extract{expire_time}{$acl_m2}}}{0}{yes}{no}} set acl_m_ttl = 0 # время жизни существующей записи истекло warn condition = ${if eq{$acl_m_ttl}{}{yes}{no}} condition = ${if <{${extract{expire_time}{$acl_m2}}}{$tod_epoch}{yes}{no}} set acl_m_ttl = ${eval:$tod_epoch+$acl_arg1*60} # время жизни существующей записи не истекло, выбираем большее время жизни записи warn condition = ${if eq{$acl_m_ttl}{}{yes}{no}} set acl_m_ttl = ${if >\ {${extract{expire_time}{$acl_m2}}}\ {${eval:$tod_epoch+$acl_arg1*60}}\ {${extract{expire_time}{$acl_m2}}}\ {${eval:$tod_epoch+$acl_arg1*60}}\ } # сохраняем запись в кеше ifelse(confGREYLIST_BACKEND, `DBM', `dnl warn set acl_m_status = ${perl{dbm_save}{confGREYLIST_RELAYS_DBM}\ {$sender_host_address}\ {\ create_time=$tod_epoch \ expire_time=$acl_m_ttl \ reason="$acl_m_reason"\ }\ } condition = ${if eq{$acl_m_status}{}{no}{yes}} log_message = Could not store GREYLIST-RELAYS record to confGREYLIST_RELAYS_DBM: $acl_m_status ') dnl ifelse(confGREYLIST_BACKEND, `DBM') ifelse(confGREYLIST_BACKEND, `MEMCACHED', `dnl warn condition = ${if eq{\ ${acl{acl_memcached_set}\ {confGREYLIST_RELAYS_RECORD_PREFIX`'$sender_host_address}\ {\ create_time=$tod_epoch \ expire_time=$acl_m_ttl \ reason="$acl_m_reason"\ }\ {${if eq{$acl_m_ttl}{0}{0}{${eval:$acl_m_ttl-$tod_epoch}}}}\ }\ }{ok}{no}{yes}} log_message = Could not store GREYLIST-RELAYS record to memcahed ') dnl ifelse(confGREYLIST_BACKEND, `MEMCACHED') ifelse(confGREYLIST_BACKEND, `REDIS', `dnl warn set acl_m_redis_status = ${acl{acl_redis_set}\ {confGREYLIST_RELAYS_RECORD_PREFIX`'$sender_host_address}\ {\ create_time=$tod_epoch \ expire_time=$acl_m_ttl \ reason="$acl_m_reason"\ }\ {${if eq{$acl_m_ttl}{0}{}{${eval:$acl_m_ttl-$tod_epoch}}}}\ } condition = ${if eq{$acl_m_redis_status}{ok}{no}{yes}} log_message = Could not store GREYLIST-RELAYS record to redis: $acl_m_redis_status ') dnl ifelse(confGREYLIST_BACKEND, `REDIS') ifelse(confGREYLIST_BACKEND, `SQLITE', `dnl warn condition = ${if eq{$acl_m2}{}{\ ${lookup sqlite,file=confGREYLIST_RELAYS_SQLITE{confGREYLIST_RELAYS_SQLITE_INSERT}}\ }{\ ${lookup sqlite,file=confGREYLIST_RELAYS_SQLITE{confGREYLIST_RELAYS_SQLITE_UPDATE}}\ }} ') dnl ifelse(confGREYLIST_BACKEND, `SQLITE') ifelse(confGREYLIST_BACKEND, `MYSQL', `dnl warn condition = ${if eq{$acl_m2}{}{\ ${lookup mysql{confGREYLIST_RELAYS_MYSQL_INSERT}}\ }{\ ${lookup mysql{confGREYLIST_RELAYS_MYSQL_UPDATE}}\ }} ') dnl ifelse(confGREYLIST_BACKEND, `MYSQL') accept ') dnl ifelse(SECTION, `ACLS_ADDITIONAL') ifelse(SECTION, `ACL_CHECK_RCPT', `dnl ifelse(confGREYLIST_BACKEND, `DBM', `dnl warn set acl_m0 = ${lookup{$sender_host_address}dbm{confGREYLIST_RELAYS_DBM}{$value}{}} ') dnl ifelse(confGREYLIST_BACKEND, `DBM') ifelse(confGREYLIST_BACKEND, `MEMCACHED', `dnl warn set acl_m0 = ${acl{acl_memcached_get}{confGREYLIST_RELAYS_RECORD_PREFIX`'$sender_host_address}{$value}{}} ') dnl ifelse(confGREYLIST_BACKEND, `MEMCACHED') ifelse(confGREYLIST_BACKEND, `REDIS', `dnl warn set acl_m0 = ${acl{acl_redis_get}{confGREYLIST_RELAYS_RECORD_PREFIX`'$sender_host_address}{$value}{}} ') dnl ifelse(confGREYLIST_BACKEND, `REDIS') ifelse(confGREYLIST_BACKEND, `SQLITE', `dnl warn set acl_m0 = ${lookup sqlite,file=confGREYLIST_RELAYS_SQLITE{confGREYLIST_RELAYS_SQLITE_SELECT}} ') dnl ifelse(confGREYLIST_BACKEND, `SQLITE') ifelse(confGREYLIST_BACKEND, `MYSQL', `dnl warn set acl_m0 = ${lookup mysql{confGREYLIST_RELAYS_MYSQL_SELECT}} ') dnl ifelse(confGREYLIST_BACKEND, `MYSQL') condition = ${if eq{$acl_m0}{}{no}{yes}} condition = ${if or{\ {eq{${extract{expire_time}{$acl_m0}}}{0}}\ {>{${extract{expire_time}{$acl_m0}}}{$tod_epoch}}\ }{yes}{no}} set acl_m_reason = ${extract{reason}{$acl_m0}} set acl_m_reason = ${if eq{$acl_m_reason}{}{relay address greylisted early}{$acl_m_reason}} set acl_m_optional_greylist = scores=${eval:${extract{scores}{$acl_m_optional_greylist}}+confGREYLIST_BLOCKED_OPTIONAL} \ log_message="${extract{log_message}{$acl_m_optional_greylist}} $acl_m_reason;" set acl_m_spam_action = ${acl_m_spam_action}\t\ greylist scores=confGREYLIST_BLOCKED_OPTIONAL\t\ $acl_m_reason\n ') dnl ifelse(SECTION, `ACL_CHECK_RCPT')