Пример для функции ldap_sasl_bind?

#active-directory #ldap #openldap

#active-directory #ldap #openldap

Вопрос:

Я тщетно искал, как реализовать функцию 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:

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