系统: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
%{env:VAR} 扩展有些缺陷:如果 getenv(VAR) 返回 NULL,dovecot 会回退到标准短变量扩展,尝试扩展 %{。由于显而易见的原因,这会失败。
怎么修:
向单元文件添加环境选项,即:
Environment=CLUSTERNAME=mail.mydomain.com
允许在 dovecot.conf 中导入环境变量:
import_environment = CLUSTERNAME
使用类似
%{env:CLUSTERNAME}