最近我一直在努力让 slapd syncrepl 使用 LDAP 后端(基于推送的复制)工作。虽然使用 syncrepl 执行基于拉取的操作取得了很好的效果,但基于推送的操作却让我很头疼。
当我启动 slapd 时,我遇到以下输出问题:syncrepl_message_to_entry:rid=700 mods check(pwdAttribute:值 #0 不符合语法)
重点关注我的默认密码策略。我看过关于此类似问题的其他消息,但大多数都没有答案,所以我希望我一定忽略了一些相当简单的事情。
我正在使用 olc 数据库运行这个 slapd(2.4.35)实例,以及以下相关参数:
objectClass: olcDatabaseConfig
objectClass: oldLDAPConfig
olcDatabase: {1}ldap
olcDbACLBind: bindmethod=simple binddn="cn=Directory Manager" credentials="xxxxxxx"
olcDbOnErr: continue
oldDbUri: ldap://mysatelliteldapserver
oldSyncrepl: rid=700 provider=ldaps://masterldapserver.mydomain.com:636 bindmethod=simple binddn="cn=Directory Manager" credentials="xxxxxxxx" filter="(objectclass=*)" searchbase="dc=my,dc=base" scope=sub schemachecking=off type=refreshOnly interval=00:00:05:00
它应该从“masterldapserver”拉取并推送到“mysatelliteldapserver”。这一直有效,直到它达到我的密码策略,然后它得到:
syncrepl_message_to_entry: rid=700 mods check (pwdAttribute: value #0 invalid per syntax)
这完全是骗人的。我甚至在目标卫星服务器上预先配置了密码策略,然后重新启动了复制。
来源明确表明:
pwdAttribute: userPassword
但返回的值是#0(在其他时候我将其与“空”值关联起来)。
所以,问题是,有没有其他人遇到过这种情况,是否有人对某种类型的修复或解决方法提出建议?
提前致谢
答案1
'值 #0' 不是值本身。它表示第 0 个值。
尝试将其更改为“userPassword”的 OID,或者也许您没有在从属服务器中加载正确的模式以使其知道是什么userPassword
。
答案2
我赞同@EJP 的回答:要么消费者缺少编译选项(比如{CRYPT}
密码支持,必须作为编译选项启用)要么缺少模块(比如密码支持,{SHA256}
需要{PDKDF2-SHA*}
同时编译模块和插入模块cn=config
)。
这是因为消费者缺少对提供商使用的散列模式的支持。