#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
.