Kaydet (Commit) b1c14587 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

Revert "[API CHANGE] createSecurityContext() was always called with an empty string"

I got cold feet. I don't want to have to revert this many years later
instead, when some obscure 3rd-party software stops working.

This reverts commit e1ce7bad.
üst cc15806b
...@@ -35,9 +35,12 @@ interface XSEInitializer : com::sun::star::uno::XInterface ...@@ -35,9 +35,12 @@ interface XSEInitializer : com::sun::star::uno::XInterface
/** /**
Creates a security context. Creates a security context.
@param aString
reserved for internal use.
@return the security context created @return the security context created
*/ */
::com::sun::star::xml::crypto::XXMLSecurityContext createSecurityContext(); ::com::sun::star::xml::crypto::XXMLSecurityContext createSecurityContext( [in] string aString );
/** /**
* Frees a security context. * Frees a security context.
......
...@@ -46,7 +46,7 @@ namespace cmis ...@@ -46,7 +46,7 @@ namespace cmis
if ( xSEInitializer.is() ) if ( xSEInitializer.is() )
{ {
uno::Reference< xml::crypto::XXMLSecurityContext > xSecurityContext( uno::Reference< xml::crypto::XXMLSecurityContext > xSecurityContext(
xSEInitializer->createSecurityContext() ); xSEInitializer->createSecurityContext( OUString() ) );
uno::Reference< xml::crypto::XSecurityEnvironment > xSecurityEnv( uno::Reference< xml::crypto::XSecurityEnvironment > xSecurityEnv(
xSecurityContext->getSecurityEnvironment() ); xSecurityContext->getSecurityEnvironment() );
......
...@@ -398,7 +398,7 @@ extern "C" int NeonSession_CertificationNotify( void *userdata, ...@@ -398,7 +398,7 @@ extern "C" int NeonSession_CertificationNotify( void *userdata,
return 1; return 1;
uno::Reference< xml::crypto::XXMLSecurityContext > xSecurityContext( uno::Reference< xml::crypto::XXMLSecurityContext > xSecurityContext(
xSEInitializer->createSecurityContext() ); xSEInitializer->createSecurityContext( OUString() ) );
uno::Reference< xml::crypto::XSecurityEnvironment > xSecurityEnv( uno::Reference< xml::crypto::XSecurityEnvironment > xSecurityEnv(
xSecurityContext->getSecurityEnvironment() ); xSecurityContext->getSecurityEnvironment() );
......
...@@ -373,7 +373,7 @@ apr_status_t SerfSession::verifySerfCertificateChain ( ...@@ -373,7 +373,7 @@ apr_status_t SerfSession::verifySerfCertificateChain (
css::uno::Reference< css::xml::crypto::XSEInitializer > xSEInitializer = css::uno::Reference< css::xml::crypto::XSEInitializer > xSEInitializer =
css::xml::crypto::SEInitializer::create( xContext ); css::xml::crypto::SEInitializer::create( xContext );
xSecurityContext = xSEInitializer->createSecurityContext(); xSecurityContext = xSEInitializer->createSecurityContext( OUString() );
if (xSecurityContext.is()) if (xSecurityContext.is())
xSecurityEnv = xSecurityContext->getSecurityEnvironment(); xSecurityEnv = xSecurityContext->getSecurityEnvironment();
......
...@@ -126,7 +126,7 @@ namespace { ...@@ -126,7 +126,7 @@ namespace {
uno::Reference< lang::XMultiServiceFactory > factory(context->getServiceManager(), uno::UNO_QUERY_THROW); uno::Reference< lang::XMultiServiceFactory > factory(context->getServiceManager(), uno::UNO_QUERY_THROW);
uno::Reference< xml::crypto::XSEInitializer > xSEInitializer = xml::crypto::SEInitializer::create(context); uno::Reference< xml::crypto::XSEInitializer > xSEInitializer = xml::crypto::SEInitializer::create(context);
uno::Reference< xml::crypto::XXMLSecurityContext > xSecurityContext( uno::Reference< xml::crypto::XXMLSecurityContext > xSecurityContext(
xSEInitializer->createSecurityContext()); xSEInitializer->createSecurityContext(OUString()));
return xSecurityContext->getSecurityEnvironment(); return xSecurityContext->getSecurityEnvironment();
} }
......
...@@ -119,7 +119,7 @@ void PDFSigningTest::setUp() ...@@ -119,7 +119,7 @@ void PDFSigningTest::setUp()
std::vector<SignatureInformation> PDFSigningTest::verify(const OUString& rURL, size_t nCount, const OString& rExpectedSubFilter) std::vector<SignatureInformation> PDFSigningTest::verify(const OUString& rURL, size_t nCount, const OString& rExpectedSubFilter)
{ {
uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext); uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext);
uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(); uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(OUString());
std::vector<SignatureInformation> aRet; std::vector<SignatureInformation> aRet;
SvFileStream aStream(rURL, StreamMode::READ); SvFileStream aStream(rURL, StreamMode::READ);
...@@ -151,7 +151,7 @@ bool PDFSigningTest::sign(const OUString& rInURL, const OUString& rOutURL, size_ ...@@ -151,7 +151,7 @@ bool PDFSigningTest::sign(const OUString& rInURL, const OUString& rOutURL, size_
{ {
// Make sure that input has nOriginalSignatureCount signatures. // Make sure that input has nOriginalSignatureCount signatures.
uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext); uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext);
uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(); uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(OUString());
xmlsecurity::pdfio::PDFDocument aDocument; xmlsecurity::pdfio::PDFDocument aDocument;
{ {
SvFileStream aStream(rInURL, StreamMode::READ); SvFileStream aStream(rInURL, StreamMode::READ);
...@@ -223,7 +223,7 @@ void PDFSigningTest::testPDFRemove() ...@@ -223,7 +223,7 @@ void PDFSigningTest::testPDFRemove()
{ {
// Make sure that good.pdf has 1 valid signature. // Make sure that good.pdf has 1 valid signature.
uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext); uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext);
uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(); uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(OUString());
xmlsecurity::pdfio::PDFDocument aDocument; xmlsecurity::pdfio::PDFDocument aDocument;
{ {
OUString aSourceDir = m_directories.getURLFromSrc(DATA_DIRECTORY); OUString aSourceDir = m_directories.getURLFromSrc(DATA_DIRECTORY);
...@@ -257,7 +257,7 @@ void PDFSigningTest::testPDFRemoveAll() ...@@ -257,7 +257,7 @@ void PDFSigningTest::testPDFRemoveAll()
// testPDFRemove(), here intentionally test DocumentSignatureManager and // testPDFRemove(), here intentionally test DocumentSignatureManager and
// PDFSignatureHelper code as well. // PDFSignatureHelper code as well.
uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext); uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext);
uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(); uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(OUString());
// Copy the test document to a temporary file, as it'll be modified. // Copy the test document to a temporary file, as it'll be modified.
OUString aTargetDir = m_directories.getURLFromWorkdir("/CppunitTest/xmlsecurity_pdfsigning.test.user/"); OUString aTargetDir = m_directories.getURLFromWorkdir("/CppunitTest/xmlsecurity_pdfsigning.test.user/");
...@@ -410,7 +410,7 @@ void PDFSigningTest::testUnknownSubFilter() ...@@ -410,7 +410,7 @@ void PDFSigningTest::testUnknownSubFilter()
{ {
// Tokenize the bugdoc. // Tokenize the bugdoc.
uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext); uno::Reference<xml::crypto::XSEInitializer> xSEInitializer = xml::crypto::SEInitializer::create(mxComponentContext);
uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(); uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(OUString());
SvStream* pStream = utl::UcbStreamHelper::CreateStream(m_directories.getURLFromSrc(DATA_DIRECTORY) + "cr-comment.pdf", StreamMode::READ | StreamMode::WRITE); SvStream* pStream = utl::UcbStreamHelper::CreateStream(m_directories.getURLFromSrc(DATA_DIRECTORY) + "cr-comment.pdf", StreamMode::READ | StreamMode::WRITE);
uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream)); uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream));
DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content); DocumentSignatureManager aManager(mxComponentContext, DocumentSignatureMode::Content);
......
...@@ -56,7 +56,7 @@ bool DocumentSignatureManager::init() ...@@ -56,7 +56,7 @@ bool DocumentSignatureManager::init()
mxSEInitializer = css::xml::crypto::SEInitializer::create(mxContext); mxSEInitializer = css::xml::crypto::SEInitializer::create(mxContext);
if (mxSEInitializer.is()) if (mxSEInitializer.is())
mxSecurityContext = mxSEInitializer->createSecurityContext(); mxSecurityContext = mxSEInitializer->createSecurityContext(OUString());
return mxSecurityContext.is(); return mxSecurityContext.is();
} }
......
...@@ -45,12 +45,31 @@ SEInitializer_MSCryptImpl::~SEInitializer_MSCryptImpl() ...@@ -45,12 +45,31 @@ SEInitializer_MSCryptImpl::~SEInitializer_MSCryptImpl()
/* XSEInitializer */ /* XSEInitializer */
cssu::Reference< cssxc::XXMLSecurityContext > SAL_CALL cssu::Reference< cssxc::XXMLSecurityContext > SAL_CALL
SEInitializer_MSCryptImpl::createSecurityContext() SEInitializer_MSCryptImpl::createSecurityContext(
const OUString& sCertDB )
throw (cssu::RuntimeException) throw (cssu::RuntimeException)
{ {
const char* n_pCertStore ;
HCERTSTORE n_hStoreHandle ;
//Initialize the crypto engine //Initialize the crypto engine
if( sCertDB.getLength() > 0 )
{
OString sCertDir(sCertDB.getStr(), sCertDB.getLength(), RTL_TEXTENCODING_ASCII_US);
n_pCertStore = sCertDir.getStr();
n_hStoreHandle = CertOpenSystemStore( NULL, n_pCertStore ) ;
if( n_hStoreHandle == nullptr )
{
return nullptr;
}
}
else
{
n_pCertStore = nullptr ;
n_hStoreHandle = nullptr ;
}
xmlSecMSCryptoAppInit( nullptr ) ; xmlSecMSCryptoAppInit( n_pCertStore ) ;
try { try {
/* Build Security Environment */ /* Build Security Environment */
...@@ -61,11 +80,24 @@ cssu::Reference< cssxc::XXMLSecurityContext > SAL_CALL ...@@ -61,11 +80,24 @@ cssu::Reference< cssxc::XXMLSecurityContext > SAL_CALL
SecurityEnvironment_MSCryptImpl* pSecEnv = reinterpret_cast<SecurityEnvironment_MSCryptImpl*>(xSecEnvTunnel->getSomething( SecurityEnvironment_MSCryptImpl::getUnoTunnelId() )); SecurityEnvironment_MSCryptImpl* pSecEnv = reinterpret_cast<SecurityEnvironment_MSCryptImpl*>(xSecEnvTunnel->getSomething( SecurityEnvironment_MSCryptImpl::getUnoTunnelId() ));
if( pSecEnv == nullptr ) if( pSecEnv == nullptr )
{ {
if( n_hStoreHandle != nullptr )
{
CertCloseStore( n_hStoreHandle, CERT_CLOSE_STORE_FORCE_FLAG ) ;
}
xmlSecMSCryptoAppShutdown() ; xmlSecMSCryptoAppShutdown() ;
return nullptr; return nullptr;
} }
pSecEnv->enableDefaultCrypt( true ) ; if( n_hStoreHandle != nullptr )
{
pSecEnv->setCryptoSlot( n_hStoreHandle ) ;
pSecEnv->setCertDb( n_hStoreHandle ) ;
}
else
{
pSecEnv->enableDefaultCrypt( true ) ;
}
/* Build XML Security Context */ /* Build XML Security Context */
cssu::Reference< cssxc::XXMLSecurityContext > xSecCtx = cssxc::XMLSecurityContext::create( mxContext ); cssu::Reference< cssxc::XXMLSecurityContext > xSecCtx = cssxc::XMLSecurityContext::create( mxContext );
...@@ -75,6 +107,11 @@ cssu::Reference< cssxc::XXMLSecurityContext > SAL_CALL ...@@ -75,6 +107,11 @@ cssu::Reference< cssxc::XXMLSecurityContext > SAL_CALL
} }
catch( cssu::Exception& ) catch( cssu::Exception& )
{ {
if( n_hStoreHandle != nullptr )
{
CertCloseStore( n_hStoreHandle, CERT_CLOSE_STORE_FORCE_FLAG ) ;
}
xmlSecMSCryptoAppShutdown() ; xmlSecMSCryptoAppShutdown() ;
return nullptr; return nullptr;
} }
......
...@@ -56,7 +56,7 @@ public: ...@@ -56,7 +56,7 @@ public:
/* XSEInitializer */ /* XSEInitializer */
virtual css::uno::Reference< css::xml::crypto::XXMLSecurityContext > virtual css::uno::Reference< css::xml::crypto::XXMLSecurityContext >
SAL_CALL createSecurityContext() SAL_CALL createSecurityContext( const OUString& certDB )
throw (css::uno::RuntimeException) override; throw (css::uno::RuntimeException) override;
virtual void SAL_CALL freeSecurityContext( const css::uno::Reference< virtual void SAL_CALL freeSecurityContext( const css::uno::Reference<
......
...@@ -63,7 +63,7 @@ SEInitializer_NssImpl::~SEInitializer_NssImpl() ...@@ -63,7 +63,7 @@ SEInitializer_NssImpl::~SEInitializer_NssImpl()
/* XSEInitializer */ /* XSEInitializer */
uno::Reference< cssxc::XXMLSecurityContext > SAL_CALL uno::Reference< cssxc::XXMLSecurityContext > SAL_CALL
SEInitializer_NssImpl::createSecurityContext() SEInitializer_NssImpl::createSecurityContext( const OUString& )
throw (uno::RuntimeException, std::exception) throw (uno::RuntimeException, std::exception)
{ {
CERTCertDBHandle *pCertHandle = nullptr ; CERTCertDBHandle *pCertHandle = nullptr ;
......
...@@ -41,7 +41,7 @@ public: ...@@ -41,7 +41,7 @@ public:
/* XSEInitializer */ /* XSEInitializer */
virtual css::uno::Reference< css::xml::crypto::XXMLSecurityContext > virtual css::uno::Reference< css::xml::crypto::XXMLSecurityContext >
SAL_CALL createSecurityContext() SAL_CALL createSecurityContext( const OUString& )
throw (css::uno::RuntimeException, std::exception) override; throw (css::uno::RuntimeException, std::exception) override;
virtual void SAL_CALL freeSecurityContext( const css::uno::Reference< virtual void SAL_CALL freeSecurityContext( const css::uno::Reference<
......
...@@ -56,7 +56,7 @@ int pdfVerify(int nArgc, char** pArgv) ...@@ -56,7 +56,7 @@ int pdfVerify(int nArgc, char** pArgv)
SAL_WARN("xmlsecurity.pdfio", "DeploymentException while creating SEInitializer: " << rException.Message); SAL_WARN("xmlsecurity.pdfio", "DeploymentException while creating SEInitializer: " << rException.Message);
return 1; return 1;
} }
uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(); uno::Reference<xml::crypto::XXMLSecurityContext> xSecurityContext = xSEInitializer->createSecurityContext(OUString());
OUString aInURL; OUString aInURL;
osl::FileBase::getFileURLFromSystemPath(OUString::fromUtf8(pArgv[1]), aInURL); osl::FileBase::getFileURLFromSystemPath(OUString::fromUtf8(pArgv[1]), aInURL);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment