os/security/cryptoservices/filebasedcertificateandkeystores/test/keytool/keytool_setpolicy.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of the License "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description: 
sl@0
    15
*
sl@0
    16
*/
sl@0
    17
sl@0
    18
sl@0
    19
#include <mctkeystore.h>
sl@0
    20
sl@0
    21
#include "keytool_utils.h"
sl@0
    22
#include "keytool_commands.h"
sl@0
    23
#include "keytool_controller.h"
sl@0
    24
sl@0
    25
#include <keytool.rsg>
sl@0
    26
sl@0
    27
sl@0
    28
/*static*/ CKeytoolSetPolicy* CKeytoolSetPolicy::NewLC(CKeyToolController* aController)
sl@0
    29
	{
sl@0
    30
	CKeytoolSetPolicy* self = new (ELeave) CKeytoolSetPolicy(aController);
sl@0
    31
	CleanupStack::PushL(self);
sl@0
    32
	self->ConstructL();
sl@0
    33
	return self;
sl@0
    34
	}
sl@0
    35
	
sl@0
    36
/*static*/ CKeytoolSetPolicy* CKeytoolSetPolicy::NewL(CKeyToolController* aController)
sl@0
    37
	{
sl@0
    38
	CKeytoolSetPolicy* self = CKeytoolSetPolicy::NewLC(aController);
sl@0
    39
	CleanupStack::Pop(self);
sl@0
    40
	return self;
sl@0
    41
	}
sl@0
    42
sl@0
    43
CKeytoolSetPolicy::CKeytoolSetPolicy(CKeyToolController* aController) : CKeytoolList(aController)
sl@0
    44
	{
sl@0
    45
	}
sl@0
    46
sl@0
    47
CKeytoolSetPolicy::~CKeytoolSetPolicy()
sl@0
    48
	{
sl@0
    49
	Cancel();
sl@0
    50
	}
sl@0
    51
sl@0
    52
void CKeytoolSetPolicy::RunL()
sl@0
    53
	{
sl@0
    54
	if (iStatus.Int() != KErrNone)
sl@0
    55
		{
sl@0
    56
		// A problem occured. Handle gracefully.
sl@0
    57
		User::Leave(iStatus.Int());
sl@0
    58
		}	
sl@0
    59
		
sl@0
    60
	switch (iState)
sl@0
    61
		{	 
sl@0
    62
		case EListKeys:
sl@0
    63
			{
sl@0
    64
			iKey = KeyToolUtils::findKey(iKeys, *iParams->iDefault);
sl@0
    65
			if (iKey)
sl@0
    66
				{
sl@0
    67
				TSecureId secureId; // Application secure ID 
sl@0
    68
				TSecurityPolicy securePolicy;
sl@0
    69
				idx = 0;
sl@0
    70
				if (iParams->iPolicy == CKeyToolParameters::ESetManagerPolicy)
sl@0
    71
					{
sl@0
    72
					securePolicy = ECapabilityWriteDeviceData;
sl@0
    73
					iKeyStore->SetManagementPolicy(iKey->Handle(), securePolicy, iStatus);
sl@0
    74
					}
sl@0
    75
				else
sl@0
    76
					{
sl@0
    77
					if (iParams->iPolicy == CKeyToolParameters::ESetUserPolicy)
sl@0
    78
						{
sl@0
    79
						secureId = iParams->iUIDs[idx];
sl@0
    80
						securePolicy = secureId;
sl@0
    81
						}
sl@0
    82
					else if (iParams->iPolicy == CKeyToolParameters::ESetAllUsersPolicy)
sl@0
    83
						{
sl@0
    84
						securePolicy = TSecurityPolicy::EAlwaysPass;
sl@0
    85
						}
sl@0
    86
					else if (iParams->iPolicy == CKeyToolParameters::ERemoveUserPolicy)
sl@0
    87
						{
sl@0
    88
						iParams->iUIDs.Close();
sl@0
    89
						iParams->iUIDs.Append(TUid::Uid(KUidSecurityKeytool));
sl@0
    90
						secureId = iParams->iUIDs[idx];
sl@0
    91
						securePolicy = secureId;
sl@0
    92
						}
sl@0
    93
					else
sl@0
    94
						{
sl@0
    95
						User::Leave(KErrNotFound); //should not come here
sl@0
    96
						}
sl@0
    97
					iKeyStore->SetUsePolicy(iKey->Handle(), securePolicy, iStatus);
sl@0
    98
					}
sl@0
    99
				iState = EFinished;
sl@0
   100
				SetActive();
sl@0
   101
				}
sl@0
   102
			else
sl@0
   103
				{
sl@0
   104
				User::Leave(KErrNotFound);
sl@0
   105
				}
sl@0
   106
			}
sl@0
   107
			break;
sl@0
   108
		case EFinished:
sl@0
   109
			{
sl@0
   110
			if (iParams->iPolicy == CKeyToolParameters::ESetManagerPolicy)
sl@0
   111
				{
sl@0
   112
				iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_SMANAGERSUCCESS);
sl@0
   113
				}
sl@0
   114
			else if (iParams->iPolicy == CKeyToolParameters::ESetUserPolicy)
sl@0
   115
				{
sl@0
   116
				iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_SUSERSUCCESS);
sl@0
   117
				}
sl@0
   118
			else if (iParams->iPolicy == CKeyToolParameters::ESetAllUsersPolicy)
sl@0
   119
				{
sl@0
   120
				iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_SALLUSERSSUCCESS);
sl@0
   121
				}
