Проверка группы пользователей LDAP в Windows на C или C ++ (или Ada 95) - PullRequest
0 голосов
/ 15 февраля 2012

Мне нужна функция в C или C ++ (на самом деле мне нужна в Ada 95, но импорт прагмы можно использовать без проблем - я не должен использовать переключатель -gnat05), чтобы проверить, присутствует ли пользователь в LDAP сетевая группа.

Для получения имени пользователя у меня есть функция GetEnv в C, которую я могу импортировать в Ada 95 для:

function GetUsername return String is
   function GetEnv (Variable : String) return Interfaces.C.Strings.chars_ptr;
   pragma Import (C, GetEnv, "getenv");

   Command : constant String := "USER" & ASCII.Nul;
   Answer_Ptr : constant Interfaces.C.Strings.chars_ptr := GetEnv (Command);
   Answer : constant String := Interfaces.C.Strings.Value (Answer_Ptr);
begin
   return Answer;
end GetUsername;

Так что мне нужна функция Boolean Check_LDAP_Authentication (char* Username) или что-то подобное в C или C ++ (или даже Check_LDAP_Authentication (Username : String) return Boolean в Ada). Как я могу это сделать?

Заранее спасибо.

Обновление

Я нашел сообщение на Как написать LDAP-запрос, чтобы проверить, является ли пользователь членом группы? , который достаточно хорошо выражает (используя C # / VB.Net и System.DirectoryServices) то, что мне нужно делай, просто мне нужен эквивалент Ады 95.

DirectoryEntry rootEntry = new DirectoryEntry("LDAP://dc=yourcompany,dc=com");

DirectorySearcher srch = new DirectorySearcher(rootEntry);
srch.SearchScope = SearchScope.Subtree;

srch.Filter = "(&(objectcategory=user)(sAMAccountName=yourusername)(memberof=CN=yourgroup,OU=yourOU,DC=yourcompany,DC=com))";

SearchResultCollection res = srch.FindAll();

if(res == null || res.Count <= 0)
{
    Console.WriteLine("This user is *NOT* member of that group");
}
else
{
    Console.WriteLine("This user is INDEED a member of that group");
}

Ответы [ 2 ]

0 голосов
/ 04 октября 2012

Для того, что я понял, вам понадобится несколько вызовов LDAP. Почему бы вам не написать только очень тонкую привязку в Ada95 для связи с OpenLDAP? Или непосредственно код C, вдохновленный этим небольшим учебником (но с текущим API OpenLDAP), и вызов его из Ada?

Для первого решения, я думаю, вам нужно будет позвонить

Это не так просто, как использование существующей библиотеки Ada, но это должно сработать.

Надеюсь, это поможет

0 голосов
/ 15 февраля 2012

Во-первых, ваша переменная Command также должна иметь тип chars_ptr и должна содержать \ 0 в качестве конца.Если это сработало для вас, вам просто повезло.Обязательно освободите chars_ptr после этого.См. http://www.dwheeler.com/lovelace/s16s2.htm для примера.

Существует привязка LDAP для Ada: http://savannah.nongnu.org/projects/adaldap/ - но, похоже, она очень неактивна.

AWS также поддерживает LDAP.Смотрите здесь пример: http://www.adacore.com/wp-content/files/auto_update/aws-docs/aws.html#LDAP

...