rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrstore.cpp
changeset 57 61b27eec6533
parent 45 7aa6007702af
--- a/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrstore.cpp	Fri Apr 16 15:54:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,593 +0,0 @@
-/*
-* Copyright (c) 2007-2008 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:       Definition of security manager store class
- *
-*/
-
-
-
-
-
-
-#include <s32file.h>
-#include <bautils.h>
-#include <eikenv.h>
-#include <f32file.h>
-#include <pathinfo.h>
-#include "rtsecmgrstore.h"
-#include "rtsecmgrdata.h"
-
-const TReal DEFAULT_VERSION(1.0);
-CSecMgrStore* CSecMgrStore::NewL()
-	{
-	CSecMgrStore* self = CSecMgrStore::NewLC ();
-	CleanupStack::Pop (self);
-	return self;
-	}
-
-CSecMgrStore* CSecMgrStore::NewLC()
-	{
-	CSecMgrStore* self = new (ELeave)CSecMgrStore();
-	CleanupStack::PushL (self);
-	self->ConstructL ();
-	return self;
-	}
-
-void CSecMgrStore::StorePolicyL(const CPolicy& aPolicy)
-	{
-	__UHEAP_MARK;
-
-	HBufC *policyFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(policyFile->Des());
-	GetPolicyFile (ptr, aPolicy.PolicyID ());
-
-	CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession, ptr,
-			EFileWrite);
-	store->SetTypeL (KPermanentFileStoreLayoutUid);
-
-	// Construct the output stream.
-	RStoreWriteStream outstream;
-	TStreamId id = outstream.CreateLC (*store);
-	//Write version of the policy
-	outstream.WriteReal32L (TReal(DEFAULT_VERSION));
-
-	TInt aliasCnt(aPolicy.AliasGroup().Count());
-	outstream.WriteInt32L (aliasCnt);
-	RAliasGroup aliasGroups = aPolicy.AliasGroup();
-	for (TInt i(0); i!=aliasCnt;++i)
-		{
-		CPermission* alias = aliasGroups[i];
-		alias->ExternalizeL (outstream);
-		}
-	
-	TInt domainCnt(aPolicy.ProtectionDomain().Count ());
-	outstream.WriteInt32L (domainCnt);
-	RProtectionDomains domains = aPolicy.ProtectionDomain ();
-	for (TInt i(0); i!=domainCnt;++i)
-		{
-		CProtectionDomain* domain = domains[i];
-		domain->ExternalizeL (outstream);
-		}
-
-	// Commit changes to the stream
-	outstream.CommitL ();
-
-	CleanupStack::PopAndDestroy (&outstream);
-
-	// Set this stream id as the root
-	store->SetRootL (id);
-
-	// Commit changes to the store
-	store->CommitL ();
-
-	CleanupStack::PopAndDestroy (store);
-	CleanupStack::PopAndDestroy (policyFile);
-	__UHEAP_MARKEND;
-	}
-
-
-TInt CSecMgrStore::RemovePolicy(TPolicyID aPolicyID)
-	{
-	HBufC *policyFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(policyFile->Des());
-	TInt ret(KErrNone);
-	
-	ret = GetPolicyFile(ptr, aPolicyID);
-	
-	if(KErrNone==ret)
-		ret  = iFsSession.Delete (ptr);
-	CleanupStack::PopAndDestroy(policyFile);
-	return ret;
-	}
-
-void CSecMgrStore::RestorePoliciesL(RPolicies& aPolicy)
-	{
-	//Fetch all the individual policy files from "epoc32\winscw\c\private\<SECMGR_UID>\policy" directory
-	//Iteratively internalise the policy files, with the policyID (PolicyID is = to filename)
-	HBufC *privateDir = HBufC::NewLC(KMaxName);
-	TPtr privateDirptr(privateDir->Des());
-	GetPolicyPath (privateDirptr);
-
-	// create search string
-	HBufC* searchBuf = privateDirptr.AllocLC ();
-	TPtr searchPtr(searchBuf->Des());
-
-	CDir* dir=  NULL;
-	iFsSession.GetDir (searchPtr, KEntryAttNormal,
-			ESortByName | EAscending, dir);
-
-	if ( dir)
-		{
-		CleanupStack::PushL (dir);
-		for (TInt i=0; i!=dir->Count ();++i)
-			{
-			TEntry entry = dir->operator[] (i);
-			HBufC *fileName = HBufC::NewLC(KMaxName);
-			TPtr ptr(fileName->Des());
-			ptr = entry.iName;
-
-			HBufC *policyFile = HBufC::NewLC(KMaxName);
-			TPtr policyFileptr(policyFile->Des());
-			policyFileptr.Copy(privateDirptr) ;
-			policyFileptr.Append (ptr);
-
-			CFileStore* store = CPermanentFileStore::OpenLC (iFsSession,
-					policyFileptr, EFileShareAny);
-
-			RStoreReadStream instream;
-			instream.OpenLC (*store, store->Root ());
-
-			TLex16 lexer(ptr);
-			TPolicyID pID;
-			lexer.Val (pID);
-
-			CPolicy* policy = CPolicy::NewL (pID, instream);
-			aPolicy.Append (policy);
-
-			CleanupStack::PopAndDestroy (&instream); //instream
-			CleanupStack::PopAndDestroy (store); //store
-			CleanupStack::PopAndDestroy (policyFile);
-			CleanupStack::PopAndDestroy (fileName);
-			}
-
-		CleanupStack::PopAndDestroy (dir);
-		}
-
-	CleanupStack::PopAndDestroy (searchBuf);
-	CleanupStack::PopAndDestroy (privateDir);
-	}
-
-void CSecMgrStore::RegisterScriptL(TExecutableID aExecID, const CScript& aScript)
-	{
-	HBufC *scriptFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(scriptFile->Des());
-	User::LeaveIfError(GetScriptFile(ptr,aExecID));
-
-	CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession, ptr,
-			EFileWrite);
-
-	// Must say what kind of file store.
-	store->SetTypeL (KPermanentFileStoreLayoutUid);
-
-	// Construct the output stream.
-	RStoreWriteStream outstream;
-	TStreamId id = outstream.CreateLC (*store);
-
-	aScript.ExternalizeL (outstream);
-
-	// Commit changes to the stream
-	outstream.CommitL ();
-
-	// Cleanup the stream object
-	CleanupStack::PopAndDestroy (&outstream);
-
-	// Set this stream id as the root
-	store->SetRootL (id);
-
-	// Commit changes to the store
-	store->CommitL ();
-
-	CleanupStack::PopAndDestroy (store);
-	CleanupStack::PopAndDestroy (scriptFile);
-
-	}
-
-void CSecMgrStore::UnRegisterScriptL(TExecutableID aExecID)
-	{
-	HBufC *scriptFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(scriptFile->Des());
-	User::LeaveIfError (GetScriptFile (ptr,aExecID));
-
-	if ( BaflUtils::FileExists (iFsSession, ptr))
-		iFsSession.Delete (ptr);
-	else
-		{
-		User::Leave(ErrInvalidScriptID);
-		}
-	CleanupStack::PopAndDestroy (scriptFile);
-	}
-
-TInt CSecMgrStore::ReadScriptInfo(TExecutableID aExecID, CScript& aScriptInfo)
-	{
-	__UHEAP_MARK;
-
-	HBufC *scriptFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(scriptFile->Des());
-	TInt ret(GetScriptFile (ptr, aExecID));
-
-	if ( KErrNone==ret)
-		{
-		if ( !BaflUtils::FileExists(iFsSession, ptr))
-			{
-			return ErrInvalidScriptID;
-			}
-
-		CFileStore* store=  NULL;
-		store=CPermanentFileStore::OpenLC (iFsSession, ptr,
-				EFileShareAny);
-
-		if ( KErrNone==ret)
-			{
-			RStoreReadStream instream;
-			instream.OpenLC (*store, store->Root ());
-
-			aScriptInfo.InternalizeL (instream);
-
-			CleanupStack::PopAndDestroy (&instream);
-			CleanupStack::PopAndDestroy (store);
-			}
-		return ret;
-		}
-	CleanupStack::PopAndDestroy (scriptFile);
-	__UHEAP_MARKEND;
-
-	return ret;
-	}
-
-TInt CSecMgrStore::GetScriptFile(TExecutableID aExecID, TDes& aScriptFile)
-	{
-	TInt ret(GetScriptFile (aScriptFile,aExecID));
-
-	if ( KErrNone==ret)
-		{
-		if ( !BaflUtils::FileExists(iFsSession, aScriptFile))
-			{
-			return ErrInvalidScriptID;
-			}
-		}
-
-	return ret;
-	}
-
-void CSecMgrStore::WriteScriptInfoL(TExecutableID aExecID, CScript& aScriptInfo)
-	{
-	__UHEAP_MARK;
-
-	HBufC *scriptFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(scriptFile->Des());
-	User::LeaveIfError (GetScriptFile (ptr,aExecID));
-
-	CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession, ptr,
-			EFileWrite);
-
-	// Must say what kind of file store.
-	store->SetTypeL (KPermanentFileStoreLayoutUid);
-
-	// Construct the output stream.
-	RStoreWriteStream outstream;
-	TStreamId id = outstream.CreateLC (*store);
-
-	aScriptInfo.ExternalizeL (outstream);
-
-	// Commit changes to the stream
-	outstream.CommitL ();
-
-	// Cleanup the stream object
-	CleanupStack::PopAndDestroy (&outstream);
-
-	// Set this stream id as the root
-	store->SetRootL (id);
-
-	// Commit changes to the store
-	store->CommitL ();
-
-	CleanupStack::PopAndDestroy (store);
-	CleanupStack::PopAndDestroy (scriptFile);
-	__UHEAP_MARKEND;
-	}
-
-TInt CSecMgrStore::ReadCounter(TExecutableID& aExecID)
-	{
-	HBufC *configFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(configFile->Des());
-	TInt ret(GetConfigFile (ptr));
-
-	if ( KErrNone==ret)
-		{
-		if ( !BaflUtils::FileExists(iFsSession,*configFile))
-			{
-			aExecID = (TExecutableID)KCRUIdSecMgr.iUid;
-			BaflUtils::EnsurePathExistsL (iFsSession, *configFile);
-			CleanupStack::PopAndDestroy (configFile);
-			return WriteCounter (aExecID);
-			}
-
-		CFileStore* store = CPermanentFileStore::OpenLC (iFsSession,
-				*configFile, EFileRead);
-
-		RStoreReadStream instream;
-		instream.OpenLC (*store, store->Root ());
-
-		aExecID = instream.ReadInt32L ();
-
-		CleanupStack::PopAndDestroy (&instream);
-		CleanupStack::PopAndDestroy (store);
-		}
-	CleanupStack::PopAndDestroy (configFile);
-	return ret;
-	}
-
-TInt CSecMgrStore::WriteCounter(TExecutableID aExecID)
-	{
-	HBufC *configFile = HBufC::NewLC(KMaxName);
-	TPtr ptr(configFile->Des());
-	TInt ret(GetConfigFile (ptr));
-
-	if ( KErrNone==ret)
-		{
-		CFileStore* store = CPermanentFileStore::ReplaceLC (iFsSession,
-				*configFile, EFileWrite);
-
-		// Must say what kind of file store.
-		store->SetTypeL (KPermanentFileStoreLayoutUid);
-
-		// Construct the output stream.
-		RStoreWriteStream outstream;
-		TStreamId id = outstream.CreateLC (*store);
-
-		outstream.WriteInt32L (aExecID);
-
-		// Commit changes to the stream
-		outstream.CommitL ();
-
-		// Cleanup the stream object
-		CleanupStack::PopAndDestroy (&outstream);
-
-		// Set this stream id as the root
-		store->SetRootL (id);
-
-		// Commit changes to the store
-		store->CommitL ();
-
-		CleanupStack::PopAndDestroy (store);
-		}
-	CleanupStack::PopAndDestroy (configFile);
-	return ret;
-	}
-
-TInt CSecMgrStore::GetPrivatePath(TDes& aPrivatePath)
-	{
-	TInt ret(KErrNone);
-	aPrivatePath.Append (KCDrive);
-
-	HBufC *privateDir = HBufC::NewLC(KMaxName);
-	TPtr ptr(privateDir->Des());
-	ret = iFsSession.PrivatePath (ptr);
-
-	if ( KErrNone==ret)
-		{
-		aPrivatePath.Append (ptr);
-		}
-	CleanupStack::PopAndDestroy (privateDir);
-	return ret;
-	}
-
-TInt CSecMgrStore::GetConfigFile(TDes& aConfigFile)
-	{
-	TInt ret(KErrNone);
-
-	aConfigFile.Append (KCDrive);
-
-	HBufC *privateDir = HBufC::NewLC(KMaxName);
-	TPtr ptr(privateDir->Des());
-	ret = iFsSession.PrivatePath (ptr);
-
-	if ( KErrNone==ret)
-		{
-		aConfigFile.Append (ptr);
-
-		ret = iFsSession.MkDirAll (ptr);
-
-		if ( KErrAlreadyExists==ret)
-			ret=KErrNone;
-
-		aConfigFile.Append (KConfigFile);
-		}
-	CleanupStack::PopAndDestroy (privateDir);
-	return ret;
-	}
-
-TInt CSecMgrStore::GetPolicyPath(TDes& aFile)
-	{
-	TInt ret(GetPrivatePath (aFile));
-
-	if ( KErrNone==ret)
-		{
-		aFile.Append (KPolicyDir);
-		aFile.Append (KDirSeparator);
-
-		TRAP (ret, BaflUtils::EnsurePathExistsL (iFsSession, aFile));
-		}
-
-	return ret;
-	}
-
-TInt CSecMgrStore::GetScriptPath(TDes& aFile)
-	{
-	TInt ret(GetPrivatePath (aFile));
-
-	if ( KErrNone==ret)
-		{
-		aFile.Append (KScriptDir);
-		aFile.Append (KDirSeparator);
-
-		TRAP (ret, BaflUtils::EnsurePathExistsL (iFsSession, aFile));
-
-		if ( KErrAlreadyExists==ret)
-			ret = KErrNone;
-		}
-
-	return ret;
-	}
-
-TInt CSecMgrStore::GetScriptFile(TDes& aFile, TExecutableID aExecID)
-	{
-	TInt ret(GetScriptPath (aFile));
-
-	if ( (KErrNone==ret) || (KErrAlreadyExists==ret))
-		{
-		if ( KAnonymousScript!=aExecID)
-			{
-			HBufC *fSuffix = HBufC::NewLC(KMaxName);
-			TPtr fSuffixPtr(fSuffix->Des());
-			fSuffixPtr.Num (aExecID);
-
-			aFile.Append (fSuffixPtr);
-			aFile.Append (KDatExtn);
-			CleanupStack::PopAndDestroy (fSuffix);
-			}
-		}
-
-	if ( KErrAlreadyExists==ret)
-		ret=KErrNone;
-
-	return ret;
-	}
-
-TInt CSecMgrStore::GetPolicyFile(TDes& aFile, TPolicyID aPolicyID)
-	{
-	TInt ret(GetPolicyPath (aFile));
-
-	if ( (KErrNone==ret) || (KErrAlreadyExists==ret))
-		{
-		HBufC *fPolicyName = HBufC::NewLC(KMaxName);
-		TPtr policyNamePtr(fPolicyName->Des());
-		policyNamePtr.Num (aPolicyID);
-
-		aFile.Append (policyNamePtr);
-		aFile.Append (KDatExtn);
-		CleanupStack::PopAndDestroy (fPolicyName);
-		}
-
-	return ret;
-	}
-
-
-TInt CSecMgrStore::BackupFile(TPolicyID aPolicyID)
-{
-	HBufC *policyFile = HBufC::NewLC(KMaxName);
-	TPtr policyFilePtr(policyFile->Des());
-	
-	HBufC *tempPolicyFile = HBufC::NewLC(KMaxName);
-	TPtr tempPolicyFilePtr(tempPolicyFile->Des());
-	
-	TInt ret(GetPolicyFile(policyFilePtr, aPolicyID));
-
-	ret= GetPolicyPath (tempPolicyFilePtr);
-
-	if ( (KErrNone==ret) || (KErrAlreadyExists==ret))
-	{
-		HBufC *fPolicyName = HBufC::NewLC(KMaxName);
-		TPtr policyNamePtr(fPolicyName->Des());
-		policyNamePtr.Num (aPolicyID);
-
-		tempPolicyFilePtr.Append (policyNamePtr);
-		tempPolicyFilePtr.Append (_L("_temp"));
-		tempPolicyFilePtr.Append (KDatExtn);
-		
-		CleanupStack::PopAndDestroy(fPolicyName);
-	}
-	
-	CFileMan *fm = CFileMan::NewL(iFsSession);
-	TInt backupResult = fm->Copy(policyFilePtr, tempPolicyFilePtr, CFileMan::EOverWrite);
-	delete fm;
-	
-	CleanupStack::PopAndDestroy(tempPolicyFile);
-	CleanupStack::PopAndDestroy(policyFile);
-	
-	return backupResult;	
-}
-
-TInt CSecMgrStore::RemoveTempPolicy(TPolicyID aPolicyID)
-{
-	HBufC *tempPolicyFile = HBufC::NewLC(KMaxName);
-	TPtr tempPolicyFilePtr(tempPolicyFile->Des());
-	
-	TInt ret= GetPolicyPath (tempPolicyFilePtr);
-
-	if ( (KErrNone==ret) || (KErrAlreadyExists==ret))
-	{
-		HBufC *fPolicyName = HBufC::NewLC(KMaxName);
-		TPtr policyNamePtr(fPolicyName->Des());
-		policyNamePtr.Num (aPolicyID);
-
-		tempPolicyFilePtr.Append (policyNamePtr);
-		tempPolicyFilePtr.Append (_L("_temp"));
-		tempPolicyFilePtr.Append (KDatExtn);
-		
-		CleanupStack::PopAndDestroy(fPolicyName);
-	}
-	
-	CFileMan *fm = CFileMan::NewL(iFsSession);
-	TInt rmTempResult = fm->Delete(tempPolicyFilePtr);
-	delete fm;
-	
-	CleanupStack::PopAndDestroy(tempPolicyFile);
-		
-	return rmTempResult;	
-}
-
-TInt CSecMgrStore::RestoreTempPolicy(TPolicyID aPolicyID)
-{
-	HBufC *policyFile = HBufC::NewLC(KMaxName);
-	TPtr policyFilePtr(policyFile->Des());
-	
-	HBufC *tempPolicyFile = HBufC::NewLC(KMaxName);
-	TPtr tempPolicyFilePtr(tempPolicyFile->Des());
-	
-	TInt ret(GetPolicyFile(policyFilePtr, aPolicyID));
-
-	ret= GetPolicyPath (tempPolicyFilePtr);
-
-	if ( (KErrNone==ret) || (KErrAlreadyExists==ret))
-	{
-		HBufC *fPolicyName = HBufC::NewLC(KMaxName);
-		TPtr policyNamePtr(fPolicyName->Des());
-		policyNamePtr.Num (aPolicyID);
-
-		tempPolicyFilePtr.Append (policyNamePtr);
-		tempPolicyFilePtr.Append (_L("_temp"));
-		tempPolicyFilePtr.Append (KDatExtn);
-		
-		CleanupStack::PopAndDestroy(fPolicyName);
-	}
-	
-	CFileMan *fm = CFileMan::NewL(iFsSession);
-	TInt restoreResult = fm->Copy(tempPolicyFilePtr, policyFilePtr, CFileMan::EOverWrite);
-	delete fm;
-	
-	CleanupStack::PopAndDestroy(tempPolicyFile);
-	CleanupStack::PopAndDestroy(policyFile);
-	return restoreResult;
-}