diff -r e06095241a65 -r 735de8341ce4 vpnengine/pkiservice/src/pkimapper.cpp --- a/vpnengine/pkiservice/src/pkimapper.cpp Wed Sep 01 12:23:21 2010 +0100 +++ b/vpnengine/pkiservice/src/pkimapper.cpp Tue Sep 14 23:16:15 2010 +0300 @@ -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" @@ -146,6 +146,8 @@ TBool aInfoOnly, TCertificateListEntry& aResultCertInfo) { + LOG(Log::Printf(_L("CPKIMapper::GetCertDetailsL\n"))); + TInt index; TInt err = KErrNone; @@ -159,23 +161,18 @@ if (err == KErrNone) { - const CMapDescriptor* mapping = (*iMapping)[index]; - aResultCertInfo.iObjectName = mapping->Label(); - aResultCertInfo.iOwnerType = mapping->OwnerType(); - aResultCertInfo.iTrustedAuthority = mapping->TrustedAuthority(); - aResultCertInfo.iIdentitySubjectName = mapping->IdentitySubjectName(); - aResultCertInfo.iSerialNumber = mapping->SerialNumber(); - aResultCertInfo.iSubjectKeyId = mapping->CertificateKeyId(); - aResultCertInfo.iKeySize = mapping->KeySize(); - aResultCertInfo.iKeyAlgorithm = mapping->KeyAlgorithm(); - aResultCertInfo.iIsDeletable = mapping->Deletable(); + const CMapDescriptor* mapping = (*iMapping)[index]; + CopyCertDataL( *mapping, aResultCertInfo ); } + return err; } TInt CPKIMapper::GetCertListL(const RMessage2 &aMessage, TBool aInfoOnly) { + LOG(Log::Printf(_L("CPKIMapper::GetCertListL\n"))); + TInt pos = 0; TInt iLast = 0; TInt iFirst = 0; @@ -184,25 +181,19 @@ CBufFlat* list = CBufFlat::NewL(sizeof(TCertificateListEntry)); CleanupStack::PushL(list); list->ResizeL(iCount * sizeof(TCertificateListEntry)); - TCertificateListEntry certInfo; + + TCertificateListEntry* certInfo = new (ELeave) TCertificateListEntry(); + CleanupStack::PushL( certInfo ); for(TInt i = iFirst; i < iLast; i++) { CMapDescriptor* mapping = (*iMapping)[i]; if(aInfoOnly || mapping->CertValidity() != CMapDescriptor::EExpired) { - certInfo.iObjectName = mapping->Label(); - certInfo.iOwnerType = mapping->OwnerType(); - certInfo.iTrustedAuthority = mapping->TrustedAuthority(); - certInfo.iIdentitySubjectName = mapping->IdentitySubjectName(); - certInfo.iSerialNumber = mapping->SerialNumber(); - certInfo.iSubjectKeyId = mapping->CertificateKeyId(); - certInfo.iKeySize = mapping->KeySize(); // Key size - certInfo.iKeyAlgorithm = mapping->KeyAlgorithm(); // RSA, DSA - certInfo.iIsDeletable = mapping->Deletable(); // IsDeletable + CopyCertDataL( *mapping, *certInfo ); list->Write(pos * sizeof(TCertificateListEntry), - (TAny*)&certInfo, + (TAny*)certInfo, sizeof(TCertificateListEntry)); pos++; if(pos >= iCount) @@ -214,19 +205,23 @@ TPtr8 ptrList = list->Ptr(0); aMessage.WriteL(0, ptrList); - CleanupStack::PopAndDestroy(1); // list + CleanupStack::PopAndDestroy( 2 ); // list, certInfo return KErrNone; } void CPKIMapper::GetApplicableCertListL(const RMessage2& aMessage, const RArray& aUidArray) { + LOG(Log::Printf(_L("CPKIMapper::GetApplicableCertListL\n"))); + TInt pos = 0; CBufFlat* list = CBufFlat::NewL(sizeof(TCertificateListEntry)); CleanupStack::PushL(list); list->ResizeL(iCount * sizeof(TCertificateListEntry)); - TCertificateListEntry certInfo; + + TCertificateListEntry* certInfo = new (ELeave) TCertificateListEntry(); + CleanupStack::PushL( certInfo ); for(TInt i = 0; (i < iMapping->Count()) && (pos < iCount); i++) { @@ -239,18 +234,10 @@ { if(mapping->IsApplicable(aUidArray[j])) { - certInfo.iObjectName = mapping->Label(); - certInfo.iOwnerType = mapping->OwnerType(); - certInfo.iTrustedAuthority = mapping->TrustedAuthority(); - certInfo.iIdentitySubjectName = mapping->IdentitySubjectName(); - certInfo.iSerialNumber = mapping->SerialNumber(); - certInfo.iSubjectKeyId = mapping->CertificateKeyId(); - certInfo.iKeySize = mapping->KeySize(); // Key size - certInfo.iKeyAlgorithm = mapping->KeyAlgorithm(); // RSA, DSA - certInfo.iIsDeletable = mapping->Deletable(); // IsDeletable + CopyCertDataL( *mapping, *certInfo ); list->Write(pos * sizeof(TCertificateListEntry), - (TAny*)&certInfo, + (TAny*)certInfo, sizeof(TCertificateListEntry)); pos++; break; @@ -262,7 +249,7 @@ TPtr8 ptrList = list->Ptr(0); aMessage.WriteL(0, ptrList); - CleanupStack::PopAndDestroy(1); // list + CleanupStack::PopAndDestroy( 2 ); // list, certInfo } @@ -490,44 +477,20 @@ void CPKIMapper::LogSearchArguments(TSecurityObjectDescriptor &aDescriptor) const { - TBuf<256> temp; LOG(Log::Printf(_L("====Object Search arguments====\n"))); if(aDescriptor.iTrustedAuthorityUsed) { - temp.Copy(aDescriptor.iTrustedAuthority); - if((aDescriptor.iTrustedAuthority[0] != 0x30) - || ((aDescriptor.iTrustedAuthority[1] != 0x81) - && (aDescriptor.iTrustedAuthority[1] != 0x82) - && ((aDescriptor.iTrustedAuthority[1] + 2) != aDescriptor.iTrustedAuthority.Length()))) - { - LOG(Log::Printf(_L("Trusted authority: %S\n"), &temp)); - } - else - { - LOG(Log::Printf(_L("Trusted authority:"))); - LOG(Log::HexDump(NULL, NULL, aDescriptor.iTrustedAuthority.Ptr(), aDescriptor.iTrustedAuthority.Length())); - } + LOG(Log::Printf(_L("Trusted authority:"))); + LOG(Log::HexDump(NULL, NULL, aDescriptor.iTrustedAuthority.Ptr(), aDescriptor.iTrustedAuthority.Length())); } if(aDescriptor.iIdentitySubjectNameUsed) { - temp.Copy(aDescriptor.iIdentitySubjectName); - if((aDescriptor.iIdentitySubjectName[0] != 0x30) - || ((aDescriptor.iIdentitySubjectName[1] != 0x81) - && (aDescriptor.iIdentitySubjectName[1] != 0x82) - && ((aDescriptor.iIdentitySubjectName[1] + 2) != aDescriptor.iIdentitySubjectName.Length()))) - { - LOG(Log::Printf(_L("SubjectName: %S\n"), &temp)); - } - else - { - LOG(Log::Printf(_L("SubjectName:"))); - LOG(Log::HexDump(NULL, NULL, aDescriptor.iIdentitySubjectName.Ptr(), aDescriptor.iIdentitySubjectName.Length())); - } + LOG(Log::Printf(_L("SubjectName:"))); + LOG(Log::HexDump(NULL, NULL, aDescriptor.iIdentitySubjectName.Ptr(), aDescriptor.iIdentitySubjectName.Length())); } if(aDescriptor.iIdentityRfc822NameUsed) { - temp.Copy(aDescriptor.iIdentityRfc822Name); - LOG(Log::Printf(_L("Rfc822Name: %S\n"), &temp)); + LOG(Log::Printf(_L("Rfc822Name: %S\n"), &aDescriptor.iIdentityRfc822Name)); } if(aDescriptor.iSerialNumberUsed) { @@ -558,3 +521,58 @@ } } + +void CPKIMapper::CopyCertDataL( + const CMapDescriptor& aMapping, TCertificateListEntry& aCertInfo ) const + { + LOG(Log::Printf(_L("CPKIMapper::CopyCertDataL\n"))); + + TInt len = 0; + + aCertInfo.iObjectName = aMapping.Label(); + aCertInfo.iOwnerType = aMapping.OwnerType(); + + TPtrC8 ta = aMapping.TrustedAuthority(); + len = ta.Length(); + + if( KMaxX500DN >= len ) + { + aCertInfo.iTrustedAuthority = ta; + } + else + { + LOG(Log::Printf(_L("Trusted authority length: %d\n"), len )); + User::Leave( KErrArgument ); + } + + TPtrC8 isn = aMapping.IdentitySubjectName(); + len = isn.Length(); + + if( KMaxX500DN >= len ) + { + aCertInfo.iIdentitySubjectName = isn; + } + else{ + LOG(Log::Printf(_L("Subject name length: %d\n"), len )); + User::Leave( KErrArgument ); + } + + TPtrC8 sn = aMapping.SerialNumber(); + len = sn.Length(); + + if( KMaxSerial >= len ) + { + aCertInfo.iSerialNumber = sn; + } + else + { + LOG(Log::Printf(_L("Serial number length: %d\n"), len )); + User::Leave( KErrArgument ); + } + + aCertInfo.iSubjectKeyId = aMapping.CertificateKeyId(); + aCertInfo.iKeySize = aMapping.KeySize(); + aCertInfo.iKeyAlgorithm = aMapping.KeyAlgorithm(); // RSA, DSA + aCertInfo.iIsDeletable = aMapping.Deletable(); + } +