rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrclientapi.cpp
changeset 57 61b27eec6533
parent 45 7aa6007702af
--- a/rtsecuritymanager/rtsecuritymanagerserver/src/rtsecmgrclientapi.cpp	Fri Apr 16 15:54:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,430 +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:       Implementation file for security manager server, session and 
- * 				  sub-session classes 
- *
-*/
-
-
-
-
-
-
-#include <f32file.h>
-#include <e32debug.h>
-#include <rtsecmgrcommondef.h>
-#include "rtsecmgrserver.h"
-#include "rtsecmgrsession.h"
-#include "rtsecmgrsubsession.h"
-#include "rtsecmgrpolicyparser.h"
-#include "rtsecmgrstore.h"
-#include "rtsecmgrprotectiondomain.h"
-#include "rtsecmgrpolicymanager.h"
-#include "rtsecmgrscriptmanager.h"
-#include "rtsecmgrmsg.h"
-
-_LIT(KUntrusted, "UnTrusted");
-
-TInt CRTSecMgrServer::GetCapabilityInfo(TPolicyID aPolicyID,
-		TExecutableID aExecID, CScript& aScript)
-	{
-	if ( KAnonymousScript==aExecID)
-		{
-		CPolicy* policy = iPolicyMgr->Policy (aPolicyID);
-		if ( policy)
-			{
-			CProtectionDomain* domain = policy->ProtectionDomain (KUntrusted);
-
-			if ( domain)
-				{
-				const CPermissionSet& permissionSet = domain->PermSet ();
-				aScript.SetPermissionSet (permissionSet);
-				return KErrNone;
-				}
-			}
-		}
-
-	return KErrNotFound;
-	}
-
-void CRTSecMgrSession::SetPolicy(const RMessage2& aMessage, TBool aIsUpdate)
-	{
-	if(!aMessage.HasCapability(ECapabilityWriteDeviceData , ""))
-	    {
-	    TPckgBuf<TInt> pkg(ErrAccessDenied);
-	    aMessage.Write(EMsgArgZero , pkg);
-	    return;
-	    }
-	RFile secPolicyFile;
-	TPolicyID pID(ErrInvalidPolicyID);
-
-	if ( KErrNone==secPolicyFile.AdoptFromClient (aMessage, EMsgArgOne,
-			EMsgArgTwo))
-		{
-		CPolicyParser* policyParser = CPolicyParser::NewLC ();
-		TInt ret(KErrNone);
-
-		RProtectionDomains policyInfo;
-		RAliasGroup aliasInfo;
-		ret=policyParser->GetPolicyInfo (secPolicyFile, policyInfo, aliasInfo);
-
-		if (KErrNone==ret)
-			{
-			if(aIsUpdate)
-				{
-				TPckgBuf<TInt> pIDPckg;
-				aMessage.Read(0, pIDPckg);
-				pID = pIDPckg();
-				}
-			else
-				{
-				if ( KErrNone==iSecMgrServer->ReadCounter (pID))
-					{
-					while (iSecMgrServer->IsValidPolicy(pID))
-						{
-						--pID ;
-						}
-					}
-				else
-					{
-					pID = ErrServerReadConfig;
-					}
-				}
-			TRAPD (err, iSecMgrServer->AddPolicyL (pID, policyInfo, aliasInfo));
-			
-			if ( KErrNone!=err)
-				{
-				pID = ErrSetPolicyFailed;
-				}						
-				
-			}
-		else
-			{
-			pID = ErrInvalidPolicyFormat;
-			policyInfo.ResetAndDestroy ();
-			}
-		CleanupStack::PopAndDestroy (policyParser);
-		}
-	else
-		{
-		pID = ErrFileSessionNotShared;
-		}
-
-	secPolicyFile.Close();
-	
-	TPckgBuf<TInt> pkg(pID);
-	aMessage.Write (EMsgArgZero, pkg);
-	}
-
-void CRTSecMgrSession::UpdatePolicy(const RMessage2& aMessage)
-	{
-	if(!aMessage.HasCapability(ECapabilityWriteDeviceData , ""))
-        {
-        TPckgBuf<TInt> pkg(ErrAccessDenied);
-        aMessage.Write(EMsgArgZero , pkg);
-        return;
-        }
-	TPckgBuf<TInt> pIDPckg;
-	aMessage.Read (0, pIDPckg);
-
-	TPolicyID pID(pIDPckg ());
-
-		//Check if this ID already exists
-	if ( !iSecMgrServer->IsValidPolicy(pID))
-		{
-		TPckgBuf<TInt> pkg(ErrUpdatePolicyFailed);
-		aMessage.Write (EMsgArgZero, pkg);
-		RFile secPolicyFile;
-		//just to close the secPolicyFile. Else the temmporary file cannot be deleted
-		secPolicyFile.AdoptFromClient (aMessage, EMsgArgOne,EMsgArgTwo);
-		secPolicyFile.Close();
-		return;
-		}
-	else
-		{
-		if ( IsScriptOpenWithPolicy (pID))
-			{
-			TPckgBuf<TInt> pkg(ErrUpdatePolicyFailed);
-			aMessage.Write (EMsgArgZero, pkg);
-			return;
-			}
-		}
-
-	//back up the file before update (file with this policy Id)
-	TInt backupResult = iSecMgrServer->BackupFile(pID);
-	
-	if(KErrNone == backupResult)
-		{
-			SetPolicy (aMessage, ETrue);
-			
-			aMessage.Read(0, pIDPckg);
-			TInt resultSetPolicy = pIDPckg();		
-			
-			if(resultSetPolicy < KErrNone)
-				{
-					//means that the policy updation is NOT successful due to invalid policy file
-					//Hence retain the previous file by restoring the temp file
-					TInt restoreResult = iSecMgrServer->RestoreTempPolicy(pID);
-					
-					if(KErrNone != restoreResult)
-					{
-						// file backup not created due to errors
-						TPckgBuf<TInt> pkg(ErrRestoreTempFailed);
-						aMessage.Write (EMsgArgZero, pkg);
-						return;
-					}
-				}
-
-			//Backup file is no longer useful. 
-			//Hence removing this temporary file using the method below
-			TInt rmTempResult = iSecMgrServer->RemoveTempPolicy(pID);	
-			if(KErrNone != rmTempResult)
-			{
-				//temporary file not removed
-				
-			}	
-	}
-	else
-	{
-		// file backup not created due to errors
-		TPckgBuf<TInt> pkg(ErrBackupNotCreated);
-		aMessage.Write (EMsgArgZero, pkg);
-		return;
-		
-	}	
-	
-	}
-
-void CRTSecMgrSession::UnsetPolicy(const RMessage2& aMessage)
-	{
-	if(!aMessage.HasCapability(ECapabilityWriteDeviceData , ""))
-        {
-        TPckgBuf<TInt> pkg(ErrAccessDenied);
-        aMessage.Write(EMsgArgZero , pkg);
-        return;
-        }
-	TPolicyID pID = aMessage.Int0 ();
-
-	TInt result = ErrUnSetPolicyFailed;
-
-	if ( !IsScriptOpenWithPolicy(pID))
-		{
-		result = iSecMgrServer->RemovePolicy (pID);
-		}
-	if( KErrNone>result )
-		result = ErrUnSetPolicyFailed;
-	
-	TPckgBuf<TInt> retVal(result);
-	aMessage.Write (EMsgArgOne, retVal);
-	}
-
-void CRTSecMgrSession::RegisterScript(const RMessage2& aMessage, TBool aIsHashed)
-	{
-	if( !aMessage.HasCapability(ECapabilityWriteDeviceData , ""))
-        {
-        TPckgBuf<TInt> pkg(ErrAccessDenied);
-        aMessage.Write(EMsgArgZero , pkg);
-        return;
-        }
-	if ( aIsHashed)
-		{
-		HBufC8* desData = HBufC8::NewLC (KMaxMsgLength);
-		TPtr8 readPtr(desData->Des ());
-		aMessage.ReadL (0, readPtr);
-		CRTSecMgrRegisterScriptMsg
-				* scriptMsg = CRTSecMgrRegisterScriptMsg::NewLC (*desData);
-
-		TExecutableID scriptID = iSecMgrServer->RegisterScript (scriptMsg->PolicyID(),scriptMsg->HashValue());
-		
-		TPckgBuf<TInt> exeIDPkg(scriptID);
-		aMessage.Write (EMsgArgOne, exeIDPkg);
-
-		CleanupStack::PopAndDestroy (scriptMsg);
-		CleanupStack::PopAndDestroy (desData);		
-		}
-	else
-		{
-		TPolicyID policyID = aMessage.Int0 ();
-
-		TExecutableID scriptID = iSecMgrServer->RegisterScript (policyID);
-
-		if ( KErrNone>scriptID)
-			scriptID = ErrRegisterScriptFailed;
-
-		TPckgBuf<TInt> exeIDPkg(scriptID);
-		aMessage.Write (EMsgArgOne, exeIDPkg);
-		}
-
-	}
-
-void CRTSecMgrSession::UnregisterScript(const RMessage2& aMessage)
-	{
-	if(!aMessage.HasCapability(ECapabilityWriteDeviceData , ""))
-        {
-        TPckgBuf<TInt> pkg(ErrAccessDenied);
-        aMessage.Write(EMsgArgZero , pkg);
-        return;
-        }
-	TExecutableID scriptID(aMessage.Int0 ());
-	TPolicyID policyID(aMessage.Int1 ());
-
-	TInt result = KErrNone;
-
-	if ( !IsScriptSessionOpen(scriptID))
-		{
-		TRAP (result, iSecMgrServer->UnRegisterScriptL (scriptID, policyID));
-		if(KErrNone>result)
-				result = ErrUnRegisterScriptFailed;	
-		}
-	else
-		{
-		result = ErrUnRegisterScriptFailed;
-		}
-
-	TPckgBuf<TInt> errCode(result);
-	aMessage.Write (EMsgArgTwo, errCode);
-	}
-
-void CRTSecMgrSession::GetScriptSessionL(const RMessage2& aMessage)
-	{
-	if(!aMessage.HasCapability(ECapabilityWriteDeviceData , ""))
-        {
-        User::Leave(ErrAccessDenied);
-        }
-	TExecutableID scriptID = (TExecutableID)aMessage.Int0();
-	TPolicyID policyID = (TPolicyID)aMessage.Int1();
-
-	CScript* script = CScript::NewLC (policyID, scriptID);
-
-	User::LeaveIfError (iSecMgrServer->GetCapabilityInfo (*script));
-
-	if(script->PolicyID() != policyID || !iSecMgrServer->IsValidPolicy(policyID))
-	{
-		User::Leave(ErrInvalidPolicyID);
-	}
-	
-	CleanupStack::Pop (script);
-
-	CRTSecMgrSubSession* counter = CRTSecMgrSubSession::NewL (this, script, iSecMgrServer);
-	CleanupStack::PushL (counter);
-
-	// add the CCountSubSession object to 
-	// this subsession's object container
-	// to gererate a unique id
-	iContainer->AddL (counter);
-
-	// Add the object to object index; this returns
-	// a unique handle so that we can find the object
-	// again laterit later.
-	TInt handle=iSubSessionObjectIndex->AddL (counter);
-
-	// Write the handle value back to the client.
-	// NB It's not obvious but the handle value must be passed
-	// back as the 4th parameter (i.e. parameter number 3 on
-	// a scale of 0 to 3). 
-	// The arguments that are passed across are actually
-	// set up by RSubSessionBase::DoCreateSubSession().
-	// If you pass your own arguments into a call
-	// to RSubSessionBase::CreateSubSession(), which calls DoCreateSubSession, 
-	// then only the first three are picked up - the 4th is reserved for the
-	// the subsession handle.
-	TPckgBuf<TInt> handlePckg(handle);
-	aMessage.Write (EMsgArgThree, handlePckg);
-
-	CleanupStack::Pop (counter);
-	}
-
-void CRTSecMgrSession::GetTrustedUnRegScriptSessionL(const RMessage2& aMessage)
-	{
-	if(!aMessage.HasCapability(ECapabilityWriteDeviceData , ""))
-        {
-        User::Leave(ErrAccessDenied);
-        }
-	//0th parameter - ScriptID
-	//1st parameter - PolicyID	
-	TExecutableID scriptID = (TExecutableID)aMessage.Int0(); //typically this is KAnonymousScript
-	TPolicyID policyID = (TExecutableID)aMessage.Int1();
-
-	CScript* script = CScript::NewLC (policyID, scriptID);
-
-	User::LeaveIfError (iSecMgrServer->GetCapabilityInfo(policyID, scriptID, *script));
-
-	CleanupStack::Pop (script);
-
-	CRTSecMgrSubSession* counter = CRTSecMgrSubSession::NewL (this, script, iSecMgrServer);
-	CleanupStack::PushL (counter);
-
-	iContainer->AddL (counter);
-	TInt handle=iSubSessionObjectIndex->AddL (counter);
-	TPckgBuf<TInt> handlePckg(handle);
-	aMessage.Write (EMsgArgThree, handlePckg);
-
-	CleanupStack::Pop (counter);
-	}
-
-void CRTSecMgrSubSession::GetScriptFile(const RMessage2& aMessage)
-	{
-	RFile scriptFile;
-
-	if ( KErrNone==scriptFile.AdoptFromClient (aMessage, EMsgArgOne,
-			EMsgArgTwo))
-		{
-		RFileWriteStream rfws(scriptFile);
-		iScript->ExternalizeL (rfws);
-		rfws.Close ();
-		scriptFile.Close ();
-		}
-	}
-
-void CRTSecMgrSubSession::UpdatePermGrantL(const RMessage2& aMessage)
-	{
-	if ( !iSession->IsScriptSessionOpen(aMessage.Int0(),this))
-		{
-		iSecMgrServer->UpdatePermGrantL (aMessage.Int0 (), aMessage.Int1 (),
-				aMessage.Int2 ());
-		}
-	else
-		{
-		TPckgBuf<TInt> pkg((TInt)ErrUpdatePermGrantFailed);
-		aMessage.Write (EMsgArgZero, pkg);
-		}
-	}
-
-void CRTSecMgrSubSession::UpdatePermGrantProviderL(const RMessage2& aMessage)
-    {
-    HBufC8* desData = HBufC8::NewLC (KMaxMsgLength);
-    TPtr8 readPtr(desData->Des ());
-    aMessage.ReadL (EMsgArgZero, readPtr);
-    CRTPermGrantMessage *msg = CRTPermGrantMessage::NewLC(readPtr);
-    
-    if ( !iSession->IsScriptSessionOpen(msg->ScriptID(),this))
-        {        
-        RProviderArray allowedProviders;
-        RProviderArray deniedProviders;
-        allowedProviders.Reset();
-        deniedProviders.Reset();
-        msg->AllowedProviders(allowedProviders);
-        msg->DeniedProviders(deniedProviders);
-        iSecMgrServer->UpdatePermGrantL (msg->ScriptID(),allowedProviders,deniedProviders);
-        allowedProviders.Close();
-        deniedProviders.Close();
-        }
-    else
-        {
-        TPckgBuf<TInt> pkg((TInt)ErrUpdatePermGrantFailed);
-        aMessage.Write (EMsgArgZero, pkg);
-        }
-    CleanupStack::PopAndDestroy(msg);
-    CleanupStack::PopAndDestroy(desData);
-    }