Modified the folder name to be compatible with the make system for windows.
This commit is contained in:
		| @@ -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_ |  | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user