Я пишу функцию DLL с именем ADAuthenticate
, которая будет аутентифицировать пользователя в Active Directory и проверять определенный атрибут пользователя, если он / она существует.Если администратор выполняет аутентификацию, я не хочу, чтобы функция выполняла поиск по ldap, поэтому у меня есть следующий оператор if:
if (_tcsicmp(username, TEXT("administrator")) != 0 && _tcscmp(attrs[0], TEXT("")) != 0)
{
// Search for specific attributes
ldap_response = ldap_search_s(ldap, domain, LDAP_SCOPE_SUBTREE, search, attrs, 0, &ldap_msg);
if (ldap_response != LDAP_SUCCESS)
MessageBox(h_wnd, ldap_err2string(ldap_response), TEXT("ERROR - ldap_search_s"), MB_OK);
else if ((new_ldap_msg = ldap_first_entry(ldap, ldap_msg)) != NULL)
{
do
{
// Append a pipe character if more than one attribute is requested
if (count > 0)
_tcscpy(ret_val, TEXT("|"));
_tcscpy(ret_val, *(ldap_get_values(ldap, new_ldap_msg, attrs[count++])));
} while ((new_ldap_msg = ldap_next_entry(ldap, ldap_msg)) != NULL);
}
}
В операторе if, если я удалю одну из операций сравнения строк(либо один), он отлично работает.Как только я соединяю их вместе или даже во вложенных операторах if, вся моя программа, которая вызывает эту функцию, вылетает.Кто-нибудь знает, что может быть причиной этого?
Вот мой заголовок для функции:
<code>extern "C" __declspec(dllexport) LPCTSTR ADAuthenticate(TCHAR * username, TCHAR * password, TCHAR * server,
TCHAR * backup_server, TCHAR * domain, HWND h_wnd,
TCHAR ** attrs)
Вот как я импортирую функцию DLL:
[DllImport("WM_LDAP.dll")]
public static extern IntPtr ADAuthenticate(string username, string password, string server,
string backup_server, string domain, IntPtr hWnd, string [] attrs);