diff -r d5423fbb4f29 -r b75757c81051 pkiutilities/CTSecurityDialogs/NotifSrc/CTSecurityDialogsAO.cpp --- a/pkiutilities/CTSecurityDialogs/NotifSrc/CTSecurityDialogsAO.cpp Tue Feb 02 00:44:34 2010 +0200 +++ b/pkiutilities/CTSecurityDialogs/NotifSrc/CTSecurityDialogsAO.cpp Fri Mar 19 09:41:08 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -11,7 +11,7 @@ * * Contributors: * -* Description: +* Description: * */ @@ -49,8 +49,6 @@ // LOCAL CONSTANTS AND MACROS const TInt KCertArrayGranularity = 3; const TInt KMaxLengthTextDetailsBody = 5000; -// CertLabel, Issuer, Owner max length 510 bytes -const TInt KMaxLengthTextCertLabel = 510; // CertLabel, Issuer, Owner max visible length const TInt KMaxLengthTextCertLabelVisible = 200; // "dd/mm/yyyy0" @@ -165,7 +163,7 @@ delete iKeyStore; delete iCertStore; iFs.Close(); - + iDeleted = ETrue; } @@ -186,7 +184,7 @@ iMessagePtr = aMessage; WIMSECURITYDIALOGS_WRITE_FORMAT( "CCTSecurityDialogsAO::StartLD iOperation=%d", iOperation ); - + MapTlsProviderOperation( iOperation ); switch ( iOperation ) @@ -326,7 +324,7 @@ User::Panic( _L("CTestSecDlgNotifier"), 0 ); break; } - + // Note that CCTSecurityDialogsAO::StartLD() must complete the given message and // delete itself when ready. However, there may be several steps before it can be // deleted. CCTSecurityDialogsAO::HandleResponseAndCompleteL() completes the given @@ -543,7 +541,7 @@ DoHandleMessageL( EErrorPukCodeIncorrect, KNullDesC, KNullDesC, 0, 0 ); } // Ask the PUK code - // The label is iPIN instead of iUnblockPIN, since we need to show to + // The label is iPIN instead of iUnblockPIN, since we need to show to // the user which PIN to unblock DoHandleMessageL( EEnterPukNR, iPIN.iPINLabel, iPIN.iTokenLabel, iUnblockPIN.iMinLength, iUnblockPIN.iMaxLength ); @@ -762,8 +760,8 @@ aMinLength, aMaxLength, iRetValue, - resource, - iPinQueryDialog, + resource, + iPinQueryDialog, iPinQueryDialogDeleted ); break; } @@ -1000,64 +998,64 @@ case EProcessTrustedSite: { WIMSECURITYDIALOGS_WRITE( "EProcessTrustedSite" ); - TInt count = iCertStore->WritableCertStoreCount(); - for ( TInt i = 0; i < count; i++ ) + TInt count = iCertStore->WritableCertStoreCount(); + for ( TInt i = 0; i < count; i++ ) + { + MCTWritableCertStore *certstore = &iCertStore->WritableCertStore( i ); + MCTToken& token = certstore->Token(); + TUid tokenuid = token.Handle().iTokenTypeUid; + if ( tokenuid == KTrustedServerTokenUid ) { - MCTWritableCertStore *certstore = &iCertStore->WritableCertStore( i ); - MCTToken& token = certstore->Token(); - TUid tokenuid = token.Handle().iTokenTypeUid; - if ( tokenuid == KTrustedServerTokenUid ) - { - iTrustedSiteCertStore = certstore; - } + iTrustedSiteCertStore = certstore; } + } - CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL(); - CleanupStack::PushL( trustedSitesStore ); + CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL(); + CleanupStack::PushL( trustedSitesStore ); - // Find out whether or not site associated with certificate is trusted - iTrustedSite = trustedSitesStore->IsTrustedSiteL( *iCertBuf, *iServerName ); + // Find out whether or not site associated with certificate is trusted + iTrustedSite = trustedSitesStore->IsTrustedSiteL( *iCertBuf, *iServerName ); - if ( iTrustedSite ) - { - TBool allowOutOfDate = trustedSitesStore->IsOutOfDateAllowedL(*iCertBuf, *iServerName ); - - if (!allowOutOfDate) - { - CX509Certificate* cert = CX509Certificate::NewLC( iCertBuf->Des() ); + if ( iTrustedSite ) + { + TBool allowOutOfDate = trustedSitesStore->IsOutOfDateAllowedL(*iCertBuf, *iServerName); + + if (!allowOutOfDate) + { + CX509Certificate* cert = CX509Certificate::NewLC( iCertBuf->Des() ); - const CValidityPeriod& validityPeriod = cert->ValidityPeriod(); - const TTime& startValue = validityPeriod.Start(); - const TTime& finishValue = validityPeriod.Finish(); - TTime current; - current.UniversalTime(); + const CValidityPeriod& validityPeriod = cert->ValidityPeriod(); + const TTime& startValue = validityPeriod.Start(); + const TTime& finishValue = validityPeriod.Finish(); + TTime current; + current.UniversalTime(); - // First check certificate validity period - if ( ( startValue > current ) || ( finishValue < current ) ) - { - iTrustedSite = EFalse; - } - - CleanupStack::PopAndDestroy(); //cert - } + // First check certificate validity period + if ( ( startValue > current ) || ( finishValue < current ) ) + { + iTrustedSite = EFalse; } - CleanupStack::PopAndDestroy( trustedSitesStore ); // trustedSitesStore + + CleanupStack::PopAndDestroy( cert ); + } + } + CleanupStack::PopAndDestroy( trustedSitesStore ); - if ( iTrustedSite ) - { - // Site is trusted. Next step is to check that server - // certificate is in the trusted site certificate storage - iNextStep = ERetrieveServerCerts; - iStatus = KRequestPending; - SetActive(); - TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); - } - else - { - // Site is not trusted. Prompt user - ShowNoTrustDialogL(); - } + if ( iTrustedSite ) + { + // Site is trusted. Next step is to check that server + // certificate is in the trusted site certificate storage + iNextStep = ERetrieveServerCerts; + iStatus = KRequestPending; + SetActive(); + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + } + else + { + // Site is not trusted. Prompt user + ShowNoTrustDialogL(); + } break; } @@ -1394,7 +1392,7 @@ void CCTSecurityDialogsAO::DoHandleSelectCertificateL() { TBool foundDevCert = EFalse; - + // Check certificate list to find out if there is certificate from // Device Certificate Store. for ( TInt ii = 0; ii < iCertHandleList.Count(); ii++) @@ -1402,28 +1400,28 @@ TCTTokenObjectHandle handle = iCertHandleList[ii]; if ( handle.iTokenHandle.iTokenTypeUid == KDeviceCertStoreTokenUid ) { - // Found a certificate from Device Certificate Store. + // Found a certificate from Device Certificate Store. foundDevCert = ETrue; - iTokenHandle = handle; - iRetValue = ETrue; + iTokenHandle = handle; + iRetValue = ETrue; iNextStep = EOperationCompleted; iStatus = KRequestPending; SetActive(); TRequestStatus* status = &iStatus; - User::RequestComplete( status, KErrNone ); + User::RequestComplete( status, KErrNone ); break; } - + } - + if ( !foundDevCert ) - { + { // No certificate from Device Certificate Store. Prompt user // for certificate selection CCTSelectCertificateDialog::RunDlgLD( iCertArray, iCertHandleList, iTokenHandle, iStatus, iRetValue ); // Takes ownerhip of array - + iNextStep = EOperationCompleted; iStatus = KRequestPending; SetActive(); @@ -1439,7 +1437,7 @@ CX509Certificate* cert = CX509Certificate::NewLC( iCertBuf->Des() ); TInt resourceid = R_WIM_NO_TRUST_QUERY_UNTRUSTED; TBool showPermAccept = ETrue; - + if( iAuthFailReason == ESignatureInvalid || iAuthFailReason == ECertificateRevoked ) { // Invalid or revoked certificate @@ -1453,13 +1451,13 @@ if( iAuthFailReason == EValidatedOK || iAuthFailReason == EDateOutOfRange ) { // Trusted certificate, but problems with CN or date - + // Retrieve subject name const CX500DistinguishedName& dName = cert->SubjectName(); - + // Retrieve common name HBufC* cn = dName.ExtractFieldL( KX520CommonName ); - + // Check common name first and then date if( !cn ) { @@ -1490,15 +1488,17 @@ } // No "Accept Permanently" option if certificate is out of date, or - // if domain name is not defined. + // if domain name is not defined, or if trusted site store failed to + // open (and it's not possible to save the server certificate). const CValidityPeriod& validityPeriod = cert->ValidityPeriod(); const TTime& startValue = validityPeriod.Start(); const TTime& finishValue = validityPeriod.Finish(); TTime current; current.UniversalTime(); - + if( (( startValue > current ) || ( finishValue < current )) || - ( iServerName->Des().Length() == 0 ) ) + ( iServerName->Des().Length() == 0 ) || + ( !iTrustedSiteCertStore ) ) { showPermAccept = EFalse; } @@ -2234,47 +2234,32 @@ // HBufC& aMessage, TPtrC aValue, TInt aResourceOne) // Reads dynamic text, if the string is empty // put a not defined text from the resource in its place -// KMaxLengthTextCertLabel = 510, used by CertLabel(), Issuer(), Owner() // --------------------------------------------------------- // void CCTSecurityDialogsAO::DetailsDynamicL( TDes& aMessage, const TDesC& aValue, TInt aResource) { - HBufC* buf = HBufC::NewLC( KMaxLengthTextCertLabel ); - buf->Des() = aValue; - buf->Des().TrimLeft(); - // Cut CertLabel after fourth semi colon - TPtrC trimmedCertLabel = CutCertificateField( buf->Des() ); - buf->Des().Copy( trimmedCertLabel ); - TInt length = buf->Des().Length(); - if (length == 0 ) + HBufC* buf = aValue.AllocLC(); + TPtr trimmedValue( buf->Des() ); + trimmedValue.TrimLeft(); + + if( trimmedValue.Length() > KMaxLengthTextCertLabelVisible ) + { + trimmedValue.SetLength( KMaxLengthTextCertLabelVisible - 1 ); + trimmedValue.Append( KTextUtilClipEndChar ); + } + + if( trimmedValue.Length() == 0 ) { DetailsResourceL( aMessage, aResource ); } else { - aMessage.Append( buf->Des() ); + aMessage.Append( trimmedValue ); aMessage.Append( KEnter ); } - CleanupStack::PopAndDestroy(); // buf - } -// --------------------------------------------------------- -// CCTSecurityDialogsAO::CutCertificateField(TPtrC aField) -// If CertLabel, Issuer and Owner length is over 80 characters, -// cut it down to 80 -// Returns the cut certificate field. -// --------------------------------------------------------- -// -TPtrC CCTSecurityDialogsAO::CutCertificateField( const TDesC& aField ) - { - TInt fieldLength = aField.Length(); - if ( fieldLength >= KMaxLengthTextCertLabelVisible ) - { - TPtrC cutCertLabel = aField.Mid( 0, KMaxLengthTextCertLabelVisible ); - return cutCertLabel; - } - return aField; + CleanupStack::PopAndDestroy( buf ); } // ----------------------------------------------------------------------------- @@ -2375,12 +2360,12 @@ default: User::Panic( _L("CTestSecDlgNotifier"), 0 ); } - + if( iOperation != EServerAuthenticationFailure ) { iMessagePtr.Complete( iRetValue ? KErrNone : KErrCancel ); } - + delete this; } @@ -2429,14 +2414,14 @@ iQueryDialogDeleted = ETrue; } iQueryDialog = NULL; - + if ( !iPinQueryDialogDeleted ) { delete iPinQueryDialog; iPinQueryDialogDeleted = ETrue; } iPinQueryDialog = NULL; - + // Complete message if it has not been completed earlier. if( !iMessagePtr.IsNull() ) { @@ -2473,6 +2458,10 @@ iStatus = KRequestPending; SetActive(); } + else + { + User::Leave( KErrGeneral ); + } } // -----------------------------------------------------------------------------