如何使用 Ruby 从 Active Directory 中检索已删除的对象?
How can I retrieve deleted objects from Active Directory with Ruby?
根据我所做的研究,我似乎需要在请求 (1.2.840.113556.1.4.417) 中发送一个特殊的 OID 才能访问已删除对象容器。
我找不到使用 "net-ldap" gem 发送带有请求的特定控件的方法。有谁知道这是否可能?
还有另一个 gem、ruby-ldap,它似乎更灵活,而且我 可以 发送带有我的请求的控件(例如使用 search_ext2() 方法)。
但是,无论我尝试什么,我都没有取回任何对象,即使我知道它们还没有被垃圾回收。
我也在请求中包含过滤器 "isDeleted=TRUE"。
您尝试过 isDeleted=* 吗?
好的,我终于想通了。一会需要用到ruby-ldap
gem。我的控件未被发送的原因是因为 LDAP 协议版本 (LDAP::LDAP_OPT_PROTOCOL_VERSION
) 默认为 v2,显然它必须是 v3。
以下是有效的片段:
require 'ldap'
conn = LDAP::Conn.new('yourserver.example.com', 389)
conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
conn.bind("CN=Administrator,CN=Users,DC=example,DC=com", "sekritpass")
# controlType: 1.2.840.113556.1.4.417 (LDAP_SERVER_SHOW_DELETED_OID)
control = LDAP::Control.new('1.2.840.113556.1.4.417')
conn.search_ext2('CN=Deleted Objects,DC=example,DC=com', LDAP::LDAP_SCOPE_SUBTREE, "(isDeleted=*)", nil, false, [control], nil)
过滤器 (isDeleted=*)
不是必需的,您也可以简单地使用 (objectClass=*)
。如果需要,您还可以使用范围 LDAP::LDAP_SCOPE_ONELEVEL
。
根据我所做的研究,我似乎需要在请求 (1.2.840.113556.1.4.417) 中发送一个特殊的 OID 才能访问已删除对象容器。
我找不到使用 "net-ldap" gem 发送带有请求的特定控件的方法。有谁知道这是否可能?
还有另一个 gem、ruby-ldap,它似乎更灵活,而且我 可以 发送带有我的请求的控件(例如使用 search_ext2() 方法)。
但是,无论我尝试什么,我都没有取回任何对象,即使我知道它们还没有被垃圾回收。
我也在请求中包含过滤器 "isDeleted=TRUE"。
您尝试过 isDeleted=* 吗?
好的,我终于想通了。一会需要用到ruby-ldap
gem。我的控件未被发送的原因是因为 LDAP 协议版本 (LDAP::LDAP_OPT_PROTOCOL_VERSION
) 默认为 v2,显然它必须是 v3。
以下是有效的片段:
require 'ldap'
conn = LDAP::Conn.new('yourserver.example.com', 389)
conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
conn.bind("CN=Administrator,CN=Users,DC=example,DC=com", "sekritpass")
# controlType: 1.2.840.113556.1.4.417 (LDAP_SERVER_SHOW_DELETED_OID)
control = LDAP::Control.new('1.2.840.113556.1.4.417')
conn.search_ext2('CN=Deleted Objects,DC=example,DC=com', LDAP::LDAP_SCOPE_SUBTREE, "(isDeleted=*)", nil, false, [control], nil)
过滤器 (isDeleted=*)
不是必需的,您也可以简单地使用 (objectClass=*)
。如果需要,您还可以使用范围 LDAP::LDAP_SCOPE_ONELEVEL
。