diff -r f5050f1da672 -r 04becd199f91 javatools/javasecuritycustomization/src.s60/main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javatools/javasecuritycustomization/src.s60/main.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,212 @@ +/* +* Copyright (c) 2008 - 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +*/ + +#include +#include +#include +#include "comms.h" +#include "commsclientendpoint.h" +#include "commsmessage.h" +#include "securitycommsmessagedefs.h" + +static const TUid KCRUidJavaSecurity = { 0x2001B289 }; +static const TUint32 KPolicy = 0x03; +static const TUint32 KWarningsMode = 0x04; + +using namespace java::comms; + +static void DoL() +{ + RFile policyConfigFile; + RFile certsFile; + RFs fsSession; + User::LeaveIfError(fsSession.Connect()); + TInt err = policyConfigFile.Open(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\old_policy.txt"), EFileStreamText | EFileRead); + TBuf8<256> oldPolicy; + TBuf8<256> newPolicy; + TBuf8<256> oldWarningsMode; + TBuf8<256> newWarningsMode; + bool updateCerts = false; + bool removeCerts = false; + if (err == KErrNone) + { + policyConfigFile.Read(oldPolicy); + policyConfigFile.Close(); + } + else + { + err = policyConfigFile.Open(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\new_policy.txt"), EFileStreamText | EFileRead); + if (err == KErrNone) + { + policyConfigFile.Read(newPolicy); + policyConfigFile.Close(); + } + } + err = policyConfigFile.Open(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\old_warnings_mode.txt"), EFileStreamText | EFileRead); + if (err == KErrNone) + { + policyConfigFile.Read(oldWarningsMode); + policyConfigFile.Close(); + } + else + { + err = policyConfigFile.Open(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\new_warnings_mode.txt"), EFileStreamText | EFileRead); + if (err == KErrNone) + { + policyConfigFile.Read(newWarningsMode); + policyConfigFile.Close(); + } + } + err = certsFile.Open(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\update_certs"), EFileStreamText | EFileRead); + if (err == KErrNone) + { + updateCerts = true; + certsFile.Close(); + } + err = certsFile.Open(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\remove_certs"), EFileStreamText | EFileRead); + if (err == KErrNone) + { + removeCerts = true; + certsFile.Close(); + } + if (oldPolicy.Length() > 0) + { + // restore the old policy + CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity); + HBufC* tmp = HBufC::NewLC(oldPolicy.Length()); + TPtr tmpPtr(tmp->Des()); + tmpPtr.Copy(oldPolicy); + repository->Set(KPolicy, tmpPtr); + CleanupStack::PopAndDestroy(tmp); + CleanupStack::PopAndDestroy(repository); + // remove the directory + CFileMan* fileMan = CFileMan::NewL(fsSession); + fileMan->RmDir(_L("c:\\private\\102033E6\\security\\tmp")); + delete fileMan; + } + else if (newPolicy.Length() > 0) + { + // save the old policy into old_policy.txt + CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity); + HBufC* buf = HBufC::NewLC(NCentralRepositoryConstants::KMaxUnicodeStringLength); + TPtr policy(buf->Des()); + repository->Get(KPolicy, policy); + TInt err = policyConfigFile.Replace(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\old_policy.txt"), EFileStreamText | EFileWrite); + if (err == KErrNone) + { + HBufC8* tmp8 = HBufC8::NewLC(policy.Length()); + TPtr8 tmpPtr8(tmp8->Des()); + tmpPtr8.Copy(policy); + policyConfigFile.Write(tmpPtr8); + CleanupStack::PopAndDestroy(tmp8); + policyConfigFile.Close(); + // write the new policy + HBufC* tmp = HBufC::NewLC(newPolicy.Length()); + TPtr tmpPtr(tmp->Des()); + tmpPtr.Copy(newPolicy); + repository->Set(KPolicy, tmpPtr); + CleanupStack::PopAndDestroy(tmp); + } + CleanupStack::PopAndDestroy(buf); + CleanupStack::PopAndDestroy(repository); + } + if (oldWarningsMode.Length() > 0) + { + // restore the old value + CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity); + if (oldWarningsMode == _L8("1")) + { + repository->Set(KWarningsMode, 1); + } + else + { + repository->Set(KWarningsMode, 2); + } + CleanupStack::PopAndDestroy(repository); + // remove the directory + CFileMan* fileMan = CFileMan::NewL(fsSession); + fileMan->RmDir(_L("c:\\private\\102033E6\\security\\tmp")); + delete fileMan; + } + else if (newWarningsMode.Length() > 0) + { + // save the old value + CRepository* repository = CRepository::NewLC(KCRUidJavaSecurity); + TInt tmp; + repository->Get(KWarningsMode, tmp); + TInt err = policyConfigFile.Replace(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\old_warnings_mode.txt"), EFileStreamText | EFileWrite); + if (err == KErrNone) + { + if (tmp == 1) + { + policyConfigFile.Write(_L8("1")); + } + else + { + policyConfigFile.Write(_L8("2")); + } + policyConfigFile.Close(); + // write the new value + if (newWarningsMode == _L8("1")) + { + repository->Set(KWarningsMode, 1); + } + else + { + repository->Set(KWarningsMode, 2); + } + } + CleanupStack::PopAndDestroy(repository); + } + if (updateCerts || removeCerts) + { + if (removeCerts) + { + CFileMan* fileMan = CFileMan::NewL(fsSession); + fileMan->RmDir(_L("c:\\private\\102033E6\\security\\tmp")); + delete fileMan; + } + else + { + TInt err = certsFile.Replace(fsSession,_L("c:\\private\\102033E6\\security\\tmp\\remove_certs"), EFileStreamText | EFileWrite); + certsFile.Close(); + } + + // send the COMMS message to JavaCertStore to do the refresh + CommsClientEndpoint cli_conn; + if (cli_conn.connect(IPC_ADDRESS_JAVA_CAPTAIN_C) == 0) + { + CommsMessage s_msg; + CommsMessage r_msg; + s_msg.setModuleId(PLUGIN_ID_JAVA_CERT_STORE_EXTENSION_C); + s_msg.setMessageId(JAVA_CERT_STORE_MSG_ID_REQUEST); + s_msg << JAVA_CERT_STORE_OPERATION_REFRESH_CERTS; + cli_conn.send(s_msg); + } + } + fsSession.Close(); +} + +TInt E32Main() +{ + //__UHEAP_MARK; + CTrapCleanup* cleanupStack = CTrapCleanup::New(); + TRAPD(error, DoL()); + delete cleanupStack; + //__UHEAP_MARKEND; + return error; +} +// eof