#88919# bootstrapping native ac; removed ac_defimpl functions
This commit is contained in:
parent
655994fe08
commit
7ef59dba1a
@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: access_control.hxx,v $
|
||||
*
|
||||
* $Revision: 1.5 $
|
||||
* $Revision: 1.6 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2002-01-11 10:06:02 $
|
||||
* last change: $Author: dbo $ $Date: 2002-01-25 09:36:50 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@ -61,9 +61,6 @@
|
||||
#ifndef _CPPUHELPER_ACCESS_CONTROL_HXX_
|
||||
#define _CPPUHELPER_ACCESS_CONTROL_HXX_
|
||||
|
||||
#ifndef _COM_SUN_STAR_UNO_XCURRENTCONTEXT_HPP_
|
||||
#include <com/sun/star/uno/XCurrentContext.hpp>
|
||||
#endif
|
||||
#ifndef _COM_SUN_STAR_UNO_XCOMPONENTCONTEXT_HPP_
|
||||
#include <com/sun/star/uno/XComponentContext.hpp>
|
||||
#endif
|
||||
@ -71,8 +68,6 @@
|
||||
#include <com/sun/star/security/XAccessController.hpp>
|
||||
#endif
|
||||
|
||||
#define AC_SINGLETON "/singletons/com.sun.star.security.theAccessController"
|
||||
|
||||
|
||||
namespace cppu
|
||||
{
|
||||
@ -150,50 +145,6 @@ public:
|
||||
SAL_THROW( (::com::sun::star::uno::RuntimeException) );
|
||||
};
|
||||
|
||||
|
||||
/** Default implementation retieving the current access control restriction.
|
||||
|
||||
@param xCurrentContext current context
|
||||
@return current access control restriction
|
||||
*/
|
||||
::com::sun::star::uno::Reference< ::com::sun::star::security::XAccessControlContext > SAL_CALL
|
||||
ac_defimpl_getRestriction(
|
||||
::com::sun::star::uno::Reference<
|
||||
::com::sun::star::uno::XCurrentContext > const & xCurrentContext )
|
||||
SAL_THROW( (::com::sun::star::uno::RuntimeException) );
|
||||
|
||||
/** Default implementation performing a restricted action.
|
||||
|
||||
@param xAction action to be performed
|
||||
@param xRestriction additional restriction to be in effect
|
||||
@param xCurrentContext current context
|
||||
*/
|
||||
::com::sun::star::uno::Any SAL_CALL
|
||||
ac_defimpl_doRestricted(
|
||||
::com::sun::star::uno::Reference<
|
||||
::com::sun::star::security::XAction > const & xAction,
|
||||
::com::sun::star::uno::Reference<
|
||||
::com::sun::star::security::XAccessControlContext > const & xRestriction,
|
||||
::com::sun::star::uno::Reference<
|
||||
::com::sun::star::uno::XCurrentContext > const & xCurrentContext )
|
||||
SAL_THROW( (::com::sun::star::uno::Exception) );
|
||||
|
||||
/** Default implementation performed a privileged action.
|
||||
|
||||
@param xAction action to be performed
|
||||
@param xRestriction (the one and only) restriction to be in effect
|
||||
@param xCurrentContext current context
|
||||
*/
|
||||
::com::sun::star::uno::Any SAL_CALL
|
||||
ac_defimpl_doPrivileged(
|
||||
::com::sun::star::uno::Reference<
|
||||
::com::sun::star::security::XAction > const & xAction,
|
||||
::com::sun::star::uno::Reference<
|
||||
::com::sun::star::security::XAccessControlContext > const & xRestriction,
|
||||
::com::sun::star::uno::Reference<
|
||||
::com::sun::star::uno::XCurrentContext > const & xCurrentContext )
|
||||
SAL_THROW( (::com::sun::star::uno::Exception) );
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: access_control.cxx,v $
|
||||
*
|
||||
* $Revision: 1.4 $
|
||||
* $Revision: 1.5 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2002-01-11 10:15:50 $
|
||||
* last change: $Author: dbo $ $Date: 2002-01-25 09:36:50 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@ -59,26 +59,15 @@
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#include <osl/diagnose.h>
|
||||
#include <osl/interlck.h>
|
||||
#include <uno/current_context.h>
|
||||
|
||||
#include <cppuhelper/implbase1.hxx>
|
||||
#include <cppuhelper/factory.hxx>
|
||||
#include <cppuhelper/access_control.hxx>
|
||||
|
||||
#include <com/sun/star/uno/XCurrentContext.hpp>
|
||||
#include <com/sun/star/lang/XServiceInfo.hpp>
|
||||
#include <com/sun/star/security/XAccessController.hpp>
|
||||
|
||||
#include <com/sun/star/security/RuntimePermission.hpp>
|
||||
#include <com/sun/star/io/FilePermission.hpp>
|
||||
#include <com/sun/star/connection/SocketPermission.hpp>
|
||||
|
||||
#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
|
||||
|
||||
#define AC_RESTRICTION "access-control.restriction"
|
||||
|
||||
|
||||
using namespace ::rtl;
|
||||
using namespace ::osl;
|
||||
@ -89,269 +78,7 @@ namespace cppu
|
||||
{
|
||||
|
||||
static OUString str_envType = OUSTR(CPPU_CURRENT_LANGUAGE_BINDING_NAME);
|
||||
static OUString str_acRestriction = OUSTR(AC_RESTRICTION);
|
||||
|
||||
//==================================================================================================
|
||||
class acc_Combiner
|
||||
: public WeakImplHelper1< security::XAccessControlContext >
|
||||
{
|
||||
Reference< security::XAccessControlContext > m_x1, m_x2;
|
||||
|
||||
public:
|
||||
inline acc_Combiner(
|
||||
Reference< security::XAccessControlContext > const & x1,
|
||||
Reference< security::XAccessControlContext > const & x2 )
|
||||
SAL_THROW( () )
|
||||
: m_x1( x1 )
|
||||
, m_x2( x2 )
|
||||
{}
|
||||
|
||||
// XAccessControlContext impl
|
||||
virtual void SAL_CALL checkPermission(
|
||||
Any const & perm )
|
||||
throw (RuntimeException);
|
||||
};
|
||||
//__________________________________________________________________________________________________
|
||||
void acc_Combiner::checkPermission(
|
||||
Any const & perm )
|
||||
throw (RuntimeException)
|
||||
{
|
||||
m_x1->checkPermission( perm );
|
||||
m_x2->checkPermission( perm );
|
||||
}
|
||||
//==================================================================================================
|
||||
class acc_CurrentContext
|
||||
: public ImplHelper1< XCurrentContext >
|
||||
{
|
||||
oslInterlockedCount m_refcount;
|
||||
|
||||
Reference< XCurrentContext > m_xDelegate;
|
||||
Any m_restriction;
|
||||
|
||||
public:
|
||||
inline acc_CurrentContext(
|
||||
Reference< XCurrentContext > const & xDelegate,
|
||||
Reference< security::XAccessControlContext > const & xRestriction )
|
||||
SAL_THROW( () );
|
||||
|
||||
// XInterface impl
|
||||
virtual void SAL_CALL acquire()
|
||||
throw ();
|
||||
virtual void SAL_CALL release()
|
||||
throw ();
|
||||
|
||||
// XCurrentContext
|
||||
virtual Any SAL_CALL getValueByName( OUString const & name )
|
||||
throw (RuntimeException);
|
||||
};
|
||||
//__________________________________________________________________________________________________
|
||||
inline acc_CurrentContext::acc_CurrentContext(
|
||||
Reference< XCurrentContext > const & xDelegate,
|
||||
Reference< security::XAccessControlContext > const & xRestriction )
|
||||
SAL_THROW( () )
|
||||
: m_refcount( 0 )
|
||||
, m_xDelegate( xDelegate )
|
||||
{
|
||||
if (xRestriction.is())
|
||||
{
|
||||
m_restriction = makeAny( xRestriction );
|
||||
}
|
||||
// return empty any otherwise on getValueByName(), not null interface
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
void acc_CurrentContext::acquire()
|
||||
throw ()
|
||||
{
|
||||
::osl_incrementInterlockedCount( &m_refcount );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
void acc_CurrentContext::release()
|
||||
throw ()
|
||||
{
|
||||
if (! ::osl_decrementInterlockedCount( &m_refcount ))
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
Any acc_CurrentContext::getValueByName( OUString const & name )
|
||||
throw (RuntimeException)
|
||||
{
|
||||
if (name.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(AC_RESTRICTION) ))
|
||||
{
|
||||
return m_restriction;
|
||||
}
|
||||
else
|
||||
{
|
||||
return m_xDelegate->getValueByName( name );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
Reference< security::XAccessControlContext > SAL_CALL ac_defimpl_getRestriction(
|
||||
Reference< XCurrentContext > const & xContext )
|
||||
SAL_THROW( (RuntimeException) )
|
||||
{
|
||||
if (xContext.is())
|
||||
{
|
||||
Any acc( xContext->getValueByName( str_acRestriction ) );
|
||||
if (typelib_TypeClass_INTERFACE == acc.pType->eTypeClass)
|
||||
{
|
||||
OUString const & typeName =
|
||||
* reinterpret_cast< OUString const * >( &acc.pType->pTypeName );
|
||||
if (typeName.equalsAsciiL(
|
||||
RTL_CONSTASCII_STRINGPARAM("com.sun.star.security.XAccessControlContext") ))
|
||||
{
|
||||
return Reference< security::XAccessControlContext >(
|
||||
* reinterpret_cast< security::XAccessControlContext * * const >( acc.pData ) );
|
||||
}
|
||||
else // try to query
|
||||
{
|
||||
return Reference< security::XAccessControlContext >::query(
|
||||
* reinterpret_cast< XInterface * * const >( acc.pData ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
return Reference< security::XAccessControlContext >();
|
||||
}
|
||||
//==================================================================================================
|
||||
struct __cc_reset
|
||||
{
|
||||
void * m_cc;
|
||||
inline __cc_reset( void * cc ) SAL_THROW( () )
|
||||
: m_cc( cc ) {}
|
||||
inline ~__cc_reset() SAL_THROW( () )
|
||||
{ ::uno_setCurrentContext( m_cc, str_envType.pData, 0 ); }
|
||||
};
|
||||
//==================================================================================================
|
||||
Any SAL_CALL ac_defimpl_doRestricted(
|
||||
Reference< security::XAction > const & xAction,
|
||||
Reference< security::XAccessControlContext > const & xRestriction,
|
||||
Reference< XCurrentContext > const & xContext )
|
||||
SAL_THROW( (Exception) )
|
||||
{
|
||||
if (xRestriction.is())
|
||||
{
|
||||
Reference< security::XAccessControlContext > xOldRestr(
|
||||
ac_defimpl_getRestriction( xContext ) );
|
||||
|
||||
if (xOldRestr.is())
|
||||
{
|
||||
Reference< XCurrentContext > xNewContext( new acc_CurrentContext(
|
||||
xContext, new acc_Combiner( xRestriction, xOldRestr ) ) );
|
||||
::uno_setCurrentContext( xNewContext.get(), str_envType.pData, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
Reference< XCurrentContext > xNewContext( new acc_CurrentContext(
|
||||
xContext, xRestriction ) );
|
||||
::uno_setCurrentContext( xNewContext.get(), str_envType.pData, 0 );
|
||||
}
|
||||
|
||||
__cc_reset reset( xContext.get() );
|
||||
return xAction->run();
|
||||
}
|
||||
else
|
||||
{
|
||||
return xAction->run();
|
||||
}
|
||||
}
|
||||
//==================================================================================================
|
||||
Any SAL_CALL ac_defimpl_doPrivileged(
|
||||
Reference< security::XAction > const & xAction,
|
||||
Reference< security::XAccessControlContext > const & xRestriction,
|
||||
Reference< XCurrentContext > const & xContext )
|
||||
SAL_THROW( (Exception) )
|
||||
{
|
||||
// override AC_RESTRICTION
|
||||
Reference< XCurrentContext > xNewContext( new acc_CurrentContext(
|
||||
xContext, xRestriction ) );
|
||||
::uno_setCurrentContext( xNewContext.get(), str_envType.pData, 0 );
|
||||
|
||||
__cc_reset reset( xContext.get() );
|
||||
return xAction->run();
|
||||
}
|
||||
|
||||
|
||||
//##################################################################################################
|
||||
//### default service impl: does not check for static permissions! #################################
|
||||
//##################################################################################################
|
||||
|
||||
//==================================================================================================
|
||||
class DefaultAccessController
|
||||
: public WeakImplHelper1< security::XAccessController >
|
||||
{
|
||||
public:
|
||||
// XAccessController impl
|
||||
virtual void SAL_CALL checkPermission(
|
||||
Any const & perm )
|
||||
throw (RuntimeException);
|
||||
virtual Any SAL_CALL doRestricted(
|
||||
Reference< security::XAction > const & xAction,
|
||||
Reference< security::XAccessControlContext > const & xRestriction )
|
||||
throw (Exception);
|
||||
virtual Any SAL_CALL doPrivileged(
|
||||
Reference< security::XAction > const & xAction,
|
||||
Reference< security::XAccessControlContext > const & xRestriction )
|
||||
throw (Exception);
|
||||
virtual Reference< security::XAccessControlContext > SAL_CALL getContext()
|
||||
throw (RuntimeException);
|
||||
};
|
||||
//__________________________________________________________________________________________________
|
||||
void DefaultAccessController::checkPermission(
|
||||
Any const & perm )
|
||||
throw (RuntimeException)
|
||||
{
|
||||
// only dynamic checks of ac contexts, no static checks concerning credentials
|
||||
Reference< XCurrentContext > xContext;
|
||||
::uno_getCurrentContext( (void **)&xContext, str_envType.pData, 0 );
|
||||
Reference< security::XAccessControlContext > xACC( ac_defimpl_getRestriction( xContext ) );
|
||||
if (xACC.is())
|
||||
{
|
||||
xACC->checkPermission( perm );
|
||||
}
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
Any DefaultAccessController::doRestricted(
|
||||
Reference< security::XAction > const & xAction,
|
||||
Reference< security::XAccessControlContext > const & xRestriction )
|
||||
throw (Exception)
|
||||
{
|
||||
Reference< XCurrentContext > xContext;
|
||||
::uno_getCurrentContext( (void **)&xContext, str_envType.pData, 0 );
|
||||
return ac_defimpl_doRestricted( xAction, xRestriction, xContext );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
Any DefaultAccessController::doPrivileged(
|
||||
Reference< security::XAction > const & xAction,
|
||||
Reference< security::XAccessControlContext > const & xRestriction )
|
||||
throw (Exception)
|
||||
{
|
||||
Reference< XCurrentContext > xContext;
|
||||
::uno_getCurrentContext( (void **)&xContext, str_envType.pData, 0 );
|
||||
return ac_defimpl_doPrivileged( xAction, xRestriction, xContext );
|
||||
}
|
||||
//__________________________________________________________________________________________________
|
||||
Reference< security::XAccessControlContext > DefaultAccessController::getContext()
|
||||
throw (RuntimeException)
|
||||
{
|
||||
Reference< XCurrentContext > xContext;
|
||||
::uno_getCurrentContext( (void **)&xContext, str_envType.pData, 0 );
|
||||
return ac_defimpl_getRestriction( xContext );
|
||||
}
|
||||
|
||||
//=== run on bootstrapping =========================================================================
|
||||
Reference< security::XAccessController > createDefaultAccessController()
|
||||
SAL_THROW( () )
|
||||
{
|
||||
return new DefaultAccessController();
|
||||
}
|
||||
|
||||
//##################################################################################################
|
||||
//### helper class #################################################################################
|
||||
//##################################################################################################
|
||||
|
||||
static OUString str_ac_singleton = OUSTR(AC_SINGLETON);
|
||||
static OUString str_ac_singleton = OUSTR("/singletons/com.sun.star.security.theAccessController");
|
||||
|
||||
//__________________________________________________________________________________________________
|
||||
AccessControl::AccessControl( Reference< XComponentContext > const & xContext )
|
||||
@ -447,4 +174,3 @@ void AccessControl::checkSocketPermission(
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: bootstrap.cxx,v $
|
||||
*
|
||||
* $Revision: 1.6 $
|
||||
* $Revision: 1.7 $
|
||||
*
|
||||
* last change: $Author: jbu $ $Date: 2002-01-16 16:24:14 $
|
||||
* last change: $Author: dbo $ $Date: 2002-01-25 09:36:50 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@ -60,7 +60,6 @@
|
||||
************************************************************************/
|
||||
|
||||
#include <vector>
|
||||
// #include <string.h>
|
||||
|
||||
#include <rtl/process.h>
|
||||
#include <rtl/bootstrap.hxx>
|
||||
|
@ -246,10 +246,6 @@ __1cEcppubJWeakAggComponentImplHelper_getTypes6Fpn0AKclass_data__nDcomDsunEstarD
|
||||
__1cEcppubEImplHelper_getImplementationId6Fpn0AKclass_data__nDcomDsunEstarDunoISequence4CW___;
|
||||
__1cEcppubOdefaultBootstrap_InitialComponentContext6FrknDrtlIOUString__nDcomDsunEstarDunoJReference4n0GRXComponentContext____;
|
||||
|
||||
__1cEcppuXac_defimpl_doPrivileged6FrknDcomDsunEstarDunoJReference4n0DIsecurityHXAction___rkn0EJReference4n0FVXAccessControlContext___rkn0EJReference4n0EPXCurrentContext____n0EDAny__;
|
||||
__1cEcppuXac_defimpl_doRestricted6FrknDcomDsunEstarDunoJReference4n0DIsecurityHXAction___rkn0EJReference4n0FVXAccessControlContext___rkn0EJReference4n0EPXCurrentContext____n0EDAny__;
|
||||
__1cEcppuZac_defimpl_getRestriction6FrknDcomDsunEstarDunoJReference4n0EPXCurrentContext____n0EJReference4n0DIsecurityVXAccessControlContext____;
|
||||
|
||||
__1cEcppuNAccessControl2t5B6MrknDcomDsunEstarDunoJReference4n0EIsecurityRXAccessController____v_;
|
||||
__1cEcppuNAccessControl2t5B6MrknDcomDsunEstarDunoJReference4n0FRXComponentContext____v_;
|
||||
__1cEcppuNAccessControl2t5B6Mrk1_v_;
|
||||
|
@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: component_context.cxx,v $
|
||||
*
|
||||
* $Revision: 1.13 $
|
||||
* $Revision: 1.14 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2001-12-17 12:25:55 $
|
||||
* last change: $Author: dbo $ $Date: 2002-01-25 09:36:50 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@ -76,7 +76,6 @@
|
||||
#include <cppuhelper/implbase1.hxx>
|
||||
#include <cppuhelper/compbase1.hxx>
|
||||
#include <cppuhelper/component_context.hxx>
|
||||
#include <cppuhelper/access_control.hxx>
|
||||
|
||||
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
|
||||
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
|
||||
@ -90,7 +89,7 @@
|
||||
|
||||
#define SMGR_SINGLETON "/singletons/com.sun.star.lang.theServiceManager"
|
||||
#define TDMGR_SINGLETON "/singletons/com.sun.star.reflection.theTypeDescriptionManager"
|
||||
|
||||
#define AC_SINGLETON "/singletons/com.sun.star.security.theAccessController"
|
||||
#define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) )
|
||||
|
||||
|
||||
|
@ -2,9 +2,9 @@
|
||||
#
|
||||
# $RCSfile: makefile.mk,v $
|
||||
#
|
||||
# $Revision: 1.23 $
|
||||
# $Revision: 1.24 $
|
||||
#
|
||||
# last change: $Author: dbo $ $Date: 2002-01-11 11:08:58 $
|
||||
# last change: $Author: dbo $ $Date: 2002-01-25 09:36:50 $
|
||||
#
|
||||
# The Contents of this file are made available subject to the terms of
|
||||
# either of the following licenses
|
||||
@ -90,7 +90,6 @@ UNOTYPES= \
|
||||
com.sun.star.uno.XAggregation \
|
||||
com.sun.star.uno.XComponentContext \
|
||||
com.sun.star.uno.XUnloadingPreference \
|
||||
com.sun.star.uno.XCurrentContext \
|
||||
com.sun.star.lang.XMultiServiceFactory \
|
||||
com.sun.star.lang.XSingleServiceFactory \
|
||||
com.sun.star.lang.XMultiComponentFactory \
|
||||
@ -98,7 +97,6 @@ UNOTYPES= \
|
||||
com.sun.star.lang.XServiceInfo \
|
||||
com.sun.star.lang.XInitialization \
|
||||
com.sun.star.lang.XEventListener \
|
||||
com.sun.star.security.XAccessController \
|
||||
com.sun.star.reflection.XIdlReflection \
|
||||
com.sun.star.reflection.XIdlClass \
|
||||
com.sun.star.reflection.XIdlClassProvider \
|
||||
@ -123,6 +121,8 @@ UNOTYPES= \
|
||||
com.sun.star.loader.XImplementationLoader \
|
||||
com.sun.star.lang.XTypeProvider \
|
||||
com.sun.star.lang.XComponent \
|
||||
com.sun.star.uno.XCurrentContext \
|
||||
com.sun.star.security.XAccessController \
|
||||
com.sun.star.security.RuntimePermission \
|
||||
com.sun.star.io.FilePermission \
|
||||
com.sun.star.connection.SocketPermission
|
||||
|
@ -193,10 +193,6 @@ component_getDescriptionFunc;
|
||||
?WeakComponentImplHelper_getTypes@cppu@@YA?AV?$Sequence@VType@uno@star@sun@com@@@uno@star@sun@com@@PAUclass_data@1@@Z;
|
||||
?defaultBootstrap_InitialComponentContext@cppu@@YA?AV?$Reference@VXComponentContext@uno@star@sun@com@@@uno@star@sun@com@@ABVOUString@rtl@@@Z;
|
||||
|
||||
?ac_defimpl_getRestriction@cppu@@YA?AV?$Reference@VXAccessControlContext@security@star@sun@com@@@uno@star@sun@com@@ABV?$Reference@VXCurrentContext@uno@star@sun@com@@@3456@@Z;
|
||||
?ac_defimpl_doRestricted@cppu@@YA?AVAny@uno@star@sun@com@@ABV?$Reference@VXAction@security@star@sun@com@@@3456@ABV?$Reference@VXAccessControlContext@security@star@sun@com@@@3456@ABV?$Reference@VXCurrentContext@uno@star@sun@com@@@3456@@Z;
|
||||
?ac_defimpl_doPrivileged@cppu@@YA?AVAny@uno@star@sun@com@@ABV?$Reference@VXAction@security@star@sun@com@@@3456@ABV?$Reference@VXAccessControlContext@security@star@sun@com@@@3456@ABV?$Reference@VXCurrentContext@uno@star@sun@com@@@3456@@Z;
|
||||
|
||||
??0AccessControl@cppu@@QAE@ABV?$Reference@VXComponentContext@uno@star@sun@com@@@uno@star@sun@com@@@Z;
|
||||
??0AccessControl@cppu@@QAE@ABV?$Reference@VXAccessController@security@star@sun@com@@@uno@star@sun@com@@@Z;
|
||||
??0AccessControl@cppu@@QAE@ABV01@@Z;
|
||||
|
@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: servicefactory.cxx,v $
|
||||
*
|
||||
* $Revision: 1.28 $
|
||||
* $Revision: 1.29 $
|
||||
*
|
||||
* last change: $Author: dbo $ $Date: 2002-01-11 10:06:02 $
|
||||
* last change: $Author: dbo $ $Date: 2002-01-25 09:36:50 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@ -59,6 +59,9 @@
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
#ifdef _DEBUG
|
||||
#include <stdio.h>
|
||||
#endif
|
||||
#include <vector>
|
||||
|
||||
#include <rtl/process.h>
|
||||
@ -67,16 +70,16 @@
|
||||
#include <rtl/bootstrap.hxx>
|
||||
|
||||
#include <osl/diagnose.h>
|
||||
#include <osl/file.hxx>
|
||||
#include <osl/file.h>
|
||||
#include <osl/module.h>
|
||||
#include <osl/thread.h>
|
||||
#include <osl/process.h>
|
||||
|
||||
#include <cppuhelper/shlib.hxx>
|
||||
#include <cppuhelper/factory.hxx>
|
||||
#include <cppuhelper/component_context.hxx>
|
||||
#include <cppuhelper/servicefactory.hxx>
|
||||
#include <cppuhelper/bootstrap.hxx>
|
||||
#include <cppuhelper/access_control.hxx>
|
||||
|
||||
#include <com/sun/star/uno/XComponentContext.hpp>
|
||||
#include <com/sun/star/lang/XInitialization.hpp>
|
||||
@ -171,7 +174,9 @@ Reference< registry::XSimpleRegistry > SAL_CALL createNestedRegistry(
|
||||
createInstance( loadSharedLibComponentFactory(
|
||||
OUString( RTL_CONSTASCII_USTRINGPARAM("defreg") ), rBootstrapPath,
|
||||
OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.stoc.NestedRegistry") ),
|
||||
Reference< lang::XMultiServiceFactory >(), Reference< registry::XRegistryKey >() ) ), UNO_QUERY );
|
||||
Reference< lang::XMultiServiceFactory >(),
|
||||
Reference< registry::XRegistryKey >() ) ),
|
||||
UNO_QUERY );
|
||||
}
|
||||
catch (Exception &)
|
||||
{
|
||||
@ -181,6 +186,116 @@ Reference< registry::XSimpleRegistry > SAL_CALL createNestedRegistry(
|
||||
return Reference< registry::XSimpleRegistry >();
|
||||
}
|
||||
|
||||
|
||||
/** bootstrap variables:
|
||||
|
||||
UNO_AC=<mode> [mandatory]
|
||||
-- mode := { on, off, dynamic-only, single-user, single-default-user }
|
||||
UNO_AC_SERVICE=<service_name> [optional]
|
||||
-- override ac singleton service name
|
||||
UNO_AC_SINGLEUSER=<user-id|nothing> [optional]
|
||||
-- run with this user id or with default user policy (<nothing>)
|
||||
set UNO_AC=single-[default-]user
|
||||
|
||||
UNO_AC_POLICYSERVICE=<service_name> [optional]
|
||||
-- override policy singleton service name
|
||||
UNO_AC_POLICYFILE=<file_url> [optional]
|
||||
-- read policy out of simple text file
|
||||
*/
|
||||
static void add_access_control_entries(
|
||||
::std::vector< ContextEntry_Init > * values,
|
||||
Bootstrap const & bootstrap )
|
||||
SAL_THROW( (Exception) )
|
||||
{
|
||||
ContextEntry_Init entry;
|
||||
::std::vector< ContextEntry_Init > & context_values = *values;
|
||||
|
||||
OUString ac_policy;
|
||||
if (bootstrap.getFrom( OUSTR("UNO_AC_POLICYSERVICE"), ac_policy )) // overridden service name
|
||||
{
|
||||
// - policy singleton
|
||||
entry.bLateInitService = true;
|
||||
entry.name = OUSTR("/singletons/com.sun.star.security.thePolicy");
|
||||
entry.value <<= ac_policy;
|
||||
context_values.push_back( entry );
|
||||
}
|
||||
else if (bootstrap.getFrom( OUSTR("UNO_AC_POLICYFILE"), ac_policy )) // check for file policy
|
||||
{
|
||||
// - file policy prop: file-name
|
||||
if (0 != ac_policy.compareToAscii( RTL_CONSTASCII_STRINGPARAM("file:///") )) // no file url
|
||||
{
|
||||
OUString baseDir;
|
||||
oslProcessError prc = ::osl_getProcessWorkingDir(
|
||||
&baseDir.pData );
|
||||
OSL_ASSERT( osl_Process_E_None == prc );
|
||||
OUString fileURL;
|
||||
oslFileError frc = ::osl_getAbsoluteFileURL(
|
||||
baseDir.pData, ac_policy.pData, &fileURL.pData );
|
||||
OSL_ASSERT( osl_File_E_None == frc );
|
||||
ac_policy = fileURL;
|
||||
}
|
||||
|
||||
entry.bLateInitService = false;
|
||||
entry.name = OUSTR("/implementations/com.sun.star.security.comp.stoc.FilePolicy/file-name");
|
||||
entry.value <<= ac_policy;
|
||||
context_values.push_back( entry );
|
||||
// - policy singleton
|
||||
entry.bLateInitService = true;
|
||||
entry.name = OUSTR("/singletons/com.sun.star.security.thePolicy");
|
||||
entry.value <<= OUSTR("com.sun.star.security.comp.stoc.FilePolicy");
|
||||
context_values.push_back( entry );
|
||||
} // else policy singleton comes from storage
|
||||
|
||||
OUString ac_mode;
|
||||
if (! bootstrap.getFrom( OUSTR("UNO_AC"), ac_mode ))
|
||||
{
|
||||
ac_mode = OUSTR("off"); // default
|
||||
}
|
||||
OUString ac_user;
|
||||
if (bootstrap.getFrom( OUSTR("UNO_AC_SINGLEUSER"), ac_user )) // ac in single-user mode
|
||||
{
|
||||
if (ac_user.getLength())
|
||||
{
|
||||
// - ac prop: single-user-id
|
||||
entry.bLateInitService = false;
|
||||
entry.name = OUSTR("/services/com.sun.star.security.AccessController/single-user-id");
|
||||
entry.value <<= ac_user;
|
||||
context_values.push_back( entry );
|
||||
if (! ac_mode.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("single-user") ))
|
||||
{
|
||||
throw SecurityException(
|
||||
OUSTR("set UNO_AC=single-user if you set UNO_AC_SINGLEUSER=<user-id>!"),
|
||||
Reference< XInterface >() );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (! ac_mode.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("single-default-user") ))
|
||||
{
|
||||
throw SecurityException(
|
||||
OUSTR("set UNO_AC=single-default-user if you set UNO_AC_SINGLEUSER=<nothing>!"),
|
||||
Reference< XInterface >() );
|
||||
}
|
||||
}
|
||||
}
|
||||
OUString ac_service;
|
||||
if (! bootstrap.getFrom( OUSTR("UNO_AC_SERVICE"), ac_service )) // override service name
|
||||
{
|
||||
ac_service = OUSTR("com.sun.star.security.AccessController"); // default
|
||||
// ac = OUSTR("com.sun.star.security.comp.stoc.AccessController");
|
||||
}
|
||||
|
||||
// - ac prop: mode { "off", "on", "dynamic-only", "single-user", "single-default-user" }
|
||||
entry.bLateInitService = false;
|
||||
entry.name = OUSTR("/services/com.sun.star.security.AccessController/mode");
|
||||
entry.value <<= ac_mode;
|
||||
context_values.push_back( entry );
|
||||
// - ac singleton
|
||||
entry.bLateInitService = true;
|
||||
entry.name = OUSTR("/singletons/com.sun.star.security.theAccessController");
|
||||
entry.value <<= ac_service;
|
||||
context_values.push_back( entry );
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
Reference< lang::XMultiComponentFactory > bootstrapInitialSF(
|
||||
OUString const & rBootstrapPath )
|
||||
@ -198,6 +313,8 @@ Reference< lang::XMultiComponentFactory > bootstrapInitialSF(
|
||||
"defreg", "com.sun.star.comp.stoc.NestedRegistry",
|
||||
"tdmgr", "com.sun.star.comp.stoc.TypeDescriptionManager",
|
||||
"impreg", "com.sun.star.comp.stoc.ImplementationRegistration",
|
||||
"sec", "com.sun.star.security.comp.stoc.AccessController",
|
||||
"sec", "com.sun.star.security.comp.stoc.FilePolicy",
|
||||
0
|
||||
};
|
||||
addFactories(
|
||||
@ -227,7 +344,7 @@ Reference< XComponentContext > bootstrapInitialContext(
|
||||
// basic context values
|
||||
ContextEntry_Init entry;
|
||||
::std::vector< ContextEntry_Init > context_values;
|
||||
context_values.reserve( 6 );
|
||||
context_values.reserve( 12 );
|
||||
|
||||
// read out singleton infos from registry
|
||||
if (services_xRegistry.is())
|
||||
@ -270,29 +387,27 @@ Reference< XComponentContext > bootstrapInitialContext(
|
||||
}
|
||||
}
|
||||
|
||||
// smgr
|
||||
// smgr:
|
||||
// - smgr singleton
|
||||
entry.bLateInitService = false;
|
||||
entry.name = OUSTR("/singletons/com.sun.star.lang.theServiceManager");
|
||||
entry.value <<= xSF;
|
||||
context_values.push_back( entry );
|
||||
|
||||
// ac
|
||||
entry.bLateInitService = false;
|
||||
entry.name = OUSTR(AC_SINGLETON);
|
||||
entry.value <<= createDefaultAccessController();
|
||||
context_values.push_back( entry );
|
||||
// ac, policy:
|
||||
add_access_control_entries( &context_values, bootstrap );
|
||||
|
||||
// tdmgr
|
||||
entry.bLateInitService = true;
|
||||
entry.name = OUSTR("/singletons/com.sun.star.reflection.theTypeDescriptionManager");
|
||||
entry.value <<= OUSTR("com.sun.star.reflection.TypeDescriptionManager");
|
||||
context_values.push_back( entry );
|
||||
|
||||
// tdmgr: cache size
|
||||
// tdmgr:
|
||||
// - tdmgr prop: cache size
|
||||
entry.bLateInitService = false;
|
||||
entry.name = OUSTR("/implementations/com.sun.star.comp.stoc.TypeDescriptionManager/CacheSize");
|
||||
entry.value <<= (sal_Int32)512;
|
||||
context_values.push_back( entry );
|
||||
// - tdmgr singleton
|
||||
entry.bLateInitService = true;
|
||||
entry.name = OUSTR("/singletons/com.sun.star.reflection.theTypeDescriptionManager");
|
||||
entry.value <<= OUSTR("com.sun.star.comp.stoc.TypeDescriptionManager");
|
||||
context_values.push_back( entry );
|
||||
|
||||
Reference< XComponentContext > xContext;
|
||||
Reference< container::XHierarchicalNameAccess > xTDMgr;
|
||||
@ -349,18 +464,6 @@ Reference< XComponentContext > bootstrapInitialContext(
|
||||
installTypeDescriptionManager( xTDMgr );
|
||||
}
|
||||
|
||||
// wrap ac for subsequent services
|
||||
OUString ac_service;
|
||||
if (bootstrap.getFrom( OUSTR("UNO_AC"), ac_service ) && ac_service.getLength())
|
||||
{
|
||||
// wrap ac
|
||||
ContextEntry_Init entry;
|
||||
entry.bLateInitService = true;
|
||||
entry.name = OUSTR(AC_SINGLETON);
|
||||
entry.value <<= ac_service;
|
||||
xContext = createComponentContext( &entry, 1, xContext );
|
||||
}
|
||||
|
||||
return xContext;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user