|
|
//+------------------------------------------------------------
//
// Copyright (C) 2001, Microsoft Corporation
//
// File: pldapwrap.cpp
//
// Contents: CPLDAPWrap methods
//
// Classes: CPLDAPWrap
//
// Functions:
// CPLDAPWrap::CPLDAPWrap
//
// History:
// jstamerj 2001/11/28 15:10:11: Created.
//
//-------------------------------------------------------------
#include "precomp.h"
//+------------------------------------------------------------
//
// Function: CPLDAPWrap::CPLDAPWrap
//
// Synopsis: Opens a wldap32 connection to a server
//
// Arguments:
// pszHost: FQDN matching the DNS A Record of an LDAP server
// dwPort: Server LDAP TCP port #
//
// Returns: Nothing. m_pldap will be NULL if there is an error.
//
// History:
// jstamerj 2001/11/28 15:10:51: Created.
//
//-------------------------------------------------------------
CPLDAPWrap::CPLDAPWrap( ISMTPServerEx *pISMTPServerEx, LPSTR pszHost, DWORD dwPort) { PLDAP pldap = NULL; ULONG ulLdapOn = (ULONG)((ULONG_PTR)LDAP_OPT_ON); ULONG ulLdapRet = LDAP_SUCCESS;
CatFunctEnterEx((LPARAM)this, "CPLDAPWrap::CPLDAPWrap");
m_dwSig = SIGNATURE_CPLDAPWRAP;
m_pldap = NULL; //
// Use ldap_init so that we can set ldap options before connecting
//
pldap = ldap_init( pszHost, dwPort); if(pldap == NULL) { ulLdapRet = LdapGetLastError(); ErrorTrace((LPARAM)this, "ldap_init returned NULL, gle=0x%08lx, lgle=0x%08lx", GetLastError(), LdapGetLastError()); LogLdapError( pISMTPServerEx, ulLdapRet, pszHost, "ldap_init"); goto CLEANUP; } //
// Tell wldap32 to lookup A records only. By default, wldap32
// supports domain names, so it looksup DNS SRV records. Since we
// always have a FQDN of a server, this is wasteful. Set the
// AREC_EXCLUSIVE option so that we only do A record lookups.
//
ulLdapRet = ldap_set_option( pldap, LDAP_OPT_AREC_EXCLUSIVE, (PVOID) &ulLdapOn);
if(ulLdapRet != LDAP_SUCCESS) { //
// Trace the error, but continue anyway
//
ErrorTrace((LPARAM)this, "ldap_set_option(AREC_EXCLUSIVE, ON) failed 0x%08lx", ulLdapRet);
LogLdapError( pISMTPServerEx, ulLdapRet, pszHost, "ldap_set_option(LDAP_OPT_AREC_EXCLUSIVE)"); } //
// Now that the options are setup, connect.
//
ulLdapRet = ldap_connect(pldap, NULL); if(ulLdapRet != LDAP_SUCCESS) { ErrorTrace((LPARAM)this, "ldap_connect to server %s failed, error 0x%08lx", pszHost, ulLdapRet);
LogLdapError( pISMTPServerEx, ulLdapRet, pszHost, "ldap_connect");
goto CLEANUP; } //
// Success! Set m_pldap
//
m_pldap = pldap; pldap = NULL;
CLEANUP: if(pldap) ldap_unbind(pldap); }
|