2015-06-03 26 views
12

Dalla ricerca che ho fatto, sembra che ho bisogno di inviare un OID speciale con la mia richiesta (1.2.840.113556.1.4.417) per accedere al contenitore Oggetti cancellati.Come posso recuperare oggetti cancellati da Active Directory con Ruby?

Non sono riuscito a trovare un modo per inviare un controllo specifico con una richiesta utilizzando la gemma "net-ldap". Qualcuno sa se questo è possibile?

C'è un'altra gemma, ruby-ldap, che sembra essere più flessibile e sembra che io possa inviare controlli con la mia richiesta (ad esempio utilizzando il metodo search_ext2()).

Tuttavia, non importa quello che provo, non sto recuperando alcun oggetto, anche se so che non sono ancora stati raccolti.

Sto includendo anche il filtro "isDeleted = TRUE" con le mie richieste.

risposta

3

OK, ho finalmente capito. Uno dovrà usare la gemma ruby-ldap. Il motivo per cui i miei controlli non venivano inviati era perché la versione del protocollo LDAP (LDAP::LDAP_OPT_PROTOCOL_VERSION) era impostata su V2 e apparentemente doveva essere v3.

Il seguente è un frammento che funziona:

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) 

Il filtro (isDeleted=*) non è necessariamente richiesto, si potrebbe anche usare semplicemente (objectClass=*). È anche possibile utilizzare l'ambito LDAP::LDAP_SCOPE_ONELEVEL se lo si desidera.

Problemi correlati