pkiutilities/securitydialognotifiersrv/src/securitydialogoperserverauthfail.cpp
author hgs
Tue, 28 Sep 2010 14:03:54 +0300
changeset 59 881d92421467
parent 53 25dd1e8b2663
child 63 989397f9511c
permissions -rw-r--r--
201037_03
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
     1
/*
6ed68423b759 201033_01
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
6ed68423b759 201033_01
hgs
parents:
diff changeset
     3
* All rights reserved.
6ed68423b759 201033_01
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
6ed68423b759 201033_01
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
6ed68423b759 201033_01
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
6ed68423b759 201033_01
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
6ed68423b759 201033_01
hgs
parents:
diff changeset
     8
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
     9
* Initial Contributors:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
6ed68423b759 201033_01
hgs
parents:
diff changeset
    11
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
    12
* Contributors:
6ed68423b759 201033_01
hgs
parents:
diff changeset
    13
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
    14
* Description:  Server authentication failure operation in security dialog
6ed68423b759 201033_01
hgs
parents:
diff changeset
    15
*
6ed68423b759 201033_01
hgs
parents:
diff changeset
    16
*/
6ed68423b759 201033_01
hgs
parents:
diff changeset
    17
6ed68423b759 201033_01
hgs
parents:
diff changeset
    18
#include "securitydialogoperserverauthfail.h" // CServerAuthFailOperation
6ed68423b759 201033_01
hgs
parents:
diff changeset
    19
#include "securitydialogoperationobserver.h" // MSecurityDialogOperationObserver
6ed68423b759 201033_01
hgs
parents:
diff changeset
    20
#include "untrustedcertquery.h"         // CUntrustedCertQuery
6ed68423b759 201033_01
hgs
parents:
diff changeset
    21
#include "../../DeviceToken/Inc/TrustedSitesStore.h" // CTrustSitesStore
6ed68423b759 201033_01
hgs
parents:
diff changeset
    22
#include <mctwritablecertstore.h>       // MCTWritableCertStore
6ed68423b759 201033_01
hgs
parents:
diff changeset
    23
#include <unifiedcertstore.h>           // CUnifiedCertStore
6ed68423b759 201033_01
hgs
parents:
diff changeset
    24
#include <cctcertinfo.h>                // CCTCertInfo
6ed68423b759 201033_01
hgs
parents:
diff changeset
    25
#include <x509cert.h>                   // CX509Certificate
6ed68423b759 201033_01
hgs
parents:
diff changeset
    26
#include "securitydialogstrace.h"       // TRACE macro
6ed68423b759 201033_01
hgs
parents:
diff changeset
    27
6ed68423b759 201033_01
hgs
parents:
diff changeset
    28
const TUid KTrustedSiteCertificatesTokenTypeUid = { 0x101FB66F };
6ed68423b759 201033_01
hgs
parents:
diff changeset
    29
const TInt KMaxCommonNameLength = 64;   // from RFC3280
6ed68423b759 201033_01
hgs
parents:
diff changeset
    30
6ed68423b759 201033_01
hgs
parents:
diff changeset
    31
6ed68423b759 201033_01
hgs
parents:
diff changeset
    32
// ======== MEMBER FUNCTIONS ========
6ed68423b759 201033_01
hgs
parents:
diff changeset
    33
6ed68423b759 201033_01
hgs
parents:
diff changeset
    34
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    35
// CServerAuthFailOperation::NewL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    36
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    37
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
    38
CServerAuthFailOperation* CServerAuthFailOperation::NewL(
6ed68423b759 201033_01
hgs
parents:
diff changeset
    39
        MSecurityDialogOperationObserver& aObserver, const RMessage2& aMessage,
6ed68423b759 201033_01
hgs
parents:
diff changeset
    40
        TInt aReplySlot )
