os/security/cryptoservices/filebasedcertificateandkeystores/test/certtool/certtool_removeapps.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) 2004-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 <mctwritablecertstore.h>
sl@0
    20
sl@0
    21
#include "certtool_commands.h"
sl@0
    22
#include "certtool_controller.h"
sl@0
    23
sl@0
    24
#include "keytool_utils.h"
sl@0
    25
sl@0
    26
/*static*/ CCertToolRemoveApps* CCertToolRemoveApps::NewLC(CCertToolController* aController)
sl@0
    27
	{
sl@0
    28
	CCertToolRemoveApps* self = new (ELeave) CCertToolRemoveApps(aController);
sl@0
    29
	CleanupStack::PushL(self);
sl@0
    30
	self->ConstructL();
sl@0
    31
	return self;
sl@0
    32
	}
sl@0
    33
	
sl@0
    34
/*static*/ CCertToolRemoveApps* CCertToolRemoveApps::NewL(CCertToolController* aController)
sl@0
    35
	{
sl@0
    36
	CCertToolRemoveApps* self = CCertToolRemoveApps::NewLC(aController);
sl@0
    37
	CleanupStack::Pop(self);
sl@0
    38
	return self;
sl@0
    39
	}
sl@0
    40
sl@0
    41
CCertToolRemoveApps::CCertToolRemoveApps(CCertToolController* aController) : CCertToolList(aController)
sl@0
    42
	{
sl@0
    43
	}
sl@0
    44
sl@0
    45
	
sl@0
    46
CCertToolRemoveApps::~CCertToolRemoveApps()
sl@0
    47
	{
sl@0
    48
	Cancel();	
sl@0
    49
	}
sl@0
    50
sl@0
    51
void CCertToolRemoveApps::RunL()
sl@0
    52
	{
sl@0
    53
	if (iStatus.Int() != KErrNone)
sl@0
    54
		{
sl@0
    55
		// A problem occured. Handle gracefully.
sl@0
    56
		User::Leave(iStatus.Int());
sl@0
    57
		}	
sl@0
    58
	switch (iState)
sl@0
    59
		{	 
sl@0
    60
		case EListCerts:
sl@0
    61
			{
sl@0
    62
			if (iCertInfos.Count()==0)
sl@0
    63
				{
sl@0
    64
				iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_EMPTY);
sl@0
    65
				CActiveScheduler::Stop();				
sl@0
    66
				}
sl@0
    67
			else
sl@0
    68
				{ 
sl@0
    69
				if (iParams->iDefault)    
sl@0
    70
					{
sl@0
    71
					// Look for a specific certificate					
sl@0
    72
					TInt certIndex = -1;
sl@0
    73
					for (TInt j = 0; j < iCertInfos.Count(); j++)
sl@0
    74
						{
sl@0
    75
						if (iCertInfos[j]->Label() == *iParams->iDefault) 
sl@0
    76
							{
sl@0
    77
							certIndex = j;
sl@0
    78
							break;
sl@0
    79
							}
sl@0
    80
						}	
sl@0
    81
						
sl@0
    82
					if (certIndex != -1)
sl@0
    83
						{
sl@0
    84
						iIndex = certIndex;
sl@0
    85
						// Certificate found set app uids!
sl@0
    86
						if (iParams->iCertstoreIndex == -1)
sl@0
    87
							{
sl@0
    88
							iParams->iCertstoreIndex = 0;
sl@0
    89
							}
sl@0
    90
						if (iParams->iCertstoreIndex >= iCertStore->CertStoreCount())
sl@0
    91
							{
sl@0
    92
							iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTEXIST);	
sl@0
    93
							User::Leave(KErrArgument);			
sl@0
    94
							}						
sl@0
    95
						iCertStore->Applications(*iCertInfos[iIndex], iApps, iStatus);
sl@0
    96
						iState = ERemoveApps;
sl@0
    97
						SetActive();
sl@0
    98
						}
sl@0
    99
					else 
sl@0
   100
						{
sl@0
   101
						User::Leave(KErrNotFound);
sl@0
   102
						}			
sl@0
   103
					}
sl@0
   104
				}
sl@0
   105
sl@0
   106
			}
