仅为一个用户配置两个 dovecot 实例之间的 dsync?

仅为一个用户配置两个 dovecot 实例之间的 dsync?

如果我读到使用 dsync 进行复制是正确的,在两个邮件服务器之间同步一个用户的文件夹的目标应该可以通过确保用户数据库返回noreplicate除一个用户之外的所有用户,或仅为mail_replica一个感兴趣的用户设置。我尝试过两种方法,如下所示。

设置auth_debug = yes表示这些字段将被拾取,无论我使用 sqlite 还是 lua用户数据库。下面的配置深受启发基于Lua的身份验证,比sqlite更干净,相关部分如下:

passdb {
  driver = pam
}

userdb {
  driver = lua
  args = file=/etc/dovecot/userdb.lua blocking=yes
  result_success = return-ok
}

userdb {
  driver = passwd
  skip = found
}
---@diagnostic disable: lowercase-global,undefined-global
local syncuser = "someuser"

function auth_userdb_lookup(req)
  local fields = "uid=" .. req.user .. " " ..
      "gid=mail " ..
      "home=/home/" .. req.user .. " " ..
      "mail=maildir:/var/mail/%u"
  if req.user == syncuser then
    return dovecot.auth.USERDB_RESULT_OK, fields ..
        -- might be invalid syntax, but we're not getting this far...
        " mail_replica=remote:[email protected]"
  else
    return dovecot.auth.USERDB_RESULT_OK, fields ..
        " noreplicate=yes"
  end
end

function script_init()
  return 0
end

function script_deinit()
end

function auth_userdb_iterate()
  return {syncuser}
end

我对上述情况的预期是,同步尝试仅发生在 某些用户,但doveadm log errors很快就被淹没(对于其他用户来说某些用户):

错误:doveadm(…):同步:用户在 userdb 中没有 mail_replica

我也希望doveadm user '*'只展示某些用户因为这是返回的唯一值auth_userdb_iterate(),但是它却给了我系统上的所有用户。

lua代码使用推荐的Dovecot 设置类型有点布尔值,因为它最有意义。我试过lua 风格 真的1结果也没什么区别。

虽然我意识到错误信息来自doveadm-dsync.c,对于某些可能只是我的一个简单误解的事情,深入研究其内部机制似乎有点误导?

相关内容