title: How to connect to Active Directory using LDAP from C++?
body: <p>I have setup Active Directory on a Windows Server 2019. I am trying to use LDAP to connect to Active Directory from a Windows client. I have used this code with slight modifications from the Microsoft docs:</p>
  
  <pre><code>//  Verify that the user passed a hostname.
  if (hostname!=NULL)
  {
      //  Convert argv[] to a wchar_t*
      size_t origsize = strlen(argv[1]) + 1;
      size_t convertedChars = 0;
      wchar_t wcstring[newsize];
      mbstowcs_s(convertedChars, wcstring, origsize, argv[1], _TRUNCATE);
      wcscat_s(wcstring, L" (wchar_t *)");
      hostName = wcstring;
  }
  else
  {
      hostName = NULL;
  }
  
  //  Initialize a session. LDAP_PORT is the default port, 389.
  pLdapConnection = ldap_init(hostName, LDAP_PORT);
  
  if (pLdapConnection == NULL)
  {
      //  Set the HRESULT based on the Windows error code.
      char hr = HRESULT_FROM_WIN32(GetLastError());
      printf( "ldap_init failed with 0x%x.\n",hr);
      goto error_exit;
  }
  else
      printf("ldap_init succeeded \n");
  
  //  Set the version to 3.0 (default is 2.0).
  returnCode = ldap_set_option(pLdapConnection,
                               LDAP_OPT_PROTOCOL_VERSION,
                               (void*)&amp;amp;version);
  if(returnCode == LDAP_SUCCESS)
      printf("ldap_set_option succeeded - version set to 3\n");
  else
  {
      printf("SetOption Error:%0X\n", returnCode);
      goto error_exit;
  }
  
  // Connect to the server.
  connectSuccess = ldap_connect(pLdapConnection, NULL);
  
  if(connectSuccess == LDAP_SUCCESS)
      printf("ldap_connect succeeded \n");
  else
  {
      printf("ldap_connect failed with 0x%x.\n",connectSuccess);
      goto error_exit;
  }
  
  //  Bind with current credentials (login credentials). Be
  //  aware that the password itself is never sent over the 
  //  network, and encryption is not used.
  printf("Binding ...\n");
  
  returnCode = ldap_bind_s(pLdapConnection, NULL, NULL,
                           LDAP_AUTH_NEGOTIATE);
  if (returnCode == LDAP_SUCCESS)
      printf("The bind was successful");
  else
      goto error_exit;
  
  //  Normal cleanup and exit.
  ldap_unbind(pLdapConnection);
  return 0;
  
  //  On error cleanup and exit.
  error_exit:
      ldap_unbind(pLdapConnection);
      return -1;
  </code></pre>
  
  <p>I am new to active directory and have never worked with Windows servers before. </p>
  
  <ol>
  <li><p>How do I connect to Active Directory in this LDAP query? Do I pass the server name or the Active Directory domain name in the host name in the code?</p></li>
  <li><p>Also I am getting a server name not resolved error. Should I use the dns service in Windows server or my local lan in order to get rid of the error?<br></p></li>
  </ol>
  
  <p>Here is the link to the code from microsoft docs:<br>
  <a href="https://docs.microsoft.com/en-gb/previous-versions/windows/desktop/ldap/example-code-for-establishing-a-session-without-encryption" rel="nofollow noreferrer">here</a></p>