rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrclient.cpp
changeset 57 61b27eec6533
parent 45 7aa6007702af
--- a/rtsecuritymanager/rtsecuritymanagerclient/src/rtsecmgrclient.cpp	Fri Apr 16 15:54:49 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,661 +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:       Defines security manager client side session and sub-session classes
- *
-*/
-
-
-
-
-
-
-
-#include <coemain.h>
-#include <bautils.h>
-#include <s32file.h>
-#include <eikenv.h>
-#include <rtsecmgrscript.h>
-#include "rtsecmgrmsg.h"
-#include "rtsecmgrdef.h"
-#include "rtsecmgrclient.h"
-#include "rtsecmgrtracer.h"
-
-#ifdef _DEBUG
-_LIT(KServerStartFailed, "Security manager server starting failed");
-#endif
-
-// ---------------------------------------------------------------------------
-// Defintiion of default private constructor
-// ---------------------------------------------------------------------------
-//
-RSecMgrSession::RSecMgrSession()
-	{	
-	}
-
-// ---------------------------------------------------------------------------
-// Connects to the runtime security manager server
-//
-// This function attemtps to kick start security manager server if
-// it is not running already. The number of attempts is currently 2.
-// The number of message slot is defaulted to 4.
-// ---------------------------------------------------------------------------
-//
-/*TInt RSecMgrSession::Connect()
-	{
-	RTSecMgrTraceFunction("RSecMgrSession::Connect()") ;
-	TInt retry(KSecSrvClientTryCount); // Try this twice
-	TInt err(KErrNone);
-	while (retry>KErrNone)
-		{
-		// Try to create a Server session
-		err = CreateSession ( KSecServerProcessName, Version (),
-				KDefaultMessageSlots);
-
-		if ( err != KErrNotFound && err != KErrServerTerminated)
-			{
-			// KErrNone or unrecoverable error
-			if ( err != KErrNone)
-				{
-#ifdef _DEBUG
-				RDebug::Print(KServerStartFailed);
-#endif
-				}
-			retry = 0;
-			}
-		else
-			{
-			// Return code was KErrNotFound or KErrServerTerminated.
-			// Try to start a new security manager server instance
-			err = StartSecManagerServer ();
-			if ( err != KErrNone && err != KErrAlreadyExists)
-				{
-				// Unrecoverable error
-#ifdef _DEBUG
-				RDebug::Print(KServerStartFailed);
-#endif
-				retry = 0;
-				}
-			}
-
-		retry--;
-		}
-	return (err);
-	}*/
-
-TInt RSecMgrSession::Connect()
-    {
-    RTSecMgrTraceFunction("RSecMgrSession::Connect()") ;
-    TInt err(KErrNone);
-        // Try to create a Server session
-    err = CreateSession ( KSecServerProcessName, Version (),
-            KDefaultMessageSlots);
-
-    if ( err != KErrNotFound && err != KErrServerTerminated)
-        {
-        // KErrNone or unrecoverable error
-        if ( err != KErrNone)
-            {
-#ifdef _DEBUG
-            RDebug::Print(KServerStartFailed);
-#endif
-            }
-        
-        }
-    else
-        {
-        // Return code was KErrNotFound or KErrServerTerminated.
-        // Try to start a new security manager server instance
-        TInt retry(KSecSrvClientTryCount);
-        while(retry > 0)
-            {
-            err = StartSecManagerServer ();
-            if ( err != KErrNone && err != KErrAlreadyExists)
-                {
-                // Unrecoverable error
-                #ifdef _DEBUG
-                            RDebug::Print(KServerStartFailed);
-                #endif
-                retry = 0;
-                }
-            else
-                {
-                err = CreateSession ( KSecServerProcessName, Version (),
-                                                KDefaultMessageSlots);
-                if(err != KErrNotFound && err != KErrServerTerminated)
-                    {
-                    if ( err != KErrNone)
-                                {
-                    #ifdef _DEBUG
-                                RDebug::Print(KServerStartFailed);
-                    #endif
-                                }
-                    retry = 0;
-                    }
-                }
-            retry--;
-            }
-        }       
-    return (err);
-    }
-
-// ---------------------------------------------------------------------------
-// Starts runtime security manager server
-//
-// ---------------------------------------------------------------------------
-//
-TInt RSecMgrSession::StartSecManagerServer() const
-	{
-	RTSecMgrTraceFunction("RSecMgrSession::StartSecManagerServer()") ;
-	RProcess server;
-	const TUidType serverUid( KNullUid, KSecMgrServerUid2, KNullUid);
-	TInt err = server.Create ( ServerLocation (), 
-			KNullDesC, 
-			serverUid, 
-			EOwnerProcess);
-
-	// Return error code if we the process couldn't be created
-	if ( KErrNone == err)
-		{
-		// Rendezvous is used to detect server start
-		TRequestStatus status;
-		server.Rendezvous ( status);
-		if ( status != KRequestPending)
-			{
-			// Log Abort Error
-#ifdef _DEBUG
-			RDebug::Print(KServerStartFailed);
-#endif			
-			server.Kill ( 0); // Abort startup
-			}
-		else
-			{
-			server.Resume (); // Logon OK - start the server
-			}
-		User::WaitForRequest (status); // Wait for start or death
-
-		if ( server.ExitType ()== EExitPanic)
-			{
-#ifdef _DEBUG
-			RDebug::Print(KServerStartFailed);
-#endif
-			err = KErrGeneral;
-			}
-		else
-			{
-			err = status.Int ();
-			}
-
-		// We can close the handle now
-		server.Close ();
-		}
-	return err;
-	}
-
-// ---------------------------------------------------------------------------
-// Returns runtime security manager server location
-//
-// ---------------------------------------------------------------------------
-//
-TFullName RSecMgrSession::ServerLocation() const
-	{
-	TFullName fullPathAndName;
-	fullPathAndName.Append ( KSecMgrServerExeName);
-	return fullPathAndName;
-	}
-
-// ---------------------------------------------------------------------------
-// Returns the earliest version number of the security manager server
-//
-// ---------------------------------------------------------------------------
-//
-TVersion RSecMgrSession::Version(void) const
-	{
-	return (TVersion(KRTSecMgrServMajorVersionNumber,KRTSecMgrServMinorVersionNumber,KRTSecMgrServBuildVersionNumber));
-	}
-
-// ---------------------------------------------------------------------------
-// A request to close the session.
-//
-// It makes a call to the server, which deletes the object container and object index
-// for this session, before calling Close() on the base class.
-// ---------------------------------------------------------------------------
-//
-void RSecMgrSession::Close()
-	{
-	if(iHandle)
-		{		
-		SendReceive (ESecServCloseSession);
-		RSessionBase::Close();
-		}
-	}
-
-//
-// Registers the runtime security policy with security manager. This method
-// packs the message parameters required for registering the policy. 
-// 
-// The various parameters required for SetPolicy operation are :
-// 	
-//  Operation Code  : ESetPolicy
-// 	IPC Argument[0] : Policy Identifier (as inOut parameter)
-//  IPC Argument[1] : SecurityPolicy FileHandle
-//  IPC Argument[2] : SecurityPolicy FileSession object
-//  IPC Argument[3] : none
-// 
-TInt RSecMgrSession::SetPolicy(const RFile& aSecPolicy)
-	{
-	TPckgBuf<TInt> pckgPId;
-	TIpcArgs args(&pckgPId);
-
-	TInt ret = aSecPolicy.TransferToServer (args, EMsgArgOne,
-			EMsgArgTwo);
-
-	if ( KErrNone==ret)
-		{
-		ret = SendReceive (ESetPolicy, args);
-
-		if ( KErrNone==ret)
-			return pckgPId (); // Extract the policyID returned from the server. 
-		}
-
-	return ret;
-	}
-
-TPolicyID RSecMgrSession::SetPolicy(const TDesC8& aPolicyBuffer)
-	{	
-	TInt ret(ErrInvalidParameters);
-	if(0==aPolicyBuffer.CompareC(KNullDesC8))
-		{
-		return ret;
-		}
-		
-		TFileName tempDirPath;
-		TFileName tempPath;
-	
-		{
-		RFs fileSession;
-		if ( KErrNone==fileSession.Connect ())
-			{
-			fileSession.PrivatePath (tempDirPath);
-			BaflUtils::EnsurePathExistsL (fileSession, tempDirPath);
-
-			RFile secPolicyFile;
-			secPolicyFile.Temp (fileSession, tempDirPath, tempPath, EFileWrite);
-			secPolicyFile.Write(aPolicyBuffer);
-			secPolicyFile.Close();			
-			}		
-		fileSession.Close();
-		}
-		
-	RFs fileSession;
-	if ( KErrNone==fileSession.Connect ())
-		{
-		CleanupClosePushL (fileSession);
-		if ( KErrNone==fileSession.ShareProtected ())
-			{
-			RFile secPolicyFile;
-					
-			if(KErrNone == secPolicyFile.Open(fileSession,tempPath,EFileRead))
-				{
-				ret = SetPolicy (secPolicyFile);
-			
-				secPolicyFile.Close();
-					
-				}
-			
-			fileSession.Delete (tempPath);
-			}
-		
-		CleanupStack::PopAndDestroy (&fileSession);//fileSession
-		}
-
-	fileSession.Close();
-	
-	return ret;
-	}
-
-//
-// UnRegisters a registered security policy. Runtimes should call this function
-// to de-register the already registered security policy.
-// 
-// The various parameters required for UnSetPolicy operation are :
-// 	
-// Operation Code  : EUnsetPolicy
-// IPC Argument[0] : Policy Identifier to un-register
-// IPC Argument[1] : Successcode (as inOut parameter)
-// IPC Argument[2] : none
-// IPC Argument[3] : none
-// 
-TInt RSecMgrSession::UnSetPolicy(TPolicyID aPolicyID)
-	{
-	if ( aPolicyID<=KErrNone)
-		return ErrInvalidPolicyID;
-
-	TPckgBuf<TInt> sucess(KErrNone);
-	TIpcArgs args(aPolicyID, &sucess);
-
-	TInt ret = SendReceive (EUnsetPolicy, args);
-
-	if ( KErrNone==ret)
-		return sucess (); // Extract the value returned from the server. 
-
-	return ret;
-	}
-
-//
-// Updates an already registered security policy. Runtimes should call this function
-// to update their policy.
-// 
-// The various parameters required for UpdatePolicy operation are :
-// 	
-// Operation Code  : EUpdatePolicy
-// IPC Argument[0] : Policy Identifier
-// IPC Argument[1] : SecurityPolicy FileHandle
-// IPC Argument[2] : SecurityPolicy FileSession object
-// IPC Argument[3] : none
-// 
-TPolicyID RSecMgrSession::UpdatePolicy(TPolicyID aPolicyID,
-		const RFile& aSecPolicy)
-	{
-	if ( aPolicyID<=KErrNone)
-		{
-		return ErrInvalidPolicyID;
-		}
-
-	TPckgBuf<TInt> pckgPID(aPolicyID);
-	TIpcArgs args(&pckgPID);
-
-	TInt ret = aSecPolicy.TransferToServer (args, EMsgArgOne,
-			EMsgArgTwo);
-
-	if ( KErrNone==ret)
-		{
-		ret = SendReceive (EUpdatePolicy, args);
-
-		if ( KErrNone==ret)
-			ret = pckgPID ();
-		}
-
-	return ret;
-	}
-
-TPolicyID RSecMgrSession::UpdatePolicy(TPolicyID aPolicyID,
-		const TDesC8& aPolicyBuffer)
-	{
-	TInt ret(ErrInvalidParameters);
-	if(0==aPolicyBuffer.CompareC(KNullDesC8))
-		{
-		return ret;
-		}
-		
-		TFileName tempDirPath;
-		TFileName tempPath;
-	
-		{
-		RFs fileSession;
-		if ( KErrNone==fileSession.Connect ())
-			{
-			fileSession.PrivatePath (tempDirPath);
-			BaflUtils::EnsurePathExistsL (fileSession, tempDirPath);
-
-			RFile secPolicyFile;
-			secPolicyFile.Temp (fileSession, tempDirPath, tempPath, EFileWrite);
-			secPolicyFile.Write(aPolicyBuffer);
-			secPolicyFile.Close();			
-			}		
-		fileSession.Close();
-		}
-		
-	RFs fileSession;
-	if ( KErrNone==fileSession.Connect ())
-		{
-		CleanupClosePushL (fileSession);
-		if ( KErrNone==fileSession.ShareProtected ())
-			{
-			RFile secPolicyFile;
-					
-			if(KErrNone == secPolicyFile.Open(fileSession,tempPath,EFileRead))
-				{
-				
-				ret = UpdatePolicy (aPolicyID, secPolicyFile);
-			
-				secPolicyFile.Close();
-			
-				}
-
-			fileSession.Delete (tempPath);
-			}
-		
-		CleanupStack::PopAndDestroy (&fileSession);//fileSession
-		}
-
-	fileSession.Close();
-	
-	return ret;
-	}
-
-//
-// Registers a script/executable. Runtimes should specify the trust information
-// of the script to be registered. 
-// 
-// Operation Code  : ERegisterScript
-// IPC Argument[0] : Policy Identifier
-// IPC Argument[1] : Script Identifier (as inOut Parameter)
-// IPC Argument[2] : none
-// IPC Argument[3] : none 
-// 
-TExecutableID RSecMgrSession::RegisterScript(TPolicyID aPolicyID, const CTrustInfo& /*aTrustInfo*/)
-	{
-	if ( aPolicyID<KErrNone)
-		return ErrInvalidPolicyID;
-
-	TPckgBuf<TInt> scriptID(KAnonymousScript);
-	TIpcArgs args(aPolicyID, &scriptID);
-
-	TInt result = SendReceive (ERegisterScript, args);
-
-	if ( KErrNone==result)
-		result=scriptID ();
-
-	return result;
-	}
-
-//
-// Registers a script/executable. Runtimes should specify the trust information
-// of the script to be registered. 
-// 
-// Operation Code  : ERegisterScript
-// IPC Argument[0] : Policy Identifier
-// IPC Argument[1] : Script Identifier (as inOut Parameter)
-// IPC Argument[2] : Hash value of script
-// IPC Argument[3] : none
-// 
-TExecutableID RSecMgrSession::RegisterScript(TPolicyID aPolicyID,
-		const TDesC& aHashMarker, const CTrustInfo& /*aTrustInfo*/)
-	{
-	__UHEAP_MARK;
-
-	if(!(aHashMarker.Compare(KNullDesC)))
-		return ErrInvalidParameters;
-	CRTSecMgrRegisterScriptMsg* scriptMsg = CRTSecMgrRegisterScriptMsg::NewL (
-			aPolicyID, aHashMarker);
- 
-	HBufC8* dataDes(NULL);
-	TRAPD(ret, dataDes = scriptMsg->PackMsgL());
-	if ( dataDes)
-		{
-		TExecutableID scriptID(KAnonymousScript);
-		TPckgBuf<TInt> scriptIDBuf(scriptID);
-		TIpcArgs args(dataDes, &scriptIDBuf);
-		
-		ret = SendReceive (ERegisterScriptWithHash, args);
-		delete dataDes;
-		
-		if(KErrNone==ret)
-			ret = scriptIDBuf();
-		}
-
-	delete scriptMsg;
-
-	__UHEAP_MARKEND;
-
-	return ret;
-	}
-
-//
-// De-Registers a script/executable. Runtimes should pass the previously registered
-// script identifier corresponding to the script to be de-registered.
-// 
-// Operation Code  : EUnRegisterScript
-// IPC Argument[0] : Script Identifier
-// IPC Argument[1] : Policy Identifier
-// IPC Argument[2] : Success code (as inOut parameter)
-// IPC Argument[3] : none 
-//  
-TInt RSecMgrSession::UnRegisterScript(TExecutableID aExeID, TPolicyID aPolicyID)
-	{
-	if (aExeID<=KErrNone) 
-		return ErrInvalidScriptID;
-	if (aPolicyID<=KErrNone)
-		return ErrInvalidPolicyID;
-
-	TPckgBuf<TInt> errCode(KErrNone);
-	TIpcArgs args(aExeID, aPolicyID, &errCode);
-
-	TInt result = SendReceive (EUnRegisterScript, args);
-
-	if ( KErrNone==result)
-		return errCode ();
-
-	return result;
-	}
-
-RSecMgrSubSession::RSecMgrSubSession()
-	{	
-	
-	}
-//
-// Opens client-side sub-session for a registered script. The script session is modelled as a
-// client side sub-session with a peer server side sub-session.
-// 
-TInt RSecMgrSubSession::Open(const RSessionBase& aSession,
-		CScript& aScriptInfo, TPolicyID aPolicyID, const TDesC& aHashValue)
-	{
-	TIpcArgs args(aScriptInfo.ScriptID (), aPolicyID);
-
-	TInt errCode(KErrNone);
-	errCode = iFs.Connect();
-	if(errCode == KErrNone)
-    	{
-    	if ( KAnonymousScript==aScriptInfo.ScriptID ())
-    		errCode = CreateSubSession (aSession, EGetTrustedUnRegScriptSession,
-    				args);
-    	else
-    		errCode = CreateSubSession (aSession, EGetScriptSession, args);
-    
-    	if ( errCode==KErrNone)
-    		{
-    		// Retrieve the RFs and RFile handles from the server
-    		TPckgBuf<TInt> fh; // sub-session (RFile) handle
-    		TIpcArgs args(&fh);
-    
-    		RFile file;
-    		CleanupClosePushL(file);
-    
-    		if ( KErrNone==errCode)
-    			{
-    			iFs.ShareProtected ();
-    
-    			TFileName tempDirPath;
-    			TFileName tempPath;
-    
-    			iFs.PrivatePath (tempDirPath);
-    			BaflUtils::EnsurePathExistsL (iFs, tempDirPath);
-    
-    			errCode = file.Temp (iFs, tempDirPath, tempPath, EFileWrite);
-    
-    			if ( KErrNone==errCode)
-    				{
-    				file.TransferToServer (args, EMsgArgOne, EMsgArgTwo);
-    				errCode = SendReceive (EGetScriptFile, args);
-    
-    				if ( KErrNone==errCode)
-    					{
-    					RFileReadStream rfs(file);
-    					CleanupClosePushL(rfs);
-    					aScriptInfo.InternalizeL (rfs);
-    					TBufC<KMaxPath> hashValue(aScriptInfo.Hash());
-    					if(0 != hashValue.Compare(KNullDesC))
-    						{
-    						if(!aScriptInfo.HashMatch(aHashValue))
-    							{
-    							//hash check failed
-    							errCode = KErrNotFound;
-    							}						
-    						}
-    					
-    					CleanupStack::PopAndDestroy(&rfs);
-    					}
-    				}
-    			iFs.Delete (tempPath);
-    			}
-    
-    		CleanupStack::PopAndDestroy(&file);
-    		}
-    	}
-	return errCode;
-	}
-
-//
-// Opens client-side sub-session for an un-registered trusted script. The script session is modelled as a
-// client side sub-session with a peer server side sub-session.
-// 
-TInt RSecMgrSubSession::Open(const RSessionBase& aSession,
-		CScript& aScriptInfo, TPolicyID aPolicyID, const CTrustInfo& /*aTrustInfo*/)
-	{	
-	return Open (aSession, aScriptInfo, aPolicyID);
-	}
-
-//
-// Updates the blanket permission data of the script
-// 
-TInt RSecMgrSubSession::UpdatePermGrant(TExecutableID aScriptID,
-		TPermGrant aPermGrant, TPermGrant aPermDenied) const
-	{
-	TIpcArgs args(aScriptID, (TInt)aPermGrant, (TInt)aPermDenied);
-	return SendReceive (EUpdatePermanentGrant, args);
-	}
-
-//
-//Updates the blanket permission data of the script
-//
-TInt RSecMgrSubSession::UpdatePermGrant(TExecutableID aScriptID,
-        RProviderArray aAllowedProviders, RProviderArray aDeniedProviders) const
-    {
-    CRTPermGrantMessage* msg = CRTPermGrantMessage::NewL(aAllowedProviders , aDeniedProviders , aScriptID);
-    HBufC8* buffer = msg->PackMessageL();
-    TIpcArgs args(buffer);
-    TInt ret = SendReceive (EUpdatePermanentGrantProvider, args);
-    delete buffer;
-    delete msg;
-    return ret;
-    }
-//
-// Close the subsession.
-//
-void RSecMgrSubSession::Close()
-	{
-	iFs.Close();
-	RSubSessionBase::CloseSubSession (ECloseScriptSession);
-	}
-