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

if + lookup непонятно работает

Добавлено: 2007-09-27 19:17:17
Wombat
Создал "макрос"

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

MYSQL_GET_SPAM_REJECT_THRESHOLD = \
SELECT u.spam_reject_threshold FROM users u INNER JOIN domains d ON u.domain_id=d.domain_id \
WHERE u.user_name='${quote_mysql:$local_part}' AND d.domain_name='${quote_mysql:$domain}' \
AND d.domain_is_enabled=1 AND u.is_smtp_enabled=1 AND u.antispam_is_enabled=1
Сам запрос проверял через БД. Возвращает значение 30.00 (поле float)

Добавляю в ACL:

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

# reject messages that scored spam reject threshold
     deny message = Message has scored $spam_score spam points. Rejecting.
             condition = ${if >={$spam_score_int}{${lookup mysql{MYSQL_GET_SPAM_REJECT_THRESHOLD}{$value}{500}}}{true}{false}}
В результате всегда срабатывает сравнение с 500. Письма с spam score 2.9 проходят, с 1002.9 (GTUBE) не проходят. Также пробовал ставить вместо 500 единицу - режет все письма со spam score > 1

Сейчас успешно работает такое правило

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

condition = ${if >={$spam_score_int}{500}{true}{false}}
Пробовал установить 50.00 вместо 500. В результате ошибка:

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

2007-09-27 11:02:52 1Iavp7-000188-GU H=example.com [xx.xx.xx.xx] I=[xx.xx.xx.xx]:25 F=<mail@examlpe.com> temporarily rejected after DATA: failed to expan
d ACL string "${if >={$spam_score_int}{50.00}{true}{false}}": invalid integer "50.00"
Проблема в запросе? Подскажите плз, как отладить ее?

Re: if + lookup непонятно работает

Добавлено: 2007-09-27 23:54:35
Alex Keda
ничерта непонял, но насколько я помню документацию exim работает тока с целыми числами.
если надо с нецелыми - сравнивай в мусе и на выход двавай результата - 0/1

Re: if + lookup непонятно работает

Добавлено: 2007-10-08 15:52:48
Wombat
Как оказалось, В ACL DATA недоступны переменные “$domain” и “$local_part”. http://www.lissyara.su/?id=1239#39.11
В случае RCPT (но не MAIL или DATA), “$domain” и “$local_part” установлены из аргументов адреса.
А проверка спамассассина - это разновидность ACL DATA, следовательно, переменные $domain и $local_part недоступны.

Пришлось устанавливать кастомные меременные $acl_m[x]:
http://www.lissyara.su/?id=1239#39.15

Хочу предупредить всех желающих воспользоваться переменными $acl_m[x] (и не до конца понимающих смысл всего написанного в секции ACL), что их желательно устанавливать в секции ACL перед любыми конструкциями "accept". Потому что если выполняется условие, указанное в accept, дальше список ACL обрабатываться не будет и переменные установлены не будут.