我正在使用net-ldap的rename
方法将用户从一个OU移动到另一个OU;但是,我收到“必须删除旧RDN”错误:
#<OpenStruct code=53, error_message="00002035: Unwilling to perform. Old RDN must be deleted", matched_dn="", message="Unwilling to perform">
这是我创建的方法:
def self.move(user, group)
new_rdn = "CN=#{user.cn.first}"
new_superior = "OU=#{group},OU=People,DC=example,DC=com"
ldap_connection.rename(
olddn: user.dn,
newrdn: new_rdn,
delete_attributes: true,
new_superior: new_superior
)
end
尝试仅更改RDN
(CN)时也会发生相同的响应。正在联系的服务器是Samba4服务器。添加,删除,更新等都按预期工作。只在重命名时遇到问题。
答案 0 :(得分:1)
true
编码delete_attributes
值的方式,因此它永远不会收到删除旧RDN的消息。我克隆了自己的宝石副本并进行了以下更改:
档案:lib/net/ber/core_ext/true_class.rb
def to_ber
"\x01\x01\xFF".force_encoding("ASCII-8BIT")
end
false
的代码也可以更改(我没有任何地方,我自己使用“假”)。
档案:lib/net/ber/core_ext/false_class.rb
def to_ber
"\x01\x01\x00".force_encoding("ASCII-8BIT")
end
此解决方案可在Issue #31中找到。