Мне нужно, чтобы 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
мог бы принять список файлов и поиск в них последовательно ..