Пример для функции ldap_sasl_bind? - PullRequest
0 голосов
/ 09 апреля 2019

Я тщетно искал, как реализовать функцию OpenLDAP ldap_sasl_bind.

Разрабатываемое приложение требует от меня доступа к Active Directory с использованием OpenLDAP.Я должен привязаться к AD, и каждая программа-пример, которую я просмотрел, использует ldap_simple_bind или подобную функцию, которая устарела, и, следовательно, я не могу их использовать.

Функция ldap_sasl_bind имеет параметр для учетных данных пользователя, и я должен предоставить имя пользователя и пароль для аутентификации.Проблема в том, что параметр cred принимает указатель на struct berval, который я понятия не имею, как реализовать.

Определение berval в документах Microsoft приведено ниже:

    typedef struct berval {
    ULONG bv_len;
    PCHAR bv_val;
    } LDAP_BERVAL, *PLDAP_BERVAL, BERVAL, *PBERVAL, BerValue; 

Вотопределение функции ldap_sasl_bind в OpenLDAP:

    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 Ответ

1 голос
/ 10 апреля 2019

BerValue bv_val должен быть указателем на двоичное представление строки пароля, вам не нужно указывать имя пользователя в этом berval, так как функция 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.

...