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) 说,而且解析器似乎也以某种方式将其视为一个短变量(删除 %+{)。

有什么提示这里可能发生什么/我如何才能让它发挥作用?

答案1

以供参考:

问题有两个方面:

  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}

相关内容