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
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);
|
|
}
|
|
|
|
}
|
|
|