policymanagement/policyengine/policyengineserver/src/dcmoenforcement.cpp
changeset 5 3f7d9dbe57c8
equal deleted inserted replaced
4:958eca8527dd 5:3f7d9dbe57c8
       
     1 /*
       
     2 * Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: Implementation of policymanagement component for DCMO enforcement
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // INCLUDE FILES
       
    20 
       
    21 #include "dcmoenforcement.h"
       
    22 #include "XACMLconstants.h"
       
    23 #include "debug.h"
       
    24 #include "PolicyEngineServer.h"
       
    25 #include "PolicyStorage.h"
       
    26 
       
    27 // EXTERNAL DATA STRUCTURES
       
    28 // EXTERNAL FUNCTION PROTOTYPES
       
    29 // CONSTANTS
       
    30 
       
    31 _LIT8( KDCMOURI, "DCMO");
       
    32 
       
    33 // MACROS
       
    34 // LOCAL CONSTANTS AND MACROS
       
    35 // MODULE DATA STRUCTURES
       
    36 // LOCAL FUNCTION PROTOTYPES
       
    37 
       
    38 
       
    39 // ==================== LOCAL FUNCTIONS ====================
       
    40 
       
    41 // ================= MEMBER FUNCTIONS =======================
       
    42 
       
    43 // -----------------------------------------------------------------------------
       
    44 // CDcmoEnforcement::CDcmoEnforcement()
       
    45 // -----------------------------------------------------------------------------
       
    46 //
       
    47 
       
    48 CDcmoEnforcement::CDcmoEnforcement()
       
    49 {
       
    50 RDEBUG("CDcmoEnforcement::CDcmoEnforcement()");
       
    51 }
       
    52 
       
    53 
       
    54 // -----------------------------------------------------------------------------
       
    55 // CDcmoEnforcement::~CDcmoEnforcement()
       
    56 // -----------------------------------------------------------------------------
       
    57 //
       
    58 
       
    59 CDcmoEnforcement::~CDcmoEnforcement()
       
    60 {
       
    61 	RDEBUG("CDcmoEnforcement::~CDcmoEnforcement()");
       
    62 	iDMUtil.Close();
       
    63 }
       
    64 
       
    65 // -----------------------------------------------------------------------------
       
    66 // CDcmoEnforcement::NewL()
       
    67 // -----------------------------------------------------------------------------
       
    68 //
       
    69 		
       
    70 CDcmoEnforcement* CDcmoEnforcement::NewL( const TDesC8& aEnforcementId )
       
    71 {
       
    72 	CDcmoEnforcement* self = 0;
       
    73 
       
    74 	if ( aEnforcementId == PolicyLanguage::Constants::EDCMOEnforcementPolicy )
       
    75 	{
       
    76 		RDEBUG("		-> New DCMOEnforcementPolicy");
       
    77 		self = new (ELeave) CDcmoEnforcement();
       
    78 		self->iSettingType = EDCMOEnforcement;	
       
    79 	}
       
    80 		
       
    81 	return self;
       
    82 }
       
    83 
       
    84 // -----------------------------------------------------------------------------
       
    85 // CDcmoEnforcement::ValidEnforcementElement()
       
    86 // -----------------------------------------------------------------------------
       
    87 //
       
    88 TBool CDcmoEnforcement::ValidEnforcementElement( const TDesC8& aEnforcementId)
       
    89 {
       
    90 	RDEBUG("CDcmoEnforcement::ValidEnforcementElement");
       
    91 	if ( aEnforcementId == PolicyLanguage::Constants::EDCMOEnforcementPolicy )
       
    92 	{
       
    93 		return ETrue;
       
    94 	} 
       
    95 	
       
    96 	return EFalse;
       
    97 }
       
    98 
       
    99 		
       
   100 
       
   101 	
       
   102 // -----------------------------------------------------------------------------
       
   103 // CDcmoEnforcement::InitEnforcement()
       
   104 // -----------------------------------------------------------------------------
       
   105 //
       
   106 
       
   107 void CDcmoEnforcement::InitEnforcementL( TRequestStatus& aRequestStatus)
       
   108 {
       
   109 	RDEBUG("CDcmoEnforcement::InitEnforcementL");
       
   110 	//connect to server
       
   111 	User::LeaveIfError( iDMUtil.Connect());
       
   112 	
       
   113 	iInitState++;
       
   114 
       
   115 	//complete request	
       
   116 	TRequestStatus * status = &aRequestStatus;
       
   117 	User::RequestComplete( status, KErrNone);	
       
   118 }
       
   119 
       
   120 // -----------------------------------------------------------------------------
       
   121 // CDcmoEnforcement::InitReady()
       
   122 // -----------------------------------------------------------------------------
       
   123 //
       
   124 
       
   125 TBool CDcmoEnforcement::InitReady()
       
   126 {
       
   127 	return iInitState;
       
   128 }
       
   129 
       
   130 
       
   131 // -----------------------------------------------------------------------------
       
   132 // CDcmoEnforcement::DoEnforcementL()
       
   133 // -----------------------------------------------------------------------------
       
   134 //
       
   135 
       
   136 void CDcmoEnforcement::DoEnforcementL( TRequestStatus& aRequestStatus)
       
   137 {
       
   138 	RDEBUG("CDcmoEnforcement::DoEnforcementL()");
       
   139 
       
   140 	if ( iAccessControlList->Count())
       
   141 	{
       
   142 		//ACL...
       
   143 		User::LeaveIfError( iDMUtil.SetMngSessionCertificate( SessionCertificate()));
       
   144 		User::LeaveIfError( iDMUtil.AddACLForNode( KDCMOURI, EForChildrens, EACLDelete));
       
   145 		User::LeaveIfError( iDMUtil.AddACLForNode( KDCMOURI, EForNode, EACLGet ) );
       
   146 		User::LeaveIfError( iDMUtil.SetACLForNode( KDCMOURI, EForNode, EACLAdd));
       
   147 		User::LeaveIfError( iDMUtil.SetACLForNode( KDCMOURI, EForNode, EACLExec));
       
   148 
       
   149 		CPolicyStorage::PolicyStorage()->ActivateEnforcementFlagL( iSettingType);	
       
   150 	}
       
   151 	else
       
   152 	{
       
   153 		CPolicyStorage::PolicyStorage()->DeactivateEnforcementFlagL( iSettingType);
       
   154 		
       
   155 		//ACL...
       
   156 		User::LeaveIfError( iDMUtil.RemoveACL( KDCMOURI, ETrue));
       
   157 		
       
   158 	}
       
   159 	
       
   160 	iEnforcementState++;
       
   161 	TRequestStatus * status = &aRequestStatus;
       
   162 	User::RequestComplete( status, KErrNone);
       
   163 }
       
   164 
       
   165 // -----------------------------------------------------------------------------
       
   166 // CDcmoEnforcement::EnforcementReady()
       
   167 // -----------------------------------------------------------------------------
       
   168 //
       
   169 TBool CDcmoEnforcement::EnforcementReady()
       
   170 {
       
   171 	return iEnforcementState > 0;
       
   172 }
       
   173 	
       
   174 // -----------------------------------------------------------------------------
       
   175 // CDcmoEnforcement::FinishEnforcementL()
       
   176 // -----------------------------------------------------------------------------
       
   177 //
       
   178 void CDcmoEnforcement::FinishEnforcementL( TBool aFlushSettings)
       
   179 {
       
   180 	RDEBUG("CDcmoEnforcement::FinishEnforcementL");
       
   181 	//Close sessions
       
   182 	if (aFlushSettings)
       
   183 	{
       
   184 		iDMUtil.Flush();		
       
   185 	}
       
   186 	
       
   187 	iDMUtil.Close();
       
   188 }
       
   189 				
       
   190 // -----------------------------------------------------------------------------
       
   191 // CDcmoEnforcement::AccessRightList()
       
   192 // -----------------------------------------------------------------------------
       
   193 //
       
   194 void CDcmoEnforcement::AccessRightList( RAccessControlList& aAccessControlList)
       
   195 {
       
   196 	iAccessControlList = &aAccessControlList;
       
   197 }
       
   198 
       
   199 // -----------------------------------------------------------------------------
       
   200 // CDcmoEnforcement::ResetEnforcementL()
       
   201 // -----------------------------------------------------------------------------
       
   202 //
       
   203 void CDcmoEnforcement::ResetEnforcementL()
       
   204 {
       
   205 	RDEBUG("CDcmoEnforcement::ResetEnforcementL()");
       
   206 	CPolicyStorage::PolicyStorage()->DeactivateEnforcementFlagL( EDCMOEnforcement);
       
   207 
       
   208 	User::LeaveIfError( iDMUtil.Connect());
       
   209 	CleanupClosePushL( iDMUtil);
       
   210 
       
   211 	//ACL...
       
   212 	User::LeaveIfError( iDMUtil.RemoveACL( KDCMOURI, ETrue ) );
       
   213 	
       
   214 	CleanupStack::PopAndDestroy( &iDMUtil);	
       
   215 }