sl@0
   107
			break;
sl@0
   108
		case ERemoveApps:
sl@0
   109
			{				
sl@0
   110
			if (iParams->iCertstoreIndex == -1)
sl@0
   111
				{
sl@0
   112
				iParams->iCertstoreIndex = 0;
sl@0
   113
				}
sl@0
   114
			if (iParams->iCertstoreIndex >= iCertStore->CertStoreCount())
sl@0
   115
				{
sl@0
   116
				iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTEXIST);	
sl@0
   117
				User::Leave(KErrArgument);			
sl@0
   118
				}
sl@0
   119
			TInt failCount = 0;				
sl@0
   120
			// Check for duplicates
sl@0
   121
			for (TInt k = 0; k < iParams->iUIDs.Count(); k++)
sl@0
   122
				{
sl@0
   123
				TInt idx = iApps.Find(iParams->iUIDs[k]);
sl@0
   124
				if ( idx == KErrNotFound)
sl@0
   125
					{
sl@0
   126
					failCount++;
sl@0
   127
					TBuf<128> msg;
sl@0
   128
					const TDesC& tmp = KeyToolUtils::Uid2Des(iParams->iUIDs[k]);
sl@0
   129
					msg.Format(_L("The certificate wan not trusted for application %S."), &tmp);
sl@0
   130
					iController->DisplayErrorL(msg, iParams->iPageWise);
sl@0
   131
					}
sl@0
   132
				else 
sl@0
   133
					{
sl@0
   134
					iApps.Remove(idx);
sl@0
   135
					}
sl@0
   136
				}
sl@0
   137
sl@0
   138
			if (failCount == iParams->iUIDs.Count())
sl@0
   139
				{
sl@0
   140
				CActiveScheduler::Stop();			
sl@0
   141
				}
sl@0
   142
			else
sl@0
   143
				{
sl@0
   144
				iState = EFinished;
sl@0
   145
				iCertStore->SetApplicability(*iCertInfos[iIndex], iApps, iStatus);
sl@0
   146
				SetActive();	
sl@0
   147
				}	
sl@0
   148
			}
sl@0
   149
			break;
sl@0
   150
		case EFinished:
sl@0
   151
			{
sl@0
   152
			iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_REMOVEAPPS_SUCCESS);			
sl@0
   153
			CActiveScheduler::Stop();			
sl@0
   154
			}
sl@0
   155
			break;
sl@0
   156
		default:
sl@0
   157
			{
sl@0
   158
			User::Panic(_L("REMOVEAPPS action: Illegal state."), 1);
sl@0
   159
			}
sl@0
   160
		}		
sl@0
   161
sl@0
   162
	}
sl@0
   163
sl@0
   164
TInt CCertToolRemoveApps::RunError(TInt aError)
sl@0
   165
	{
sl@0
   166
	CActiveScheduler::Stop();
sl@0
   167
sl@0
   168
	switch (aError)
sl@0
   169
		{
sl@0
   170
		case KErrNotFound :
sl@0
   171
			{
sl@0
   172
			TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTFOUND));
sl@0
   173
			TRAP_IGNORE(iController->DisplayErrorL(_L("\n"), iParams->iPageWise));						
sl@0
   174
			}
sl@0
   175
			break;
sl@0
   176
		default:
sl@0
   177
			{
sl@0
   178
			TRAP_IGNORE(iController->DisplayErrorL(_L("RemoveApps: Unknown error. "), aError));		
sl@0
   179
			TRAP_IGNORE(iController->DisplayErrorL(_L("\n"), iParams->iPageWise));			
sl@0
   180
			}
sl@0
   181
		}	
sl@0
   182
sl@0
   183
	return KErrNone;	
sl@0
   184
	}