如果我读到使用 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,对于某些可能只是我的一个简单误解的事情,深入研究其内部机制似乎有点误导?