Dovecot: usando um passdb separado por serviço

Dovecot: usando um passdb separado por serviço

Situação: um servidor frontal executando o Dovecot como proxy IMAP/POP3/ManageSieve, uma mistura de servidores IMAP (Dovecot, Exchange, ...) no back-end. O passdb do Dovecot faz pesquisas no MySQL que contém um mapeamento simples de usuário/host, a autenticação real acontece nos servidores IMAP back-end. A configuração é mais ou menos como descrita aqui:http://wiki2.dovecot.org/PasswordDatabase/ExtraFields/Proxy

Agora eu gostaria de adicionar uma instância Postfix no servidor frontal que escuta na porta de envio e autentica usuários via SASL usando o soquete UNIX do Dovecot local. A ideia é que um usuário só precise se lembrar de um único nome de host, um nome de usuário e uma senha para todos os serviços relacionados a correio.

O problema é que o Dovecot está operando em modo proxy, o que significa que password_query retorna NULL como senha e retorna explicitamente um campo "nopasswd" contendo "Y". Assim, os usuários não podem autenticar no soquete UNIX.

O que acho que quero fazer é convencer o Dovecot a usar um passdb para os serviços imap/pop3/managesieve e outro diferente para o serviço "auth".

O trecho de configuração abaixo não funciona, mas deve ilustrar o que desejo alcançar:

protocols = imap pop3 sieve

service auth {
    passdb sql {
        driver = sql
        args = /etc/dovecot/mysql-auth-sasl.conf.ext
    }

    unix_listener /var/spool/postfix/private/auth {
        user = postfix
        group = postfix
        mode = 0666
    }
}

# IMAP/POP3/ManageSieve auth against MySQL
passdb sql {
    driver = sql
    args = /etc/dovecot/mysql-auth-default.conf.ext
}

Exemplo mysql-auth-sasl.conf.ext

driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT password AS password FROM users WHERE login = '%u'

Exemplo mysql-auth-default.conf.ext:

driver = mysql
connect = host=127.0.0.1 dbname=mail user=mail password=somethingrandom
password_query = SELECT NULL AS password, 'Y' as nopassword, host, 'Y' AS proxy FROM users WHERE login = '%u'

Alguma indicação?

informação relacionada