os/kernelhwsrv/kerneltest/e32test/property/t_prop_define.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of the License "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// t_prop_define.cpp.cpp
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#include <e32test.h>
sl@0
    19
#include <e32svr.h>
sl@0
    20
sl@0
    21
#include "t_property.h"
sl@0
    22
sl@0
    23
TSecureId MySecureId;
sl@0
    24
TBool IHaveWriteDeviceData;
sl@0
    25
sl@0
    26
_LIT(KSecurityOwnerName, "RProperty Security: Owner Basics");
sl@0
    27
sl@0
    28
class CPropSecurityOwner : public CTestProgram
sl@0
    29
	{
sl@0
    30
public:
sl@0
    31
	CPropSecurityOwner(TUid aCategory, TUint aMasterKey, TUint aSlaveKey, RProperty::TType	aType) :
sl@0
    32
		CTestProgram(KSecurityOwnerName), iCategory(aCategory), iMasterKey(aMasterKey), iSlaveKey(aSlaveKey), 
sl@0
    33
			iType(aType)
sl@0
    34
		{
sl@0
    35
		}
sl@0
    36
sl@0
    37
	void Run(TUint aCount);
sl@0
    38
sl@0
    39
private:
sl@0
    40
	TUid				iCategory;
sl@0
    41
	TUint				iMasterKey;
sl@0
    42
	TUint				iSlaveKey;
sl@0
    43
	RProperty::TType	iType;
sl@0
    44
	};
sl@0
    45
sl@0
    46
void CPropSecurityOwner::Run(TUint aCount)
sl@0
    47
	{
sl@0
    48
	for (TUint i = 0; i < aCount; ++i)
sl@0
    49
		{
sl@0
    50
		// Delete() can only be called by the property owner, as defined by the process Security ID,
sl@0
    51
		// any other process will get a KErrPermissionDenied error.
sl@0
    52
		RProperty	mProp;
sl@0
    53
		TInt r = mProp.Delete(iCategory, iMasterKey);
sl@0
    54
		TF_ERROR(r, r == KErrPermissionDenied);
sl@0
    55
		}
sl@0
    56
	}
sl@0
    57
sl@0
    58
sl@0
    59
sl@0
    60
_LIT(KPropDefineSecurityName, "RProperty Security: Define category security");
sl@0
    61
sl@0
    62
class CPropDefineSecurity : public CTestProgram
sl@0
    63
	{
sl@0
    64
public:
sl@0
    65
	CPropDefineSecurity(TUid aCategory, TUint aMasterKey, TUint aSlaveKey, RProperty::TType	aType) :
sl@0
    66
		CTestProgram(KPropDefineSecurityName), iCategory(aCategory), iMasterKey(aMasterKey), iSlaveKey(aSlaveKey), 
sl@0
    67
			iType(aType)
sl@0
    68
		{
sl@0
    69
		}
sl@0
    70
sl@0
    71
	void Run(TUint aCount);
sl@0
    72
sl@0
    73
private:
sl@0
    74
	TUid				iCategory;
sl@0
    75
	TUint				iMasterKey;
sl@0
    76
	TUint				iSlaveKey;
sl@0
    77
	RProperty::TType	iType;
sl@0
    78
	};
sl@0
    79
sl@0
    80
