Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

107 lines
2.5 KiB

/*++
DELEGTOOLS.C
Copyright (C) 1998 Microsoft Corporation, all rights reserved.
DESCRIPTION: tools required to support the delegation library
Created, Dec 22, 1998 by DavidCHR.
CONTENTS: ConnectAndBindToDefaultDsa
--*/
#pragma warning(disable:4057) /* indirection to slightly different
base types. Useless warning that hits
thousands of times in this file. */
#pragma warning(disable:4221) /* allow nonstandard extension (automatic
initialization of a variable with
address of another automatic variable) */
#include "unimacro.h"
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <ntdef.h> // required to keep winbase.h from breaking
#include <ntpoapi.h> // required to keep winbase.h from breaking
#include <windows.h>
#include <winbase.h>
#include <lmaccess.h>
#include <winldap.h>
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include "delegtools.h"
/*++**************************************************************
NAME: ConnectAndBindToDefaultDsa
does just what the function name says. We call the default
DSA and bind to it. We then return the ldap handle
MODIFIES: ppLdap -- PLDAP returned that describes the connection
(now bound) to the DSA as requested
TAKES: BindTarget -- target (domain name or DC name) passed to ldap_open
RETURNS: TRUE when the function succeeds.
FALSE otherwise.
LASTERROR: not set.
LOGGING: printf is called on failure
CALLED BY: anyone
FREE WITH: ldap_unbind
**************************************************************--*/
BOOL
ConnectAndBindToDefaultDsa( IN OPTIONAL LPWSTR BindTarget,
OUT PLDAP *ppLdap ) {
PLDAP pLdap;
DWORD dwErr = (DWORD) STATUS_INTERNAL_ERROR;
pLdap = ldap_openW( BindTarget, LDAP_PORT );
if ( pLdap ) {
dwErr = ldap_bind_s( pLdap, NULL, NULL, LDAP_AUTH_NEGOTIATE );
if ( dwErr == LDAP_SUCCESS ) {
*ppLdap = pLdap;
return TRUE;
} else {
printf( "FAIL: ldap_bind_s failed: 0x%x.\n",
dwErr );
SetLastError( dwErr );
}
/* note that there is no ldap_close-- we must unbind,
even though we aren't actually bound. */
ldap_unbind( pLdap );
} else {
// ldap_open() sets lastError on failure.
printf( "FAIL: ldap_open failed for default server: 0x%x.\n",
GetLastError() );
}
return FALSE;
}