Modified the folder name to be compatible with the make system for windows.
This commit is contained in:
parent
9f4de1d300
commit
4db5688be6
@ -1,132 +0,0 @@
|
|||||||
/***********************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; version 2.1
|
|
||||||
* of the License.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Library Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, Novell, Inc.
|
|
||||||
*
|
|
||||||
* To contact Novell about this file by physical or electronic mail,
|
|
||||||
* you may find current contact information at www.novell.com.
|
|
||||||
*
|
|
||||||
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
|
|
||||||
//===[ Include files ]=====================================================
|
|
||||||
|
|
||||||
#include "internal.h"
|
|
||||||
|
|
||||||
//===[ External data ]=====================================================
|
|
||||||
|
|
||||||
//===[ Manifest constants ]================================================
|
|
||||||
|
|
||||||
//===[ Type definitions ]==================================================
|
|
||||||
|
|
||||||
//===[ Function prototypes ]===============================================
|
|
||||||
|
|
||||||
//===[ Global variables ]==================================================
|
|
||||||
|
|
||||||
UINT32 g_ulCount = 0;
|
|
||||||
UINT32 g_ulLock = 0;
|
|
||||||
HANDLE g_hModule;
|
|
||||||
|
|
||||||
|
|
||||||
//++=======================================================================
|
|
||||||
BOOL APIENTRY DllMain(
|
|
||||||
HANDLE hModule,
|
|
||||||
DWORD ul_reason_for_call,
|
|
||||||
LPVOID lpReserved
|
|
||||||
)
|
|
||||||
//=======================================================================--
|
|
||||||
{
|
|
||||||
BOOL retStatus = TRUE;
|
|
||||||
|
|
||||||
switch (ul_reason_for_call)
|
|
||||||
{
|
|
||||||
case DLL_PROCESS_ATTACH:
|
|
||||||
{
|
|
||||||
g_hModule = hModule;
|
|
||||||
|
|
||||||
// Initialize the library
|
|
||||||
if (InitializeLibrary() != 0)
|
|
||||||
{
|
|
||||||
// Failed to initialize the library
|
|
||||||
OutputDebugString("CASA_KRB5_MECH -DllMain- Library initialization failed\n");
|
|
||||||
retStatus = FALSE;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DLL_THREAD_ATTACH:
|
|
||||||
{
|
|
||||||
g_hModule = hModule;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case DLL_THREAD_DETACH:
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DLL_PROCESS_DETACH:
|
|
||||||
{
|
|
||||||
/* Don't uninitialize on windows
|
|
||||||
tbd
|
|
||||||
*/
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return retStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
//++=======================================================================
|
|
||||||
//
|
|
||||||
// DllCanUnloadNow
|
|
||||||
//
|
|
||||||
// Synopsis
|
|
||||||
//
|
|
||||||
//
|
|
||||||
STDAPI
|
|
||||||
DllCanUnloadNow()
|
|
||||||
//
|
|
||||||
// Input Arguments
|
|
||||||
//
|
|
||||||
// Ouput Arguments
|
|
||||||
//
|
|
||||||
// Return Value
|
|
||||||
// S_OK The DLL can be unloaded.
|
|
||||||
// S_FALSE The DLL cannot be unloaded now.
|
|
||||||
//
|
|
||||||
// Description
|
|
||||||
// An Exported Function.
|
|
||||||
// DLLs that support the OLE Component Object Model (COM) should implement
|
|
||||||
// and export DllCanUnloadNow.
|
|
||||||
// A call to DllCanUnloadNow determines whether the DLL from which it is
|
|
||||||
// exported is still in use. A DLL is no longer in use when it is not
|
|
||||||
// managing any existing objects (the reference count on all of its objects
|
|
||||||
// is 0).
|
|
||||||
// DllCanUnloadNow returns S_FALSE if there are any existing references to
|
|
||||||
// objects that the DLL manages.
|
|
||||||
//
|
|
||||||
// Environment
|
|
||||||
//
|
|
||||||
// See Also
|
|
||||||
//
|
|
||||||
//=======================================================================--
|
|
||||||
{
|
|
||||||
// tbd
|
|
||||||
return ((g_ulCount == 0 && g_ulLock == 0) ? S_OK : S_FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=========================================================================
|
|
||||||
//=========================================================================
|
|
||||||
|
|
@ -1,272 +0,0 @@
|
|||||||
/***********************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; version 2.1
|
|
||||||
* of the License.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Library Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, Novell, Inc.
|
|
||||||
*
|
|
||||||
* To contact Novell about this file by physical or electronic mail,
|
|
||||||
* you may find current contact information at www.novell.com.
|
|
||||||
*
|
|
||||||
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
//===[ Include files ]=====================================================
|
|
||||||
|
|
||||||
#include "internal.h"
|
|
||||||
|
|
||||||
//===[ Type definitions ]==================================================
|
|
||||||
|
|
||||||
//===[ Function prototypes ]===============================================
|
|
||||||
|
|
||||||
//===[ Global variables ]==================================================
|
|
||||||
|
|
||||||
|
|
||||||
//++=======================================================================
|
|
||||||
CasaStatus SSCS_CALL
|
|
||||||
AuthTokenIf_GetAuthToken(
|
|
||||||
IN const void *pIfInstance,
|
|
||||||
IN const char *pContext,
|
|
||||||
IN const char *pMechInfo,
|
|
||||||
INOUT char *pTokenBuf,
|
|
||||||
INOUT int *pTokenBufLen)
|
|
||||||
//
|
|
||||||
// Arguments:
|
|
||||||
// pIfInstance -
|
|
||||||
// Pointer to interface object.
|
|
||||||
//
|
|
||||||
// pServiceConfigIf -
|
|
||||||
// Pointer to service config object to which the client is trying to
|
|
||||||
// authenticate.
|
|
||||||
//
|
|
||||||
// pContext -
|
|
||||||
// Pointer to null terminated string containing mechanism specific
|
|
||||||
// context information. Another name for context is Authentication
|
|
||||||
// Realm.
|
|
||||||
//
|
|
||||||
// pMechInfo -
|
|
||||||
// Pointer to null terminated string containing mechanism specific
|
|
||||||
// information. This is information is provided by the server to
|
|
||||||
// aid the mechanism to generate an authentication token. For
|
|
||||||
// example, the mechanism information for a Kerberos mechanism
|
|
||||||
// may be the service principal name to which the user will be
|
|
||||||
// authenticating.
|
|
||||||
//
|
|
||||||
// pTokenBuf -
|
|
||||||
// Pointer to buffer that will receive the authentication
|
|
||||||
// token. The length of this buffer is specified by the
|
|
||||||
// pTokenBufLen parameter. Note that the the authentication
|
|
||||||
// token will be in the form of a NULL terminated string.
|
|
||||||
//
|
|
||||||
// pTokenBufLen -
|
|
||||||
// Pointer to integer that contains the length of the
|
|
||||||
// buffer pointed at by pTokenBuf. Upon return of the
|
|
||||||
// function, the integer will contain the actual length
|
|
||||||
// of the authentication token if the function successfully
|
|
||||||
// completes or the buffer length required if the function
|
|
||||||
// fails because the buffer pointed at by pUserNameBuf is
|
|
||||||
// not large enough.
|
|
||||||
//
|
|
||||||
// Returns:
|
|
||||||
// Casa Status
|
|
||||||
//
|
|
||||||
// Description:
|
|
||||||
// Get authentication token to authenticate user to specified service.
|
|
||||||
//
|
|
||||||
// L2
|
|
||||||
//=======================================================================--
|
|
||||||
{
|
|
||||||
CasaStatus retStatus;
|
|
||||||
char *pKrbServiceName = pMechInfo;
|
|
||||||
SECURITY_STATUS secStatus;
|
|
||||||
TimeStamp expiry;
|
|
||||||
CredHandle hCredentials = {0};
|
|
||||||
|
|
||||||
|
|
||||||
DbgTrace(1, "-AuthTokenIf_GetAuthToken- Start\n", 0);
|
|
||||||
|
|
||||||
// Validate input parameters
|
|
||||||
if (pIfInstance == NULL
|
|
||||||
|| pContext == NULL
|
|
||||||
|| pMechInfo == NULL
|
|
||||||
|| pTokenBufLen == NULL
|
|
||||||
|| (pTokenBuf == NULL && *pTokenBufLen != 0))
|
|
||||||
{
|
|
||||||
DbgTrace(0, "-AuthTokenIf_GetAuthToken- Invalid input parameter\n", 0);
|
|
||||||
|
|
||||||
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
|
|
||||||
CASA_FACILITY_KRB5TOKEN,
|
|
||||||
CASA_STATUS_INVALID_PARAMETER);
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Acquire a credential handle for the current user
|
|
||||||
secStatus = AcquireCredentialsHandle(NULL, // no principal name
|
|
||||||
"Kerberos", // package name
|
|
||||||
SECPKG_CRED_OUTBOUND,
|
|
||||||
NULL, // no logon id
|
|
||||||
NULL, // no auth data
|
|
||||||
NULL, // no get key fn
|
|
||||||
NULL, // noget key arg
|
|
||||||
&hCredentials,
|
|
||||||
&expiry);
|
|
||||||
if (secStatus == SEC_E_OK)
|
|
||||||
{
|
|
||||||
CtxtHandle hContext = {0};
|
|
||||||
SecBuffer sendTok;
|
|
||||||
SecBufferDesc outputDesc;
|
|
||||||
ULONG retFlags;
|
|
||||||
|
|
||||||
// We acquired the credential, now initialize a security context
|
|
||||||
// so that we can authenticate the user to the specified service.
|
|
||||||
//
|
|
||||||
// First ready an output descriptor so that we can receive the
|
|
||||||
// token buffer.
|
|
||||||
outputDesc.cBuffers = 1;
|
|
||||||
outputDesc.pBuffers = &sendTok;
|
|
||||||
outputDesc.ulVersion = SECBUFFER_VERSION;
|
|
||||||
|
|
||||||
sendTok.BufferType = SECBUFFER_TOKEN;
|
|
||||||
sendTok.cbBuffer = 0;
|
|
||||||
sendTok.pvBuffer = NULL;
|
|
||||||
|
|
||||||
// Initialize the security context for the specified service
|
|
||||||
secStatus = InitializeSecurityContext(&hCredentials,
|
|
||||||
NULL,
|
|
||||||
pKrbServiceName,
|
|
||||||
ISC_REQ_ALLOCATE_MEMORY,
|
|
||||||
0, // reserved
|
|
||||||
SECURITY_NATIVE_DREP,
|
|
||||||
NULL,
|
|
||||||
0, // reserved
|
|
||||||
&hContext,
|
|
||||||
&outputDesc,
|
|
||||||
&retFlags,
|
|
||||||
&expiry);
|
|
||||||
if (secStatus == SEC_E_OK)
|
|
||||||
{
|
|
||||||
char *pEncodedToken;
|
|
||||||
int encodedTokenLen;
|
|
||||||
|
|
||||||
// The security context was initialized, now return it to the caller after base64 encoding it.
|
|
||||||
retStatus = EncodeData(sendTok.pvBuffer,
|
|
||||||
(const int) sendTok.cbBuffer,
|
|
||||||
&pEncodedToken,
|
|
||||||
&encodedTokenLen);
|
|
||||||
if (CASA_SUCCESS(retStatus))
|
|
||||||
{
|
|
||||||
// Verify that the caller provided a buffer that is big enough
|
|
||||||
if (encodedTokenLen > *pTokenBufLen)
|
|
||||||
{
|
|
||||||
// The buffer is not big enough
|
|
||||||
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
|
|
||||||
CASA_FACILITY_KRB5TOKEN,
|
|
||||||
CASA_STATUS_BUFFER_OVERFLOW);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// The buffer provided is large enough, copy the data.
|
|
||||||
memcpy((void*) pTokenBuf, pEncodedToken, encodedTokenLen);
|
|
||||||
|
|
||||||
// Success
|
|
||||||
retStatus = CASA_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return the actual size or the size required
|
|
||||||
*pTokenBufLen = encodedTokenLen;
|
|
||||||
|
|
||||||
// Free the buffer containing the encoded token
|
|
||||||
free(pEncodedToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete the security context
|
|
||||||
DeleteSecurityContext(&hContext);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DbgTrace(0, "-AuthTokenIf_GetAuthToken- Failed to initialize the security context, error = %08X\n", secStatus);
|
|
||||||
|
|
||||||
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
|
|
||||||
CASA_FACILITY_KRB5TOKEN,
|
|
||||||
CASA_STATUS_UNSUCCESSFUL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Free any buffer associated with the sendToken
|
|
||||||
if (sendTok.pvBuffer)
|
|
||||||
FreeContextBuffer(sendTok.pvBuffer);
|
|
||||||
|
|
||||||
// Free the credential handle obtained
|
|
||||||
FreeCredentialsHandle(&hCredentials);
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DbgTrace(1, "-AuthTokenIf_GetAuthToken- Failed to obtain the credentials handle, error = %08X\n", secStatus);
|
|
||||||
|
|
||||||
// Set retStatus based on secStatus
|
|
||||||
if (secStatus == SEC_E_NOT_OWNER
|
|
||||||
|| secStatus == SEC_E_NO_CREDENTIALS)
|
|
||||||
{
|
|
||||||
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
|
|
||||||
CASA_FACILITY_KRB5TOKEN,
|
|
||||||
CASA_STATUS_NO_CREDENTIALS);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR,
|
|
||||||
CASA_FACILITY_KRB5TOKEN,
|
|
||||||
CASA_STATUS_UNSUCCESSFUL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exit:
|
|
||||||
|
|
||||||
DbgTrace(1, "-AuthTokenIf_GetAuthToken- End, retStatus = %08X\n", retStatus);
|
|
||||||
|
|
||||||
return retStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//++=======================================================================
|
|
||||||
int
|
|
||||||
InitializeLibrary(void)
|
|
||||||
//
|
|
||||||
// Arguments:
|
|
||||||
//
|
|
||||||
// Returns:
|
|
||||||
//
|
|
||||||
// Abstract:
|
|
||||||
//
|
|
||||||
// Notes:
|
|
||||||
//
|
|
||||||
// L2
|
|
||||||
//=======================================================================--
|
|
||||||
{
|
|
||||||
int retStatus = 0;
|
|
||||||
|
|
||||||
DbgTrace(1, "-InitializeLibrary- Start\n", 0);
|
|
||||||
|
|
||||||
// Nothing to do at this time.
|
|
||||||
|
|
||||||
DbgTrace(1, "-InitializeLibrary- End, retStatus = %08X\n", retStatus);
|
|
||||||
|
|
||||||
return retStatus;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//++=======================================================================
|
|
||||||
//++=======================================================================
|
|
||||||
//++=======================================================================
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
|||||||
LIBRARY KRB5MECH
|
|
||||||
DESCRIPTION 'CASA Kerberos V Authentication Mechanism Library.'
|
|
||||||
|
|
||||||
|
|
||||||
EXPORTS
|
|
||||||
; DllRegisterServer PRIVATE
|
|
||||||
; DllUnregisterServer PRIVATE
|
|
||||||
; DllGetClassObject PRIVATE
|
|
||||||
GetAuthTokenInterface PRIVATE
|
|
||||||
; DllCanUnloadNow PRIVATE
|
|
@ -1,35 +0,0 @@
|
|||||||
/***********************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; version 2.1
|
|
||||||
* of the License.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Library Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, Novell, Inc.
|
|
||||||
*
|
|
||||||
* To contact Novell about this file by physical or electronic mail,
|
|
||||||
* you may find current contact information at www.novell.com.
|
|
||||||
*
|
|
||||||
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
|
|
||||||
//===[ Include files ]=====================================================
|
|
||||||
|
|
||||||
#include "internal.h"
|
|
||||||
|
|
||||||
//===[ Type definitions ]==================================================
|
|
||||||
|
|
||||||
//===[ Function prototypes ]===============================================
|
|
||||||
|
|
||||||
//===[ Global variables ]==================================================
|
|
||||||
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
|||||||
/***********************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 Novell, Inc. All Rights Reserved.
|
|
||||||
*
|
|
||||||
* This library is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
|
||||||
* License as published by the Free Software Foundation; version 2.1
|
|
||||||
* of the License.
|
|
||||||
*
|
|
||||||
* This library is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* Library Lesser General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Lesser General Public
|
|
||||||
* License along with this library; if not, Novell, Inc.
|
|
||||||
*
|
|
||||||
* To contact Novell about this file by physical or electronic mail,
|
|
||||||
* you may find current contact information at www.novell.com.
|
|
||||||
*
|
|
||||||
* Author: Juan Carlos Luciani <jluciani@novell.com>
|
|
||||||
*
|
|
||||||
***********************************************************************/
|
|
||||||
|
|
||||||
#ifndef _PLATFORM_H_
|
|
||||||
#define _PLATFORM_H_
|
|
||||||
|
|
||||||
//===[ Include files ]=====================================================
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <winerror.h>
|
|
||||||
#include <security.h>
|
|
||||||
#include <sspi.h>
|
|
||||||
|
|
||||||
//===[ Type definitions ]==================================================
|
|
||||||
|
|
||||||
#ifndef CONTAINING_RECORD
|
|
||||||
#define CONTAINING_RECORD(address, type, field) ((type *)( \
|
|
||||||
(char*)(address) - \
|
|
||||||
(char*)(&((type *)0)->field)))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//
|
|
||||||
// DbgTrace macro define
|
|
||||||
//
|
|
||||||
//#define DbgTrace(LEVEL, X, Y) { \
|
|
||||||
//char printBuff[256]; \
|
|
||||||
// if (LEVEL == 0 || DebugLevel >= LEVEL) \
|
|
||||||
// { \
|
|
||||||
// _snprintf(printBuff, sizeof(printBuff), X, Y); \
|
|
||||||
// printf("Krb5Mech %s", printBuff); \
|
|
||||||
// } \
|
|
||||||
//}
|
|
||||||
#define DbgTrace(LEVEL, X, Y) { \
|
|
||||||
char formatBuff[128]; \
|
|
||||||
char printBuff[256]; \
|
|
||||||
if (LEVEL == 0 || DebugLevel >= LEVEL) \
|
|
||||||
{ \
|
|
||||||
strcpy(formatBuff, "Krb5Mech "); \
|
|
||||||
strncat(formatBuff, X, sizeof(formatBuff) - 9); \
|
|
||||||
_snprintf(printBuff, sizeof(printBuff), formatBuff, Y); \
|
|
||||||
OutputDebugString(printBuff); \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define bool BOOLEAN
|
|
||||||
#define true TRUE
|
|
||||||
#define false FALSE
|
|
||||||
|
|
||||||
//===[ Inlines functions ]===============================================
|
|
||||||
|
|
||||||
//===[ Function prototypes ]===============================================
|
|
||||||
|
|
||||||
//===[ Global externals ]==================================================
|
|
||||||
|
|
||||||
//===[ External prototypes ]===============================================
|
|
||||||
|
|
||||||
|
|
||||||
//=========================================================================
|
|
||||||
|
|
||||||
#endif // _PLATFORM_H_
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user