6ed68423b759 201033_01
hgs
parents:
diff changeset
    41
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
    42
    TRACE( "CServerAuthFailOperation::NewL, aMessage 0x%08x", aMessage.Handle() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    43
    return new( ELeave ) CServerAuthFailOperation( aObserver, aMessage, aReplySlot );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    44
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
    45
6ed68423b759 201033_01
hgs
parents:
diff changeset
    46
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    47
// CServerAuthFailOperation::~CServerAuthFailOperation()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    48
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    49
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
    50
CServerAuthFailOperation::~CServerAuthFailOperation()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    51
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
    52
    TRACE( "CServerAuthFailOperation::~CServerAuthFailOperation, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    53
    Cancel();
6ed68423b759 201033_01
hgs
parents:
diff changeset
    54
6ed68423b759 201033_01
hgs
parents:
diff changeset
    55
    delete iUntrustedCertQuery;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    56
    iUntrustedCertQuery = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    57
6ed68423b759 201033_01
hgs
parents:
diff changeset
    58
    delete iInput;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    59
    iInput = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    60
    delete iCertLabel;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    61
    iCertLabel = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    62
    delete iServerName;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    63
    iServerName = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    64
6ed68423b759 201033_01
hgs
parents:
diff changeset
    65
    delete iCertStore;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    66
    iCertStore = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    67
    iTrustedSiteCertStore = NULL;   // not owned
6ed68423b759 201033_01
hgs
parents:
diff changeset
    68
6ed68423b759 201033_01
hgs
parents:
diff changeset
    69
    delete iCertAttributeFilter;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    70
    iCertAttributeFilter = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    71
    delete iRetrievedCertBuffer;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    72
    iRetrievedCertBuffer = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    73
6ed68423b759 201033_01
hgs
parents:
diff changeset
    74
    iCertInfos.Close();
6ed68423b759 201033_01
hgs
parents:
diff changeset
    75
    iFs.Close();
6ed68423b759 201033_01
hgs
parents:
diff changeset
    76
    TRACE( "CServerAuthFailOperation::~CServerAuthFailOperation, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    77
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
    78
6ed68423b759 201033_01
hgs
parents:
diff changeset
    79
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    80
// CServerAuthFailOperation::StartL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
    81
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
    82
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
    83
void CServerAuthFailOperation::StartL( const TDesC8& aBuffer )
6ed68423b759 201033_01
hgs
parents:
diff changeset
    84
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
    85
    TRACE( "CServerAuthFailOperation::StartL, begin" );
53
25dd1e8b2663 201035_01
hgs
parents: 48
diff changeset
    86
    ASSERT( iInput == NULL );
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
    87
    iInput = CServerAuthenticationFailureInput::NewL( aBuffer );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    88
6ed68423b759 201033_01
hgs
parents:
diff changeset
    89
    iInput->GetEncodedCert( iEncodedServerCert );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    90
6ed68423b759 201033_01
hgs
parents:
diff changeset
    91
    TPtrC8 serverName;
6ed68423b759 201033_01
hgs
parents:
diff changeset
    92
    iInput->GetServerName( serverName );
53
25dd1e8b2663 201035_01
hgs
parents: 48
diff changeset
    93
    ASSERT( iServerName == NULL );
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
    94
    iServerName = HBufC::NewL( serverName.Length() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    95
    iServerName->Des().Copy( serverName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    96
    TRACE( "CServerAuthFailOperation::StartL, iServerName=%S", iServerName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
    97
6ed68423b759 201033_01
hgs
parents:
diff changeset
    98
    iAuthFailReason = iInput->FailureReason();
6ed68423b759 201033_01
hgs
parents:
diff changeset
    99
    TRACE( "CServerAuthFailOperation::StartL, iAuthFailReason=%d", iAuthFailReason );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   100
6ed68423b759 201033_01
hgs
parents:
diff changeset
   101
    InitializeUnifiedCertStoreL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   102
    // This is async function, processing continues in RunL().
6ed68423b759 201033_01
hgs
parents:
diff changeset
   103
    // Basically trusted site certificates are fetched and the
6ed68423b759 201033_01
hgs
parents:
diff changeset
   104
    // server certificate is compared to them. If the server
6ed68423b759 201033_01
hgs
parents:
diff changeset
   105
    // certificate is already in trusted site cert store, then
6ed68423b759 201033_01
hgs
parents:
diff changeset
   106
    // connection is accepted silently. If it is not, then
6ed68423b759 201033_01
hgs
parents:
diff changeset
   107
    // untrusted certificate dialog is displayed.
6ed68423b759 201033_01
hgs
parents:
diff changeset
   108
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   109
6ed68423b759 201033_01
hgs
parents:
diff changeset
   110
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   111
// CServerAuthFailOperation::CancelOperation()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   112
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   113
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   114
void CServerAuthFailOperation::CancelOperation()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   115
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   116
    TRACE( "CServerAuthFailOperation::CancelOperation, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   117
    Cancel();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   118
    if( iUntrustedCertQuery )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   119
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   120
        TRACE( "CServerAuthFailOperation::CancelOperation, cancelling untrusted query" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   121
        iUntrustedCertQuery->Cancel();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   122
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   123
    if( !iMessage.IsNull() )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   124
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   125
        TRACE( "CServerAuthFailOperation::CancelOperation, completing message 0x%08x",
6ed68423b759 201033_01
hgs
parents:
diff changeset
   126
                iMessage.Handle() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   127
        iMessage.Complete( KErrCancel );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   128
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   129
    TRACE( "CServerAuthFailOperation::CancelOperation, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   130
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   131
6ed68423b759 201033_01
hgs
parents:
diff changeset
   132
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   133
// CServerAuthFailOperation::RunL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   134
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   135
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   136
void CServerAuthFailOperation::RunL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   137
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   138
    TRACE( "CServerAuthFailOperation::RunL, iStatus.Int()=%d, iMode=%d",
6ed68423b759 201033_01
hgs
parents:
diff changeset
   139
            iStatus.Int(), iMode );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   140
    User::LeaveIfError( iStatus.Int() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   141
    switch( iMode )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   142
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   143
        case EInitialiseCertStore:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   144
            ProcessServerAuthorizationFailureL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   145
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   146
        case EListTrustedSiteCerts:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   147
            RetrieveFirstTrustedSiteCertL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   148
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   149
        case ERetrieveTrustedSiteCert:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   150
            if( IsRetrievedCertSameAsServerCertL() )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   151
                {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   152
                ReturnResultL( EContinue );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   153
                }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   154
            else
6ed68423b759 201033_01
hgs
parents:
diff changeset
   155
                {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   156
                RetrieveNextTrustedSiteCertL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   157
                }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   158
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   159
        case ESavingServerCert:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   160
            SaveServerNameToTrustedSitesStoreL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   161
            ReturnResultL( EContinue );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   162
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   163
        default:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   164
            User::Leave( KErrGeneral );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   165
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   166
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   167
    TRACE( "CServerAuthFailOperation::RunL(), end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   168
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   169
6ed68423b759 201033_01
hgs
parents:
diff changeset
   170
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   171
// CServerAuthFailOperation::DoCancel()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   172
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   173
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   174
void CServerAuthFailOperation::DoCancel()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   175
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   176
    TRACE( "CServerAuthFailOperation::DoCancel, iMode=%d", iMode );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   177
    switch( iMode )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   178
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   179
        case EInitialiseCertStore:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   180
            if( iCertStore )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   181
                {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   182
                iCertStore->CancelInitialize();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   183
                }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   184
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   185
        case EListTrustedSiteCerts:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   186
            if( iTrustedSiteCertStore )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   187
                {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   188
                iTrustedSiteCertStore->CancelList();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   189
                }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   190
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   191
        case ERetrieveTrustedSiteCert:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   192
            if( iTrustedSiteCertStore )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   193
                {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   194
                iTrustedSiteCertStore->CancelRetrieve();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   195
                }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   196
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   197
        case ESavingServerCert:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   198
            if( iTrustedSiteCertStore )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   199
                {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   200
                iTrustedSiteCertStore->CancelAdd();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   201
                }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   202
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   203
        default:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   204
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   205
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   206
    TRACE( "CServerAuthFailOperation::DoCancel, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   207
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   208
6ed68423b759 201033_01
hgs
parents:
diff changeset
   209
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   210
// CServerAuthFailOperation::CServerAuthFailOperation()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   211
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   212
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   213
CServerAuthFailOperation::CServerAuthFailOperation(
6ed68423b759 201033_01
hgs
parents:
diff changeset
   214
        MSecurityDialogOperationObserver& aObserver, const RMessage2& aMessage,
6ed68423b759 201033_01
hgs
parents:
diff changeset
   215
        TInt aReplySlot ) : CSecurityDialogOperation( aObserver, aMessage, aReplySlot )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   216
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   217
    TRACE( "CServerAuthFailOperation::CServerAuthFailOperation" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   218
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   219
6ed68423b759 201033_01
hgs
parents:
diff changeset
   220
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   221
// CServerAuthFailOperation::InitializeUnifiedCertStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   222
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   223
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   224
void CServerAuthFailOperation::InitializeUnifiedCertStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   225
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   226
    TRACE( "CServerAuthFailOperation::InitializeUnifiedCertStoreL" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   227
    User::LeaveIfError( iFs.Connect() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   228
    iCertStore = CUnifiedCertStore::NewL( iFs, ETrue );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   229
6ed68423b759 201033_01
hgs
parents:
diff changeset
   230
    iCertStore->Initialize( iStatus );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   231
    iMode = EInitialiseCertStore;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   232
    SetActive();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   233
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   234
6ed68423b759 201033_01
hgs
parents:
diff changeset
   235
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   236
// CServerAuthFailOperation::ProcessServerAuthorizationFailureL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   237
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   238
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   239
void CServerAuthFailOperation::ProcessServerAuthorizationFailureL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   240
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   241
    TRACE( "CServerAuthFailOperation::ProcessServerAuthorizationFailureL" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   242
    OpenTrustedSiteCertificateStoreL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   243
    if( IsAlreadyTrustedSiteL() )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   244
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   245
        StartFetchingTrustedSiteCertsL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   246
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   247
    else
6ed68423b759 201033_01
hgs
parents:
diff changeset
   248
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   249
        ShowUntrustedCertificateDialogL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   250
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   251
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   252
6ed68423b759 201033_01
hgs
parents:
diff changeset
   253
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   254
// CServerAuthFailOperation::OpenTrustedSiteCertificateStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   255
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   256
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   257
void CServerAuthFailOperation::OpenTrustedSiteCertificateStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   258
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   259
    TRACE( "CServerAuthFailOperation::OpenTrustedSiteCertificateStoreL, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   260
    TInt count = iCertStore->WritableCertStoreCount();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   261
    for( TInt index = 0; ( index < count ) && !iTrustedSiteCertStore; index++ )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   262
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   263
        MCTWritableCertStore* certstore = &( iCertStore->WritableCertStore( index ) );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   264
        TUid tokenTypeUid = certstore->Token().Handle().iTokenTypeUid;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   265
        if( tokenTypeUid == KTrustedSiteCertificatesTokenTypeUid )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   266
            {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   267
            iTrustedSiteCertStore = certstore;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   268
            }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   269
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   270
    TRACE( "CServerAuthFailOperation::OpenTrustedSiteCertificateStoreL, store 0x%08x",
6ed68423b759 201033_01
hgs
parents:
diff changeset
   271
            iTrustedSiteCertStore );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   272
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   273
6ed68423b759 201033_01
hgs
parents:
diff changeset
   274
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   275
// CServerAuthFailOperation::IsAlreadyTrustedSiteL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   276
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   277
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   278
TBool CServerAuthFailOperation::IsAlreadyTrustedSiteL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   279
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   280
    TRACE( "CServerAuthFailOperation::IsAlreadyTrustedSiteL, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   281
    TBool isTrustedSite = EFalse;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   282
    if( iTrustedSiteCertStore )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   283
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   284
        CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   285
        CleanupStack::PushL( trustedSitesStore );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   286
6ed68423b759 201033_01
hgs
parents:
diff changeset
   287
        isTrustedSite = trustedSitesStore->IsTrustedSiteL( iEncodedServerCert, *iServerName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   288
        if( isTrustedSite )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   289
            {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   290
            TBool isExpiredAccepted = trustedSitesStore->IsOutOfDateAllowedL(
6ed68423b759 201033_01
hgs
parents:
diff changeset
   291
                    iEncodedServerCert, *iServerName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   292
            TRACE( "CServerAuthFailOperation::IsAlreadyTrustedSiteL, isExpiredAccepted=%d",
6ed68423b759 201033_01
hgs
parents:
diff changeset
   293
                    isExpiredAccepted );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   294
            if( !isExpiredAccepted && iAuthFailReason == EDateOutOfRange )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   295
                {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   296
                TRACE( "CServerAuthFailOperation::IsAlreadyTrustedSiteL, not accepted" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   297
                isTrustedSite = EFalse;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   298
                }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   299
            }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   300
6ed68423b759 201033_01
hgs
parents:
diff changeset
   301
        CleanupStack::PopAndDestroy( trustedSitesStore );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   302
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   303
    TRACE( "CServerAuthFailOperation::IsAlreadyTrustedSiteL, isTrustedSite=%d", isTrustedSite );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   304
    return isTrustedSite;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   305
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   306
6ed68423b759 201033_01
hgs
parents:
diff changeset
   307
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   308
// CServerAuthFailOperation::StartFetchingTrustedSiteCertsL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   309
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   310
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   311
void CServerAuthFailOperation::StartFetchingTrustedSiteCertsL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   312
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   313
    TRACE( "CServerAuthFailOperation::StartFetchingTrustedSiteCertsL" );
53
25dd1e8b2663 201035_01
hgs
parents: 48
diff changeset
   314
    ASSERT( iCertAttributeFilter == NULL );
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
   315
    iCertAttributeFilter = CCertAttributeFilter::NewL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   316
    iCertAttributeFilter->SetOwnerType( EPeerCertificate );
53
25dd1e8b2663 201035_01
hgs
parents: 48
diff changeset
   317
    ASSERT( iTrustedSiteCertStore != NULL );
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
   318
    iTrustedSiteCertStore->List( iCertInfos, *iCertAttributeFilter, iStatus );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   319
    iMode = EListTrustedSiteCerts;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   320
    SetActive();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   321
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   322
6ed68423b759 201033_01
hgs
parents:
diff changeset
   323
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   324
// CServerAuthFailOperation::ShowUntrustedCertificateDialogL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   325
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   326
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   327
void CServerAuthFailOperation::ShowUntrustedCertificateDialogL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   328
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   329
    TRACE( "CServerAuthFailOperation::ShowUntrustedCertificateDialogL, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   330
6ed68423b759 201033_01
hgs
parents:
diff changeset
   331
    // If trusted site certstore open has failed, then it is not possible to save
6ed68423b759 201033_01
hgs
parents:
diff changeset
   332
    // the host name for permanent use. Hence, choice for permanent accept is not
6ed68423b759 201033_01
hgs
parents:
diff changeset
   333
    // displayed if trusted site certstore open has failed. Other restrictions for
6ed68423b759 201033_01
hgs
parents:
diff changeset
   334
    // permanent accept are defined in device dialog (UntrustedCertificateWidget).
6ed68423b759 201033_01
hgs
parents:
diff changeset
   335
    TBool isTrustedSiteCertStoreOpened = ( iTrustedSiteCertStore != NULL );
53
25dd1e8b2663 201035_01
hgs
parents: 48
diff changeset
   336
    ASSERT( iUntrustedCertQuery == NULL );
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
   337
    iUntrustedCertQuery = CUntrustedCertQuery::NewL( iAuthFailReason, iEncodedServerCert,
6ed68423b759 201033_01
hgs
parents:
diff changeset
   338
            *iServerName, isTrustedSiteCertStoreOpened );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   339
6ed68423b759 201033_01
hgs
parents:
diff changeset
   340
    CUntrustedCertQuery::TResponse response = CUntrustedCertQuery::EQueryRejected;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   341
    iUntrustedCertQuery->ShowQueryAndWaitForResponseL( response );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   342
    switch( response )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   343
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   344
        case CUntrustedCertQuery::EQueryAccepted:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   345
            ReturnResultL( EContinue );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   346
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   347
        case CUntrustedCertQuery::EQueryAcceptedPermanently:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   348
            SaveServerCertToTrustedSiteCertStoreL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   349
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   350
        case CUntrustedCertQuery::EQueryRejected:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   351
        default:
6ed68423b759 201033_01
hgs
parents:
diff changeset
   352
            ReturnResultL( EStop );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   353
            break;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   354
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   355
6ed68423b759 201033_01
hgs
parents:
diff changeset
   356
    TRACE( "CServerAuthFailOperation::ShowUntrustedCertificateDialogL, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   357
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   358
6ed68423b759 201033_01
hgs
parents:
diff changeset
   359
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   360
// CServerAuthFailOperation::SaveServerCertToTrustedSiteCertStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   361
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   362
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   363
void CServerAuthFailOperation::SaveServerCertToTrustedSiteCertStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   364
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   365
    TRACE( "CServerAuthFailOperation::SaveServerCertToTrustedSiteCertStoreL" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   366
53
25dd1e8b2663 201035_01
hgs
parents: 48
diff changeset
   367
    ASSERT( iCertLabel == NULL );
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
   368
    CX509Certificate* serverCert = CX509Certificate::NewLC( iEncodedServerCert );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   369
    const CX500DistinguishedName& dName = serverCert->SubjectName();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   370
    HBufC* commonName = dName.ExtractFieldL( KX520CommonName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   371
    if( commonName )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   372
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   373
        CleanupStack::PushL( commonName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   374
        TInt commonNameLen = commonName->Length();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   375
        if( commonNameLen > 0 && commonNameLen <= KMaxCommonNameLength )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   376
            {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   377
            iCertLabel = commonName->AllocL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   378
            }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   379
        CleanupStack::PopAndDestroy( commonName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   380
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   381
    CleanupStack::PopAndDestroy( serverCert );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   382
6ed68423b759 201033_01
hgs
parents:
diff changeset
   383
    if( !iCertLabel )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   384
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   385
        iCertLabel = iServerName->AllocL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   386
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   387
6ed68423b759 201033_01
hgs
parents:
diff changeset
   388
    iTrustedSiteCertStore->Add( *iCertLabel, EX509Certificate, EPeerCertificate,
6ed68423b759 201033_01
hgs
parents:
diff changeset
   389
            NULL, NULL, iEncodedServerCert, iStatus );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   390
    iMode = ESavingServerCert;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   391
    SetActive();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   392
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   393
6ed68423b759 201033_01
hgs
parents:
diff changeset
   394
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   395
// CServerAuthFailOperation::SaveServerNameToTrustedSitesStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   396
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   397
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   398
void CServerAuthFailOperation::SaveServerNameToTrustedSitesStoreL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   399
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   400
    TRACE( "CServerAuthFailOperation::SaveServerNameToTrustedSitesStoreL, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   401
    CTrustSitesStore* trustedSitesStore = CTrustSitesStore::NewL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   402
    CleanupStack::PushL( trustedSitesStore );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   403
6ed68423b759 201033_01
hgs
parents:
diff changeset
   404
    // CTrustSitesStore::AddL() may leave or it may return an error code.
6ed68423b759 201033_01
hgs
parents:
diff changeset
   405
    // It leaves if parameters are incorrect, and it returns error code if
6ed68423b759 201033_01
hgs
parents:
diff changeset
   406
    // saving fails. Both kinds of errors are handled here in the same way.
6ed68423b759 201033_01
hgs
parents:
diff changeset
   407
    TInt err = trustedSitesStore->AddL( iEncodedServerCert, *iServerName );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   408
    TRACE( "CServerAuthFailOperation::SaveServerNameToTrustedSitesStoreL, err=%d", err );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   409
    User::LeaveIfError( err );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   410
6ed68423b759 201033_01
hgs
parents:
diff changeset
   411
    CleanupStack::PopAndDestroy( trustedSitesStore );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   412
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   413
6ed68423b759 201033_01
hgs
parents:
diff changeset
   414
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   415
// CServerAuthFailOperation::ReturnResultL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   416
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   417
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   418
void CServerAuthFailOperation::ReturnResultL( TServerAuthenticationFailureDialogResult aResult )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   419
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   420
    TRACE( "CServerAuthFailOperation::ReturnResultL, aResult=%d", aResult );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   421
    TServerAuthenticationFailureOutputBuf output( aResult );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   422
    iMessage.WriteL( iReplySlot, output );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   423
    TRACE( "CServerAuthFailOperation::ReturnResultL, completing msg 0x%08x", iMessage.Handle() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   424
    iMessage.Complete( KErrNone );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   425
    TRACE( "CServerAuthFailOperation::ReturnResultL, informing observer" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   426
    iObserver.OperationComplete();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   427
    TRACE( "CServerAuthFailOperation::ReturnResultL, end" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   428
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   429
6ed68423b759 201033_01
hgs
parents:
diff changeset
   430
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   431
// CServerAuthFailOperation::RetrieveFirstTrustedSiteCertL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   432
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   433
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   434
void CServerAuthFailOperation::RetrieveFirstTrustedSiteCertL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   435
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   436
    TRACE( "CServerAuthFailOperation::RetrieveFirstTrustedSiteCertL" );
53
25dd1e8b2663 201035_01
hgs
parents: 48
diff changeset
   437
    ASSERT( iRetrievedCertBuffer == NULL );
48
6ed68423b759 201033_01
hgs
parents:
diff changeset
   438
    iRetrieveCertIndex = 0;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   439
6ed68423b759 201033_01
hgs
parents:
diff changeset
   440
    RetrieveNextTrustedSiteCertL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   441
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   442
6ed68423b759 201033_01
hgs
parents:
diff changeset
   443
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   444
// CServerAuthFailOperation::RetrieveNextTrustedSiteCertL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   445
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   446
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   447
void CServerAuthFailOperation::RetrieveNextTrustedSiteCertL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   448
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   449
    TRACE( "CServerAuthFailOperation::RetrieveNextTrustedSiteCertL" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   450
    if( iRetrieveCertIndex < iCertInfos.Count() )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   451
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   452
        CCTCertInfo& cert = *( iCertInfos[ iRetrieveCertIndex ] );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   453
6ed68423b759 201033_01
hgs
parents:
diff changeset
   454
        if( iRetrievedCertBuffer )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   455
            {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   456
            delete iRetrievedCertBuffer;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   457
            iRetrievedCertBuffer = NULL;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   458
            }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   459
        iRetrievedCertBuffer = HBufC8::NewL( cert.Size() );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   460
        TPtr8 buffer = iRetrievedCertBuffer->Des();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   461
6ed68423b759 201033_01
hgs
parents:
diff changeset
   462
        iTrustedSiteCertStore->Retrieve( cert, buffer, iStatus );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   463
        iMode = ERetrieveTrustedSiteCert;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   464
        SetActive();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   465
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   466
    else
6ed68423b759 201033_01
hgs
parents:
diff changeset
   467
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   468
        ShowUntrustedCertificateDialogL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   469
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   470
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   471
6ed68423b759 201033_01
hgs
parents:
diff changeset
   472
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   473
// CServerAuthFailOperation::IsRetrievedCertSameAsServerCertL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   474
// ---------------------------------------------------------------------------
6ed68423b759 201033_01
hgs
parents:
diff changeset
   475
//
6ed68423b759 201033_01
hgs
parents:
diff changeset
   476
TBool CServerAuthFailOperation::IsRetrievedCertSameAsServerCertL()
6ed68423b759 201033_01
hgs
parents:
diff changeset
   477
    {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   478
    TRACE( "CServerAuthFailOperation::IsRetrievedCertSameAsServerCertL, begin" );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   479
    TBool isSame = EFalse;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   480
    CX509Certificate* cert = CX509Certificate::NewLC( *iRetrievedCertBuffer );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   481
6ed68423b759 201033_01
hgs
parents:
diff changeset
   482
    if( !iServerCertFingerprint )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   483
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   484
        CX509Certificate* serverCert = CX509Certificate::NewLC( iEncodedServerCert );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   485
        iServerCertFingerprint = serverCert->Fingerprint().AllocL();
6ed68423b759 201033_01
hgs
parents:
diff changeset
   486
        CleanupStack::PopAndDestroy( serverCert );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   487
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   488
6ed68423b759 201033_01
hgs
parents:
diff changeset
   489
    if( cert->Fingerprint() == *iServerCertFingerprint )
6ed68423b759 201033_01
hgs
parents:
diff changeset
   490
        {
6ed68423b759 201033_01
hgs
parents:
diff changeset
   491
        isSame = ETrue;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   492
        }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   493
6ed68423b759 201033_01
hgs
parents:
diff changeset
   494
    CleanupStack::PopAndDestroy( cert );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   495
    TRACE( "CServerAuthFailOperation::IsRetrievedCertSameAsServerCertL, isSame=%d", isSame );
6ed68423b759 201033_01
hgs
parents:
diff changeset
   496
    return isSame;
6ed68423b759 201033_01
hgs
parents:
diff changeset
   497
    }
6ed68423b759 201033_01
hgs
parents:
diff changeset
   498