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.
 
 
 
 
 
 

198 lines
5.0 KiB

//---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1996
//
// File: globals.cxx
//
// Contents:
//
// History:
//----------------------------------------------------------------------------
#include "ldap.hxx"
#pragma hdrstop
TCHAR *szProviderName = TEXT("LDAP");
TCHAR *szLDAPNamespaceName = TEXT("LDAP");
TCHAR *szGCNamespaceName = TEXT("GC");
//
// Support routines for dynamically loading functions.
//
BOOL g_fDllsLoaded = FALSE;
extern HANDLE g_hDllSecur32 = NULL;
// load library helper
HMODULE LoadLibraryHelper(
LPTSTR pszFileName
)
{
const DWORD iSize = GetSystemDirectory(NULL, 0);
TCHAR* buffer = NULL;
DWORD dwTemp = 0;
HMODULE handle = NULL;
if(iSize == 0)
{
goto error;
}
buffer = new TCHAR[iSize + _tcslen(__TEXT("\\")) + _tcslen(pszFileName)]; // iSize includes the NULL terminiator
if(!buffer)
{
goto error;
}
dwTemp = GetSystemDirectory(buffer, iSize);
if(dwTemp == 0)
{
goto error;
}
_tcscat(buffer, __TEXT("\\"));
_tcscat(buffer, pszFileName);
handle = LoadLibrary(buffer);
error:
if(buffer)
{
delete [] buffer;
buffer = NULL;
}
return handle;
}
//
// Loads all the dynamic libs we need.
//
void BindToDlls()
{
DWORD dwErr = 0;
if (g_fDllsLoaded) {
return;
}
ENTER_SERVERLIST_CRITICAL_SECTION();
if (g_fDllsLoaded) {
LEAVE_SERVERLIST_CRITICAL_SECTION();
return;
}
g_hDllSecur32 = LoadLibraryHelper(L"SECUR32.DLL");
g_fDllsLoaded = TRUE;
LEAVE_SERVERLIST_CRITICAL_SECTION();
return;
}
//
// Loads the appropriate secur32 fn.
//
PVOID LoadSecur32Function(CHAR *function)
{
if (!g_fDllsLoaded) {
BindToDlls();
}
if (g_hDllSecur32) {
return((PVOID*) GetProcAddress((HMODULE) g_hDllSecur32, function));
}
return NULL;
}
//
// QueryContextAttributesWrapper.
//
SECURITY_STATUS
AcquireCredentialsHandleWrapper(
#if ISSP_MODE == 0 // For Kernel mode
PSECURITY_STRING pPrincipal,
PSECURITY_STRING pPackage,
#else
SEC_WCHAR SEC_FAR * pszPrincipal, // Name of principal
SEC_WCHAR SEC_FAR * pszPackage, // Name of package
#endif
unsigned long fCredentialUse, // Flags indicating use
void SEC_FAR * pvLogonId, // Pointer to logon ID
void SEC_FAR * pAuthData, // Package specific data
SEC_GET_KEY_FN pGetKeyFn, // Pointer to GetKey() func
void SEC_FAR * pvGetKeyArgument, // Value to pass to GetKey()
PCredHandle phCredential, // (out) Cred Handle
PTimeStamp ptsExpiry // (out) Lifetime (optional)
)
{
static PF_AcquireCredentialsHandleW pfAcquireCred = NULL;
static BOOL f_LoadAttempted = FALSE;
//
// Load the fn and set the variables accordingly.
//
if (!f_LoadAttempted && pfAcquireCred == NULL) {
pfAcquireCred = (PF_AcquireCredentialsHandleW)
LoadSecur32Function(ACQUIRECREDENTIALSHANDLE_API);
f_LoadAttempted = TRUE;
}
if (pfAcquireCred != NULL) {
return ((*pfAcquireCred)(
#if ISSP_MODE == 0 // For Kernel mode
pPrincipal,
pPackage,
#else
pszPrincipal, // Name of principal
pszPackage, // Name of package
#endif
fCredentialUse, // Flags indicating use
pvLogonId, // Pointer to logon ID
pAuthData, // Package specific data
pGetKeyFn, // Pointer to GetKey() func
pvGetKeyArgument, // Value to pass to GetKey()
phCredential, // (out) Cred Handle
ptsExpiry // (out) Lifetime (optional)
)
);
}
else {
return (ERROR_GEN_FAILURE);
}
}
SECURITY_STATUS
FreeCredentialsHandleWrapper(
PCredHandle phCredential // Handle to free
)
{
static PF_FreeCredentialsHandle pfFreeCredHandle = NULL;
static BOOL f_LoadAttempted = FALSE;
//
// Load the fn and set the variables accordingly.
//
if (!f_LoadAttempted && pfFreeCredHandle == NULL) {
pfFreeCredHandle = (PF_FreeCredentialsHandle)
LoadSecur32Function(FREECREDENTIALSHANDLE_API);
f_LoadAttempted = TRUE;
}
if (pfFreeCredHandle != NULL) {
return ((*pfFreeCredHandle)(
phCredential
)
);
}
else {
return (ERROR_GEN_FAILURE);
}
}