Назад | Перейти на главную страницу

Поиск exim`a lsearch в нескольких файлах одновременно

Мне нужно, чтобы exim просматривал несколько файлов в поиске lsearch, останавливаясь, когда найдено первое совпадение.

Чтобы быть более конкретным, у меня есть /etc/exim/plain1 и /etc/exim/plain2 которые содержат данные аутентификатора.

Мое текущее решение работает только с одним файлом:

PLAIN:
  driver = plaintext
  client_send = ${lookup{$sender_address}lsearch{/etc/exim/plain1}}

Как я могу расширить это, чтобы также проверить /etc/exim/plain2?

Ты можешь использовать ИЛИ состояние:

client_send = ${or {lookup{$sender_address}lsearch{/etc/exim/plain1}} \
                   {lookup{$sender_address}lsearch{/etc/exim/plain2}} }

Exim оценивать условия слева направо до выхода текущего условия true и его результат вернулся. Если истинных подусловий не найдено, то все условие дает false и возвращается пустой результат.

См. Главу 11.8. exim's Технические характеристики.

На данный момент я решил это, обернув один lookup в другое вроде этого:

  client_send = ${lookup{$sender_address}lsearch{/etc/exim/plain1}{$value}\
               {${lookup{$sender_address}lsearch{/etc/exim/plain2}}}}

Это может быть расширено до большего количества поисков путем дальнейшего обертывания:

  client_send = ${lookup{$sender_address}lsearch{/etc/exim/plain1}{$value}\
               {${lookup{$sender_address}lsearch{/etc/exim/plain2}{$value}\
               {${lookup{$sender_address}lsearch{/etc/exim/plain3}}}}}

Хотя было бы неплохо, если бы lsearch мог бы принять список файлов и поиск в них последовательно ..