diff -r 000000000000 -r 99ef825efeca rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrserver.h Mon Mar 30 12:51:20 2009 +0300 @@ -0,0 +1,386 @@ +/* +* Copyright (c) 2003-2005 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: Core Runtime Security Manager Server Class + * +*/ + + + + + + + +#ifndef C_CRTSECMGRSERVER_H +#define C_CRTSECMGRSERVER_H + +#include +#include "rtsecmgrserverdef.h" +#include "rtsecmgrpolicy.h" +#include "rtsecmgrstore.h" +#include "rtsecmgrpolicymanager.h" +#include "rtsecmgrscriptmanager.h" + +class CPolicyManager; +class CScriptManager; +class CSecMgrStore; + +//needed for creating server thread. +const TUint KDefaultHeapSize=0x10000; +const TUint KShutDownDelay = 200000; // Aprox 2 sec + +/* + * Shutdown timer class + * + * @exe rtsecmgrserver.exe + */ +class CShutDown : public CTimer + { +public: + inline CShutDown(); + inline void ConstructL(); + inline void Start(); + inline virtual ~CShutDown(); + +private: + inline void RunL(); + }; + +#include "rtsecmgrshutdown.inl" + +#include "rtsecmgrserverpolicy.inl" + +/* + CRTSecMgrServer class + + Represents the server. + + The server starts with the first client connect call. + Start includes setting up active scheduler, the server active object, + and the object container index which produces object object containers for each session. + */ +class CRTSecMgrServer : public CPolicyServer //CServer2 //CPolicyServer + { +public: + /* + * Creates a new session with the server; + * + * @param aVersion const TVersion& version information of security manager server + * @param aMessage const RMessage2& server's current message + * + * @return CSession2* pointer to base instance of created server session + */ + CSession2* NewSessionL(const TVersion& aVersion, const RMessage2& aMessage) const; + + /* + * Two-phased constructor. Creates a new server object. + * + * @param aActiveObjectPriority TPriority priorty of the server process + * + * @return CRTSecMgrServer* pointer to new instance of CRTSecMgrServer + */ + static CRTSecMgrServer* NewL(CActive::TPriority aActiveObjectPriority); + + /* + * Two-phased constructor. Creates a new server object and leaves + * the created instance on the cleanupstack. + * + * @param aActiveObjectPriority TPriority priorty of the server process + * + * @return CRTSecMgrServer* pointer to new instance of CRTSecMgrServer + */ + static CRTSecMgrServer* NewLC(CActive::TPriority aActiveObjectPriority); + + /* + * Utility method to panic the server + * + * @param aPanic TSecMgrServPanic Panic error code + * + */ + inline static void PanicServer(TSecMgrServPanic aPanic); + + /* + * Returns an object container, and guaranteed + * to produce object containers with unique ids + * within the server + * + * This method is called by a new session to create + * a container + * + * + * @return CObjectCon* a new object container + */ + CObjectCon* NewContainerL(); + + /* + * Adds a new server side session + * + */ + inline void AddSession(); + + /* + * Removes a server side session by decrementing + * the session count. + * + * If the session count reaches zero, this method + * initiates server shut down timer + * + */ + inline void RemoveSession(); + + /* + * Removes a container object from the container + * index + * + * @param aContainer CObjectCon* pointer to containter object + * to be removed + */ + inline void RemoveFromContainerIx(CObjectCon* aContainer); + + /* + * Generates a new script identifier + * + * @param aExecID TExecutableID& output generated script identifier + * + * @return KErrNone if generation of script identifier successful + */ + inline TInt ReadCounter(TExecutableID& aExecID); + + /* + * Registers a new policy. The actual task is performed by + * server side session. + * + * @param aPolicyID TPolicyID policy identifier + * @param aDomains const RProtectionDomains& domains to be added + * + * @return KErrNone if generation of script identifier successful + */ + inline void AddPolicyL(TPolicyID aPolicyID, const RProtectionDomains& aDomains, RAliasGroup& aAliasGroup); + + /* + * Checks whether policy with the passed policy identifier exists. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * + * @return EFalse if policy identifier does not exist; Otherwise ETrue + */ + inline TBool IsValidPolicy(TPolicyID aPolicyID) const; + + /* + * Removes an existing policy with the passed policy identifier. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * + * @return KErrNone if removal of policy is successful; Otherwise one + * of system wide error codes + */ + inline TInt RemovePolicy(TPolicyID aPolicyID); + + /* + * Register a runtime script with security manager. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * @param aHashValue const TDesC& hashvalue of script + * + * @return TExecutableID valid script identifier is registration + * is successful; otherwise one of system wide error codes + * + */ + inline TExecutableID + RegisterScript(TPolicyID aPolicyID, const TDesC& aHashValue); + + /* + * Register a runtime script with security manager. + * The actual task is performed by server side session. + * + * @param aPolicyID TPolicyID policy identifier + * + * @return TExecutableID valid script identifier is registration + * is successful; otherwise one of system wide error codes + * + */ + inline TExecutableID + RegisterScript(TPolicyID aPolicyID); + + /* + * UnRegisters a runtime script from security manager. + * The actual task is performed by server side session. + * + * @param aExecID TExecutableID script identifier + * @param aPolicyID TPolicyID policy identifier + * + * + */ + inline void UnRegisterScriptL(TExecutableID aExecID, TPolicyID aPolicyID); + + /* + * Gets script data structure. The script identifier + * is specified in the input script object + * + * @param aScript CScript& Input output script object + * + * @return KErrNone if script object is successsfully internalized + * + */ + inline TInt GetCapabilityInfo(CScript& aScript); + + /* + * Gets script data structure. The script identifier + * is specified in the input script object + * + * @param aPolicyID TPolicyID policy identifier + * @param aExecID TExecutableID script identifier + * @param aScript CScript& Input output script object + * + * @return KErrNone if script object is successsfully internalized + * + */ + TInt GetCapabilityInfo(TPolicyID aPolicyID, TExecutableID aExecID, + CScript& aScript); + + /* + * Utility method to get the name of the script file + * + * @param aPolicyID TPolicyID policy identifier + * @param aScriptFile TFileName& input output name of script file + * + * @return KErrNone if script filename is successsfully fetched + * + */ + inline TInt GetScriptFile(TExecutableID aExecID, TDes& aScriptFile); + + /* + * Utility method to update the permanently allowed or denied + * permissions for the script object + * + * @param aExecID TExecutableID script identifier of script object whose + * permanent permissions are modified + * @param aPermGrant TPermGrant permanently allowed permissions + * @param aPermDenied TPermGrant permanently denied permissions + * + */ + void UpdatePermGrantL(TExecutableID aExecID, TPermGrant aPermGrant, + TPermGrant aPermDenied); + + /* + * 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 + * + */ + inline 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 + * + */ + inline 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 + * + */ + inline TInt RestoreTempPolicy(TPolicyID aPolicyID); + + /* + * Utility method to get the policy file information + * + * @param aPolicyID TPolicyID policy identifier for the file + * which is restored back + * @return CPolicy* pointer to instance of Cpolicy stored in CPolicyManager + * + */ + inline CPolicy* ReturnPolicyInfo(TPolicyID aPolicyID); + + /* + * Utility method to store the policy file information + * + * @param aPolicy CPolicy policy information from parser + * + */ + inline void StorePolicyL(const CPolicy& aPolicy); + + +private: + /* + * Constructor + */ + inline CRTSecMgrServer(CActive::TPriority aActiveObjectPriority); + + /* + * Second phase constructor + * + */ + void ConstructL(); + + /* + * Server destructor + * + */ + ~CRTSecMgrServer(); + +private: + + /* + * shutdown timer object + * + */ + CShutDown iShutDown; + + /* + * Session counter + * + */ + TInt iSessionCount; + + /* + * Session container index + * + */ + CObjectConIx* iContainerIndex; + + /* + * Reference to policy manager + * + */ + CPolicyManager* iPolicyMgr; + + /* + * Reference to script manager + * + */ + CScriptManager* iScriptMgr; + + /* + * Reference to security manager store + * + */ + CSecMgrStore* iSecMgrDb; + }; + +#include "rtsecmgrserver.inl" + +#endif //C_CRTSECMGRSERVER_H