我徒劳地搜索了如何实现OpenLDAP功能ldap_sasl_bind
。
正在开发的应用程序要求我使用OpenLDAP访问Active Directory。我必须绑定到AD,并且我浏览过的每个示例程序都使用ldap_simple_bind
或已弃用的类似函数,因此我无法使用它们。
ldap_sasl_bind
函数有一个用于用户凭证的参数,我必须提供用于验证的用户名和密码。问题是cred参数接受指向struct berval
的指针,我不知道该如何实现。
Microsoft文档中berval
的定义如下:
typedef struct berval {
ULONG bv_len;
PCHAR bv_val;
} LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL, BerValue;
这是OpenLDAP中的ldap_sasl_bind
函数定义:
int ldap_sasl_bind(LDAP *ld, const char *dn, const char
*mechanism, struct berval *cred, LDAPControl *sctrls[],
LDAPControl *cctrls[], int *msgidp);
我可以通过简单地访问bv_val
并为其分配值来提供用户名,并且可以在bv_len
中提供用户名的长度。但是如何提供密码?
答案 0 :(得分:1)
BerValue bv_val
应该是密码字符串的二进制表示形式的指针,因为函数ldap_sasl_bind
使用绑定dn
,所以您不需要在此密码中提供用户名。作为第二个参数传递。
类似以下的方法应该适用(C ++):
berval cred;
cred.bv_val = (char*)password.c_str();
cred.bv_len = password.length();
res = ldap_sasl_bind(ld, dn, LDAP_SASL_SIMPLE, cred, sctrls, cctrls, msgidp);
常数LDAP_SASL_SIMPLE
等效于''
或NULL
。