Ruby NetLdap - 在Samba4中将用户条目从一个容器移动到另一个容器

时间:2014-01-09 23:19:36

标签: ruby active-directory ldap samba netldap

我正在使用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服务器。添加,删除,更新等都按预期工作。只在重命名时遇到问题。

1 个答案:

答案 0 :(得分:1)

终于找到了答案。问题是gem为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中找到。