2014-01-09 3 views
3

net-ldap의 rename 메서드를 사용하여 하나의 OU에서 다른 OU로 사용자를 이동합니다. 내가 만든 방법 여기Ruby NetLdap - Samba4에서 한 컨테이너에서 다른 컨테이너로 사용자 항목 이동

#<OpenStruct code=53, error_message="00002035: Unwilling to perform. Old RDN must be deleted", matched_dn="", message="Unwilling to perform"> 

것 : 그냥 RDN (CN)를 변경하려고 할 때 같은 응답이 발생

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은 삭제해야합니다"오류를 얻고있다 잘. 연결할 서버는 Samba4 서버입니다. 추가, 삭제, 업데이트 등은 모두 예상대로 작동합니다. 이름 바꾸기에만 문제가 있습니다.

+1

이름 바꾸기/수정 _ 예를 주셔서 감사합니다. 이 방법은 어떤 이유로 든 net-ldap에 문서화되지 않았습니다. –

답변

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의 코드는 (내가 나 자신을 "false"를 사용하는 곳이없는 변경 될 수 있습니다).

파일 : lib/net/ber/core_ext/false_class.rb

def to_ber 
    "\x01\x01\x00".force_encoding("ASCII-8BIT") 
end 

이 솔루션은 보석에 대한 Issue #31에서 찾을 수 있습니다.

관련 문제