3

我正在使用 net-ldap 的rename方法将用户从一个 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 服务器。添加,删除,更新等都按预期工作。只是重命名有问题。

4

1 回答 1

1

终于找到了答案。问题在于 gem 对 的true值进行编码的方式delete_attributes,因此它从未收到删除旧 RDN 的消息。我克隆了自己的 gem 副本并进行了以下更改:

文件: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

这个解决方案可以在gem的Issue #31中找到。

于 2014-05-08T22:22:56.483 回答