Подтвердить что ты не робот

Как получить удаленные объекты из Active Directory с помощью Ruby?

Из исследования, которое я сделал, кажется, мне нужно отправить специальный OID с моим запросом (1.2.840.113556.1.4.417), чтобы получить доступ к контейнеру "Удаленные объекты".

Я не мог найти способ отправить конкретный элемент управления с запросом с помощью "net-ldap" gem. Кто-нибудь знает, возможно ли это?

Есть еще один gem, ruby-ldap, который выглядит более гибким и кажется, что я могу отправлять элементы управления с моим запросом (например, используя метод search_ext2()).

Однако, что бы я ни старался, я не возвращаю никаких объектов, хотя я знаю, что они еще не были собраны в мусор.

Я включил фильтр "isDeleted = TRUE" с моими запросами.

4b9b3361

Ответ 1

ОК, я, наконец, понял это. Нужно использовать драгоценный камень ruby-ldap. Причина, по которой мои элементы управления не были отправлены, состояла в том, что версия протокола 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, если хотите.