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