diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrstore.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrstore.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,292 @@ +/* +* 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 persistent store class + * +*/ + + + + + + +#ifndef C_RTSECMGRSTORE_H +#define C_RTSECMGRSTORE_H + +#include +#include +#include +#include +#include +#include "rtsecmgrcommondef.h" +#include "rtsecmgrserverdef.h" +#include "rtsecmgrdata.h" + +/* + * Abstracts the underlying security manager persistent storage + * type. + * + * Provides methods to store and retrieve security policy data + * and script related data. + * + * @see CProtectionDomain + * @see CScript + * + * @exe rtsecmgrserver.exe + */ +NONSHARABLE_CLASS(CSecMgrStore) : public CBase + { +public: + + /** + * Two-phased constructor + * + * Constructs a CSecMgrStore instance + * + * @return CSecMgrStore* pointer to an instance of CSecMgrStore + */ + static CSecMgrStore* NewL(); + + /** + * Two-phased constructor + * + * Constructs a CSecMgrStore instance and leaves the created + * instance on the cleanupstack + * + * @return CSecMgrStore* pointer to an instance of CSecMgrStore + */ + static CSecMgrStore* NewLC(); + + /** + * Destructor + * + * Closes file session connection + * + */ + inline ~CSecMgrStore(); + + /** + * Updates policy data to the stream. + * + * This method creates a new policy file with the name equivalent to + * policy identifier under security manager servers private directory. + * + * The policy data are serialized to the newly created policy file. + * + * If policy file already exists, the content will be overwritten. + * + * @param aPolicyID TPolicyID policy identifier + * @param aPolicies const RProtectionDomains& list of domains to serialize + * + */ + void StorePolicyL(const CPolicy& aPolicy); + + /** + * Removes policy file from the persistent storage. + * + * This method looks for an existing policy file with the name equivalent to + * policy identifier under security manager servers private directory. If policy + * file is found, the file will be deleted from file system. + * + * @param aPolicyID TPolicyID policy identifier of the policy to be removed + * + * @return KErrNone if policy file removal corresponding to policy identifier passed is successful; + * Otherwise, one of system wide error codes + * + */ + TInt RemovePolicy(TPolicyID aPolicyID); + + /** + * Restores policy data from the stream. + * + * This method internalizes the policy data from the persistent + * storage. + * + * @param aPolicies RPolicies& Input policy data to be internalized + * + */ + void RestorePoliciesL(RPolicies& aPolicies); + + /** + * Registers a script with security manager persistent store. + * + * This method creates a new script file externalizing the script + * data to the persistent stream. + * + * @param aExecID TExecutableID script identifier + * @param aPolicyID TPolicyID policy identifier of the script + * @param aScript const CScript& script data to be serialized + * + */ + void RegisterScriptL(TExecutableID aExecID, const CScript& aScript); + + /** + * UnRegisters a script with security manager persistent store. + * + * This method removes an existing script file from the persistent stream. + * + * @param aExecID TExecutableID script identifier to be removed + * + */ + void UnRegisterScriptL(TExecutableID aExecID); + + /** + * Internalizes the script data structure with script + * information read from the persistent store + * + * @param aExecID TExecutableID script identifier + * @param aScriptInfo CScript& script data to be internalized + * + */ + TInt ReadScriptInfo(TExecutableID aExecID, CScript& aScriptInfo); + + /** + * Utility method to get the script file name given the script identifier. + * + * @param aExecID TExecutableID script identifier + * @param aScriptFile TDes& output file name to be returned + * + * @return KErrNone if script file name is found; Otherwise one of + * system wide error codes + * + */ + TInt GetScriptFile(TExecutableID aExecID,TDes& aScriptFile); + + /** + * Externalizes the script data structure with script + * information read to the persistent store + * + * @param aExecID TExecutableID script identifier + * @param aScriptInfo CScript& script data to be externalized + * + */ + void WriteScriptInfoL(TExecutableID aExecID, CScript& aScriptInfo); + + /** + * Reads the script identifier from security manager configuration + * repository + * + * @param aExecID TExecutableID& output script identifier + * + * @return KErrNone if reading of identifier is successful; Otherwise + * one of system wide error codes + */ + TInt ReadCounter(TExecutableID& aExecID); + + /** + * Writes the script identifier to security manager configuration + * repository + * + * @param aExecID TExecutableID script identifier to be externalized + * + * @return KErrNone if writing of identifier is successful; Otherwise + * one of system wide error codes + */ + TInt WriteCounter(TExecutableID aExecID); + + /* + * Utility method to create a backup for the policy file + * + * @param aPolicyID TPolicyID policy identifier for the file + * getting backed up + * @return KErrNone if backupfile is successsfully created + * + */ + + TInt BackupFile(TPolicyID aPolicyID); + + /* + * Utility method to remove the backup file created + * + * @param aPolicyID TPolicyID policy identifier for the file + * whose backup is getting removed + * @return KErrNone if backup file is successsfully removed + * + */ + TInt RemoveTempPolicy(TPolicyID aPolicyID); + + /* + * Utility method to restore the backup file created if update fails + * + * @param aPolicyID TPolicyID policy identifier for the file + * which is restored back + * @return KErrNone if backup file is successsfully restored + * + */ + TInt RestoreTempPolicy(TPolicyID aPolicyID); + +private: + + /* + * Default private constructor + */ + inline CSecMgrStore(); + + /* + * Two-phased constructor + * + */ + inline void ConstructL(); + + /* + * Utility method to get security manager's private path + * + */ + TInt GetPrivatePath(TDes& aPrivatePath); + + /* + * Utility method to get security manager's configuration file + * + */ + TInt GetConfigFile(TDes& aPrivatePath); + + /* + * Utility method to get security manager's policy file + * name + * + */ + TInt GetPolicyPath(TDes& aFile); + + /* + * Utility method to get security manager's script file + * storage path + * + */ + TInt GetScriptPath(TDes& aFile); + + /* + * Utility method to get security manager's script file + * name given a script identifier + * + */ + TInt GetScriptFile(TDes& aFile,TExecutableID aExecID); + + + + /* + * Utility method to get security manager's policy file + * name given the policy identifier + * + */ + TInt GetPolicyFile(TDes& aFile,TPolicyID aPolicyID); + + +private: + + //underlying file session + RFs iFsSession; + }; + +#include "rtsecmgrstore.inl" + +#endif