From 640085caa989dd3edd21871ae22c732c5ac2838c Mon Sep 17 00:00:00 2001 From: Juan Carlos Luciani Date: Fri, 28 Apr 2006 19:07:43 +0000 Subject: [PATCH] --- auth_token/client/win32/platutils.c | 549 ---------------------------- 1 file changed, 549 deletions(-) delete mode 100644 auth_token/client/win32/platutils.c diff --git a/auth_token/client/win32/platutils.c b/auth_token/client/win32/platutils.c deleted file mode 100644 index 7ffc0fb3..00000000 --- a/auth_token/client/win32/platutils.c +++ /dev/null @@ -1,549 +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 - * - ***********************************************************************/ - -//===[ Include files ]===================================================== - -#include "internal.h" - -//===[ Type definitions ]================================================== - -// -// Normalized Host Name Cache Entry definition -// -typedef struct _NormalizedHostNameCacheEntry -{ - LIST_ENTRY listEntry; - char *pHostName; - char *pNormalizedHostName; - int buffLengthRequired; - -} NormalizedHostNameCacheEntry, *PNormalizedHostNameCacheEntry; - - -//===[ Function prototypes ]=============================================== - -//===[ Global variables ]================================================== - -// Global synchronization mutex for the user -static -HANDLE hUserMutex; - -// Normalized host name cache list head -static -LIST_ENTRY normalizedHostNameCacheListHead; - -// Synchronization mutex for the normalized host name cache -static -HANDLE hNormalizedHostNameCacheMutex; - -// Authentication mechanism configuration file folder -char mechConfigFolder[] = "\\Program Files\\Novell\\Casa\\Etc\\Auth\\Mechanisms"; - -// Path separator -char pathCharString[] = "\\"; - - -//++======================================================================= -CasaStatus -CreateUserMutex(void) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - CasaStatus retStatus = CASA_STATUS_SUCCESS; - char *pUsername = NULL; - DWORD nameLength = 0; - - DbgTrace(1, "-CreateUserMutex- Start\n", 0); - - // Get the size of the buffer required to obtain the user name - GetUserName(pUsername, &nameLength); - if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) - { - // Allocate buffer to hold the user name - pUsername = (char*) malloc(nameLength); - if (pUsername) - { - // Get the name of the user - if (GetUserName(pUsername, &nameLength)) - { - SECURITY_ATTRIBUTES mutexAttributes; - char mutexName[256]; - - // Now lets create a global semaphore for the - // user and allow its handle to be inherited. - mutexAttributes.nLength = sizeof(mutexAttributes); - mutexAttributes.lpSecurityDescriptor = NULL; - mutexAttributes.bInheritHandle = TRUE; - if (sprintf(mutexName, "Global\\CASA_Auth_Mutex_%s", pUsername) != -1) - { - hUserMutex = CreateMutex(&mutexAttributes, - FALSE, - mutexName); - if (hUserMutex == NULL) - { - DbgTrace(0, "-CreateUserMutex- CreteMutex failed, error = %d\n", GetLastError()); - retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, - CASA_FACILITY_AUTHTOKEN, - CASA_STATUS_UNSUCCESSFUL); - } - } - else - { - DbgTrace(0, "-CreateUserMutex- sprintf failed, error = %d\n", GetLastError()); - retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, - CASA_FACILITY_AUTHTOKEN, - CASA_STATUS_UNSUCCESSFUL); - } - } - else - { - DbgTrace(0, "-CreateUserMutex- GetUserName failed, error = %d\n", GetLastError()); - retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, - CASA_FACILITY_AUTHTOKEN, - CASA_STATUS_UNSUCCESSFUL); - } - - // Free the buffer allocated to hold the user name - free(pUsername); - } - else - { - DbgTrace(0, "-CreateUserMutex- Buffer allocation error\n", 0); - retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, - CASA_FACILITY_AUTHTOKEN, - CASA_STATUS_INSUFFICIENT_RESOURCES); - } - } - else - { - DbgTrace(0, "-CreateUserMutex- Un-expected GetUserName error, error = %d\n", GetLastError()); - retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, - CASA_FACILITY_AUTHTOKEN, - CASA_STATUS_UNSUCCESSFUL); - } - - DbgTrace(1, "-CreateUserMutex- End, retStatus\n", retStatus); - - return retStatus; -} - - -//++======================================================================= -void -AcquireUserMutex(void) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - DbgTrace(2, "-AcquireUserMutex- Start\n", 0); - - WaitForSingleObject(hUserMutex, INFINITE); - - DbgTrace(2, "-AcquireUserMutex- End\n", 0); -} - - -//++======================================================================= -void -ReleaseUserMutex(void) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - DbgTrace(2, "-ReleaseUserMutex- Start\n", 0); - - if (ReleaseMutex(hUserMutex) == 0) - { - DbgTrace(0, "-ReleaseUserMutex- ReleaseMutex failed, error = %d\n", GetLastError()); - } - - DbgTrace(2, "-ReleaseUserMutex- End\n", 0); -} - - -//++======================================================================= -LIB_HANDLE -OpenLibrary( - IN char *pFileName) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - LIB_HANDLE libHandle; - - - DbgTrace(1, "-OpenLibrary- Start\n", 0); - - libHandle = LoadLibrary(pFileName); - if (libHandle == NULL) - { - DbgTrace(0, "-OpenLibrary- Not able to load library, error = %d\n", GetLastError()); - } - - DbgTrace(1, "-OpenLibrary- End, handle = %08X\n", libHandle); - - return libHandle; -} - - -//++======================================================================= -void -CloseLibrary( - IN LIB_HANDLE libHandle) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - DbgTrace(1, "-CloseLibrary- Start\n", 0); - - FreeLibrary(libHandle); - - DbgTrace(1, "-CloseLibrary- End\n", 0); -} - - -//++======================================================================= -void* -GetFunctionPtr( - IN LIB_HANDLE libHandle, - IN char *pFunctionName) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - void *pFuncPtr; - - - DbgTrace(1, "-GetFunctionPtr- Start\n", 0); - - pFuncPtr = GetProcAddress(libHandle, pFunctionName); - if (pFuncPtr == NULL) - { - DbgTrace(0, "-GetFunctionPtr- Not able to obtain func ptr, error = %d\n", GetLastError()); - } - - DbgTrace(1, "-GetFunctionPtr- End, pFuncPtr = %08X\n", pFuncPtr); - - return pFuncPtr; -} - - -//++======================================================================= -char* -NormalizeHostName( - IN char *pHostName) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - char *pNormalizedName = NULL; - LIST_ENTRY *pListEntry; - NormalizedHostNameCacheEntry *pEntry = NULL; - - - DbgTrace(1, "-NormalizeHostName- Start\n", 0); - - // Obtain our synchronization mutex - WaitForSingleObject(hNormalizedHostNameCacheMutex, INFINITE); - - // First try to find an entry in the normalized host name cache - // for the host name provided. - pListEntry = normalizedHostNameCacheListHead.Flink; - while (pListEntry != &normalizedHostNameCacheListHead) - { - // Get pointer to the entry - pEntry = CONTAINING_RECORD(pListEntry, NormalizedHostNameCacheEntry, listEntry); - - // Check if the entry is for the host name - if (strcmp(pHostName, pEntry->pHostName) == 0) - { - // This entry corresponds to the given host name - break; - } - else - { - // The entry does not correspond to the given host name - pEntry = NULL; - } - - // Advance to the next entry - pListEntry = pListEntry->Flink; - } - - // Check if we found an entry in our cache for the given host name - if (pEntry) - { - // Entry found, obtain the normalized name from it. - pNormalizedName = (char*) malloc(pEntry->buffLengthRequired); - if (pNormalizedName) - { - // Copy the normalized name onto the allocated buffer - strcpy(pNormalizedName, pEntry->pNormalizedHostName); - } - else - { - DbgTrace(0, "-NormalizeHostName- Buffer allocation error\n", 0); - } - } - else - { - // An entry was not found in our cache, create one. - pEntry = (NormalizedHostNameCacheEntry*) malloc(sizeof(NormalizedHostNameCacheEntry)); - if (pEntry) - { - // Zero the entry - memset(pEntry, 0, sizeof(*pEntry)); - - // Allocate a buffer to hold the host name in the entry - pEntry->pHostName = (char*) malloc(strlen(pHostName) + 1); - if (pEntry->pHostName) - { - struct hostent *pLookupResult; - struct sockaddr_in sockAddr = {0}; - - // Copy the host name given into the allocated buffer - strcpy(pEntry->pHostName, pHostName); - - // Now try to resolve the normalized name - pLookupResult = gethostbyname(pHostName); - if (pLookupResult && pLookupResult->h_addrtype == AF_INET) - { - char dnsHostName[NI_MAXHOST]; - - // Set up a sockaddr structure - sockAddr.sin_family = AF_INET; - sockAddr.sin_addr.S_un.S_addr = *((int*) pLookupResult->h_addr_list[0]); - - // Now try to resolve the name using DNS - if (getnameinfo((const struct sockaddr*) &sockAddr, - sizeof(sockAddr), - dnsHostName, - sizeof(dnsHostName), - NULL, - 0, - NI_NAMEREQD) == 0) - { - // We resolved the address to a DNS name, use it as the normalized name. - pEntry->buffLengthRequired = (int) strlen(dnsHostName) + 1; - pEntry->pNormalizedHostName = (char*) malloc(pEntry->buffLengthRequired); - if (pEntry->pNormalizedHostName) - { - // Copy the dns name - strcpy(pEntry->pNormalizedHostName, dnsHostName); - } - else - { - DbgTrace(0, "-NormalizeHostName- Buffer allocation error\n", 0); - } - } - else - { - DbgTrace(0, "-NormalizeHostName- getnameInfo failed, error %d\n", WSAGetLastError()); - - // Not able to resolve the name in DNS, just use the host name as - // the normalized name. - pEntry->buffLengthRequired = (int) strlen(pHostName) + 1; - pEntry->pNormalizedHostName = (char*) malloc(pEntry->buffLengthRequired); - if (pEntry->pNormalizedHostName) - { - // Copy the host name - strcpy(pEntry->pNormalizedHostName, pHostName); - } - else - { - DbgTrace(0, "-NormalizeHostName- Buffer allocation error\n", 0); - } - } - } - else - { - DbgTrace(0, "-NormalizeHostName- Name resolution failed, error = %d\n", WSAGetLastError()); - } - } - else - { - DbgTrace(0, "-NormalizeHostName- Buffer allocation error\n", 0); - - // Free the space allocated for the entry - free(pEntry); - } - - // Proceed based on whether or not we normalized the name - if (pEntry->pNormalizedHostName) - { - // The name was normalized, save the entry in our cache. - InsertHeadList(&normalizedHostNameCacheListHead, &pEntry->listEntry); - - // Return the normalized name present in the entry - pNormalizedName = (char*) malloc(pEntry->buffLengthRequired); - if (pNormalizedName) - { - // Copy the normalized name onto the allocated buffer - strcpy(pNormalizedName, pEntry->pNormalizedHostName); - } - else - { - DbgTrace(0, "-NormalizeHostName- Buffer allocation error\n", 0); - } - } - else - { - // The host name was not normalized, free allocated resources. - if (pEntry->pHostName) - free(pEntry->pHostName); - free(pEntry); - } - } - else - { - DbgTrace(0, "-NormalizeHostName- Buffer allocation error\n", 0); - } - } - - // Release our synchronization mutex - if (ReleaseMutex(hNormalizedHostNameCacheMutex) == 0) - { - DbgTrace(0, "-NormalizeHostName- ReleaseMutex failed, error\n", 0); - } - - DbgTrace(1, "-NormalizeHostName- End, pNormalizedName = %08X\n", pNormalizedName); - - return pNormalizedName; -} - - -//++======================================================================= -CasaStatus -InitializeHostNameNormalization(void) -// -// Arguments: -// -// Returns: -// -// Abstract: -// -// Notes: -// -// L2 -//=======================================================================-- -{ - CasaStatus retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, - CASA_FACILITY_AUTHTOKEN, - CASA_STATUS_UNSUCCESSFUL); - int winsockStartupResult; - WSADATA winsockData; - - DbgTrace(1, "-InitializeHostNameNormalization- Start\n", 0); - - // Initialize winsock - if ((winsockStartupResult = WSAStartup(MAKEWORD(2,2), &winsockData)) == 0) - { - // Initialize the cache list head - InitializeListHead(&normalizedHostNameCacheListHead); - - // Create a cache mutex only applicable to the current process - hNormalizedHostNameCacheMutex = CreateMutex(NULL, - FALSE, - NULL); - if (hNormalizedHostNameCacheMutex != NULL) - { - retStatus = CASA_STATUS_SUCCESS; - } - else - { - DbgTrace(0, "-InitializeHostNameNormalization- CreateMutex failed, error = %d\n", GetLastError()); - } - } - else - { - DbgTrace(0, "-InitializeHostNameNormalization- WSAStartup failed, error = %d\n", winsockStartupResult); - } - - DbgTrace(1, "-InitializeHostNameNormalization- End, retStatus = %08X\n", retStatus); - - return retStatus; -} - - -//++======================================================================= -//++======================================================================= -//++======================================================================= -