내 사무실에서 약간의 신청서를 작성하고 있습니다. 이 응용 프로그램에서는 전체 UserName을 가져와야합니다. Qt/C++로 작성되었습니다LDAP 전체 사용자 이름 얻기 C++
나는 LDAP를 통해이 정보를 얻고 싶습니다. 이제 Active Directory 서버에 연결할 수 있으며 검색 기능에 연결할 수 있습니다.
이 정보는 Microsoft에서 작성한 사례에서 발췌 한 것입니다.
그러나이 지점에서는 예제가 나를 혼란스럽게합니다. I이 서버에 사용자 이름을 부여하고 전체 이름을받는 방법을 모르겠다. 마이크로 소프트 예
링크 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa367016(v=vs.85).aspx이
누군가가 나에게 내가이 정보를 얻을 수있는 방법 조언을 줄 수 있습니까?)
P.S.하고, 안부 크리스와
감사합니다 나쁜 영어를 유감스럽게 생각합니다. P.S.S 그리고 내가 뭔가를 놓친 경우 또는 더 많은 정보가 필요하다면 그냥 말해야합니다.
LDAP_query.cpp :
#include <settings.h>
#include <ui_settings.h>
#include <mainwindow.h>
#include <ui_mainwindow.h>
#include <QtGui>
#include <QString>
//Header Files for LDAP Query
#include <windows.h>
#include <winldap.h>
#include <winber.h>
#include <rpc.h>
#include <rpcdce.h>
#include <stdio.h>
void MainWindow::LDAP_query(QString name)
{
//Name contains the username
PWCHAR hostName = NULL;
PWCHAR Domain = NULL;
PWCHAR pMyDN = NULL;
PWCHAR pUserName;
PWCHAR pPassword;
LDAP* pLdapConnection = NULL;
ULONG version = LDAP_VERSION3;
ULONG getOptSuccess = 0;
ULONG connectSuccess = 0;
INT returnCode = 0;
// Convert String hostname to a wchar_t*
char *hostName_2 = "Server.office.com";
QString Test = QString::fromAscii(hostName_2);
hostName = (WCHAR*)(Test.utf16());
//Connverting Char to WCHAR to connect to Directory
char *pMyDN_2 = "Ou=directory,Dc=Name,DC=office";
QString test2 = QString::fromAscii(pMyDN_2);
pMyDN = (WCHAR*)(test2.utf16());
//Open Connection
pLdapConnection = ldap_init(hostName, LDAP_PORT);
//Setting Connection Parm's
ldap_set_option(pLdapConnection, LDAP_OPT_PROTOCOL_VERSION, (void*)&version);
ldap_connect(pLdapConnection, NULL);
returnCode = ldap_bind_s(pLdapConnection, pMyDN, NULL, LDAP_AUTH_NEGOTIATE);
if(returnCode == LDAP_SUCCESS)
{
ui->InputA->setText("Connection sucessfull");
}
else
{
ui->InputA->setText("Connection unsucessfull");
}
//Variables for Search Results
LDAPMessage* pSearchResult;
PWCHAR pMyFilter = NULL;
char *pMyFilter_2 = "(&(objectCategory=person)(objectClass=user))";
QString Test7 = QString::fromAscii(pMyFilter_2);
pMyFilter = (WCHAR*)(Test7.utf16());
PWCHAR pMyAttributes[6];
ULONG errorCode = LDAP_SUCCESS;
pMyAttributes[0] = (WCHAR*)QString("cn").utf16();
pMyAttributes[1] = (WCHAR*)QString("company").utf16();
pMyAttributes[2] = (WCHAR*)QString("department").utf16();
pMyAttributes[3] = (WCHAR*)QString("telephoneNumber").utf16();
pMyAttributes[4] = (WCHAR*)QString("memberOf").utf16();
pMyAttributes[5] = NULL;
errorCode = ldap_search_s(
pLdapConnection, // Session handle
pMyDN, // DN to start search
LDAP_SCOPE_SUBTREE, // Scope
pMyFilter, // Filter
pMyAttributes, // Retrieve list of attributes
0, // Get both attributes and values
&pSearchResult); // [out] Search results
if (errorCode != LDAP_SUCCESS)
{
ui->InputB->setText("ldap_search_s failed with");
ldap_unbind_s(pLdapConnection);
if(pSearchResult != NULL)
ldap_msgfree(pSearchResult);
}
else
ui->InputB->setText("ldap_search succeeded \n");
//here i like to receive the user's full name
//Closing Connection
ldap_unbind(pLdapConnection);
ui->Test_Ausgabe -> setText(name);
}
내가. 나는 useres의 전체 이름을 얻었다. "cn"을 사용하면 qDebug가 사용자의 전체 이름을 보여주었습니다. 이제 Windows에서 사용자 이름을 필터링하면됩니다 (그리고 AD에서 가져 오는 것). 그런 다음 큰 걸음. @Terry Gardner – Chris9327