1*859212d1SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*859212d1SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*859212d1SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*859212d1SAndrew Rist * distributed with this work for additional information 6*859212d1SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*859212d1SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*859212d1SAndrew Rist * "License"); you may not use this file except in compliance 9*859212d1SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*859212d1SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*859212d1SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*859212d1SAndrew Rist * software distributed under the License is distributed on an 15*859212d1SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*859212d1SAndrew Rist * KIND, either express or implied. See the License for the 17*859212d1SAndrew Rist * specific language governing permissions and limitations 18*859212d1SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*859212d1SAndrew Rist *************************************************************/ 21*859212d1SAndrew Rist 22*859212d1SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir 25cdf0e10cSrcweir #include "com/sun/star/security/CertificateValidity.hpp" 26cdf0e10cSrcweir #include "com/sun/star/security/XCertificateExtension.hpp" 27cdf0e10cSrcweir #include "com/sun/star/security/XSanExtension.hpp" 28cdf0e10cSrcweir #include <com/sun/star/security/ExtAltNameType.hpp> 29cdf0e10cSrcweir #include "com/sun/star/task/XInteractionAbort.hpp" 30cdf0e10cSrcweir #include "com/sun/star/task/XInteractionApprove.hpp" 31cdf0e10cSrcweir #include "com/sun/star/task/XInteractionRequest.hpp" 32cdf0e10cSrcweir #include "com/sun/star/ucb/CertificateValidationRequest.hpp" 33cdf0e10cSrcweir #include <com/sun/star/uno/Reference.hxx> 34cdf0e10cSrcweir 35cdf0e10cSrcweir #include <com/sun/star/uno/Sequence.hxx> 36cdf0e10cSrcweir #include "vos/mutex.hxx" 37cdf0e10cSrcweir #include "tools/datetime.hxx" 38cdf0e10cSrcweir #include "svl/zforlist.hxx" 39cdf0e10cSrcweir #include "vcl/svapp.hxx" 40cdf0e10cSrcweir 41cdf0e10cSrcweir #include "ids.hrc" 42cdf0e10cSrcweir #include "getcontinuations.hxx" 43cdf0e10cSrcweir #include "sslwarndlg.hxx" 44cdf0e10cSrcweir #include "unknownauthdlg.hxx" 45cdf0e10cSrcweir 46cdf0e10cSrcweir #include "iahndl.hxx" 47cdf0e10cSrcweir 48cdf0e10cSrcweir #define DESCRIPTION_1 1 49cdf0e10cSrcweir #define DESCRIPTION_2 2 50cdf0e10cSrcweir #define TITLE 3 51cdf0e10cSrcweir 52cdf0e10cSrcweir #define OID_SUBJECT_ALTERNATIVE_NAME "2.5.29.17" 53cdf0e10cSrcweir 54cdf0e10cSrcweir 55cdf0e10cSrcweir using namespace com::sun::star; 56cdf0e10cSrcweir 57cdf0e10cSrcweir namespace { 58cdf0e10cSrcweir 59cdf0e10cSrcweir String 60cdf0e10cSrcweir getContentPart( const String& _rRawString ) 61cdf0e10cSrcweir { 62cdf0e10cSrcweir // search over some parts to find a string 63cdf0e10cSrcweir //static char* aIDs[] = { "CN", "OU", "O", "E", NULL }; 64cdf0e10cSrcweir static char const * aIDs[] = { "CN=", "OU=", "O=", "E=", NULL };// By CP 65cdf0e10cSrcweir String sPart; 66cdf0e10cSrcweir int i = 0; 67cdf0e10cSrcweir while ( aIDs[i] ) 68cdf0e10cSrcweir { 69cdf0e10cSrcweir String sPartId = String::CreateFromAscii( aIDs[i++] ); 70cdf0e10cSrcweir xub_StrLen nContStart = _rRawString.Search( sPartId ); 71cdf0e10cSrcweir if ( nContStart != STRING_NOTFOUND ) 72cdf0e10cSrcweir { 73cdf0e10cSrcweir nContStart = nContStart + sPartId.Len(); 74cdf0e10cSrcweir xub_StrLen nContEnd 75cdf0e10cSrcweir = _rRawString.Search( sal_Unicode( ',' ), nContStart ); 76cdf0e10cSrcweir sPart = String( _rRawString, nContStart, nContEnd - nContStart ); 77cdf0e10cSrcweir break; 78cdf0e10cSrcweir } 79cdf0e10cSrcweir } 80cdf0e10cSrcweir return sPart; 81cdf0e10cSrcweir } 82cdf0e10cSrcweir 83cdf0e10cSrcweir bool 84cdf0e10cSrcweir isDomainMatch( 85cdf0e10cSrcweir rtl::OUString hostName, uno::Sequence< ::rtl::OUString > certHostNames) 86cdf0e10cSrcweir { 87cdf0e10cSrcweir for ( int i = 0; i < certHostNames.getLength(); i++){ 88cdf0e10cSrcweir ::rtl::OUString element = certHostNames[i]; 89cdf0e10cSrcweir 90cdf0e10cSrcweir if (element.getLength() == 0) 91cdf0e10cSrcweir continue; 92cdf0e10cSrcweir 93cdf0e10cSrcweir if (hostName.equalsIgnoreAsciiCase( element )) 94cdf0e10cSrcweir return true; 95cdf0e10cSrcweir 96cdf0e10cSrcweir if ( 0 == element.indexOf( rtl::OUString::createFromAscii( "*" ) ) && 97cdf0e10cSrcweir hostName.getLength() >= element.getLength() ) 98cdf0e10cSrcweir { 99cdf0e10cSrcweir rtl::OUString cmpStr = element.copy( 1 ); 100cdf0e10cSrcweir if ( hostName.matchIgnoreAsciiCase( 101cdf0e10cSrcweir cmpStr, hostName.getLength() - cmpStr.getLength()) ) 102cdf0e10cSrcweir return true; 103cdf0e10cSrcweir } 104cdf0e10cSrcweir } 105cdf0e10cSrcweir 106cdf0e10cSrcweir return false; 107cdf0e10cSrcweir } 108cdf0e10cSrcweir 109cdf0e10cSrcweir rtl::OUString 110cdf0e10cSrcweir getLocalizedDatTimeStr( 111cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory, 112cdf0e10cSrcweir util::DateTime const & rDateTime ) 113cdf0e10cSrcweir { 114cdf0e10cSrcweir rtl::OUString aDateTimeStr; 115cdf0e10cSrcweir Date aDate; 116cdf0e10cSrcweir Time aTime; 117cdf0e10cSrcweir 118cdf0e10cSrcweir aDate = Date( rDateTime.Day, rDateTime.Month, rDateTime.Year ); 119cdf0e10cSrcweir aTime = Time( rDateTime.Hours, rDateTime.Minutes, rDateTime.Seconds ); 120cdf0e10cSrcweir 121cdf0e10cSrcweir LanguageType eUILang = Application::GetSettings().GetUILanguage(); 122cdf0e10cSrcweir SvNumberFormatter *pNumberFormatter 123cdf0e10cSrcweir = new SvNumberFormatter( xServiceFactory, eUILang ); 124cdf0e10cSrcweir String aTmpStr; 125cdf0e10cSrcweir Color* pColor = NULL; 126cdf0e10cSrcweir Date* pNullDate = pNumberFormatter->GetNullDate(); 127cdf0e10cSrcweir sal_uInt32 nFormat 128cdf0e10cSrcweir = pNumberFormatter->GetStandardFormat( NUMBERFORMAT_DATE, eUILang ); 129cdf0e10cSrcweir 130cdf0e10cSrcweir pNumberFormatter->GetOutputString( 131cdf0e10cSrcweir aDate - *pNullDate, nFormat, aTmpStr, &pColor ); 132cdf0e10cSrcweir aDateTimeStr = aTmpStr + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" ")); 133cdf0e10cSrcweir 134cdf0e10cSrcweir nFormat = pNumberFormatter->GetStandardFormat( NUMBERFORMAT_TIME, eUILang ); 135cdf0e10cSrcweir pNumberFormatter->GetOutputString( 136cdf0e10cSrcweir aTime.GetTimeInDays(), nFormat, aTmpStr, &pColor ); 137cdf0e10cSrcweir aDateTimeStr += aTmpStr; 138cdf0e10cSrcweir 139cdf0e10cSrcweir return aDateTimeStr; 140cdf0e10cSrcweir } 141cdf0e10cSrcweir 142cdf0e10cSrcweir sal_Bool 143cdf0e10cSrcweir executeUnknownAuthDialog( 144cdf0e10cSrcweir Window * pParent, 145cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory, 146cdf0e10cSrcweir const uno::Reference< security::XCertificate >& rXCert) 147cdf0e10cSrcweir SAL_THROW((uno::RuntimeException)) 148cdf0e10cSrcweir { 149cdf0e10cSrcweir try 150cdf0e10cSrcweir { 151cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex()); 152cdf0e10cSrcweir 153cdf0e10cSrcweir std::auto_ptr< ResMgr > xManager( 154cdf0e10cSrcweir ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui))); 155cdf0e10cSrcweir std::auto_ptr< UnknownAuthDialog > xDialog( 156cdf0e10cSrcweir new UnknownAuthDialog( pParent, 157cdf0e10cSrcweir rXCert, 158cdf0e10cSrcweir xServiceFactory, 159cdf0e10cSrcweir xManager.get())); 160cdf0e10cSrcweir 161cdf0e10cSrcweir // Get correct ressource string 162cdf0e10cSrcweir rtl::OUString aMessage; 163cdf0e10cSrcweir 164cdf0e10cSrcweir std::vector< rtl::OUString > aArguments; 165cdf0e10cSrcweir aArguments.push_back( getContentPart( rXCert->getSubjectName()) ); 166cdf0e10cSrcweir 167cdf0e10cSrcweir if (xManager.get()) 168cdf0e10cSrcweir { 169cdf0e10cSrcweir ResId aResId(RID_UUI_ERRHDL, *xManager.get()); 170cdf0e10cSrcweir if (ErrorResource(aResId).getString( 171cdf0e10cSrcweir ERRCODE_UUI_UNKNOWNAUTH_UNTRUSTED, &aMessage)) 172cdf0e10cSrcweir { 173cdf0e10cSrcweir aMessage = UUIInteractionHelper::replaceMessageWithArguments( 174cdf0e10cSrcweir aMessage, aArguments ); 175cdf0e10cSrcweir xDialog->setDescriptionText( aMessage ); 176cdf0e10cSrcweir } 177cdf0e10cSrcweir } 178cdf0e10cSrcweir 179cdf0e10cSrcweir return static_cast<sal_Bool> (xDialog->Execute()); 180cdf0e10cSrcweir } 181cdf0e10cSrcweir catch (std::bad_alloc const &) 182cdf0e10cSrcweir { 183cdf0e10cSrcweir throw uno::RuntimeException( 184cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")), 185cdf0e10cSrcweir uno::Reference< uno::XInterface >()); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir } 188cdf0e10cSrcweir 189cdf0e10cSrcweir sal_Bool 190cdf0e10cSrcweir executeSSLWarnDialog( 191cdf0e10cSrcweir Window * pParent, 192cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory, 193cdf0e10cSrcweir const uno::Reference< security::XCertificate >& rXCert, 194cdf0e10cSrcweir sal_Int32 const & failure, 195cdf0e10cSrcweir const rtl::OUString & hostName ) 196cdf0e10cSrcweir SAL_THROW((uno::RuntimeException)) 197cdf0e10cSrcweir { 198cdf0e10cSrcweir try 199cdf0e10cSrcweir { 200cdf0e10cSrcweir vos::OGuard aGuard(Application::GetSolarMutex()); 201cdf0e10cSrcweir 202cdf0e10cSrcweir std::auto_ptr< ResMgr > xManager( 203cdf0e10cSrcweir ResMgr::CreateResMgr(CREATEVERSIONRESMGR_NAME(uui))); 204cdf0e10cSrcweir std::auto_ptr< SSLWarnDialog > xDialog( 205cdf0e10cSrcweir new SSLWarnDialog( pParent, 206cdf0e10cSrcweir rXCert, 207cdf0e10cSrcweir xServiceFactory, 208cdf0e10cSrcweir xManager.get())); 209cdf0e10cSrcweir 210cdf0e10cSrcweir // Get correct ressource string 211cdf0e10cSrcweir rtl::OUString aMessage_1; 212cdf0e10cSrcweir std::vector< rtl::OUString > aArguments_1; 213cdf0e10cSrcweir 214cdf0e10cSrcweir switch( failure ) 215cdf0e10cSrcweir { 216cdf0e10cSrcweir case SSLWARN_TYPE_DOMAINMISMATCH: 217cdf0e10cSrcweir aArguments_1.push_back( hostName ); 218cdf0e10cSrcweir aArguments_1.push_back( 219cdf0e10cSrcweir getContentPart( rXCert->getSubjectName()) ); 220cdf0e10cSrcweir aArguments_1.push_back( hostName ); 221cdf0e10cSrcweir break; 222cdf0e10cSrcweir case SSLWARN_TYPE_EXPIRED: 223cdf0e10cSrcweir aArguments_1.push_back( 224cdf0e10cSrcweir getContentPart( rXCert->getSubjectName()) ); 225cdf0e10cSrcweir aArguments_1.push_back( 226cdf0e10cSrcweir getLocalizedDatTimeStr( xServiceFactory, 227cdf0e10cSrcweir rXCert->getNotValidAfter() ) ); 228cdf0e10cSrcweir aArguments_1.push_back( 229cdf0e10cSrcweir getLocalizedDatTimeStr( xServiceFactory, 230cdf0e10cSrcweir rXCert->getNotValidAfter() ) ); 231cdf0e10cSrcweir break; 232cdf0e10cSrcweir case SSLWARN_TYPE_INVALID: 233cdf0e10cSrcweir break; 234cdf0e10cSrcweir } 235cdf0e10cSrcweir 236cdf0e10cSrcweir if (xManager.get()) 237cdf0e10cSrcweir { 238cdf0e10cSrcweir ResId aResId(RID_UUI_ERRHDL, *xManager.get()); 239cdf0e10cSrcweir if (ErrorResource(aResId).getString( 240cdf0e10cSrcweir ERRCODE_AREA_UUI_UNKNOWNAUTH + failure + DESCRIPTION_1, 241cdf0e10cSrcweir &aMessage_1)) 242cdf0e10cSrcweir { 243cdf0e10cSrcweir aMessage_1 = UUIInteractionHelper::replaceMessageWithArguments( 244cdf0e10cSrcweir aMessage_1, aArguments_1 ); 245cdf0e10cSrcweir xDialog->setDescription1Text( aMessage_1 ); 246cdf0e10cSrcweir } 247cdf0e10cSrcweir 248cdf0e10cSrcweir rtl::OUString aTitle; 249cdf0e10cSrcweir ErrorResource(aResId).getString( 250cdf0e10cSrcweir ERRCODE_AREA_UUI_UNKNOWNAUTH + failure + TITLE, &aTitle); 251cdf0e10cSrcweir xDialog->SetText( aTitle ); 252cdf0e10cSrcweir } 253cdf0e10cSrcweir 254cdf0e10cSrcweir return static_cast<sal_Bool> (xDialog->Execute()); 255cdf0e10cSrcweir } 256cdf0e10cSrcweir catch (std::bad_alloc const &) 257cdf0e10cSrcweir { 258cdf0e10cSrcweir throw uno::RuntimeException( 259cdf0e10cSrcweir rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("out of memory")), 260cdf0e10cSrcweir uno::Reference< uno::XInterface >()); 261cdf0e10cSrcweir } 262cdf0e10cSrcweir } 263cdf0e10cSrcweir 264cdf0e10cSrcweir void 265cdf0e10cSrcweir handleCertificateValidationRequest_( 266cdf0e10cSrcweir Window * pParent, 267cdf0e10cSrcweir uno::Reference< lang::XMultiServiceFactory > const & xServiceFactory, 268cdf0e10cSrcweir ucb::CertificateValidationRequest const & rRequest, 269cdf0e10cSrcweir uno::Sequence< uno::Reference< task::XInteractionContinuation > > const & 270cdf0e10cSrcweir rContinuations) 271cdf0e10cSrcweir SAL_THROW((uno::RuntimeException)) 272cdf0e10cSrcweir { 273cdf0e10cSrcweir uno::Reference< task::XInteractionApprove > xApprove; 274cdf0e10cSrcweir uno::Reference< task::XInteractionAbort > xAbort; 275cdf0e10cSrcweir getContinuations(rContinuations, &xApprove, &xAbort); 276cdf0e10cSrcweir 277cdf0e10cSrcweir sal_Int32 failures = rRequest.CertificateValidity; 278cdf0e10cSrcweir sal_Bool trustCert = sal_True; 279cdf0e10cSrcweir 280cdf0e10cSrcweir if ( ((failures & security::CertificateValidity::UNTRUSTED) 281cdf0e10cSrcweir == security::CertificateValidity::UNTRUSTED ) || 282cdf0e10cSrcweir ((failures & security::CertificateValidity::ISSUER_UNTRUSTED) 283cdf0e10cSrcweir == security::CertificateValidity::ISSUER_UNTRUSTED) || 284cdf0e10cSrcweir ((failures & security::CertificateValidity::ROOT_UNTRUSTED) 285cdf0e10cSrcweir == security::CertificateValidity::ROOT_UNTRUSTED) ) 286cdf0e10cSrcweir { 287cdf0e10cSrcweir trustCert = executeUnknownAuthDialog( pParent, 288cdf0e10cSrcweir xServiceFactory, 289cdf0e10cSrcweir rRequest.Certificate ); 290cdf0e10cSrcweir } 291cdf0e10cSrcweir 292cdf0e10cSrcweir uno::Sequence< uno::Reference< security::XCertificateExtension > > extensions = rRequest.Certificate->getExtensions(); 293cdf0e10cSrcweir uno::Sequence< security::CertAltNameEntry > altNames; 294cdf0e10cSrcweir for (sal_Int32 i = 0 ; i < extensions.getLength(); i++){ 295cdf0e10cSrcweir uno::Reference< security::XCertificateExtension >element = extensions[i]; 296cdf0e10cSrcweir 297cdf0e10cSrcweir rtl::OString aId ( (const sal_Char *)element->getExtensionId().getArray(), element->getExtensionId().getLength()); 298cdf0e10cSrcweir if (aId.equals(OID_SUBJECT_ALTERNATIVE_NAME)) 299cdf0e10cSrcweir { 300cdf0e10cSrcweir uno::Reference< security::XSanExtension > sanExtension ( element, uno::UNO_QUERY ); 301cdf0e10cSrcweir altNames = sanExtension->getAlternativeNames(); 302cdf0e10cSrcweir break; 303cdf0e10cSrcweir } 304cdf0e10cSrcweir } 305cdf0e10cSrcweir 306cdf0e10cSrcweir ::rtl::OUString certHostName = getContentPart( rRequest.Certificate->getSubjectName() ); 307cdf0e10cSrcweir uno::Sequence< ::rtl::OUString > certHostNames(altNames.getLength() + 1); 308cdf0e10cSrcweir 309cdf0e10cSrcweir certHostNames[0] = certHostName; 310cdf0e10cSrcweir 311cdf0e10cSrcweir for(int n = 1; n < altNames.getLength(); n++){ 312cdf0e10cSrcweir if (altNames[n].Type == security::ExtAltNameType_DNS_NAME){ 313cdf0e10cSrcweir altNames[n].Value >>= certHostNames[n]; 314cdf0e10cSrcweir } 315cdf0e10cSrcweir } 316cdf0e10cSrcweir 317cdf0e10cSrcweir if ( (!isDomainMatch( 318cdf0e10cSrcweir rRequest.HostName, 319cdf0e10cSrcweir certHostNames )) && 320cdf0e10cSrcweir trustCert ) 321cdf0e10cSrcweir { 322cdf0e10cSrcweir trustCert = executeSSLWarnDialog( pParent, 323cdf0e10cSrcweir xServiceFactory, 324cdf0e10cSrcweir rRequest.Certificate, 325cdf0e10cSrcweir SSLWARN_TYPE_DOMAINMISMATCH, 326cdf0e10cSrcweir rRequest.HostName ); 327cdf0e10cSrcweir } 328cdf0e10cSrcweir 329cdf0e10cSrcweir if ( (((failures & security::CertificateValidity::TIME_INVALID) 330cdf0e10cSrcweir == security::CertificateValidity::TIME_INVALID) || 331cdf0e10cSrcweir ((failures & security::CertificateValidity::NOT_TIME_NESTED) 332cdf0e10cSrcweir == security::CertificateValidity::NOT_TIME_NESTED)) && 333cdf0e10cSrcweir trustCert ) 334cdf0e10cSrcweir { 335cdf0e10cSrcweir trustCert = executeSSLWarnDialog( pParent, 336cdf0e10cSrcweir xServiceFactory, 337cdf0e10cSrcweir rRequest.Certificate, 338cdf0e10cSrcweir SSLWARN_TYPE_EXPIRED, 339cdf0e10cSrcweir rRequest.HostName ); 340cdf0e10cSrcweir } 341cdf0e10cSrcweir 342cdf0e10cSrcweir if ( (((failures & security::CertificateValidity::REVOKED) 343cdf0e10cSrcweir == security::CertificateValidity::REVOKED) || 344cdf0e10cSrcweir ((failures & security::CertificateValidity::SIGNATURE_INVALID) 345cdf0e10cSrcweir == security::CertificateValidity::SIGNATURE_INVALID) || 346cdf0e10cSrcweir ((failures & security::CertificateValidity::EXTENSION_INVALID) 347cdf0e10cSrcweir == security::CertificateValidity::EXTENSION_INVALID) || 348cdf0e10cSrcweir ((failures & security::CertificateValidity::INVALID) 349cdf0e10cSrcweir == security::CertificateValidity::INVALID)) && 350cdf0e10cSrcweir trustCert ) 351cdf0e10cSrcweir { 352cdf0e10cSrcweir trustCert = executeSSLWarnDialog( pParent, 353cdf0e10cSrcweir xServiceFactory, 354cdf0e10cSrcweir rRequest.Certificate, 355cdf0e10cSrcweir SSLWARN_TYPE_INVALID, 356cdf0e10cSrcweir rRequest.HostName ); 357cdf0e10cSrcweir } 358cdf0e10cSrcweir 359cdf0e10cSrcweir if ( trustCert ) 360cdf0e10cSrcweir { 361cdf0e10cSrcweir if (xApprove.is()) 362cdf0e10cSrcweir xApprove->select(); 363cdf0e10cSrcweir } 364cdf0e10cSrcweir else 365cdf0e10cSrcweir { 366cdf0e10cSrcweir if (xAbort.is()) 367cdf0e10cSrcweir xAbort->select(); 368cdf0e10cSrcweir } 369cdf0e10cSrcweir } 370cdf0e10cSrcweir 371cdf0e10cSrcweir } // namespace 372cdf0e10cSrcweir 373cdf0e10cSrcweir bool 374cdf0e10cSrcweir UUIInteractionHelper::handleCertificateValidationRequest( 375cdf0e10cSrcweir uno::Reference< task::XInteractionRequest > const & rRequest) 376cdf0e10cSrcweir SAL_THROW((uno::RuntimeException)) 377cdf0e10cSrcweir { 378cdf0e10cSrcweir uno::Any aAnyRequest(rRequest->getRequest()); 379cdf0e10cSrcweir 380cdf0e10cSrcweir ucb::CertificateValidationRequest aCertificateValidationRequest; 381cdf0e10cSrcweir if (aAnyRequest >>= aCertificateValidationRequest) 382cdf0e10cSrcweir { 383cdf0e10cSrcweir handleCertificateValidationRequest_(getParentProperty(), 384cdf0e10cSrcweir m_xServiceFactory, 385cdf0e10cSrcweir aCertificateValidationRequest, 386cdf0e10cSrcweir rRequest->getContinuations()); 387cdf0e10cSrcweir return true; 388cdf0e10cSrcweir } 389cdf0e10cSrcweir 390cdf0e10cSrcweir return false; 391cdf0e10cSrcweir } 392cdf0e10cSrcweir 393