Есть такой вопрос: как в AD получить список групп, в которые входит заданная группа?
Для пользователей понятно: IADsUser->Groups, а вот для IADsGroup такого свойства нет
Здравствуйте, Андрей, Вы писали:
А>Всем доброго времени суток!
А>Есть такой вопрос: как в AD получить список групп, в которые входит заданная группа? А>Для пользователей понятно: IADsUser->Groups, а вот для IADsGroup такого свойства нет
Добрый день!
Я думаю, можно прочитать атрибут memberOf у объекта группы (см. http://msdn.microsoft.com/en-us/library/ms676913(v=vs.85).aspx)
Если не поможет (не знаю, по каким причинам), то сделать LDAP запрос по аттрибуту member.
Если что не понятно, спрашивайте.
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
А>>Всем доброго времени суток!
А>>Есть такой вопрос: как в AD получить список групп, в которые входит заданная группа? А>>Для пользователей понятно: IADsUser->Groups, а вот для IADsGroup такого свойства нет LD>Добрый день! LD>Я думаю, можно прочитать атрибут memberOf у объекта группы (см. http://msdn.microsoft.com/en-us/library/ms676913(v=vs.85).aspx) LD>Если не поможет (не знаю, по каким причинам), то сделать LDAP запрос по аттрибуту member. LD>Если что не понятно, спрашивайте.
ok, большое спасибо
правда, я что-то никак не пойму, как этот атрибут прочитать
если не сложно — можно ссылочку на то, как работать с атрибутами AD из C++?
Здравствуйте, Андрей, Вы писали:
А>ok, большое спасибо А>правда, я что-то никак не пойму, как этот атрибут прочитать А>если не сложно — можно ссылочку на то, как работать с атрибутами AD из C++?
См. здесь: http://msdn.microsoft.com/en-us/library/aa746348(v=VS.85).aspx
Обратите внимание на использование GetEx и доступ к элементам multi-value атрибута.
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
А>>ok, большое спасибо А>>правда, я что-то никак не пойму, как этот атрибут прочитать А>>если не сложно — можно ссылочку на то, как работать с атрибутами AD из C++? LD>См. здесь: http://msdn.microsoft.com/en-us/library/aa746348(v=VS.85).aspx LD>Обратите внимание на использование GetEx и доступ к элементам multi-value атрибута.
к сожалению, атрибут memberOf прочитать мне не удалось
оказывается, этот атрибут доступен не всем пользователям
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
А>>Всем доброго времени суток!
А>>Есть такой вопрос: как в AD получить список групп, в которые входит заданная группа? А>>Для пользователей понятно: IADsUser->Groups, а вот для IADsGroup такого свойства нет LD>Добрый день! LD>Я думаю, можно прочитать атрибут memberOf у объекта группы (см. http://msdn.microsoft.com/en-us/library/ms676913(v=vs.85).aspx) LD>Если не поможет (не знаю, по каким причинам), то сделать LDAP запрос по аттрибуту member. LD>Если что не понятно, спрашивайте.
атрибут memberOf доступен только определенным группам пользователей
а как правильно составить LDAP-запрос по атрибуту member — я не знаю
ActiveDirectory я к сожалению не знаю, а задача стоит
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
А>>Всем доброго времени суток!
А>>Есть такой вопрос: как в AD получить список групп, в которые входит заданная группа? А>>Для пользователей понятно: IADsUser->Groups, а вот для IADsGroup такого свойства нет LD>Добрый день! LD>Я думаю, можно прочитать атрибут memberOf у объекта группы (см. http://msdn.microsoft.com/en-us/library/ms676913(v=vs.85).aspx) LD>Если не поможет (не знаю, по каким причинам), то сделать LDAP запрос по аттрибуту member. LD>Если что не понятно, спрашивайте.
Здравствуйте, Андрей, Вы писали:
А>к сожалению, атрибут memberOf прочитать мне не удалось А>оказывается, этот атрибут доступен не всем пользователям
Андрей, проблему понял.
Сейчас попробую что-нибудь поискать в своих закромах
Здравствуйте, Андрей, Вы писали:
А>ldap_search_s возвращает 1 на любой из фильтров, даже если я ставлю простейший фильтр типа "(cn=*)" А>что я делаю не так?
Честно говоря, не знаю. Вот так у меня работает:
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
А>>ldap_search_s возвращает 1 на любой из фильтров, даже если я ставлю простейший фильтр типа "(cn=*)" А>>что я делаю не так? LD>Честно говоря, не знаю. Вот так у меня работает:
skip
я уже разобрался с ldap_search — оказывается, надо было bind перед поиском сделать
но попробую и твой вариант — он короче получается
сразу еще один вопрос: фильтр должен быть разный для поиска по пользователям и группам?
или один и тот же?
Здравствуйте, Андрей, Вы писали:
А>сразу еще один вопрос: фильтр должен быть разный для поиска по пользователям и группам? А>или один и тот же?
Что ты имеешь ввиду?
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
А>>сразу еще один вопрос: фильтр должен быть разный для поиска по пользователям и группам? А>>или один и тот же? LD>Что ты имеешь ввиду?
мне нужно решить две задачи:
1. найти список групп для определенного пользователя (с учетом того, что группы, в которые он входит, в свою очередь входят еще и в другие группы)
2. найти список групп для определенной группы (опять-таки с учетом того, что группы, в которые она входит, в свою очередь входят еще и в другие группы)
вот я и хотел уточнить: запросы в этом случае должны быть разные или как?
кстати, твой код с IDirectorySearch у меня не работает — возвращает NO_DATA
впрочем, ldap_search тоже ничего не возвращает
я в нашем домене обладаю правами обычного пользователя — может из-за этого?
Здравствуйте, Андрей, Вы писали:
А>Здравствуйте, Lonely Dog, Вы писали:
LD>>Здравствуйте, Андрей, Вы писали:
А>>>сразу еще один вопрос: фильтр должен быть разный для поиска по пользователям и группам? А>>>или один и тот же? LD>>Что ты имеешь ввиду?
А>мне нужно решить две задачи: А>1. найти список групп для определенного пользователя (с учетом того, что группы, в которые он входит, в свою очередь входят еще и в другие группы) А>2. найти список групп для определенной группы (опять-таки с учетом того, что группы, в которые она входит, в свою очередь входят еще и в другие группы)
А>вот я и хотел уточнить: запросы в этом случае должны быть разные или как?
Если делать как у меня, то запрос будет один и тот же. А>кстати, твой код с IDirectorySearch у меня не работает — возвращает NO_DATA
Имя целевой группы правильное? У меня первый запуск тоже ничего не выдал, т.к. я забыл cn=users.
А>впрочем, ldap_search тоже ничего не возвращает А>я в нашем домене обладаю правами обычного пользователя — может из-за этого?
Все может быть. Попробуй запустить ADSI Edit, открой любую из групп (которую ты ожидаешь увидеть) и посмотри ее security descriptor. Есть ли у тебя права на чтение?
skip
А>>вот я и хотел уточнить: запросы в этом случае должны быть разные или как? LD>Если делать как у меня, то запрос будет один и тот же.
ok
А>>кстати, твой код с IDirectorySearch у меня не работает — возвращает NO_DATA LD>Имя целевой группы правильное? У меня первый запуск тоже ничего не выдал, т.к. я забыл cn=users.
я один в один твой запрос содрал, заменив только имя домена
А>>впрочем, ldap_search тоже ничего не возвращает А>>я в нашем домене обладаю правами обычного пользователя — может из-за этого? LD>Все может быть. Попробуй запустить ADSI Edit, открой любую из групп (которую ты ожидаешь увидеть) и посмотри ее security descriptor. Есть ли у тебя права на чтение?
ADSI Edit к сожалению у меня нет
но есть ADExplorer от SysInternals — он показывает, что права у меня есть
и memberOf, кстати, он тоже возвращает
вот что он показывает для меня:
CN=TFS Developers,OU=TFS Groups,OU=Группы,DC=xxx,DC=yy
CN=Направление разработки системного ПО,OU=Направление разработки системного ПО,OU=xxx,DC=xxx,DC=yy
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
LD>У вас домен какого уровня? Mixed, Interim, Native? LD>Спроси у админов. Если не Native, я попробую поднять такой же у себя.
Здравствуйте, Lonely Dog, Вы писали:
LD>Здравствуйте, Андрей, Вы писали:
LD>У вас домен какого уровня? Mixed, Interim, Native? LD>Спроси у админов. Если не Native, я попробую поднять такой же у себя.
Все, я разобрался
Через IDirectoryObject все заработало, так что LDAP-запросы оказались не нужны.
Проблема, похоже, была в том, что IADs, IADsGroup и IADsUser получались через WINNT-провайдера (этот код был написан не мной, много лет назад).
А WINNT-провайдер, видимо, не поддерживает "memberOf".
В свою очередь, IDirectoryObject я могу получить только через LDAP-провайдера, зато он правильно возвращает список групп
Теперь осталось разобраться, как вместо "WINNT://domain/name" подсунуть "LDAP://CN=user,OU=groupOU,DC=domain,DC=ru"
Здравствуйте, Андрей, Вы писали:
А>Здравствуйте, Lonely Dog, Вы писали:
LD>>Здравствуйте, Андрей, Вы писали:
LD>>У вас домен какого уровня? Mixed, Interim, Native? LD>>Спроси у админов. Если не Native, я попробую поднять такой же у себя.
А>Все, я разобрался А>Через IDirectoryObject все заработало, так что LDAP-запросы оказались не нужны.
А>Проблема, похоже, была в том, что IADs, IADsGroup и IADsUser получались через WINNT-провайдера (этот код был написан не мной, много лет назад). А>А WINNT-провайдер, видимо, не поддерживает "memberOf".
А>В свою очередь, IDirectoryObject я могу получить только через LDAP-провайдера, зато он правильно возвращает список групп А>Теперь осталось разобраться, как вместо "WINNT://domain/name" подсунуть "LDAP://CN=user,OU=groupOU,DC=domain,DC=ru"
Дык, а что есть на входе то? Имя пользователя в формате domain\name?
Можно использовать TranslateName или IADsNameTranslate.
Здравствуйте, Андрей, Вы писали:
А>Здравствуйте, Lonely Dog, Вы писали:
А>skip
LD>>Дык, а что есть на входе то? Имя пользователя в формате domain\name? LD>>Можно использовать TranslateName или IADsNameTranslate.
А>ага, именно так уже и сделал А>большое спасибо за помощь
Для этого RSDN и нужен