sl@0
   122
			else 
sl@0
   123
				{
sl@0
   124
				iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_RUSERSUCCESS);
sl@0
   125
				}
sl@0
   126
			CActiveScheduler::Stop();			
sl@0
   127
			}
sl@0
   128
			break;
sl@0
   129
		default:
sl@0
   130
			{
sl@0
   131
			User::Panic(_L("SETUSERS action: Illegal state."), 1);			
sl@0
   132
			}
sl@0
   133
		}		
sl@0
   134
	}
sl@0
   135
sl@0
   136
TInt CKeytoolSetPolicy::RunError(TInt aError)
sl@0
   137
	{
sl@0
   138
	CActiveScheduler::Stop();
sl@0
   139
sl@0
   140
	switch (aError)
sl@0
   141
		{
sl@0
   142
		case KErrNotFound :
sl@0
   143
			{
sl@0
   144
			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_NOTFOUND));
sl@0
   145
			}
sl@0
   146
			break;
sl@0
   147
		case KErrAccessDenied :
sl@0
   148
			{			
sl@0
   149
			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_ACCESS));
sl@0
   150
			}
sl@0
   151
			break;
sl@0
   152
		default:
sl@0
   153
			{
sl@0
   154
			if (iParams->iPolicy == CKeyToolParameters::ESetManagerPolicy)
sl@0
   155
				{
sl@0
   156
				TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_SMANAGERFAIL, aError));
sl@0
   157
				}
sl@0
   158
			else if (iParams->iPolicy == CKeyToolParameters::ESetUserPolicy)
sl@0
   159
				{
sl@0
   160
				TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_SUSERFAIL, aError));
sl@0
   161
				}
sl@0
   162
			else if (iParams->iPolicy == CKeyToolParameters::ESetAllUsersPolicy)
sl@0
   163
				{
sl@0
   164
				TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_SALLUSERSFAIL, aError));
sl@0
   165
				}
sl@0
   166
			else 
sl@0
   167
				{
sl@0
   168
				TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_KEYTOOL_ERR_RUSERFAIL, aError));
sl@0
   169
				}
sl@0
   170
			}
sl@0
   171
		}	
sl@0
   172
sl@0
   173
	return KErrNone;
sl@0
   174
	}
sl@0
   175