void CPropDefineSecurity::Run(TUint aCount)
sl@0
    81
	{
sl@0
    82
	for (TUint i = 0; i < aCount; ++i)
sl@0
    83
		{
sl@0
    84
		// Test defining in the system category
sl@0
    85
		RProperty	prop;
sl@0
    86
		TInt r = prop.Define(KUidSystemCategory, iSlaveKey, iType, KPassPolicy, KPassPolicy);
sl@0
    87
		RDebug::Printf("CPropDefineSecurity define with System Category returns %d",r);
sl@0
    88
		TF_ERROR(r, r == IHaveWriteDeviceData ? KErrNone : KErrPermissionDenied);
sl@0
    89
		if(r==KErrNone)
sl@0
    90
			{
sl@0
    91
			r = prop.Delete(KUidSystemCategory, iSlaveKey);
sl@0
    92
			TF_ERROR(r, r == KErrNone);
sl@0
    93
			}
sl@0
    94
sl@0
    95
		// Tesk defining properties with categories above and below security threshold
sl@0
    96
		TUid categoryA = { KUidSecurityThresholdCategoryValue-1 };
sl@0
    97
		r = prop.Define(categoryA, iSlaveKey, iType, KPassPolicy, KPassPolicy);
sl@0
    98
		RDebug::Printf("CPropDefineSecurity define with Category A returns %d",r);
sl@0
    99
		TF_ERROR(r, r == (categoryA==MySecureId || IHaveWriteDeviceData) ? KErrNone : KErrPermissionDenied);
sl@0
   100
		if(r==KErrNone)
sl@0
   101
			{
sl@0
   102
			r = prop.Delete(categoryA, iSlaveKey);
sl@0
   103
			TF_ERROR(r, r == KErrNone);
sl@0
   104
			}
sl@0
   105
		TUid categoryB = { KUidSecurityThresholdCategoryValue };
sl@0
   106
		r = prop.Define(categoryB, iSlaveKey, iType, KPassPolicy, KPassPolicy);
sl@0
   107
		RDebug::Printf("CPropDefineSecurity define with Category B returns %d",r);
sl@0
   108
		TF_ERROR(r, r == (categoryB==MySecureId) ? KErrNone : KErrPermissionDenied);
sl@0
   109
		if(r==KErrNone)
sl@0
   110
			{
sl@0
   111
			r = prop.Delete(categoryB, iSlaveKey);
sl@0
   112
			TF_ERROR(r, r == KErrNone);
sl@0
   113
			}
sl@0
   114
		TUid categoryC = { KUidSecurityThresholdCategoryValue+1 };
sl@0
   115
		r = prop.Define(categoryC, iSlaveKey, iType, KPassPolicy, KPassPolicy);
sl@0
   116
		RDebug::Printf("CPropDefineSecurity define with Category C returns %d",r);
sl@0
   117
		TF_ERROR(r, r == KErrPermissionDenied);
sl@0
   118
sl@0
   119
		}
sl@0
   120
	}
sl@0
   121
sl@0
   122
sl@0
   123
sl@0
   124
sl@0
   125
GLDEF_C TInt E32Main()
sl@0
   126
	{
sl@0
   127
	TSecurityInfo info;
sl@0
   128
	info.Set(RProcess());
sl@0
   129
	MySecureId = info.iSecureId;
sl@0
   130
	IHaveWriteDeviceData = info.iCaps.HasCapability(ECapabilityWriteDeviceData);
sl@0
   131
sl@0
   132
	TInt len = User::CommandLineLength();
sl@0
   133
	__ASSERT_ALWAYS(len, User::Panic(_L("t_prop_sec: bad args"), 0));
sl@0
   134
sl@0
   135
	// Get arguments for the command line
sl@0
   136
	TInt size = len * sizeof(TUint16);
sl@0
   137
	HBufC8* hb = HBufC8::NewMax(size);
sl@0
   138
	__ASSERT_ALWAYS(hb, User::Panic(_L("t_prop_sec: no memory"), 0));
sl@0
   139
	TPtr cmd((TUint16*) hb->Ptr(), len);
sl@0
   140
	User::CommandLine(cmd);
sl@0
   141
	CPropSecurity::TArgs* args = (CPropSecurity::TArgs*) hb->Ptr();	
sl@0
   142
sl@0
   143
	CTestProgram::Start();
sl@0
   144
sl@0
   145
	CTestProgram* progs[] = 
sl@0
   146
		{ 
sl@0
   147
		new CPropSecurityOwner(args->iCategory, args->iMasterKey, args->iSlaveKeySlot, RProperty::EInt),
sl@0
   148
		new CPropSecurityOwner(args->iCategory, args->iMasterKey, args->iSlaveKeySlot + 1, RProperty::EByteArray),
sl@0
   149
		new CPropDefineSecurity(args->iCategory, args->iMasterKey, args->iSlaveKeySlot, RProperty::EInt),
sl@0
   150
		NULL 
sl@0
   151
		};
sl@0
   152
sl@0
   153
	TInt i;
sl@0
   154
	TInt n = (sizeof(progs)/sizeof(*progs)) - 1;
sl@0
   155
	for (i = 0; i < n; ++i)
sl@0
   156
		{
sl@0
   157
		__ASSERT_ALWAYS(progs[i], User::Panic(_L("t_property: no memory"), 0));
sl@0
   158
		}
sl@0
   159
	
sl@0
   160
	CTestProgram::LaunchGroup(progs, 2);
sl@0
   161
sl@0
   162
	for (i = 0; i < n; ++i)
sl@0
   163
		{
sl@0
   164
		delete progs[i];
sl@0
   165
		}
sl@0
   166
sl@0
   167
	CTestProgram::End();
sl@0
   168
sl@0
   169
	return KErrNone;
sl@0
   170
	}