persistentstorage/dbms/security/SC_Policy.inl
changeset 0 08ec8eefde2f
child 55 44f437012c90
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/dbms/security/SC_Policy.inl	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,256 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+//
+
+namespace DBSC
+{
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//class CPolicyBase
+
+/**
+*/
+inline CPolicyBase::CPolicyBase()
+	{
+	}
+
+/**
+@return A const reference to the controlled collection of R/W/S policies.
+*/
+inline const CPolicyBase::RPolicyCollection& CPolicyBase::PolicyCollection() const
+	{
+	return iPolicyCollection;
+	}
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//class CDbPolicy
+
+/**
+*/
+inline CDbPolicy::CDbPolicy()
+	{
+	}
+
+/**
+Standard phase-one CDbPolicy factory method.
+@param aPolicyCollection A collection of R/W/S policies.
+@return A pointer to just created CDbPolicy instance.
+@leave System-wide error codes, including KErrNoMemory
+*/
+inline CDbPolicy* CDbPolicy::NewL(const RPolicyCollection& aPolicyCollection)
+	{
+	CDbPolicy* policy = CDbPolicy::NewLC(aPolicyCollection);
+	CleanupStack::Pop(policy);
+	return policy;
+	}
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//class CTblPolicy
+
+/**
+*/
+inline CTblPolicy::CTblPolicy(const CDbPolicy* aDbPolicy) :
+	iDbPolicy(aDbPolicy)
+	{
+	__ASSERT(iDbPolicy);
+	}
+
+/**
+Standard phase-one CTblPolicy factory method.
+@param aTblName The name of the table, access to which is controlled by the supplied policies
+@param aPolicyCollection A collection of R/W/S policies.
+@param aDbPolicy The related for the table database policy.
+@return A pointer to just created CTblPolicy instance.
+@leave System-wide error codes, including KErrNoMemory
+*/
+inline CTblPolicy* CTblPolicy::NewL(const TDesC& aTblName, 
+									const RPolicyCollection& aPolicyCollection,
+									const CDbPolicy* aDbPolicy)
+	{
+	CTblPolicy* policy = CTblPolicy::NewLC(aTblName, aPolicyCollection, aDbPolicy);
+	CleanupStack::Pop(policy);
+	return policy;
+	}
+
+/**
+@return A const reference to the table name.
+*/
+inline const TDesC& CTblPolicy::TableName() const
+	{
+	DB_INVARIANT();
+	return *iTblName;
+	}
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//class CPolicyDomain
+
+/**
+CPolicyDomain collection of table security policies  - the granularity.
+@internalComponent
+*/
+const TInt KTblPolicyCollGranularity = 32;
+
+/**
+@param aUid The domain UID
+*/
+inline CPolicyDomain::CPolicyDomain(TUid aUid) :
+	iUid(aUid),
+	iTPCollection(KTblPolicyCollGranularity)
+	{
+	}
+
+/**
+Standard phase-one CPolicyDomain factory method.
+@param aUid The format uid of the databases, access to which is controlled by security policies
+@param aPDLoader The interface, which actual implementation is used to load the related set
+                 of security policies into CPolicyDomain collection. Currently CPolicyDomain
+				 policy collection can be loaded from a text or binary policy file.
+@return A pointer to just created CPolicyDomain instance.
+@leave System-wide error codes, including KErrNoMemory
+*/
+inline CPolicyDomain* CPolicyDomain::NewL(TUid aUid, MPolicyDomainLoader& aPDLoader)
+	{
+	CPolicyDomain* domain = CPolicyDomain::NewLC(aUid, aPDLoader);
+	CleanupStack::Pop(domain);
+	return domain;
+	}
+
+/**
+@return Policy domain UID.
+*/
+inline TUid CPolicyDomain::Uid() const
+	{
+	DB_INVARIANT();
+	return iUid;
+	}
+
+/**
+@return Backup&restore SID.
+*/
+inline TSecureId CPolicyDomain::BackupSID() const
+	{
+	DB_INVARIANT();
+	return iBackupSID;
+	}
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//class TPolicyDomainBuilder
+
+/**
+TPolicyDomainBuilder is a friend class of CPolicyDomain, which means that it can access
+CPolicyDomain's data members and add/update new policies there.
+The idea is that TPolicyDomainBuilder will be used by the implementors of MPolicyDomainLoader
+interface, removing the need of making them friends of CPolicyDomain or visible from CPolicyDomain.
+@param aPolicyDomain A reference to the policy domain object, which collection has to be 
+                     created by the TPolicyDomainBuilder instance.
+*/
+inline TPolicyDomainBuilder::TPolicyDomainBuilder(CPolicyDomain& aPolicyDomain) :
+	iPolicyDomain(aPolicyDomain)
+	{
+	}
+
+/**
+The method adds a table policy to the related CPolicyDomain collection.
+@param aTblPolicy A pointer to CTblPolicy instance, which has to be added to 
+                  the related CPolicyDomain collection. CPolicyDomain collection takes the
+				  ownership on the supplied CTblPolicy instance.
+*/
+inline void TPolicyDomainBuilder::AddTblPolicyL(CTblPolicy* aTblPolicy)
+	{
+	__ASSERT(aTblPolicy);
+	__LEAVE_IF_ERROR(iPolicyDomain.iTPCollection.Append(aTblPolicy));
+	}
+
+/**
+The method initializes CPolicyDomain::iBackupSID data member.
+The backup&restore SID can be ECapability_None, which means - no one is allowed to do backup&restore
+for the databases, covered by current policy domain.
+@param aTblPolicy aSecureId SID of the process, which is allowed to do backup&restore
+                  for databases covered by current TPolicyDomainBuilder object.
+*/
+inline void TPolicyDomainBuilder::SetBackupSID(TSecureId& aSecureId)
+	{
+	iPolicyDomain.iBackupSID = aSecureId;
+	}
+
+//////////////////////////////////////////////////////////////////////////////////////////////
+//class TPolicyDomainReader
+
+/**
+TPolicyDomainReader is a friend class of CPolicyDomain, which means that it can access
+CPolicyDomain's data members and iterate through the policies collection.
+The idea is that TPolicyDomainReader will be used by the implementors of MPolicyDomainPersister
+interface, removing the need of making them friends of CPolicyDomain or visible from CPolicyDomain.
+@param aPolicyDomain A reference to the policy domain object, which collection has to be 
+                     traversed by the TPolicyDomainReader instance.
+*/
+inline TPolicyDomainReader::TPolicyDomainReader(const CPolicyDomain& aPolicyDomain) :
+	iPolicyDomain(aPolicyDomain),
+	iIndex(0)
+	{
+	}
+
+/**
+@return The UID of the related CPolicyDomain object.
+*/
+inline TUid TPolicyDomainReader::Uid() const
+	{
+	return iPolicyDomain.Uid();
+	}
+
+/**
+@return A const reference to the existing CDbPolicy instance - part of the related
+        CPolicyDomain security policies collection.
+*/
+inline const CDbPolicy& TPolicyDomainReader::DbPolicy() const
+	{
+	__ASSERT(iPolicyDomain.iDbPolicy);
+	return *iPolicyDomain.iDbPolicy;
+	}
+
+/**
+Resets the iterator for a new scan from the beginning of the controlled table 
+policies collection.
+*/
+inline void TPolicyDomainReader::ResetTblPos() const
+	{
+	iIndex = 0;
+	}
+
+/**
+@return The count of security policies in the controlled table policies collection.
+*/
+inline TInt TPolicyDomainReader::TblPolicyCount() const
+	{
+	return iPolicyDomain.iTPCollection.Count();
+	}
+
+/**
+@return A const pointer to the next CTblPolicy instance in the controlled collection
+        of table security policies.
+*/
+inline const CTblPolicy* TPolicyDomainReader::NextTblPolicy() const
+	{
+	return iIndex < iPolicyDomain.iTPCollection.Count() ? iPolicyDomain.iTPCollection[iIndex++] : NULL;
+	}
+
+/**
+@return Backup&restore process SID.
+*/
+inline TSecureId TPolicyDomainReader::BackupSID() const
+	{
+	return iPolicyDomain.iBackupSID;
+	}
+
+} //end of - namespace DBSC