Dovecot

Dovecot 變數擴展

  • April 16, 2016

系統: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)所說的,而且解析器似乎也以某種方式將其視為一個短變數(刪除 %+{)。

任何提示這裡可能發生的事情/我如何使它工作?

以供參考:

問題是雙重的:

  1. systemd 單元文件不支持 /etc/default/dovecot
  2. %{env:VAR} 擴展有些缺陷:如果 getenv(VAR) 返回 NULL,dovecot 會退回到嘗試擴展 %{ 的標準短變數擴展。由於明顯的原因,這失敗了。

怎麼修:

  1. 在單元文件中添加環境選項,即:

Environment=CLUSTERNAME=mail.mydomain.com 2. 允許在 dovecot.conf 中導入環境變數:

import_environment = CLUSTERNAME 3. 使用喜歡

%{env:CLUSTERNAME}

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