This commit is contained in:
		| @@ -331,6 +331,7 @@ int CryptManager::CryptPK11EncryptString(char *clearData, int clearDataLen, char | |||||||
| 	{ | 	{ | ||||||
| 		// since we have specified password callback function , we won't come here... | 		// since we have specified password callback function , we won't come here... | ||||||
| 		PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11_Authenticate failed, possibly master password is wrong"); | 		PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11_Authenticate failed, possibly master password is wrong"); | ||||||
|  | 		(*PK11FreeSlot) (slot); | ||||||
| 		return FPM_MASTERPASSWORD_WRONG; | 		return FPM_MASTERPASSWORD_WRONG; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -348,6 +349,7 @@ int CryptManager::CryptPK11EncryptString(char *clearData, int clearDataLen, char | |||||||
| 	if (status != SECSuccess)  | 	if (status != SECSuccess)  | ||||||
| 	{  | 	{  | ||||||
| 		PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11SDR_Encrypt failed  ..."); | 		PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11SDR_Encrypt failed  ..."); | ||||||
|  | 		(*PK11FreeSlot) (slot); | ||||||
| 		return FPM_FALSE; | 		return FPM_FALSE; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -355,6 +357,7 @@ int CryptManager::CryptPK11EncryptString(char *clearData, int clearDataLen, char | |||||||
| 	*cryptData = (char*)reply.data; | 	*cryptData = (char*)reply.data; | ||||||
| 	*cryptDataLen = reply.len; | 	*cryptDataLen = reply.len; | ||||||
| 	 | 	 | ||||||
|  | 	(*PK11FreeSlot) (slot); | ||||||
| 	return FPM_TRUE; | 	return FPM_TRUE; | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -396,6 +399,7 @@ int CryptManager::CryptPK11DecryptString(char *decodeData, int decodeLen, char * | |||||||
| 	{ | 	{ | ||||||
| 		// since we have specified password callback function , we won't come here... | 		// since we have specified password callback function , we won't come here... | ||||||
| 		PrintMessage(MESG_ERROR, "\n PK11_Authenticate failed, Probably master password is wrong"); | 		PrintMessage(MESG_ERROR, "\n PK11_Authenticate failed, Probably master password is wrong"); | ||||||
|  | 		(*PK11FreeSlot) (slot); | ||||||
| 		return FPM_MASTERPASSWORD_WRONG; | 		return FPM_MASTERPASSWORD_WRONG; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -414,6 +418,7 @@ int CryptManager::CryptPK11DecryptString(char *decodeData, int decodeLen, char * | |||||||
| 	if (status != SECSuccess)  | 	if (status != SECSuccess)  | ||||||
| 	{  | 	{  | ||||||
| 		PrintMessage(MESG_ERROR, "\n PK11SDR_Decrypt failed  ..."); | 		PrintMessage(MESG_ERROR, "\n PK11SDR_Decrypt failed  ..."); | ||||||
|  | 		(*PK11FreeSlot) (slot); | ||||||
| 		return FPM_FALSE; | 		return FPM_FALSE; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -187,7 +187,7 @@ extern "C" APIEXPORT int FPM_GetProfileList(char **profileList[], int *profileFl | |||||||
| 			strcpy(profList[profileCount],temp); | 			strcpy(profList[profileCount],temp); | ||||||
| 			profFlag[profileCount] = 0; | 			profFlag[profileCount] = 0; | ||||||
|  |  | ||||||
| 			PrintMessage(MESG_ERROR, "\n GetProfileList : Found profile = [%s]", profList[profileCount]); | 			PrintMessage(MESG_DEBUG, "\n GetProfileList : Found profile = [%s]", profList[profileCount]); | ||||||
| 			profileCount++; | 			profileCount++; | ||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
| @@ -220,51 +220,52 @@ extern "C" APIEXPORT int FPM_FirefoxProfileInit(char *profileName) | |||||||
| { | { | ||||||
| int retValue; | int retValue; | ||||||
| int profileIndex = -1; 	 | int profileIndex = -1; 	 | ||||||
| int isObjectExist = FPM_FALSE; |  | ||||||
|  |  | ||||||
| 	// check if the profile is already initialized... | 	// Check if the object for specified profile already present... | ||||||
| 	for(int i=0; i< profileCount; i++) | 	for(int i=0; i< profileCount; i++) | ||||||
| 	{ | 	{ | ||||||
| 		if( profileManager[i].profileName != NULL ) | 		if( profileManager[i].profileName != NULL ) | ||||||
| 		{ | 		{ | ||||||
| 			if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) | 			if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) | ||||||
| 			{ | 			{ | ||||||
| 				PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Specified profile object [%s]  is already present ", profileName); | 				PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Object for specified profile %s exist ", profileName); | ||||||
| 				profileIndex = i; | 				profileIndex = i; | ||||||
| 				isObjectExist = FPM_TRUE; |  | ||||||
|  | 				break; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	// This is new profile... | 	// This is new profile... | ||||||
| 	if( (profileIndex == -1) &&  ( (profileCount + 1) >= MAX_PROFILE_COUNT) ) | 	if( profileIndex == -1)  | ||||||
| 	{ | 	{ | ||||||
| 		PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Max profile count exceeded."); | 		if( (profileCount + 1) >= MAX_PROFILE_COUNT) | ||||||
| 		return FPM_PROFILE_LIMIT_EXCEEDED; | 		{ | ||||||
| 	} | 			PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Max profile count exceeded."); | ||||||
|  | 			return FPM_PROFILE_LIMIT_EXCEEDED; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 	if(profileIndex == -1 ) |  | ||||||
| 	{ |  | ||||||
| 		profileIndex = profileCount; | 		profileIndex = profileCount; | ||||||
| 		profileCount++; | 		profileCount++; | ||||||
| 	} | 	} | ||||||
| 	// If not already initialized then go and initialize it... |  | ||||||
| 	if( profileManager[profileIndex].isInitialized == FPM_FALSE ) | 	// check if the profile is already initialized... | ||||||
|  | 	if( profileManager[profileIndex].isInitialized == FPM_TRUE ) | ||||||
| 	{ | 	{ | ||||||
| 		if( (retValue = profileManager[profileIndex].ProfileInit(profileName)) != FPM_TRUE ) | 		PrintMessage(MESG_ERROR, "\n FirefoxProfileInit :  Specified profile %s is already initialized", profileName); | ||||||
| 		{ |  | ||||||
| 			PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Failed to initialize the profile %s ", profileName); |  | ||||||
| 			return retValue; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		PrintMessage(MESG_DEBUG, "\n FirefoxProfileInit : Firefox profile %s  is already initialized ", profileName); |  | ||||||
| 		return FPM_TRUE;			 | 		return FPM_TRUE;			 | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	if( (retValue = profileManager[profileIndex].ProfileInit(profileName)) != FPM_TRUE ) | ||||||
|  | 	{ | ||||||
|  | 		PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Failed to initialize the profile %s ", profileName); | ||||||
|  | 		return retValue; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	PrintMessage(MESG_DEBUG, "\n FirefoxProfileInit : Firefox profile %s initialized successfully ", profileName); | 	PrintMessage(MESG_DEBUG, "\n FirefoxProfileInit : Firefox profile %s initialized successfully ", profileName); | ||||||
|  |  | ||||||
|  | 	 | ||||||
| 	return FPM_TRUE; | 	return FPM_TRUE; | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -59,7 +59,7 @@ | |||||||
|  |  | ||||||
| #define MAX_PROFILE_COUNT 5 | #define MAX_PROFILE_COUNT 5 | ||||||
|  |  | ||||||
| #define DEBUG  11 | //#define DEBUG  11 | ||||||
|  |  | ||||||
| #define Unichar unsigned int | #define Unichar unsigned int | ||||||
|  |  | ||||||
|   | |||||||
| @@ -381,7 +381,7 @@ HMODULE libtmp = NULL; | |||||||
|  |  | ||||||
| 	if( !libtmp ) | 	if( !libtmp ) | ||||||
| 	{ | 	{ | ||||||
| 		PrintMessage(MESG_ERROR, "\n\n LoadLibrary : Failed to load library %s ", loadPath); | 		PrintMessage(MESG_DEBUG, "\n\n LoadLibrary : Failed to load library %s ", loadPath); | ||||||
| 		free(loadPath); | 		free(loadPath); | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| @@ -454,7 +454,7 @@ int ProfileManager::ProfileInit(char *profileName) | |||||||
|  |  | ||||||
| 	if( !libnss || !libplc )  | 	if( !libnss || !libplc )  | ||||||
| 	{ | 	{ | ||||||
| 		PrintMessage(MESG_ERROR, "\n ProfileInit : Failed to load the required library from directory %s", libraryPath); | 		PrintMessage(MESG_ERROR, "\n ProfileInit : Failed to load the required firefox library"); | ||||||
| 		return FPM_LIBRARY_LOAD_FAILED; | 		return FPM_LIBRARY_LOAD_FAILED; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| @@ -543,16 +543,40 @@ int ProfileManager::ProfileInit(char *profileName) | |||||||
|  |  | ||||||
| void ProfileManager::ProfileExit() | void ProfileManager::ProfileExit() | ||||||
| { | { | ||||||
|  | 	int i; | ||||||
|  |  | ||||||
| 	PrintMessage(MESG_DEBUG, "\n ProfileExit : Shutting down the profile %s", profileName); | 	PrintMessage(MESG_DEBUG, "\n ProfileExit : Shutting down the profile %s", profileName); | ||||||
|  |  | ||||||
| 	if( (isInitialized == FPM_TRUE) && NSSShutdown != NULL ) | 	if( (isInitialized == FPM_TRUE) && NSSShutdown != NULL ) | ||||||
| 		(*NSSShutdown)(); | 	{	 | ||||||
|  | 		PrintMessage(MESG_DEBUG, "\n ProfileExit : invoking NSSShutdown for profile", profileName); | ||||||
|  | 		for(i=0;  (i<5) && ((*NSSShutdown)() == SECFailure); i++ ) | ||||||
|  | 		{ | ||||||
|  | 			PrintMessage(MESG_DEBUG, "\n ProfileExit %d: NSSShutdown : FAILURE",i); | ||||||
|  | 			//Sleep(500); | ||||||
|  | 		} | ||||||
|  | 		 | ||||||
|  | 		if( i != 5) | ||||||
|  | 		{ | ||||||
|  | 			PrintMessage(MESG_DEBUG, "\n ProfileExit :NSSShutdown : SUCCESS"); | ||||||
|  | 		 | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
|  | 			PrintMessage(MESG_DEBUG, "\n ProfileExit : NSSShutdown : FAILURE"); | ||||||
|  | 		 | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if( libnss != NULL ) | 	if( libnss != NULL ) | ||||||
|  | 	{ | ||||||
|  | 		PrintMessage(MESG_DEBUG, "\n ProfileExit : Freeing library libnss.dll"); | ||||||
| 		FREELIBRARY(libnss); | 		FREELIBRARY(libnss); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if( libplc != NULL ) | 	if( libplc != NULL ) | ||||||
|  | 	{ | ||||||
|  | 		PrintMessage(MESG_DEBUG, "\n ProfileExit : Freeing library libplc.dll"); | ||||||
| 		FREELIBRARY(libplc); | 		FREELIBRARY(libplc); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	// clean up signon data... | 	// clean up signon data... | ||||||
| 	signonManager.RemoveSignonData(); | 	signonManager.RemoveSignonData(); | ||||||
| @@ -569,6 +593,7 @@ int ProfileManager::IsMasterPasswordSet() | |||||||
| { | { | ||||||
| PK11SlotInfo *slot = 0; | PK11SlotInfo *slot = 0; | ||||||
| int retValue = 0; | int retValue = 0; | ||||||
|  | SECStatus status; | ||||||
|  |  | ||||||
| 	slot = (*PK11GetInternalKeySlot)(); | 	slot = (*PK11GetInternalKeySlot)(); | ||||||
| 	 | 	 | ||||||
| @@ -581,16 +606,23 @@ int retValue = 0; | |||||||
| 	PrintMessage(MESG_DEBUG, "\n  PK11_GetInternalKeySlot SUCCESS ..."); | 	PrintMessage(MESG_DEBUG, "\n  PK11_GetInternalKeySlot SUCCESS ..."); | ||||||
|  |  | ||||||
| 	// Check with empty password....If it succeeds then master password is not set | 	// Check with empty password....If it succeeds then master password is not set | ||||||
| 	if( (*PK11CheckUserPassword)(slot,"") == SECSuccess ) |  | ||||||
|  | 	status =  (*PK11CheckUserPassword)(slot,""); | ||||||
|  | 	if( status == SECSuccess ) | ||||||
| 	{ | 	{ | ||||||
| 		PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is not set..."); | 		PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is not set..."); | ||||||
| 		retValue = FPM_FALSE; | 		retValue = FPM_FALSE; | ||||||
| 	} | 	} | ||||||
| 	else | 	else if(status == SECWouldBlock ) // password is wrong | ||||||
| 	{ | 		{ | ||||||
| 		PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is set..."); | 			PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is set..."); | ||||||
| 		retValue = FPM_TRUE; | 			retValue = FPM_TRUE; | ||||||
| 	} | 		} | ||||||
|  | 		else  // something is wrong, may be key3.db is not initialized for crypt | ||||||
|  | 		{ | ||||||
|  | 			PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is not set..."); | ||||||
|  | 			retValue = FPM_FALSE; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 	// Free the slot | 	// Free the slot | ||||||
| 	(*PK11FreeSlot) (slot); | 	(*PK11FreeSlot) (slot); | ||||||
|   | |||||||
| @@ -603,48 +603,5 @@ struct Host * SignonManager::GetHostInfo() | |||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| int SignonManager::AddUser(char *host, char *userName, char *password) |  | ||||||
| { |  | ||||||
| char checkString[]="test123"; |  | ||||||
| char *cryptData = NULL; |  | ||||||
| char *clearData = NULL; |  | ||||||
| char *newdata = NULL; |  | ||||||
| 	/* |  | ||||||
| 	// TODO : check if signon preference enabled.... |  | ||||||
| 	if( CheckSignonPref() == FPM_FALSE ) |  | ||||||
| 	{ |  | ||||||
| 		PrintMessage(MESG_ERROR, "\n MCSignonManager : Signon preference is not enabled..."); |  | ||||||
| 		return FPM_FALSE; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	if(  EncryptString ("test123", &cryptData) == FPM_FALSE ) |  | ||||||
| 	{ |  | ||||||
| 		PrintMessage(MESG_ERROR, "\n MCSignonManager : fAILED TO EncryptString"); |  | ||||||
| 		return FPM_FALSE; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	newdata = (char*) malloc(strlen(cryptData) + 1); |  | ||||||
| 	strcpy(newdata, cryptData); |  | ||||||
|  |  | ||||||
| 	if( DecryptString(newdata, &clearData) == FPM_FALSE )  |  | ||||||
| 	{ |  | ||||||
| 		PrintMessage(MESG_ERROR, "\n MCSignonManager : Failed to DecryptString");	 |  | ||||||
| 		return FPM_FALSE; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	printf("\n final decrypted string is : %s ", clearData); |  | ||||||
|  |  | ||||||
| 	if( strcmp(checkString, clearData) == 0 ) |  | ||||||
| 	{ |  | ||||||
| 		printf("\n Encryption - decryption test is success "); |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 		printf("\n Encryption - decryption test is FAILED "); |  | ||||||
| 	*/ |  | ||||||
| 	return FPM_TRUE; |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user