使用 C++ 与 AD 的 LDAP 连接

LDAP connection with AD using C++

我正在尝试与 Active Directory 建立 LDAP 连接以获取用户列表。但我什至无法使用 C++ 编译仅用于 AD 身份验证的简单代码。

我尝试了很多C++示例程序,但只遇到编译错误。我真的只想使用 C++ 连接 AD 而不会出现任何错误。那么你能告诉我我在这段试图向 AD 添加新用户的代码中做错了什么吗?我在下面添加了环境详细信息、代码和错误以供参考。

代码:

#ifndef UNICODE
#define UNICODE
#endif
#pragma comment(lib, "netapi32.lib")

#include <windows.h>
#include <lm.h>
#include<iostream>

int main()
{
 USER_INFO_1 ui;
 DWORD dwLevel = 1;
 DWORD dwError = 0;
 NET_API_STATUS nStatus;
 //
 // Set up the USER_INFO_1 structure.
 //  USER_PRIV_USER: name identifies a user, 
 //    rather than an administrator or a guest.
 //  UF_SCRIPT: required 
 //
 ui.usri1_name = L"username";
 ui.usri1_password = L"password";
 ui.usri1_priv = USER_PRIV_USER;
 ui.usri1_home_dir = NULL;
 ui.usri1_comment = NULL;
 ui.usri1_flags = UF_SCRIPT;
 ui.usri1_script_path = NULL;
 //
 // Call the NetUserAdd function, specifying level 1.
 //
 nStatus = NetUserAdd(L"servername",
                      dwLevel,
                      (LPBYTE)&ui,
                      &dwError);
 //
 // If the call succeeds, inform the user.
 //
 if (nStatus == NERR_Success)
    fwprintf(stderr, L"User %s has been successfully added on %s\n",
             L"user", L"dc");
 //
 // Otherwise, print the system error.
 //
 else
    fprintf(stderr, "A system error has occurred: %d\n", nStatus);

 return 0;
}

错误:

PS C:\Users\user\Desktop\Sandbox\Cpp> cd "c:\Users\user\Desktop\Sandbox\Cpp\" ; if ($?) { g++ ldap.cpp -o ldap } ; if ($?) { .\ldap }
ldap.cpp: In function 'int main()':
ldap.cpp:22:20: warning: ISO C++ forbids converting a string constant to 'LPWSTR' {aka 'wchar_t*'} [-Wwrite-strings]
   22 |    ui.usri1_name = L"username";
      |                    ^~~~~~~~~~~
ldap.cpp:23:24: warning: ISO C++ forbids converting a string constant to 'LPWSTR' {aka 'wchar_t*'} [-Wwrite-strings]
   23 |    ui.usri1_password = L"password";
      |                        ^~~~~~~~~~~
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\user-1~1\AppData\Local\Temp\ccByZfCT.o:ldap.cpp:(.text+0xfb): undefined reference to `NetUserAdd'
collect2.exe: error: ld returned 1 exit status

我的系统 运行 Windows 10 64 位 使用 MinGW64 编译器安装 MSYS。

我不是 C++ 或 MinGW 专家,但我有一点经验,并且进行了一些谷歌搜索。这是唯一的错误:

undefined reference to `NetUserAdd'

其他为警告。

根据你的输出,你的编译命令看起来是这样的:

g++ ldap.cpp -o ldap

尝试在末尾添加 -lnetapi32

g++ ldap.cpp -o ldap -lnetapi32

如果你想解决这些警告,我认为你可以为用户名和密码声明变量,而不是直接将文字分配给结构:

 wchar_t username[] = L"username";
 wchar_t password[] = L"password";

 ui.usri1_name = username;
 ui.usri1_password = password;