/************************************************************** * * 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_connectivity.hxx" #include "ado/AUser.hxx" #include "ado/ACatalog.hxx" #include "ado/AGroups.hxx" #include #include #include #include #ifndef _CONNECTIVITY_ADO_BCONNECTION_HXX_ #include "ado/AConnection.hxx" #endif #include "ado/Awrapado.hxx" using namespace connectivity::ado; using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; // ------------------------------------------------------------------------- OAdoUser::OAdoUser(OCatalog* _pParent,sal_Bool _bCase, ADOUser* _pUser) : OUser_TYPEDEF(_bCase) ,m_pCatalog(_pParent) { construct(); if(_pUser) m_aUser = WpADOUser(_pUser); else m_aUser.Create(); } // ------------------------------------------------------------------------- OAdoUser::OAdoUser(OCatalog* _pParent,sal_Bool _bCase, const ::rtl::OUString& _Name) : OUser_TYPEDEF(_Name,_bCase) , m_pCatalog(_pParent) { construct(); m_aUser.Create(); m_aUser.put_Name(_Name); } // ------------------------------------------------------------------------- void OAdoUser::refreshGroups() { TStringVector aVector; WpADOGroups aGroups(m_aUser.get_Groups()); aGroups.fillElementNames(aVector); if(m_pGroups) m_pGroups->reFill(aVector); else m_pGroups = new OGroups(m_pCatalog,m_aMutex,aVector,aGroups,isCaseSensitive()); } //-------------------------------------------------------------------------- Sequence< sal_Int8 > OAdoUser::getUnoTunnelImplementationId() { static ::cppu::OImplementationId * pId = 0; if (! pId) { ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); if (! pId) { static ::cppu::OImplementationId aId; pId = &aId; } } return pId->getImplementationId(); } // com::sun::star::lang::XUnoTunnel //------------------------------------------------------------------ sal_Int64 OAdoUser::getSomething( const Sequence< sal_Int8 > & rId ) throw (RuntimeException) { return (rId.getLength() == 16 && 0 == rtl_compareMemory(getUnoTunnelImplementationId().getConstArray(), rId.getConstArray(), 16 ) ) ? reinterpret_cast< sal_Int64 >( this ) : OUser_TYPEDEF::getSomething(rId); } // ------------------------------------------------------------------------- void OAdoUser::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)throw (Exception) { if(m_aUser.IsValid()) { switch(nHandle) { case PROPERTY_ID_NAME: { ::rtl::OUString aVal; rValue >>= aVal; m_aUser.put_Name(aVal); } break; } } } // ------------------------------------------------------------------------- void OAdoUser::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const { if(m_aUser.IsValid()) { switch(nHandle) { case PROPERTY_ID_NAME: rValue <<= m_aUser.get_Name(); break; } } } // ------------------------------------------------------------------------- OUserExtend::OUserExtend(OCatalog* _pParent,sal_Bool _bCase, ADOUser* _pUser) : OAdoUser(_pParent,_bCase,_pUser) { } // ------------------------------------------------------------------------- OUserExtend::OUserExtend(OCatalog* _pParent,sal_Bool _bCase, const ::rtl::OUString& _Name) : OAdoUser(_pParent,_bCase,_Name) { } // ------------------------------------------------------------------------- void OUserExtend::construct() { OUser_TYPEDEF::construct(); registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD), PROPERTY_ID_PASSWORD,0,&m_Password,::getCppuType(reinterpret_cast< ::rtl::OUString*>(NULL))); } // ----------------------------------------------------------------------------- cppu::IPropertyArrayHelper* OUserExtend::createArrayHelper() const { Sequence< com::sun::star::beans::Property > aProps; describeProperties(aProps); return new cppu::OPropertyArrayHelper(aProps); } // ------------------------------------------------------------------------- cppu::IPropertyArrayHelper & OUserExtend::getInfoHelper() { return *OUserExtend_PROP::getArrayHelper(); } // ----------------------------------------------------------------------------- // ----------------------------------------------------------------------------- void SAL_CALL OAdoUser::acquire() throw() { OUser_TYPEDEF::acquire(); } // ----------------------------------------------------------------------------- void SAL_CALL OAdoUser::release() throw() { OUser_TYPEDEF::release(); } // ----------------------------------------------------------------------------- sal_Int32 SAL_CALL OAdoUser::getPrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(SQLException, RuntimeException) { ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); return ADOS::mapAdoRights2Sdbc(m_aUser.GetPermissions(objName, ADOS::mapObjectType2Ado(objType))); } // ------------------------------------------------------------------------- sal_Int32 SAL_CALL OAdoUser::getGrantablePrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(SQLException, RuntimeException) { ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); sal_Int32 nRights = 0; RightsEnum eRights = m_aUser.GetPermissions(objName, ADOS::mapObjectType2Ado(objType)); if((eRights & adRightWithGrant) == adRightWithGrant) nRights = ADOS::mapAdoRights2Sdbc(eRights); ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); return nRights; } // ------------------------------------------------------------------------- void SAL_CALL OAdoUser::grantPrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(SQLException, RuntimeException) { ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessGrant,RightsEnum(ADOS::mapRights2Ado(objPrivileges))); ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); } // ------------------------------------------------------------------------- void SAL_CALL OAdoUser::revokePrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(SQLException, RuntimeException) { ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessRevoke,RightsEnum(ADOS::mapRights2Ado(objPrivileges))); ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); } // ----------------------------------------------------------------------------- // XUser void SAL_CALL OAdoUser::changePassword( const ::rtl::OUString& objPassword, const ::rtl::OUString& newPassword ) throw(SQLException, RuntimeException) { ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); m_aUser.ChangePassword(objPassword,newPassword); ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); } // -----------------------------------------------------------------------------