我需要让 Exim 在 lsearch 查找中遍历多个文件,并在找到第一个匹配项时停止。
更具体地说,我有/etc/exim/plain1
并/etc/exim/plain2
包含身份验证器数据。
我当前的解决方案仅适用于一个文件:
PLAIN:
driver = plaintext
client_send = ${lookup{$sender_address}lsearch{/etc/exim/plain1}}
我怎样才能扩展它以进行检查/etc/exim/plain2
?
答案1
您可以使用或者健康)状况:
client_send = ${or {lookup{$sender_address}lsearch{/etc/exim/plain1}} \
{lookup{$sender_address}lsearch{/etc/exim/plain2}} }
Exim
从左到右评估条件,直到当前条件成立true
并返回其结果。如果没有发现真子条件,则整个条件成立false
并返回空结果。
参考exim's
规范的第11.8章。
答案2
现在我通过将一个包装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
但如果能接受的话,那就太好了列表文件并按顺序在其中查找..