diff -r 958eca8527dd -r 3f7d9dbe57c8 policymanagement/policyengine/policyengineserver/src/dcmoenforcement.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/policymanagement/policyengine/policyengineserver/src/dcmoenforcement.cpp Tue Feb 02 00:44:00 2010 +0200 @@ -0,0 +1,215 @@ +/* +* Copyright (c) 2009-2010 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: Implementation of policymanagement component for DCMO enforcement +* +*/ + + +// INCLUDE FILES + +#include "dcmoenforcement.h" +#include "XACMLconstants.h" +#include "debug.h" +#include "PolicyEngineServer.h" +#include "PolicyStorage.h" + +// EXTERNAL DATA STRUCTURES +// EXTERNAL FUNCTION PROTOTYPES +// CONSTANTS + +_LIT8( KDCMOURI, "DCMO"); + +// MACROS +// LOCAL CONSTANTS AND MACROS +// MODULE DATA STRUCTURES +// LOCAL FUNCTION PROTOTYPES + + +// ==================== LOCAL FUNCTIONS ==================== + +// ================= MEMBER FUNCTIONS ======================= + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::CDcmoEnforcement() +// ----------------------------------------------------------------------------- +// + +CDcmoEnforcement::CDcmoEnforcement() +{ +RDEBUG("CDcmoEnforcement::CDcmoEnforcement()"); +} + + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::~CDcmoEnforcement() +// ----------------------------------------------------------------------------- +// + +CDcmoEnforcement::~CDcmoEnforcement() +{ + RDEBUG("CDcmoEnforcement::~CDcmoEnforcement()"); + iDMUtil.Close(); +} + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::NewL() +// ----------------------------------------------------------------------------- +// + +CDcmoEnforcement* CDcmoEnforcement::NewL( const TDesC8& aEnforcementId ) +{ + CDcmoEnforcement* self = 0; + + if ( aEnforcementId == PolicyLanguage::Constants::EDCMOEnforcementPolicy ) + { + RDEBUG(" -> New DCMOEnforcementPolicy"); + self = new (ELeave) CDcmoEnforcement(); + self->iSettingType = EDCMOEnforcement; + } + + return self; +} + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::ValidEnforcementElement() +// ----------------------------------------------------------------------------- +// +TBool CDcmoEnforcement::ValidEnforcementElement( const TDesC8& aEnforcementId) +{ + RDEBUG("CDcmoEnforcement::ValidEnforcementElement"); + if ( aEnforcementId == PolicyLanguage::Constants::EDCMOEnforcementPolicy ) + { + return ETrue; + } + + return EFalse; +} + + + + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::InitEnforcement() +// ----------------------------------------------------------------------------- +// + +void CDcmoEnforcement::InitEnforcementL( TRequestStatus& aRequestStatus) +{ + RDEBUG("CDcmoEnforcement::InitEnforcementL"); + //connect to server + User::LeaveIfError( iDMUtil.Connect()); + + iInitState++; + + //complete request + TRequestStatus * status = &aRequestStatus; + User::RequestComplete( status, KErrNone); +} + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::InitReady() +// ----------------------------------------------------------------------------- +// + +TBool CDcmoEnforcement::InitReady() +{ + return iInitState; +} + + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::DoEnforcementL() +// ----------------------------------------------------------------------------- +// + +void CDcmoEnforcement::DoEnforcementL( TRequestStatus& aRequestStatus) +{ + RDEBUG("CDcmoEnforcement::DoEnforcementL()"); + + if ( iAccessControlList->Count()) + { + //ACL... + User::LeaveIfError( iDMUtil.SetMngSessionCertificate( SessionCertificate())); + User::LeaveIfError( iDMUtil.AddACLForNode( KDCMOURI, EForChildrens, EACLDelete)); + User::LeaveIfError( iDMUtil.AddACLForNode( KDCMOURI, EForNode, EACLGet ) ); + User::LeaveIfError( iDMUtil.SetACLForNode( KDCMOURI, EForNode, EACLAdd)); + User::LeaveIfError( iDMUtil.SetACLForNode( KDCMOURI, EForNode, EACLExec)); + + CPolicyStorage::PolicyStorage()->ActivateEnforcementFlagL( iSettingType); + } + else + { + CPolicyStorage::PolicyStorage()->DeactivateEnforcementFlagL( iSettingType); + + //ACL... + User::LeaveIfError( iDMUtil.RemoveACL( KDCMOURI, ETrue)); + + } + + iEnforcementState++; + TRequestStatus * status = &aRequestStatus; + User::RequestComplete( status, KErrNone); +} + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::EnforcementReady() +// ----------------------------------------------------------------------------- +// +TBool CDcmoEnforcement::EnforcementReady() +{ + return iEnforcementState > 0; +} + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::FinishEnforcementL() +// ----------------------------------------------------------------------------- +// +void CDcmoEnforcement::FinishEnforcementL( TBool aFlushSettings) +{ + RDEBUG("CDcmoEnforcement::FinishEnforcementL"); + //Close sessions + if (aFlushSettings) + { + iDMUtil.Flush(); + } + + iDMUtil.Close(); +} + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::AccessRightList() +// ----------------------------------------------------------------------------- +// +void CDcmoEnforcement::AccessRightList( RAccessControlList& aAccessControlList) +{ + iAccessControlList = &aAccessControlList; +} + +// ----------------------------------------------------------------------------- +// CDcmoEnforcement::ResetEnforcementL() +// ----------------------------------------------------------------------------- +// +void CDcmoEnforcement::ResetEnforcementL() +{ + RDEBUG("CDcmoEnforcement::ResetEnforcementL()"); + CPolicyStorage::PolicyStorage()->DeactivateEnforcementFlagL( EDCMOEnforcement); + + User::LeaveIfError( iDMUtil.Connect()); + CleanupClosePushL( iDMUtil); + + //ACL... + User::LeaveIfError( iDMUtil.RemoveACL( KDCMOURI, ETrue ) ); + + CleanupStack::PopAndDestroy( &iDMUtil); +}