sl@0: /* sl@0: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of the License "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "certtool_commands.h" sl@0: #include "certtool_controller.h" sl@0: #include "keytool_utils.h" sl@0: sl@0: /*static*/ CCertToolAddApps* CCertToolAddApps::NewLC(CCertToolController* aController) sl@0: { sl@0: CCertToolAddApps* self = new (ELeave) CCertToolAddApps(aController); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: return self; sl@0: } sl@0: sl@0: /*static*/ CCertToolAddApps* CCertToolAddApps::NewL(CCertToolController* aController) sl@0: { sl@0: CCertToolAddApps* self = CCertToolAddApps::NewLC(aController); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CCertToolAddApps::CCertToolAddApps(CCertToolController* aController) : CCertToolList(aController), iCertIndex (-1) sl@0: { sl@0: } sl@0: sl@0: sl@0: CCertToolAddApps::~CCertToolAddApps() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CCertToolAddApps::RunL() sl@0: { sl@0: if (iStatus.Int() != KErrNone) sl@0: { sl@0: // A problem occured. Handle gracefully. sl@0: User::Leave(iStatus.Int()); sl@0: } sl@0: sl@0: switch (iState) sl@0: { sl@0: case EListCerts: sl@0: { sl@0: if (iCertInfos.Count()==0) sl@0: { sl@0: iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_EMPTY); sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: else sl@0: { sl@0: if (iParams->iDefault) sl@0: { sl@0: // Look for a specific certificate sl@0: for (TInt j = 0; j < iCertInfos.Count(); j++) sl@0: { sl@0: if (iCertInfos[j]->Label() == *iParams->iDefault) sl@0: { sl@0: iCertIndex = j; sl@0: break; sl@0: } sl@0: } sl@0: sl@0: if (iCertIndex != -1) sl@0: { sl@0: // Certificate found set app uids! sl@0: if (iParams->iCertstoreIndex == -1) sl@0: { sl@0: iParams->iCertstoreIndex = 0; sl@0: } sl@0: if (iParams->iCertstoreIndex >= iCertStore->CertStoreCount()) sl@0: { sl@0: iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTEXIST); sl@0: User::Leave(KErrArgument); sl@0: } sl@0: iCertStore->Applications(*iCertInfos[iCertIndex], iApps, iStatus); sl@0: iState = ESetApps; sl@0: SetActive(); sl@0: } sl@0: else sl@0: { sl@0: User::Leave(KErrNotFound); sl@0: } sl@0: } sl@0: } sl@0: } sl@0: break; sl@0: case ESetApps: sl@0: { sl@0: if (iParams->iCertstoreIndex == -1) sl@0: { sl@0: iParams->iCertstoreIndex = 0; sl@0: } sl@0: if (iParams->iCertstoreIndex >= iCertStore->CertStoreCount()) sl@0: { sl@0: iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTEXIST); sl@0: User::Leave(KErrArgument); sl@0: } sl@0: // Check for duplicates sl@0: for (TInt k = 0; k < iParams->iUIDs.Count(); k++) sl@0: { sl@0: if (iApps.Find(iParams->iUIDs[k]) != KErrNotFound) sl@0: { sl@0: TBuf<128> msg; sl@0: const TDesC& tmp = KeyToolUtils::Uid2Des(iParams->iUIDs[k]); sl@0: msg.Format(_L("The certificate is already trusted for application %S."), &tmp); sl@0: iController->DisplayErrorL(msg, iParams->iPageWise); sl@0: User::Leave(KErrArgument); sl@0: } sl@0: } sl@0: sl@0: // add the apps to the array sl@0: for (TInt j = 0; j < iApps.Count(); j++) sl@0: { sl@0: iParams->iUIDs.Append(iApps[j]); sl@0: } sl@0: if(iCertInfos[iCertIndex]->CertificateOwnerType() == ECACertificate) sl@0: { sl@0: iState = ESetTrust; sl@0: } sl@0: else sl@0: { sl@0: iState = EFinished; sl@0: } sl@0: iCertStore->SetApplicability(*iCertInfos[iCertIndex], iParams->iUIDs, iStatus); sl@0: SetActive(); sl@0: } sl@0: break; sl@0: case ESetTrust: sl@0: { sl@0: iState = EFinished; sl@0: const TBool caCert = ETrue; sl@0: iCertStore->SetTrust(*iCertInfos[iCertIndex],caCert,iStatus); sl@0: SetActive(); sl@0: } sl@0: break; sl@0: case EFinished: sl@0: { sl@0: iCertInfos.Close(); sl@0: iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_ADDAPPS_SUCCESS); sl@0: CActiveScheduler::Stop(); sl@0: } sl@0: break; sl@0: default: sl@0: { sl@0: User::Panic(_L("ADDAPPS action: Illegal state."), 1); sl@0: } sl@0: } sl@0: } sl@0: sl@0: TInt CCertToolAddApps::RunError(TInt aError) sl@0: { sl@0: CActiveScheduler::Stop(); sl@0: sl@0: switch (aError) sl@0: { sl@0: case KErrNotFound : sl@0: { sl@0: TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_NOTFOUND)); sl@0: TRAP_IGNORE(iController->DisplayErrorL(_L("\n"), iParams->iPageWise)); sl@0: } sl@0: break; sl@0: default: sl@0: { sl@0: TRAP_IGNORE(iController->DisplayLocalisedMsgL(R_CERTTOOL_ERR_ADDAPPS_FAIL)); sl@0: TRAP_IGNORE(iController->DisplayErrorL(_L("\n"), iParams->iPageWise)); sl@0: } sl@0: } sl@0: sl@0: return KErrNone; sl@0: }