Проверка учетных данных пользователя домена - PullRequest
3 голосов
/ 16 мая 2011

Мне нужен способ проверки пары пользователь / пароль для родного c ++ в Windows.Входные данные - это имя пользователя и пароль, пользователь может быть в формате DOMAIN \ user.

В основном мне нужно написать функцию, которая: Если user / password является действительной локальной учетной записью, возвращает true.(часть 1) Если имя пользователя и пароль действительны в указанном домене, верните также true.(часть 2), иначе возвращаем false.

Использование KB180548 Я решил (часть 1) (но мне также пришлось проверить, является ли имя пользователя допустимым, поскольку происходит сбой для пользователей с пустымпароли - уродливый обходной путь, но он работает)

Однако для любого домена, кроме ".", приведенный выше пример кода КБ работает (неправильно) для любой пары пользователь / пароль.

Я пытался использоватьldap_bind_s, но это удается для неправильных пар пользователь / пароль (страшная гостевая учетная запись?).Также за "."домен, он не работает для действительных пользователей / паролей с LDAP_SERVER_DOWN (может быть, потому что локальный хост не является контроллером домена?)

Может быть, некоторые из этих понятий мне неясны.Я надеюсь, что по крайней мере моя проблема объяснена ясно.Я не застрял ни в одном методе, так как log-файл может быть реализован только в собственном коде C ++.

Этот вопрос C #: Как проверить учетные данные домена? , кажется, понял этовне (за исключением того, что нет принятого ответа).Увы, это в C #.

Редактировать: Давай, переполнение стека, ты никогда не подводил меня раньше ...

Ответы [ 2 ]

1 голос
/ 21 мая 2011

Если вы подразумеваете под «.» домен, домены, которые не являются «доверенными», с доменом, в котором выполняется код с ошибкой, то это предусмотрено проектом.

Несколько лет назад Microsoft наилучшим ответом на это, когда мы использовали заявку в службу поддержки, было использование WNetUseConnection ().

1 голос
/ 18 мая 2011

Старый код, я не могу проверить, так как:

//---------------------------------------------------------
// quick ADSI sample - binding to a user 
//---------------------------------------------------------

//---------------------------------------------------------
// should use unicode - saves a lot of conversion work
//---------------------------------------------------------
#define _UNICODE

//---------------------------------------------------------
// libraries needed to use ADSI
//---------------------------------------------------------
#pragma comment( lib, "Activeds.lib" )
#pragma comment( lib, "Adsiid.lib" )

//---------------------------------------------------------
// ADSI header
//---------------------------------------------------------
#include <activeds.h>

int wmain( int argc, wchar_t *argv[] )
{
  //-----------------------------------------------------
  // HRESULT hr is the return code value from all ADSI
  // calls - using the SUCCEEDED MACRO to check for 
  // success
  //-----------------------------------------------------
  HRESULT hr;

  //-----------------------------------------------------
  // pointer to our IADsUser object
  //-----------------------------------------------------
  IADsUser *pUser = NULL;

  //-----------------------------------------------------
  // path to the user we are going to try to update
  // make sure you replace this with something
  // specific to your environment
  // Form : WinNT://<domain name>/<object name>,<object class>
  //-----------------------------------------------------
  LPWSTR pszADsPath = L"WinNT://yourdomain/object name,user";
  // 
  // See available forms :
  // http://msdn.microsoft.com/en-us/library/aa746534(v=VS.85).aspx

  //-----------------------------------------------------
  // intialize the COM subsystem before doing any work
  //-----------------------------------------------------
  CoInitialize(NULL);

  //-----------------------------------------------------
  // try to get the user
  // http://msdn.microsoft.com/en-us/library/aa772184(v=VS.85).aspx
  //-----------------------------------------------------
  hr = ADsGetObject(pszADsPath, IID_IADsUser,(void**)&pUser);

  // Here Test hr
  //http://msdn.microsoft.com/en-us/library/aa772195(v=VS.85).aspx

  //-----------------------------------------------------
  // kill the COM subsystem we were using
  //-----------------------------------------------------
  CoUninitialize();

  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...