rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicyparser.h
changeset 0 99ef825efeca
child 27 bcef26ca2be3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rtsecuritymanager/rtsecuritymanagerserver/inc/rtsecmgrpolicyparser.h	Mon Mar 30 12:51:20 2009 +0300
@@ -0,0 +1,282 @@
+/*
+* 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:       Utility XML parser to parse trust and access policy files
+ *
+*/
+
+
+
+
+
+
+#ifndef C_RTSECMGRPOLICYPARSER_H
+#define C_RTSECMGRPOLICYPARSER_H
+
+#include <e32base.h>
+#include <GMXMLParser.h>
+#include <GMXMLNode.h>
+#include <EscapeUtils.h>
+#include "rtsecmgrdata.h"
+#include "rtsecmgrcommondef.h"
+
+/*
+ * Enumerations for policy parsing status codes
+ * 
+ */
+enum TParserErrCode
+{
+	EErrNone = 0, //zero for success , equivalent to KErrNone of symbian
+	EErrInvalidDocNode = KErrXMLBase,
+	EErrInvalidRootNode = EErrInvalidDocNode - 1,
+	EErrNoPolicyInfo   = EErrInvalidRootNode - 1,
+	EErrInvalidDomainName = EErrNoPolicyInfo - 1,
+	EErrRepeatedDomainTag = EErrInvalidDomainName - 1,
+	EErrJunkContent = EErrRepeatedDomainTag - 1,
+	EErrNoDefaultCondition = EErrJunkContent - 1,
+	EErrInvalidFormat = EErrNoDefaultCondition - 1,
+	EErrInvalidCapability = EErrInvalidFormat - 1,
+	EErrInvalidPermission = EErrInvalidCapability - 1,
+	EErrRepeatedCaps = EErrInvalidPermission - 1,
+	EErrRepeatedAliasTag = EErrRepeatedCaps - 1,
+	EErrInvalidAliasName = EErrRepeatedAliasTag - 1,
+	EErrMisplacedAlias = EErrInvalidAliasName
+};
+
+/*
+ * Abstracts policy parsing logic.
+ * 
+ * Security access policy and trust policy are represented in
+ * XML format. CPolicyParser uses native XML parser to parse
+ * the policy files.
+ * 
+ *  
+ * @see MMDXMLParserObserver
+ * @see CMDXMLParser
+ * @see CMDXMLElement
+ * @see CProtectionDomain
+ * @see CTrustInfo
+ * @see TUserPromptOption
+ * 
+ * @exe rtsecmgrserver.exe
+ */
+NONSHARABLE_CLASS(CPolicyParser) : public CBase, public MMDXMLParserObserver
+{
+public:
+	
+	/**
+	 * Two-phased constructor
+	 * 
+	 * Constructs a CPolicyParser instance
+	 * 
+	 * @return CPolicyParser* pointer to an instance of CPolicyParser
+	 */
+	static CPolicyParser* NewL();
+
+	/**
+	 * Two-phased constructor
+	 * 
+	 * Constructs a CPolicyParser instance and leaves the created instance
+	 * on the cleanupstack
+	 * 
+	 * @return CPolicyParser* pointer to an instance of CPolicyParser
+	 */
+	static CPolicyParser* NewLC();	
+
+
+	/**
+	 * Destructor
+	 * 
+	 */
+	~CPolicyParser();
+	
+	/**
+	 * Parses the security access policy file and populates
+	 * the input protection domain array
+	 * 
+	 * @param aSecPolicy RFile& Handle to security policy file
+	 * @param aPolicyInfo RProtectionDomains& input array of protection domains
+	 * 
+	 * @return EErrSuccess if there is no parsing error; Otherwise one of
+	 * error codes defined in TParserErrCode
+	 * 
+	 * @see TParserErrCode
+	 */
+	TInt GetPolicyInfo(RFile& aSecPolicy, RProtectionDomains& aPolicyInfo, RAliasGroup& aAliasGroup);	
+	
+	/**
+	 * Callback offered by MMDXMLParserObserver to notify the calling client that the XML 
+	 * parsing is completed and DOM data structure is available for 
+	 * navigation
+	 * 
+	 * @see MMDXMLParserObserver
+	 * 
+	 * This identifies whether the policy file is in the proper format
+	 * if not in proper format, parsing errors as defined in TParserErrCode are thrown
+	 * @see TParserErrCode
+	 */
+	void ParseFileCompleteL();	
+private:	
+	
+	//private default constructor
+	inline CPolicyParser();	
+	
+	/**
+	 * Gets the list of capability nodes provided the parent domain
+	 * node
+	 * 
+	 */
+	TInt GetCapsNode(CMDXMLElement* aParentDomainNode, 
+					 RPointerArray<CMDXMLElement>& aCapNodes, 
+					 const TDesC& aNodeName);
+	
+	/**
+	 * Overloaded version to get the list of capability nodes provided the parent domain
+	 * node
+	 * 
+	 */
+	CMDXMLElement* GetCapsNode(CMDXMLElement* aParentDomainNode, const TDesC& aNodeName);
+	
+
+	/**
+	 * Populates the permission set data structure with capability
+	 * information provided the parent capability node
+	 * 
+	 * @return EErrSuccess if there is no parsing error; Otherwise one of these error codes 
+	 * @return EErrRepeatedCaps if there are capabilities specified more than once in same domain
+	 * @return EErrInvalidCapability if the capability string is invalid
+	 * 
+	 * @see TParserErrCode
+	 * 
+	 */
+	TInt GetCapabilities(CMDXMLElement* aParentNode, 
+						 CPermissionSet& aCapInfo,
+				   	 	 TUserPromptOption aUpOpt=RTUserPrompt_UnDefined,
+				   	 	 TBool aUGCaps=EFalse,
+						 TUserPromptOption aDefUpOpt=RTUserPrompt_UnDefined);
+						 
+	/**
+	 * Gets the user prompt option provided the parent user node
+	 * 
+	 * @return EErrSuccess if there is no parsing error; Otherwise one of these error codes 
+	 * @return EErrInvalidPermission if prompt sessions specified are invalid
+	 */
+	TInt GetConditions(CMDXMLElement* aParentNode, TUserPromptOption& aUserPromptOpt);
+	
+	/**
+	 * Gets the default user prompt option provided the parent user node
+	 * 
+	 */
+	TUserPromptOption GetDefaultCondition(CMDXMLElement* aParentNode);
+	
+	/**
+	 * Utility to convert the stringified user prompt option text to
+	 * TCapability enumeration
+	 * 
+	 * @see TCapability
+	 * 
+	 */
+	TCapability GetCapability(const TDesC& aUserPromptOpt);
+	
+	/**
+	 * Utility to convert the stringified user prompt option to
+	 * TUserPromptOption structure
+	 * 
+	 */
+	TUserPromptOption GetUserPromptOption(const TDesC& aUserPromptOpt);		
+	
+	/**
+	 * Finds out if a domain node is present with the passed domain name
+	 * 
+	 */
+	TBool isDomainPresent(const TDesC& aDomainName);
+	
+	/**
+	 * Utility method to check if a capability is already part of 
+	 * unconditional permissions
+	 * 
+	 */
+	TBool IsPresent(const CPermissionSet& aCapInfo, TCapability aCap);
+	
+	/**
+	 * Utility method to check if a capability is already part of user
+	 * grantable permissions
+	 * 
+	 */
+	TBool IsUserGrantPresent(const CPermissionSet& aCapInfo, TCapability aCap);
+
+	
+	/**
+	 * Populates the permission set data structure with capability
+	 * information provided the parent capability node
+	 * 
+	 * @return EErrSuccess if there is no parsing error; Otherwise one of these error codes 
+	 * @return EErrRepeatedCaps if there are capabilities specified more than once in same domain
+	 * @return EErrInvalidCapability if the capability string is invalid
+	 * 
+	 * @see TParserErrCode
+	 * 
+	 * This is similar to GetCapabilities method except that this retrives the capability information for the Group
+	 */
+	TInt GetCapabilitiesForGroup(CMDXMLElement* aParentNode, 
+						 CPermissionSet& aCapInfo,
+						 CPermission& aAliasInfo,
+				   	 	 TUserPromptOption aUpOpt=RTUserPrompt_UnDefined,
+				   	 	 TBool aUGCaps=EFalse,
+						 TUserPromptOption aDefUpOpt=RTUserPrompt_UnDefined);
+						 
+	/**
+	 * Finds out if the passed capability is present in alias group
+	 * 
+	 */
+	TBool IsCapsAliasPresent(const CPermission& aAliasInfo, TCapability aCap);
+	
+	/**
+	 * Finds out if a domain node is present with the passed domain name
+	 * 
+	 */
+	TBool isAliasPresent(const TDesC& aAliasName);
+	
+		
+private:	
+	
+	//reference to undelying native symbian XML parser
+	CMDXMLParser* iDomParser;	
+	
+	//Completion status of parsing request made to XML parser.
+	TRequestStatus* iStatus;
+	CActiveSchedulerWait iWaitScheduler;
+	
+	//list of domains declared in the security access policy
+	RProtectionDomains iPolicyInfo;
+	
+	//list of trust information specified in the trust policy file
+	RTrustArray iTrustInfo;
+
+	//variable to initiate parsing for trust policy file
+	TBool isTrustInfo;
+	
+	//status code to store last parsing error
+	TInt iLastError;
+
+	
+	//Array of TPermissions - used for Capability Grouping
+	RAliasGroup iAliasGroup;
+
+};
+
+#endif  //C_RTSECMGRPOLICYPARSER_H
+
+// End of file
+
+