| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| // MARKER(update_precomp.py): autogen include statement, do not remove |
| #include "precompiled_xmlsecurity.hxx" |
| |
| #include "helper.hxx" |
| #include "osl/diagnose.h" |
| #include "rtl/ustring.h" |
| /*#include "libxml/xmlstring.h" |
| */ |
| |
| /*- |
| * Helper : create a input stream from a file |
| */ |
| Reference< XInputStream > createStreamFromFile( const OUString sFile ) |
| { |
| const sal_Char* pcFile ; |
| OString aString ; |
| |
| aString = OUStringToOString( sFile , RTL_TEXTENCODING_ASCII_US ) ; |
| pcFile = aString.getStr() ; |
| if( pcFile != NULL ) { |
| FILE *f = fopen( pcFile , "rb" ); |
| Reference< XInputStream > r; |
| |
| if( f ) { |
| fseek( f , 0 , SEEK_END ); |
| int nLength = ftell( f ); |
| fseek( f , 0 , SEEK_SET ); |
| |
| Sequence<sal_Int8> seqIn(nLength); |
| fread( seqIn.getArray() , nLength , 1 , f ); |
| |
| r = Reference< XInputStream > ( new OInputStream( seqIn ) ); |
| fclose( f ); |
| } |
| return r; |
| } else { |
| return NULL ; |
| } |
| |
| return NULL ; |
| } |
| |
| /*- |
| * Helper : set a output stream to a file |
| */ |
| Reference< XOutputStream > createStreamToFile( const OUString sFile ) |
| { |
| const sal_Char* pcFile ; |
| OString aString ; |
| |
| aString = OUStringToOString( sFile , RTL_TEXTENCODING_ASCII_US ) ; |
| pcFile = aString.getStr() ; |
| if( pcFile != NULL ) |
| return Reference< XOutputStream >( new OOutputStream( pcFile ) ) ; |
| else |
| return NULL ; |
| } |
| |
| /*- |
| * Helper : get service manager and context |
| */ |
| Reference< XMultiComponentFactory > serviceManager( Reference< XComponentContext >& xContext , OUString sUnoUrl , OUString sRdbUrl ) throw( RuntimeException , Exception ) |
| { |
| Reference< XMultiComponentFactory > xLocalServiceManager = NULL ; |
| Reference< XComponentContext > xLocalComponentContext = NULL ; |
| Reference< XMultiComponentFactory > xUsedServiceManager = NULL ; |
| Reference< XComponentContext > xUsedComponentContext = NULL ; |
| |
| OSL_ENSURE( !sUnoUrl.equalsAscii( "" ) , |
| "serviceManager - " |
| "No uno URI specified" ) ; |
| |
| OSL_ENSURE( !sRdbUrl.equalsAscii( "" ) , |
| "serviceManager - " |
| "No rdb URI specified" ) ; |
| |
| if( sUnoUrl.equalsAscii( "local" ) ) { |
| Reference< XSimpleRegistry > xSimpleRegistry = createSimpleRegistry(); |
| OSL_ENSURE( xSimpleRegistry.is() , |
| "serviceManager - " |
| "Cannot create simple registry" ) ; |
| |
| //xSimpleRegistry->open(OUString::createFromAscii("xmlsecurity.rdb"), sal_False, sal_False); |
| xSimpleRegistry->open(sRdbUrl, sal_True, sal_False); |
| OSL_ENSURE( xSimpleRegistry->isValid() , |
| "serviceManager - " |
| "Cannot open xml security registry rdb" ) ; |
| |
| xLocalComponentContext = bootstrap_InitialComponentContext( xSimpleRegistry ) ; |
| OSL_ENSURE( xLocalComponentContext.is() , |
| "serviceManager - " |
| "Cannot create intial component context" ) ; |
| |
| xLocalServiceManager = xLocalComponentContext->getServiceManager() ; |
| OSL_ENSURE( xLocalServiceManager.is() , |
| "serviceManager - " |
| "Cannot create intial service manager" ) ; |
| |
| /*- |
| * Because of the exception rasied from |
| * ucbhelper/source/provider/provconf.cxx, lin 323 |
| * I do not use the content broker at present |
| ******************************************************************** |
| //init ucb |
| if( ::ucb::ContentBroker::get() == NULL ) { |
| Reference< lang::XMultiServiceFactory > xSvmg( xLocalServiceManager , UNO_QUERY ) ; |
| OSL_ENSURE( xLocalServiceManager.is() , |
| "serviceManager - " |
| "Cannot get multi-service factory" ) ; |
| |
| Sequence< Any > args( 2 ) ; |
| args[ 0 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY1_LOCAL ) ; |
| args[ 1 ] <<= OUString::createFromAscii( UCB_CONFIGURATION_KEY2_OFFICE ) ; |
| if( ! ::ucb::ContentBroker::initialize( xSvmg , args ) ) { |
| throw RuntimeException( OUString::createFromAscii( "Cannot inlitialize ContentBroker" ) , Reference< XInterface >() , Any() ) ; |
| } |
| } |
| ********************************************************************/ |
| |
| xUsedComponentContext = xLocalComponentContext ; |
| xUsedServiceManager = xLocalServiceManager ; |
| } else { |
| Reference< XComponentContext > xLocalComponentContext = defaultBootstrap_InitialComponentContext() ; |
| OSL_ENSURE( xLocalComponentContext.is() , |
| "serviceManager - " |
| "Cannot create intial component context" ) ; |
| |
| Reference< XMultiComponentFactory > xLocalServiceManager = xLocalComponentContext->getServiceManager(); |
| OSL_ENSURE( xLocalServiceManager.is() , |
| "serviceManager - " |
| "Cannot create intial service manager" ) ; |
| |
| Reference< XInterface > urlResolver = |
| xLocalServiceManager->createInstanceWithContext( OUString::createFromAscii("com.sun.star.bridge.UnoUrlResolver") , xLocalComponentContext ) ; |
| OSL_ENSURE( urlResolver.is() , |
| "serviceManager - " |
| "Cannot get service instance of \"bridge.UnoUrlResolver\"" ) ; |
| |
| Reference< XUnoUrlResolver > xUnoUrlResolver( urlResolver , UNO_QUERY ) ; |
| OSL_ENSURE( xUnoUrlResolver.is() , |
| "serviceManager - " |
| "Cannot get interface of \"XUnoUrlResolver\" from service \"bridge.UnoUrlResolver\"" ) ; |
| |
| Reference< XInterface > initialObject = xUnoUrlResolver->resolve( sUnoUrl ) ; |
| OSL_ENSURE( initialObject.is() , |
| "serviceManager - " |
| "Cannot resolve uno url" ) ; |
| |
| /*- |
| * Method 1: with Naming Service |
| ******************************************************************** |
| Reference< XNamingService > xNamingService( initialObject , UNO_QUERY ) ; |
| OSL_ENSURE( xNamingService.is() , |
| "serviceManager - " |
| "Cannot get interface of \"XNamingService\" from URL resolver" ) ; |
| |
| Reference< XInterface > serviceManager = |
| xNamingService->getRegisteredObject( OUString::createFromAscii( "StarOffice.ServiceManager" ) ) ; |
| OSL_ENSURE( serviceManager.is() , |
| "serviceManager - " |
| "Cannot get service instance of \"StarOffice.ServiceManager\"" ) ; |
| |
| xUsedServiceManager = Reference< XMultiComponentFactory >( serviceManager , UNO_QUERY ); |
| OSL_ENSURE( xUsedServiceManager.is() , |
| "serviceManager - " |
| "Cannot get interface of \"XMultiComponentFactory\" from service \"StarOffice.ServiceManager\"" ) ; |
| |
| Reference< XPropertySet > xPropSet( xUsedServiceManager , UNO_QUERY ) ; |
| OSL_ENSURE( xPropSet.is() , |
| "serviceManager - " |
| "Cannot get interface of \"XPropertySet\" from service \"StarOffice.ServiceManager\"" ) ; |
| |
| xPropSet->getPropertyValue( OUString::createFromAscii( "DefaultContext" ) ) >>= xUsedComponentContext ; |
| OSL_ENSURE( xUsedComponentContext.is() , |
| "serviceManager - " |
| "Cannot create remote component context" ) ; |
| |
| ********************************************************************/ |
| |
| /*- |
| * Method 2: with Componnent context |
| ******************************************************************** |
| Reference< XPropertySet > xPropSet( initialObject , UNO_QUERY ) ; |
| OSL_ENSURE( xPropSet.is() , |
| "serviceManager - " |
| "Cannot get interface of \"XPropertySet\" from URL resolver" ) ; |
| |
| xPropSet->getPropertyValue( OUString::createFromAscii( "DefaultContext" ) ) >>= xUsedComponentContext ; |
| OSL_ENSURE( xUsedComponentContext.is() , |
| "serviceManager - " |
| "Cannot create remote component context" ) ; |
| |
| xUsedServiceManager = xUsedComponentContext->getServiceManager(); |
| OSL_ENSURE( xUsedServiceManager.is() , |
| "serviceManager - " |
| "Cannot create remote service manager" ) ; |
| ********************************************************************/ |
| |
| /*- |
| * Method 3: with Service Manager |
| ********************************************************************/ |
| xUsedServiceManager = Reference< XMultiComponentFactory >( initialObject , UNO_QUERY ); |
| OSL_ENSURE( xUsedServiceManager.is() , |
| "serviceManager - " |
| "Cannot create remote service manager" ) ; |
| |
| Reference< XPropertySet > xPropSet( xUsedServiceManager , UNO_QUERY ) ; |
| OSL_ENSURE( xPropSet.is() , |
| "serviceManager - " |
| "Cannot get interface of \"XPropertySet\" from service \"StarOffice.ServiceManager\"" ) ; |
| |
| xPropSet->getPropertyValue( OUString::createFromAscii( "DefaultContext" ) ) >>= xUsedComponentContext ; |
| OSL_ENSURE( xUsedComponentContext.is() , |
| "serviceManager - " |
| "Cannot create remote component context" ) ; |
| /********************************************************************/ |
| } |
| |
| xContext = xUsedComponentContext ; |
| return xUsedServiceManager ; |
| } |
| |
| char* PriPK11PasswordFunc( |
| PK11SlotInfo *slot , |
| PRBool retry , |
| void* arg |
| ) { |
| char* passwd = NULL ; |
| |
| if( retry != PR_TRUE ) { |
| passwd = ( char* )PORT_Alloc( 20 ) ; |
| printf( "Input Password:\n" ) ; |
| scanf( "%s" , passwd ) ; |
| printf( "The passwod is [%s]\n" , passwd ) ; |
| } |
| |
| return passwd ; |
| } |
| |