Adding client files lost during folder re-structuring.
This commit is contained in:
		
							
								
								
									
										132
									
								
								CASA-auth-token/non-java/client/mechanisms/krb5/windows/dllsup.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										132
									
								
								CASA-auth-token/non-java/client/mechanisms/krb5/windows/dllsup.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,132 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  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); | ||||
| } | ||||
|  | ||||
| //========================================================================= | ||||
| //========================================================================= | ||||
|  | ||||
							
								
								
									
										272
									
								
								CASA-auth-token/non-java/client/mechanisms/krb5/windows/get.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										272
									
								
								CASA-auth-token/non-java/client/mechanisms/krb5/windows/get.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,272 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  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; | ||||
| } | ||||
|  | ||||
|  | ||||
| //++======================================================================= | ||||
| //++======================================================================= | ||||
| //++======================================================================= | ||||
|  | ||||
| @@ -0,0 +1,10 @@ | ||||
| LIBRARY         KRB5MECH | ||||
| DESCRIPTION     'CASA Kerberos V Authentication Mechanism Library.' | ||||
|  | ||||
|  | ||||
| EXPORTS | ||||
| ;                DllRegisterServer   PRIVATE | ||||
| ;                DllUnregisterServer PRIVATE | ||||
| ;                DllGetClassObject   PRIVATE | ||||
|                 GetAuthTokenInterface  PRIVATE         | ||||
| ;               DllCanUnloadNow     PRIVATE   | ||||
| @@ -0,0 +1,35 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  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 ]================================================== | ||||
|  | ||||
|  | ||||
| @@ -0,0 +1,83 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  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_ | ||||
|  | ||||
		Reference in New Issue
	
	Block a user