ifelse(SECTION, `ACLS_ADDITIONAL', `dnl acl_greylist_relays: # acl_arg1 - время жизни записи в минутах # acl_arg2 - причина занесения в серый список warn set acl_m_reason = $acl_arg2 warn set acl_m_ttl = ifelse(confGREYLIST_BACKEND, `DBM', `dnl set acl_m2 = ${lookup{$sender_host_address}dbm{confGREYLIST_DBM_RELAYS}} ') 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{confGREYLIST_SQLITE_RELAYS confGREYLIST_SQLITE_RELAYS_SELECT}} ') dnl ifelse(confGREYLIST_BACKEND, `SQLITE') ifelse(confGREYLIST_BACKEND, `MYSQL', `dnl set acl_m2 = ${lookup mysql{confGREYLIST_MYSQL_RELAYS_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_DBM_RELAYS}\ {$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_DBM_RELAYS: $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"\ }\ {${eval:confGREYLIST_ADDR_PRELOAD_TTL*60}}\ }\ }{ok}{no}{yes}} log_message = Could not store GREYLIST-RELAYS record to memcahed ') dnl ifelse(confGREYLIST_BACKEND, `MEMCACHED') ifelse(confGREYLIST_BACKEND, `REDIS', `dnl warn condition = ${if eq{\ ${acl{acl_redis_set}\ {confGREYLIST_RELAYS_RECORD_PREFIX`'$sender_host_address}\ {\ create_time=$tod_epoch \ expire_time=$acl_m_ttl \ reason="$acl_m_reason"\ }\ }\ }{ok}{no}{yes}} log_message = Could not store GREYLIST-RELAYS record to redis ') dnl ifelse(confGREYLIST_BACKEND, `REDIS') ifelse(confGREYLIST_BACKEND, `SQLITE', `dnl warn condition = ${if eq{$acl_m2}{}{\ ${lookup sqlite{confGREYLIST_SQLITE_RELAYS confGREYLIST_SQLITE_RELAYS_INSERT}}\ }{\ ${lookup sqlite{confGREYLIST_SQLITE_RELAYS confGREYLIST_SQLITE_RELAYS_UPDATE}}\ }} ') dnl ifelse(confGREYLIST_BACKEND, `SQLITE') ifelse(confGREYLIST_BACKEND, `MYSQL', `dnl warn condition = ${if eq{$acl_m2}{}{\ ${lookup mysql{confGREYLIST_MYSQL_RELAYS_INSERT}}\ }{\ ${lookup mysql{confGREYLIST_MYSQL_RELAYS_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_DBM_RELAYS}{$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{confGREYLIST_SQLITE_RELAYS confGREYLIST_SQLITE_RELAYS_SELECT}} ') dnl ifelse(confGREYLIST_BACKEND, `SQLITE') ifelse(confGREYLIST_BACKEND, `MYSQL', `dnl warn set acl_m0 = ${lookup mysql{confGREYLIST_MYSQL_RELAYS_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_optional_greylist = scores=${eval:${extract{scores}{$acl_m_optional_greylist}}+confGREYLIST_BLOCKED_OPTIONAL} \ log_message="${extract{log_message}{$acl_m_optional_greylist}} ${extract{reason}{$acl_m0}};" set acl_m_spam_action = ${acl_m_spam_action}\t\ greylist scores=confGREYLIST_BLOCKED_OPTIONAL\t\ ${extract{reason}{$acl_m0}}\n ') dnl ifelse(SECTION, `ACL_CHECK_RCPT')