diff -r 675a964f4eb5 -r 35751d3474b7 cryptoservices/certificateandkeymgmt/tcertstore/T_unifiedcertstoreremove.cpp --- a/cryptoservices/certificateandkeymgmt/tcertstore/T_unifiedcertstoreremove.cpp Tue Jul 21 01:04:32 2009 +0100 +++ b/cryptoservices/certificateandkeymgmt/tcertstore/T_unifiedcertstoreremove.cpp Thu Sep 10 14:01:51 2009 +0300 @@ -1,754 +1,755 @@ -/* -* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of the License "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: -* -*/ - - - - -/** - @file -*/ - -#include "t_unifiedcertstoreremove.h" -#include "t_certstoredefs.h" -#include "t_input.h" -#include "t_certstoreout.h" -#include - - -///////////////////////////////////////////////////////////////////////////////// -//CDeleteCertificate -///////////////////////////////////////////////////////////////////////////////// - - -CTestAction* CDeleteCertificate::NewL(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CDeleteCertificate* self = new(ELeave) CDeleteCertificate(aFs, aConsole, aOut); - CleanupStack::PushL(self); - self->ConstructL(aTestActionSpec); - CleanupStack::Pop(self); - return self; - } - -CDeleteCertificate::CDeleteCertificate(RFs& aFs, CConsoleBase& aConsole, - Output& aOut) -: CSubscriberAction(aFs, aConsole, aOut), iState(EIdle),iCertDeleteType(NULL) - { - } - -void CDeleteCertificate::PerformAction(TRequestStatus& aStatus) - { - if (aStatus != KErrNone) - { - iState = EFinished; - } - - switch (iState) - { - case EIdle: - //get the certs - if (iCertInfos.Count() > 0) - { - iCertInfos.Close(); // JCS added for multiple delete case - } - - iState = EGettingCerts; - //get the certs - GetCerts(aStatus); - break; - - case EGettingCerts: - { - if (iNotificationSubscribed) - { - if (!iNotifier) - { - iNotifier = CCertStoreChangeNotifier::NewL(iNotifierFlag); - iNotifier->StartNotification(); - } - iState = ECheckNotification; - } - else - { - iState = EFinished; - } - DeleteCert(aStatus); - } - break; - - case ECheckNotification: - { - TInt ret=KErrNone; - if (!iNotifierFlag) - { - ret=KErrGeneral; - } - iState = EFinished; - TRequestStatus* status = &aStatus; - User::RequestComplete(status, ret); - } - break; - - case EFinished: - { - if (aStatus == iExpectedResult) - { - iResult = ETrue; - } - else - { - iResult = EFalse; - } - if (aStatus == KErrNoMemory) - { - iState = EIdle; - } - else - { - iFinished = ETrue; - } - TRequestStatus* status = &aStatus; - User::RequestComplete(status, aStatus.Int()); - } - break; - - default: - User::Invariant(); - } - } - -void CDeleteCertificate::PerformCancel() - { - switch (iState) - { - case EGettingCerts: - CertStore().CancelList(); - break; - case ECheckNotification: - case EIdle: - case EFinished: - // We /may/ be deleting a cert in these states - fortunately cancel is lenient - UnifiedCertStore().CancelRemove(); - break; - - default: - User::Invariant(); - } - } - -void CDeleteCertificate::ConstructL(const TTestActionSpec& aTestActionSpec) - { - CSubscriberAction::ConstructL(aTestActionSpec); - - iFilter = CCertAttributeFilter::NewL(); - TInt pos = 0; - TInt err1 = KErrNone; - - TPtrC8 pLabel1 = Input::ParseElement(aTestActionSpec.iActionBody, KCertTypeStart, KCertTypeEnd, pos, err1); - - if(err1 == KErrNone) - { - iCertDeleteType = HBufC8::NewL(pLabel1.Size()); - *iCertDeleteType = pLabel1; - } - - pos=0; - TInt err2 = KErrNone; - TPtrC8 pLabel2 = Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart, KCertLabelEnd, pos, err2); - if (err2 != KErrNone) - { - User::Leave(err2); - } - - iCertLabel.Copy(pLabel2); - if (iCertLabel.Compare(_L("*.*"))==0) // delete all certs - {// Check that the flag has been set - TPtrC8 pDeleteAll = Input::ParseElement(aTestActionSpec.iActionBody, KDeleteAllStart, KDeleteAllEnd, pos, err1); - if (pDeleteAll!=KNullDesC8) - { - TLex8 lexer(pDeleteAll); - TInt boolVal = 0; - lexer.Val(boolVal); - iDeleteAllCerts = (boolVal > 0) ? ETrue : EFalse; - } - } - else if( err1 != KErrNone && err1 != KErrNotFound) - { - User::Leave(err1); - } - - // Set expected result - HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); - TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); - Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); - CleanupStack::PopAndDestroy(result); - } - -void CDeleteCertificate::GetCerts(TRequestStatus& aStatus) - { - CertStore().List(iCertInfos, *iFilter, aStatus); - } - -CDeleteCertificate::~CDeleteCertificate() - { - delete iCertDeleteType; - iCertInfos.Close(); - delete iFilter; - } - -void CDeleteCertificate::DeleteCert(TRequestStatus& aStatus) - { - TInt ix = KErrNotFound; - TInt count = iCertInfos.Count(); - for (TInt i = count-1; i >= 0 ; i--) - { - if (iDeleteAllCerts) - {// Just delete the first one we come across - if (i>=0) // Still some certificates to delete - { // Set the state back to continue - iState = EIdle; - } - - ix = i; - break; - } - // Only delete if there's a label match and the certificate is of specified type - else if (iCertInfos[i]->Label() == iCertLabel && CheckCertType(*iCertInfos[i]) ) - { - ix = i; - break; - } - } - - TRequestStatus* status = &aStatus; - if (ix == KErrNotFound) - { - TInt result = KErrNone; - - if(iDeleteAllCerts) - result = KErrNone; - else if(iCertDeleteType == NULL) - result = KErrNotSupported; - else - result = KErrNotFound; - - User::RequestComplete(status, result); - } - else - { - iCertInfoToDelete = iCertInfos[ix]; - UnifiedCertStore().Remove(*iCertInfos[ix], aStatus); - } - } - -TBool CDeleteCertificate::CheckCertType( CCTCertInfo& aCertInfo ) - { - if(iCertDeleteType == NULL) - return EFalse; - - TBool returnValue = EFalse; - switch(aCertInfo.CertificateOwnerType()) - { - case ECACertificate: - if(iCertDeleteType->Compare(KCACert) == 0 ) - returnValue = ETrue; - break; - case EUserCertificate: - if(iCertDeleteType->Compare(KUserCert) == 0 ) - returnValue = ETrue; - break; - case EPeerCertificate: - if(iCertDeleteType->Compare(KPeerCert) == 0 ) - returnValue = ETrue; - break; - } - return returnValue; - } - -void CDeleteCertificate::DoReportAction() - { - iOut.writeString(_L("Deleting certificate...")); - iOut.writeNewLine(); - iOut.writeString(_L("\tLabel = ")); - iOut.writeString(iCertLabel); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - -void CDeleteCertificate::DoCheckResult(TInt aError) - { - if (iFinished) - { - if (aError == KErrNone && iCertInfoToDelete) - { - switch (iCertInfoToDelete->CertificateOwnerType()) - { - case ECACertificate: - iConsole.Write(_L("\tCA certificate deleted successfully\n")); - iOut.writeString(_L("\tCA certificate deleted successfully")); - break; - - case EUserCertificate: - iConsole.Write(_L("\tUser certificate deleted successfully\n")); - iOut.writeString(_L("\tUser certificate deleted successfully")); - break; - - case EPeerCertificate: - iConsole.Write(_L("\tPeer certificate deleted successfully\n")); - iOut.writeString(_L("\tPeer certificate deleted successfully")); - break; - default: - iConsole.Write(_L("\tUnknown owner certificate deleted successfully\n")); - iOut.writeString(_L("\tUnknown owner certificate deleted successfully")); - break; - } - } - iOut.writeNewLine(); - iOut.writeNewLine(); - } - } - -void CDeleteCertificate::Reset() - { - iState = EIdle; - iCertInfos.Close(); - } - - -///////////////////////////////////////////////////////////////////////////////// -//CDeleteRetrieveCertificate -///////////////////////////////////////////////////////////////////////////////// -CDeleteRetrieveCertificate::CDeleteRetrieveCertificate(RFs& aFs, CConsoleBase& aConsole, - Output& aOut) -: CSubscriberAction(aFs, aConsole, aOut), iState(EIdle) - { - } - -void CDeleteRetrieveCertificate::PerformAction(TRequestStatus& aStatus) - { - TRequestStatus* status = &aStatus; - switch (iState) - { - case EIdle: - //get the certs - iState = EDeletingCert; - //get the certs - GetCerts(aStatus); - if (aStatus == KErrNoMemory) - { - iState = EFinished; - } - break; - - case EDeletingCert: - { - if (iNotificationSubscribed) - { - iNotifier = CCertStoreChangeNotifier::NewL(iNotifierFlag); - iNotifier->StartNotification(); - iState = ECheckNotification; - } - else - { - iState = EGettingCerts; - } - //delete the cert - DeleteCert(aStatus); - break; - } - - case ECheckNotification: - { - TInt ret=KErrNone; - if (!iNotifierFlag) - { - ret=KErrGeneral; - } - if (ret!=KErrNone) - { - iState = EFinished; - } - else - { - iState = EGettingCerts; - } - TRequestStatus* status = &aStatus; - User::RequestComplete(status, ret); - } - break; - case EGettingCerts: - { - iState = EFinished; - //get the cert - RetrieveCerts(aStatus); - break; - } - case EFinished: - { - if (aStatus == iExpectedResult) - { - iResult = ETrue; - } - else - { - iResult = EFalse; - } - if (aStatus == KErrNoMemory) - { - iState = EIdle; - } - else - { - iFinished = ETrue; - } - User::RequestComplete(status, aStatus.Int()); - } - break; - default: - { - //some kind of error behaviour - } - } - } - -void CDeleteRetrieveCertificate::PerformCancel() - { - } - -void CDeleteRetrieveCertificate::Reset() - { - __ASSERT_DEBUG(EFalse, User::Panic(_L("CDeleteRetrieveCertificate::Reset()"), 1)); - } - -//////////////////////////////////////////////////////////////////////////////// -//CDeleteCACertificate -////////////////////////////////////////////////////////////////////////////////// - -CTestAction* CDeleteRetrieveCACertificate::NewL(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CDeleteRetrieveCACertificate* self = - new(ELeave) CDeleteRetrieveCACertificate(aFs, aConsole, aOut); - CleanupStack::PushL(self); - self->ConstructL(aTestActionSpec); - CleanupStack::Pop(self); - return self; - } - -CDeleteRetrieveCACertificate::CDeleteRetrieveCACertificate(RFs& aFs, CConsoleBase& aConsole, - Output& aOut) - :CDeleteRetrieveCertificate(aFs, aConsole, aOut) - { - } - -void CDeleteRetrieveCACertificate::ConstructL(const TTestActionSpec& aTestActionSpec) - { - CSubscriberAction::ConstructL(aTestActionSpec); - iCertlisted = new(ELeave) RPointerArray; - iFilter = CCertAttributeFilter::NewL(); - TInt pos = 0; - TInt err = KErrNone; - TPtrC8 pLabel = Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart, KCertLabelEnd, pos, err); - if (err != KErrNone) - { - User::Leave(err); - } - iCertLabel.Copy(pLabel); - - // Set expected result - pos = 0; - - HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); - TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); - Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); - CleanupStack::PopAndDestroy(result); - } - -void CDeleteRetrieveCACertificate::GetCerts(TRequestStatus& aStatus) - { - CertStore().List(iCertInfos, *iFilter, aStatus); - } - -void CDeleteRetrieveCACertificate::RetrieveCerts(TRequestStatus& aStatus) - { - TRequestStatus* status = &aStatus; - TInt ix = KErrNotFound; - TInt count = iCertInfos.Count(); - for (TInt i = 0; i < count; i++) - { - if (iCertInfos[i]->Label() == iCertLabel) - { - ix = i; - break; - } - } - if (ix == KErrNotFound) - { - User::RequestComplete(status, ix); - } - else - { - iCertInfoToRetrieve = iCertInfos[ix]; - - HBufC8* buf = HBufC8::NewLC(iCertInfoToRetrieve->Size()); - User::LeaveIfError(iCertlisted->Append(buf)); - CleanupStack::Pop();//buf - __ASSERT_DEBUG(!iBuf, User::Panic(_L("CListCACertificates"), 1)); - iBuf = new(ELeave) TPtr8(buf->Des()); - CertStore().Retrieve(*iCertInfoToRetrieve, *iBuf, aStatus); - } - } - -CDeleteRetrieveCACertificate::~CDeleteRetrieveCACertificate() - { - iCertInfos.Close(); - delete iFilter; - if (iCertlisted) - { - iCertlisted->ResetAndDestroy(); - delete iCertlisted; - } - delete iBuf; - } - -void CDeleteRetrieveCACertificate::DeleteCert(TRequestStatus& aStatus) - { - TRequestStatus* status = &aStatus; - TInt ix = KErrNotFound; - TInt count = iCertInfos.Count(); - for (TInt i = 0; i < count; i++) - { - if (iCertInfos[i]->Label() == iCertLabel) - { - ix = i; - break; - } - } - if (ix == KErrNotFound) - { - User::RequestComplete(status, ix); - } - else - { - iCertInfoToDelete = iCertInfos[ix]; - UnifiedCertStore().Remove(*iCertInfoToDelete, aStatus); - } - } - -void CDeleteRetrieveCACertificate::DoReportAction() - { - iOut.writeString(_L("Deleting certificate...")); - iOut.writeNewLine(); - iOut.writeString(_L("\tLabel = ")); - iOut.writeString(iCertLabel); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - -void CDeleteRetrieveCACertificate::DoCheckResult(TInt aError) - { - if (iFinished) - { - if (aError == KErrNone && iResult) - { - switch (iCertInfoToDelete->CertificateOwnerType()) - { - case ECACertificate: - iConsole.Write(_L("\tCA certificate deleted successfully\n")); - iOut.writeString(_L("\tCA certificate deleted successfully")); - break; - - case EUserCertificate: - iConsole.Write(_L("\tUser certificate deleted successfully\n")); - iOut.writeString(_L("\tUser certificate deleted successfully")); - break; - - default: - iConsole.Write(_L("\tUnknown owner certificate deleted successfully\n")); - iOut.writeString(_L("\tUnknown owner certificate deleted successfully")); - break; - } - } - else - { - if (iResult) - { - iConsole.Write(_L("\tCA OK\n")); - iOut.writeString(_L("\tCA OK")); - } - } - iOut.writeNewLine(); - iOut.writeNewLine(); - } - } - -//////////////////////////////////////////////////////////////////////////////// -//CDeleteUserCertificate -////////////////////////////////////////////////////////////////////////////////// -CTestAction* CDeleteRetrieveUserCertificate::NewL(RFs& aFs, - CConsoleBase& aConsole, - Output& aOut, - const TTestActionSpec& aTestActionSpec) - { - CDeleteRetrieveUserCertificate* self = - new(ELeave) CDeleteRetrieveUserCertificate(aFs, aConsole, aOut); - CleanupStack::PushL(self); - self->ConstructL(aTestActionSpec); - CleanupStack::Pop(self); - return self; - } - -CDeleteRetrieveUserCertificate::CDeleteRetrieveUserCertificate(RFs& aFs, CConsoleBase& aConsole, - Output& aOut) - :CDeleteRetrieveCertificate(aFs, aConsole, aOut) - { - } - -void CDeleteRetrieveUserCertificate::ConstructL(const TTestActionSpec& aTestActionSpec) - { - CSubscriberAction::ConstructL(aTestActionSpec); - iCertlisted = new(ELeave) RPointerArray; - iFilter = CCertAttributeFilter::NewL(); - TInt pos = 0; - TInt err = KErrNone; - TPtrC8 pLabel = Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart, KCertLabelEnd, pos, err); - if (err != KErrNone) - { - User::Leave(err); - } - iCertLabel.Copy(pLabel); - - // Set expected result - HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); - TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); - Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); - CleanupStack::PopAndDestroy(result); - } - -void CDeleteRetrieveUserCertificate::GetCerts(TRequestStatus& aStatus) - { - CertStore().List(iCertInfos, *iFilter, aStatus); - } - -void CDeleteRetrieveUserCertificate::RetrieveCerts(TRequestStatus& aStatus) - { - TRequestStatus* status = &aStatus; - TInt ix = KErrNotFound; - TInt count = iCertInfos.Count(); - for (TInt i = 0; i < count; i++) - { - if (iCertInfos[i]->Label() == iCertLabel) - { - ix = i; - break; - } - } - if (ix == KErrNotFound) - { - User::RequestComplete(status, ix); - } - else - { - iCertInfoToRetrieve = iCertInfos[ix]; - - HBufC8* buf = HBufC8::NewLC(iCertInfoToRetrieve->Size()); - User::LeaveIfError(iCertlisted->Append(buf)); - CleanupStack::Pop();//buf - //__ASSERT_DEBUG(!iBuf, User::Panic(_L("CListCACertificates"), 1)); - iBuf = new(ELeave) TPtr8(buf->Des()); - CertStore().Retrieve(*iCertInfoToRetrieve, *iBuf, aStatus); - } - } - -CDeleteRetrieveUserCertificate::~CDeleteRetrieveUserCertificate() - { - iCertInfos.Close(); - delete iFilter; - if (iCertlisted) - { - iCertlisted->ResetAndDestroy(); - delete iCertlisted; - } - delete iBuf; - } - -void CDeleteRetrieveUserCertificate::DeleteCert(TRequestStatus& aStatus) - { - TRequestStatus* status = &aStatus; - TInt ix = KErrNotFound; - TInt count = iCertInfos.Count(); - for (TInt i = 0; i < count; i++) - { - if (iCertInfos[i]->Label() == iCertLabel) - { - ix = i; - break; - } - } - if (ix == KErrNotFound) - { - User::RequestComplete(status, ix); - } - else - { - CCTCertInfo* certInfo = iCertInfos[ix]; - UnifiedCertStore().Remove(*certInfo, aStatus); - } - } - -void CDeleteRetrieveUserCertificate::DoReportAction() - { - iOut.writeString(_L("Deleting user certificate...")); - iOut.writeNewLine(); - iOut.writeString(_L("\tLabel = ")); - iOut.writeString(iCertLabel); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - -void CDeleteRetrieveUserCertificate::DoCheckResult(TInt aError) - { - if (iFinished) - { - if (aError == KErrNone && iResult) - { - iConsole.Write(_L("\tuser cert deleted successfully\n")); - iOut.writeString(_L("\tuser cert deleted successfully")); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - else - { - if (iResult) - { - iConsole.Write(_L("\tnot retrieved but expected\n")); - iOut.writeString(_L("\tCA OK")); - } - else - { - iConsole.Write(_L("\tuser cert deleted successfully\n")); - iOut.writeString(_L("\tuser cert deleted successfully")); - iOut.writeNewLine(); - iOut.writeNewLine(); - } - } - } - } +/* +* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* +*/ + + +/** + @file +*/ + +#include "t_unifiedcertstoreremove.h" +#include "t_certstoredefs.h" +#include "t_input.h" +#include "t_certstoreout.h" +#include + + +///////////////////////////////////////////////////////////////////////////////// +//CDeleteCertificate +///////////////////////////////////////////////////////////////////////////////// + + +CTestAction* CDeleteCertificate::NewL(RFs& aFs, + CConsoleBase& aConsole, + Output& aOut, + const TTestActionSpec& aTestActionSpec) + { + CDeleteCertificate* self = new(ELeave) CDeleteCertificate(aFs, aConsole, aOut); + CleanupStack::PushL(self); + self->ConstructL(aTestActionSpec); + CleanupStack::Pop(self); + return self; + } + +CDeleteCertificate::CDeleteCertificate(RFs& aFs, CConsoleBase& aConsole, + Output& aOut) +: CSubscriberAction(aFs, aConsole, aOut), iState(EIdle),iCertDeleteType(NULL) + { + } + +void CDeleteCertificate::PerformAction(TRequestStatus& aStatus) + { + if (aStatus != KErrNone) + { + iState = EFinished; + } + + switch (iState) + { + case EIdle: + //get the certs + if (iCertInfos.Count() > 0) + { + iCertInfos.Close(); // JCS added for multiple delete case + } + + iState = EGettingCerts; + //get the certs + GetCerts(aStatus); + break; + + case EGettingCerts: + { + if (iNotificationSubscribed) + { + if (!iNotifier) + { + iNotifier = CCertStoreChangeNotifier::NewL(iNotifierFlag); + iNotifier->StartNotification(); + } + iState = ECheckNotification; + } + else + { + iState = EFinished; + } + DeleteCert(aStatus); + } + break; + + case ECheckNotification: + { + iState = EFinished; + if (iNotifierFlag) + { + TRequestStatus* status = &aStatus; + User::RequestComplete(status, KErrNone); + } + else + { + iNotifier->SetCompleteStatus(&aStatus); + } + } + + break; + + case EFinished: + { + if (aStatus == iExpectedResult) + { + iResult = ETrue; + } + else + { + iResult = EFalse; + } + if (aStatus == KErrNoMemory) + { + iState = EIdle; + } + else + { + iFinished = ETrue; + } + TRequestStatus* status = &aStatus; + User::RequestComplete(status, aStatus.Int()); + } + break; + + default: + User::Invariant(); + } + } + +void CDeleteCertificate::PerformCancel() + { + switch (iState) + { + case EGettingCerts: + CertStore().CancelList(); + break; + case ECheckNotification: + case EIdle: + case EFinished: + // We /may/ be deleting a cert in these states - fortunately cancel is lenient + UnifiedCertStore().CancelRemove(); + break; + + default: + User::Invariant(); + } + } + +void CDeleteCertificate::ConstructL(const TTestActionSpec& aTestActionSpec) + { + CSubscriberAction::ConstructL(aTestActionSpec); + + iFilter = CCertAttributeFilter::NewL(); + TInt pos = 0; + TInt err1 = KErrNone; + + TPtrC8 pLabel1 = Input::ParseElement(aTestActionSpec.iActionBody, KCertTypeStart, KCertTypeEnd, pos, err1); + + if(err1 == KErrNone) + { + iCertDeleteType = HBufC8::NewL(pLabel1.Size()); + *iCertDeleteType = pLabel1; + } + + pos=0; + TInt err2 = KErrNone; + TPtrC8 pLabel2 = Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart, KCertLabelEnd, pos, err2); + if (err2 != KErrNone) + { + User::Leave(err2); + } + + iCertLabel.Copy(pLabel2); + if (iCertLabel.Compare(_L("*.*"))==0) // delete all certs + {// Check that the flag has been set + TPtrC8 pDeleteAll = Input::ParseElement(aTestActionSpec.iActionBody, KDeleteAllStart, KDeleteAllEnd, pos, err1); + if (pDeleteAll!=KNullDesC8) + { + TLex8 lexer(pDeleteAll); + TInt boolVal = 0; + lexer.Val(boolVal); + iDeleteAllCerts = (boolVal > 0) ? ETrue : EFalse; + } + } + else if( err1 != KErrNone && err1 != KErrNotFound) + { + User::Leave(err1); + } + + // Set expected result + HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); + TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); + Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); + CleanupStack::PopAndDestroy(result); + } + +void CDeleteCertificate::GetCerts(TRequestStatus& aStatus) + { + CertStore().List(iCertInfos, *iFilter, aStatus); + } + +CDeleteCertificate::~CDeleteCertificate() + { + delete iCertDeleteType; + iCertInfos.Close(); + delete iFilter; + } + +void CDeleteCertificate::DeleteCert(TRequestStatus& aStatus) + { + TInt ix = KErrNotFound; + TInt count = iCertInfos.Count(); + for (TInt i = count-1; i >= 0 ; i--) + { + if (iDeleteAllCerts) + {// Just delete the first one we come across + if (i>=0) // Still some certificates to delete + { // Set the state back to continue + iState = EIdle; + } + + ix = i; + break; + } + // Only delete if there's a label match and the certificate is of specified type + else if (iCertInfos[i]->Label() == iCertLabel && CheckCertType(*iCertInfos[i]) ) + { + ix = i; + break; + } + } + + TRequestStatus* status = &aStatus; + if (ix == KErrNotFound) + { + TInt result = KErrNone; + + if(iDeleteAllCerts) + result = KErrNone; + else if(iCertDeleteType == NULL) + result = KErrNotSupported; + else + result = KErrNotFound; + + User::RequestComplete(status, result); + } + else + { + iCertInfoToDelete = iCertInfos[ix]; + UnifiedCertStore().Remove(*iCertInfos[ix], aStatus); + } + } + +TBool CDeleteCertificate::CheckCertType( CCTCertInfo& aCertInfo ) + { + if(iCertDeleteType == NULL) + return EFalse; + + TBool returnValue = EFalse; + switch(aCertInfo.CertificateOwnerType()) + { + case ECACertificate: + if(iCertDeleteType->Compare(KCACert) == 0 ) + returnValue = ETrue; + break; + case EUserCertificate: + if(iCertDeleteType->Compare(KUserCert) == 0 ) + returnValue = ETrue; + break; + case EPeerCertificate: + if(iCertDeleteType->Compare(KPeerCert) == 0 ) + returnValue = ETrue; + break; + } + return returnValue; + } + +void CDeleteCertificate::DoReportAction() + { + iOut.writeString(_L("Deleting certificate...")); + iOut.writeNewLine(); + iOut.writeString(_L("\tLabel = ")); + iOut.writeString(iCertLabel); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + +void CDeleteCertificate::DoCheckResult(TInt aError) + { + if (iFinished) + { + if (aError == KErrNone && iCertInfoToDelete) + { + switch (iCertInfoToDelete->CertificateOwnerType()) + { + case ECACertificate: + iConsole.Write(_L("\tCA certificate deleted successfully\n")); + iOut.writeString(_L("\tCA certificate deleted successfully")); + break; + + case EUserCertificate: + iConsole.Write(_L("\tUser certificate deleted successfully\n")); + iOut.writeString(_L("\tUser certificate deleted successfully")); + break; + + case EPeerCertificate: + iConsole.Write(_L("\tPeer certificate deleted successfully\n")); + iOut.writeString(_L("\tPeer certificate deleted successfully")); + break; + default: + iConsole.Write(_L("\tUnknown owner certificate deleted successfully\n")); + iOut.writeString(_L("\tUnknown owner certificate deleted successfully")); + break; + } + } + iOut.writeNewLine(); + iOut.writeNewLine(); + } + } + +void CDeleteCertificate::Reset() + { + iState = EIdle; + iCertInfos.Close(); + } + + +///////////////////////////////////////////////////////////////////////////////// +//CDeleteRetrieveCertificate +///////////////////////////////////////////////////////////////////////////////// +CDeleteRetrieveCertificate::CDeleteRetrieveCertificate(RFs& aFs, CConsoleBase& aConsole, + Output& aOut) +: CSubscriberAction(aFs, aConsole, aOut), iState(EIdle) + { + } + +void CDeleteRetrieveCertificate::PerformAction(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + switch (iState) + { + case EIdle: + //get the certs + iState = EDeletingCert; + //get the certs + GetCerts(aStatus); + if (aStatus == KErrNoMemory) + { + iState = EFinished; + } + break; + + case EDeletingCert: + { + if (iNotificationSubscribed) + { + iNotifier = CCertStoreChangeNotifier::NewL(iNotifierFlag); + iNotifier->StartNotification(); + iState = ECheckNotification; + } + else + { + iState = EGettingCerts; + } + //delete the cert + DeleteCert(aStatus); + break; + } + + case ECheckNotification: + { + TInt ret=KErrNone; + if (!iNotifierFlag) + { + ret=KErrGeneral; + } + if (ret!=KErrNone) + { + iState = EFinished; + } + else + { + iState = EGettingCerts; + } + TRequestStatus* status = &aStatus; + User::RequestComplete(status, ret); + } + break; + case EGettingCerts: + { + iState = EFinished; + //get the cert + RetrieveCerts(aStatus); + break; + } + case EFinished: + { + if (aStatus == iExpectedResult) + { + iResult = ETrue; + } + else + { + iResult = EFalse; + } + if (aStatus == KErrNoMemory) + { + iState = EIdle; + } + else + { + iFinished = ETrue; + } + User::RequestComplete(status, aStatus.Int()); + } + break; + default: + { + //some kind of error behaviour + } + } + } + +void CDeleteRetrieveCertificate::PerformCancel() + { + } + +void CDeleteRetrieveCertificate::Reset() + { + __ASSERT_DEBUG(EFalse, User::Panic(_L("CDeleteRetrieveCertificate::Reset()"), 1)); + } + +//////////////////////////////////////////////////////////////////////////////// +//CDeleteCACertificate +////////////////////////////////////////////////////////////////////////////////// + +CTestAction* CDeleteRetrieveCACertificate::NewL(RFs& aFs, + CConsoleBase& aConsole, + Output& aOut, + const TTestActionSpec& aTestActionSpec) + { + CDeleteRetrieveCACertificate* self = + new(ELeave) CDeleteRetrieveCACertificate(aFs, aConsole, aOut); + CleanupStack::PushL(self); + self->ConstructL(aTestActionSpec); + CleanupStack::Pop(self); + return self; + } + +CDeleteRetrieveCACertificate::CDeleteRetrieveCACertificate(RFs& aFs, CConsoleBase& aConsole, + Output& aOut) + :CDeleteRetrieveCertificate(aFs, aConsole, aOut) + { + } + +void CDeleteRetrieveCACertificate::ConstructL(const TTestActionSpec& aTestActionSpec) + { + CSubscriberAction::ConstructL(aTestActionSpec); + iCertlisted = new(ELeave) RPointerArray; + iFilter = CCertAttributeFilter::NewL(); + TInt pos = 0; + TInt err = KErrNone; + TPtrC8 pLabel = Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart, KCertLabelEnd, pos, err); + if (err != KErrNone) + { + User::Leave(err); + } + iCertLabel.Copy(pLabel); + + // Set expected result + pos = 0; + + HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); + TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); + Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); + CleanupStack::PopAndDestroy(result); + } + +void CDeleteRetrieveCACertificate::GetCerts(TRequestStatus& aStatus) + { + CertStore().List(iCertInfos, *iFilter, aStatus); + } + +void CDeleteRetrieveCACertificate::RetrieveCerts(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + TInt ix = KErrNotFound; + TInt count = iCertInfos.Count(); + for (TInt i = 0; i < count; i++) + { + if (iCertInfos[i]->Label() == iCertLabel) + { + ix = i; + break; + } + } + if (ix == KErrNotFound) + { + User::RequestComplete(status, ix); + } + else + { + iCertInfoToRetrieve = iCertInfos[ix]; + + HBufC8* buf = HBufC8::NewLC(iCertInfoToRetrieve->Size()); + User::LeaveIfError(iCertlisted->Append(buf)); + CleanupStack::Pop();//buf + __ASSERT_DEBUG(!iBuf, User::Panic(_L("CListCACertificates"), 1)); + iBuf = new(ELeave) TPtr8(buf->Des()); + CertStore().Retrieve(*iCertInfoToRetrieve, *iBuf, aStatus); + } + } + +CDeleteRetrieveCACertificate::~CDeleteRetrieveCACertificate() + { + iCertInfos.Close(); + delete iFilter; + if (iCertlisted) + { + iCertlisted->ResetAndDestroy(); + delete iCertlisted; + } + delete iBuf; + } + +void CDeleteRetrieveCACertificate::DeleteCert(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + TInt ix = KErrNotFound; + TInt count = iCertInfos.Count(); + for (TInt i = 0; i < count; i++) + { + if (iCertInfos[i]->Label() == iCertLabel) + { + ix = i; + break; + } + } + if (ix == KErrNotFound) + { + User::RequestComplete(status, ix); + } + else + { + iCertInfoToDelete = iCertInfos[ix]; + UnifiedCertStore().Remove(*iCertInfoToDelete, aStatus); + } + } + +void CDeleteRetrieveCACertificate::DoReportAction() + { + iOut.writeString(_L("Deleting certificate...")); + iOut.writeNewLine(); + iOut.writeString(_L("\tLabel = ")); + iOut.writeString(iCertLabel); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + +void CDeleteRetrieveCACertificate::DoCheckResult(TInt aError) + { + if (iFinished) + { + if (aError == KErrNone && iResult) + { + switch (iCertInfoToDelete->CertificateOwnerType()) + { + case ECACertificate: + iConsole.Write(_L("\tCA certificate deleted successfully\n")); + iOut.writeString(_L("\tCA certificate deleted successfully")); + break; + + case EUserCertificate: + iConsole.Write(_L("\tUser certificate deleted successfully\n")); + iOut.writeString(_L("\tUser certificate deleted successfully")); + break; + + default: + iConsole.Write(_L("\tUnknown owner certificate deleted successfully\n")); + iOut.writeString(_L("\tUnknown owner certificate deleted successfully")); + break; + } + } + else + { + if (iResult) + { + iConsole.Write(_L("\tCA OK\n")); + iOut.writeString(_L("\tCA OK")); + } + } + iOut.writeNewLine(); + iOut.writeNewLine(); + } + } + +//////////////////////////////////////////////////////////////////////////////// +//CDeleteUserCertificate +////////////////////////////////////////////////////////////////////////////////// +CTestAction* CDeleteRetrieveUserCertificate::NewL(RFs& aFs, + CConsoleBase& aConsole, + Output& aOut, + const TTestActionSpec& aTestActionSpec) + { + CDeleteRetrieveUserCertificate* self = + new(ELeave) CDeleteRetrieveUserCertificate(aFs, aConsole, aOut); + CleanupStack::PushL(self); + self->ConstructL(aTestActionSpec); + CleanupStack::Pop(self); + return self; + } + +CDeleteRetrieveUserCertificate::CDeleteRetrieveUserCertificate(RFs& aFs, CConsoleBase& aConsole, + Output& aOut) + :CDeleteRetrieveCertificate(aFs, aConsole, aOut) + { + } + +void CDeleteRetrieveUserCertificate::ConstructL(const TTestActionSpec& aTestActionSpec) + { + CSubscriberAction::ConstructL(aTestActionSpec); + iCertlisted = new(ELeave) RPointerArray; + iFilter = CCertAttributeFilter::NewL(); + TInt pos = 0; + TInt err = KErrNone; + TPtrC8 pLabel = Input::ParseElement(aTestActionSpec.iActionBody, KCertLabelStart, KCertLabelEnd, pos, err); + if (err != KErrNone) + { + User::Leave(err); + } + iCertLabel.Copy(pLabel); + + // Set expected result + HBufC* result = HBufC::NewLC(aTestActionSpec.iActionResult.Length()); + TPtr(result->Des()).Copy(aTestActionSpec.iActionResult); + Input::GetExpectedResultL(Input::ParseElement(*result, KReturnStart, KReturnEnd), iExpectedResult); + CleanupStack::PopAndDestroy(result); + } + +void CDeleteRetrieveUserCertificate::GetCerts(TRequestStatus& aStatus) + { + CertStore().List(iCertInfos, *iFilter, aStatus); + } + +void CDeleteRetrieveUserCertificate::RetrieveCerts(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + TInt ix = KErrNotFound; + TInt count = iCertInfos.Count(); + for (TInt i = 0; i < count; i++) + { + if (iCertInfos[i]->Label() == iCertLabel) + { + ix = i; + break; + } + } + if (ix == KErrNotFound) + { + User::RequestComplete(status, ix); + } + else + { + iCertInfoToRetrieve = iCertInfos[ix]; + + HBufC8* buf = HBufC8::NewLC(iCertInfoToRetrieve->Size()); + User::LeaveIfError(iCertlisted->Append(buf)); + CleanupStack::Pop();//buf + //__ASSERT_DEBUG(!iBuf, User::Panic(_L("CListCACertificates"), 1)); + iBuf = new(ELeave) TPtr8(buf->Des()); + CertStore().Retrieve(*iCertInfoToRetrieve, *iBuf, aStatus); + } + } + +CDeleteRetrieveUserCertificate::~CDeleteRetrieveUserCertificate() + { + iCertInfos.Close(); + delete iFilter; + if (iCertlisted) + { + iCertlisted->ResetAndDestroy(); + delete iCertlisted; + } + delete iBuf; + } + +void CDeleteRetrieveUserCertificate::DeleteCert(TRequestStatus& aStatus) + { + TRequestStatus* status = &aStatus; + TInt ix = KErrNotFound; + TInt count = iCertInfos.Count(); + for (TInt i = 0; i < count; i++) + { + if (iCertInfos[i]->Label() == iCertLabel) + { + ix = i; + break; + } + } + if (ix == KErrNotFound) + { + User::RequestComplete(status, ix); + } + else + { + CCTCertInfo* certInfo = iCertInfos[ix]; + UnifiedCertStore().Remove(*certInfo, aStatus); + } + } + +void CDeleteRetrieveUserCertificate::DoReportAction() + { + iOut.writeString(_L("Deleting user certificate...")); + iOut.writeNewLine(); + iOut.writeString(_L("\tLabel = ")); + iOut.writeString(iCertLabel); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + +void CDeleteRetrieveUserCertificate::DoCheckResult(TInt aError) + { + if (iFinished) + { + if (aError == KErrNone && iResult) + { + iConsole.Write(_L("\tuser cert deleted successfully\n")); + iOut.writeString(_L("\tuser cert deleted successfully")); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + else + { + if (iResult) + { + iConsole.Write(_L("\tnot retrieved but expected\n")); + iOut.writeString(_L("\tCA OK")); + } + else + { + iConsole.Write(_L("\tuser cert deleted successfully\n")); + iOut.writeString(_L("\tuser cert deleted successfully")); + iOut.writeNewLine(); + iOut.writeNewLine(); + } + } + } + }