--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrscriptmanager.cpp Mon Mar 30 12:51:20 2009 +0300
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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 "rtsecmgrscriptmanager.h"
+#include "rtsecmgrserverdef.h"
+
+#include "rtsecmgrstore.h"
+#include "rtsecmgrpolicy.h"
+#include "rtsecmgrpolicymanager.h"
+#include "rtsecmgrscriptmanager.h"
+
+#include <e32debug.h>
+//#include <centralrepository.h>
+
+_LIT(KDefaultTrustPolicy,"UnTrusted");
+
+CScriptManager* CScriptManager::NewL(CSecMgrStore* aSecMgrDB,CPolicyManager* aPolicyMgr)
+{
+ CScriptManager* pThis = CScriptManager::NewLC(aSecMgrDB,aPolicyMgr);
+ CleanupStack::Pop(pThis);
+ return pThis;
+}
+
+CScriptManager* CScriptManager::NewLC(CSecMgrStore* aSecMgrDB,CPolicyManager* aPolicyMgr)
+{
+ CScriptManager* pThis = new (ELeave) CScriptManager(aSecMgrDB,aPolicyMgr);
+ CleanupStack::PushL(pThis);
+ pThis->ConstructL();
+ return pThis;
+}
+
+CScriptManager::~CScriptManager()
+{
+ if(iSecMgrDB)
+ {
+ iSecMgrDB->WriteCounter(iID);
+ }
+
+ iScripts.ResetAndDestroy();
+}
+void CScriptManager::ConstructL()
+{
+ iSecMgrDB->ReadCounter(iID);
+}
+
+TExecutableID CScriptManager::RegisterScript(TPolicyID aPolicyID/*,const CTrustInfo& aTrustPolicy*/)
+{
+ TInt ret(ErrPolicyIDDoesNotExist);
+
+ CPolicy* policy = iPolicyMgr->Policy(aPolicyID);
+
+ if(policy)
+ {
+ CProtectionDomain* domain = policy->ProtectionDomain(KDefaultTrustPolicy);
+
+ if(domain)
+ {
+ TExecutableID execID(GetID());
+ CScript* script = CScript::NewL(aPolicyID,execID);
+ script->SetPermissionSet(domain->PermSet());
+ iScripts.Append(script);
+
+ TRAPD(err,iSecMgrDB->RegisterScriptL(execID,*script));
+
+ if(KErrNone==err)
+ {
+ return execID;
+ }
+ else
+ {
+ return ret;
+ }
+ }
+
+ }
+ return ret;
+
+}
+
+TExecutableID CScriptManager::RegisterScript(TPolicyID aPolicyID,const TDesC& aHashValue/*,const CTrustInfo& aTrustPolicy*/)
+ {
+ TInt ret(ErrPolicyIDDoesNotExist);
+
+ CPolicy* policy = iPolicyMgr->Policy(aPolicyID);
+
+ if(policy)
+ {
+ CProtectionDomain* domain = policy->ProtectionDomain(KDefaultTrustPolicy);
+
+ if(domain)
+ {
+ TExecutableID execID(GetID());
+ CScript* script = CScript::NewLC(aPolicyID,execID);
+ script->SetHashMarkL(aHashValue);
+ script->SetPermissionSet(domain->PermSet());
+ iScripts.Append(script);
+
+ TRAPD(err,iSecMgrDB->RegisterScriptL(execID, *script));
+
+ if(KErrNone==err)
+ {
+ ret=execID;
+ }
+ CleanupStack::Pop(script);
+ }
+
+ }
+ return ret;
+
+ }
+
+
+void CScriptManager::UnRegisterScriptL(TExecutableID aExecID,TPolicyID aPolicyID)
+{
+ TInt ret;
+ CScript *scriptInfo = CScript::NewL(KInvalidPolicyID ,aExecID);
+ ret = ScriptInfo(*scriptInfo);
+
+
+ if( (KErrNone<=ret) && (scriptInfo->PolicyID() != aPolicyID))
+ {
+ ret = ErrInvalidPolicyID;
+ }
+
+ delete scriptInfo;
+ scriptInfo = NULL;
+
+ if(ret == KErrNone)
+ {
+ for(TInt i=0; i!=iScripts.Count();++i)
+ {
+ if(iScripts[i]->ScriptID()==aExecID)
+ {
+ delete iScripts[i];
+ iScripts.Remove(i); //remove from the cache first
+ break;
+ }
+ }
+ iSecMgrDB->UnRegisterScriptL(aExecID);
+ }
+ else
+ User::Leave(ret);
+}
+
+TInt CScriptManager::ScriptInfo(CScript& aScriptInfo)
+{
+ //Check if script info is already present in the cache (iScriptStore)
+ //If yes,
+ for(TInt i=0; i!=iScripts.Count();++i)
+ {
+ if(iScripts[i]->ScriptID()==aScriptInfo.ScriptID())
+ {
+ {
+ aScriptInfo = *iScripts[i];
+ return KErrNone;
+ }
+ }
+ }
+
+ //Read the script file
+ TInt ret = iSecMgrDB->ReadScriptInfo(aScriptInfo.ScriptID(),aScriptInfo);
+
+ if(KErrNone==ret)
+ {
+ iScripts.AppendL(&aScriptInfo);
+ }
+
+ return ret;
+}
+
+TInt CScriptManager::GetScriptFile(TExecutableID aExecID,TDes& aScriptFile)
+{
+ return iSecMgrDB->GetScriptFile(aExecID,aScriptFile);
+}
+
+void CScriptManager::UpdatePermGrantL(TExecutableID aExecID,TPermGrant aPermGrant,TPermGrant aPermDenied)
+{
+ for(TInt i(0);i!=iScripts.Count();++i)
+ {
+ if(iScripts[i]->ScriptID()==aExecID)
+ {
+ iScripts[i]->SetPermGranted(aPermGrant);
+ iScripts[i]->SetPermDenied(aPermDenied);
+ iSecMgrDB->WriteScriptInfoL(aExecID,*iScripts[i]);
+ return;
+ }
+ }
+}