diff -r 000000000000 -r b497e44ab2fc terminalsecurity/tcadapter/inc/tcadapter.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/terminalsecurity/tcadapter/inc/tcadapter.h Thu Dec 17 09:07:52 2009 +0200 @@ -0,0 +1,443 @@ +/* +* Copyright (c) 2002 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: Terminal Control DM Adapter +* +*/ + + + +#ifndef __SMLTCADAPTER_H__ +#define __SMLTCADAPTER_H__ + +// --------------------------------------------------------------------- +// Includes +// --------------------------------------------------------------------- +// symbian +#include +#include +// s60 +#include "TARMDmAdapter.h" +#include "TerminalControlClient.h" +#include + +#define TCADAPTER_FILESCAN_EXECUTE_LEAF + +const TUint KSmlDMTCAdapterImplUid = 0x10207824; + +#ifndef MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64 +#define MAX_NUMBER_OF_DIGITS_IN_10BASE_INT64 21 +#endif + +// The string value for true/false +_LIT8( KTCValueTrue, "true" ); +_LIT8( KTCValueFalse, "false" ); + +// Passcode min/max length +const TInt KTCPassCodeMinLen = 4; +const TInt KTCPassCodeMaxLen = 255; + +// the DDF version must be changed if any changes in +// DDF structure ( built in DDFStructureL() function ) +_LIT8( KSmlTCDDFVersion, "1.0" ); + +_LIT8( KSmlTCTextPlain, "text/plain" ); +_LIT8( KSmlTCTextXml, "text/xml" ); + +_LIT8( KTCNodeName, "TerminalSecurity" ); +_LIT8( KTCNodeDescription, + "This node is the root node for all terminal control functionality" ); + +_LIT8( KTCFileScanNodeName, "FileScan" ); +_LIT8( KTCFileScanNodeDescription, + "The file scan feature delivers to admin a list of files or \ + folders found in device" ); + +#ifdef TCADAPTER_FILESCAN_EXECUTE_LEAF +_LIT8( KTCFileScanExecuteNodeName, "Execute" ); +_LIT8( KTCFileScanExecuteNodeDescription, + "This node can be used to execute file scan operation." ); +#endif + +_LIT8( KTCFileScanResultsNodeName, "Results" ); +_LIT8( KTCFileScanResultsNodeDescription, + "This node will hold the scan results" ); + +_LIT8( KTCFileDeleteNodeName, "FileDelete" ); +_LIT8( KTCFileDeleteNodeDescription, "Deletes a file or empty folder" ); + +_LIT8( KTCDeviceLockNodeName, "DeviceLock" ); +_LIT8( KTCDeviceLockNodeDescription, + "The parent node for all DeviceLock related nodes" ); + +_LIT8( KTCAutoLockPeriodNodeName, "AutoLockPeriod" ); +_LIT8( KTCAutoLockPeriodNodeDescription, + "AutoLockPeriod is an integer that tells after how many minutes the device \ + will be automatically locked if not used" ); + +_LIT8( KTCMaxAutoLockPeriodNodeName, "MaxAutoLockPeriod" ); +_LIT8( KTCMaxAutoLockPeriodNodeDescription, + "MaxAutoLockPeriod is an integer that tells maximum value of AutoLockPeriod" ); + +_LIT8( KTCLockLevelNodeName, "LockLevel" ); +_LIT8( KTCLockLevelNodeDescription, + "Lock level tells whether lock is enabled, and what type of lock it is" ); + +_LIT8( KTCLockCodeNodeName, "LockCode" ); +_LIT8( KTCLockCodeNodeDescription, + "LockCode is the character sequence that is needed to open locked device" ); + +//#ifdef __SAP_DEVICE_LOCK_ENHANCEMENTS +// -------- Enhanced features BEGIN + +_LIT8( KTCLockCodeMinLengthNodeName, "LockCodeMinLength" ); +_LIT8( KTCLockCodeMinLengthNodeDescription, + "LockCode minimum length, 4-256 characters" ); + +_LIT8( KTCLockCodeMaxLengthNodeName, "LockCodeMaxLength" ); +_LIT8( KTCLockCodeMaxLengthNodeDescription, + "LockCode maximum length, 4-256 characters" ); + +_LIT8( KTCLockCodeRequireUpperAndLowerNodeName, + "LockCodeRequireUpperAndLower" ); +_LIT8( KTCLockCodeRequireUpperAndLowerNodeDescription, + "If enabled the LockCode must contain both upper and lower case letters" ); + +_LIT8( KTCLockCodeRequireCharsAndNumbersNodeName, + "LockCodeRequireCharsAndNumbers" ); +_LIT8( KTCLockCodeRequireCharsAndNumbersNodeDescription, + "If enabled the LockCode must contain both chars and numbers" ); + +_LIT8( KTCLockCodeMaxRepeatedCharactersNodeName, + "LockCodeMaxRepeatedCharacters" ); +_LIT8( KTCLockCodeMaxRepeatedCharactersNodeDescription, + "Tells how many times a single character can be used in a password. \ + Values between 0 and 4, 0 = no restriction" ); + +_LIT8( KTCLockCodeHistoryBufferNodeName, "LockCodeHistoryBuffer" ); +_LIT8( KTCLockCodeHistoryBufferNodeDescription, + "History buffer for previously used lock codes. 0 = no restriction, \ + 1-X = the lock code can not match the previous X lock codes" ); + +_LIT8( KTCLockCodeExpirationNodeName, "LockCodeExpiration" ); +_LIT8( KTCLockCodeExpirationNodeDescription, + "The password expires after X days, 0 = no restriction, 1-365" ); + +_LIT8( KTCLockCodeMinChangeToleranceNodeName, "LockCodeMinChangeTolerance" ); +_LIT8( KTCLockCodeMinChangeToleranceNodeDescription, + "The user can change the password only X times before 'minimum change \ + interval' hours has passed" ); + +_LIT8( KTCLockCodeMinChangeIntervalNodeName, "LockCodeMinChangeInterval" ); +_LIT8( KTCLockCodeMinChangeIntervalNodeDescription, + "The user cannot change the password more than 'minimum change tolerance' \ + times before X hours have passed since the previous change" ); + +_LIT8( KTCLockCodeCheckSpecificStringsNodeName,"LockCodeCheckSpecificStrings" ); +_LIT8( KTCLockCodeCheckSpecificStringsNodeDescription, + "0 = No restriction, 1 = The password cannot match a string in the set of \ + strings given by the next three calls" ); + +_LIT8( KTCLockCodeDisallowSpecificNodeName, "LockCodeDisallowSpecific" ); +_LIT8( KTCLockCodeDisallowSpecificNodeDescription, + "Disallow the specific string/strings given. Individual strings can be \ + separated with ';'" ); + +_LIT8( KTCLockCodeAllowSpecificNodeName, "LockCodeAllowSpecific" ); +_LIT8( KTCLockCodeAllowSpecificNodeDescription, + "Re-allow the specific string/strings given. \ + Individual strings can be separated with ';'" ); + +_LIT8( KTCLockCodeClearSpecificStringsNodeName, "LockCodeClearSpecificStrings" ); +_LIT8( KTCLockCodeClearSpecificStringsNodeDescription, + "Clear the specific string -buffer" ); + +_LIT8( KTCLockCodeMaxAttemptsNodeName, "LockCodeMaxAttempts" ); +_LIT8( KTCLockCodeMaxAttemptsNodeDescription, + "0 = No restriction, 3-100 = The device is 'hard' reset after the user has \ + consecutively failed X times to answer the password query" ); + +_LIT8( KTCLockCodeConsecutiveNumbersNodeName, "LockCodeConsecutiveNumbers" ); +_LIT8( KTCLockCodeConsecutiveNumbersNodeDescription, + "0 = No restriction, 1 = The password cannot contain two consecutive numbers" ); + +_LIT8( KTCLockCodeMinSpecialCharactersNodeName, + "LockCodeMinSpecialCharacters" ); +_LIT8( KTCLockCodeMinSpecialCharactersNodeDescription, + "Tells the least number of special characters that must be present in the lock code. \ + Values between 0 and 255, 0 = no restriction" ); + +_LIT8( KTCLockCodeDisallowSimpleNodeName, "LockCodeDisallowSimple" ); +_LIT8( KTCLockCodeDisallowSimpleNodeDescription, + "0 = No restriction, 1 = The password cannot be a simple string" ); + + + +// -------- Enhanced features END +//#endif + +_LIT8( KTCDeviceWipeNodeName, "DeviceWipe" ); +_LIT8( KTCDeviceWipeNodeDescription, + "This node is the root node for all terminal control functionality" ); + +_LIT8( KTCLocalOperationsNodeName, "LocalOperations" ); +_LIT8( KTCLocalOperationsNodeDescription, + "This node is common parent for all local operations" ); + +_LIT8( KTCStartNodeName, "Start" ); +_LIT8( KTCStartNodeDescription, + "Exec command causes device to start an application" ); + +_LIT8( KTCStopNodeName, "Stop" ); +_LIT8( KTCStopNodeDescription, + "Exec command causes device to stop an application or process" ); + +_LIT8( KTCProcessesNodeName, "Processes" ); +_LIT8( KTCProcessesNodeDescription, + "TThis is root for all process related information that is \ + available for the admin" ); + +_LIT8( KTCProcessesDynaNodeDescription, + "This node is placeholder for an identity of a process" ); + +_LIT8( KTCIDNodeName, "ID" ); +_LIT8( KTCIDNodeDescription, + "This leaf node holds the unique id of the process" ); + +_LIT8( KTCFromRAMNodeName, "FromRAM" ); +_LIT8( KTCFromRAMNodeDescription, + "This leaf holds knowledge whether the process has been loaded from \ + RAM or ROM. " ); + +_LIT8( KTCMemoryInfoNodeName, "MemoryInfo" ); +_LIT8( KTCMemoryInfoNodeDescription, + "This node holds some extra information about memory usage of the process." ); + +_LIT8( KTCProcessFilenameNodeName, "Filename" ); +_LIT8( KTCProcessFilenameNodeDescription, + "This node holds the filename of the process" ); + +_LIT8( KTCRebootNodeName, "Reboot" ); +_LIT8( KTCRebootNodeDescription, + "This node is the root node for all terminal control functionality" ); + +_LIT8( KTCDynamicNodeName, "" ); +_LIT( KTCSeparator16, "/" ); + +_LIT8( KTCSeparator8, "/" ); + +// ------------------------------------------------------------------- +// CSmlDmEmailAdapter +// ------------------------------------------------------------------- +class CTcAdapter : public CTARMDmAdapter//, public MMsvSessionObserver + { +private: + enum TTcNodeIdentifier + { + ETcNodeTerminalControl = 0, + ETcNodeFileScan, +#ifdef TCADAPTER_FILESCAN_EXECUTE_LEAF + ETcNodeFileScanExecute, +#endif + ETcNodeFileScanResults, + ETcNodeFileDelete, + ETcNodeDeviceLock, + ETcNodeAutoLockPeriod, + ETcNodeMaxAutoLockPeriod, + ETcNodeLockLevel, + ETcNodeLockCode, +// --------- Enhanced features BEGIN ------------------ +//#ifdef __SAP_DEVICE_LOCK_ENHANCEMENTS + ETcNodeLockCodeMinLength, + ETcNodeLockCodeMaxLength, + ETcNodeLockCodeRequireUpperAndLower, + ETcNodeLockCodeRequireCharsAndNumbers, + ETcNodeLockCodeMaxRepeatedCharacters, + ETcNodeLockCodeHistoryBuffer, + ETcNodeLockCodeExpiration, + ETcNodeLockCodeMinChangeTolerance, + ETcNodeLockCodeMinChangeInterval, + ETcNodeLockCodeCheckSpecificStrings, + ETcNodeLockCodeDisallowSpecific, + ETcNodeLockCodeAllowSpecific, + ETcNodeLockCodeClearSpecificStrings, + ETcNodeLockCodeMaxAttempts, + ETcNodeLockConsecutiveNumbers, + ETcNodeLockCodeMinSpecialCharacters, + ETcNodeLockDisallowSimple, +//#endif +// --------- Enhanced features END -------------------- + ETcNodeDeviceWipe, + ETcNodeProcesses, + ETcNodeProcessesX, + ETcNodeID, + ETcNodeFromRAM, + ETcNodeMemoryInfo, + ETcNodeFilename, + ETcNodeReboot, + ETcNodeLocalOperations, + ETcNodeStart, + ETcNodeStop, + ETcNodeNotUsedAndAlwaysLast + }; + + enum TTcNodeAccessType + { + ENoAccess = 0, + EExecute = 1, + EGet = 2, + EReplace = 4, + }; + + static const TInt iAccessTypeList[ETcNodeNotUsedAndAlwaysLast+1]; + + TInt iAccessHistory[ETcNodeNotUsedAndAlwaysLast+1]; + +public: + CTcAdapter(TAny* aEcomArguments); + + static CTcAdapter* NewL(MSmlDmCallback* aDmCallback ); + static CTcAdapter* NewLC(MSmlDmCallback* aDmCallback ); + + virtual ~CTcAdapter(); + + // Pure virtual methods + void DDFVersionL( CBufBase& aVersion ); + + void DDFStructureL( MSmlDmDDFObject& aDDF ); + + CSmlDmAdapter::TError FetchLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, const TDesC8& aType, + CBufFlat* aObject, CBufFlat* aRetMime ); + + // From CTARMDmAdapter + void _UpdateLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, const TDesC8& aObject, + const TDesC8& aType, TInt aStatusRef ); + void _UpdateLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, RWriteStream*& aStream, + const TDesC8& aType, TInt aStatusRef ); + void _DeleteObjectL( const TDesC8& aURI, + const TDesC8& aLUID, TInt aStatusRef ); + void _FetchLeafObjectL( const TDesC8& aURI, + const TDesC8& aLUID, const TDesC8& aType, + TInt aResultsRef, TInt aStatusRef ); + void _FetchLeafObjectSizeL( const TDesC8& aURI, + const TDesC8& aLUID, const TDesC8& aType, + TInt aResultsRef, TInt aStatusRef ); + void _ChildURIListL( const TDesC8& aURI, + const TDesC8& aLUID, + const CArrayFix& aPreviousURISegmentList, + TInt aResultsRef, TInt aStatusRef ); + void _AddNodeObjectL( const TDesC8& aURI, + const TDesC8& aParentLUID, TInt aStatusRef ); + void _ExecuteCommandL( const TDesC8& aURI, + const TDesC8& aLUID, const TDesC8& aArgument, + const TDesC8& aType, TInt aStatusRef ); + void _ExecuteCommandL( const TDesC8& aURI, + const TDesC8& aLUID, RWriteStream*& aStream, + const TDesC8& aType, TInt aStatusRef ); + void _CopyCommandL( const TDesC8& aTargetURI, + const TDesC8& aTargetLUID, const TDesC8& aSourceURI, + const TDesC8& aSourceLUID, const TDesC8& aType, + TInt aStatusRef ); + + void StartAtomicL(); + void CommitAtomicL(); + void RollbackAtomicL(); + TBool StreamingSupport( TInt& aItemSize ); +#ifdef __TARM_SYMBIAN_CONVERGENCY + virtual void StreamCommittedL( RWriteStream& aStream ); +#else + virtual void StreamCommittedL(); +#endif + void CompleteOutstandingCmdsL(); + + TInt StartProcessL(const TDesC8& aURI); + TInt StopProcessL(const TDesC8& aURI); + +private: + void ConstructL(MSmlDmCallback* aDmCallback); + + void FillNodeInfoL(MSmlDmDDFObject& aNode,TSmlDmAccessTypes aAccTypes, + MSmlDmDDFObject::TOccurence aOccurrence, + MSmlDmDDFObject::TScope aScope, + MSmlDmDDFObject::TDFFormat aFormat, + const TDesC8& aDescription, + const TDesC8& aMimeType); + + void CopyAndTrimMimeType(TDes8& aNewMime, const TDesC8& aType); + void CopyAndTrimURI(TDes8& aNewURI, const TDesC8& aURI); + void ParseStartPathL(const TDesC8 &aArguments, + TDes8 &aStartPath, TBool &aRecursive); + + TTcNodeIdentifier GetNodeIdentifier(const TDesC8& aURI); + TInt NewTerminalControlSession(); + TInt CheckTerminalControlSession(); + TPtrC8 PolicyRequestResourceL( const TDesC8& aURI ); + + void _UpdateLeafObjectToBeTrappedL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aObject, const TDesC8& aType, + const TInt aStatusRef); + + void FetchLeafObjectToBeTrappedL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aType, + CBufFlat* aObject, + CBufFlat* aRetMime ); + + void _ExecuteCommandToBeTrappedL( const TDesC8& aURI, + const TDesC8& aLUID, + const TDesC8& aArgument, + const TDesC8& aType, + TInt aStatusRef ); + +private: + + RTerminalControl iTC; + RTerminalControlSession iTCSession; + TBool iConnected; + + // Rollback information + TInt32 iAutoLockPeriod; + TInt32 iLockLevel; + TInt32 iMaxAutoLockPeriod; +// --------- Enhanced features BEGIN ------------------ +//#ifdef __SAP_DEVICE_LOCK_ENHANCEMENTS + TInt32 iLockCodeMinLength; + TInt32 iLockCodeMaxLength; + TBool iLockCodeRequireUpperAndLower; + TInt32 iLockCodeRequireUpperAndLowerInt; + TBool iLockCodeRequireCharsAndNumbers; + TInt32 iLockCodeRequireCharsAndNumbersInt; + TInt32 iLockCodeMaxRepeatedCharacters; + TInt32 iLockCodeHistoryBuffer; + TInt32 iLockCodeExpiration; + TInt32 iLockCodeMinChangeTolerance; + TInt32 iLockCodeMinChangeInterval; + TBool iLockCodeCheckSpecificStrings; + TInt32 iLockCodeCheckSpecificStringsInt; + TInt32 iLockCodeMaxAttempts; + TBool iLockCodeConsecutiveNumbers; + TInt32 iLockCodeConsecutiveNumbersInt; + TInt32 iLockCodeMinSpecialCharacters; + TBool iLockCodeDisallowSimple; + TInt32 iLockCodeDisallowSimpleInt; + +//#endif +// --------- Enhanced features END -------------------- + +}; + +#endif // __SMLTCADAPTER_H__