Active directory ldap_sasl_绑定函数的示例?

Active directory ldap_sasl_绑定函数的示例?,active-directory,ldap,openldap,Active Directory,Ldap,Openldap,关于如何实现OpenLDAP函数,我一直在徒劳地搜索ldap\u sasl\u bind 正在开发的应用程序要求我使用OpenLDAP访问Active Directory。我必须绑定到AD,我看过的每个示例程序都使用ldap\u simple\u bind或类似的函数,这些函数已被弃用,因此我无法使用它们 ldap\u sasl\u bind函数有一个用于用户凭据的参数,我必须提供用户名和密码以进行身份验证。问题是cred参数接受指向struct berval的指针,我不知道如何实现它 micr

关于如何实现OpenLDAP函数,我一直在徒劳地搜索
ldap\u sasl\u bind

正在开发的应用程序要求我使用OpenLDAP访问Active Directory。我必须绑定到AD,我看过的每个示例程序都使用
ldap\u simple\u bind
或类似的函数,这些函数已被弃用,因此我无法使用它们

ldap\u sasl\u bind
函数有一个用于用户凭据的参数,我必须提供用户名和密码以进行身份验证。问题是cred参数接受指向
struct berval
的指针,我不知道如何实现它

microsoft文档中的
berval
定义如下:

    typedef struct berval {
    ULONG bv_len;
    PCHAR bv_val;
    } LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL, BerValue; 
以下是OpenLDAP中的
ldap\u sasl\u 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
中提供用户名的长度。但是如何提供密码呢?

BerValue
bv_val
应该是一个指向密码字符串二进制表示形式的指针,您不需要在此berval中提供用户名,因为函数
ldap_sasl_bind
使用作为第二个参数传入的bind
dn

类似于以下内容的内容应该可以工作(C++):

常量
LDAP\u SASL\u SIMPLE
相当于
'
NULL

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);