Снова вернулся к реализации даной фичи.
Что-то не рабоатет.
Вот выдержка из конфига:
Код: Выделить всё
##################################
### MySQL auto white list macros #
##################################
hide mysql_servers = localhost/exim/exim/123
MYSQL_MYLIST = INSERT INTO auto_whitelist(src_email,dst_email,record_expires) VALUES ('$sender_address','$acl_m4@$acl_m5',DATE_ADD(now(), INTERVAL 10 DAY))
MYSQL_UPDATEMYLIST = UPDATE auto_whitelist SET record_expires=DATE_ADD(now(), INTERVAL 10 DAY) WHERE src_email='$sender_address' AND dst_email='$acl_m4@$acl_m5'
MYSQL_DELMYLISTEXPIRED = DELETE FROM auto_whitelist WHERE record_expires < now()
MYSQL_TESTMYLIST = SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='$sender_address' AND dst_email='$acl_m4@$acl_m5'
MYSQL_TESTCLIENTMYLIST = SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE dst_email='$sender_address' AND src_email='$local_part@$domain'
cl_check_rcpt:
# Делаем лукапы и заполянем переменными нужными нам значениями.
warn set acl_m3 = ${lookup{$domain}nwildlsearch{/usr/local/etc/exim/lists/local_domains}{$domain}}
set acl_m4 = $local_part
set acl_m5 = $domain
# Принимаем аутентифицированных для нашего домена
# accept authenticated = *
# domains = +local_domains
# message = "Unknown user"
# verify = recipient
# Проверяем, существует ли домен получателя
deny log_message = Recipient verify failed
authenticated = *
!verify = recipient
# Для наших пользователей записываем наш $sender_address и адрес получателя($local_part@$domain).
# Существуют записи для данной пары src-dst email? Если нет, вернёт 0.
warn
authenticated = *
set acl_m19 = ${lookup mysql{MYSQL_TESTMYLIST}{$value}{0}}
# Если существует, изменяем поле record_expire
warn
authenticated = *
condition = ${if and {{eq{$acl_m3}{}}{!eq{$acl_m19}{0}}}{yes}{no}}
set acl_m19 = ${lookup mysql{MYSQL_UPDATEMYLIST}}
# Если не существует такой записи, добавляем в базу.
warn
authenticated = *
condition = ${if and {{eq{$acl_m3}{}}{eq{$acl_m19}{0}}}{yes}{no}}
set acl_m19 = ${lookup mysql{MYSQL_MYLIST}}
# Принимаем аутентифицированных для нашего домена
accept authenticated = *
domains = +local_domains
message = "Unknown user"
verify = recipient
# Белые списки
# Принимаем от пользователей (E-Mail'ов), которым мы посылали сообщения (10 дней максимум) 0 - Нет записи, 1 - Принимаем, 2 - Срок истёк.
warn set acl_m19 = ${lookup mysql{MYSQL_TESTCLIENTMYLIST}{$value}{0}}
accept domains = +local_domains
condition = ${if eq{$acl_m19}{1}{yes}{no}}
endpass
message = "Unknown user"
verify = recipient
Код: Выделить всё
54614 processing "warn"
54614 check authenticated = *
54614 auth_plain in "*"? yes (matched "*")
54614 expanding: SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='$sender_address' AND dst_email='$acl_m4@$acl_m5'
54614 result: SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='sysadmin@domain.off' AND dst_email='sysadmin@domain.off'
54614 search_open: mysql "NULL"
54614 search_find: file="NULL"
54614 key="SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='sysadmin@domain.off' AND dst_email='sysadmin@domain.off'" partial=-1 affix=NULL starflags=0
54614 LRU list:
54614 ;/etc/aliases
54614 @/usr/local/etc/exim/lists/local_domains
54614 End
54614 internal_search_find: file="NULL"
54614 type=mysql key="SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='sysadmin@domain.off' AND dst_email='sysadmin@domain.off'"
54614 database lookup required for SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='sysadmin@domain.off' AND dst_email='sysadmin@domain.off'
54614 MySQL query: SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='sysadmin@domain.off' AND dst_email='sysadmin@domain.off'
54614 MYSQL new connection: host=localhost port=0 socket=NULL database=exim user=exim
54614 MYSQL: no data found
54614 lookup failed
54614 expanding: $value
54614 result:
54614 skipping: result is not used
54614 expanding: 0
54614 result: 0
54614 expanding: ${lookup mysql{SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='$sender_address' AND dst_email='$acl_m4@$acl_m5'}{$value}{0}}
54614 result: 0
54614 check set acl_m19 = ${lookup mysql{SELECT CASE WHEN now() - record_expires > 0 THEN 2 ELSE 1 END FROM auto_whitelist WHERE src_email='$sender_address' AND dst_email='$acl_m4@$acl_m5'}{$value}{0}}
54614 = 0
54614 warn: condition test succeeded
54614 processing "warn"
54614 check authenticated = *
54614 auth_plain in "*"? yes (matched "*")
54614 expanding: $acl_m3
54614 result: domain.off
54614 expanding:
54614 result:
54614 expanding: $acl_m19
54614 result: 0
54614 skipping: result is not used
54614 expanding: 0
54614 result: 0
54614 skipping: result is not used
54614 condition: and {{eq{$acl_m3}{}}{!eq{$acl_m19}{0}}}
54614 result: false
54614 expanding: yes
54614 result: yes
54614 skipping: result is not used
54614 expanding: no
54614 result: no
54614 expanding: ${if and {{eq{$acl_m3}{}}{!eq{$acl_m19}{0}}}{yes}{no}}
54614 result: no
54614 check condition = ${if and {{eq{$acl_m3}{}}{!eq{$acl_m19}{0}}}{yes}{no}}
54614 = no
54614 warn: condition test failed
54614 processing "warn"
54614 check authenticated = *
54614 auth_plain in "*"? yes (matched "*")
54614 expanding: $acl_m3
54614 result: domain.off
54614 expanding:
54614 result:
54614 expanding: $acl_m19
54614 result: 0
54614 skipping: result is not used
54614 expanding: 0
54614 result: 0
54614 skipping: result is not used
54614 condition: and {{eq{$acl_m3}{}}{eq{$acl_m19}{0}}}
54614 result: false
54614 expanding: yes
54614 result: yes
54614 skipping: result is not used
54614 expanding: no
54614 result: no
54614 expanding: ${if and {{eq{$acl_m3}{}}{eq{$acl_m19}{0}}}{yes}{no}}
54614 result: no
54614 check condition = ${if and {{eq{$acl_m3}{}}{eq{$acl_m19}{0}}}{yes}{no}}
54614 = no
54614 warn: condition test failed
54614 processing "accept"
P.S. В оригинальном конфиге на самом верху acl_check_rcpt стоит
Код: Выделить всё
accept authenticated = *
domains = +local_domains
endpass
message = "Unknown user"
verify = recipient