[英]Windows LDAP group-user checking in C or C++ (or Ada 95)
我需要使用C或C ++的函数(实际上我需要在Ada 95中使用,但是可以使用-gnat05
导入没有问题-我一定不能使用-gnat05
开关)来检查LDAP网络组中是否存在用户。
为了获取用户名,我在C中具有函数GetEnv
,可以在Ada 95 GetEnv
其导入到:
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;
因此,我需要在C或C ++中使用Boolean Check_LDAP_Authentication (char* Username)
或类似的函数(甚至Check_LDAP_Authentication (Username : String) return Boolean
在Ada中Check_LDAP_Authentication (Username : String) return Boolean
)。 我该怎么做?
提前致谢。
更新资料
我找到了有关如何编写LDAP查询以测试用户是否为组成员的文章? ,它表达得很好(使用C#/ VB.Net和System.DirectoryServices),我需要做的只是我需要一个等效的Ada 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");
}
据我了解,您将需要几个LDAP调用。 为什么不在Ada95中仅编写一个非常薄的绑定来链接OpenLDAP? 还是直接从此小型教程 (但使用当前的OpenLDAP API)中获得启发的C代码,并从Ada调用它?
对于第一个解决方案,我认为您需要致电
它不像使用现有的Ada库那样简单,但是应该可以解决。
希望能帮助到你
首先,您的Command
变量也应为chars_ptr类型,并且应以\\ 0结尾。 如果它对您有用,那么您就是幸运的。 确保随后释放chars_ptr。 有关示例,请参见http://www.dwheeler.com/lovelace/s16s2.htm 。
Ada有一个LDAP绑定: http : //savannah.nongnu.org/projects/adaldap/-但它似乎非常不活跃。
AWS也支持LDAP。 参见此处的示例: http : //www.adacore.com/wp-content/files/auto_update/aws-docs/aws.html#LDAP
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.