2015-06-03 16 views
12

Từ nghiên cứu tôi đã thực hiện, có vẻ như tôi cần gửi một OID đặc biệt theo yêu cầu của tôi (1.2.840.113556.1.4.417) để truy cập vào thùng chứa Đối tượng đã xóa.Làm thế nào tôi có thể lấy các đối tượng đã xóa từ Active Directory với Ruby?

Tôi không thể tìm cách gửi điều khiển cụ thể với yêu cầu bằng đá quý "net-ldap". Có ai biết nếu điều này là có thể?

Có một gem, ruby-ldap khác, có vẻ linh hoạt hơn và có vẻ như tôi có thể gửi điều khiển theo yêu cầu của tôi (ví dụ: sử dụng phương thức search_ext2()).

Tuy nhiên, không có vấn đề gì tôi cố gắng, tôi không nhận lại bất kỳ đối tượng nào, mặc dù tôi biết họ chưa được thu gom rác.

Tôi cũng bao gồm bộ lọc "isDeleted = TRUE" cùng với các yêu cầu của tôi.

Trả lời

3

OK, cuối cùng tôi đã tìm ra. Người ta sẽ cần phải sử dụng đá quý ruby-ldap. Lý do các điều khiển của tôi không được gửi là vì Phiên bản Giao thức LDAP (LDAP::LDAP_OPT_PROTOCOL_VERSION) đã được mặc định là v2 và dường như nó phải là v3.

Sau đây là một đoạn hoạt động:

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) 

Bộ lọc (isDeleted=*) không nhất thiết phải cần thiết, bạn cũng có thể chỉ cần sử dụng (objectClass=*). Bạn cũng có thể sử dụng phạm vi LDAP::LDAP_SCOPE_ONELEVEL nếu muốn.

0

Bạn đã thử isDeleted = * thay thế chưa?

https://technet.microsoft.com/en-us/library/cc978013.aspx

+0

Vâng, tôi cũng đã thử điều đó; cùng một kết quả. Không có đối tượng nào được trả lại. –

+0

Cảm ơn bạn đã thử Joshua, bạn có thể có tiền thưởng –

+0

Cảm ơn! - xin lỗi nó không giúp được gì nhiều. – Joshua

Các vấn đề liên quan