Sistema: Debian Jessie
Estou tentando colocar uma variável de ambiente na configuração do sql como:
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'
minha variável é
%{env:CLUSTERNAME}
CLUSTERNAME é definido por meio de /etc/default/dovecot. Eu tentei definir a variável de configuração import_environment para
TZ CLUSTERNAME
mas isso não mudou nada.
Quando executo isso por meio de uma tentativa de login, vejo o seguinte na saída do 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'
Então
%{env:CLUSTERNAME}
foi analisado para
env:CLUSTERNAME}
que não é o que o documento ( http://wiki.dovecot.org/Variables ) diz, e também parece que o analisador de alguma forma vê isso como uma variável curta (removendo %+{).
Alguma dica do que pode estar acontecendo aqui / como posso fazer funcionar?
Para referência:
O problema é duplo:
/etc/default/dovecot não é honrado pelo arquivo de unidade systemd
A expansão %{env:VAR} é um tanto falha: se getenv(VAR) retorna NULL dovecot retorna para a expansão de variável curta padrão que tenta expandir %{. Isso falha por razões óbvias.
Como consertar:
Adicione a opção de ambiente ao arquivo de unidade, ou seja:
Environment=CLUSTERNAME=mail.mydomain.com
Permitir a importação da variável de ambiente em dovecot.conf:
import_environment = CLUSTERNAME
usar como
%{env:CLUSTERNAME}