javatools/javasecuritycustomization/src.s60/main.cpp
branchRCL_3
changeset 14 04becd199f91
--- /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 <f32file.h>
+#include <centralrepository.h>
+#include <SWInstallerInternalCRKeys.h>
+#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