Мне нужна функция в 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
в Аде). Как мне это сделать?
Заранее спасибо.
Обновить
Я нашел сообщение на Как написать запрос 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");
}