Exim

Exim lsearch 同時在多個文件中查找

  • April 15, 2017

我需要讓 Exim 在 lsearch 查找中遍歷多個文件,在找到第一個匹配項時停止。

更具體地說,我有/etc/exim/plain1並且/etc/exim/plain2其中包含身份驗證器數據。

我目前的解決方案僅適用於一個文件:

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

我如何將其擴展為也檢查/etc/exim/plain2

現在我通過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可以接受文件列表並按順序查找它們,那就太好了。

您可以使用OR條件:

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

Exim從左到右評估條件,直到目前條件產生true並返回其結果。如果沒有找到真正的子條件,則整個條件產生false並返回空結果。

請參閱規範的第 11.8 章exim's

引用自:https://serverfault.com/questions/843448