Re-adding the client folder to make sure that it is up to date.
This commit is contained in:
		
							
								
								
									
										615
									
								
								CASA-auth-token/native/client/cache.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										615
									
								
								CASA-auth-token/native/client/cache.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,615 @@ | ||||
| /*********************************************************************** | ||||
|  *  | ||||
|  *  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" | ||||
| #include <micasa.h> | ||||
|  | ||||
| //===[ Type definitions ]================================================== | ||||
|  | ||||
| // | ||||
| // Registry Key/Value defines used in the AuthCache | ||||
| // | ||||
| #define CASA_AUTH_CACHE_REG_KEY     "CASA_Auth_Cache" | ||||
| #define CREATION_TIME_REG_VALUE     "CreationTime" | ||||
| #define EXPIRATION_TIME_REG_VALUE   "ExpirationTime" | ||||
| #define DOES_NOT_EXPIRE_REG_VALUE   "DoesNotExpire" | ||||
| #define STATUS_REG_VALUE            "Status" | ||||
| #define TOKEN_REG_VALUE             "Token" | ||||
|  | ||||
|  | ||||
| //===[ Function prototypes ]=============================================== | ||||
|  | ||||
| //===[ Global variables ]================================================== | ||||
|  | ||||
| // Non-host specific key name | ||||
| static | ||||
| char     g_allHosts[] = "AllHosts"; | ||||
|  | ||||
| static | ||||
| int      g_cacheEntryCount = 0; | ||||
|  | ||||
| HANDLE   g_hCASAContext; | ||||
|  | ||||
| //++======================================================================= | ||||
| AuthCacheEntry* | ||||
| CreateAuthTokenCacheEntry( | ||||
|    IN    const char *pCacheKey, | ||||
|    IN    const char *pGroupOrHostName, | ||||
|    IN	 CasaStatus status, | ||||
|    IN    unsigned char *pToken, | ||||
|    IN    int entryLifetime // seconds (0 == Lives forever) | ||||
|    ) | ||||
| // | ||||
| //  Arguments:  | ||||
| // | ||||
| //  Returns:    | ||||
| // | ||||
| //  Abstract:   | ||||
| // | ||||
| //  Notes: | ||||
| // | ||||
| // L2 | ||||
| //=======================================================================-- | ||||
| { | ||||
|    CasaStatus        	retStatus; | ||||
|    SSCS_KEYCHAIN_ID_T   sessionKeyChain = {26, "SSCS_SESSION_KEY_CHAIN_ID"}; | ||||
|    SSCS_SECRET_ID_T     sharedId = {27, "CASA_AUTHENTICATION_TOKENS"}; | ||||
|    uint32_t             tokenSize, entrySize, keySize; | ||||
|    AuthCacheEntry 		*pEntry = NULL; | ||||
|    unsigned char		*pKey; | ||||
|  | ||||
|  | ||||
|    DbgTrace(1, "-CreateAuthTokenCacheEntry- Start\n", 0); | ||||
|  | ||||
|    if (status == CASA_STATUS_SUCCESS) | ||||
|    { | ||||
| 	  tokenSize = (uint32_t)strlen(pToken); | ||||
|    } | ||||
|    else | ||||
|    { | ||||
| 	  tokenSize = 0; | ||||
|    } | ||||
|  | ||||
|    entrySize = tokenSize + sizeof(AuthCacheEntry); | ||||
|  | ||||
|    // Allocate space for the entry | ||||
|    // The AuthCacheEntry structure contains room for the tokens NULL terminator | ||||
|    pEntry = (AuthCacheEntry*) malloc(entrySize); | ||||
|    if (pEntry) | ||||
|    { | ||||
| 	  // Set the status | ||||
| 	  pEntry->status = status; | ||||
|  | ||||
| 	  if (pEntry->status == CASA_STATUS_SUCCESS) | ||||
| 	  { | ||||
| 		 memcpy(&pEntry->token[0], pToken, tokenSize); | ||||
| 	  } | ||||
|  | ||||
| 	  pEntry->token[tokenSize] = '\0'; | ||||
|  | ||||
| 	  // Set the time when the entry was added to the cache | ||||
| 	  pEntry->creationTime = GetTickCount(); | ||||
|  | ||||
| 	  // First determine the time when the entry is due to expire | ||||
| 	  if (entryLifetime != 0) | ||||
| 	  { | ||||
| 		 pEntry->expirationTime = pEntry->creationTime + (entryLifetime * 1000); | ||||
| 		 pEntry->doesNotExpire = FALSE; | ||||
| 	  } | ||||
| 	  else | ||||
| 	  { | ||||
| 		 // The entry does not expire | ||||
| 		 pEntry->expirationTime = 0; | ||||
| 		 pEntry->doesNotExpire = TRUE; | ||||
| 	  } | ||||
|  | ||||
| 	  keySize = (uint32_t)strlen(pCacheKey) + (uint32_t)strlen(pGroupOrHostName) + 2; | ||||
|  | ||||
| 	  pKey = malloc(keySize); | ||||
|  | ||||
| 	  if (pKey) | ||||
| 	  { | ||||
| 		 strncpy(pKey, pCacheKey, keySize); | ||||
| 		 strncat(pKey, "@", keySize); | ||||
| 		 strncat(pKey, pGroupOrHostName, keySize); | ||||
|  | ||||
| 		 retStatus = miCASAWriteBinaryKey( | ||||
| 						g_hCASAContext, | ||||
| 						0, | ||||
| 						&sessionKeyChain, | ||||
| 						&sharedId, | ||||
| 						pKey, | ||||
| 						keySize, | ||||
| 						(uint8_t *)pEntry, | ||||
| 						&entrySize, | ||||
| 						NULL, | ||||
| 						NULL); | ||||
|  | ||||
|  | ||||
| 		 free(pKey); | ||||
| 	  } | ||||
| 	  else | ||||
| 	  { | ||||
| 		 retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, | ||||
| 									 CASA_FACILITY_AUTHTOKEN, | ||||
| 									 CASA_STATUS_INSUFFICIENT_RESOURCES); | ||||
| 	  } | ||||
|    } | ||||
|    else | ||||
|    { | ||||
| 	  retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, | ||||
| 								  CASA_FACILITY_AUTHTOKEN, | ||||
| 								  CASA_STATUS_INSUFFICIENT_RESOURCES); | ||||
|    } | ||||
|  | ||||
|    DbgTrace(1, "-CreateAuthTokenCacheEntry- End, pEntry = %08X\n", pEntry); | ||||
|  | ||||
|    return pEntry; | ||||
| } | ||||
|  | ||||
|  | ||||
| //++======================================================================= | ||||
| AuthCacheEntry* | ||||
| CreateSessionTokenCacheEntry( | ||||
|    IN    const char *pCacheKey, | ||||
|    IN	 CasaStatus status, | ||||
|    IN    unsigned char *pToken, | ||||
|    IN    int entryLifetime // seconds (0 == Lives forever) | ||||
|    ) | ||||
| // | ||||
| //  Arguments:  | ||||
| // | ||||
| //  Returns:    | ||||
| // | ||||
| //  Abstract:   | ||||
| // | ||||
| //  Notes: | ||||
| // | ||||
| // L2 | ||||
| //=======================================================================-- | ||||
| { | ||||
|    CasaStatus        	retStatus; | ||||
|    SSCS_KEYCHAIN_ID_T   sessionKeyChain = {26, "SSCS_SESSION_KEY_CHAIN_ID"}; | ||||
|    SSCS_SECRET_ID_T     sharedId = {20, "CASA_SESSION_TOKENS"}; | ||||
|    uint32_t             tokenSize, entrySize; | ||||
|    AuthCacheEntry 		*pEntry = NULL; | ||||
|  | ||||
|  | ||||
|    DbgTrace(1, "-CreateSessionTokenCacheEntry- Start\n", 0); | ||||
|  | ||||
|    if (status == CASA_STATUS_SUCCESS) | ||||
|    { | ||||
| 	  tokenSize = (uint32_t)strlen(pToken); | ||||
|    } | ||||
|    else | ||||
|    { | ||||
| 	  tokenSize = 0; | ||||
|    } | ||||
|  | ||||
|    entrySize = tokenSize + sizeof(AuthCacheEntry); | ||||
|  | ||||
|    // Allocate space for the entry | ||||
|    // The AuthCacheEntry structure contains room for the tokens NULL terminator | ||||
|    pEntry = (AuthCacheEntry*) malloc(entrySize); | ||||
|    if (pEntry) | ||||
|    { | ||||
| 	  // Set the status | ||||
| 	  pEntry->status = status; | ||||
|  | ||||
| 	  if (pEntry->status == CASA_STATUS_SUCCESS) | ||||
| 	  { | ||||
| 		 memcpy(&pEntry->token[0], pToken, tokenSize); | ||||
| 	  } | ||||
|  | ||||
| 	  pEntry->token[tokenSize] = '\0'; | ||||
|  | ||||
| 	  // Set the time when the entry was added to the cache | ||||
| 	  pEntry->creationTime = GetTickCount(); | ||||
|  | ||||
| 	  // First determine the time when the entry is due to expire | ||||
| 	  if (entryLifetime != 0) | ||||
| 	  { | ||||
| 		 pEntry->expirationTime = pEntry->creationTime + (entryLifetime * 1000); | ||||
| 		 pEntry->doesNotExpire = FALSE; | ||||
| 	  } | ||||
| 	  else | ||||
| 	  { | ||||
| 		 // The entry does not expire | ||||
| 		 pEntry->expirationTime = 0; | ||||
| 		 pEntry->doesNotExpire = TRUE; | ||||
| 	  } | ||||
|  | ||||
| 	  retStatus = miCASAWriteBinaryKey( | ||||
| 					 g_hCASAContext, | ||||
| 					 0, | ||||
| 					 &sessionKeyChain, | ||||
| 					 &sharedId, | ||||
| 					 (char *)pCacheKey, | ||||
| 					 (uint32_t)strlen(pCacheKey) + 1, | ||||
| 					 (uint8_t *)pEntry, | ||||
| 					 &entrySize, | ||||
| 					 NULL, | ||||
| 					 NULL); | ||||
|    } | ||||
|    else | ||||
|    { | ||||
| 	  retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, | ||||
| 								  CASA_FACILITY_AUTHTOKEN, | ||||
| 								  CASA_STATUS_INSUFFICIENT_RESOURCES); | ||||
|    } | ||||
|  | ||||
|    DbgTrace(1, "-CreateSessionTokenCacheEntry- End, pEntry = %08X\n", pEntry); | ||||
|  | ||||
|    return pEntry; | ||||
| } | ||||
|  | ||||
|  | ||||
| //++======================================================================= | ||||
| void | ||||
| FreeAuthCacheEntry( | ||||
|    IN    AuthCacheEntry *pEntry | ||||
|    ) | ||||
| // | ||||
| //  Arguments:  | ||||
| // | ||||
| //  Returns:    | ||||
| // | ||||
| //  Abstract:   | ||||
| // | ||||
| //  Notes: | ||||
| // | ||||
| // L2 | ||||
| //=======================================================================-- | ||||
| { | ||||
|    DbgTrace(1, "-FreeAuthCacheEntry- Start, pEntry = %08X\n", pEntry); | ||||
|  | ||||
|    // Free the entry | ||||
|    free(pEntry); | ||||
|  | ||||
|    DbgTrace(1, "-FreeAuthCacheEntry- End\n", 0); | ||||
| } | ||||
|  | ||||
|  | ||||
| //++======================================================================= | ||||
| static | ||||
| BOOL | ||||
| CacheEntryLifetimeExpired( | ||||
|    IN    DWORD creationTime, | ||||
|    IN    DWORD expirationTime | ||||
|    ) | ||||
| // | ||||
| //  Arguments:  | ||||
| // | ||||
| //  Returns:    | ||||
| // | ||||
| //  Abstract:   | ||||
| // | ||||
| //  Notes: | ||||
| // | ||||
| // L2 | ||||
| //=======================================================================-- | ||||
| { | ||||
|    DWORD currentTime = GetTickCount(); | ||||
|    BOOL  expired = FALSE; | ||||
|  | ||||
|    DbgTrace(2, "-CacheEntryLifetimeExpired- Start\n", 0); | ||||
|  | ||||
|    // Check if the clock has wrapped | ||||
|    if (currentTime >= creationTime) | ||||
|    { | ||||
|       // The clock has not wrapped, check if the | ||||
|       // expiration time has wrapped. | ||||
|       if (expirationTime > creationTime) | ||||
|       { | ||||
|          // The expiration time also has not wrapped, | ||||
|          // do a straight compare against the current | ||||
|          // time. | ||||
|          if (currentTime >= expirationTime) | ||||
|          { | ||||
|             // It has expired | ||||
|             expired = TRUE; | ||||
|          } | ||||
|       } | ||||
|    } | ||||
|    else | ||||
|    { | ||||
|       // The clock has wrapped, check if the expiration | ||||
|       // time also wrapped. | ||||
|       if (expirationTime > creationTime) | ||||
|       { | ||||
|          // The expiration time did not wrap, therefore | ||||
|          // it has been exceeded since the clock wrapped. | ||||
|          expired = TRUE; | ||||
|       } | ||||
|       else | ||||
|       { | ||||
|          // The expiration time also wrapped, do a straight | ||||
|          // compare against the current time. | ||||
|          if (currentTime >= expirationTime) | ||||
|          { | ||||
|             // It has expired | ||||
|             expired = TRUE; | ||||
|          } | ||||
|       } | ||||
|    } | ||||
|  | ||||
|    DbgTrace(2, "-CacheEntryLifetimeExpired- End, result = %08X\n", expired); | ||||
|  | ||||
|    return expired; | ||||
| } | ||||
|  | ||||
|  | ||||
| //++======================================================================= | ||||
| AuthCacheEntry* | ||||
| FindSessionTokenEntryInCache( | ||||
|    IN    const char *pCacheKey | ||||
|    ) | ||||
| // | ||||
| //  Arguments:  | ||||
| // | ||||
| //  Returns:    | ||||
| // | ||||
| //  Abstract:   | ||||
| // | ||||
| //  Notes: | ||||
| // | ||||
| // L2 | ||||
| //=======================================================================-- | ||||
| { | ||||
|    CasaStatus        	retStatus; | ||||
|    SSCS_KEYCHAIN_ID_T   sessionKeyChain = {26, "SSCS_SESSION_KEY_CHAIN_ID"}; | ||||
|    SSCS_SECRET_ID_T     sharedId = {20, "CASA_SESSION_TOKENS"}; | ||||
|    uint32_t             valueLength, bytesRequired; | ||||
|    AuthCacheEntry 		*pEntry = NULL; | ||||
|  | ||||
|  | ||||
|    DbgTrace(1, "-FindSessionTokenEntryInCache- Start\n", 0); | ||||
|  | ||||
|    valueLength = 0; | ||||
|    bytesRequired = 0; | ||||
|  | ||||
|    retStatus = miCASAReadBinaryKey( | ||||
| 				  g_hCASAContext, | ||||
| 				  0, | ||||
| 				  &sessionKeyChain, | ||||
| 				  &sharedId, | ||||
| 				  (char *)pCacheKey, | ||||
| 				  (uint32_t)strlen(pCacheKey) + 1, | ||||
| 				  NULL, | ||||
| 				  &valueLength, | ||||
| 				  NULL, | ||||
| 				  &bytesRequired, | ||||
| 				  NULL); | ||||
|  | ||||
|    if (retStatus == NSSCS_E_ENUM_BUFF_TOO_SHORT | ||||
| 	   && bytesRequired != 0) | ||||
|    { | ||||
| 	  pEntry = (AuthCacheEntry*) malloc(bytesRequired); | ||||
|  | ||||
| 	  if (pEntry) | ||||
| 	  { | ||||
| 		 valueLength = bytesRequired; | ||||
| 		 bytesRequired = 0; | ||||
|  | ||||
| 		 retStatus = miCASAReadBinaryKey( | ||||
| 						g_hCASAContext, | ||||
| 						0, | ||||
| 						&sessionKeyChain, | ||||
| 						&sharedId, | ||||
| 						(char *)pCacheKey, | ||||
| 						(uint32_t)strlen(pCacheKey) + 1, | ||||
| 						(uint8_t *)pEntry, | ||||
| 						&valueLength, | ||||
| 						NULL, | ||||
| 						&bytesRequired, | ||||
| 						NULL); | ||||
|  | ||||
| 		 if (CASA_SUCCESS(retStatus)) | ||||
| 		 { | ||||
| 			if (pEntry->doesNotExpire == FALSE | ||||
| 				&& CacheEntryLifetimeExpired(pEntry->creationTime, pEntry->expirationTime)) | ||||
| 			{ | ||||
| 			   // Remove the entry ??? | ||||
| 			   //miCASARemoveBinaryKey(); | ||||
|  | ||||
| 			   retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, | ||||
| 										   CASA_FACILITY_AUTHTOKEN, | ||||
| 										   CASA_STATUS_UNSUCCESSFUL); | ||||
| 			} | ||||
| 		 } | ||||
|  | ||||
| 		 if (!CASA_SUCCESS(retStatus)) | ||||
| 		 { | ||||
| 			FreeAuthCacheEntry(pEntry); | ||||
| 			pEntry = NULL; | ||||
| 		 } | ||||
| 	  } | ||||
|    } | ||||
| 				   | ||||
|    DbgTrace(1, "-FindSessionTokenEntryInCache- End, pEntry = %08X\n", pEntry); | ||||
|  | ||||
|    return pEntry; | ||||
| } | ||||
|  | ||||
| //++======================================================================= | ||||
| AuthCacheEntry* | ||||
| FindAuthTokenEntryInCache( | ||||
|    IN    const char *pCacheKey, | ||||
|    IN    const char *pGroupOrHostName | ||||
|    ) | ||||
| // | ||||
| //  Arguments:  | ||||
| // | ||||
| //  Returns:    | ||||
| // | ||||
| //  Abstract:   | ||||
| // | ||||
| //  Notes: | ||||
| // | ||||
| // L2 | ||||
| //=======================================================================-- | ||||
| { | ||||
|    CasaStatus        	retStatus; | ||||
|    SSCS_KEYCHAIN_ID_T   sessionKeyChain = {26, "SSCS_SESSION_KEY_CHAIN_ID"}; | ||||
|    SSCS_SECRET_ID_T     sharedId = {27, "CASA_AUTHENTICATION_TOKENS"}; | ||||
|    uint32_t             valueLength, bytesRequired, keySize; | ||||
|    AuthCacheEntry 		*pEntry = NULL; | ||||
|    unsigned char		*pKey; | ||||
|  | ||||
|  | ||||
|    DbgTrace(1, "-FindAuthTokenEntryInCache- Start\n", 0); | ||||
|  | ||||
|    keySize = (uint32_t)strlen(pCacheKey) + (uint32_t)strlen(pGroupOrHostName) + 2; | ||||
|  | ||||
|    pKey = malloc(keySize); | ||||
|  | ||||
|    if (pKey) | ||||
|    { | ||||
| 	  strncpy(pKey, pCacheKey, keySize); | ||||
| 	  strncat(pKey, "@", keySize); | ||||
| 	  strncat(pKey, pGroupOrHostName, keySize); | ||||
|  | ||||
| 	  valueLength = 0; | ||||
| 	  bytesRequired = 0; | ||||
|     | ||||
| 	  retStatus = miCASAReadBinaryKey( | ||||
| 					 g_hCASAContext, | ||||
| 					 0, | ||||
| 					 &sessionKeyChain, | ||||
| 					 &sharedId, | ||||
| 					 pKey, | ||||
| 					 keySize, | ||||
| 					 NULL, | ||||
| 					 &valueLength, | ||||
| 					 NULL, | ||||
| 					 &bytesRequired, | ||||
| 					 NULL); | ||||
|     | ||||
| 	  if (retStatus == NSSCS_E_ENUM_BUFF_TOO_SHORT | ||||
| 		  && bytesRequired != 0) | ||||
| 	  { | ||||
| 		 pEntry = (AuthCacheEntry*) malloc(bytesRequired); | ||||
|     | ||||
| 		 if (pEntry) | ||||
| 		 { | ||||
| 			valueLength = bytesRequired; | ||||
| 			bytesRequired = 0; | ||||
|     | ||||
| 			retStatus = miCASAReadBinaryKey( | ||||
| 						   g_hCASAContext, | ||||
| 						   0, | ||||
| 						   &sessionKeyChain, | ||||
| 						   &sharedId, | ||||
| 						   pKey, | ||||
| 						   keySize, | ||||
| 						   (uint8_t *)pEntry, | ||||
| 						   &valueLength, | ||||
| 						   NULL, | ||||
| 						   &bytesRequired, | ||||
| 						   NULL); | ||||
|  | ||||
| 			if (CASA_SUCCESS(retStatus)) | ||||
| 			{ | ||||
| 			   if (pEntry->doesNotExpire == FALSE | ||||
| 				   && CacheEntryLifetimeExpired(pEntry->creationTime, pEntry->expirationTime)) | ||||
| 			   { | ||||
| 				  // Remove the entry ??? | ||||
| 				  //miCASARemoveBinaryKey(); | ||||
|  | ||||
| 				  retStatus = CasaStatusBuild(CASA_SEVERITY_ERROR, | ||||
| 											  CASA_FACILITY_AUTHTOKEN, | ||||
| 											  CASA_STATUS_UNSUCCESSFUL); | ||||
| 			   } | ||||
| 			} | ||||
|  | ||||
| 			if (!CASA_SUCCESS(retStatus)) | ||||
| 			{ | ||||
| 			   FreeAuthCacheEntry(pEntry); | ||||
| 			   pEntry = NULL; | ||||
| 			} | ||||
| 		 } | ||||
| 	  } | ||||
|  | ||||
| 	  free(pKey); | ||||
|    } | ||||
|  | ||||
|    DbgTrace(1, "-FindAuthTokenEntryInCache- End, pEntry = %08X\n", pEntry); | ||||
|  | ||||
|    return pEntry; | ||||
| } | ||||
|  | ||||
|  | ||||
| //++======================================================================= | ||||
| CasaStatus | ||||
| InitializeAuthCache() | ||||
| // | ||||
| //  Arguments:  | ||||
| // | ||||
| //  Returns:    | ||||
| // | ||||
| //  Abstract:   | ||||
| // | ||||
| //  Notes: | ||||
| // | ||||
| // L2 | ||||
| //=======================================================================-- | ||||
| { | ||||
|    CasaStatus 			retStatus; | ||||
|    SSCS_SECRETSTORE_T   ssId; | ||||
|  | ||||
|    DbgTrace(1, "-InitializeAuthCache- Start\n", 0); | ||||
|  | ||||
|    ssId.version = NSSCS_VERSION_NUMBER; | ||||
|    strcpy((char *)ssId.ssName, (char *)SSCS_DEFAULT_SECRETSTORE_ID); | ||||
|  | ||||
|    g_hCASAContext = miCASAOpenSecretStoreCache( | ||||
| 					 &ssId, | ||||
| 					 0, | ||||
| 					 NULL); | ||||
|  | ||||
|    if (!g_hCASAContext) | ||||
|    { | ||||
| 	  retStatus =   CasaStatusBuild( | ||||
| 					 CASA_SEVERITY_ERROR, | ||||
| 					 CASA_FACILITY_AUTHTOKEN, | ||||
| 					 CASA_STATUS_UNSUCCESSFUL); | ||||
|    } | ||||
|    else | ||||
|    { | ||||
| 	  retStatus = CASA_STATUS_SUCCESS; | ||||
|    } | ||||
|  | ||||
|    DbgTrace(1, "-InitializeAuthCache- End, retStatus = %08X\n", retStatus); | ||||
|  | ||||
|    return retStatus; | ||||
| } | ||||
|  | ||||
|  | ||||
| //++======================================================================= | ||||
| //++======================================================================= | ||||
| //++======================================================================= | ||||
|  | ||||
		Reference in New Issue
	
	Block a user