ldap_sasl_bind函数的示例?

时间:2019-04-09 17:29:17

标签: active-directory ldap openldap

我徒劳地搜索了如何实现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中提供用户名的长度。但是如何提供密码?

1 个答案:

答案 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