This commit is contained in:
		| @@ -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 <jluciani@novell.com> |  | ||||||
|  * |  | ||||||
|  ***********************************************************************/ |  | ||||||
|  |  | ||||||
| //===[ 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; |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| //++======================================================================= |  | ||||||
| //++======================================================================= |  | ||||||
| //++======================================================================= |  | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user