Dovecot SQL 身份验证:如何区分 IMAP 和 POP3 访问?

Dovecot SQL 身份验证:如何区分 IMAP 和 POP3 访问?

我们目前正在运行 courier,它使我们能够为 IMAP 和 POP3 设置不同的 SQL userdb 查询。我们需要这样做,因为我们不想让所有用户都拥有 IMAP 访问权限,如果设置了 userdb 中的布尔列,它将允许 IMAP 访问。

出于性能和稳定性的原因,我们目前正在迁移到 dovecot。我发现还没有办法根据 POP3 或 IMAP 访问设置不同的 SQL 查询 - 或者将访问方法作为变量传递给 SQL 查询。这两种方法都可以。

以下是来自 courier 的相关 mysql 配置:

MYSQL_SELECT_CLAUSE SELECT \
  username,password_enc,password,uid,gid,homedir,maildir,'',CONCAT(\
    IF(isimap=1 OR '$(service)'='webmail','disableimap=0,','disableimap=1,'),\
    'disablepop3=0,disablewebmail=0'\
  )\
  FROM mail_users WHERE username = '$(local_part)@$(domain)'

服务变量来自守护进程配置文件。dovecot 中是否有类似的东西?

答案1

您可以使用%s变量来检查正在请求的服务。请参阅http://wiki2.dovecot.org/Variables

类似这样的 SQL 查询可以为你工作:

SELECT
  '%u' AS username, '%d' AS domain,
  password, uid, gid, homedir AS home
FROM mail_users
WHERE
  CONCAT('%u', '@', '%d') = username'' AND
  (isimap=1 OR '%s' <> 'imap')

-菲尔

相关内容