Решено: exim и формат condition в разделе router

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

Аватара пользователя
skeletor
Сообщения: 1224

Решено: exim и формат condition в разделе router

Сообщение skeletor »

Собственно сам router:

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

ditch_hdrmailer:
  driver = redirect
  allow_fail
  data = :blackhole:
  condition = ${if eq {${lookup mysql{select count(*) from blocklists,users,domains \
                        where blocklists.blockhdr = 'x-mailer' \
                        and blocklists.blockval = '${quote_mysql:$h_x-mailer:}' \
                        and users.localpart = '${quote_mysql:$local_part}' \
                        and domains.domain = '${quote_mysql:$domain}' \
                        and domains.domain_id=blocklists.domain_id \
                        and users.user_id=blocklists.user_id}}}{1} {yes}{no}}
  local_part_suffix = -*
  local_part_suffix_optional
  retry_use_local_part

Хочу немного изменить условие

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

and blocklists.blockval = '${quote_mysql:$h_x-mailer:}'

вместо равно поставить что-то наподобие like из mysql (типа совпадение по подстроке). Как это правильно сделать? Да и вообще какие операции, кроме равно можно использовать в это куске?
Спасибо сказали:
neol
Сообщения: 600
ОС: Debian Stable

Re: Решено: exim и формат condition в разделе router

Сообщение neol »

Так это и есть MySQL запрос, соответственно можно все, что позволяет синтаксис MySQL. Например что-то вроде
and blocklists.blockval like '${quote_mysql:%$h_x-mailer:%}'
должно отработать.
Спасибо сказали:
Аватара пользователя
skeletor
Сообщения: 1224

Re: Решено: exim и формат condition в разделе router

Сообщение skeletor »

Спасибо. Заработало вот так:

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

'${quote_mysql:$h_x-mailer:}' like concat('%',blocklists.blockval,'%')

Ну и ещё один вариант

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

blocklists.blockval RLIKE REPLACE('${quote_mysql:$h_x-mailer:}'," ","|")

Правда первый мне кажется будет выполняться быстрее, так как во втором регулярные выражения и ещё оператор replace. Второй вариант пригоден только для сравнения строк с пробелами.
Спасибо сказали: