diff --git a/CASA/CASA.changes b/CASA/CASA.changes index 94093dbd..54bc7e06 100644 --- a/CASA/CASA.changes +++ b/CASA/CASA.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Fri Sep 29 17:10:23 IST 2006 - smanojna@novell.com + +- Distribution of Firefox Password Manager secrets. + ------------------------------------------------------------------- Wed Sep 27 15:10:47 MDT 2006 - jnorman@novell.com diff --git a/CASA/adlib/AD_Facade.cs b/CASA/adlib/AD_Facade.cs index c7cc6a07..2414c49d 100644 --- a/CASA/adlib/AD_Facade.cs +++ b/CASA/adlib/AD_Facade.cs @@ -326,6 +326,15 @@ namespace Novell.CASA.DataEngines } + public static String GetDefaultProfileName(int StoreID) + { + if (StoreID == ConstStrings.CASA_STORE_FFOX) + return FFEngine.GetDefaultProfileName(); + else + return null; + } + + /******************************************************************************* Remove will delete a Secret. diff --git a/CASA/adlib/FFEngine.cs b/CASA/adlib/FFEngine.cs index 771b0441..9e01a6bf 100644 --- a/CASA/adlib/FFEngine.cs +++ b/CASA/adlib/FFEngine.cs @@ -74,6 +74,11 @@ namespace Novell.CASA.DataEngines FireFox.UninitProfile(defaultProfileName); } + public static String GetDefaultProfileName() + { + return FireFox.GetDefaultProfileName(); + } + public XmlNode Aggregate() { @@ -145,7 +150,7 @@ namespace Novell.CASA.DataEngines }catch(Exception e) { Console.WriteLine("Unable to Marshal the SecretName" + e.ToString()); - } + } XmlNodeList keylist = secret.SelectNodes("descendant::Key"); try { @@ -165,11 +170,14 @@ namespace Novell.CASA.DataEngines nh.isPassword = Convert.ToInt32(passwordstatus); nh.next = next; next = Marshal.AllocHGlobal(Marshal.SizeOf(nh)); - Marshal.StructureToPtr(nh,next,false); + Marshal.StructureToPtr(nh,next,false); } newHost.hostElement = next; - retVal = FireFox.Modify_Host(ProfileName,newHost,1); + if (opnType == ConstStrings.OPERATION_ADD_SECRET) + retVal = FireFox.Add_Host(ProfileName,newHost,1); + else + retVal = FireFox.Modify_Host(ProfileName,newHost,1); } catch(Exception e) { @@ -265,10 +273,10 @@ namespace Novell.CASA.DataEngines XmlElement xmlProfileElement; String hostName; - String name; - String value; + String name; + String value; int isPassword; - + methodStatusCode=1; xmlProfileElement = doc.CreateElement(ConstStrings.CCF_FFPROFILE); // XmlAttribute idAttr = doc.CreateAttribute(ConstStrings.CCF_ID); //-ID @@ -357,7 +365,7 @@ namespace Novell.CASA.DataEngines }//~Aggregate profileName - return methodStatusCode; + return methodStatusCode; } diff --git a/CASA/adlib/ad_ff/FireFox.cs b/CASA/adlib/ad_ff/FireFox.cs index b358c8c0..583c9e4d 100644 --- a/CASA/adlib/ad_ff/FireFox.cs +++ b/CASA/adlib/ad_ff/FireFox.cs @@ -30,10 +30,10 @@ namespace Novell.CASA.DataEngines.FF { [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public class Host - { - public IntPtr hostName; - public IntPtr hostElement; + public class Host + { + public IntPtr hostName; + public IntPtr hostElement; public IntPtr next; /*public Host() //NOT NEEDED SINCE WE GET THIS FILLED FROM NATIVE WHEN @@ -52,15 +52,15 @@ namespace Novell.CASA.DataEngines.FF Console.WriteLine("FireFox:Marshal FreeHGlobal Exception for Host:"); } }*/ - }; - - + }; + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] - public class HostElement - { - public IntPtr name; - public IntPtr value; - public int isPassword; + public class HostElement + { + public IntPtr name; + public IntPtr value; + public int isPassword; public IntPtr next; /*public HostElement() { @@ -174,6 +174,8 @@ namespace Novell.CASA.DataEngines.FF //Signon functions [DllImport(FF_LIB)] public static extern int FPM_GetSignonData(string profileName,out IntPtr host,int doRefresh); + [DllImport(FF_LIB)] + public static extern int FPM_AddHost(string profileName, Host host, int doUpdate); [DllImport(FF_LIB)] public static extern int FPM_ModifyHost(string profileName, Host host, int doUpdate); @@ -183,7 +185,6 @@ namespace Novell.CASA.DataEngines.FF //TBD //int FPM_WriteSignonData(char *profileName) - //int FPM_AddHost(char *profileName, struct Host *host, int doUpdate) public static int IsStoreAvailable() { @@ -195,6 +196,11 @@ namespace Novell.CASA.DataEngines.FF return (FPM_RemoveHost(ProfileName, hostName, 1)); } + public static int Add_Host(string profileName, Host ahost, int doUpdate) + { + return FPM_AddHost(profileName, ahost, 1); + } + public static int Modify_Host(string profileName, Host mhost, int doUpdate) { //Console.WriteLine("FireFox.cs : ProfileName : " + profileName); @@ -218,20 +224,20 @@ namespace Novell.CASA.DataEngines.FF int[] profileFlags=null; String profileName=null; int profileFlag=0; - int profCount=0; + int profCount=0; String defaultProfileName=null; - + //Console.WriteLine("FireFox:Invoking FPM_GetProfileList:"); profCount=FPM_GetProfileList(out profileListIntPtr,out profileFlagsIntPtr); //Console.WriteLine("FireFox:No of Profiles found= "+profCount); //try ///{ - for(int i=0; i< profCount; i++) + for(int i=0; i< profCount; i++) { //Console.WriteLine("Firefox.cs : Inside The for Loop"); profileName=Marshal.PtrToStringAnsi(profileListIntPtr[i]); - profileFlag=(int)profileFlagsIntPtr[i]; + profileFlag=(int)profileFlagsIntPtr[i]; //Console.WriteLine("FireFox:Iter="+i+"profileName="+profileName); //Console.WriteLine("FireFox:Iter="+i+"profileFlag="+profileFlag); if(profileFlag==1) diff --git a/CASA/adlib/ad_ff/native/Common.cpp b/CASA/adlib/ad_ff/native/Common.cpp index e8f44d61..902d1651 100644 --- a/CASA/adlib/ad_ff/native/Common.cpp +++ b/CASA/adlib/ad_ff/native/Common.cpp @@ -20,96 +20,122 @@ * ***********************************************************************/ - - -#include "FirefoxPasswordManager.h" -#include "Common.h" - -char lastErrorMesg[10000]; - -void PrintMessage( int level, char *mesg , ...) -{ - va_list vl; - - va_start( vl , mesg ); - vsprintf( lastErrorMesg , mesg , vl ); - va_end( vl ); - -// if we are not debugging then print DEBUG level messages -#ifdef DEBUG - printf("%s", lastErrorMesg ); -#else + + +#include "FirefoxPasswordManager.h" +#include "Common.h" + +char lastErrorMesg[10000]; + +void PrintMessage( int level, char *mesg , ...) +{ + va_list vl; + + va_start( vl , mesg ); + vsprintf( lastErrorMesg , mesg , vl ); + va_end( vl ); + +// if we are not debugging then print DEBUG level messages +#ifdef DEBUG + printf("%s", lastErrorMesg ); +#else if( level != MESG_DEBUG ) { //printf("%s", lastErrorMesg ); - } -#endif - -} - - -/** -* Converts given string to lower case.... -* -*/ -void StrLwr(char *str) -{ -int n=strlen(str); - - for(int i=0; i=65 && str[i]<=90 ) - str[i]+=32; - } - -} - - -/** -* Checks if specified directory exists -* -* return MC_TRUE if directory exists else MC_FALSE -* -*/ -int IsDirectoryExists( char *path ) -{ - if( path == NULL ) - return 0; - -#ifdef WIN32 - - DWORD attr = GetFileAttributes(path); - - if( (attr == -1) || !(attr & FILE_ATTRIBUTE_DIRECTORY ) ) - { - PrintMessage(MESG_ERROR, "\n IsDirectoryExists : Directory does not exist : [%s] ", path); - return 0; - } - - return 1; - -#else - - char *program = (char*) malloc(strlen(path)+20); - - if( program == NULL ) - return 0; - - strcpy(program, "test -d "); - strcat(program, path); - - int result= system(program); - free(program); - - if( result != 0 ) - { - PrintMessage(MESG_ERROR, "\n IsDirectoryExists : Directory does not exist : [%s] ", path); - return 0; - } - - return 1; - -#endif - -} - + } +#endif + +} + + +/** +* Converts given string to lower case.... +* +*/ +void StrLwr(char *str) +{ +int n=strlen(str); + + for(int i=0; i=65 && str[i]<=90 ) + str[i]+=32; + } + +} + + +/** +* Checks if specified directory exists +* +* return MC_TRUE if directory exists else MC_FALSE +* +*/ +int IsDirectoryExists( char *path ) +{ + if( path == NULL ) + return 0; + +#ifdef WIN32 + + DWORD attr = GetFileAttributes(path); + + if( (attr == -1) || !(attr & FILE_ATTRIBUTE_DIRECTORY ) ) + { + PrintMessage(MESG_ERROR, "\n IsDirectoryExists : Directory does not exist : [%s] ", path); + return 0; + } + + return 1; + +#else + + char *program = (char*) malloc(strlen(path)+20); + + if( program == NULL ) + return 0; + + strcpy(program, "test -d "); + strcat(program, path); + + int result= system(program); + free(program); + + if( result != 0 ) + { + PrintMessage(MESG_ERROR, "\n IsDirectoryExists : Directory does not exist : [%s] ", path); + return 0; + } + + return 1; + +#endif + +} + + + +/** +* Creates a directory in specified path +* +* return MC_TRUE if directory successfully created else MC_FALSE +* +*/ +int CreateDirectory( char *path ) +{ + + if( path == NULL ) + return 0; +#ifdef WIN32 + int result = mkdir(path); +#else + int result = mkdir(path, S_IRWXU); +#endif + if( result != 0 ) + { + PrintMessage(MESG_ERROR, "\n CreateDirectory : Can't create Directory : [%s] ", path); + return 0; + } + return 1; + +} diff --git a/CASA/adlib/ad_ff/native/CryptManager.cpp b/CASA/adlib/ad_ff/native/CryptManager.cpp index 4cb15471..2eb866cb 100644 --- a/CASA/adlib/ad_ff/native/CryptManager.cpp +++ b/CASA/adlib/ad_ff/native/CryptManager.cpp @@ -1,458 +1,460 @@ -/*********************************************************************** - * - * Copyright (C) 2005-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. - * - ***********************************************************************/ - -#include "CryptManager.h" - - - -void CryptManager::SetupFunctions(void *funList[]) -{ - - //PK11SetPasswordFunc = (PK11_SetPasswordFunc) funList[0]; - PK11GetInternalKeySlot = (PK11_GetInternalKeySlot) funList[1]; - PK11FreeSlot = (PK11_FreeSlot) funList[2]; - PK11Authenticate = (PK11_Authenticate) funList[3]; - PK11CheckUserPassword =(PK11_CheckUserPassword) funList[4]; - PK11SDRDecrypt = (PK11SDR_Decrypt) funList[5]; - PK11SDREncrypt = (PK11SDR_Encrypt) funList[6]; - PLBase64Encode = (PL_Base64Encode) funList[7]; - PLBase64Decode = (PL_Base64Decode) funList[8]; - -} - -int CryptManager::GetEncryptionPref() -{ - -return FPM_TRUE; -} - - -/** -* This function encrypts the clear text data. First it performs TRIPLE DES encryption -* and then performs base64 encoding on the encrypted data. -* -* @param(in) clearData clear text data to be encrypted -* @param(out) finalData encrypted data ( null terminated) -* -* @return FPM_TRUE on success and FPM_FALSE on error. -* -*/ -int CryptManager::EncryptString (char *clearData, char **finalData) -{ -int encryptDataLen = 0; -char *encryptData = NULL; -char *encodeData = NULL; -int retValue; - - - if( clearData == NULL ) - { - PrintMessage(MESG_ERROR, "\n EncryptString : Text Data is NULL"); - return FPM_FALSE; - } - - // Do the encryption if encryption pref is set otherwise just do base64 encoding... - if ( GetEncryptionPref() ) - { - PrintMessage(MESG_DEBUG, "\n EncryptString : Performing PK11 Encryption..."); - - retValue = FPM_FALSE; - if( ((retValue = CryptPK11EncryptString(clearData, strlen(clearData), &encryptData, &encryptDataLen)) != FPM_TRUE) || ( encryptData == NULL) ) - { - PrintMessage(MESG_ERROR, "\n EncryptString : Failed to encrypt the string : %s ", clearData); - return retValue; - } - - if( (CryptBase64Encode(encryptData, encryptDataLen, finalData) != FPM_TRUE) || (*finalData == NULL) ) - { - PrintMessage(MESG_ERROR, "\n EncryptString : BASE64 encoding failed"); - return FPM_FALSE; - } - - PrintMessage(MESG_DEBUG, "\n EncryptString : Success "); - - // WARNING : If you uncomment , then be ready for side effects , crashes..etc - // Need full analysis of malloc for this data.. - // Free the allocated blocks... - - //if( encryptData ) - // free( encryptData); - - return FPM_TRUE; - } - - // otherwise do our own obscuring using Base64 encoding - PrintMessage(MESG_DEBUG, "\n EncryptString : Performing JUST base64 encoding..."); - - if( (CryptBase64Encode(clearData, strlen(clearData), &encodeData) == FPM_FALSE) || (encodeData == NULL) ) - { - PrintMessage(MESG_ERROR, "\n EncryptString : BASE64 encoding failed"); - return FPM_FALSE; - } - - // We need to add the CRYPT_PREFIX at the begining of encoded data... - // This will help during decrption process to identify type of encryption - - int prefixLen = strlen( CRYPT_PREFIX ); - int encodeLen = strlen( encodeData ); - *finalData = (char *)malloc( prefixLen + encodeLen + 1); - - if( *finalData == NULL ) - { - PrintMessage(MESG_ERROR, "\n EncryptString : Insufficient memory"); - return FPM_FALSE; - } - - // FinalData = CRYPT_PREFIX + Encoded Data + '\0' - strcpy(*finalData, CRYPT_PREFIX); - strcat(*finalData, encodeData); - *(*finalData + prefixLen + encodeLen) = 0; - - free(encodeData); - - return FPM_TRUE; -} - - - - -/** -* This function decrypts the encrypted data. First it performs base64 decoding and -* then performs TRIPLE DES decryption. -* -* @param(in) cryptData encrypted data -* @param(out) clearData clear text data ( null terminated) -* -* @return FPM_TRUE on success and FPM_FALSE on error. -* -*/ - -int CryptManager::DecryptString(char *cryptData, char **clearData) -{ -int decodeLen = 0; -int finalLen = 0; -char *decodeData = NULL; -char *finalData = NULL; -int retValue; - - if( cryptData == NULL ) - { - PrintMessage(MESG_ERROR, "\n DecryptString: CryptData is NULL..."); - return FPM_FALSE; - } - - // treat zero-length crypt string as a special case - if(cryptData[0] == '\0') - { - *clearData = (char*) malloc(1); - **clearData = 0; - return FPM_TRUE; - } - - // use PK11 encryption stuff if crypt doesn't starts with prefix - if( cryptData[0] != CRYPT_PREFIX[0] ) - { - - PrintMessage(MESG_DEBUG, "\n Performing PK11 Decryption "); - - // First do base64 decoding..... - if( (CryptBase64Decode(cryptData, &decodeData, &decodeLen) != FPM_TRUE) || (decodeData == NULL) ) - { - PrintMessage(MESG_ERROR, "\n DecryptString : Base64 decoding of crypt data failed "); - return FPM_FALSE; - } - - PrintMessage(MESG_DEBUG, "\n DecryptString : base64data (%d) = %s ", decodeLen, decodeData); - - // Now do actual PK11 decryption - retValue = FPM_FALSE; - retValue = CryptPK11DecryptString(decodeData, decodeLen, &finalData, &finalLen); - - if( retValue != FPM_TRUE ) - { - PrintMessage(MESG_ERROR, "\n DecryptString : Failed to decrypt the string "); - return retValue; - } - - - // WARNING : Decrypted string is not NULL terminated - // So we will create new NULL terminated string here... - - *clearData = (char*) malloc( finalLen + 1 ); - - if( *clearData == NULL ) - { - PrintMessage(MESG_ERROR, "\n DecryptString :Insufficient memory... "); - return FPM_INSUFFICIENT_MEMORY; - } - else - { - PrintMessage(MESG_DEBUG, "\n DecryptString : Copying new data ...."); - memcpy(*clearData, finalData, finalLen); - *(*clearData + finalLen) = 0; // Null terminate the string.... - } - - /* - // Free the allocated memory - // This is causing the problems currently...Later point we have to reanalyze the cause for this - - if( decodeData ) - free(decodeData); - - if( finalData ) - free(finalData); - */ - - PrintMessage(MESG_DEBUG, "\n decryptString : finalLen = %d ", finalLen); - - return FPM_TRUE; - } - - - // otherwise do our own de-obscuring - PrintMessage(MESG_DEBUG, "\n DecryptString : Performing simple Base64 Decoding "); - - unsigned int PREFIX_Len = strlen(CRYPT_PREFIX); - if( strlen(cryptData) == PREFIX_Len ) - { - *clearData = (char *)malloc(1); - **clearData = '\0'; - return FPM_TRUE; - } - - if( CryptBase64Decode(&cryptData[PREFIX_Len], clearData, &decodeLen) == FPM_FALSE ) - { - PrintMessage(MESG_ERROR, "\n DecryptString : Base64 decoding of crypt data failed "); - return FPM_FALSE; - } - - return FPM_TRUE; -} - - - -/** -* Performs base64 encoding of the encrypted data.. -* -* @param(in) cryptData encrypted data -* @param(in) cryptDataLen length of encrypted data -* @param(out) encodeData base64 encoded data -* -* @return FPM_TRUE on success and FPM_FALSE on error. -* -*/ - -int CryptManager::CryptBase64Encode(char *cryptData, int cryptDataLen, char **encodeData) -{ - - *encodeData = (*PLBase64Encode)((const char *)cryptData, cryptDataLen, NULL); - - if ( *encodeData == NULL ) - { - PrintMessage(MESG_ERROR, "\n Base64 encoding failed ..."); - return FPM_FALSE; - } - - return FPM_TRUE; -} - - - - - -/** -* Performs base64 decoding of the encrypted data.. -* -* @param(in) cryptData encrypted data -* @param(out) decodeData base64 decoded data -* @param(out) decodeLen length of base64 decoded data -* -* @return FPM_TRUE on success and FPM_FALSE on error. -* -*/ -int CryptManager::CryptBase64Decode(char *cryptData, char **decodeData, int *decodeLen) -{ - int len = strlen( cryptData ); - int adjust = 0; - - PrintMessage(MESG_DEBUG, "\n CryptBase64Decode : Length of crypt data = %d", len); - - // Compute length adjustment - if (cryptData[len-1] == '=') - { - adjust++; - if (cryptData[len-2] == '=') - adjust++; - } - - *decodeData = ( char *)(*PLBase64Decode)(cryptData, len, NULL); - - if( *decodeData == NULL ) - { - PrintMessage(MESG_ERROR, "\n Base64 decoding failed ..."); - return FPM_FALSE; - } - - *decodeLen = (len*3)/4 - adjust; - - PrintMessage(MESG_DEBUG, "\n CryptBase64Decode : Length of decoded data = %d", *decodeLen); - - return FPM_TRUE; -} - - -/** -* Performs TRIPLE DES encryption of clear text data -* -* @param(in) clearData clear text data to be encrypted -* @param(in) clearDataLen length of clear text data -* @param(out) cryptData TRIPLE DES encrypted data -* @param(out) cryptDataLen length of encrypted data -* -* @return FPM_TRUE on success and FPM_FALSE on error. -* -*/ -int CryptManager::CryptPK11EncryptString(char *clearData, int clearDataLen, char **cryptData, int *cryptDataLen) -{ - PK11SlotInfo *slot = 0; - SECItem keyid; - SECItem request; - SECItem reply; - SECStatus status; - - slot = (*PK11GetInternalKeySlot)(); - - if (!slot) - { - PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11_GetInternalKeySlot failed ..."); - return FPM_FALSE; - } - - // PK11 authentication - if ( (*PK11Authenticate)(slot, PR_TRUE, NULL) != SECSuccess) - { - // 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"); - (*PK11FreeSlot) (slot); - return FPM_MASTERPASSWORD_WRONG; - } - - - // Use default key id - keyid.data = 0; - keyid.len = 0; - request.data = (unsigned char *)clearData; - request.len = clearDataLen; - reply.data = 0; - reply.len = 0; - - status = (*PK11SDREncrypt)(&keyid, &request, &reply, NULL); - - if (status != SECSuccess) - { - PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11SDR_Encrypt failed ..."); - (*PK11FreeSlot) (slot); - return FPM_FALSE; - } - - - *cryptData = (char*)reply.data; - *cryptDataLen = reply.len; - - (*PK11FreeSlot) (slot); - return FPM_TRUE; -} - - - -/** -* Performs TRIPLE DES decryption of base64 decoded data -* -* @param(in) decodeData base64 decoded data -* @param(in) decodeLen length of base64 decoded data -* @param(out) clearData decrypted data -* @param(out) finalLen length of decrypted data -* -* @return FPM_TRUE on success and FPM_FALSE on error. -* -*/ -int CryptManager::CryptPK11DecryptString(char *decodeData, int decodeLen, char **clearData, int *finalLen) -{ - PK11SlotInfo *slot = 0; - SECStatus status; - SECItem request; - SECItem reply; - - PrintMessage(MESG_DEBUG, "\n CryptPK11DecryptString entered ..."); - - // Find token with SDR key - slot = (*PK11GetInternalKeySlot)(); - - if (!slot) - { - PrintMessage(MESG_ERROR, "\n PK11_GetInternalKeySlot failed ..."); - return FPM_FALSE; - } - - PrintMessage(MESG_DEBUG, "\n PK11_GetInternalKeySlot SUCCESS ..."); - - // Force authentication - if ( (*PK11Authenticate)(slot, PR_TRUE, NULL) != SECSuccess) - { - // since we have specified password callback function , we won't come here... - PrintMessage(MESG_ERROR, "\n PK11_Authenticate failed, Probably master password is wrong"); - (*PK11FreeSlot) (slot); - return FPM_MASTERPASSWORD_WRONG; - } - - PrintMessage(MESG_DEBUG, "\n PK11_Authenticate SUCCESS ..."); - - // Decrypt the string - request.data = (unsigned char *)decodeData; - request.len = decodeLen; - reply.data = 0; - reply.len = 0; - - PrintMessage(MESG_DEBUG, "\n calling PK11SDR_Decrypt ..."); - - status = (*PK11SDRDecrypt)(&request, &reply, NULL); - - if (status != SECSuccess) - { - PrintMessage(MESG_ERROR, "\n PK11SDR_Decrypt failed ..."); - (*PK11FreeSlot) (slot); - return FPM_FALSE; - } - - PrintMessage(MESG_DEBUG, "\n PK11SDR_Decrypt SUCCESS "); - - // WARNING : This string is not NULL terminated.. - *clearData = (char*)reply.data; - *finalLen = reply.len; - - // Free the slot - (*PK11FreeSlot) (slot); - - return FPM_TRUE; -} - - +/*********************************************************************** + * + * Copyright (C) 2005-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. + * + ***********************************************************************/ + +#include "CryptManager.h" + + + +void CryptManager::SetupFunctions(void *funList[]) +{ + + //PK11SetPasswordFunc = (PK11_SetPasswordFunc) funList[0]; + PK11GetInternalKeySlot = (PK11_GetInternalKeySlot) funList[1]; + PK11FreeSlot = (PK11_FreeSlot) funList[2]; + PK11Authenticate = (PK11_Authenticate) funList[3]; + PK11CheckUserPassword =(PK11_CheckUserPassword) funList[4]; + PK11SDRDecrypt = (PK11SDR_Decrypt) funList[5]; + PK11SDREncrypt = (PK11SDR_Encrypt) funList[6]; + PLBase64Encode = (PL_Base64Encode) funList[7]; + PLBase64Decode = (PL_Base64Decode) funList[8]; + PK11NeedUserInit = (PK11_NeedUserInit) funList[9]; + PK11InitPin = (PK11_InitPin) funList[10]; + +} + +int CryptManager::GetEncryptionPref() +{ + +return FPM_TRUE; +} + + +/** +* This function encrypts the clear text data. First it performs TRIPLE DES encryption +* and then performs base64 encoding on the encrypted data. +* +* @param(in) clearData clear text data to be encrypted +* @param(out) finalData encrypted data ( null terminated) +* +* @return FPM_TRUE on success and FPM_FALSE on error. +* +*/ +int CryptManager::EncryptString (char *clearData, char **finalData) +{ +int encryptDataLen = 0; +char *encryptData = NULL; +char *encodeData = NULL; +int retValue; + + + if( clearData == NULL ) + { + PrintMessage(MESG_ERROR, "\n EncryptString : Text Data is NULL"); + return FPM_FALSE; + } + + // Do the encryption if encryption pref is set otherwise just do base64 encoding... + if ( GetEncryptionPref() ) + { + PrintMessage(MESG_DEBUG, "\n EncryptString : Performing PK11 Encryption..."); + + retValue = FPM_FALSE; + if( ((retValue = CryptPK11EncryptString(clearData, strlen(clearData), &encryptData, &encryptDataLen)) != FPM_TRUE) || ( encryptData == NULL) ) + { + PrintMessage(MESG_ERROR, "\n EncryptString : Failed to encrypt the string : %s ", clearData); + return retValue; + } + + if( (CryptBase64Encode(encryptData, encryptDataLen, finalData) != FPM_TRUE) || (*finalData == NULL) ) + { + PrintMessage(MESG_ERROR, "\n EncryptString : BASE64 encoding failed"); + return FPM_FALSE; + } + + PrintMessage(MESG_DEBUG, "\n EncryptString : Success "); + + // WARNING : If you uncomment , then be ready for side effects , crashes..etc + // Need full analysis of malloc for this data.. + // Free the allocated blocks... + + //if( encryptData ) + // free( encryptData); + + return FPM_TRUE; + } + + // otherwise do our own obscuring using Base64 encoding + PrintMessage(MESG_DEBUG, "\n EncryptString : Performing JUST base64 encoding..."); + + if( (CryptBase64Encode(clearData, strlen(clearData), &encodeData) == FPM_FALSE) || (encodeData == NULL) ) + { + PrintMessage(MESG_ERROR, "\n EncryptString : BASE64 encoding failed"); + return FPM_FALSE; + } + + // We need to add the CRYPT_PREFIX at the begining of encoded data... + // This will help during decrption process to identify type of encryption + + int prefixLen = strlen( CRYPT_PREFIX ); + int encodeLen = strlen( encodeData ); + *finalData = (char *)malloc( prefixLen + encodeLen + 1); + + if( *finalData == NULL ) + { + PrintMessage(MESG_ERROR, "\n EncryptString : Insufficient memory"); + return FPM_FALSE; + } + + // FinalData = CRYPT_PREFIX + Encoded Data + '\0' + strcpy(*finalData, CRYPT_PREFIX); + strcat(*finalData, encodeData); + *(*finalData + prefixLen + encodeLen) = 0; + + free(encodeData); + + return FPM_TRUE; +} + + + + +/** +* This function decrypts the encrypted data. First it performs base64 decoding and +* then performs TRIPLE DES decryption. +* +* @param(in) cryptData encrypted data +* @param(out) clearData clear text data ( null terminated) +* +* @return FPM_TRUE on success and FPM_FALSE on error. +* +*/ + +int CryptManager::DecryptString(char *cryptData, char **clearData) +{ +int decodeLen = 0; +int finalLen = 0; +char *decodeData = NULL; +char *finalData = NULL; +int retValue; + + if( cryptData == NULL ) + { + PrintMessage(MESG_ERROR, "\n DecryptString: CryptData is NULL..."); + return FPM_FALSE; + } + + // treat zero-length crypt string as a special case + if(cryptData[0] == '\0') + { + *clearData = (char*) malloc(1); + **clearData = 0; + return FPM_TRUE; + } + + // use PK11 encryption stuff if crypt doesn't starts with prefix + if( cryptData[0] != CRYPT_PREFIX[0] ) + { + + PrintMessage(MESG_DEBUG, "\n Performing PK11 Decryption "); + + // First do base64 decoding..... + if( (CryptBase64Decode(cryptData, &decodeData, &decodeLen) != FPM_TRUE) || (decodeData == NULL) ) + { + PrintMessage(MESG_ERROR, "\n DecryptString : Base64 decoding of crypt data failed "); + return FPM_FALSE; + } + + PrintMessage(MESG_DEBUG, "\n DecryptString : base64data (%d) = %s ", decodeLen, decodeData); + + // Now do actual PK11 decryption + retValue = FPM_FALSE; + retValue = CryptPK11DecryptString(decodeData, decodeLen, &finalData, &finalLen); + + if( retValue != FPM_TRUE ) + { + PrintMessage(MESG_ERROR, "\n DecryptString : Failed to decrypt the string "); + return retValue; + } + + + // WARNING : Decrypted string is not NULL terminated + // So we will create new NULL terminated string here... + + *clearData = (char*) malloc( finalLen + 1 ); + + if( *clearData == NULL ) + { + PrintMessage(MESG_ERROR, "\n DecryptString :Insufficient memory... "); + return FPM_INSUFFICIENT_MEMORY; + } + else + { + PrintMessage(MESG_DEBUG, "\n DecryptString : Copying new data ...."); + memcpy(*clearData, finalData, finalLen); + *(*clearData + finalLen) = 0; // Null terminate the string.... + } + + /* + // Free the allocated memory + // This is causing the problems currently...Later point we have to reanalyze the cause for this + + if( decodeData ) + free(decodeData); + + if( finalData ) + free(finalData); + */ + + PrintMessage(MESG_DEBUG, "\n decryptString : finalLen = %d ", finalLen); + + return FPM_TRUE; + } + + + // otherwise do our own de-obscuring + PrintMessage(MESG_DEBUG, "\n DecryptString : Performing simple Base64 Decoding "); + + unsigned int PREFIX_Len = strlen(CRYPT_PREFIX); + if( strlen(cryptData) == PREFIX_Len ) + { + *clearData = (char *)malloc(1); + **clearData = '\0'; + return FPM_TRUE; + } + + if( CryptBase64Decode(&cryptData[PREFIX_Len], clearData, &decodeLen) == FPM_FALSE ) + { + PrintMessage(MESG_ERROR, "\n DecryptString : Base64 decoding of crypt data failed "); + return FPM_FALSE; + } + + return FPM_TRUE; +} + + + +/** +* Performs base64 encoding of the encrypted data.. +* +* @param(in) cryptData encrypted data +* @param(in) cryptDataLen length of encrypted data +* @param(out) encodeData base64 encoded data +* +* @return FPM_TRUE on success and FPM_FALSE on error. +* +*/ + +int CryptManager::CryptBase64Encode(char *cryptData, int cryptDataLen, char **encodeData) +{ + + *encodeData = (*PLBase64Encode)((const char *)cryptData, cryptDataLen, NULL); + + if ( *encodeData == NULL ) + { + PrintMessage(MESG_ERROR, "\n Base64 encoding failed ..."); + return FPM_FALSE; + } + + return FPM_TRUE; +} + + + + + +/** +* Performs base64 decoding of the encrypted data.. +* +* @param(in) cryptData encrypted data +* @param(out) decodeData base64 decoded data +* @param(out) decodeLen length of base64 decoded data +* +* @return FPM_TRUE on success and FPM_FALSE on error. +* +*/ +int CryptManager::CryptBase64Decode(char *cryptData, char **decodeData, int *decodeLen) +{ + int len = strlen( cryptData ); + int adjust = 0; + + PrintMessage(MESG_DEBUG, "\n CryptBase64Decode : Length of crypt data = %d", len); + + // Compute length adjustment + if (cryptData[len-1] == '=') + { + adjust++; + if (cryptData[len-2] == '=') + adjust++; + } + + *decodeData = ( char *)(*PLBase64Decode)(cryptData, len, NULL); + + if( *decodeData == NULL ) + { + PrintMessage(MESG_ERROR, "\n Base64 decoding failed ..."); + return FPM_FALSE; + } + + *decodeLen = (len*3)/4 - adjust; + + PrintMessage(MESG_DEBUG, "\n CryptBase64Decode : Length of decoded data = %d", *decodeLen); + + return FPM_TRUE; +} + + +/** +* Performs TRIPLE DES encryption of clear text data +* +* @param(in) clearData clear text data to be encrypted +* @param(in) clearDataLen length of clear text data +* @param(out) cryptData TRIPLE DES encrypted data +* @param(out) cryptDataLen length of encrypted data +* +* @return FPM_TRUE on success and FPM_FALSE on error. +* +*/ +int CryptManager::CryptPK11EncryptString(char *clearData, int clearDataLen, char **cryptData, int *cryptDataLen) +{ + PK11SlotInfo *slot = 0; + SECItem keyid; + SECItem request; + SECItem reply; + SECStatus status; + + slot = (*PK11GetInternalKeySlot)(); + + if (!slot) + { + PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11_GetInternalKeySlot failed ..."); + return FPM_FALSE; + } + + // PK11 authentication + if ( (*PK11Authenticate)(slot, PR_TRUE, NULL) != SECSuccess) + { + // 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"); + (*PK11FreeSlot) (slot); + return FPM_MASTERPASSWORD_WRONG; + } + + + // Use default key id + keyid.data = 0; + keyid.len = 0; + request.data = (unsigned char *)clearData; + request.len = clearDataLen; + reply.data = 0; + reply.len = 0; + + status = (*PK11SDREncrypt)(&keyid, &request, &reply, NULL); + + if (status != SECSuccess) + { + PrintMessage(MESG_ERROR, "\n CryptPK11EncryptString : PK11SDR_Encrypt failed ..."); + (*PK11FreeSlot) (slot); + return FPM_FALSE; + } + + + *cryptData = (char*)reply.data; + *cryptDataLen = reply.len; + + (*PK11FreeSlot) (slot); + return FPM_TRUE; +} + + + +/** +* Performs TRIPLE DES decryption of base64 decoded data +* +* @param(in) decodeData base64 decoded data +* @param(in) decodeLen length of base64 decoded data +* @param(out) clearData decrypted data +* @param(out) finalLen length of decrypted data +* +* @return FPM_TRUE on success and FPM_FALSE on error. +* +*/ +int CryptManager::CryptPK11DecryptString(char *decodeData, int decodeLen, char **clearData, int *finalLen) +{ + PK11SlotInfo *slot = 0; + SECStatus status; + SECItem request; + SECItem reply; + + PrintMessage(MESG_DEBUG, "\n CryptPK11DecryptString entered ..."); + + // Find token with SDR key + slot = (*PK11GetInternalKeySlot)(); + + if (!slot) + { + PrintMessage(MESG_ERROR, "\n PK11_GetInternalKeySlot failed ..."); + return FPM_FALSE; + } + + PrintMessage(MESG_DEBUG, "\n PK11_GetInternalKeySlot SUCCESS ..."); + + // Force authentication + if ( (*PK11Authenticate)(slot, PR_TRUE, NULL) != SECSuccess) + { + // since we have specified password callback function , we won't come here... + PrintMessage(MESG_ERROR, "\n PK11_Authenticate failed, Probably master password is wrong"); + (*PK11FreeSlot) (slot); + return FPM_MASTERPASSWORD_WRONG; + } + + PrintMessage(MESG_DEBUG, "\n PK11_Authenticate SUCCESS ..."); + + // Decrypt the string + request.data = (unsigned char *)decodeData; + request.len = decodeLen; + reply.data = 0; + reply.len = 0; + + PrintMessage(MESG_DEBUG, "\n calling PK11SDR_Decrypt ..."); + + status = (*PK11SDRDecrypt)(&request, &reply, NULL); + + if (status != SECSuccess) + { + PrintMessage(MESG_ERROR, "\n PK11SDR_Decrypt failed ..."); + (*PK11FreeSlot) (slot); + return FPM_FALSE; + } + + PrintMessage(MESG_DEBUG, "\n PK11SDR_Decrypt SUCCESS "); + + // WARNING : This string is not NULL terminated.. + *clearData = (char*)reply.data; + *finalLen = reply.len; + + // Free the slot + (*PK11FreeSlot) (slot); + + return FPM_TRUE; +} + + diff --git a/CASA/adlib/ad_ff/native/CryptManager.h b/CASA/adlib/ad_ff/native/CryptManager.h index 2986835b..f6469672 100644 --- a/CASA/adlib/ad_ff/native/CryptManager.h +++ b/CASA/adlib/ad_ff/native/CryptManager.h @@ -1,62 +1,64 @@ -/*********************************************************************** - * - * Copyright (C) 2005-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. - * - ***********************************************************************/ - - -#ifndef __FPM_CRYPT_MANAGER_H__ -#define __FPM_CRYPT_MANAGER_H__ - -#include "FirefoxPasswordManager.h" -#include "Common.h" - - -class CryptManager -{ - - //PK11_SetPasswordFunc PK11SetPasswordFunc; - PK11_GetInternalKeySlot PK11GetInternalKeySlot; - PK11_FreeSlot PK11FreeSlot; - PK11_Authenticate PK11Authenticate; - PK11_CheckUserPassword PK11CheckUserPassword; - PK11SDR_Decrypt PK11SDRDecrypt; - PK11SDR_Encrypt PK11SDREncrypt; - - PL_Base64Encode PLBase64Encode; - PL_Base64Decode PLBase64Decode; - -public: - - int DecryptString(char *cryptData, char **clearData); - int EncryptString (char *clearData, char **finalData) ; - int CryptBase64Decode(char *cryptData, char **decodeData, int *decodeLen); - int CryptBase64Encode(char *cryptData, int cryptDataLen, char **encodeData); - int CryptPK11DecryptString(char *decodeData, int decodeLen, char **clearData, int *finalLen); - int CryptPK11EncryptString(char *clearData, int clearDataLen, char **cryptData, int *cryptDataLen); - - void SetupFunctions(void *funList[]); - int GetEncryptionPref(); - -}; - - -#endif - - +/*********************************************************************** + * + * Copyright (C) 2005-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. + * + ***********************************************************************/ + + +#ifndef __FPM_CRYPT_MANAGER_H__ +#define __FPM_CRYPT_MANAGER_H__ + +#include "FirefoxPasswordManager.h" +#include "Common.h" + + +class CryptManager +{ + + //PK11_SetPasswordFunc PK11SetPasswordFunc; + PK11_GetInternalKeySlot PK11GetInternalKeySlot; + PK11_FreeSlot PK11FreeSlot; + PK11_Authenticate PK11Authenticate; + PK11_CheckUserPassword PK11CheckUserPassword; + PK11SDR_Decrypt PK11SDRDecrypt; + PK11SDR_Encrypt PK11SDREncrypt; + PK11_NeedUserInit PK11NeedUserInit; + PK11_InitPin PK11InitPin; + + PL_Base64Encode PLBase64Encode; + PL_Base64Decode PLBase64Decode; + +public: + + int DecryptString(char *cryptData, char **clearData); + int EncryptString (char *clearData, char **finalData) ; + int CryptBase64Decode(char *cryptData, char **decodeData, int *decodeLen); + int CryptBase64Encode(char *cryptData, int cryptDataLen, char **encodeData); + int CryptPK11DecryptString(char *decodeData, int decodeLen, char **clearData, int *finalLen); + int CryptPK11EncryptString(char *clearData, int clearDataLen, char **cryptData, int *cryptDataLen); + + void SetupFunctions(void *funList[]); + int GetEncryptionPref(); + +}; + + +#endif + + diff --git a/CASA/adlib/ad_ff/native/DataManager.cpp b/CASA/adlib/ad_ff/native/DataManager.cpp index e445b966..3f5ed664 100644 --- a/CASA/adlib/ad_ff/native/DataManager.cpp +++ b/CASA/adlib/ad_ff/native/DataManager.cpp @@ -1,608 +1,633 @@ -/*********************************************************************** - * - * Copyright (C) 2005-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. - * - ***********************************************************************/ - -#include "DataManager.h" - - -DataManager::DataManager() -{ - hostList = NULL; - rejectHostList = NULL; -} - - - -DataManager::~DataManager() -{ - -} - -int DataManager::AddRejectHost(char *hostName) -{ -RejectHost *t; - - if( hostName == NULL || hostName[0] == 0 ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Host name is NULL or empty "); - // Just ignore this.. - return FPM_TRUE; - } - - // check if the specified host is already present - for(t=rejectHostList; t ; t = t->next) - { - if( STRCMPI(hostName, t->hostName) == 0 ) - { - PrintMessage(MESG_DEBUG, "\n DataManager : Specified hostname [%s] is already present ", hostName); - return FPM_TRUE; - } - } - - // Create new Host element for new host - RejectHost *tempHost = (RejectHost *) malloc(sizeof(RejectHost)); - - if( tempHost ) - tempHost->hostName = (char*) malloc(strlen(hostName) + 1); - - if( !tempHost || !tempHost->hostName) - { - PrintMessage(MESG_ERROR, "\n DataManager : Failed to add reject host due to insufficient memory "); - return FPM_INSUFFICIENT_MEMORY; - } - - strcpy(tempHost->hostName, hostName); - tempHost->next = NULL; - - if( rejectHostList == NULL ) - rejectHostList = tempHost; - else - { // Add new host at the end - for(t=rejectHostList; t->next ; t=t->next); - - t->next = tempHost; - } - - return FPM_TRUE; - - -} - - -//invoked from outside -int DataManager::RemoveRejectHost(char *hostName) -{ - RejectHost *prev = NULL; - - if( !hostName ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Host name is Null ...."); - return FPM_FALSE; - } - - // Find out and destroy it..! - for(RejectHost *t=rejectHostList; t ; prev=t,t=t->next) - { - if( STRCMPI(hostName, t->hostName) == 0 ) - { - // if this is the first node - if( rejectHostList == t ) - rejectHostList = t->next; - else - prev->next = t->next; - - free(t->hostName); - free(t); - return FPM_TRUE; - } - } - - PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present in the reject host list", hostName); - - return FPM_FALSE; - -} - - -void DataManager::PrintAllRejectHosts() -{ - - PrintMessage(MESG_PRINT, "\n\n ****** List of Reject Hosts ******"); - - for(RejectHost *t=rejectHostList; t ; t=t->next) - PrintMessage(MESG_PRINT, "\n %s", t->hostName); - -} - - -// internal function -int DataManager::AddHost(char *hostName) -{ -Host *host, *t; - - if( hostName == NULL || hostName[0] == 0 ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Host name is NULL or empty "); - return FPM_ILLEGAL_HOSTNAME; - } - - // check if the specified host is already present - for(host=hostList; host ; host = host->next) - { - if( STRCMPI(hostName, host->hostName) == 0 ) - { - PrintMessage(MESG_DEBUG, "\n DataManager : Specified hostname [%s] is already present ", hostName); - return FPM_TRUE; - } - } - - // Create new Host - Host *tempHost = (Host *) malloc(sizeof(Host)); - - if( tempHost ) - tempHost->hostName = (char*) malloc(strlen(hostName) + 1); - - if( !tempHost || !tempHost->hostName) - { - PrintMessage(MESG_ERROR, "\n DataManager : Failed to add host due to insufficient memory "); - return FPM_INSUFFICIENT_MEMORY; - } - - strcpy(tempHost->hostName, hostName); - tempHost->child = NULL; - tempHost->next = NULL; - - // Now add the new host to the existing store - if( hostList == NULL ) - hostList = tempHost; - else - { // Add new host at the end - for(t=hostList; t->next ; t=t->next); - - t->next = tempHost; - } - - return FPM_TRUE; -} - - - -// invoked from outside... -int DataManager::ModifyHost(char *oldHostName, char *newHostName) -{ - if( !oldHostName || !newHostName ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Null parameters passed...."); - return FPM_FALSE; - } - - - for(Host *t=hostList; t ; t=t->next) - { - if( STRCMPI(oldHostName, t->hostName) == 0 ) - { - free(t->hostName); - t->hostName = (char*) malloc( strlen(newHostName) + 1 ); - - if( !t->hostName ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Failed to modify host entry due to insufficient memory "); - return FPM_FALSE; - } - - strcpy(t->hostName, newHostName); - return FPM_TRUE; - } - } - - PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", oldHostName); - return FPM_FALSE; - -} - -int DataManager::AddHost(Host *host) -{ - -Host *t; - - if( host == NULL ) - { - PrintMessage(MESG_ERROR, "\n AddHost : host is NULL...."); - return FPM_FALSE; - } - - for(t=hostList; t ; t=t->next) - { - if( STRCMPI(host->hostName, t->hostName) == 0 ) - { - PrintMessage(MESG_ERROR, "\n AddHost : Specified hostname %s is already present..", host->hostName); - return FPM_FALSE; - } - } - - Host *newHost = DuplicateHost(host); - - if( newHost == NULL) - { - PrintMessage(MESG_ERROR, "\n AddHost : Insufficient memory"); - return FPM_INSUFFICIENT_MEMORY; - } - - // Add the new host at the end of the list... - if( hostList == NULL ) - hostList = newHost; - else - { - for(t=hostList; t->next ; t=t->next); - - t->next = newHost; - } - - PrintMessage(MESG_DEBUG, "\n AddHost : Host %s added successfully", newHost->hostName); - - return FPM_TRUE; -} - - - -int DataManager::ModifyHost(Host *host) -{ - Host *prev = NULL; - - if( host == NULL ) - { - PrintMessage(MESG_ERROR, "\n ModifyHost : host is NULL...."); - return FPM_FALSE; - } - - // check if the specified host is present - // If present remove it and add new host ... - for(Host *t=hostList; t ; prev=t,t=t->next) - { - if( STRCMPI(host->hostName, t->hostName) == 0 ) - { - Host *newHost = DuplicateHost(host); - - if( newHost == NULL ) - { - PrintMessage(MESG_ERROR, "\n ModifyHost : Insufficient memory"); - return FPM_INSUFFICIENT_MEMORY; - } - - // if this is the first node - if( hostList == t ) - { - hostList = newHost; - newHost->next = t->next; - } - else - { - prev->next = newHost; - newHost->next = t->next; - } - - PrintMessage(MESG_DEBUG, "\n ModifyHost : Host %s modified successfully", newHost->hostName); - - return FPM_TRUE; - } - } - - PrintMessage(MESG_ERROR, "\n ModifyHost : Specified host %s is not present", host->hostName); - - return FPM_HOSTNAME_NOT_PRESENT; -} - - - - -//invoked from outside -int DataManager::RemoveHost(char *hostName) -{ - Host *prev = NULL; - - if( !hostName ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Host name is Null ...."); - return FPM_ILLEGAL_HOSTNAME; - } - - // Find out and destroy it..! - for(Host *t=hostList; t ; prev=t,t=t->next) - { - if( STRCMPI(hostName, t->hostName) == 0 ) - { - // if this is the first node - if( hostList == t ) - hostList = t->next; - else - prev->next = t->next; - - free(t->hostName); - free(t); - return FPM_TRUE; - } - } - - PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", hostName); - - return FPM_HOSTNAME_NOT_PRESENT; -} - - -Host* DataManager::DuplicateHost(Host *host) -{ -HostElement *prev = NULL; -HostElement *t, *temp; - - Host *newHost = (Host *) malloc(sizeof(Host)); - - if( newHost ) - newHost->hostName = (char*) malloc(strlen(host->hostName) + 1); - - if( !newHost || !newHost->hostName ) - { - PrintMessage(MESG_ERROR, "\n DuplicateHost : Insufficient memory"); - return NULL; - } - - strcpy(newHost->hostName, host->hostName); - newHost->child = NULL; - newHost->next = NULL; - - for(t=host->child; t ; t = t->next) - { - HostElement *nh = (HostElement*) malloc(sizeof(HostElement)); - - if( nh ) - { - nh->name = (char*) malloc(strlen(t->name) + 1 ); - nh->value = (char*) malloc(strlen(t->value) + 1); - } - - if( !nh || !nh->name || !nh->value) - goto duplicate_error; - - nh->isPassword = t->isPassword; - strcpy(nh->name, t->name); - strcpy(nh->value, t->value); - nh->next = NULL; - - if( prev == NULL ) - newHost->child = nh; - else - prev->next = nh; - - prev = nh; - } - - - return newHost; - -duplicate_error: - - // cleanup partially loaded data - for(t=newHost->child; t ; ) - { - if(t->name) free(t); - if(t->value) free(t); - - temp = t; - t = t->next; - free(temp); - } - - - if(newHost->hostName) - free(newHost->hostName); - - free(newHost); - - PrintMessage(MESG_ERROR, "\n DuplicateHost : Insufficient memory"); - return NULL; -} - -void DataManager::PrintAllHosts() -{ - PrintMessage(MESG_PRINT, "\n\n List of hosts "); - - for(Host *t=hostList; t ; t=t->next) - { - PrintMessage(MESG_PRINT, "\n\n %s", t->hostName); - for(HostElement *h=t->child; h ; h= h->next) - { - PrintMessage(MESG_PRINT, "\n %s : %s ", h->name, h->value); - } - } -} - - - - -int DataManager::AddHostElement(char *hostName, char *name, char *value, unsigned char isPassword) -{ - Host *host; - HostElement *h, *t; - - - if( !hostName || !name || !value) - { - PrintMessage(MESG_ERROR, "\n DataManager : Null parameters passed...."); - return FPM_SIGNON_FILE_INVALID_DATA; - } - - - // First find the specified host - for(host = hostList; host ; host = host->next) - { - if( STRCMPI(hostName, host->hostName) == 0 ) - break; - } - - - if( !host ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", hostName); - return FPM_HOSTNAME_NOT_PRESENT; - } - - // check if specified name/value pair exist already.... - for(h = host->child; h ; h=h->next) - { - if( (STRCMPI(h->name,name) == 0 ) && (strcmp(h->value, value) == 0 ) ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Specified name/value [%s/%s]pair is already present ", name,value); - return FPM_TRUE; - } - } - - HostElement *temp = (HostElement *) malloc(sizeof(HostElement)); - if( temp ) - { - temp->name = (char*) malloc( strlen(name)+1 ); - temp->value = (char*) malloc( strlen( value) + 1 ); - } - - if( !temp || !temp->name || !temp->value ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Failed to add name/value due to insufficient memory "); - return FPM_INSUFFICIENT_MEMORY; - } - - strcpy(temp->name,name); - strcpy(temp->value, value); - temp->isPassword = isPassword; - temp->next = NULL; - - // Now add it to the host... - if( host->child == NULL ) - { - host->child = temp; - } - else - { - for(t = host->child; t->next ; t=t->next); - - t->next = temp; - } - - return FPM_TRUE; -} - - -// invoked from outside.. -int DataManager::RemoveHostElement(char *hostName, char *value) -{ - - Host *host; - - if( !hostName || !value ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Null parameters passed...."); - return FPM_FALSE; - } - - // First find the specified hot - for(host = hostList; host; host = host->next) - { - if( STRCMPI(hostName, host->hostName) == 0 ) - break; - } - - if( !host ) - { - PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", hostName); - return FPM_FALSE; - } - - HostElement *prev = host->child; - for(HostElement *h = host->child; h ;prev=h, h=h->next) - { - if( strcmp(h->value, value) == 0 ) - { - - if( host->child == h ) - host->child = h->next; - else - prev->next = h->next; - - free(h->value); - free(h->name); - free(h); - - return FPM_TRUE; - } - } - - - return FPM_FALSE; -} - - -// internal -int DataManager::RemoveAllData() -{ - - RemoveAllRejectHosts(); - RemoveAllHosts(); - - return FPM_TRUE; -} - - -int DataManager::RemoveAllRejectHosts() -{ -RejectHost *t = rejectHostList; -RejectHost *temp; - - for( ; t; ) - { - temp = t; - t= t->next; - RemoveRejectHost(temp->hostName); - } - - rejectHostList = NULL; - - return FPM_TRUE; -} - - -int DataManager::RemoveAllHosts() -{ -Host *t = hostList; -Host *temp; - - for( ; t ; ) - { - temp = t; - t = t->next; - - RemoveHost(temp->hostName); - } - - hostList = NULL; - - return FPM_TRUE; - -} - - - +/*********************************************************************** + * + * Copyright (C) 2005-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. + * + ***********************************************************************/ + +#include "DataManager.h" + + +DataManager::DataManager() +{ + hostList = NULL; + rejectHostList = NULL; +} + + + +DataManager::~DataManager() +{ + +} + +int DataManager::AddRejectHost(char *hostName) +{ +RejectHost *t; + + if( hostName == NULL || hostName[0] == 0 ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Host name is NULL or empty "); + // Just ignore this.. + return FPM_TRUE; + } + + // check if the specified host is already present + for(t=rejectHostList; t ; t = t->next) + { + if( STRCMPI(hostName, t->hostName) == 0 ) + { + PrintMessage(MESG_DEBUG, "\n DataManager : Specified hostname [%s] is already present ", hostName); + return FPM_TRUE; + } + } + + // Create new Host element for new host + RejectHost *tempHost = (RejectHost *) malloc(sizeof(RejectHost)); + + if( tempHost ) + tempHost->hostName = (char*) malloc(strlen(hostName) + 1); + + if( !tempHost || !tempHost->hostName) + { + PrintMessage(MESG_ERROR, "\n DataManager : Failed to add reject host due to insufficient memory "); + return FPM_INSUFFICIENT_MEMORY; + } + + strcpy(tempHost->hostName, hostName); + tempHost->next = NULL; + + if( rejectHostList == NULL ) + rejectHostList = tempHost; + else + { // Add new host at the end + for(t=rejectHostList; t->next ; t=t->next); + + t->next = tempHost; + } + + return FPM_TRUE; + + +} + + +//invoked from outside +int DataManager::RemoveRejectHost(char *hostName) +{ + RejectHost *prev = NULL; + + if( !hostName ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Host name is Null ...."); + return FPM_FALSE; + } + + // Find out and destroy it..! + for(RejectHost *t=rejectHostList; t ; prev=t,t=t->next) + { + if( STRCMPI(hostName, t->hostName) == 0 ) + { + // if this is the first node + if( rejectHostList == t ) + rejectHostList = t->next; + else + prev->next = t->next; + + free(t->hostName); + free(t); + return FPM_TRUE; + } + } + + PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present in the reject host list", hostName); + + return FPM_FALSE; + +} + + +void DataManager::PrintAllRejectHosts() +{ + + PrintMessage(MESG_PRINT, "\n\n ****** List of Reject Hosts ******"); + + for(RejectHost *t=rejectHostList; t ; t=t->next) + PrintMessage(MESG_PRINT, "\n %s", t->hostName); + +} + + +// internal function +int DataManager::AddHost(char *hostName) +{ +Host *host, *t; + + if( hostName == NULL || hostName[0] == 0 ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Host name is NULL or empty "); + return FPM_ILLEGAL_HOSTNAME; + } + + // check if the specified host is already present + for(host=hostList; host ; host = host->next) + { + if( STRCMPI(hostName, host->hostName) == 0 ) + { + PrintMessage(MESG_DEBUG, "\n DataManager : Specified hostname [%s] is already present ", hostName); + return FPM_TRUE; + } + } + + // Create new Host + Host *tempHost = (Host *) malloc(sizeof(Host)); + + if( tempHost ) + tempHost->hostName = (char*) malloc(strlen(hostName) + 1); + + if( !tempHost || !tempHost->hostName) + { + PrintMessage(MESG_ERROR, "\n DataManager : Failed to add host due to insufficient memory "); + return FPM_INSUFFICIENT_MEMORY; + } + + strcpy(tempHost->hostName, hostName); + tempHost->child = NULL; + tempHost->next = NULL; + + // Now add the new host to the existing store + if( hostList == NULL ) + hostList = tempHost; + else + { // Add new host at the end + for(t=hostList; t->next ; t=t->next); + + t->next = tempHost; + } + + return FPM_TRUE; +} + + + +// invoked from outside... +int DataManager::ModifyHost(char *oldHostName, char *newHostName) +{ + if( !oldHostName || !newHostName ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Null parameters passed...."); + return FPM_FALSE; + } + + + for(Host *t=hostList; t ; t=t->next) + { + if( STRCMPI(oldHostName, t->hostName) == 0 ) + { + free(t->hostName); + t->hostName = (char*) malloc( strlen(newHostName) + 1 ); + + if( !t->hostName ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Failed to modify host entry due to insufficient memory "); + return FPM_FALSE; + } + + strcpy(t->hostName, newHostName); + return FPM_TRUE; + } + } + + PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", oldHostName); + return FPM_FALSE; + +} + +int DataManager::AddHost(Host *host) +{ + +Host *t; +char *temp = (char *) malloc(sizeof(char)*(strlen(host->hostName)+3)); + strcpy (temp, host->hostName); + strncat (temp, " (", 2); + + if( host == NULL ) + { + PrintMessage(MESG_ERROR, "\n AddHost : host is NULL...."); + return FPM_FALSE; + } + + for(t=hostList; t ; t=t->next) + { + if( STRCMPI(host->hostName, t->hostName) == 0 ) + { + if( STRCMPI(host->child->value, t->child->value) == 0) + { + PrintMessage(MESG_ERROR, "\n AddHost : Specified hostname %s is already present..", host->hostName); + return FPM_FALSE; + } + else + { + strncat (t->hostName, " (", 2); + strncat (t->hostName, t->child->value, strlen(t->child->value)); + strncat (t->hostName, ")", 1); + + strncat (host->hostName, " (", 2); + strncat (host->hostName, host->child->value, strlen(host->child->value)); + strncat (host->hostName, ")", 1); + break; + + } + } + if( strncmp(t->hostName, temp, strlen(host->hostName)+2) == 0) + { + strncat (host->hostName, " (", 2); + strncat (host->hostName, host->child->value, strlen(host->child->value)); + strncat (host->hostName, ")", 1); + break; + } + } + + Host *newHost = DuplicateHost(host); + + if( newHost == NULL) + { + PrintMessage(MESG_ERROR, "\n AddHost : Insufficient memory"); + return FPM_INSUFFICIENT_MEMORY; + } + + // Add the new host at the end of the list... + if( hostList == NULL ) + hostList = newHost; + else + { + for(t=hostList; t->next ; t=t->next); + + t->next = newHost; + } + + PrintMessage(MESG_DEBUG, "\n AddHost : Host %s added successfully", newHost->hostName); + + return FPM_TRUE; +} + + + +int DataManager::ModifyHost(Host *host) +{ + Host *prev = NULL; + + if( host == NULL ) + { + PrintMessage(MESG_ERROR, "\n ModifyHost : host is NULL...."); + return FPM_FALSE; + } + + // check if the specified host is present + // If present remove it and add new host ... + for(Host *t=hostList; t ; prev=t,t=t->next) + { + if( STRCMPI(host->hostName, t->hostName) == 0 ) + { + Host *newHost = DuplicateHost(host); + + if( newHost == NULL ) + { + PrintMessage(MESG_ERROR, "\n ModifyHost : Insufficient memory"); + return FPM_INSUFFICIENT_MEMORY; + } + + // if this is the first node + if( hostList == t ) + { + hostList = newHost; + newHost->next = t->next; + } + else + { + prev->next = newHost; + newHost->next = t->next; + } + + PrintMessage(MESG_DEBUG, "\n ModifyHost : Host %s modified successfully", newHost->hostName); + + return FPM_TRUE; + } + } + + PrintMessage(MESG_ERROR, "\n ModifyHost : Specified host %s is not present", host->hostName); + + return FPM_HOSTNAME_NOT_PRESENT; +} + + + + +//invoked from outside +int DataManager::RemoveHost(char *hostName) +{ + Host *prev = NULL; + + if( !hostName ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Host name is Null ...."); + return FPM_ILLEGAL_HOSTNAME; + } + + // Find out and destroy it..! + for(Host *t=hostList; t ; prev=t,t=t->next) + { + if( STRCMPI(hostName, t->hostName) == 0 ) + { + // if this is the first node + if( hostList == t ) + hostList = t->next; + else + prev->next = t->next; + + free(t->hostName); + free(t); + return FPM_TRUE; + } + } + + PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", hostName); + + return FPM_HOSTNAME_NOT_PRESENT; +} + + +Host* DataManager::DuplicateHost(Host *host) +{ +HostElement *prev = NULL; +HostElement *t, *temp; + + Host *newHost = (Host *) malloc(sizeof(Host)); + + if( newHost ) + newHost->hostName = (char*) malloc(strlen(host->hostName) + 1); + + if( !newHost || !newHost->hostName ) + { + PrintMessage(MESG_ERROR, "\n DuplicateHost : Insufficient memory"); + return NULL; + } + + strcpy(newHost->hostName, host->hostName); + newHost->child = NULL; + newHost->next = NULL; + + for(t=host->child; t ; t = t->next) + { + HostElement *nh = (HostElement*) malloc(sizeof(HostElement)); + + if( nh ) + { + nh->name = (char*) malloc(strlen(t->name) + 1 ); + nh->value = (char*) malloc(strlen(t->value) + 1); + } + + if( !nh || !nh->name || !nh->value) + goto duplicate_error; + + nh->isPassword = t->isPassword; + strcpy(nh->name, t->name); + strcpy(nh->value, t->value); + nh->next = NULL; + + if( prev == NULL ) + newHost->child = nh; + else + prev->next = nh; + + prev = nh; + } + + + return newHost; + +duplicate_error: + + // cleanup partially loaded data + for(t=newHost->child; t ; ) + { + if(t->name) free(t); + if(t->value) free(t); + + temp = t; + t = t->next; + free(temp); + } + + + if(newHost->hostName) + free(newHost->hostName); + + free(newHost); + + PrintMessage(MESG_ERROR, "\n DuplicateHost : Insufficient memory"); + return NULL; +} + +void DataManager::PrintAllHosts() +{ + PrintMessage(MESG_PRINT, "\n\n List of hosts "); + + for(Host *t=hostList; t ; t=t->next) + { + PrintMessage(MESG_PRINT, "\n\n %s", t->hostName); + for(HostElement *h=t->child; h ; h= h->next) + { + PrintMessage(MESG_PRINT, "\n %s : %s ", h->name, h->value); + } + } +} + + + + +int DataManager::AddHostElement(char *hostName, char *name, char *value, unsigned char isPassword) +{ + Host *host; + HostElement *h, *t; + + + if( !hostName || !name || !value) + { + PrintMessage(MESG_ERROR, "\n DataManager : Null parameters passed...."); + return FPM_SIGNON_FILE_INVALID_DATA; + } + + + // First find the specified host + for(host = hostList; host ; host = host->next) + { + if( STRCMPI(hostName, host->hostName) == 0 ) + break; + } + + + if( !host ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", hostName); + return FPM_HOSTNAME_NOT_PRESENT; + } + + // check if specified name/value pair exist already.... + for(h = host->child; h ; h=h->next) + { + if( (STRCMPI(h->name,name) == 0 ) && (strcmp(h->value, value) == 0 ) ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Specified name/value [%s/%s]pair is already present ", name,value); + return FPM_TRUE; + } + } + + HostElement *temp = (HostElement *) malloc(sizeof(HostElement)); + if( temp ) + { + temp->name = (char*) malloc( strlen(name)+1 ); + temp->value = (char*) malloc( strlen( value) + 1 ); + } + + if( !temp || !temp->name || !temp->value ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Failed to add name/value due to insufficient memory "); + return FPM_INSUFFICIENT_MEMORY; + } + + strcpy(temp->name,name); + strcpy(temp->value, value); + temp->isPassword = isPassword; + temp->next = NULL; + + // Now add it to the host... + if( host->child == NULL ) + { + host->child = temp; + } + else + { + for(t = host->child; t->next ; t=t->next); + + t->next = temp; + } + + return FPM_TRUE; +} + + +// invoked from outside.. +int DataManager::RemoveHostElement(char *hostName, char *value) +{ + + Host *host; + + if( !hostName || !value ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Null parameters passed...."); + return FPM_FALSE; + } + + // First find the specified hot + for(host = hostList; host; host = host->next) + { + if( STRCMPI(hostName, host->hostName) == 0 ) + break; + } + + if( !host ) + { + PrintMessage(MESG_ERROR, "\n DataManager : Specified hostname[%s] is not present ", hostName); + return FPM_FALSE; + } + + HostElement *prev = host->child; + for(HostElement *h = host->child; h ;prev=h, h=h->next) + { + if( strcmp(h->value, value) == 0 ) + { + + if( host->child == h ) + host->child = h->next; + else + prev->next = h->next; + + free(h->value); + free(h->name); + free(h); + + return FPM_TRUE; + } + } + + + return FPM_FALSE; +} + + +// internal +int DataManager::RemoveAllData() +{ + + RemoveAllRejectHosts(); + RemoveAllHosts(); + + return FPM_TRUE; +} + + +int DataManager::RemoveAllRejectHosts() +{ +RejectHost *t = rejectHostList; +RejectHost *temp; + + for( ; t; ) + { + temp = t; + t= t->next; + RemoveRejectHost(temp->hostName); + } + + rejectHostList = NULL; + + return FPM_TRUE; +} + + +int DataManager::RemoveAllHosts() +{ +Host *t = hostList; +Host *temp; + + for( ; t ; ) + { + temp = t; + t = t->next; + + RemoveHost(temp->hostName); + } + + hostList = NULL; + + return FPM_TRUE; + +} + + + diff --git a/CASA/adlib/ad_ff/native/FirefoxPasswordManager.cpp b/CASA/adlib/ad_ff/native/FirefoxPasswordManager.cpp index 89a83725..95e9e704 100644 --- a/CASA/adlib/ad_ff/native/FirefoxPasswordManager.cpp +++ b/CASA/adlib/ad_ff/native/FirefoxPasswordManager.cpp @@ -1,727 +1,847 @@ -/*********************************************************************** - * - * Copyright (C) 2005-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. - * - ***********************************************************************/ - - -#include "FirefoxPasswordManager.h" -#include "Common.h" -#include "ProfileManager.h" - - -ProfileManager profileManager[MAX_PROFILE_COUNT]; -int profileCount = 0; - - - -/** -* Check if firefox is there on the system -* -* @return 1 if firefox libraries are present -* 0 otherwise -* -* It loads the libraries from the firefox library path and if they are loaded -* successfully then that indicates that firefox is present. -* -*/ -extern "C" APIEXPORT int FPM_IsStoreAvailable() -{ - ProfileManager pm; - return pm.IsStoreAvailable(); -} - - - -/* -* Gets the list of profile names... -* -* @param[in/out] profiles pointer to array of profile names -* @param[in/out] profileFlag Indicates if default profile or not. -* @return count count of profiles -* 0 no profiles found -* < 0 on error -* -* If one or more profiles found then profiles array is filled with -* the profile names and count of profiles is returned. ProfileFlag[] -* array is filled with 1 or 0 to indicate if the respective profile -* is default profile or not.If no profiles found then value 0 is -* returned and negative values is returned if there is an error. -* -*/ - -extern "C" APIEXPORT int FPM_GetProfileList(char **profileList[], int *profileFlag[]) -{ - -#ifdef WIN32 - - char profileDir[MAX_PATH] = ""; - char partialPath[] = "Application Data\\Mozilla\\Firefox"; - char profilePath[MAX_PATH]; - char line[1024]; - - DWORD pathSize = MAX_PATH; - char *finalProfilePath = NULL; - int profileCount = 0; - unsigned int i; - HANDLE token; - - - // Get current user's profile directory - if( OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token) == FALSE ) - { - PrintMessage(MESG_ERROR, "\n GetProfileList : Failed to get current process token "); - return FPM_FALSE; - } - - if( GetUserProfileDirectory(token, profileDir, &pathSize) == FALSE ) - { - PrintMessage(MESG_ERROR, "\n GetProfileList : Failed to get user profile directory"); - return FPM_FALSE; - } - - PrintMessage(MESG_DEBUG, "\n GetProfileList : User Profile directory = %s", profileDir); - - // Get firefox profile directory - strcpy(profilePath, profileDir); - strcat(profilePath,"\\"); - strcat(profilePath,partialPath); - strcat(profilePath,"\\profiles.ini"); - - PrintMessage(MESG_DEBUG, "\n GetProfileList : Firefox profile dir path = %s ", profilePath); - - -#else // Linux platform.... - - char profileDir[] ="/.mozilla/firefox"; - char profileFile[] ="/.mozilla/firefox/profiles.ini"; - - char line[1024]; - char *profilePath = NULL; - char *homeDir = NULL; - char *finalProfilePath = NULL; - int profileCount = 0; - unsigned int i; - - // Get home directory - homeDir = getenv("HOME"); - - if(homeDir == NULL ) - { - PrintMessage(MESG_ERROR, "\n GetProfileList : Unable to get home directory "); - return FPM_FALSE; - } - - profilePath = (char*) malloc( strlen(homeDir) + strlen(profileFile) + 3 ); - if( profilePath == NULL ) - { - PrintMessage(MESG_ERROR, "\n GetProfileList : Insufficient memory "); - return FPM_FALSE; - } - strcpy(profilePath,homeDir); - strcat(profilePath,profileFile); - - PrintMessage(MESG_DEBUG, "\n GetProfileList : Firefox profile dir path = %s ", profilePath); - -#endif - - // Open the firefox profile setting file - FILE *profile = fopen(profilePath, "r"); - - if( profile == NULL ) - { - PrintMessage(MESG_ERROR, "\n GetProfileList : Unable to find firefox profile file : %s ", profilePath); - return FPM_FALSE; - } - - // First find out the count of profiles.... - profileCount = 0; - while(fgets(line, 1024, profile)) - { - // Remove trailing end of line character - line[strlen(line)-1]= 0; - - // Convert to smaller case until "=" found.... - for(i=0; i=65 && line[i]<=90 ) - line[i]+=32; - } - - if( strstr(line, "name=") != NULL ) - { - char *temp = strchr(line,'=') + 1; - profList[profileCount] = (char*) malloc(strlen(temp)+1); - - if( profList[profileCount] == NULL ) - { - PrintMessage(MESG_ERROR, "\n GetProfileList : Insufficient memory "); - fclose(profile); - return 0; - } - - strcpy(profList[profileCount],temp); - profFlag[profileCount] = 0; - - PrintMessage(MESG_DEBUG, "\n GetProfileList : Found profile = [%s]", profList[profileCount]); - profileCount++; - continue; - } - - // check if the current profile is default - if( strstr(line, "default=1") != NULL ) - { - profFlag[profileCount-1] = 1; - } - - } - - fclose(profile); - - // if there is only one profile then set it default profile - if( profileCount == 1 ) - { - **profileFlag = 1; - } - - return profileCount; -} - - - -/** -* Initializes the firefox library with the specified profile -* -* @param profileName name of the profile -* @return 1 on success -* <=0 on error -* -* It initializes the firefox library with the specified profile. This must be called before -* invoking any operation on the specified profile. -* It performs following tasks -* * Determine firefox profile directory -* * Loads the firefox security libraries. -* * Initializes the firefox security library for the profile. -* -* If the mentioned profile is not found then FPM_PROFILE_NOT_PRESENT will be returned. If there is -* an error in loading or initializing the firefox library then FPM_LIBRARY_LOAD_FAILED or FPM_LIBRARY_INIT_FAILED -* is returned. If user has not enabled "remember passwords" then certain files (key3.db, cert8.db) required for -* initialization will not be present in the profile directory. This can cause FPM_LIBRARY_INIT_FAILED error. -* -*/ - -extern "C" APIEXPORT int FPM_FirefoxProfileInit(char *profileName) -{ -int retValue; -int profileIndex = -1; - - // Check if the object for specified profile already present... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - PrintMessage(MESG_DEBUG, "\n FirefoxProfileInit : Object for specified profile %s exist ", profileName); - profileIndex = i; - - break; - } - } - } - - // This is new profile... - if( profileIndex == -1) - { - if( (profileCount + 1) >= MAX_PROFILE_COUNT) - { - PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Max profile count exceeded."); - return FPM_PROFILE_LIMIT_EXCEEDED; - } - - profileIndex = profileCount; - profileCount++; - } - - // check if the profile is already initialized... - if( profileManager[profileIndex].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n FirefoxProfileInit : Specified profile %s is already initialized", profileName); - 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); - - - return FPM_TRUE; -} - - - -/** -* Uninitializes the specified profile. -* -* @param profileName name of the profile -* @return 1 on success -* <=0 on error -* -* Uninitializes the specified profile and unloads the firefox security library. -* It also cleans up internal data structure. -*/ - -extern "C" APIEXPORT int FPM_FirefoxProfileExit(char *profileName) -{ - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n FirefoxProfileExit : Exiting the firefox profile %s ", profileName); - profileManager[i].ProfileExit(); - return FPM_TRUE; - } - else - { - PrintMessage(MESG_ERROR, "\n FirefoxProfileExit : Specified profile %s is not initialized , cannot exit the profile", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - PrintMessage(MESG_ERROR, "\n FirefoxProfileExit : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; - - -} - - -/** -* Verifies if master passsword is set for the specified profile -* -* @param profileName name of the profile -* @return 1 if master password is set -* 0 if master password not set -* -* Checks if the master password is set or not for the specified profile. The application can -* use this function to determine if the user has set the master password. If so it can prompt -* the user to enter the master password. -*/ - -extern "C" APIEXPORT int FPM_IsMasterPasswordSet(char *profileName) -{ - - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : invoking IsMasterPasswordSet for profile %s", profileName); - return profileManager[i].IsMasterPasswordSet(); - } - else - { - PrintMessage(MESG_ERROR, "\n IsMasterPasswordSet : Specified profile %s is not initialized ", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - PrintMessage(MESG_ERROR, "\n IsMasterPasswordSet : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; - -} - - - -/** -* Checks if the master password is correct for the specified profile. -* -* @param profileName name of the profile -* @param masterPassword Master password to be checked. -* @return 1 if the specified master password is correct -* 0 if the master password is wrong. -* -* -* Check if the specified master password is correct or not. If it is -* correct then password is stored to the internal store for later use. -* If it is wrong then nothing is stored and 0 will be returned. -*/ - -extern "C" APIEXPORT int FPM_CheckMasterPassword(char *profileName, char *masterPassword) -{ - - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n CheckMasterPassword : invoking CheckMasterPassword for profile %s", profileName); - return profileManager[i].CheckMasterPassword(masterPassword, 1); - } - else - { - PrintMessage(MESG_ERROR, "\n CheckMasterPassword : Specified profile %s is not initialized ", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - - PrintMessage(MESG_ERROR, "\n CheckMasterPassword : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; - -} - -/** -* Loads the signon data from the firefox signon file for specified profile -* -* @param profileName name of the profile -* @param struct Host** pointer to list of signon host structure -* @param doRefresh signon data to be refreshed or not -* @return 1 success -* <= 0 If an error has occurred. -* -* Returns the pointer to the internal signon data store which contains list of hosts -* and associated name/value pairs. If doRefresh value is positive then fresh signon -* data is loaded from the signon file. Otherwise current signon data is returned. -* -* If the master password is set and its not specified or wrong password is specified -* then error code FPM_MASTERPASSWORD_WRONG will be returned. In this case use -* CheckMasterPassword function to set the correct master password and then call this -* function again. -* -* In case of error in reading signon information FPM_SIGNON_FILE_READ_ERROR or -* FPM_SIGNON_FILE_NOT_PRESENT will be returned. -* -*/ - - -extern "C" APIEXPORT int FPM_GetSignonData(char *profileName,struct Host **host, int doRefresh) -{ - - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n GetSignonData : invoking GetSignonData for profile %s", profileName); - return profileManager[i].GetSignonData(host, doRefresh); - } - else - { - PrintMessage(MESG_ERROR, "\n GetSignonData : Specified profile %s is not initialized", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - - PrintMessage(MESG_ERROR, "\n GetSignonData : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; -} - -/** -* Updates the firefox signon file with new signon data. -* -* @param profileName name of the profile -* @return 1 If signon data written to the disk successfully -* <=0 If an error has occurred. -* -* Writes the signon data from the internal signon data store to the disk. If an -* error occurs then proper error code will be returned. If the master password is set -* and its not specified or wrong password is specified then error code FPM_MASTERPASSWORD_WRONG -* will be returned. In this case use CheckMasterPassword function to set the correct -* master password and then call this function again. -* -* In case of write error, error code FPM_SIGNON_FILE_WRITE_ERROR will be returned. -* -* If the signon file is locked then error code FPM_SIGNON_FILE_LOCKED will be -* returned. In this case application should ask the user to close the firefox -* application and then it should call this function again. -* -*/ - -extern "C" APIEXPORT int FPM_WriteSignonData(char *profileName) -{ - - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n WriteSignonData : invoking WriteSignonData for profile %s", profileName); - return profileManager[i].WriteSignonData(); - } - else - { - PrintMessage(MESG_ERROR, "\n WriteSignonData : Specified profile %s is not initialized", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - - PrintMessage(MESG_ERROR, "\n WriteSignonData : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; -} - - -/** -* Adds signon data for new host... -* -* @param profileName name of the profile -* @param struct Host* pointer to host structure to be added -* @param doUpdate signon data to be written to the file or not -* @return 1 success -* <=0 error -* -* Adds the specified host information to the internal signon data store. If the -* value of doUpdate is positive then the entire signon data is written to the file. -* Otherwise changes are done only in the internal data store. -* -* If doUpdate is positive then error code may be from FPM_WriteSignonData function. -* -*/ - - -extern "C" APIEXPORT int FPM_AddHost(char *profileName, struct Host *host, int doUpdate) -{ - - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n AddHost : invoking AddHost for profile %s", profileName); - return profileManager[i].AddHost(host, doUpdate); - } - else - { - PrintMessage(MESG_ERROR, "\n AddHost : Specified profile %s is not initialized", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - - PrintMessage(MESG_ERROR, "\n AddHost : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; - -} - -/** -* Modifies the credentials for the specified host url for specified profile. -* -* @param profileName name of the profile -* @param struct Host* pointer to host structure to be modified. -* @param doUpdate signon data to be written to the file or not -* @return 1 success -* <=0 error -* -* Modifes the values of the specified host with new values. If the value -* of doUpdate is positive then the entire signon data is written to the file. -* Otherwise changes are done only in the internal data store. If any of -* the names ( name/value pairs ) is not matched with the existing name in the -* Host's username/password list then error FPM_NAME_NOT_PRESENT is returned. -* -* If doUpdate is positive then error code may be from FPM_WriteSignonData function. -* -*/ - -extern "C" APIEXPORT int FPM_ModifyHost(char *profileName, struct Host *host, int doUpdate) -{ - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n ModifyHost : invoking ModifyHost for profile %s", profileName); - return profileManager[i].ModifyHost(host, doUpdate); - } - else - { - PrintMessage(MESG_ERROR, "\n ModifyHost : Specified profile %s is not initialized", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - - PrintMessage(MESG_ERROR, "\n ModifyHost : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; - - -} - -/** -* Removes the signon credentials for specified host -* -* @param profileName name of the profile -* @param hostName complete URL of the host name -* @param doUpdate signon data to be written to the file or not -* -* @return 1 on success -* <=0 on error -* -* Removes the specified host from the internal signon data store. All -* name-value pairs associated with specified host will also be removed. -* If the value of doUpdate is positive then the entire signon data is -* written to the file. Otherwise changes are done only in the internal data store. -* -* If doUpdate is positive then error code may be from FPM_WriteSignonData function. -* -*/ -extern "C" APIEXPORT int FPM_RemoveHost(char *profileName, char *hostName, int doUpdate) -{ - // Find the profile... - for(int i=0; i< profileCount; i++) - { - if( profileManager[i].profileName != NULL ) - { - if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) - { - // check if its initialized - if( profileManager[i].isInitialized == FPM_TRUE ) - { - PrintMessage(MESG_DEBUG, "\n RemoveHost : invoking RemoveHost for profile %s", profileName); - return profileManager[i].RemoveHost(hostName, doUpdate); - } - else - { - PrintMessage(MESG_ERROR, "\n RemoveHost : Specified profile %s is not initialized", profileName); - return FPM_PROFILE_NOT_INITIALIZED; - } - } - } - } - - PrintMessage(MESG_ERROR, "\n RemoveHost : Specified profile %s is not found", profileName); - - return FPM_PROFILE_NOT_PRESENT; -} - - - - - - +/*********************************************************************** + * + * Copyright (C) 2005-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. + * + ***********************************************************************/ + + +#include "FirefoxPasswordManager.h" +#include "Common.h" +#include "ProfileManager.h" + + +ProfileManager profileManager[MAX_PROFILE_COUNT]; +int profileCount = 0; + + + +/** +* Check if firefox is there on the system +* +* @return 1 if firefox libraries are present +* 0 otherwise +* +* It loads the libraries from the firefox library path and if they are loaded +* successfully then that indicates that firefox is present. +* +*/ +extern "C" APIEXPORT int FPM_IsStoreAvailable() +{ + ProfileManager pm; + return pm.IsStoreAvailable(); +} + + + +/* +* Gets the list of profile names... +* +* @param[in/out] profiles pointer to array of profile names +* @param[in/out] profileFlag Indicates if default profile or not. +* @return count count of profiles +* 0 no profiles found +* < 0 on error +* +* If one or more profiles found then profiles array is filled with +* the profile names and count of profiles is returned. ProfileFlag[] +* array is filled with 1 or 0 to indicate if the respective profile +* is default profile or not.If no profiles found then value 0 is +* returned and negative values is returned if there is an error. +* +*/ +int WriteCharUTF8(Unichar c, FILE *profile) +{ + if (c <= 0x7F) + { + if( fputc((char)c, profile) == EOF ) + return FPM_FALSE; + } + else if (c <= 0x7FF) + { + if( fputc( ((Unichar)0xC0) | ((c>>6) & 0x1F), profile) == EOF ) + return FPM_FALSE; + + if( fputc( ((Unichar)0x80) | (c & 0x3F), profile ) == EOF ) + return FPM_FALSE; + + } + else + { + if( fputc( ((Unichar)0xE0) | ((c>>12) & 0xF), profile) == EOF ) + return FPM_FALSE; + if( fputc( ((Unichar)0x80) | ((c>>6) & 0x3F), profile) == EOF) + return FPM_FALSE; + if( fputc( ((Unichar)0x80) | (c & 0x3F), profile) == EOF) + return FPM_FALSE; + } + + return FPM_TRUE; +} + + + +int WriteLine(char *line, FILE *profile) +{ + + for(unsigned int i=0; i < strlen(line); i++) + { + if( WriteCharUTF8(line[i], profile) != FPM_TRUE ) + return FPM_FALSE; + + } + + if( WriteCharUTF8('\n', profile) != FPM_TRUE ) + return FPM_FALSE; + + return FPM_TRUE; + +} +int CreateNewProfile(char *profilePath, char *profileDir) +{ + FILE *profile = fopen(profilePath, "a"); + if(profile == NULL) + return FPM_FALSE; + WriteLine("[General]", profile); + WriteLine("StartWithLastProfile=1", profile); + WriteLine("", profile); + WriteLine("[Profile0]", profile); + WriteLine("Name=default", profile); + WriteLine("IsRelative=1", profile); + char *path = (char *)malloc(sizeof(char)*(strlen(profileDir)+10)); + if(path ==NULL) + return FPM_FALSE; + strcpy(path,"Path="); + strncat(path,profileDir,strlen(profileDir)); + WriteLine(path, profile); + free(path); + WriteLine("Default=1", profile); + WriteLine("", profile); + fclose(profile); + + return FPM_TRUE; + +} +extern "C" APIEXPORT int FPM_GetProfileList(char **profileList[], int *profileFlag[]) +{ + +#ifdef WIN32 + + char profileDir[MAX_PATH] = ""; + char partialPath[] = "Application Data\\Mozilla\\Firefox"; + char firefoxDir[MAX_PATH] = ""; + char profilePath[MAX_PATH]; + char line[1024]; + + DWORD pathSize = MAX_PATH; + char *finalProfilePath = NULL; + int profileCount = 0; + unsigned int i; + HANDLE token; + + + // Get current user's profile directory + if( OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token) == FALSE ) + { + PrintMessage(MESG_ERROR, "\n GetProfileList : Failed to get current process token "); + return FPM_FALSE; + } + + if( GetUserProfileDirectory(token, profileDir, &pathSize) == FALSE ) + { + PrintMessage(MESG_ERROR, "\n GetProfileList : Failed to get user profile directory"); + return FPM_FALSE; + } + + PrintMessage(MESG_DEBUG, "\n GetProfileList : User Profile directory = %s", profileDir); + + // Get firefox profile directory + strcpy(profilePath, profileDir); + strcat(profilePath,"\\"); + strcat(profilePath,partialPath); + strcpy(firefoxDir, profilePath); + strcat(profilePath,"\\profiles.ini"); + + PrintMessage(MESG_DEBUG, "\n GetProfileList : Firefox profile dir path = %s ", profilePath); + + +#else // Linux platform.... + + char profileDir[] ="/.mozilla/firefox"; + char profileFile[] ="/.mozilla/firefox/profiles.ini"; + + char line[1024]; + char *profilePath = NULL; + char *homeDir = NULL; + char *finalProfilePath = NULL; + int profileCount = 0; + unsigned int i; + + // Get home directory + homeDir = getenv("HOME"); + + if(homeDir == NULL ) + { + PrintMessage(MESG_ERROR, "\n GetProfileList : Unable to get home directory "); + return FPM_FALSE; + } + + profilePath = (char*) malloc( strlen(homeDir) + strlen(profileFile) + 3 ); + if( profilePath == NULL ) + { + PrintMessage(MESG_ERROR, "\n GetProfileList : Insufficient memory "); + return FPM_FALSE; + } + strcpy(profilePath,homeDir); + strcat(profilePath,profileFile); + + PrintMessage(MESG_DEBUG, "\n GetProfileList : Firefox profile dir path = %s ", profilePath); + +#endif + + // Open the firefox profile setting file + FILE *profile = fopen(profilePath, "r"); + + if( profile == NULL ) + { + PrintMessage(MESG_ERROR, "\n GetProfileList : Unable to find firefox profile file : %s ", profilePath); + //create new profile.ini and the profile directory +#ifdef WIN32 + +#else + char *firefoxDir = (char *) malloc(sizeof(char) * (strlen(profileDir)+strlen(homeDir)+10)); + strcpy(firefoxDir, homeDir); + strncat(firefoxDir, "/", 1); + strncat(firefoxDir, profileDir, strlen(profileDir)); +#endif + if (!IsDirectoryExists(firefoxDir)) + { + PrintMessage(MESG_DEBUG, "\n Directory does not exist"); + if ( CreateDirectory(firefoxDir) !=1) + { + PrintMessage(MESG_DEBUG, "\n Can't create Dir"); + return FPM_FALSE; + } + PrintMessage(MESG_DEBUG, "\n Directory successfully created"); + } + + char *randdir = (char *) malloc(sizeof(char) * 20); + srand(time(0)); + for( int i=0; i<8; i++) + { + if( rand()%2==1) + randdir[i] = 48 + (rand()%10); + else + randdir[i] = 97 + (rand()%26); + } + randdir[8]='\0'; + strncat(randdir, ".default",8); + + if (CreateNewProfile(profilePath, randdir) == FPM_TRUE) + { + profile = fopen(profilePath, "r"); + char *dir = (char *) malloc(strlen(firefoxDir)+20); + strcpy(dir, firefoxDir); +#ifdef WIN32 + strncat(dir, "\\", 2); +#else + strncat(dir, "/",1); +#endif + strncat(dir, randdir,strlen(randdir)); + if( CreateDirectory(dir) != 1) + return FPM_FALSE; + } + else + return FPM_FALSE; + } + + // First find out the count of profiles.... + profileCount = 0; + while(fgets(line, 1024, profile)) + { + // Remove trailing end of line character + line[strlen(line)-1]= 0; + + // Convert to smaller case until "=" found.... + for(i=0; i=65 && line[i]<=90 ) + line[i]+=32; + } + + if( strstr(line, "name=") != NULL ) + { + char *temp = strchr(line,'=') + 1; + profList[profileCount] = (char*) malloc(strlen(temp)+1); + + if( profList[profileCount] == NULL ) + { + PrintMessage(MESG_ERROR, "\n GetProfileList : Insufficient memory "); + fclose(profile); + return 0; + } + + strcpy(profList[profileCount],temp); + profFlag[profileCount] = 0; + + PrintMessage(MESG_DEBUG, "\n GetProfileList : Found profile = [%s]", profList[profileCount]); + profileCount++; + continue; + } + + // check if the current profile is default + if( strstr(line, "default=1") != NULL ) + { + profFlag[profileCount-1] = 1; + } + + } + + fclose(profile); + + // if there is only one profile then set it default profile + if( profileCount == 1 ) + { + **profileFlag = 1; + } + + return profileCount; +} + + + +/** +* Initializes the firefox library with the specified profile +* +* @param profileName name of the profile +* @return 1 on success +* <=0 on error +* +* It initializes the firefox library with the specified profile. This must be called before +* invoking any operation on the specified profile. +* It performs following tasks +* * Determine firefox profile directory +* * Loads the firefox security libraries. +* * Initializes the firefox security library for the profile. +* +* If the mentioned profile is not found then FPM_PROFILE_NOT_PRESENT will be returned. If there is +* an error in loading or initializing the firefox library then FPM_LIBRARY_LOAD_FAILED or FPM_LIBRARY_INIT_FAILED +* is returned. If user has not enabled "remember passwords" then certain files (key3.db, cert8.db) required for +* initialization will not be present in the profile directory. This can cause FPM_LIBRARY_INIT_FAILED error. +* +*/ + +extern "C" APIEXPORT int FPM_FirefoxProfileInit(char *profileName) +{ +int retValue; +int profileIndex = -1; + + // Check if the object for specified profile already present... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + PrintMessage(MESG_DEBUG, "\n FirefoxProfileInit : Object for specified profile %s exist ", profileName); + profileIndex = i; + + break; + } + } + } + + // This is new profile... + if( profileIndex == -1) + { + if( (profileCount + 1) >= MAX_PROFILE_COUNT) + { + PrintMessage(MESG_ERROR, "\n FirefoxProfileInit : Max profile count exceeded."); + return FPM_PROFILE_LIMIT_EXCEEDED; + } + + profileIndex = profileCount; + profileCount++; + } + + // check if the profile is already initialized... + if( profileManager[profileIndex].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n FirefoxProfileInit : Specified profile %s is already initialized", profileName); + 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); + + + return FPM_TRUE; +} + + + +/** +* Uninitializes the specified profile. +* +* @param profileName name of the profile +* @return 1 on success +* <=0 on error +* +* Uninitializes the specified profile and unloads the firefox security library. +* It also cleans up internal data structure. +*/ + +extern "C" APIEXPORT int FPM_FirefoxProfileExit(char *profileName) +{ + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n FirefoxProfileExit : Exiting the firefox profile %s ", profileName); + profileManager[i].ProfileExit(); + return FPM_TRUE; + } + else + { + PrintMessage(MESG_ERROR, "\n FirefoxProfileExit : Specified profile %s is not initialized , cannot exit the profile", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + PrintMessage(MESG_ERROR, "\n FirefoxProfileExit : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; + + +} + + +/** +* Verifies if master passsword is set for the specified profile +* +* @param profileName name of the profile +* @return 1 if master password is set +* 0 if master password not set +* +* Checks if the master password is set or not for the specified profile. The application can +* use this function to determine if the user has set the master password. If so it can prompt +* the user to enter the master password. +*/ + +extern "C" APIEXPORT int FPM_IsMasterPasswordSet(char *profileName) +{ + + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : invoking IsMasterPasswordSet for profile %s", profileName); + return profileManager[i].IsMasterPasswordSet(); + } + else + { + PrintMessage(MESG_ERROR, "\n IsMasterPasswordSet : Specified profile %s is not initialized ", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + PrintMessage(MESG_ERROR, "\n IsMasterPasswordSet : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; + +} + + + +/** +* Checks if the master password is correct for the specified profile. +* +* @param profileName name of the profile +* @param masterPassword Master password to be checked. +* @return 1 if the specified master password is correct +* 0 if the master password is wrong. +* +* +* Check if the specified master password is correct or not. If it is +* correct then password is stored to the internal store for later use. +* If it is wrong then nothing is stored and 0 will be returned. +*/ + +extern "C" APIEXPORT int FPM_CheckMasterPassword(char *profileName, char *masterPassword) +{ + + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n CheckMasterPassword : invoking CheckMasterPassword for profile %s", profileName); + return profileManager[i].CheckMasterPassword(masterPassword, 1); + } + else + { + PrintMessage(MESG_ERROR, "\n CheckMasterPassword : Specified profile %s is not initialized ", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + + PrintMessage(MESG_ERROR, "\n CheckMasterPassword : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; + +} + +/** +* Loads the signon data from the firefox signon file for specified profile +* +* @param profileName name of the profile +* @param struct Host** pointer to list of signon host structure +* @param doRefresh signon data to be refreshed or not +* @return 1 success +* <= 0 If an error has occurred. +* +* Returns the pointer to the internal signon data store which contains list of hosts +* and associated name/value pairs. If doRefresh value is positive then fresh signon +* data is loaded from the signon file. Otherwise current signon data is returned. +* +* If the master password is set and its not specified or wrong password is specified +* then error code FPM_MASTERPASSWORD_WRONG will be returned. In this case use +* CheckMasterPassword function to set the correct master password and then call this +* function again. +* +* In case of error in reading signon information FPM_SIGNON_FILE_READ_ERROR or +* FPM_SIGNON_FILE_NOT_PRESENT will be returned. +* +*/ + + +extern "C" APIEXPORT int FPM_GetSignonData(char *profileName,struct Host **host, int doRefresh) +{ + + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n GetSignonData : invoking GetSignonData for profile %s", profileName); + return profileManager[i].GetSignonData(host, doRefresh); + } + else + { + PrintMessage(MESG_ERROR, "\n GetSignonData : Specified profile %s is not initialized", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + + PrintMessage(MESG_ERROR, "\n GetSignonData : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; +} + +/** +* Updates the firefox signon file with new signon data. +* +* @param profileName name of the profile +* @return 1 If signon data written to the disk successfully +* <=0 If an error has occurred. +* +* Writes the signon data from the internal signon data store to the disk. If an +* error occurs then proper error code will be returned. If the master password is set +* and its not specified or wrong password is specified then error code FPM_MASTERPASSWORD_WRONG +* will be returned. In this case use CheckMasterPassword function to set the correct +* master password and then call this function again. +* +* In case of write error, error code FPM_SIGNON_FILE_WRITE_ERROR will be returned. +* +* If the signon file is locked then error code FPM_SIGNON_FILE_LOCKED will be +* returned. In this case application should ask the user to close the firefox +* application and then it should call this function again. +* +*/ + +extern "C" APIEXPORT int FPM_WriteSignonData(char *profileName) +{ + + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n WriteSignonData : invoking WriteSignonData for profile %s", profileName); + return profileManager[i].WriteSignonData(); + } + else + { + PrintMessage(MESG_ERROR, "\n WriteSignonData : Specified profile %s is not initialized", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + + PrintMessage(MESG_ERROR, "\n WriteSignonData : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; +} + + +/** +* Adds signon data for new host... +* +* @param profileName name of the profile +* @param struct Host* pointer to host structure to be added +* @param doUpdate signon data to be written to the file or not +* @return 1 success +* <=0 error +* +* Adds the specified host information to the internal signon data store. If the +* value of doUpdate is positive then the entire signon data is written to the file. +* Otherwise changes are done only in the internal data store. +* +* If doUpdate is positive then error code may be from FPM_WriteSignonData function. +* +*/ + + +extern "C" APIEXPORT int FPM_AddHost(char *profileName, struct Host *host, int doUpdate) +{ + + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n AddHost : invoking AddHost for profile %s", profileName); + return profileManager[i].AddHost(host, doUpdate); + } + else + { + PrintMessage(MESG_ERROR, "\n AddHost : Specified profile %s is not initialized", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + + PrintMessage(MESG_ERROR, "\n AddHost : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; + +} + +/** +* Modifies the credentials for the specified host url for specified profile. +* +* @param profileName name of the profile +* @param struct Host* pointer to host structure to be modified. +* @param doUpdate signon data to be written to the file or not +* @return 1 success +* <=0 error +* +* Modifes the values of the specified host with new values. If the value +* of doUpdate is positive then the entire signon data is written to the file. +* Otherwise changes are done only in the internal data store. If any of +* the names ( name/value pairs ) is not matched with the existing name in the +* Host's username/password list then error FPM_NAME_NOT_PRESENT is returned. +* +* If doUpdate is positive then error code may be from FPM_WriteSignonData function. +* +*/ + +extern "C" APIEXPORT int FPM_ModifyHost(char *profileName, struct Host *host, int doUpdate) +{ + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n ModifyHost : invoking ModifyHost for profile %s", profileName); + return profileManager[i].ModifyHost(host, doUpdate); + } + else + { + PrintMessage(MESG_ERROR, "\n ModifyHost : Specified profile %s is not initialized", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + + PrintMessage(MESG_ERROR, "\n ModifyHost : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; + + +} + +/** +* Removes the signon credentials for specified host +* +* @param profileName name of the profile +* @param hostName complete URL of the host name +* @param doUpdate signon data to be written to the file or not +* +* @return 1 on success +* <=0 on error +* +* Removes the specified host from the internal signon data store. All +* name-value pairs associated with specified host will also be removed. +* If the value of doUpdate is positive then the entire signon data is +* written to the file. Otherwise changes are done only in the internal data store. +* +* If doUpdate is positive then error code may be from FPM_WriteSignonData function. +* +*/ +extern "C" APIEXPORT int FPM_RemoveHost(char *profileName, char *hostName, int doUpdate) +{ + // Find the profile... + for(int i=0; i< profileCount; i++) + { + if( profileManager[i].profileName != NULL ) + { + if( STRCMPI(profileManager[i].profileName, profileName) == 0 ) + { + // check if its initialized + if( profileManager[i].isInitialized == FPM_TRUE ) + { + PrintMessage(MESG_DEBUG, "\n RemoveHost : invoking RemoveHost for profile %s", profileName); + return profileManager[i].RemoveHost(hostName, doUpdate); + } + else + { + PrintMessage(MESG_ERROR, "\n RemoveHost : Specified profile %s is not initialized", profileName); + return FPM_PROFILE_NOT_INITIALIZED; + } + } + } + } + + PrintMessage(MESG_ERROR, "\n RemoveHost : Specified profile %s is not found", profileName); + + return FPM_PROFILE_NOT_PRESENT; +} + + + + + + diff --git a/CASA/adlib/ad_ff/native/FirefoxPasswordManager.h b/CASA/adlib/ad_ff/native/FirefoxPasswordManager.h index 34eb281a..6e41b4a0 100644 --- a/CASA/adlib/ad_ff/native/FirefoxPasswordManager.h +++ b/CASA/adlib/ad_ff/native/FirefoxPasswordManager.h @@ -1,186 +1,193 @@ -/*********************************************************************** - * - * Copyright (C) 2005-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. - * - ***********************************************************************/ - - -#ifndef __FPM_Firefox_Password_MANAGER_H__ -#define __FPM_Firefox_Password_MANAGER_H__ - - - -#include -#include -#include -#include -#include - -#ifdef WIN32 - #include - #include - #pragma comment(lib,"userenv.lib") - - #define STRCMPI strcmpi - #define APIEXPORT __declspec(dllexport) - - #define NSS_LIBRARY_NAME "nss3.dll" - #define PLC_LIBRARY_NAME "plc4.dll" - #define NSPR_LIBRARY_NAME "nspr4.dll" - #define PLDS_LIBRARY_NAME "plds4.dll" - #define SOFTN_LIBRARY_NAME "softokn3.dll" - - #define LOADLIBRARY(x) LoadLibrary(x) - #define GETPROCADDRESS GetProcAddress - #define FREELIBRARY FreeLibrary - -#else - #include - #define STRCMPI strcasecmp - #define APIEXPORT - - #define NSS_LIBRARY_NAME "libnss3.so" - #define PLC_LIBRARY_NAME "libplc4.so" - #define NSPR_LIBRARY_NAME "libnspr4.so" - #define PLDS_LIBRARY_NAME "libplds4.so" - #define SOFTN_LIBRARY_NAME "libsoftokn3.so" - - #define LOADLIBRARY(x) dlopen(x, RTLD_LAZY) // alternative : RTLD_NOW - #define GETPROCADDRESS dlsym - #define FREELIBRARY dlclose - - #define HMODULE void * - -#endif - - - -#define FPM_TRUE 1 -#define FPM_FALSE 0 - -#define MESG_DEBUG 0 -#define MESG_PRINT 1 -#define MESG_ERROR 2 - -#define MAX_PROFILE_COUNT 5 - -//#define DEBUG 11 - -#define Unichar unsigned int - -#define HEADER_VERSION "#2c" -#define CRYPT_PREFIX "~" - -#define SIGNON_FILE_NAME "signons.txt" - -// Internal structure declaration taken from firefox..... -typedef enum SECItemType -{ - siBuffer = 0, - siClearDataBuffer = 1, - siCipherDataBuffer = 2, - siDERCertBuffer = 3, - siEncodedCertBuffer = 4, - siDERNameBuffer = 5, - siEncodedNameBuffer = 6, - siAsciiNameString = 7, - siAsciiString = 8, - siDEROID = 9, - siUnsignedInteger = 10, - siUTCTime = 11, - siGeneralizedTime = 12 -}; - -//typedef struct SECItemStr SECItem; - -struct SECItem -{ - SECItemType type; - unsigned char *data; - unsigned int len; -}; - - -typedef enum SECStatus -{ - SECWouldBlock = -2, - SECFailure = -1, - SECSuccess = 0 -}; - -// For some PR type varialbes...just to remove gecko-sdk dependency -// following is added here. -#define PRBool int -#define PRUint32 unsigned int -#define PR_TRUE 1 -#define PR_FALSE 0 - - - -// End - - - -typedef struct PK11SlotInfoStr PK11SlotInfo; - -// NSS Library functions -//typedef char *(PR_CALLBACK *PK11PasswordFunc)(PK11SlotInfo *slot, PRBool retry, void *arg); -typedef SECStatus (*NSS_Init) (const char *configdir); -typedef SECStatus (*NSS_Shutdown) (void); -//typedef void (*PK11_SetPasswordFunc) (PK11PasswordFunc func); -typedef PK11SlotInfo * (*PK11_GetInternalKeySlot) (void); -typedef void (*PK11_FreeSlot) (PK11SlotInfo *slot); -typedef SECStatus (*PK11_Authenticate) (PK11SlotInfo *slot, PRBool loadCerts, void *wincx); -typedef SECStatus (*PK11_CheckUserPassword) (PK11SlotInfo *slot,char *pw); -typedef SECStatus (*PK11SDR_Decrypt) (SECItem *data, SECItem *result, void *cx); -typedef SECStatus (*PK11SDR_Encrypt) (SECItem *keyid, SECItem *data, SECItem *result, void *cx); - -// PLC Library functions -typedef char * (*PL_Base64Encode)( const char *src, PRUint32 srclen, char *dest); -typedef char * (*PL_Base64Decode)( const char *src, PRUint32 srclen, char *dest); - -void PrintMessage( int level, char *mesg , ...); -int IsDirectoryExists( char *path ); -void StrLwr(char *str); - - - -// Profile initiliazation functions -extern "C" APIEXPORT int FPM_IsStoreAvailable(); -extern "C" APIEXPORT int FPM_GetProfileList(char **profileList[], int **profileFlag); -extern "C" APIEXPORT int FPM_FirefoxProfileInit(char *profileName); -extern "C" APIEXPORT int FPM_FirefoxProfileExit(char *profileName); - -// Master password functions -extern "C" APIEXPORT int FPM_IsMasterPasswordSet(char *profileName); -extern "C" APIEXPORT int FPM_CheckMasterPassword(char *profileName, char *masterPassword); - -// Signon data update functions -extern "C" APIEXPORT int FPM_GetSignonData(char *profileName,struct Host **host, int doRefresh); -extern "C" APIEXPORT int FPM_WriteSignonData(char *profileName); -extern "C" APIEXPORT int FPM_AddHost(char *profileName, struct Host *host, int doUpdate); -extern "C" APIEXPORT int FPM_ModifyHost(char *profileName, struct Host *host, int doUpdate); -extern "C" APIEXPORT int FPM_RemoveHost(char *profileName, char *hostname, int doUpdate); - - -#endif - - - - +/*********************************************************************** + * + * Copyright (C) 2005-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. + * + ***********************************************************************/ + + +#ifndef __FPM_Firefox_Password_MANAGER_H__ +#define __FPM_Firefox_Password_MANAGER_H__ + + + +#include +#include +#include +#include +#include +#include +#include + +#ifdef WIN32 + #include + #include + #include + #pragma comment(lib,"userenv.lib") + + #define STRCMPI strcmpi + #define APIEXPORT __declspec(dllexport) + + #define NSS_LIBRARY_NAME "nss3.dll" + #define PLC_LIBRARY_NAME "plc4.dll" + #define NSPR_LIBRARY_NAME "nspr4.dll" + #define PLDS_LIBRARY_NAME "plds4.dll" + #define SOFTN_LIBRARY_NAME "softokn3.dll" + + #define LOADLIBRARY(x) LoadLibrary(x) + #define GETPROCADDRESS GetProcAddress + #define FREELIBRARY FreeLibrary + +#else + #include + #define STRCMPI strcasecmp + #define APIEXPORT + + #define NSS_LIBRARY_NAME "libnss3.so" + #define PLC_LIBRARY_NAME "libplc4.so" + #define NSPR_LIBRARY_NAME "libnspr4.so" + #define PLDS_LIBRARY_NAME "libplds4.so" + #define SOFTN_LIBRARY_NAME "libsoftokn3.so" + + #define LOADLIBRARY(x) dlopen(x, RTLD_LAZY) // alternative : RTLD_NOW + #define GETPROCADDRESS dlsym + #define FREELIBRARY dlclose + + #define HMODULE void * + +#endif + + + +#define FPM_TRUE 1 +#define FPM_FALSE 0 + +#define MESG_DEBUG 0 +#define MESG_PRINT 1 +#define MESG_ERROR 2 + +#define MAX_PROFILE_COUNT 5 + +//#define DEBUG 11 + +#define Unichar unsigned int + +#define HEADER_VERSION "#2c" +#define CRYPT_PREFIX "~" + +#define SIGNON_FILE_NAME "signons.txt" + +// Internal structure declaration taken from firefox..... +typedef enum SECItemType +{ + siBuffer = 0, + siClearDataBuffer = 1, + siCipherDataBuffer = 2, + siDERCertBuffer = 3, + siEncodedCertBuffer = 4, + siDERNameBuffer = 5, + siEncodedNameBuffer = 6, + siAsciiNameString = 7, + siAsciiString = 8, + siDEROID = 9, + siUnsignedInteger = 10, + siUTCTime = 11, + siGeneralizedTime = 12 +}; + +//typedef struct SECItemStr SECItem; + +struct SECItem +{ + SECItemType type; + unsigned char *data; + unsigned int len; +}; + + +typedef enum SECStatus +{ + SECWouldBlock = -2, + SECFailure = -1, + SECSuccess = 0 +}; + +// For some PR type varialbes...just to remove gecko-sdk dependency +// following is added here. +#define PRBool int +#define PRUint32 unsigned int +#define PR_TRUE 1 +#define PR_FALSE 0 + + + +// End + + + +typedef struct PK11SlotInfoStr PK11SlotInfo; + +// NSS Library functions +//typedef char *(PR_CALLBACK *PK11PasswordFunc)(PK11SlotInfo *slot, PRBool retry, void *arg); +typedef SECStatus (*NSS_Init) (const char *configdir); +typedef SECStatus (*NSS_Shutdown) (void); +//typedef void (*PK11_SetPasswordFunc) (PK11PasswordFunc func); +typedef PK11SlotInfo * (*PK11_GetInternalKeySlot) (void); +typedef void (*PK11_FreeSlot) (PK11SlotInfo *slot); +typedef SECStatus (*PK11_Authenticate) (PK11SlotInfo *slot, PRBool loadCerts, void *wincx); +typedef SECStatus (*PK11_CheckUserPassword) (PK11SlotInfo *slot,char *pw); +typedef SECStatus (*PK11SDR_Decrypt) (SECItem *data, SECItem *result, void *cx); +typedef SECStatus (*PK11SDR_Encrypt) (SECItem *keyid, SECItem *data, SECItem *result, void *cx); +typedef PRBool (*PK11_NeedUserInit) (PK11SlotInfo *slot); +typedef SECStatus (*PK11_InitPin) (PK11SlotInfo *slot,char *ssopw, char *pk11_userpwd); +typedef SECStatus (*NSS_InitReadWrite) (const char *configdir); + +// PLC Library functions +typedef char * (*PL_Base64Encode)( const char *src, PRUint32 srclen, char *dest); +typedef char * (*PL_Base64Decode)( const char *src, PRUint32 srclen, char *dest); + +void PrintMessage( int level, char *mesg , ...); +int IsDirectoryExists( char *path ); +void StrLwr(char *str); +int CreateDirectory( char *path ); + + + +// Profile initiliazation functions +extern "C" APIEXPORT int FPM_IsStoreAvailable(); +extern "C" APIEXPORT int FPM_GetProfileList(char **profileList[], int **profileFlag); +extern "C" APIEXPORT int FPM_FirefoxProfileInit(char *profileName); +extern "C" APIEXPORT int FPM_FirefoxProfileExit(char *profileName); + +// Master password functions +extern "C" APIEXPORT int FPM_IsMasterPasswordSet(char *profileName); +extern "C" APIEXPORT int FPM_CheckMasterPassword(char *profileName, char *masterPassword); + +// Signon data update functions +extern "C" APIEXPORT int FPM_GetSignonData(char *profileName,struct Host **host, int doRefresh); +extern "C" APIEXPORT int FPM_WriteSignonData(char *profileName); +extern "C" APIEXPORT int FPM_AddHost(char *profileName, struct Host *host, int doUpdate); +extern "C" APIEXPORT int FPM_ModifyHost(char *profileName, struct Host *host, int doUpdate); +extern "C" APIEXPORT int FPM_RemoveHost(char *profileName, char *hostname, int doUpdate); + + +#endif + + + + diff --git a/CASA/adlib/ad_ff/native/ProfileManager.cpp b/CASA/adlib/ad_ff/native/ProfileManager.cpp index 940aac33..c47ef9d2 100644 --- a/CASA/adlib/ad_ff/native/ProfileManager.cpp +++ b/CASA/adlib/ad_ff/native/ProfileManager.cpp @@ -1,984 +1,1017 @@ -/*********************************************************************** - * - * Copyright (C) 2005-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. - * - ***********************************************************************/ - -#include "ProfileManager.h" - - - -// Private functions.... - -ProfileManager::ProfileManager() -{ - isInitialized = 0; - libnss = NULL; - libplc = NULL; - - profileName = NULL; - profilePath = NULL; - libraryPath = NULL; - masterPassword = NULL; - - -} - - -char * ProfileManager::GetFirefoxProfilePath(char *profileName) -{ - -#ifdef WIN32 - - char profileDir[MAX_PATH] = ""; - char partialPath[] = "Application Data\\Mozilla\\Firefox"; - char profilePath[MAX_PATH]; - char line[1024]; - - DWORD pathSize = MAX_PATH; - char *finalProfilePath = NULL; - unsigned int i; - HANDLE token; - - - // Get current user's profile directory - if( OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token) == FALSE ) - { - PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Failed to get current process token "); - return 0; - } - - if( GetUserProfileDirectory(token, profileDir, &pathSize) == FALSE ) - { - PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Failed to get user profile directory"); - return 0; - } - - PrintMessage(MESG_DEBUG, "\n GetFirefoxProfilePath : User Profile directory = %s", profileDir); - - // Get firefox profile directory - strcpy(profilePath, profileDir); - strcat(profilePath,"\\"); - strcat(profilePath,partialPath); - strcat(profilePath,"\\profiles.ini"); - - PrintMessage(MESG_DEBUG, "\n GetFirefoxProfilePath : Firefox profile.ini path = %s ", profilePath); - - -#else // Linux platform.... - - char profileDir[] ="/.mozilla/firefox"; - char profileFile[] ="/.mozilla/firefox/profiles.ini"; - - char line[1024]; - char *profilePath = NULL; - char *homeDir = NULL; - char *finalProfilePath = NULL; - unsigned int i; - - // Get home directory - homeDir = getenv("HOME"); - - if(homeDir == NULL ) - { - PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Unable to get home directory "); - return 0; - } - - profilePath = (char*) malloc( strlen(homeDir) + strlen(profileFile) + 3 ); - if( profilePath == NULL ) - { - PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Insufficient memory "); - return 0; - } - strcpy(profilePath,homeDir); - strcat(profilePath,profileFile); - - PrintMessage(MESG_DEBUG, "\n GetFirefoxProfilePath : Firefox profile dir path = %s ", profilePath); - -#endif - - // Open the firefox profile setting file - FILE *profile = fopen(profilePath, "r"); - - if( profile == NULL ) - { - PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Unable to find firefox profile file : %s ", profilePath); - return NULL; - } - - // Find out the profile path for given profile name - char *temp; - int isProfileFound = 0; - int isRelative = 1; - char *path = NULL; - - while(fgets(line, 1024, profile)) - { - // Remove trailing end of line character - line[strlen(line)-1]= 0; - - // Convert to smaller case until "=" found.... - for(i=0; iprofileName = (char*) malloc(strlen(profileName)+1); - if( !this->profileName ) - { - PrintMessage(MESG_ERROR, "\n ProfileInit : Insufficient memory.."); - return FPM_INSUFFICIENT_MEMORY; - } - - strcpy(this->profileName, profileName); - - - // TODO - // Read the preference from the config file present in the profile... - - isInitialized = FPM_TRUE; - - // Setup the function pointers... - void *funList[9]; - - funList[0] = (void*)NULL ; //PK11SetPasswordFunc; - funList[1] = (void*)PK11GetInternalKeySlot; - funList[2] = (void*)PK11FreeSlot; - funList[3] = (void*)PK11Authenticate; - funList[4] = (void*)PK11CheckUserPassword; - funList[5] = (void*)PK11SDRDecrypt; - funList[6] = (void*)PK11SDREncrypt; - funList[7] = (void*)PLBase64Encode; - funList[8] = (void*)PLBase64Decode; - - signonManager.SetupFunctions(funList); - - return FPM_TRUE; -} - - - -void ProfileManager::ProfileExit() -{ - int i; - - PrintMessage(MESG_DEBUG, "\n ProfileExit : Shutting down the profile %s", profileName); - - if( (isInitialized == FPM_TRUE) && NSSShutdown != NULL ) - { - 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 ) - { - PrintMessage(MESG_DEBUG, "\n ProfileExit : Freeing library libnss.dll"); - FREELIBRARY(libnss); - } - - if( libplc != NULL ) - { - PrintMessage(MESG_DEBUG, "\n ProfileExit : Freeing library libplc.dll"); - FREELIBRARY(libplc); - } - - // clean up signon data... - signonManager.RemoveSignonData(); - - isInitialized = FPM_FALSE; -} - - - - - - -int ProfileManager::IsMasterPasswordSet() -{ -PK11SlotInfo *slot = 0; -int retValue = 0; -SECStatus status; - - slot = (*PK11GetInternalKeySlot)(); - - if (!slot) - { - PrintMessage(MESG_ERROR, "\n IsMasterPasswordSet PK11_GetInternalKeySlot failed ..."); - return FPM_FALSE; - } - - PrintMessage(MESG_DEBUG, "\n PK11_GetInternalKeySlot SUCCESS ..."); - - // Check with empty password....If it succeeds then master password is not set - - status = (*PK11CheckUserPassword)(slot,""); - if( status == SECSuccess ) - { - PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is not set..."); - retValue = FPM_FALSE; - } - else if(status == SECWouldBlock ) // password is wrong - { - PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is set..."); - 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 - (*PK11FreeSlot) (slot); - - return retValue; -} - - - - - - -int ProfileManager::CheckMasterPassword(char *masterPassword, int doSave) -{ -PK11SlotInfo *slot = 0; -int retValue = 0; - - slot = (*PK11GetInternalKeySlot)(); - - if (!slot) - { - PrintMessage(MESG_ERROR, "\n CheckMasterPassword PK11_GetInternalKeySlot failed ..."); - return FPM_FALSE; - } - - - if( (*PK11CheckUserPassword)(slot, masterPassword) == SECSuccess ) - { - // Store the password for internal use... - if( doSave ) - { - PrintMessage(MESG_DEBUG, "\n CheckMasterPassword : saving master password for future use ******..."); - - this->masterPassword = (char *) malloc( strlen(masterPassword)+1 ); - - if( !this->masterPassword ) - { - PrintMessage(MESG_ERROR, "\n CheckMasterPassword : Insufficient memory"); - (*PK11FreeSlot) (slot); // Free the slot... - return FPM_INSUFFICIENT_MEMORY; - } - - strcpy(this->masterPassword, masterPassword); - } - - PrintMessage(MESG_DEBUG, "\n CheckMasterPassword : specified master password is correct..."); - retValue = FPM_TRUE; - } - else - { - PrintMessage(MESG_ERROR, "\n CheckMasterPassword : specified master password is wrong..."); - retValue = FPM_FALSE; - } - - // Free the slot - (*PK11FreeSlot) (slot); - - return retValue; -} - - - - - - -int ProfileManager::GetSignonData( struct Host **host, int doRefresh) -{ -int retValue; - - //TODO NAG: - //check if "remember password" enabled.... - - // Reload the signon data from the file... - if( doRefresh ) - { - retValue = RefreshSignonData(); - *host = signonManager.GetHostInfo(); - return retValue; - } - - // if host list is null read again.... - // TODO NAG : If there is no data , this will cause refresh to happen every time... - - if( signonManager.GetHostInfo() == NULL ) - { - retValue = RefreshSignonData(); - *host = signonManager.GetHostInfo(); - return retValue; - } - - // Just return the previously loaded data - *host = signonManager.GetHostInfo(); - - return FPM_TRUE; -} - - - - -int ProfileManager::RefreshSignonData() -{ - - // First check if master password is correct.... - if( masterPassword ) - { - // Just check for password , don't save.... - if( CheckMasterPassword(masterPassword, 0 ) != FPM_TRUE ) - { - PrintMessage(MESG_ERROR, "\n RefreshSignonData : master password is wrong..can't proceed with signon decryption" ); - return FPM_MASTERPASSWORD_WRONG; - } - } - else // check if master password is set... - { - // master password is set and its not specified - if( IsMasterPasswordSet() == FPM_TRUE ) - { - PrintMessage(MESG_ERROR, "\n RefreshSignonData : master password is set..but its not specified " ); - return FPM_MASTERPASSWORD_WRONG; - } - } - - - return signonManager.LoadSignonData(profilePath); -} - - - - - -int ProfileManager::WriteSignonData() -{ - // First check if master password is correct.... - if( masterPassword ) - { - // Just check for password , don't save.... - if( CheckMasterPassword(masterPassword, 0 ) != FPM_TRUE ) - { - PrintMessage(MESG_ERROR, "\n WriteSignonData : master password is wrong..can't proceed with signon decryption" ); - return FPM_MASTERPASSWORD_WRONG; - } - } - else // check if master password is set... - { - // master password is set and its not specified - if( IsMasterPasswordSet() == FPM_TRUE ) - { - PrintMessage(MESG_ERROR, "\n WriteSignonData : master password is set..but its not specified " ); - return FPM_MASTERPASSWORD_WRONG; - } - } - - - return signonManager.WriteSignonData(profilePath); - -} - - - - -int ProfileManager::AddHost(struct Host *host, int doUpdate) -{ -int retValue; - - if( (retValue = signonManager.AddHost(host)) != FPM_TRUE) - { - PrintMessage(MESG_ERROR, "\n AddHost : Failed to add the host %s ", host->hostName); - return retValue; - } - - if( doUpdate > 0 ) - { - PrintMessage(MESG_ERROR, "\n AddHost : Updating the signon file "); - return WriteSignonData(); - } - - return FPM_TRUE; -} - - - - -int ProfileManager::ModifyHost(struct Host *host, int doUpdate) -{ -int retValue; - - if( (retValue = signonManager.ModifyHost(host)) != FPM_TRUE) - { - PrintMessage(MESG_ERROR, "\n ModifyHost : Failed to modify the host %s ", host->hostName); - return retValue; - } - - - if( doUpdate > 0) - { - PrintMessage(MESG_ERROR, "\n ModifyHost : Updating the signon file "); - return WriteSignonData(); - } - - return FPM_TRUE; - - - -} - - - -int ProfileManager::RemoveHost(char *hostName, int doUpdate) -{ -int retValue; - - if( (retValue = signonManager.RemoveHost(hostName)) != FPM_TRUE) - { - PrintMessage(MESG_ERROR, "\n RemoveHost : Failed to remove the hsot %s ", hostName); - return retValue; - } - - if( doUpdate > 0 ) - { - PrintMessage(MESG_ERROR, "\n RemoveHost : Updating the signon file "); - return WriteSignonData(); - } - - return FPM_TRUE; -} +/*********************************************************************** + * + * Copyright (C) 2005-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. + * + ***********************************************************************/ + +#include "ProfileManager.h" + + + +// Private functions.... + +ProfileManager::ProfileManager() +{ + isInitialized = 0; + libnss = NULL; + libplc = NULL; + + profileName = NULL; + profilePath = NULL; + libraryPath = NULL; + masterPassword = NULL; + + +} + + +char * ProfileManager::GetFirefoxProfilePath(char *profileName) +{ + +#ifdef WIN32 + + char profileDir[MAX_PATH] = ""; + char partialPath[] = "Application Data\\Mozilla\\Firefox"; + char profilePath[MAX_PATH]; + char line[1024]; + + DWORD pathSize = MAX_PATH; + char *finalProfilePath = NULL; + unsigned int i; + HANDLE token; + + + // Get current user's profile directory + if( OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token) == FALSE ) + { + PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Failed to get current process token "); + return 0; + } + + if( GetUserProfileDirectory(token, profileDir, &pathSize) == FALSE ) + { + PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Failed to get user profile directory"); + return 0; + } + + PrintMessage(MESG_DEBUG, "\n GetFirefoxProfilePath : User Profile directory = %s", profileDir); + + // Get firefox profile directory + strcpy(profilePath, profileDir); + strcat(profilePath,"\\"); + strcat(profilePath,partialPath); + strcat(profilePath,"\\profiles.ini"); + + PrintMessage(MESG_DEBUG, "\n GetFirefoxProfilePath : Firefox profile.ini path = %s ", profilePath); + + +#else // Linux platform.... + + char profileDir[] ="/.mozilla/firefox"; + char profileFile[] ="/.mozilla/firefox/profiles.ini"; + + char line[1024]; + char *profilePath = NULL; + char *homeDir = NULL; + char *finalProfilePath = NULL; + unsigned int i; + + // Get home directory + homeDir = getenv("HOME"); + + if(homeDir == NULL ) + { + PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Unable to get home directory "); + return 0; + } + + profilePath = (char*) malloc( strlen(homeDir) + strlen(profileFile) + 3 ); + if( profilePath == NULL ) + { + PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Insufficient memory "); + return 0; + } + strcpy(profilePath,homeDir); + strcat(profilePath,profileFile); + + PrintMessage(MESG_DEBUG, "\n GetFirefoxProfilePath : Firefox profile dir path = %s ", profilePath); + +#endif + + // Open the firefox profile setting file + FILE *profile = fopen(profilePath, "r"); + + if( profile == NULL ) + { + PrintMessage(MESG_ERROR, "\n GetFirefoxProfilePath : Unable to find firefox profile file : %s ", profilePath); + return NULL; + } + + // Find out the profile path for given profile name + char *temp; + int isProfileFound = 0; + int isRelative = 1; + char *path = NULL; + + while(fgets(line, 1024, profile)) + { + // Remove trailing end of line character + line[strlen(line)-1]= 0; + + // Convert to smaller case until "=" found.... + for(i=0; iprofileName = (char*) malloc(strlen(profileName)+1); + if( !this->profileName ) + { + PrintMessage(MESG_ERROR, "\n ProfileInit : Insufficient memory.."); + return FPM_INSUFFICIENT_MEMORY; + } + + strcpy(this->profileName, profileName); + + + // TODO + // Read the preference from the config file present in the profile... + + isInitialized = FPM_TRUE; + + // Setup the function pointers... + void *funList[11]; + + funList[0] = (void*)NULL ; //PK11SetPasswordFunc; + funList[1] = (void*)PK11GetInternalKeySlot; + funList[2] = (void*)PK11FreeSlot; + funList[3] = (void*)PK11Authenticate; + funList[4] = (void*)PK11CheckUserPassword; + funList[5] = (void*)PK11SDRDecrypt; + funList[6] = (void*)PK11SDREncrypt; + funList[7] = (void*)PLBase64Encode; + funList[8] = (void*)PLBase64Decode; + funList[9] = (void*)PK11NeedUserInit; + funList[10] = (void*)PK11InitPin; + + signonManager.SetupFunctions(funList); + + return FPM_TRUE; +} + + + +void ProfileManager::ProfileExit() +{ + int i; + + PrintMessage(MESG_DEBUG, "\n ProfileExit : Shutting down the profile %s", profileName); + + if( (isInitialized == FPM_TRUE) && NSSShutdown != NULL ) + { + 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 ) + { + PrintMessage(MESG_DEBUG, "\n ProfileExit : Freeing library libnss.dll"); + FREELIBRARY(libnss); + } + + if( libplc != NULL ) + { + PrintMessage(MESG_DEBUG, "\n ProfileExit : Freeing library libplc.dll"); + FREELIBRARY(libplc); + } + + // clean up signon data... + signonManager.RemoveSignonData(); + + isInitialized = FPM_FALSE; +} + + + + + + +int ProfileManager::IsMasterPasswordSet() +{ +PK11SlotInfo *slot = 0; +int retValue = 0; +SECStatus status; + + slot = (*PK11GetInternalKeySlot)(); + + if (!slot) + { + PrintMessage(MESG_ERROR, "\n IsMasterPasswordSet PK11_GetInternalKeySlot failed ..."); + return FPM_FALSE; + } + + PrintMessage(MESG_DEBUG, "\n PK11_GetInternalKeySlot SUCCESS ..."); + + // Check with empty password....If it succeeds then master password is not set + + status = (*PK11CheckUserPassword)(slot,""); + if( status == SECSuccess ) + { + PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is not set..."); + retValue = FPM_FALSE; + } + else if(status == SECWouldBlock ) // password is wrong + { + PrintMessage(MESG_DEBUG, "\n IsMasterPasswordSet : Master password is set..."); + 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 + (*PK11FreeSlot) (slot); + + return retValue; +} + + + + + + +int ProfileManager::CheckMasterPassword(char *masterPassword, int doSave) +{ +PK11SlotInfo *slot = 0; +int retValue = 0; + + slot = (*PK11GetInternalKeySlot)(); + + if (!slot) + { + PrintMessage(MESG_ERROR, "\n CheckMasterPassword PK11_GetInternalKeySlot failed ..."); + return FPM_FALSE; + } + + + if( (*PK11CheckUserPassword)(slot, masterPassword) == SECSuccess ) + { + // Store the password for internal use... + if( doSave ) + { + PrintMessage(MESG_DEBUG, "\n CheckMasterPassword : saving master password for future use ******..."); + + this->masterPassword = (char *) malloc( strlen(masterPassword)+1 ); + + if( !this->masterPassword ) + { + PrintMessage(MESG_ERROR, "\n CheckMasterPassword : Insufficient memory"); + (*PK11FreeSlot) (slot); // Free the slot... + return FPM_INSUFFICIENT_MEMORY; + } + + strcpy(this->masterPassword, masterPassword); + } + + PrintMessage(MESG_DEBUG, "\n CheckMasterPassword : specified master password is correct..."); + retValue = FPM_TRUE; + } + else + { + PrintMessage(MESG_ERROR, "\n CheckMasterPassword : specified master password is wrong..."); + retValue = FPM_FALSE; + } + + // Free the slot + (*PK11FreeSlot) (slot); + + return retValue; +} + + + + + + +int ProfileManager::GetSignonData( struct Host **host, int doRefresh) +{ +int retValue; + + //TODO NAG: + //check if "remember password" enabled.... + + // Reload the signon data from the file... + if( doRefresh ) + { + retValue = RefreshSignonData(); + *host = signonManager.GetHostInfo(); + return retValue; + } + + // if host list is null read again.... + // TODO NAG : If there is no data , this will cause refresh to happen every time... + + if( signonManager.GetHostInfo() == NULL ) + { + retValue = RefreshSignonData(); + *host = signonManager.GetHostInfo(); + return retValue; + } + + // Just return the previously loaded data + *host = signonManager.GetHostInfo(); + + return FPM_TRUE; +} + + + + +int ProfileManager::RefreshSignonData() +{ + + // First check if master password is correct.... + if( masterPassword ) + { + // Just check for password , don't save.... + if( CheckMasterPassword(masterPassword, 0 ) != FPM_TRUE ) + { + PrintMessage(MESG_ERROR, "\n RefreshSignonData : master password is wrong..can't proceed with signon decryption" ); + return FPM_MASTERPASSWORD_WRONG; + } + } + else // check if master password is set... + { + // master password is set and its not specified + if( IsMasterPasswordSet() == FPM_TRUE ) + { + PrintMessage(MESG_ERROR, "\n RefreshSignonData : master password is set..but its not specified " ); + return FPM_MASTERPASSWORD_WRONG; + } + } + + + return signonManager.LoadSignonData(profilePath); +} + + + + + +int ProfileManager::WriteSignonData() +{ + // First check if master password is correct.... + if( masterPassword ) + { + // Just check for password , don't save.... + if( CheckMasterPassword(masterPassword, 0 ) != FPM_TRUE ) + { + PrintMessage(MESG_ERROR, "\n WriteSignonData : master password is wrong..can't proceed with signon decryption" ); + return FPM_MASTERPASSWORD_WRONG; + } + } + else // check if master password is set... + { + // master password is set and its not specified + if( IsMasterPasswordSet() == FPM_TRUE ) + { + PrintMessage(MESG_ERROR, "\n WriteSignonData : master password is set..but its not specified " ); + return FPM_MASTERPASSWORD_WRONG; + } + } + + + return signonManager.WriteSignonData(profilePath); + +} + + + + +int ProfileManager::AddHost(struct Host *host, int doUpdate) +{ +int retValue; + + if( (retValue = signonManager.AddHost(host)) != FPM_TRUE) + { + PrintMessage(MESG_ERROR, "\n AddHost : Failed to add the host %s ", host->hostName); + return retValue; + } + + if( doUpdate > 0 ) + { + PrintMessage(MESG_ERROR, "\n AddHost : Updating the signon file "); + return WriteSignonData(); + } + + return FPM_TRUE; +} + + + + +int ProfileManager::ModifyHost(struct Host *host, int doUpdate) +{ +int retValue; + + if( (retValue = signonManager.ModifyHost(host)) != FPM_TRUE) + { + PrintMessage(MESG_ERROR, "\n ModifyHost : Failed to modify the host %s ", host->hostName); + return retValue; + } + + + if( doUpdate > 0) + { + PrintMessage(MESG_ERROR, "\n ModifyHost : Updating the signon file "); + return WriteSignonData(); + } + + return FPM_TRUE; + + + +} + + + +int ProfileManager::RemoveHost(char *hostName, int doUpdate) +{ +int retValue; + + if( (retValue = signonManager.RemoveHost(hostName)) != FPM_TRUE) + { + PrintMessage(MESG_ERROR, "\n RemoveHost : Failed to remove the hsot %s ", hostName); + return retValue; + } + + if( doUpdate > 0 ) + { + PrintMessage(MESG_ERROR, "\n RemoveHost : Updating the signon file "); + return WriteSignonData(); + } + + return FPM_TRUE; +} diff --git a/CASA/adlib/ad_ff/native/ProfileManager.h b/CASA/adlib/ad_ff/native/ProfileManager.h index 56c02356..a8e875a0 100644 --- a/CASA/adlib/ad_ff/native/ProfileManager.h +++ b/CASA/adlib/ad_ff/native/ProfileManager.h @@ -1,93 +1,96 @@ -/*********************************************************************** - * - * Copyright (C) 2005-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. - * - ***********************************************************************/ - - -#ifndef __FPM_PROFILE_MANAGER_H__ -#define __FPM_PROFILE_MANAGER_H__ - -#include "FirefoxPasswordManager.h" -#include "Common.h" -#include "SignonManager.h" - - -class ProfileManager -{ - SignonManager signonManager; - - char *profilePath; - char *libraryPath; - char *masterPassword; - - HMODULE libnss; - HMODULE libplc; - - // NSS Library function pointers - NSS_Init NSSInit; - NSS_Shutdown NSSShutdown; - //PK11_SetPasswordFunc PK11SetPasswordFunc; - PK11_GetInternalKeySlot PK11GetInternalKeySlot; - PK11_FreeSlot PK11FreeSlot; - PK11_Authenticate PK11Authenticate; - PK11_CheckUserPassword PK11CheckUserPassword; - PK11SDR_Decrypt PK11SDRDecrypt; - PK11SDR_Encrypt PK11SDREncrypt; - - PL_Base64Encode PLBase64Encode; - PL_Base64Decode PLBase64Decode; - -public : - - char *profileName; - int isInitialized; - -private : - - char *GetFirefoxProfilePath(char *profileName); - char *GetFirefoxLibPath(); - HMODULE PMLoadLibrary(char *firefoxDir, char *libName); - int RefreshSignonData(); - - - -public: - - ProfileManager(); - - int IsStoreAvailable(); - int ProfileInit(char *profileName); - void ProfileExit(); - - int IsMasterPasswordSet(); - int CheckMasterPassword(char *masterPassword, int doSave); - - int GetSignonData( struct Host **host, int doRefresh); - int WriteSignonData(); - - int AddHost(struct Host *host, int doUpdate); - int ModifyHost(struct Host *host, int doUpdat); - int RemoveHost(char *hostname, int doUpdate); - -}; - - -#endif - +/*********************************************************************** + * + * Copyright (C) 2005-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. + * + ***********************************************************************/ + + +#ifndef __FPM_PROFILE_MANAGER_H__ +#define __FPM_PROFILE_MANAGER_H__ + +#include "FirefoxPasswordManager.h" +#include "Common.h" +#include "SignonManager.h" + + +class ProfileManager +{ + SignonManager signonManager; + + char *profilePath; + char *libraryPath; + char *masterPassword; + + HMODULE libnss; + HMODULE libplc; + + // NSS Library function pointers + NSS_Init NSSInit; + NSS_Shutdown NSSShutdown; + //PK11_SetPasswordFunc PK11SetPasswordFunc; + PK11_GetInternalKeySlot PK11GetInternalKeySlot; + PK11_FreeSlot PK11FreeSlot; + PK11_Authenticate PK11Authenticate; + PK11_CheckUserPassword PK11CheckUserPassword; + PK11SDR_Decrypt PK11SDRDecrypt; + PK11SDR_Encrypt PK11SDREncrypt; + PK11_NeedUserInit PK11NeedUserInit; + PK11_InitPin PK11InitPin; + NSS_InitReadWrite NSSInitReadWrite; + + PL_Base64Encode PLBase64Encode; + PL_Base64Decode PLBase64Decode; + +public : + + char *profileName; + int isInitialized; + +private : + + char *GetFirefoxProfilePath(char *profileName); + char *GetFirefoxLibPath(); + HMODULE PMLoadLibrary(char *firefoxDir, char *libName); + int RefreshSignonData(); + + + +public: + + ProfileManager(); + + int IsStoreAvailable(); + int ProfileInit(char *profileName); + void ProfileExit(); + + int IsMasterPasswordSet(); + int CheckMasterPassword(char *masterPassword, int doSave); + + int GetSignonData( struct Host **host, int doRefresh); + int WriteSignonData(); + + int AddHost(struct Host *host, int doUpdate); + int ModifyHost(struct Host *host, int doUpdat); + int RemoveHost(char *hostname, int doUpdate); + +}; + + +#endif + diff --git a/CASA/adlib/ad_ff/native/SignonManager.cpp b/CASA/adlib/ad_ff/native/SignonManager.cpp index 5cb29bc3..83f0e24d 100644 --- a/CASA/adlib/ad_ff/native/SignonManager.cpp +++ b/CASA/adlib/ad_ff/native/SignonManager.cpp @@ -78,9 +78,25 @@ char *signonFilePath = NULL; if( signonFile == NULL ) { - PrintMessage(MESG_ERROR, "\n SignonManager : Error opening signon file %s", signonFilePath); - free(signonFilePath); - return FPM_SIGNON_FILE_NOT_PRESENT; + PrintMessage(MESG_DEBUG, "\n SignonManager : Error opening signon file %s", signonFilePath); + PrintMessage(MESG_DEBUG, "\n SignonManager : Creating new signon file %s", signonFilePath); + + if((signonFile = fopen(signonFilePath, "a")) == NULL) + { + PrintMessage(MESG_ERROR, "\n SignonManager : Error creating signon file %s", signonFilePath); + free(signonFilePath); + return FPM_SIGNON_FILE_NOT_PRESENT; + } + if( WriteLine(HEADER_VERSION) != FPM_TRUE) + { + PrintMessage(MESG_ERROR, "\n SignonManager : Error writing header to new signon file %s", signonFilePath); + free(signonFilePath); + fclose(signonFile); + return FPM_SIGNON_FILE_NOT_PRESENT; + } + + fclose(signonFile); + signonFile = fopen(signonFilePath, accessType); } // cleanup @@ -238,7 +254,7 @@ int SignonManager::WriteCharUTF8(Unichar c) int SignonManager::WriteLine(char *line) { - for(int i=0; i < strlen(line); i++) + for(unsigned int i=0; i < strlen(line); i++) { if( WriteCharUTF8(line[i]) != FPM_TRUE ) return FPM_SIGNON_FILE_WRITE_ERROR; @@ -269,6 +285,7 @@ char name[1024]; int bufferLength = 4095; int retValue; char *clearData = NULL; +char *newHostName, *uname; int count = 0; @@ -349,6 +366,7 @@ int count = 0; PrintMessage(MESG_DEBUG, "\n\n Host : %s ", hostName); // prepare to read the name/value pairs + count = 0; while( ReadLine(buffer, bufferLength) == FPM_TRUE ) { // line starting with . terminates the pairs for this URL entry @@ -370,7 +388,8 @@ int count = 0; isPassword = 0; strcpy(name, buffer); retValue = ReadLine(buffer, bufferLength); - } + } + count++; PrintMessage(MESG_DEBUG, "\n\n name = %s and value = %s ", name, buffer); @@ -390,8 +409,28 @@ int count = 0; if( ((retValue = cryptManager.DecryptString(buffer, &clearData)) == FPM_TRUE) && (clearData != NULL) ) { // Add the name/value pair to the existing store.... - retValue = dataManager.AddHostElement(hostName, name, clearData, isPassword); + if (count == 1) + { + uname = (char *) malloc(strlen(clearData)*sizeof(char)); + strcpy(uname, clearData); + } + if (count>2) + { + if(count%2==1) + { + newHostName = (char *)malloc((strlen(hostName)+strlen(clearData)+4)*sizeof(char)); + strcpy(newHostName,hostName); + strncat(newHostName, " (", 2); + strncat(newHostName,clearData, strlen(clearData)); + strncat(newHostName, ")", 1); + dataManager.AddHost(newHostName); + } + retValue = dataManager.AddHostElement(newHostName, name, clearData, isPassword); + } + else + retValue = dataManager.AddHostElement(hostName, name, clearData, isPassword); + if( retValue != FPM_TRUE ) { CloseSignonFile(); @@ -409,13 +448,20 @@ int count = 0; } } - + if (count >2) + { + newHostName = (char *)malloc((strlen(hostName)+strlen(uname)+4)*sizeof(char)); + strcpy(newHostName,hostName); + strncat(newHostName, " (", 2); + strncat(newHostName, uname, strlen(uname)); + strncat(newHostName, ")", 1); + dataManager.ModifyHost(hostName, newHostName); + } } // Now close the signon file CloseSignonFile(); - // Print data for cross checking #ifdef DEBUG dataManager.PrintAllRejectHosts(); @@ -434,9 +480,11 @@ char *signonFilePath = NULL; char *tempFilePath = NULL; char fileName[256]; -Host *t; -HostElement *h; +Host *writeList, *newHost; +HostElement *h, *temp; RejectHost *r; +char *hn2; +int len; // TODO : If signon data has not changed since last write then return... /* // There may be requirement to write empty data... @@ -499,9 +547,55 @@ RejectHost *r; * if type is password, name is preceded by an asterisk (*) */ + //copy list + writeList = NULL; + temp = NULL; + newHost = NULL; + for(Host *host=dataManager.hostList;host;host=host->next) + { + if(writeList == NULL) + { + writeList = dataManager.DuplicateHost(host); + newHost = writeList; + newHost->next = NULL; + } + else + { + newHost->next = dataManager.DuplicateHost(host); + newHost = newHost->next; + newHost->next = NULL; + } + } + + // create list to write + hn2 = (char *) malloc(sizeof(char)*100); + Host *t1; + Host *pre; + for(Host *t=writeList; t; t=t->next) + { + if((hn2=strstr(t->hostName," ("))!=NULL) + { + len = strlen(t->hostName); + t->hostName[len-strlen(hn2)]='\0'; + pre = t; + for(t1=t->next; t1; t1=t1->next) + { + if(strncmp(t->hostName, t1->hostName, strlen(t->hostName))==0) + { + for(temp=t->child; temp->next!=NULL; temp=temp->next); + + temp->next = t1->child; + pre->next = t1->next; + t1 = pre; + } + pre=t1; + } + } + + } // write out each URL node - for(t=dataManager.hostList; t ; t=t->next) + for(Host *t=writeList; t ; t=t->next) { PrintMessage(MESG_DEBUG, "\n\nWriteSignonData : Adding name/value pairs for host %s", t->hostName); diff --git a/CASA/gui/CasaMain.cs b/CASA/gui/CasaMain.cs index 3a814dd8..8aa41fa7 100644 --- a/CASA/gui/CasaMain.cs +++ b/CASA/gui/CasaMain.cs @@ -916,11 +916,12 @@ namespace Novell.CASA.GUI case Common.STORE_FIREFOX: if( 0 != objFirefox.tvSecretIDFirefox.Selection.CountSelectedRows() ) { - mmiNew.Sensitive = mmiNewKey.Sensitive = false; + mmiNew.Sensitive = true; + mmiNewKey.Sensitive = true; } else { - mmiNew.Sensitive = mmiNewKey.Sensitive = false; + mmiNewKey.Sensitive = false; } break; @@ -1194,6 +1195,7 @@ namespace Novell.CASA.GUI break; case Common.STORE_FIREFOX: + objFirefox.OnNewSecretActivated(obj, args); break; case Common.STORE_MOZILLA: @@ -1232,6 +1234,7 @@ namespace Novell.CASA.GUI break; case Common.STORE_FIREFOX: + objFirefox.OnNewKeyActivated(obj, args); break; case Common.STORE_MOZILLA: @@ -2305,7 +2308,7 @@ namespace Novell.CASA.GUI { DbgFileChooser dbf = new DbgFileChooser(); dbf.Run(); - } + } } } diff --git a/CASA/gui/Common.cs b/CASA/gui/Common.cs index 5b8aab06..b9139966 100644 --- a/CASA/gui/Common.cs +++ b/CASA/gui/Common.cs @@ -100,7 +100,8 @@ public class Common OPERATION_ADD_KEY = 1, OPERATION_MODIFY_KEY = 2, OPERATION_DELETE_SECRET = 3, - OPERATION_DELETE_KEY = 4; + OPERATION_DELETE_KEY = 4, + OPERATION_MODIFY_SECRET = 5; //Limits public static int MAX_ARRAY_ELEMENTS = 10; diff --git a/CASA/gui/Firefox.cs b/CASA/gui/Firefox.cs index 3a884fcf..e244c955 100644 --- a/CASA/gui/Firefox.cs +++ b/CASA/gui/Firefox.cs @@ -38,12 +38,18 @@ public class Firefox : Store tsKeyValue; CellRendererText cellEditable; - + CellRendererToggle cellToggle; + + ArrayList arrDeletedKeys = null; + bool isPasswordToggled; + public bool IS_STORE_AGGREGATED = false; private int m_iRememberSeconds = 5; private String m_sRememberFor = "5"; - private Config m_config = null; + private Config m_config = null; + static Char[] SpecialCharacters = new Char[]{ '*', '\'', '\\', '&', '=', '<', '>' }; + #region Glade Widgets [Glade.Widget] @@ -60,6 +66,7 @@ public class Firefox : Store dialogManageSecret, dialogLogin, dialogConfirmDelete, + dialogInvalidSecret, dialogSpecialCharacter; [Glade.Widget] @@ -112,7 +119,7 @@ public class Firefox : Store m_config = config; /// SecretID TreeStore tvSecretIDFirefox = (Gtk.TreeView)CasaMain.gxmlMain.GetWidget("tvSecretIDFirefox"); - tsSecretIDFirefox = new TreeStore(typeof(string), typeof(string[]), typeof(string[]), typeof(string), typeof(string[]), typeof(string[])); + tsSecretIDFirefox = new TreeStore(typeof(string), typeof(string[]), typeof(string[]), typeof(string), typeof(string[]), typeof(string[]), typeof(bool[])); tvSecretIDFirefox.AppendColumn("Secret ID",new CellRendererText(),"text",0); tvSecretIDFirefox.Model = tsSecretIDFirefox; tvSecretIDFirefox.RowActivated += new RowActivatedHandler(OntvSecretIDFirefoxRowActivated); @@ -213,9 +220,15 @@ public class Firefox : Store menuRightClick.Popup(null, null, null, IntPtr.Zero, 3, Gtk.Global.CurrentEventTime); if( 0 != tvSecretIDFirefox.Selection.CountSelectedRows() ) - cmiNewSecret.Sensitive = cmiNewKey.Sensitive = cmiLink.Sensitive = cmiCopy.Sensitive = false; - else - cmiNewSecret.Sensitive = cmiNewKey.Sensitive = cmiDelete.Sensitive = cmiLink.Sensitive = cmiCopy.Sensitive = cmiView.Sensitive = false; + { + cmiNewSecret.Sensitive = cmiNewKey.Sensitive = true; + cmiLink.Sensitive = cmiCopy.Sensitive = false; + } + else + { + cmiNewSecret.Sensitive = true; + cmiNewKey.Sensitive = cmiDelete.Sensitive = cmiLink.Sensitive = cmiCopy.Sensitive = cmiView.Sensitive = false; + } } catch(Exception exp) { @@ -240,14 +253,22 @@ public class Firefox : Store string selected= null; string[] keys = null, values = null; + bool[] ispassword = null; + isPasswordToggled = false; try { + if( null == arrDeletedKeys ) + arrDeletedKeys = new ArrayList(); + else + arrDeletedKeys.Clear(); + if( tvSecretIDFirefox.Selection.GetSelected (out model, out iter) ) { selected = (string) model.GetValue(iter, 0); keys = (string[]) model.GetValue(iter, 1); values = (string[]) model.GetValue(iter, 2); + ispassword = (bool[]) model.GetValue(iter, 6); Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogManageSecret", null); gxmlTemp.Autoconnect (this); @@ -256,24 +277,27 @@ public class Firefox : Store cellEditable = new CellRendererText(); cellEditable.Editable = true; - cellEditable.Edited += new EditedHandler(OnKeyValueEdited); - //cellEditable.Edited += new EditedHandler(OnKeyValueEdited); - /// KEY:0 VALUE:1 VALUE-DUP:2 DIRTY-BIT:3 LINK:4 - tsKeyValue = new TreeStore(typeof(string),typeof(string), typeof(string), typeof(bool), typeof(string)); + cellEditable.Edited += new EditedHandler(OnKeyValueEdited); + + cellToggle = new CellRendererToggle(); + cellToggle.Activatable = true; + cellToggle.Toggled += OnIsPasswordToggled; + + /// KEY:0 VALUE:1 VALUE-DUP:2 DIRTY-BIT:3 LINK:4 ISPASSWORD:5 + tsKeyValue = new TreeStore(typeof(string),typeof(string), typeof(string), typeof(bool), typeof(string),typeof(bool)); tvKeyValue.AppendColumn("Key",new CellRendererText(),"text",0); tvKeyValue.AppendColumn("Value",cellEditable,"text",2); + tvKeyValue.AppendColumn("Password", cellToggle, "active", 5); tvKeyValue.AppendColumn("Linked", new CellRendererText(), "text", 4); - + entrySecretID.MaxLength=1028; entrySecretID.Text=selected; - + for( int i=0; i< keys.Length; i++ ) { if( (null != keys[i]) && (null != values[i]) ) - tsKeyValue.AppendValues(keys[i], values[i], "********", false, "No"); + tsKeyValue.AppendValues(keys[i], values[i], "********", false, "No", ispassword[i]); } tvKeyValue.Model = tsKeyValue; - //entryKey.HasFocus = true; - entryKey.Sensitive = entryValue.Sensitive = buttonNewAdd.Sensitive = buttonNewRemove.Sensitive = false; } } catch(Exception exp) @@ -284,6 +308,46 @@ public class Firefox : Store Logger.DbgLog("GUI:Firefox.ViewKeyValues() - END"); } + /// + /// TOGGLE ISPASSWORD + /// + public void OnIsPasswordToggled(object obj, ToggledArgs args) + { + Logger.DbgLog("GUI:Firefox.OnIsPasswordToggled() - BEGIN"); + + TreeIter iter; + bool old; + string keyID; + + try + { + if (tsKeyValue.GetIter (out iter, new TreePath(args.Path))) + { + isPasswordToggled = true; + old = (bool)tsKeyValue.GetValue(iter,5); + keyID = tsKeyValue.GetValue(iter,0).ToString(); + tsKeyValue.SetValue(iter, 5, !old); + if (tsKeyValue.IterNChildren()==2) + { + tsKeyValue.GetIterFirst(out iter); + do + { + if(!(tsKeyValue.GetValue(iter,0).ToString().Equals(keyID))) + tsKeyValue.SetValue(iter, 5, old); + }while (tsKeyValue.IterNext(ref iter)); + } + + } + } + catch(Exception exp) + { + Logger.DbgLog("GUI:Firefox.OnIsPasswordToggled() - EXCEPTION:" + exp.ToString()); + } + + Logger.DbgLog("GUI:Firefox.OnIsPasswordToggled() - END"); + + } + /// /// EDIT KEY-VALUE /// @@ -296,6 +360,7 @@ public class Firefox : Store object val; string KeyName = null, KeyValue = null; + bool KeyIsPassword; string[] Keys = null, Values = null; @@ -309,6 +374,7 @@ public class Firefox : Store else val = tsKeyValue.GetValue(iter,2); KeyValue = val.ToString(); + KeyIsPassword = (bool)tsKeyValue.GetValue(iter,5); tvSecretIDFirefox.Selection.GetSelected (out model, out iter); @@ -316,6 +382,21 @@ public class Firefox : Store { if( ("" != args.NewText) && (Common.MAX_LEN >= args.NewText.Length) && (KeyValue != args.NewText) ) { + //check for duplicate secret name + if (KeyIsPassword == false && entrySecretID.Text.EndsWith(")") == true) + { + string sname = entrySecretID.Text; + sname = sname.Remove ((sname.LastIndexOf(" (") + 2),sname.Length - (sname.LastIndexOf(" (") +2)); + sname = String.Concat ( sname, args.NewText, ")"); + if (sname != entrySecretID.Text && checkDuplicateSecretName(sname, null, ref tsSecretIDFirefox, 1)) + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogInvalidSecret", null); + gxmlTemp.Autoconnect (this); + dialogInvalidSecret.Show(); + + return; + } + } if( Common.STATUS_SUCCESS == StoreDataInterface.UpdateStore(Common.STORE_FIREFOX, Common.OPERATION_MODIFY_KEY, KeyName, args.NewText, ref model, ref iter) ) { Logger.DbgLog("GUI:Firefox.OnKeyValueEdited() - StoreDataInterface.UpdateStore() succeeded"); @@ -362,25 +443,282 @@ public class Firefox : Store /// public void on_buttonNewAdd_clicked(object obj, EventArgs args) { + Logger.DbgLog("GUI:Firefox.on_buttonNewAdd_clicked() - BEGIN"); + + if( ("" != entryKey.Text) && ("" != entryValue.Text) ) + { + TreeIter iterKey; + ArrayList arrKeys = null, + arrValues = null, + arrIsPassword = null; + object val = null; + arrKeys = new ArrayList(); + arrValues = new ArrayList(); + arrIsPassword = new ArrayList(); + bool ispass = false; + + if (tvKeyValue.Model.IterNChildren() == 2) + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogInvalidSecret", null); + gxmlTemp.Autoconnect (this); + dialogInvalidSecret.Show(); + return; + } + + if(tsKeyValue.GetIterFirst(out iterKey)) + { + do + { + val = tsKeyValue.GetValue(iterKey,0); + arrKeys.Add(val.ToString()); + val = tsKeyValue.GetValue(iterKey,1); + arrValues.Add(val.ToString()); + ispass = (bool)tsKeyValue.GetValue(iterKey,5); + if (ispass) + { + ispass = false; + arrIsPassword.Add(true); + } + else + { + ispass = true; + arrIsPassword.Add(false); + } + } + while( tsKeyValue.IterNext(ref iterKey) ); + } + if( -1 == arrKeys.IndexOf(entryKey.Text) ) + if( true == Common.ValidateString(entryKey.Text) ) + { + iterKey = tsKeyValue.AppendValues(entryKey.Text, entryValue.Text, "********", true, "No",ispass); + entryKey.Text = entryValue.Text = ""; + } + else + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogSpecialCharacter", null); + gxmlTemp.Autoconnect (this); + //dialogSpecialCharacter.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("dialogNewSecret"); + } + //tvKeyValue.Selection.SelectIter(iterKey); + entryKey.HasFocus = true; + } + Logger.DbgLog("GUI:Firefox.on_buttonNewAdd_clicked() - END"); + } public void on_buttonSCClose_clicked(object obj, EventArgs args) { dialogSpecialCharacter.Destroy(); } + + public void on_buttonISClose_clicked(object obj, EventArgs args) + { + dialogInvalidSecret.Destroy(); + } /// /// REMOVE BUTTON CLICKED /// public void on_buttonNewRemove_clicked(object obj, EventArgs args) { + Logger.DbgLog("GUI:Firefox.on_buttonNewRemove_clicked() - BEGIN"); + + TreeModel modelKey; + TreeIter iterKey; + + if(tvKeyValue.Selection.GetSelected (out modelKey, out iterKey)){ + if( false == (bool)tsKeyValue.GetValue(iterKey,3) ) + arrDeletedKeys.Add(tsKeyValue.GetValue(iterKey,0)); + } + + if( 0 != tvKeyValue.Selection.CountSelectedRows() ) + { + TreeModel model; + TreeIter iter; + + tvKeyValue.Selection.GetSelected (out model, out iter); + tsKeyValue.Remove(ref iter); + tvKeyValue.ColumnsAutosize(); + } + + Logger.DbgLog("GUI:Firefox.on_buttonNewRemove_clicked() - END"); } + public bool checkDuplicateSecretName(String secretID, String uname, ref TreeStore model, int method) + { + TreeIter iter; + switch(method) + { + case 1: + if(model.GetIterFirst(out iter)) + { + do + { + if(String.Compare((string)model.GetValue(iter,0),secretID,true) == 0) + return true; + }while(model.IterNext(ref iter)); + } + return false; + case 2: + if(model.GetIterFirst(out iter)) + { + secretID = String.Concat(secretID, " ("); + do + { + if(((string)model.GetValue(iter,0)).StartsWith(secretID)) + return true; + }while(model.IterNext(ref iter)); + } + return false; + case 3: + bool[] ispassarr; + string[] valarr; + if(model.GetIterFirst(out iter)) + { + do + { + if(String.Compare((string)model.GetValue(iter,0),secretID,true) == 0) + { + ispassarr = (bool[])model.GetValue(iter, 6); + valarr = (string[])model.GetValue(iter, 2); + for(int i=0;i /// MANAGE SECRET ID DIALOG OK-BUTTON CLICKED /// public void on_buttonManageOk_clicked(object obj, EventArgs args) { + TreeModel modelSecret; + TreeIter iterSecret, + iterKey; + string NewKey = null, + NewValue = null; + bool NewIsPassword; + string[] strDeletedKeys = null; + bool dirtyBit = false; + bool doCheck = false; + //ArrayList arrKeys = null, + // arrValues = null; + String sname = null; + + try + { + if (tvKeyValue.Model.IterNChildren() == 1) + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogInvalidSecret", null); + gxmlTemp.Autoconnect (this); + dialogInvalidSecret.Show(); + return; + } + + if( (0 == tvKeyValue.Model.IterNChildren()) && tvSecretIDFirefox.Selection.GetSelected (out modelSecret, out iterSecret) ) + { + if( Common.STATUS_SUCCESS == StoreDataInterface.UpdateStore(Common.STORE_FIREFOX, Common.OPERATION_DELETE_SECRET, "", "", ref modelSecret, ref iterSecret) ) + { + tsSecretIDFirefox.Remove(ref iterSecret); + tvSecretIDFirefox.ColumnsAutosize(); + tsNativeInfoFirefox.Clear(); + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - DELETE_SECRET_SUCCEEDED"); + } + else + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - DELETE_SECRET_FAILED"); + AggregateStore(); + } + else + { + //check for duplicate secret names before updating the store + tvSecretIDFirefox.Selection.GetSelected (out modelSecret, out iterSecret); + sname = (string)modelSecret.GetValue(iterSecret, 0); + doCheck = sname.EndsWith(")"); + if( tsKeyValue.GetIterFirst(out iterKey) && doCheck == true) + { + do + { + NewValue = (string) tsKeyValue.GetValue(iterKey,1); + NewIsPassword = (bool) tsKeyValue.GetValue(iterKey,5); + dirtyBit = (bool) tsKeyValue.GetValue(iterKey,3); + + if((true == dirtyBit && false == NewIsPassword) || ( false == NewIsPassword && true == isPasswordToggled)) + { + sname = sname.Remove ((sname.LastIndexOf(" (") + 2),sname.Length - (sname.LastIndexOf(" (") +2)); + sname = String.Concat ( sname, NewValue, ")"); + if (sname != entrySecretID.Text && checkDuplicateSecretName(sname, null, ref tsSecretIDFirefox, 1)) + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogInvalidSecret", null); + gxmlTemp.Autoconnect (this); + dialogInvalidSecret.Show(); + return; + } + break; + } + }while(tsKeyValue.IterNext(ref iterKey)); + } + + if( (null != arrDeletedKeys) && (arrDeletedKeys.Count > 0) ) + { + tvSecretIDFirefox.Selection.GetSelected (out modelSecret, out iterSecret); + strDeletedKeys = (string[])arrDeletedKeys.ToArray(typeof(string)); + + for( int i=0; i < strDeletedKeys.Length; i++) + { + if( Common.STATUS_SUCCESS == StoreDataInterface.UpdateStore(Common.STORE_FIREFOX, Common.OPERATION_DELETE_KEY, strDeletedKeys[i], null, ref modelSecret, ref iterSecret) ) + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - DELETE_KEY_SUCCEEDED."); + else + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - DELETE_KEY_FAILED."); + } + arrDeletedKeys.Clear(); + } + + if( tsKeyValue.GetIterFirst(out iterKey) && tvSecretIDFirefox.Selection.GetSelected (out modelSecret, out iterSecret) ) + { + do + { + NewKey = (string) tsKeyValue.GetValue(iterKey,0); + NewValue = (string) tsKeyValue.GetValue(iterKey,1); + NewIsPassword = (bool) tsKeyValue.GetValue(iterKey,5); + dirtyBit = (bool) tsKeyValue.GetValue(iterKey,3); + + if( true == dirtyBit ) + { + if( Common.STATUS_SUCCESS == StoreDataInterface.UpdateStore(Common.STORE_FIREFOX, Common.OPERATION_ADD_KEY, NewKey, NewValue, NewIsPassword, ref modelSecret, ref iterSecret) ) + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - ADD_KEY_VALUE_SUCCEEDED."); + else + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - ADD_KEY_VALUE_FAILED."); + } + else if(true == isPasswordToggled) + { + if( Common.STATUS_SUCCESS == StoreDataInterface.UpdateStore(Common.STORE_FIREFOX, Common.OPERATION_MODIFY_KEY, NewKey, NewValue, NewIsPassword, ref modelSecret, ref iterSecret)) + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - SET_PASSWORD_STATE_SUCCEEDED."); + else + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - SET_PASSWORD_STATE_FAILED."); + } + } + while( tsKeyValue.IterNext(ref iterKey) ); + } + AggregateStore(); + } + } + catch(Exception exp) + { + Logger.DbgLog("GUI:Firefox.on_buttonManageOk_clicked() - EXCEPTION:" + exp.ToString()); + } tsKeyValue.Dispose(); dialogManageSecret.Destroy(); } @@ -584,11 +922,155 @@ public class Firefox : Store ViewKeyValues(); } + public void on_buttonNewOk_clicked(object obj, EventArgs args) + { + Logger.DbgLog("GUI:Firefox.on_buttonNewOk_clicked() - BEGIN"); + + TreeModel modelSecret; + TreeIter iterSecret, + iterKey; + string NewKey = null, + NewValue = null; + bool NewIsPassword; + string[] Keys = null, + Values = null, + NativeKeys = null, + NativeValues = null; + bool[] IsPassword =null; + object val = null; + string sname = null; + ArrayList arrKeys = null, + arrValues = null, + arrIsPassword = null; + if (tvKeyValue.Model.IterNChildren() == 1) + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogInvalidSecret", null); + gxmlTemp.Autoconnect (this); + dialogInvalidSecret.Show(); + return; + } + if ( true == entrySecretID.Editable && false == ValidateString(entrySecretID.Text) ) + { + /*// prompt user + MessageDialog md=new MessageDialog(this.windowMain,Gtk.DialogFlags.Modal, + Gtk.MessageType.Warning, + Gtk.ButtonsType.Ok, + "Secret ID may not contain \"*\""); + + md.Response += new ResponseHandler(md_Response); + md.SetPosition(Gtk.WindowPosition.CenterOnParent); + md.Modal = true; + md.Show();*/ + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogSpecialCharacter", null); + gxmlTemp.Autoconnect (this); + entrySecretID.HasFocus = true; + return; + } + + if( (true == entrySecretID.Editable) && ("" != entrySecretID.Text) && (tvKeyValue.Model.IterNChildren() > 0) ) + { + Logger.DbgLog("GUI:Firefox.on_buttonNewOk_clicked() - Adding New Secrets and KeyValues."); + + arrKeys = new ArrayList(); + arrValues = new ArrayList(); + arrIsPassword = new ArrayList(); + try + { + if(tsKeyValue.GetIterFirst(out iterKey)) + { + do + { + val = tsKeyValue.GetValue(iterKey,0); + NewKey = val.ToString(); + val = tsKeyValue.GetValue(iterKey,1); + NewValue = val.ToString(); + NewIsPassword = (bool)tsKeyValue.GetValue(iterKey,5); + if( -1 == (arrKeys.IndexOf(NewKey)) ) + { + arrKeys.Add(NewKey); + arrValues.Add(NewValue); + arrIsPassword.Add(NewIsPassword); + } + if(NewIsPassword == false) + { + sname = entrySecretID.Text; + if (checkDuplicateSecretName(entrySecretID.Text, null, ref tsSecretIDFirefox, 1)) + { + if (checkDuplicateSecretName(entrySecretID.Text, NewValue, ref tsSecretIDFirefox, 3)) + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogInvalidSecret", null); + gxmlTemp.Autoconnect (this); + dialogInvalidSecret.Show(); + + return; + } + + } + else if(checkDuplicateSecretName(entrySecretID.Text, null, ref tsSecretIDFirefox, 2)) + { + sname = String.Concat ( sname, " (", NewValue, ")"); + + if (checkDuplicateSecretName(sname, null, ref tsSecretIDFirefox, 1)) + { + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogInvalidSecret", null); + gxmlTemp.Autoconnect (this); + dialogInvalidSecret.Show(); + + return; + } + } + } + } + while( tsKeyValue.IterNext(ref iterKey) ); + + Keys = (string[])arrKeys.ToArray(typeof(string)); + Values = (string[])arrValues.ToArray(typeof(string)); + IsPassword = (bool[])arrIsPassword.ToArray(typeof(bool)); + + NativeKeys = new string[Common.MAX_NATIVE_ELEMENTS]; + NativeValues = new string[Common.MAX_NATIVE_ELEMENTS]; + NativeKeys[Common.INDEX_NATIVEINFO_FOLDERNAME] = Common.NATIVEINFO_FOLDERNAME; + NativeKeys[Common.INDEX_NATIVEINFO_TYPEID] = Common.NATIVEINFO_TYPEID; + NativeKeys[Common.INDEX_NATIVEINFO_SYNC] = Common.NATIVEINFO_SYNC; + NativeKeys[Common.INDEX_NATIVEINFO_SYNCTYPE] = Common.NATIVEINFO_SYNCTYPE; + NativeKeys[Common.INDEX_NATIVEINFO_MODIFIEDTIME] = Common.NATIVEINFO_MODIFIEDTIME; + NativeValues[Common.INDEX_NATIVEINFO_FOLDERNAME] = null; + NativeValues[Common.INDEX_NATIVEINFO_TYPEID] = "Signon"; + NativeValues[Common.INDEX_NATIVEINFO_SYNC] = null; + NativeValues[Common.INDEX_NATIVEINFO_SYNCTYPE] = null; + NativeValues[Common.INDEX_NATIVEINFO_MODIFIEDTIME] = null; + iterSecret = tsSecretIDFirefox.AppendValues(sname, Keys, Values, DataEngines.AD.GetDefaultProfileName(Common.STORE_FIREFOX), NativeKeys, NativeValues, IsPassword); + modelSecret = tvSecretIDFirefox.Model; + + if( Common.STATUS_SUCCESS == StoreDataInterface.UpdateStore(Common.STORE_FIREFOX, Common.OPERATION_ADD_SECRET, "", "", ref modelSecret, ref iterSecret) ) + { + AggregateStore(); + Logger.DbgLog("GUI:Firefox.on_buttonNewOk_clicked() - ADD_NEW_SECRET_SUCCEEDED."); + } + else + Logger.DbgLog("GUI:Firefox.on_buttonNewOk_clicked() - ERROR: ADD_NEW_SECRET_FAILED"); + } + } + catch(Exception exp) + { + Logger.DbgLog("GUI:Firefox.on_buttonNewOk_clicked() - EXCEPTION:" + exp.ToString()); + } + tsKeyValue.Dispose(); + dialogNewSecret.Destroy(); + } + Logger.DbgLog("GUI:Firefox.on_buttonNewOk_clicked() - END"); + } + public void on_buttonNewCancel_clicked(object obj, EventArgs args) { dialogNewSecret.Destroy(); } + public void on_helpbuttonNewSecret_clicked(object obj, EventArgs args) + { + Common.ShowHelpUrl("AddNewSecrets.htm"); + } + ///####################################################################### /// ADD NEW SECRET /// @@ -596,6 +1078,33 @@ public class Firefox : Store /// public void OnNewSecretActivated(object obj, EventArgs args) { + Logger.DbgLog("GUI:Firefox.OnNewSecretActivated() - BEGIN"); + + Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogNewSecret", null); + gxmlTemp.Autoconnect (this); + dialogNewSecret.TransientFor = (Gtk.Window)CasaMain.gxmlMain.GetWidget("windowMain"); + dialogNewSecret.Title = "Firefox - New Secret"; + + cellEditable = new CellRendererText(); + cellEditable.Editable = true; + cellEditable.Edited += new EditedHandler(OnKeyValueEdited); + + cellToggle = new CellRendererToggle(); + cellToggle.Activatable = true; + cellToggle.Toggled += OnIsPasswordToggled; + + /// KEY:0 VALUE:1 VALUE-DUP:2 DIRTY-BIT:3 LINK:4 ISPASSWORD:5 + tsKeyValue = new TreeStore(typeof(string),typeof(string), typeof(string), typeof(bool), typeof(string),typeof(bool)); + tvKeyValue.AppendColumn("Key",new CellRendererText(),"text",0); + tvKeyValue.AppendColumn("Value",cellEditable,"text",2); + tvKeyValue.AppendColumn("Password", cellToggle,"active",5); + tvKeyValue.AppendColumn("Linked",new CellRendererText(),"text",4); + tvKeyValue.Model = tsKeyValue; + tsKeyValue.Clear(); + entrySecretID.HasFocus = true; + entrySecretID.Text = ""; + + Logger.DbgLog("GUI:Firefox.OnNewSecretActivated() - END"); } ///####################################################################### @@ -604,7 +1113,12 @@ public class Firefox : Store /// /// public void OnNewKeyActivated(object obj, EventArgs args) - { + { + Logger.DbgLog("GUI:Firefox.OnNewKeyActivated() - BEGIN"); + + ViewKeyValues(); + + Logger.DbgLog("GUI:Firefox.OnNewKeyActivated() - END"); } ///####################################################################### @@ -652,6 +1166,7 @@ public class Firefox : Store tvSecretIDFirefox.ColumnsAutosize(); tsNativeInfoFirefox.Clear(); dialogConfirmDelete.Destroy(); + AggregateStore(); Logger.DbgLog("GUI:Firefox.on_buttonYes_clicked() - DELETE_SECRET_SUCCEEDED"); } @@ -691,7 +1206,20 @@ public class Firefox : Store { } - + ///####################################################################### + /// VALIDATE STRINGS FOR SPECIAL CHARACTERS + + /// + /// Validate strings for special characters + /// + public static bool ValidateString(string sString) + { + if( -1 == sString.IndexOfAny(SpecialCharacters) ) + return true; + else + return false; + } + } } ///################################################################## diff --git a/CASA/gui/StoreDataInterface.cs b/CASA/gui/StoreDataInterface.cs index 71473533..d44327eb 100644 --- a/CASA/gui/StoreDataInterface.cs +++ b/CASA/gui/StoreDataInterface.cs @@ -53,6 +53,8 @@ namespace Novell.CASA.GUI { CCFXML_ELEMENT_TIME_ZONE = "Zone", CCFXML_ELEMENT_TIME_CREATION = "Creation", CCFXML_ELEMENT_TIME_MODIFIED = "Modified", + CCFXML_ATTRIBUTE_PASSWDSTATUS = "PasswordStatus", + CCFXML_ATTRIBUTE_FFOX_TYPE = "Signon", CCFXML_ELEMENT_TIME_ACCESSED = "Accessed", CCFXML_ATTRIBUTE_ID = "ID", CCFXML_ATTRIBUTE_MICASA_SYNCH = "Synch", @@ -171,6 +173,7 @@ namespace Novell.CASA.GUI { string secretID = null; string[] strKeyArray = null; string[] strValueArray = null; + bool[] boolIsPassArray = null; string storeID = null; string[] strNativeKeyArray = new string[Common.MAX_NATIVE_ELEMENTS]; string[] strNativeValueArray = new string[Common.MAX_NATIVE_ELEMENTS]; @@ -303,6 +306,7 @@ namespace Novell.CASA.GUI { //Reinit arrays to the no of keys for this secret strKeyArray = new string[noOfKeys]; strValueArray = new string[noOfKeys]; + boolIsPassArray = new bool[noOfKeys]; //Get Last Modified Time for the secret ccfExtPath = CCFXML_ELEMENT_TIME + "/" + CCFXML_ELEMENT_TIME_MODIFIED; @@ -334,6 +338,14 @@ namespace Novell.CASA.GUI { bKey = true; strKeyArray[noOfKeysFound] = iterSecret.Current.Value; //KeyName } + if( (iterSecret.Current.LocalName.Equals(CCFXML_ATTRIBUTE_PASSWDSTATUS )) && (noOfKeysFound<=noOfKeys) ) + { + if(iterSecret.Current.Value.Equals("1")) + boolIsPassArray[noOfKeysFound] = true; //KeyName + else + boolIsPassArray[noOfKeysFound] = false; //KeyName + } + }while( iterSecret.Current.MoveToNextAttribute() ); iterSecret.Current.MoveToParent(); @@ -391,8 +403,10 @@ namespace Novell.CASA.GUI { strNativeValueArray[Common.INDEX_NATIVEINFO_SYNCTYPE] = synchType; strNativeValueArray[Common.INDEX_NATIVEINFO_MODIFIEDTIME] = modifiedTime; //Console.WriteLine("folderName="+folderName+"\n"+"typeID="+typeID+"\n"+"synch="+synch+"\n"+"synchType="+synchType+"\n"+"modifiedTime="+modifiedTime); - - ls.AppendValues(secretID,strKeyArray,strValueArray,storeID,strNativeKeyArray,strNativeValueArray); + if ( storeIDentifier == Common.STORE_FIREFOX) + ls.AppendValues(secretID,strKeyArray,strValueArray,storeID,strNativeKeyArray,strNativeValueArray,boolIsPassArray); + else + ls.AppendValues(secretID,strKeyArray,strValueArray,storeID,strNativeKeyArray,strNativeValueArray); //Re-Initialize for next iteration secretID = ""; @@ -415,7 +429,106 @@ namespace Novell.CASA.GUI { return( Common.STATUS_SUCCESS ); } + ///####################################################################### + /// UPDATE STORE: ADD NEW secret/keyvalue, MODIFY keyvalue, DELETE secret + + /// + /// Supported Update Functionalities - on miCASA Store only + /// + public static int UpdateStore(int storeIDentifier,int operation,string keyID,string valueToBeModfied,bool isPassword,ref TreeModel model,ref TreeIter iter) + { + Logger.DbgLog("GUI:StoreDataInterface.UpdateStore()"); + //TreeStore row elements + string SecretID = null; + string keyChainID = null; + + //XPATH query strings + string ccfKeyChainPath = null; + string ccfSecretPath = null; + string ccfKeyPath = null; + + //Reading and Initialzing from the passed iter object + SecretID = (string) model.GetValue (iter, 0); + keyChainID = (string) model.GetValue (iter, 3); + + if (storeIDentifier != Common.STORE_FIREFOX && (operation != Common.OPERATION_ADD_KEY || operation!=Common.OPERATION_MODIFY_KEY || operation!=Common.OPERATION_MODIFY_SECRET)) + return Common.STATUS_FAILURE; + + + try + { + if( Common.OPERATION_ADD_KEY == operation ) + { + ccfKeyChainPath = "//CCF/FireFox/Profile[@ID='" + keyChainID + "']/Secret[@ID='" + SecretID + "']"; + ccfSecretPath = ""; + + //Create the Key element + XmlElement newKeyElement = ccfDoc.CreateElement(CCFXML_ELEMENT_KEY); + newKeyElement.SetAttribute(CCFXML_ATTRIBUTE_ID,keyID); + if(isPassword) + newKeyElement.SetAttribute(CCFXML_ATTRIBUTE_PASSWDSTATUS,"1"); + else + newKeyElement.SetAttribute(CCFXML_ATTRIBUTE_PASSWDSTATUS,"0"); + + XmlElement newValue = ccfDoc.CreateElement(CCFXML_ELEMENT_VALUE); + newValue.InnerText = valueToBeModfied; + newKeyElement.AppendChild(newValue); + + XmlNode root = ccfDoc.DocumentElement; + XmlNodeList keyNodeList = root.SelectNodes(ccfKeyChainPath); + XmlNode keyNode=keyNodeList.Item(0); + XmlNode lastChild = keyNode.LastChild; + + if(isPassword) + keyNode.InsertAfter(newKeyElement,lastChild); + else + keyNode.InsertBefore(newKeyElement,lastChild); + + ad.SetSecret(keyNode,Common.OPERATION_MODIFY_KEY,storeIDentifier); + } + else if(Common.OPERATION_MODIFY_KEY == operation) + { + ccfKeyPath = "//CCF/FireFox/Profile[@ID='" + keyChainID + "']/Secret[@ID='" + SecretID + "']/Key[@ID='" + keyID + "']"; + ccfSecretPath = "//CCF/FireFox/Profile[@ID='" + keyChainID + "']/Secret[@ID='" + SecretID + "']"; + + XmlElement newKeyElement = ccfDoc.CreateElement(CCFXML_ELEMENT_KEY); + newKeyElement.SetAttribute(CCFXML_ATTRIBUTE_ID,keyID); + if(isPassword) + newKeyElement.SetAttribute(CCFXML_ATTRIBUTE_PASSWDSTATUS,"1"); + else + newKeyElement.SetAttribute(CCFXML_ATTRIBUTE_PASSWDSTATUS,"0"); + XmlElement newValue = ccfDoc.CreateElement(CCFXML_ELEMENT_VALUE); + newValue.InnerText = valueToBeModfied; + newKeyElement.AppendChild(newValue); + + XmlNode root = ccfDoc.DocumentElement; + XmlNode secretNode = root.SelectSingleNode(ccfSecretPath); + XmlNode keyNode = root.SelectSingleNode(ccfKeyPath); + + if(keyNode!=null) + secretNode.RemoveChild(keyNode); + + if (isPassword) + secretNode.InsertAfter(newKeyElement,secretNode.LastChild); + else + secretNode.InsertBefore(newKeyElement,secretNode.LastChild); + + ad.SetSecret(secretNode,Common.OPERATION_MODIFY_KEY,storeIDentifier); + } + } + catch(Exception exp) + { + //Console.WriteLine("Exception"+exp.ToString());//FIXME:Remove this line + Logger.DbgLog("GUI:StoreDataInterface.UpdateStore() - EXCEPTION" + exp.ToString()); + return( Common.STATUS_STORE_UPDATEFAILED ); + } + + return( Common.STATUS_SUCCESS ); + + + + } ///####################################################################### /// UPDATE STORE: ADD NEW secret/keyvalue, MODIFY keyvalue, DELETE secret @@ -433,6 +546,7 @@ namespace Novell.CASA.GUI { string keyChainID = null; string[] strKeyArray = new string[Common.MAX_ARRAY_ELEMENTS]; string[] strValueArray = new string[Common.MAX_ARRAY_ELEMENTS]; + bool[] boolIsPassArray = new bool[Common.MAX_ARRAY_ELEMENTS]; string[] strNativeValueArray = new string[Common.MAX_NATIVE_ELEMENTS]; //XPATH query strings @@ -452,6 +566,8 @@ namespace Novell.CASA.GUI { strValueArray = (string[]) model.GetValue (iter, 2); keyChainID = (string) model.GetValue (iter, 3); strNativeValueArray = (string[]) model.GetValue (iter, 5); + if (storeIDentifier == Common.STORE_FIREFOX) + boolIsPassArray = (bool[]) model.GetValue (iter, 6); try @@ -656,6 +772,43 @@ namespace Novell.CASA.GUI { //Console.WriteLine("OPERATION_DELETE_SECRET:ccfKeyChainPath:"+ccfKeyChainPath);//FIXME:Remove this line //Console.WriteLine("OPERATION_DELETE_SECRET:ccfSecretPath:"+ccfSecretPath);//FIXME:Remove this line } + else if( Common.OPERATION_ADD_SECRET == operation ) + { + XmlElement newUser, newPass; + //keyChainID = ad.GetDefaultProfileName(Common.STORE_FIREFOX); + ccfKeyChainPath = "//CCF/FireFox/Profile[@ID='" + keyChainID + "']"; + ccfSecretPath = "//CCF/FireFox/Profile[@ID='" + keyChainID + "']/Secret[@ID='" + SecretID + "']"; + newSecretElement = ccfDoc.CreateElement(CCFXML_ELEMENT_SECRET); + newSecretElement.SetAttribute(CCFXML_ATTRIBUTE_ID,SecretID); + newSecretElement.SetAttribute(CCFXML_ELEMENT_TYPE,CCFXML_ATTRIBUTE_FFOX_TYPE); + newUser = ccfDoc.CreateElement(CCFXML_ELEMENT_KEY); + newPass = ccfDoc.CreateElement(CCFXML_ELEMENT_KEY); + + for( int i=0; i< strKeyArray.Length; i++) + { + if(boolIsPassArray[i]) + { + newPass.SetAttribute(CCFXML_ATTRIBUTE_ID,strKeyArray[i]); + XmlElement newValue = ccfDoc.CreateElement(CCFXML_ELEMENT_VALUE); + newValue.InnerText = strValueArray[i]; + newPass.AppendChild(newValue); + newPass.SetAttribute(CCFXML_ATTRIBUTE_PASSWDSTATUS,"1"); + } + else + { + newUser.SetAttribute(CCFXML_ATTRIBUTE_ID,strKeyArray[i]); + XmlElement newValue = ccfDoc.CreateElement(CCFXML_ELEMENT_VALUE); + newValue.InnerText = strValueArray[i]; + newUser.AppendChild(newValue); + newUser.SetAttribute(CCFXML_ATTRIBUTE_PASSWDSTATUS,"0"); + } + } + newSecretElement.AppendChild(newUser); + newSecretElement.AppendChild(newPass); + newKeychainElement = ccfDoc.CreateElement(storeChainKey); + newKeychainElement.SetAttribute(CCFXML_ATTRIBUTE_ID,keyChainID); + newKeychainElement.AppendChild(newSecretElement); + } } else return( Common.STATUS_STORE_UNSUPPORTEDOPERATION ); @@ -670,7 +823,7 @@ namespace Novell.CASA.GUI { XmlNodeList keylist = root.SelectNodes(ccfSecretPath); foreach ( XmlNode key in keylist ) { - key.ChildNodes[0].InnerText=valueToBeModfied ; + key.ChildNodes[0].InnerText=valueToBeModfied ; //Console.WriteLine("EXECUTING OPERATION_MODIFY_KEY:Modifying"+ccfSecretPath);//FIXME:Remove this line ad.SetSecret(key.ParentNode,operation,storeIDentifier); } @@ -710,7 +863,7 @@ namespace Novell.CASA.GUI { { //ShowDocOnConsole("BEFORE CALL TO SETSECRET");//FIXME:Remove this - if(( Common.STORE_MICASA == storeIDentifier )||( Common.STORE_GNOMEKEYRING == storeIDentifier )) + if(( Common.STORE_MICASA == storeIDentifier )||( Common.STORE_GNOMEKEYRING == storeIDentifier ) || (Common.STORE_FIREFOX == storeIDentifier )) { //Add a new secret to the keychain XmlNode root = ccfDoc.DocumentElement; diff --git a/CASA/gui/images/casa.glade b/CASA/gui/images/casa.glade index 20bc3a82..2781bddd 100644 --- a/CASA/gui/images/casa.glade +++ b/CASA/gui/images/casa.glade @@ -1,14171 +1,14333 @@ - - - - - - - Novell CASA Manager - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER - False - 250 - 525 - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - False - - - - True - False - 0 - - - - True - False - 0 - - - - True - GTK_PACK_DIRECTION_LTR - GTK_PACK_DIRECTION_LTR - - - - True - _File - True - - - - - - - - True - _New - True - - - - True - gtk-new - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - True - New _Secret - True - - - - - True - gtk-new - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - New _Key - True - - - - - True - gtk-new - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - True - _Refresh Stores - True - - - - - - True - gtk-refresh - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _Lock Secrets - True - - - - - True - gtk-dialog-authentication - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Unlock Secrets - True - - - - - True - gtk-open - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Destroy Secrets - True - - - - - True - gtk-delete - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _Export Secrets - True - - - - - True - gtk-floppy - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Import Secrets - True - - - - - True - gtk-open - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _Exit - True - - - - - - True - gtk-quit - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - True - _Edit - True - - - - - - - - True - _View - True - - - - - - True - gtk-zoom-fit - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Link - True - - - - - True - gtk-jump-to - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Copy - True - - - - - True - gtk-copy - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _Delete - True - - - - - - True - gtk-delete - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - True - _Options - True - - - - - - - - True - _Application SSO - True - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - True - _Konquerer - True - - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - K_opete - True - - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _NetworkManager - True - - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Gaim - True - - - - - True - gtk-execute - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - True - _Change Master Password - True - - - - - True - gtk-revert-to-saved - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _Preferences - True - - - - - True - gtk-preferences - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - P_olicies - True - - - - - - True - gtk-properties - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - - True - _Debug - True - - - - - - - True - _Create Test Secrets - True - - - - - True - gtk-add - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Remove Test Secrets - True - - - - - True - gtk-remove - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - Debug File Chooser - True - - - - - - - True - - - - - - True - Enable _Logging - True - False - - - - - - - - - - - True - _Help - True - - - - - - - True - _Contents - True - - - - - - True - gtk-help - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _About CASA - True - - - - - True - gtk-dialog-info - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - - - - 0 - True - True - - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - casa-logo-left.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - - - 0 - True - True - - - - - - True - casa-logo-right.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 0 - False - True - - - - - - 8 - True - True - True - True - True - True - False - GTK_POS_TOP - True - False - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - True - True - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - <b>:: Native Information ::</b> - False - True - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - True - False - True - False - False - False - - - - - 0 - False - True - - - - - False - True - - - - - - True - False - 0 - - - - True - CASA_32.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - <b>miCASA</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - <b>:: Native Information ::</b> - False - True - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - True - False - True - False - False - False - - - - - 0 - False - True - - - - - False - True - - - - - - True - False - 0 - - - - True - firefox-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - <b>Firefox</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - <b>:: Native Information ::</b> - False - True - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - True - False - True - False - False - False - - - - - 0 - False - True - - - - - False - True - - - - - - True - False - 0 - - - - True - mozilla-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - <b>Mozilla</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - <b>:: Native Information ::</b> - False - True - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - True - False - True - False - False - False - - - - - 0 - False - True - - - - - False - True - - - - - - True - False - 0 - - - - True - kwallet-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - <b>KDE Wallet</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - <b>:: Native Information ::</b> - False - True - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - True - False - True - False - False - False - - - - - 0 - False - True - - - - - False - True - - - - - - True - False - 0 - - - - True - keyring-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - <b>GNOME Keyring</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - 0 - True - True - - - - - - True - True - - - 0 - False - False - GTK_PACK_END - - - - - - - - 4 - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-no - True - GTK_RELIEF_NORMAL - True - -9 - - - - - - - True - True - True - True - True - gtk-yes - True - GTK_RELIEF_NORMAL - True - -8 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-question - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Are you sure you want to Refresh -all the stores?</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Refreshing stores will fetch Secrets from -their backend stores. - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - True - Do not show this in the future - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - New Secret - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-new - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Add new Secrets or Key-Value pairs</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Enter the Key-value pairs and click Add button to add Key-Value pairs or click Delete button to remove newly added Key-Value pairs from the list. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - 3 - 2 - False - 4 - 4 - - - - True - 0 - 1 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 6 - 6 - 6 - - - - True - 5 - 3 - False - 4 - 4 - - - - True - <b>Key:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - False - 0 - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-remove - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - 2 - 3 - 3 - 4 - fill - fill - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - False - True - False - False - False - - - - - 0 - 2 - 3 - 4 - - - - - - True - True - True - True - 512 - - True - * - False - - - 0 - 1 - 1 - 2 - - - - - - - True - True - True - True - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-add - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 2 - 3 - 1 - 2 - fill - - - - - - - True - <b>Key-Value pairs:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 3 - 2 - 3 - fill - - - - - - - True - <b>Value:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 3 - 0 - 1 - fill - - - - - - - True - True - Show Values in clear text. - True - GTK_RELIEF_NORMAL - True - False - False - True - - - - 0 - 3 - 4 - 5 - fill - - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - 2 - 2 - 3 - fill - - - - - - True - <b>Secret ID:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 2 - 0 - 1 - fill - - - - - - - True - True - True - True - 512 - - True - * - False - - - 0 - 2 - 1 - 2 - - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - Link Key-Value pairs - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-jump-to - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Link Key-Value pairs</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - True - - - - - - True - You can link two or more keys using this dialog. Further, linking two password keys will keep their values synchronized. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - False - 0 - - - - True - 3 - 2 - False - 3 - 6 - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - <b>Key:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - fill - - - - - - True - <b>Value:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - fill - - - - - - True - <b>Secret ID:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - fill - - - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 2 - 0 - 1 - fill - - - - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 2 - 1 - 2 - fill - - - - - - 0 - True - True - - - - - 6 - False - True - - - - - - True - 0 - 0 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 10 - 10 - 10 - - - - True - 5 - 3 - False - 4 - 4 - - - - True - False - 0 - - - - True - Remove the Link of selected Key-Value pair. - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-remove - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - 2 - 3 - 4 - 5 - fill - fill - - - - - - True - <b>Existing Linked Keys:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 3 - 3 - 4 - fill - - - - - - - True - - - 0 - 3 - 2 - 3 - 4 - fill - fill - - - - - - True - False - 0 - - - - True - Link the selected Key-Value pair. - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-add - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 32 - False - False - - - - - 2 - 3 - 1 - 2 - fill - fill - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - False - True - False - False - False - - - - - 0 - 2 - 4 - 5 - fill - - - - - - True - <b>Select the Keys to be Linked:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 4 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 3 - 0 - 1 - fill - - - - - - - True - True - True - False - GTK_POS_TOP - True - False - - - - True - False - 0 - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - True - False - False - False - - - - - 0 - True - True - - - - - - True - GTK_ARROW_RIGHT - GTK_SHADOW_OUT - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - True - False - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - False - True - - - - - - True - False - 0 - - - - True - CASA_32.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - miCASA - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - False - 0 - - - - True - firefox-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - Firefox - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - False - 0 - - - - True - mozilla-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - Mozilla - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - False - 0 - - - - True - kwallet-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - KDE Wallet - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - - True - False - 0 - - - - 6 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - True - True - False - False - False - - - - - 0 - True - True - - - - - False - True - - - - - - True - False - 0 - - - - True - keyring-logo.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - GNOME Keyring - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 6 - False - False - - - - - tab - - - - - 0 - 2 - 1 - 2 - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-no - True - GTK_RELIEF_NORMAL - True - -9 - - - - - - - True - True - True - True - True - gtk-yes - True - GTK_RELIEF_NORMAL - True - -8 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-question - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Are you sure you want to delete this secret?</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - False - 0 - - - - True - <b>Secret ID : </b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - False - True - 0 - - False - * - False - - - 0 - True - True - - - - - 6 - False - False - - - - - - True - This will delete the selected secret and all its associated key-value pairs. - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - Do not show this in the future - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - True - True - True - gtk-no - True - GTK_RELIEF_NORMAL - True - -9 - - - - - - True - True - True - True - True - gtk-yes - True - GTK_RELIEF_NORMAL - True - -8 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-question - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Are you sure you want to Quit -the application?</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - This will quit the CASA Management -Console. - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - Persistent Storage - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 4 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Set Master Password for Persistent Storage</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - The Master Password is used to encrypt and -secure your persistent credentials. You are -prompted for the Master Password at startup. - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - 3 - 2 - False - 6 - 6 - - - - True - Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Re-enter Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - Master Password Hint : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - False - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - True - True - 512 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - Preferences - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 4 - True - False - 0 - - - - True - False - 0 - - - - True - True - Encrpyt and save miCASA secrets to disk (Persistent) - True - GTK_RELIEF_NORMAL - True - True - False - True - - - - 0 - False - False - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 3 - True - True - - - - - - True - True - GTK_RELIEF_NORMAL - False - - - - - True - gtk-find - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - - - True - <b> miCASA Store options </b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - False - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 4 - True - False - 0 - - - - True - True - Show CASA Manager icon in notify area - True - GTK_RELIEF_NORMAL - True - True - False - True - - - - 0 - False - False - - - - - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - False - 0 - - - - True - True - Display CASA Manager when icon is clicked - True - GTK_RELIEF_NORMAL - True - False - False - True - - - - 0 - False - False - - - - - - True - True - Lock/Unlock secrets when icon is clicked - True - GTK_RELIEF_NORMAL - True - False - False - True - radiobutton1 - - - - 0 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - - - True - <b> CASA Manager Options </b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - False - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 4 - True - False - 0 - - - - True - True - Firefox Password Manager - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - True - Mozilla Password Manager - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - True - True - KDE Wallet - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - True - True - GNOME Keyring - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - - - - - True - <b> Stores supported </b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - True - True - - - - - - 6 - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - False - 0 - - - - True - Refresh all stores after every - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - True - - - - - - True - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 0 0 100 1 10 10 - - - 4 - False - True - - - - - - True - seconds. - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - - - - - True - <b> Auto refresh</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - False - True - - - - - 0 - True - True - - - - - - - - - - - True - New _Secret - True - - - - - True - gtk-new - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - New _Key - True - - - - - True - gtk-new - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _View - True - - - - - - True - gtk-zoom-fit - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Link - True - - - - - True - gtk-jump-to - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - _Copy - True - - - - - True - gtk-copy - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - - - - - - True - _Delete - True - - - - - - True - gtk-delete - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - About CASA - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_EDGE - - - - True - True - True - GTK_RELIEF_NONE - True - -7 - - - - - True - novell-logo.png - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - 4 - True - False - 0 - - - - True - False - 0 - - - - True - casa-logo-left.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - - True - - - 0 - True - True - - - - - - True - casa-logo-right.png - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - <b>Version 1.6</b> - False - True - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - GTK_PACK_END - - - - - 2 - False - False - - - - - - True - True - True - True - GTK_POS_TOP - False - False - - - - 4 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - 4 - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 0 - 0 - - - - True - <b>.:| C A S A |:.</b> -<b>Common Authentication Services Adapter</b> -Version 1.6 (c) 2006, Novell Inc. -....................................................................................................................... -CASA is the common cross-platform foundation for authentication and single sign-on services for the users of Novell Linux Desktop and Microsoft Windows operating systems. Applications that integrate CASA can securely authenticate and cache credentials for single sign-on purposes. - -CASA Manager provides users a single place to manage credentials for KWallet, Gnome Keyring and Firefox Password Manager. - False - True - GTK_JUSTIFY_CENTER - True - False - 0.5 - 0.5 - 6 - 6 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - - - - - False - True - - - - - - True - <b>About</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - 4 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - GTK_SHADOW_NONE - - - - True - False - 0 - - - - True - <b>Cameron Mashayekhi -Jim Norman -Poorna Pushkala -Ahmed SK Anis -Manohar Mathias -CSL Manojna -Nagareshwar Talekar -L Sreevatsa -Todd Throne -Juan Carlos Luciani -Michael Bright -Kal Larsen -Kyle Bullock -Colin Green -</b> - False - True - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 6 - 6 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - True - True - - - - - - - - - False - True - - - - - - True - <b>Contributors</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - - 4 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - True - GTK_JUSTIFY_CENTER - GTK_WRAP_WORD - True - 0 - 0 - 0 - 10 - 10 - 0 - -Copyright (C) 2005-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. - -.................................................ooO0Ooo................................................. - - - - - False - True - - - - - - True - <b>License</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - tab - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - True - CASA - Master Password - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ALWAYS - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 4 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Master Password Authentication</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - The Master Password is used to encrypt and -secure your persistent credentials. You are -prompted for the Master Password at startup. - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - 3 - 2 - False - 6 - 6 - - - - True - Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Re-enter Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - False - 512 - - True - * - False - - - - 1 - 2 - 1 - 2 - - - - - - - Remember for : - False - False - GTK_JUSTIFY_RIGHT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - False - 0 - - - - True - 1 - 0 - True - GTK_UPDATE_ALWAYS - False - False - 5 5 300 10 60 60 - - - 0 - True - True - - - - - - seconds - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 10 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - 1 - 2 - 2 - 3 - fill - fill - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - CASA Manager - Help - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_NORMAL - GDK_GRAVITY_NORTH_WEST - True - False - - - - True - False - 0 - - - - True - False - 0 - - - - True - GTK_ORIENTATION_HORIZONTAL - GTK_TOOLBAR_ICONS - True - True - - - - True - - True - gtk-home - True - True - False - - - False - True - - - - - - True - - True - gtk-go-back - True - False - False - - - False - True - - - - - - True - gtk-go-forward - True - True - False - - - False - True - - - - - 0 - True - True - - - - - 0 - False - False - - - - - - - - - - True - True - - - 0 - False - False - - - - - - - - 4 - True - Manage Secret - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-find-and-replace - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Manage Secrets and Key-Value pairs</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - To EDIT a Key-Value pair, select and single-click the respective Value and enter the new Value. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - 3 - 2 - False - 4 - 4 - - - - True - 0 - 1 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 6 - 6 - 6 - - - - True - 5 - 3 - False - 4 - 4 - - - - True - <b>Key:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - False - 0 - - - - True - Remove the selected Key-Value pair. - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-remove - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - 2 - 3 - 3 - 4 - fill - fill - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - True - False - True - False - False - False - - - - - 0 - 2 - 3 - 4 - - - - - - True - True - True - True - 512 - - True - * - False - - - 0 - 1 - 1 - 2 - - - - - - - True - True - True - True - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - Add the new Key-Value pair. - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-add - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 2 - 3 - 1 - 2 - fill - - - - - - - True - <b>Key-Value pairs:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 3 - 2 - 3 - fill - - - - - - - True - <b>Value:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 3 - 0 - 1 - fill - - - - - - - True - True - Show Values in clear text. - True - GTK_RELIEF_NORMAL - True - False - False - True - - - - 0 - 3 - 4 - 5 - fill - - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - 2 - 2 - 3 - fill - - - - - - True - <b>Secret ID:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 2 - 0 - 1 - fill - - - - - - - True - True - False - True - 512 - - True - * - False - - - 0 - 2 - 1 - 2 - - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ALWAYS - False - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-warning - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Cannot run CASAManager (GUI) as another -instance is already running.</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Quit from currently running instance of CASAManager -and try running CASAManager again. - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - False - True - - - - - - - - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - - True - True - True - True - True - GTK_RELIEF_NORMAL - True - -5 - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-redo - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Retry - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-warning - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Retry signing in entering the correct Master Password.</b> - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Further you can choose to quit CASAManager by cilcking the Close button. - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - True - True - GTK_RELIEF_NORMAL - True - -5 - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-redo - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Retry - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-warning - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Master Password is too short.</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - The Master Password should be at least eight characters in length. - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - CASA Manager - Debug Log - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - 300 - 300 - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - 0 - False - True - GTK_PACK_END - - - - - - 4 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - - - - True - Master Password - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 4 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Change Master Password</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - The Master Password is used to encrypt and -secure your persistent credentials. You are -prompted for the Master Password at startup. - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - 4 - 2 - False - 6 - 6 - - - - True - Current Master Password : - True - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryOldMP - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - New Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - False - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - Re-enter Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - Master Password Hint : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 3 - 4 - fill - - - - - - - True - True - True - 512 - - True - * - False - - - 1 - 2 - 3 - 4 - - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - Information - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ALWAYS - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-info - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>CASA Manager will continue to run as an icon in the system tray/notification area.</b> - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - True - Do not show this in the future - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - Workstation Password - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ALWAYS - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 4 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Enter Workstation Password</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - CASA encypts your credentials and writes them in your home directory. To retrieve them, please enter your workstation / desktop password. - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - True - - True - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - 2 - 2 - False - 6 - 6 - - - - True - Workstation Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Re-enter Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - False - 512 - - True - * - False - - - - 1 - 2 - 1 - 2 - - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - KDE Wallet - New Secret - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-new - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Adding Sign-On information for Konquerer</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Enter the URL of the website for which you wish to enable Single Sign-On in Konquerer web browser. Further, enter the username and password entries for that site in the corresponding textboxes. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - 1 - 2 - False - 4 - 4 - - - - True - 0 - 1 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 6 - 6 - 6 - - - - True - 8 - 2 - False - 4 - 4 - - - - True - Enter the form-element name of the password input textbox. - True - True - True - 512 - - True - * - False - - - 0 - 1 - 7 - 8 - - - - - - - True - <b>Password</b> -Key: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 6 - 7 - fill - - - - - - - True - Enter the form-element name of the username input textbox. - True - True - True - 512 - - True - * - False - - - 0 - 1 - 5 - 6 - - - - - - - True - <b>Username</b> -Key: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 4 - 5 - fill - - - - - - - True - Enter your password here. - True - True - False - 512 - - True - * - False - - - 1 - 2 - 7 - 8 - - - - - - - True - <b></b> -Value: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 2 - 6 - 7 - fill - - - - - - - True - Enter your username here. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 5 - 6 - - - - - - - True - <b></b> -Value: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 2 - 4 - 5 - fill - - - - - - - True - Enter the URL of the website here. - True - True - True - True - True - True - 512 - - True - * - False - - - 0 - 2 - 3 - 4 - - - - - - - True - <b>URL:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 2 - 2 - 3 - fill - - - - - - - True - <b>Templates:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 2 - 0 - 1 - fill - - - - - - - True - False - True - False - True - False - - - - True - True - False - True - 512 - - True - * - False - - - - - - - True - GTK_SELECTION_BROWSE - - - - - 0 - 2 - 1 - 2 - fill - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - 2 - 0 - 1 - fill - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - KDE Wallet - New Secret - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-new - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Adding Sign-On information for Kopete</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Enter the following account details for enabling Single Sign-On for Kopete instant messenger. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - 0 - 1 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 6 - 6 - 6 - - - - True - 3 - 2 - False - 4 - 4 - - - - True - Enter your username/screen name here. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - <b>Username:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - - - - - - - True - <b>Protocol:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - <b>Password:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - Enter your password here. - True - True - False - 512 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - False - True - False - True - False - - - - True - True - True - True - 512 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - - 1 - 2 - 0 - 1 - fill - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - GNOME Keyring - New Secret - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-new - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Adding Sign-On information for Network Manager</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Enter the following details to enable Single Sign-On for NetworkManager and Nautilus network browser. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - 0 - 1 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 6 - 6 - 6 - - - - True - 5 - 2 - False - 4 - 4 - - - - True - True - False - False - True - True - - - - True - True - False - True - 512 - - True - * - False - - - - - - - True - GTK_SELECTION_BROWSE - - - - True - True - - - - - - - - 1 - 2 - 0 - 1 - fill - fill - - - - - - True - <b>Server _type:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entry32 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - - - - - - - True - <b>_Server:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerUsername - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - <b>_Username:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerUsername - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - <b>_Password:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerPassword - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 3 - 4 - fill - - - - - - - True - Enter the hostname/IP address of the server. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - Enter your username here. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - Enter your password here. - True - True - False - 512 - - True - * - False - - - 1 - 2 - 3 - 4 - - - - - - - 4 - True - True - False - 4 - - - - True - 5 - 2 - False - 4 - 4 - - - - True - True - True - True - 512 - - True - * - False - - - 1 - 2 - 4 - 5 - - - - - - - True - Enter the Windows share name here. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 3 - 4 - - - - - - - True - Enter the port number. This is an optional information. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - Enter your folder name or the path. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - <b>_Domain name:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerDomain - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 4 - 5 - - - - - - - True - <b>S_hare:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerShare - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 3 - 4 - - - - - - - True - <b>_Port:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerPort - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - - - - - - - <b>_Folder:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerFolder - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - - - - - - - Enter a name for this connection. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - <b>Connection _name:</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - entryNetworkManagerCName - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - - - True - <b>_Optional information</b> - True - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - 2 - 4 - 5 - fill - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - GNOME Keyring - New Secret - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-new - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Adding Sign-On information for Gaim</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Enter the following account details for enabling Single Sign-On for Gaim instant messenger. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - 0 - 1 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 6 - 6 - 6 - - - - True - 3 - 2 - False - 4 - 4 - - - - True - Enter your username/screen name here. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - <b>Username:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - - - - - - - True - <b>Protocol:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - <b>Password:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - Enter your password here. - True - True - False - 512 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - False - True - False - True - False - - - - True - True - True - True - 512 - - True - * - False - - - - - - True - GTK_SELECTION_BROWSE - - - - - 1 - 2 - 0 - 1 - fill - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - KDE Wallet - New Secret - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-new - 5 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - False - True - - - - - - True - False - 0 - - - - True - <b>Adding Sign-On information for Firefox</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Enter the URL of the website for which you wish to enable Single Sign-On in Firefox web browser. Further, enter the username and password entries for that site in the corresponding textboxes. - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 12 - True - True - - - - - 0 - False - True - - - - - - True - 1 - 2 - False - 4 - 4 - - - - True - 0 - 1 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 6 - 6 - 6 - 6 - - - - True - 8 - 2 - False - 4 - 4 - - - - True - Enter the form-element name of the password input textbox. - True - True - True - 512 - - True - * - False - - - 0 - 1 - 7 - 8 - - - - - - - True - <b>Password</b> -Key: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 6 - 7 - fill - - - - - - - True - Enter the form-element name of the username input textbox. - True - True - True - 512 - - True - * - False - - - 0 - 1 - 5 - 6 - - - - - - - True - <b>Username</b> -Key: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 4 - 5 - fill - - - - - - - True - Enter your password here. - True - True - False - 512 - - True - * - False - - - 1 - 2 - 7 - 8 - - - - - - - True - <b></b> -Value: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 2 - 6 - 7 - fill - - - - - - - True - Enter your username here. - True - True - True - 512 - - True - * - False - - - 1 - 2 - 5 - 6 - - - - - - - True - <b></b> -Value: - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 1 - 2 - 4 - 5 - fill - - - - - - - True - Enter the URL of the website here. - True - True - True - True - True - True - 512 - - True - * - False - - - 0 - 2 - 3 - 4 - - - - - - - True - <b>URL:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 2 - 2 - 3 - fill - - - - - - - True - <b>Templates:</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 2 - 0 - 1 - fill - - - - - - - True - False - True - False - True - False - - - - True - True - False - True - 512 - - True - * - False - - - - - - - True - GTK_SELECTION_BROWSE - - - - - 0 - 2 - 1 - 2 - fill - - - - - - - - - - True - - False - True - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - label_item - - - - - 0 - 2 - 0 - 1 - fill - - - - - 6 - True - True - - - - - 0 - True - True - - - - - - - - True - Firefox - Master Password - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 6 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Master Password authentication</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - The Firefox password manager is locked with -a master password. Please enter the master -password to view the secrets. - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - 1 - 2 - False - 6 - 6 - - - - True - Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - - 1 - 2 - 0 - 1 - - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - 4 - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-warning - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>The Secret ID and Key names may only contain -the following characters -0-9, a-z, A-Z, and any of ~!@#$%^()_+-[]{};",./?</b> - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - Avoid using these special characters for Secret ID and Key names * : ' \ & = < > - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - False - True - - - - - - - - True - Warning - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - True - True - GTK_RELIEF_NORMAL - True - -3 - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-delete - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Delete - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - - True - True - True - True - True - GTK_RELIEF_NORMAL - True - -7 - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-redo - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Retry - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-warning - 6 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>The password you entered does not match.</b> - False - True - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - The password you entered does not match the one encrypting your secrets. You can retry entering your workstation password to recover your secrets, or you can delete them. - False - False - GTK_JUSTIFY_LEFT - True - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - CASA - Export Secrets - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ALWAYS - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 4 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Export miCASA Secrets</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - Your Master Password is required to -export your secrets. Your secrets will -be encrypted using your Master Password. - -If you wish, you can export your secrets -in clear text. - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - 3 - 2 - False - 6 - 6 - - - - True - Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - True - Do not encrypt export file - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 1 - 2 - 1 - 2 - fill - - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - CASA - Import Secrets - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ALWAYS - True - False - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 4 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Import miCASA Secrets</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - The file you selected appears -to be encypted. Please enter -the Master Password used -to encrypt this file - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - 6 - True - 3 - 2 - False - 6 - 6 - - - - True - Master Password : - False - False - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - True - True - False - 512 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - Choose File - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - 500 - 525 - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - Location: - False - False - GTK_JUSTIFY_RIGHT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - 50 - True - True - GTK_POLICY_NEVER - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - False - False - False - - - - - 8 - True - True - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - True - True - True - 0 - - True - * - False - - - 0 - True - True - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-go-up - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 8 - False - False - - - - - - True - True - New Folder - True - GTK_RELIEF_NORMAL - True - - - - 0 - False - False - - - - - 0 - False - False - - - - - - True - True - GTK_POLICY_NEVER - GTK_POLICY_ALWAYS - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - False - True - False - False - False - - - - - 6 - True - True - - - - - - True - False - 0 - - - - True - File name: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 5 - True - True - - - - - 0 - False - True - - - - - - True - False - 0 - - - - True - Filter: - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 5 - False - False - - - - - - True - True - True - True - 0 - *.casa - True - * - False - - - - 5 - True - True - - - - - 0 - False - True - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - New Folder - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - Enter folder name - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - True - True - 0 - - True - * - False - - - 0 - False - False - - - - - 0 - False - False - - - - - - - - - - - True - _Delete - True - - - - - - True - gtk-delete - 1 - 0.5 - 0.5 - 0 - 0 - - - - - - - - True - CASA - Debug File chooser - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - True - True - CASAicons.ico - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NONE - True - -11 - - - - - - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - False - 0 - - - - True - False - 0 - - - - True - gtk-dialog-authentication - 6 - 0.5 - 0.5 - 0 - 0 - - - 4 - False - True - - - - - 4 - True - True - - - - - - True - False - 0 - - - - True - <b>Debug file Chooser</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - - True - This will be removed - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 4 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - 0 - 0.5 - GTK_SHADOW_IN - - - - True - 0.5 - 0.5 - 1 - 1 - 0 - 0 - 12 - 0 - - - - True - 3 - 3 - False - 0 - 0 - - - - True - Save File - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 0 - 1 - fill - - - - - - - True - Open File - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 1 - 2 - fill - - - - - - - True - Choose Directory - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - 1 - 2 - 3 - fill - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 0 - 1 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 1 - 2 - - - - - - - True - True - True - True - 0 - - True - * - False - - - 1 - 2 - 2 - 3 - - - - - - - True - True - Save As... - True - GTK_RELIEF_NORMAL - True - - - - 2 - 3 - 0 - 1 - fill - - - - - - - True - True - Open file - True - GTK_RELIEF_NORMAL - True - - - - 2 - 3 - 1 - 2 - fill - - - - - - - True - True - Choose Dir - True - GTK_RELIEF_NORMAL - True - - - - 2 - 3 - 2 - 3 - fill - - - - - - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - True - Edit Secret Policy - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - 200 - 530 - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NORMAL - True - -11 - - - - - - True - True - True - gtk-apply - True - GTK_RELIEF_NORMAL - True - -10 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - 64 - 64 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_ALWAYS - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - - - - True - Select non-persistent Secrets - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_CENTER_ON_PARENT - True - 250 - 500 - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - True - False - True - - - - True - False - 0 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NORMAL - True - -11 - - - - - - True - True - True - gtk-apply - True - GTK_RELIEF_NORMAL - True - -10 - - - - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - False - 0 - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - - True - False - 0 - - - - True - - - - - - - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - PANGO_ELLIPSIZE_NONE - -1 - False - 0 - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-go-forward - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 7 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - - True - gtk-go-back - 4 - 0.5 - 0.5 - 0 - 0 - - - - - 0 - False - False - - - - - 19 - False - True - - - - - - True - True - GTK_POLICY_ALWAYS - GTK_POLICY_ALWAYS - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - False - True - False - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - + + + + + + + Novell CASA Manager + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER + False + 250 + 525 + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + False + + + + True + False + 0 + + + + True + False + 0 + + + + True + GTK_PACK_DIRECTION_LTR + GTK_PACK_DIRECTION_LTR + + + + True + _File + True + + + + + + + + True + _New + True + + + + True + gtk-new + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + True + New _Secret + True + + + + + True + gtk-new + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + New _Key + True + + + + + True + gtk-new + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + + + + True + _Refresh Stores + True + + + + + + True + gtk-refresh + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + _Lock Secrets + True + + + + + True + gtk-dialog-authentication + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Unlock Secrets + True + + + + + True + gtk-open + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Destroy Secrets + True + + + + + True + gtk-delete + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + _Export Secrets + True + + + + + True + gtk-floppy + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Import Secrets + True + + + + + True + gtk-open + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + _Exit + True + + + + + + True + gtk-quit + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + + + + True + _Edit + True + + + + + + + + True + _View + True + + + + + + True + gtk-zoom-fit + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Link + True + + + + + True + gtk-jump-to + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Copy + True + + + + + True + gtk-copy + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + _Delete + True + + + + + + True + gtk-delete + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + + + + True + _Options + True + + + + + + + + True + _Application SSO + True + + + + True + gtk-execute + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + True + _Konquerer + True + + + + + True + gtk-execute + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + K_opete + True + + + + + True + gtk-execute + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _NetworkManager + True + + + + + True + gtk-execute + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Gaim + True + + + + + True + gtk-execute + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + + + + True + _Change Master Password + True + + + + + True + gtk-revert-to-saved + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + _Preferences + True + + + + + True + gtk-preferences + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + P_olicies + True + + + + + + True + gtk-properties + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + + + + True + _Debug + True + + + + + + + True + _Create Test Secrets + True + + + + + True + gtk-add + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Remove Test Secrets + True + + + + + True + gtk-remove + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + Debug File Chooser + True + + + + + + + True + + + + + + True + Enable _Logging + True + False + + + + + + + + + + + True + _Help + True + + + + + + + True + _Contents + True + + + + + + True + gtk-help + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + _About CASA + True + + + + + True + gtk-dialog-info + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + + + + 0 + True + True + + + + + 0 + False + False + + + + + + True + False + 0 + + + + True + casa-logo-left.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + + + 0 + True + True + + + + + + True + casa-logo-right.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 0 + False + True + + + + + + 8 + True + True + True + True + True + True + False + GTK_POS_TOP + True + False + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + True + True + False + True + False + False + False + + + + + 0 + True + True + + + + + + True + <b>:: Native Information ::</b> + False + True + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + True + False + True + False + False + False + + + + + 0 + False + True + + + + + False + True + + + + + + True + False + 0 + + + + True + CASA_32.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + <b>miCASA</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + False + True + False + False + False + + + + + 0 + True + True + + + + + + True + <b>:: Native Information ::</b> + False + True + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + True + False + True + False + False + False + + + + + 0 + False + True + + + + + False + True + + + + + + True + False + 0 + + + + True + firefox-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + <b>Firefox</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + False + True + False + False + False + + + + + 0 + True + True + + + + + + True + <b>:: Native Information ::</b> + False + True + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + True + False + True + False + False + False + + + + + 0 + False + True + + + + + False + True + + + + + + True + False + 0 + + + + True + mozilla-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + <b>Mozilla</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + False + True + False + False + False + + + + + 0 + True + True + + + + + + True + <b>:: Native Information ::</b> + False + True + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + True + False + True + False + False + False + + + + + 0 + False + True + + + + + False + True + + + + + + True + False + 0 + + + + True + kwallet-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + <b>KDE Wallet</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + False + True + False + False + False + + + + + 0 + True + True + + + + + + True + <b>:: Native Information ::</b> + False + True + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + True + False + True + False + False + False + + + + + 0 + False + True + + + + + False + True + + + + + + True + False + 0 + + + + True + keyring-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + <b>GNOME Keyring</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + 0 + True + True + + + + + + True + True + + + 0 + False + False + GTK_PACK_END + + + + + + + + 4 + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-no + True + GTK_RELIEF_NORMAL + True + -9 + + + + + + + True + True + True + True + True + gtk-yes + True + GTK_RELIEF_NORMAL + True + -8 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-question + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Are you sure you want to Refresh +all the stores?</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Refreshing stores will fetch Secrets from +their backend stores. + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + True + Do not show this in the future + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + New Secret + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-new + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Add new Secrets or Key-Value pairs</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Enter the Key-value pairs and click Add button to add Key-Value pairs or click Delete button to remove newly added Key-Value pairs from the list. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + 3 + 2 + False + 4 + 4 + + + + True + 0 + 1 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 6 + 6 + + + + True + 5 + 3 + False + 4 + 4 + + + + True + <b>Key:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + False + 0 + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-remove + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + 2 + 3 + 3 + 4 + fill + fill + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + False + True + False + False + False + + + + + 0 + 2 + 3 + 4 + + + + + + True + True + True + True + 512 + + True + * + False + + + 0 + 1 + 1 + 2 + + + + + + + True + True + True + True + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-add + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 2 + 3 + 1 + 2 + fill + + + + + + + True + <b>Key-Value pairs:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 3 + 2 + 3 + fill + + + + + + + True + <b>Value:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 3 + 0 + 1 + fill + + + + + + + True + True + Show Values in clear text. + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + 0 + 3 + 4 + 5 + fill + + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + 2 + 2 + 3 + fill + + + + + + True + <b>Secret ID:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 2 + 0 + 1 + fill + + + + + + + True + True + True + True + 512 + + True + * + False + + + 0 + 2 + 1 + 2 + + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + Link Key-Value pairs + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-jump-to + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Link Key-Value pairs</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + True + + + + + + True + You can link two or more keys using this dialog. Further, linking two password keys will keep their values synchronized. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + False + 0 + + + + True + 3 + 2 + False + 3 + 6 + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + True + <b>Key:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + fill + + + + + + True + <b>Value:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + fill + + + + + + True + <b>Secret ID:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + fill + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 2 + 0 + 1 + fill + + + + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 2 + 1 + 2 + fill + + + + + + 0 + True + True + + + + + 6 + False + True + + + + + + True + 0 + 0 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 10 + 10 + 10 + + + + True + 5 + 3 + False + 4 + 4 + + + + True + False + 0 + + + + True + Remove the Link of selected Key-Value pair. + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-remove + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + 2 + 3 + 4 + 5 + fill + fill + + + + + + True + <b>Existing Linked Keys:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 3 + 3 + 4 + fill + + + + + + + True + + + 0 + 3 + 2 + 3 + 4 + fill + fill + + + + + + True + False + 0 + + + + True + Link the selected Key-Value pair. + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-add + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 32 + False + False + + + + + 2 + 3 + 1 + 2 + fill + fill + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + False + True + False + False + False + + + + + 0 + 2 + 4 + 5 + fill + + + + + + True + <b>Select the Keys to be Linked:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 4 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 3 + 0 + 1 + fill + + + + + + + True + True + True + False + GTK_POS_TOP + True + False + + + + True + False + 0 + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + True + False + False + False + + + + + 0 + True + True + + + + + + True + GTK_ARROW_RIGHT + GTK_SHADOW_OUT + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + True + False + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + False + True + + + + + + True + False + 0 + + + + True + CASA_32.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + miCASA + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + True + False + False + False + + + + + 0 + True + True + + + + + False + True + + + + + + True + False + 0 + + + + True + firefox-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + Firefox + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + True + False + False + False + + + + + 0 + True + True + + + + + False + True + + + + + + True + False + 0 + + + + True + mozilla-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + Mozilla + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + True + False + False + False + + + + + 0 + True + True + + + + + False + True + + + + + + True + False + 0 + + + + True + kwallet-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + KDE Wallet + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + + True + False + 0 + + + + 6 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + True + True + False + False + False + + + + + 0 + True + True + + + + + False + True + + + + + + True + False + 0 + + + + True + keyring-logo.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + GNOME Keyring + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 6 + False + False + + + + + tab + + + + + 0 + 2 + 1 + 2 + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-no + True + GTK_RELIEF_NORMAL + True + -9 + + + + + + + True + True + True + True + True + gtk-yes + True + GTK_RELIEF_NORMAL + True + -8 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-question + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Are you sure you want to delete this secret?</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + False + 0 + + + + True + <b>Secret ID : </b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + False + True + 0 + + False + * + False + + + 0 + True + True + + + + + 6 + False + False + + + + + + True + This will delete the selected secret and all its associated key-value pairs. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + Do not show this in the future + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + True + True + True + gtk-no + True + GTK_RELIEF_NORMAL + True + -9 + + + + + + True + True + True + True + True + gtk-yes + True + GTK_RELIEF_NORMAL + True + -8 + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-question + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Are you sure you want to Quit +the application?</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + This will quit the CASA Management +Console. + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + Persistent Storage + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 4 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Set Master Password for Persistent Storage</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + The Master Password is used to encrypt and +secure your persistent credentials. You are +prompted for the Master Password at startup. + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + 3 + 2 + False + 6 + 6 + + + + True + Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Re-enter Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + Master Password Hint : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + 1 + 2 + 0 + 1 + + + + + + + True + True + True + False + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + True + True + 512 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + Preferences + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 4 + True + False + 0 + + + + True + False + 0 + + + + True + True + Encrpyt and save miCASA secrets to disk (Persistent) + True + GTK_RELIEF_NORMAL + True + True + False + True + + + + 0 + False + False + + + + + 0 + True + True + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 3 + True + True + + + + + + True + True + GTK_RELIEF_NORMAL + False + + + + + True + gtk-find + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + + + True + <b> miCASA Store options </b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + False + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 4 + True + False + 0 + + + + True + True + Show CASA Manager icon in notify area + True + GTK_RELIEF_NORMAL + True + True + False + True + + + + 0 + False + False + + + + + + True + False + 0 + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + False + 0 + + + + True + True + Display CASA Manager when icon is clicked + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + 0 + False + False + + + + + + True + True + Lock/Unlock secrets when icon is clicked + True + GTK_RELIEF_NORMAL + True + False + False + True + radiobutton1 + + + + 0 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + + + True + <b> CASA Manager Options </b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + False + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 4 + True + False + 0 + + + + True + True + Firefox Password Manager + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + Mozilla Password Manager + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + True + KDE Wallet + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + True + True + GNOME Keyring + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 0 + False + False + + + + + + + + + + True + <b> Stores supported </b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + True + True + + + + + + 6 + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + False + 0 + + + + True + Refresh all stores after every + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + True + + + + + + True + True + 1 + 0 + False + GTK_UPDATE_ALWAYS + False + False + 0 0 100 1 10 10 + + + 4 + False + True + + + + + + True + seconds. + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + + + + + True + <b> Auto refresh</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + False + True + + + + + 0 + True + True + + + + + + + + + + + True + New _Secret + True + + + + + True + gtk-new + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + New _Key + True + + + + + True + gtk-new + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _View + True + + + + + + True + gtk-zoom-fit + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Link + True + + + + + True + gtk-jump-to + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + _Copy + True + + + + + True + gtk-copy + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + + + + + + True + _Delete + True + + + + + + True + gtk-delete + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + About CASA + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_EDGE + + + + True + True + True + GTK_RELIEF_NONE + True + -7 + + + + + True + novell-logo.png + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + 4 + True + False + 0 + + + + True + False + 0 + + + + True + casa-logo-left.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + + True + + + 0 + True + True + + + + + + True + casa-logo-right.png + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 0 + True + True + + + + + + True + False + 0 + + + + True + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + <b>Version 1.6</b> + False + True + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + GTK_PACK_END + + + + + 2 + False + False + + + + + + True + True + True + True + GTK_POS_TOP + False + False + + + + 4 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + 4 + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 0 + 0 + + + + True + <b>.:| C A S A |:.</b> +<b>Common Authentication Services Adapter</b> +Version 1.6 (c) 2006, Novell Inc. +....................................................................................................................... +CASA is the common cross-platform foundation for authentication and single sign-on services for the users of Novell Linux Desktop and Microsoft Windows operating systems. Applications that integrate CASA can securely authenticate and cache credentials for single sign-on purposes. + +CASA Manager provides users a single place to manage credentials for KWallet, Gnome Keyring and Firefox Password Manager. + False + True + GTK_JUSTIFY_CENTER + True + False + 0.5 + 0.5 + 6 + 6 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + + + + + False + True + + + + + + True + <b>About</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + tab + + + + + + 4 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + GTK_SHADOW_NONE + + + + True + False + 0 + + + + True + <b>Cameron Mashayekhi +Jim Norman +Poorna Pushkala +Ahmed SK Anis +Manohar Mathias +CSL Manojna +Nagareshwar Talekar +L Sreevatsa +Todd Throne +Juan Carlos Luciani +Michael Bright +Kal Larsen +Kyle Bullock +Colin Green +</b> + False + True + GTK_JUSTIFY_CENTER + False + False + 0.5 + 0.5 + 6 + 6 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + True + True + + + + + + + + + False + True + + + + + + True + <b>Contributors</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + tab + + + + + + 4 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + False + True + GTK_JUSTIFY_CENTER + GTK_WRAP_WORD + True + 0 + 0 + 0 + 10 + 10 + 0 + +Copyright (C) 2005-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. + +.................................................ooO0Ooo................................................. + + + + + False + True + + + + + + True + <b>License</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + tab + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + True + CASA - Master Password + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ALWAYS + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 4 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Master Password Authentication</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + The Master Password is used to encrypt and +secure your persistent credentials. You are +prompted for the Master Password at startup. + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + 3 + 2 + False + 6 + 6 + + + + True + Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Re-enter Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + + 1 + 2 + 0 + 1 + + + + + + + True + True + True + False + 512 + + True + * + False + + + + 1 + 2 + 1 + 2 + + + + + + + Remember for : + False + False + GTK_JUSTIFY_RIGHT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + False + 0 + + + + True + 1 + 0 + True + GTK_UPDATE_ALWAYS + False + False + 5 5 300 10 60 60 + + + 0 + True + True + + + + + + seconds + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 10 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + 1 + 2 + 2 + 3 + fill + fill + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + CASA Manager - Help + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_NORMAL + GDK_GRAVITY_NORTH_WEST + True + False + + + + True + False + 0 + + + + True + False + 0 + + + + True + GTK_ORIENTATION_HORIZONTAL + GTK_TOOLBAR_ICONS + True + True + + + + True + + True + gtk-home + True + True + False + + + False + True + + + + + + True + + True + gtk-go-back + True + False + False + + + False + True + + + + + + True + gtk-go-forward + True + True + False + + + False + True + + + + + 0 + True + True + + + + + 0 + False + False + + + + + + + + + + True + True + + + 0 + False + False + + + + + + + + 4 + True + Manage Secret + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-find-and-replace + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Manage Secrets and Key-Value pairs</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + To EDIT a Key-Value pair, select and single-click the respective Value and enter the new Value. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + 3 + 2 + False + 4 + 4 + + + + True + 0 + 1 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 6 + 6 + + + + True + 5 + 3 + False + 4 + 4 + + + + True + <b>Key:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + False + 0 + + + + True + Remove the selected Key-Value pair. + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-remove + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + 2 + 3 + 3 + 4 + fill + fill + + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + True + False + True + False + False + False + + + + + 0 + 2 + 3 + 4 + + + + + + True + True + True + True + 512 + + True + * + False + + + 0 + 1 + 1 + 2 + + + + + + + True + True + True + True + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + Add the new Key-Value pair. + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-add + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 2 + 3 + 1 + 2 + fill + + + + + + + True + <b>Key-Value pairs:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 3 + 2 + 3 + fill + + + + + + + True + <b>Value:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 3 + 0 + 1 + fill + + + + + + + True + True + Show Values in clear text. + True + GTK_RELIEF_NORMAL + True + False + False + True + + + + 0 + 3 + 4 + 5 + fill + + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + 2 + 2 + 3 + fill + + + + + + True + <b>Secret ID:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 2 + 0 + 1 + fill + + + + + + + True + True + False + True + 512 + + True + * + False + + + 0 + 2 + 1 + 2 + + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ALWAYS + False + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-warning + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Cannot run CASAManager (GUI) as another +instance is already running.</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Quit from currently running instance of CASAManager +and try running CASAManager again. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + False + True + + + + + + + + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + + True + True + True + True + True + GTK_RELIEF_NORMAL + True + -5 + + + + + True + 0.5 + 0.5 + 0 + 0 + 0 + 0 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-redo + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + _Retry + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-warning + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Retry signing in entering the correct Master Password.</b> + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Further you can choose to quit CASAManager by cilcking the Close button. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + True + True + GTK_RELIEF_NORMAL + True + -5 + + + + + True + 0.5 + 0.5 + 0 + 0 + 0 + 0 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-redo + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + _Retry + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-warning + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Master Password is too short.</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + The Master Password should be at least eight characters in length. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + CASA Manager - Debug Log + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_NONE + False + 300 + 300 + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + 0 + False + True + GTK_PACK_END + + + + + + 4 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + False + False + False + + + + + 0 + True + True + + + + + + + + True + Master Password + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 4 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Change Master Password</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + The Master Password is used to encrypt and +secure your persistent credentials. You are +prompted for the Master Password at startup. + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + 4 + 2 + False + 6 + 6 + + + + True + Current Master Password : + True + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryOldMP + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + New Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + 1 + 2 + 0 + 1 + + + + + + + True + True + True + False + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + Re-enter Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + Master Password Hint : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 3 + 4 + fill + + + + + + + True + True + True + 512 + + True + * + False + + + 1 + 2 + 3 + 4 + + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + Information + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ALWAYS + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-info + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>CASA Manager will continue to run as an icon in the system tray/notification area.</b> + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + True + Do not show this in the future + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + Workstation Password + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ALWAYS + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 4 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Enter Workstation Password</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + CASA encypts your credentials and writes them in your home directory. To retrieve them, please enter your workstation / desktop password. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + True + + True + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + 2 + 2 + False + 6 + 6 + + + + True + Workstation Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Re-enter Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + + 1 + 2 + 0 + 1 + + + + + + + True + True + True + False + 512 + + True + * + False + + + + 1 + 2 + 1 + 2 + + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + KDE Wallet - New Secret + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-new + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Adding Sign-On information for Konquerer</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Enter the URL of the website for which you wish to enable Single Sign-On in Konquerer web browser. Further, enter the username and password entries for that site in the corresponding textboxes. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + 1 + 2 + False + 4 + 4 + + + + True + 0 + 1 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 6 + 6 + + + + True + 8 + 2 + False + 4 + 4 + + + + True + Enter the form-element name of the password input textbox. + True + True + True + 512 + + True + * + False + + + 0 + 1 + 7 + 8 + + + + + + + True + <b>Password</b> +Key: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 6 + 7 + fill + + + + + + + True + Enter the form-element name of the username input textbox. + True + True + True + 512 + + True + * + False + + + 0 + 1 + 5 + 6 + + + + + + + True + <b>Username</b> +Key: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 4 + 5 + fill + + + + + + + True + Enter your password here. + True + True + False + 512 + + True + * + False + + + 1 + 2 + 7 + 8 + + + + + + + True + <b></b> +Value: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 2 + 6 + 7 + fill + + + + + + + True + Enter your username here. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 5 + 6 + + + + + + + True + <b></b> +Value: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 2 + 4 + 5 + fill + + + + + + + True + Enter the URL of the website here. + True + True + True + True + True + True + 512 + + True + * + False + + + 0 + 2 + 3 + 4 + + + + + + + True + <b>URL:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 2 + 2 + 3 + fill + + + + + + + True + <b>Templates:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 2 + 0 + 1 + fill + + + + + + + True + False + True + False + True + False + + + + True + True + False + True + 512 + + True + * + False + + + + + + + True + GTK_SELECTION_BROWSE + + + + + 0 + 2 + 1 + 2 + fill + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + 2 + 0 + 1 + fill + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + KDE Wallet - New Secret + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-new + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Adding Sign-On information for Kopete</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Enter the following account details for enabling Single Sign-On for Kopete instant messenger. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + 0 + 1 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 6 + 6 + + + + True + 3 + 2 + False + 4 + 4 + + + + True + Enter your username/screen name here. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + <b>Username:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + + + + + + + True + <b>Protocol:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + <b>Password:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + Enter your password here. + True + True + False + 512 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + True + False + True + False + True + False + + + + True + True + True + True + 512 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + + 1 + 2 + 0 + 1 + fill + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + GNOME Keyring - New Secret + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-new + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Adding Sign-On information for Network Manager</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Enter the following details to enable Single Sign-On for NetworkManager and Nautilus network browser. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + 0 + 1 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 6 + 6 + + + + True + 5 + 2 + False + 4 + 4 + + + + True + True + False + False + True + True + + + + True + True + False + True + 512 + + True + * + False + + + + + + + True + GTK_SELECTION_BROWSE + + + + True + True + + + + + + + + 1 + 2 + 0 + 1 + fill + fill + + + + + + True + <b>Server _type:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entry32 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + + + + + + + True + <b>_Server:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerUsername + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + <b>_Username:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerUsername + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + <b>_Password:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerPassword + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 3 + 4 + fill + + + + + + + True + Enter the hostname/IP address of the server. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + Enter your username here. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + True + Enter your password here. + True + True + False + 512 + + True + * + False + + + 1 + 2 + 3 + 4 + + + + + + + 4 + True + True + False + 4 + + + + True + 5 + 2 + False + 4 + 4 + + + + True + True + True + True + 512 + + True + * + False + + + 1 + 2 + 4 + 5 + + + + + + + True + Enter the Windows share name here. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 3 + 4 + + + + + + + True + Enter the port number. This is an optional information. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + Enter your folder name or the path. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + <b>_Domain name:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerDomain + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 4 + 5 + + + + + + + True + <b>S_hare:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerShare + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 3 + 4 + + + + + + + True + <b>_Port:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerPort + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + + + + + + + <b>_Folder:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerFolder + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + + + + + + + Enter a name for this connection. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 0 + 1 + + + + + + + <b>Connection _name:</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + entryNetworkManagerCName + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + + + True + <b>_Optional information</b> + True + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + 2 + 4 + 5 + fill + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + GNOME Keyring - New Secret + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-new + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Adding Sign-On information for Gaim</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Enter the following account details for enabling Single Sign-On for Gaim instant messenger. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + 0 + 1 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 6 + 6 + + + + True + 3 + 2 + False + 4 + 4 + + + + True + Enter your username/screen name here. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + <b>Username:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + + + + + + + True + <b>Protocol:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + <b>Password:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + Enter your password here. + True + True + False + 512 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + True + False + True + False + True + False + + + + True + True + True + True + 512 + + True + * + False + + + + + + True + GTK_SELECTION_BROWSE + + + + + 1 + 2 + 0 + 1 + fill + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + KDE Wallet - New Secret + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-new + 5 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + False + True + + + + + + True + False + 0 + + + + True + <b>Adding Sign-On information for Firefox</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Enter the URL of the website for which you wish to enable Single Sign-On in Firefox web browser. Further, enter the username and password entries for that site in the corresponding textboxes. + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 12 + True + True + + + + + 0 + False + True + + + + + + True + 1 + 2 + False + 4 + 4 + + + + True + 0 + 1 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 6 + 6 + 6 + 6 + + + + True + 8 + 2 + False + 4 + 4 + + + + True + Enter the form-element name of the password input textbox. + True + True + True + 512 + + True + * + False + + + 0 + 1 + 7 + 8 + + + + + + + True + <b>Password</b> +Key: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 6 + 7 + fill + + + + + + + True + Enter the form-element name of the username input textbox. + True + True + True + 512 + + True + * + False + + + 0 + 1 + 5 + 6 + + + + + + + True + <b>Username</b> +Key: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 4 + 5 + fill + + + + + + + True + Enter your password here. + True + True + False + 512 + + True + * + False + + + 1 + 2 + 7 + 8 + + + + + + + True + <b></b> +Value: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 2 + 6 + 7 + fill + + + + + + + True + Enter your username here. + True + True + True + 512 + + True + * + False + + + 1 + 2 + 5 + 6 + + + + + + + True + <b></b> +Value: + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 1 + 2 + 4 + 5 + fill + + + + + + + True + Enter the URL of the website here. + True + True + True + True + True + True + 512 + + True + * + False + + + 0 + 2 + 3 + 4 + + + + + + + True + <b>URL:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 2 + 2 + 3 + fill + + + + + + + True + <b>Templates:</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 2 + 0 + 1 + fill + + + + + + + True + False + True + False + True + False + + + + True + True + False + True + 512 + + True + * + False + + + + + + + True + GTK_SELECTION_BROWSE + + + + + 0 + 2 + 1 + 2 + fill + + + + + + + + + + True + + False + True + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + label_item + + + + + 0 + 2 + 0 + 1 + fill + + + + + 6 + True + True + + + + + 0 + True + True + + + + + + + + True + Firefox - Master Password + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 6 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Master Password authentication</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + The Firefox password manager is locked with +a master password. Please enter the master +password to view the secrets. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + 1 + 2 + False + 6 + 6 + + + + True + Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + + 1 + 2 + 0 + 1 + + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-warning + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>The Secret ID and Key names may only contain +the following characters +0-9, a-z, A-Z, and any of ~!@#$%^()_+-[]{};",./?</b> + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Avoid using these special characters for Secret ID and Key names * : ' \ & = < > + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + False + True + + + + + + + + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + True + True + GTK_RELIEF_NORMAL + True + -3 + + + + + True + 0.5 + 0.5 + 0 + 0 + 0 + 0 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-delete + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + _Delete + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + + + + + + + True + True + True + True + True + GTK_RELIEF_NORMAL + True + -7 + + + + + True + 0.5 + 0.5 + 0 + 0 + 0 + 0 + 0 + 0 + + + + True + False + 2 + + + + True + gtk-redo + 4 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + False + + + + + + True + _Retry + True + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-warning + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>The password you entered does not match.</b> + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + The password you entered does not match the one encrypting your secrets. You can retry entering your workstation password to recover your secrets, or you can delete them. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + CASA - Export Secrets + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ALWAYS + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 4 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Export miCASA Secrets</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + Your Master Password is required to +export your secrets. Your secrets will +be encrypted using your Master Password. + +If you wish, you can export your secrets +in clear text. + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + 3 + 2 + False + 6 + 6 + + + + True + Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + 1 + 2 + 0 + 1 + + + + + + + True + True + Do not encrypt export file + True + GTK_RELIEF_NORMAL + True + False + False + True + + + 1 + 2 + 1 + 2 + fill + + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + CASA - Import Secrets + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ALWAYS + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 4 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Import miCASA Secrets</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + The file you selected appears +to be encypted. Please enter +the Master Password used +to encrypt this file + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + 6 + True + 3 + 2 + False + 6 + 6 + + + + True + Master Password : + False + False + GTK_JUSTIFY_LEFT + False + False + 1 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + True + True + False + 512 + + True + * + False + + + 1 + 2 + 0 + 1 + + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + Choose File + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + 500 + 525 + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + Location: + False + False + GTK_JUSTIFY_RIGHT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + 50 + True + True + GTK_POLICY_NEVER + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + False + False + False + True + False + False + False + + + + + 8 + True + True + + + + + 0 + True + True + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + True + True + True + 0 + + True + * + False + + + 0 + True + True + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-go-up + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 8 + False + False + + + + + + True + True + New Folder + True + GTK_RELIEF_NORMAL + True + + + + 0 + False + False + + + + + 0 + False + False + + + + + + True + True + GTK_POLICY_NEVER + GTK_POLICY_ALWAYS + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + False + False + False + + + + + 6 + True + True + + + + + + True + False + 0 + + + + True + File name: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 5 + True + True + + + + + 0 + False + True + + + + + + True + False + 0 + + + + True + Filter: + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + True + True + True + 0 + *.casa + True + * + False + + + + 5 + True + True + + + + + 0 + False + True + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + New Folder + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + Enter folder name + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + True + True + 0 + + True + * + False + + + 0 + False + False + + + + + 0 + False + False + + + + + + + + + + + True + _Delete + True + + + + + + True + gtk-delete + 1 + 0.5 + 0.5 + 0 + 0 + + + + + + + + True + CASA - Debug File chooser + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + True + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NONE + True + -11 + + + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-authentication + 6 + 0.5 + 0.5 + 0 + 0 + + + 4 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>Debug file Chooser</b> + False + True + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + + True + This will be removed + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + 6 + True + 0 + 0.5 + GTK_SHADOW_IN + + + + True + 0.5 + 0.5 + 1 + 1 + 0 + 0 + 12 + 0 + + + + True + 3 + 3 + False + 0 + 0 + + + + True + Save File + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 0 + 1 + fill + + + + + + + True + Open File + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 1 + 2 + fill + + + + + + + True + Choose Directory + False + False + GTK_JUSTIFY_LEFT + False + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + 1 + 2 + 3 + fill + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 2 + 0 + 1 + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 2 + 1 + 2 + + + + + + + True + True + True + True + 0 + + True + * + False + + + 1 + 2 + 2 + 3 + + + + + + + True + True + Save As... + True + GTK_RELIEF_NORMAL + True + + + + 2 + 3 + 0 + 1 + fill + + + + + + + True + True + Open file + True + GTK_RELIEF_NORMAL + True + + + + 2 + 3 + 1 + 2 + fill + + + + + + + True + True + Choose Dir + True + GTK_RELIEF_NORMAL + True + + + + 2 + 3 + 2 + 3 + fill + + + + + + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + True + Edit Secret Policy + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + 200 + 530 + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NORMAL + True + -11 + + + + + + True + True + True + gtk-apply + True + GTK_RELIEF_NORMAL + True + -10 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + 64 + 64 + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_ALWAYS + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + False + False + False + + + + + 0 + True + True + + + + + + + + True + Select non-persistent Secrets + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + 250 + 500 + True + False + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-help + True + GTK_RELIEF_NORMAL + True + -11 + + + + + + True + True + True + gtk-apply + True + GTK_RELIEF_NORMAL + True + -10 + + + + + + + True + True + True + gtk-cancel + True + GTK_RELIEF_NORMAL + True + -6 + + + + + + + True + True + True + gtk-ok + True + GTK_RELIEF_NORMAL + True + -5 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + False + False + False + + + + + 0 + True + True + + + + + + True + False + 0 + + + + True + + + + + + + + False + False + GTK_JUSTIFY_LEFT + False + False + 0.5 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 0 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-go-forward + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 7 + False + False + + + + + + True + True + GTK_RELIEF_NORMAL + True + + + + + True + gtk-go-back + 4 + 0.5 + 0.5 + 0 + 0 + + + + + 0 + False + False + + + + + 19 + False + True + + + + + + True + True + GTK_POLICY_ALWAYS + GTK_POLICY_ALWAYS + GTK_SHADOW_IN + GTK_CORNER_TOP_LEFT + + + + True + True + True + False + False + True + False + False + False + + + + + 0 + True + True + + + + + 0 + True + True + + + + + + + + 4 + True + Warning + GTK_WINDOW_TOPLEVEL + GTK_WIN_POS_CENTER_ON_PARENT + True + False + True + CASAicons.ico + True + False + False + GDK_WINDOW_TYPE_HINT_DIALOG + GDK_GRAVITY_NORTH_WEST + True + False + True + + + + True + False + 0 + + + + True + GTK_BUTTONBOX_END + + + + True + True + True + gtk-close + True + GTK_RELIEF_NORMAL + True + -7 + + + + + + 0 + False + True + GTK_PACK_END + + + + + + True + False + 0 + + + + True + False + 0 + + + + True + gtk-dialog-warning + 6 + 0.5 + 0.5 + 0 + 0 + + + 0 + False + True + + + + + 4 + True + True + + + + + + True + False + 0 + + + + True + <b>A Firefox Password Manager secret should have two key-value pairs.</b> + False + True + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 5 + False + False + + + + + + True + Add two key-value pairs with one of them flagged as password by enabling the corresponding checkbox. + False + False + GTK_JUSTIFY_LEFT + True + False + 0 + 0.5 + 0 + 0 + PANGO_ELLIPSIZE_NONE + -1 + False + 0 + + + 4 + False + False + + + + + 0 + True + True + + + + + 0 + False + True + + + + + + +