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 // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_xmlsecurity.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include "helper.hxx" 32*cdf0e10cSrcweir #include "osl/diagnose.h" 33*cdf0e10cSrcweir #include "rtl/ustring.h" 34*cdf0e10cSrcweir /*#include "libxml/xmlstring.h" 35*cdf0e10cSrcweir */ 36*cdf0e10cSrcweir 37*cdf0e10cSrcweir /*- 38*cdf0e10cSrcweir * Helper : create a input stream from a file 39*cdf0e10cSrcweir */ 40*cdf0e10cSrcweir Reference< XInputStream > createStreamFromFile( const OUString sFile ) 41*cdf0e10cSrcweir { 42*cdf0e10cSrcweir const sal_Char* pcFile ; 43*cdf0e10cSrcweir OString aString ; 44*cdf0e10cSrcweir 45*cdf0e10cSrcweir aString = OUStringToOString( sFile , RTL_TEXTENCODING_ASCII_US ) ; 46*cdf0e10cSrcweir pcFile = aString.getStr() ; 47*cdf0e10cSrcweir if( pcFile != NULL ) { 48*cdf0e10cSrcweir FILE *f = fopen( pcFile , "rb" ); 49*cdf0e10cSrcweir Reference< XInputStream > r; 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir if( f ) { 52*cdf0e10cSrcweir fseek( f , 0 , SEEK_END ); 53*cdf0e10cSrcweir int nLength = ftell( f ); 54*cdf0e10cSrcweir fseek( f , 0 , SEEK_SET ); 55*cdf0e10cSrcweir 56*cdf0e10cSrcweir Sequence<sal_Int8> seqIn(nLength); 57*cdf0e10cSrcweir fread( seqIn.getArray() , nLength , 1 , f ); 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir r = Reference< XInputStream > ( new OInputStream( seqIn ) ); 60*cdf0e10cSrcweir fclose( f ); 61*cdf0e10cSrcweir } 62*cdf0e10cSrcweir return r; 63*cdf0e10cSrcweir } else { 64*cdf0e10cSrcweir return NULL ; 65*cdf0e10cSrcweir } 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir return NULL ; 68*cdf0e10cSrcweir } 69*cdf0e10cSrcweir 70*cdf0e10cSrcweir /*- 71*cdf0e10cSrcweir * Helper : set a output stream to a file 72*cdf0e10cSrcweir */ 73*cdf0e10cSrcweir Reference< XOutputStream > createStreamToFile( const OUString sFile ) 74*cdf0e10cSrcweir { 75*cdf0e10cSrcweir const sal_Char* pcFile ; 76*cdf0e10cSrcweir OString aString ; 77*cdf0e10cSrcweir 78*cdf0e10cSrcweir aString = OUStringToOString( sFile , RTL_TEXTENCODING_ASCII_US ) ; 79*cdf0e10cSrcweir pcFile = aString.getStr() ; 80*cdf0e10cSrcweir if( pcFile != NULL ) 81*cdf0e10cSrcweir return Reference< XOutputStream >( new OOutputStream( pcFile ) ) ; 82*cdf0e10cSrcweir else 83*cdf0e10cSrcweir return NULL ; 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir /*- 87*cdf0e10cSrcweir * Helper : get service manager and context 88*cdf0e10cSrcweir */ 89*cdf0e10cSrcweir Reference< XMultiComponentFactory > serviceManager( Reference< XComponentContext >& xContext , OUString sUnoUrl , OUString sRdbUrl ) throw( RuntimeException , Exception ) 90*cdf0e10cSrcweir { 91*cdf0e10cSrcweir Reference< XMultiComponentFactory > xLocalServiceManager = NULL ; 92*cdf0e10cSrcweir Reference< XComponentContext > xLocalComponentContext = NULL ; 93*cdf0e10cSrcweir Reference< XMultiComponentFactory > xUsedServiceManager = NULL ; 94*cdf0e10cSrcweir Reference< XComponentContext > xUsedComponentContext = NULL ; 95*cdf0e10cSrcweir 96*cdf0e10cSrcweir OSL_ENSURE( !sUnoUrl.equalsAscii( "" ) , 97*cdf0e10cSrcweir "serviceManager - " 98*cdf0e10cSrcweir "No uno URI specified" ) ; 99*cdf0e10cSrcweir 100*cdf0e10cSrcweir OSL_ENSURE( !sRdbUrl.equalsAscii( "" ) , 101*cdf0e10cSrcweir "serviceManager - " 102*cdf0e10cSrcweir "No rdb URI specified" ) ; 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir if( sUnoUrl.equalsAscii( "local" ) ) { 105*cdf0e10cSrcweir Reference< XSimpleRegistry > xSimpleRegistry = createSimpleRegistry(); 106*cdf0e10cSrcweir OSL_ENSURE( xSimpleRegistry.is() , 107*cdf0e10cSrcweir "serviceManager - " 108*cdf0e10cSrcweir "Cannot create simple registry" ) ; 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir //xSimpleRegistry->open(OUString::createFromAscii("xmlsecurity.rdb"), sal_False, sal_False); 111*cdf0e10cSrcweir xSimpleRegistry->open(sRdbUrl, sal_True, sal_False); 112*cdf0e10cSrcweir OSL_ENSURE( xSimpleRegistry->isValid() , 113*cdf0e10cSrcweir "serviceManager - " 114*cdf0e10cSrcweir "Cannot open xml security registry rdb" ) ; 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir xLocalComponentContext = bootstrap_InitialComponentContext( xSimpleRegistry ) ; 117*cdf0e10cSrcweir OSL_ENSURE( xLocalComponentContext.is() , 118*cdf0e10cSrcweir "serviceManager - " 119*cdf0e10cSrcweir "Cannot create intial component context" ) ; 120*cdf0e10cSrcweir 121*cdf0e10cSrcweir xLocalServiceManager = xLocalComponentContext->getServiceManager() ; 122*cdf0e10cSrcweir OSL_ENSURE( xLocalServiceManager.is() , 123*cdf0e10cSrcweir "serviceManager - " 124*cdf0e10cSrcweir "Cannot create intial service manager" ) ; 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir /*- 127*cdf0e10cSrcweir * Because of the exception rasied from 128*cdf0e10cSrcweir * ucbhelper/source/provider/provconf.cxx, lin 323 129*cdf0e10cSrcweir * I do not use the content broker at present 130*cdf0e10cSrcweir ******************************************************************** 131*cdf0e10cSrcweir //init ucb 132*cdf0e10cSrcweir if( ::ucb::ContentBroker::get() == NULL ) { 133*cdf0e10cSrcweir Reference< lang::XMultiServiceFactory > xSvmg( xLocalServiceManager , UNO_QUERY ) ; 134*cdf0e10cSrcweir OSL_ENSURE( xLocalServiceManager.is() , 135*cdf0e10cSrcweir "serviceManager - " 136*cdf0e10cSrcweir "Cannot get multi-service factory" ) ; 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir Sequence< Any > args( 2 ) ; 139*cdf0e10cSrcweir args[ 0 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL ) ; 140*cdf0e10cSrcweir args[ 1 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE ) ; 141*cdf0e10cSrcweir if( ! ::ucb::ContentBroker::initialize( xSvmg , args ) ) { 142*cdf0e10cSrcweir throw RuntimeException( OUString::createFromAscii( "Cannot inlitialize ContentBroker" ) , Reference< XInterface >() , Any() ) ; 143*cdf0e10cSrcweir } 144*cdf0e10cSrcweir } 145*cdf0e10cSrcweir ********************************************************************/ 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir xUsedComponentContext = xLocalComponentContext ; 148*cdf0e10cSrcweir xUsedServiceManager = xLocalServiceManager ; 149*cdf0e10cSrcweir } else { 150*cdf0e10cSrcweir Reference< XComponentContext > xLocalComponentContext = defaultBootstrap_InitialComponentContext() ; 151*cdf0e10cSrcweir OSL_ENSURE( xLocalComponentContext.is() , 152*cdf0e10cSrcweir "serviceManager - " 153*cdf0e10cSrcweir "Cannot create intial component context" ) ; 154*cdf0e10cSrcweir 155*cdf0e10cSrcweir Reference< XMultiComponentFactory > xLocalServiceManager = xLocalComponentContext->getServiceManager(); 156*cdf0e10cSrcweir OSL_ENSURE( xLocalServiceManager.is() , 157*cdf0e10cSrcweir "serviceManager - " 158*cdf0e10cSrcweir "Cannot create intial service manager" ) ; 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir Reference< XInterface > urlResolver = 161*cdf0e10cSrcweir xLocalServiceManager->createInstanceWithContext( OUString::createFromAscii("com.sun.star.bridge.UnoUrlResolver") , xLocalComponentContext ) ; 162*cdf0e10cSrcweir OSL_ENSURE( urlResolver.is() , 163*cdf0e10cSrcweir "serviceManager - " 164*cdf0e10cSrcweir "Cannot get service instance of \"bridge.UnoUrlResolver\"" ) ; 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir Reference< XUnoUrlResolver > xUnoUrlResolver( urlResolver , UNO_QUERY ) ; 167*cdf0e10cSrcweir OSL_ENSURE( xUnoUrlResolver.is() , 168*cdf0e10cSrcweir "serviceManager - " 169*cdf0e10cSrcweir "Cannot get interface of \"XUnoUrlResolver\" from service \"bridge.UnoUrlResolver\"" ) ; 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir Reference< XInterface > initialObject = xUnoUrlResolver->resolve( sUnoUrl ) ; 172*cdf0e10cSrcweir OSL_ENSURE( initialObject.is() , 173*cdf0e10cSrcweir "serviceManager - " 174*cdf0e10cSrcweir "Cannot resolve uno url" ) ; 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir /*- 177*cdf0e10cSrcweir * Method 1: with Naming Service 178*cdf0e10cSrcweir ******************************************************************** 179*cdf0e10cSrcweir Reference< XNamingService > xNamingService( initialObject , UNO_QUERY ) ; 180*cdf0e10cSrcweir OSL_ENSURE( xNamingService.is() , 181*cdf0e10cSrcweir "serviceManager - " 182*cdf0e10cSrcweir "Cannot get interface of \"XNamingService\" from URL resolver" ) ; 183*cdf0e10cSrcweir 184*cdf0e10cSrcweir Reference< XInterface > serviceManager = 185*cdf0e10cSrcweir xNamingService->getRegisteredObject( OUString::createFromAscii( "StarOffice.ServiceManager" ) ) ; 186*cdf0e10cSrcweir OSL_ENSURE( serviceManager.is() , 187*cdf0e10cSrcweir "serviceManager - " 188*cdf0e10cSrcweir "Cannot get service instance of \"StarOffice.ServiceManager\"" ) ; 189*cdf0e10cSrcweir 190*cdf0e10cSrcweir xUsedServiceManager = Reference< XMultiComponentFactory >( serviceManager , UNO_QUERY ); 191*cdf0e10cSrcweir OSL_ENSURE( xUsedServiceManager.is() , 192*cdf0e10cSrcweir "serviceManager - " 193*cdf0e10cSrcweir "Cannot get interface of \"XMultiComponentFactory\" from service \"StarOffice.ServiceManager\"" ) ; 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir Reference< XPropertySet > xPropSet( xUsedServiceManager , UNO_QUERY ) ; 196*cdf0e10cSrcweir OSL_ENSURE( xPropSet.is() , 197*cdf0e10cSrcweir "serviceManager - " 198*cdf0e10cSrcweir "Cannot get interface of \"XPropertySet\" from service \"StarOffice.ServiceManager\"" ) ; 199*cdf0e10cSrcweir 200*cdf0e10cSrcweir xPropSet->getPropertyValue( OUString::createFromAscii( "DefaultContext" ) ) >>= xUsedComponentContext ; 201*cdf0e10cSrcweir OSL_ENSURE( xUsedComponentContext.is() , 202*cdf0e10cSrcweir "serviceManager - " 203*cdf0e10cSrcweir "Cannot create remote component context" ) ; 204*cdf0e10cSrcweir 205*cdf0e10cSrcweir ********************************************************************/ 206*cdf0e10cSrcweir 207*cdf0e10cSrcweir /*- 208*cdf0e10cSrcweir * Method 2: with Componnent context 209*cdf0e10cSrcweir ******************************************************************** 210*cdf0e10cSrcweir Reference< XPropertySet > xPropSet( initialObject , UNO_QUERY ) ; 211*cdf0e10cSrcweir OSL_ENSURE( xPropSet.is() , 212*cdf0e10cSrcweir "serviceManager - " 213*cdf0e10cSrcweir "Cannot get interface of \"XPropertySet\" from URL resolver" ) ; 214*cdf0e10cSrcweir 215*cdf0e10cSrcweir xPropSet->getPropertyValue( OUString::createFromAscii( "DefaultContext" ) ) >>= xUsedComponentContext ; 216*cdf0e10cSrcweir OSL_ENSURE( xUsedComponentContext.is() , 217*cdf0e10cSrcweir "serviceManager - " 218*cdf0e10cSrcweir "Cannot create remote component context" ) ; 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir xUsedServiceManager = xUsedComponentContext->getServiceManager(); 221*cdf0e10cSrcweir OSL_ENSURE( xUsedServiceManager.is() , 222*cdf0e10cSrcweir "serviceManager - " 223*cdf0e10cSrcweir "Cannot create remote service manager" ) ; 224*cdf0e10cSrcweir ********************************************************************/ 225*cdf0e10cSrcweir 226*cdf0e10cSrcweir /*- 227*cdf0e10cSrcweir * Method 3: with Service Manager 228*cdf0e10cSrcweir ********************************************************************/ 229*cdf0e10cSrcweir xUsedServiceManager = Reference< XMultiComponentFactory >( initialObject , UNO_QUERY ); 230*cdf0e10cSrcweir OSL_ENSURE( xUsedServiceManager.is() , 231*cdf0e10cSrcweir "serviceManager - " 232*cdf0e10cSrcweir "Cannot create remote service manager" ) ; 233*cdf0e10cSrcweir 234*cdf0e10cSrcweir Reference< XPropertySet > xPropSet( xUsedServiceManager , UNO_QUERY ) ; 235*cdf0e10cSrcweir OSL_ENSURE( xPropSet.is() , 236*cdf0e10cSrcweir "serviceManager - " 237*cdf0e10cSrcweir "Cannot get interface of \"XPropertySet\" from service \"StarOffice.ServiceManager\"" ) ; 238*cdf0e10cSrcweir 239*cdf0e10cSrcweir xPropSet->getPropertyValue( OUString::createFromAscii( "DefaultContext" ) ) >>= xUsedComponentContext ; 240*cdf0e10cSrcweir OSL_ENSURE( xUsedComponentContext.is() , 241*cdf0e10cSrcweir "serviceManager - " 242*cdf0e10cSrcweir "Cannot create remote component context" ) ; 243*cdf0e10cSrcweir /********************************************************************/ 244*cdf0e10cSrcweir } 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir xContext = xUsedComponentContext ; 247*cdf0e10cSrcweir return xUsedServiceManager ; 248*cdf0e10cSrcweir } 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir char* PriPK11PasswordFunc( 251*cdf0e10cSrcweir PK11SlotInfo *slot , 252*cdf0e10cSrcweir PRBool retry , 253*cdf0e10cSrcweir void* arg 254*cdf0e10cSrcweir ) { 255*cdf0e10cSrcweir char* passwd = NULL ; 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir if( retry != PR_TRUE ) { 258*cdf0e10cSrcweir passwd = ( char* )PORT_Alloc( 20 ) ; 259*cdf0e10cSrcweir printf( "Input Password:\n" ) ; 260*cdf0e10cSrcweir scanf( "%s" , passwd ) ; 261*cdf0e10cSrcweir printf( "The passwod is [%s]\n" , passwd ) ; 262*cdf0e10cSrcweir } 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir return passwd ; 265*cdf0e10cSrcweir } 266*cdf0e10cSrcweir 267