Dovecot
Dovecot 變數擴展
系統:Debian Jessie
我正在嘗試在 sql 配置中放置一個環境變數,例如:
password_query = SELECT userid AS user, crypt AS password, maildir as userdb_home, 500 as userdb_uid, 500 as userdb_gid FROM local_account WHERE userid = '%u' and mbox_host = '%{env:CLUSTERNAME}' \ and ( ( imap_aktiv='1' and '%s'='imap' ) or ( pop_aktiv='1' and '%s'='pop3' ) or ( sieve_aktiv='1' and '%s'='sieve' ) ) \ and aktiv_abruf='1'
我的變數是
%{env:CLUSTERNAME}
CLUSTERNAME 通過 /etc/default/dovecot 設置。我嘗試將 import_environment 配置變數設置為
TZ CLUSTERNAME
但這並沒有改變。
當我通過登錄嘗試執行此操作時,我在 tcpflow 輸出中看到以下內容:
SELECT userid AS user, crypt AS password, maildir as userdb_home, 508 as userdb_uid, 503 as userdb_gid FROM local_account WHERE userid = 'te' and mbox_host = 'env:CLUSTERNAME}' and ( ( imap_aktiv='1' and 'pop3'='imap' ) or ( pop_aktiv='1' and 'pop3'='pop3' ) or ( sieve_aktiv='1' and 'pop3'='sieve' ) ) and aktiv_abruf='1'
所以
%{env:CLUSTERNAME}
被解析為
env:CLUSTERNAME}
這不是文件(http://wiki.dovecot.org/Variables)所說的,而且解析器似乎也以某種方式將其視為一個短變數(刪除 %+{)。
任何提示這裡可能發生的事情/我如何使它工作?
以供參考:
問題是雙重的:
- systemd 單元文件不支持 /etc/default/dovecot
- %{env:VAR} 擴展有些缺陷:如果 getenv(VAR) 返回 NULL,dovecot 會退回到嘗試擴展 %{ 的標準短變數擴展。由於明顯的原因,這失敗了。
怎麼修:
- 在單元文件中添加環境選項,即:
Environment=CLUSTERNAME=mail.mydomain.com
2. 允許在 dovecot.conf 中導入環境變數:
import_environment = CLUSTERNAME
3. 使用喜歡
%{env:CLUSTERNAME}