Мне нужна функция в 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");
}