1*9b5730f6SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*9b5730f6SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*9b5730f6SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*9b5730f6SAndrew Rist * distributed with this work for additional information 6*9b5730f6SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*9b5730f6SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*9b5730f6SAndrew Rist * "License"); you may not use this file except in compliance 9*9b5730f6SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*9b5730f6SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*9b5730f6SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*9b5730f6SAndrew Rist * software distributed under the License is distributed on an 15*9b5730f6SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*9b5730f6SAndrew Rist * KIND, either express or implied. See the License for the 17*9b5730f6SAndrew Rist * specific language governing permissions and limitations 18*9b5730f6SAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*9b5730f6SAndrew Rist *************************************************************/ 21*9b5730f6SAndrew Rist 22*9b5730f6SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_connectivity.hxx" 26cdf0e10cSrcweir #include "ado/AUser.hxx" 27cdf0e10cSrcweir #include "ado/ACatalog.hxx" 28cdf0e10cSrcweir #include "ado/AGroups.hxx" 29cdf0e10cSrcweir #include <cppuhelper/typeprovider.hxx> 30cdf0e10cSrcweir #include <comphelper/sequence.hxx> 31cdf0e10cSrcweir #include <com/sun/star/sdbc/XRow.hpp> 32cdf0e10cSrcweir #include <com/sun/star/sdbc/XResultSet.hpp> 33cdf0e10cSrcweir #ifndef _CONNECTIVITY_ADO_BCONNECTION_HXX_ 34cdf0e10cSrcweir #include "ado/AConnection.hxx" 35cdf0e10cSrcweir #endif 36cdf0e10cSrcweir #include "ado/Awrapado.hxx" 37cdf0e10cSrcweir 38cdf0e10cSrcweir using namespace connectivity::ado; 39cdf0e10cSrcweir using namespace com::sun::star::uno; 40cdf0e10cSrcweir using namespace com::sun::star::lang; 41cdf0e10cSrcweir using namespace com::sun::star::beans; 42cdf0e10cSrcweir using namespace com::sun::star::sdbc; 43cdf0e10cSrcweir 44cdf0e10cSrcweir // ------------------------------------------------------------------------- 45cdf0e10cSrcweir OAdoUser::OAdoUser(OCatalog* _pParent,sal_Bool _bCase, ADOUser* _pUser) 46cdf0e10cSrcweir : OUser_TYPEDEF(_bCase) 47cdf0e10cSrcweir ,m_pCatalog(_pParent) 48cdf0e10cSrcweir { 49cdf0e10cSrcweir construct(); 50cdf0e10cSrcweir 51cdf0e10cSrcweir if(_pUser) 52cdf0e10cSrcweir m_aUser = WpADOUser(_pUser); 53cdf0e10cSrcweir else 54cdf0e10cSrcweir m_aUser.Create(); 55cdf0e10cSrcweir } 56cdf0e10cSrcweir // ------------------------------------------------------------------------- 57cdf0e10cSrcweir OAdoUser::OAdoUser(OCatalog* _pParent,sal_Bool _bCase, const ::rtl::OUString& _Name) 58cdf0e10cSrcweir : OUser_TYPEDEF(_Name,_bCase) 59cdf0e10cSrcweir , m_pCatalog(_pParent) 60cdf0e10cSrcweir { 61cdf0e10cSrcweir construct(); 62cdf0e10cSrcweir m_aUser.Create(); 63cdf0e10cSrcweir m_aUser.put_Name(_Name); 64cdf0e10cSrcweir } 65cdf0e10cSrcweir // ------------------------------------------------------------------------- 66cdf0e10cSrcweir void OAdoUser::refreshGroups() 67cdf0e10cSrcweir { 68cdf0e10cSrcweir TStringVector aVector; 69cdf0e10cSrcweir WpADOGroups aGroups(m_aUser.get_Groups()); 70cdf0e10cSrcweir aGroups.fillElementNames(aVector); 71cdf0e10cSrcweir if(m_pGroups) 72cdf0e10cSrcweir m_pGroups->reFill(aVector); 73cdf0e10cSrcweir else 74cdf0e10cSrcweir m_pGroups = new OGroups(m_pCatalog,m_aMutex,aVector,aGroups,isCaseSensitive()); 75cdf0e10cSrcweir } 76cdf0e10cSrcweir //-------------------------------------------------------------------------- 77cdf0e10cSrcweir Sequence< sal_Int8 > OAdoUser::getUnoTunnelImplementationId() 78cdf0e10cSrcweir { 79cdf0e10cSrcweir static ::cppu::OImplementationId * pId = 0; 80cdf0e10cSrcweir if (! pId) 81cdf0e10cSrcweir { 82cdf0e10cSrcweir ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); 83cdf0e10cSrcweir if (! pId) 84cdf0e10cSrcweir { 85cdf0e10cSrcweir static ::cppu::OImplementationId aId; 86cdf0e10cSrcweir pId = &aId; 87cdf0e10cSrcweir } 88cdf0e10cSrcweir } 89cdf0e10cSrcweir return pId->getImplementationId(); 90cdf0e10cSrcweir } 91cdf0e10cSrcweir 92cdf0e10cSrcweir // com::sun::star::lang::XUnoTunnel 93cdf0e10cSrcweir //------------------------------------------------------------------ 94cdf0e10cSrcweir sal_Int64 OAdoUser::getSomething( const Sequence< sal_Int8 > & rId ) throw (RuntimeException) 95cdf0e10cSrcweir { 96cdf0e10cSrcweir return (rId.getLength() == 16 && 0 == rtl_compareMemory(getUnoTunnelImplementationId().getConstArray(), rId.getConstArray(), 16 ) ) 97cdf0e10cSrcweir ? reinterpret_cast< sal_Int64 >( this ) 98cdf0e10cSrcweir : OUser_TYPEDEF::getSomething(rId); 99cdf0e10cSrcweir } 100cdf0e10cSrcweir 101cdf0e10cSrcweir // ------------------------------------------------------------------------- 102cdf0e10cSrcweir void OAdoUser::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue)throw (Exception) 103cdf0e10cSrcweir { 104cdf0e10cSrcweir if(m_aUser.IsValid()) 105cdf0e10cSrcweir { 106cdf0e10cSrcweir 107cdf0e10cSrcweir switch(nHandle) 108cdf0e10cSrcweir { 109cdf0e10cSrcweir case PROPERTY_ID_NAME: 110cdf0e10cSrcweir { 111cdf0e10cSrcweir ::rtl::OUString aVal; 112cdf0e10cSrcweir rValue >>= aVal; 113cdf0e10cSrcweir m_aUser.put_Name(aVal); 114cdf0e10cSrcweir } 115cdf0e10cSrcweir break; 116cdf0e10cSrcweir } 117cdf0e10cSrcweir } 118cdf0e10cSrcweir } 119cdf0e10cSrcweir // ------------------------------------------------------------------------- 120cdf0e10cSrcweir void OAdoUser::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const 121cdf0e10cSrcweir { 122cdf0e10cSrcweir if(m_aUser.IsValid()) 123cdf0e10cSrcweir { 124cdf0e10cSrcweir switch(nHandle) 125cdf0e10cSrcweir { 126cdf0e10cSrcweir case PROPERTY_ID_NAME: 127cdf0e10cSrcweir rValue <<= m_aUser.get_Name(); 128cdf0e10cSrcweir break; 129cdf0e10cSrcweir } 130cdf0e10cSrcweir } 131cdf0e10cSrcweir } 132cdf0e10cSrcweir // ------------------------------------------------------------------------- 133cdf0e10cSrcweir OUserExtend::OUserExtend(OCatalog* _pParent,sal_Bool _bCase, ADOUser* _pUser) 134cdf0e10cSrcweir : OAdoUser(_pParent,_bCase,_pUser) 135cdf0e10cSrcweir { 136cdf0e10cSrcweir } 137cdf0e10cSrcweir // ------------------------------------------------------------------------- 138cdf0e10cSrcweir OUserExtend::OUserExtend(OCatalog* _pParent,sal_Bool _bCase, const ::rtl::OUString& _Name) 139cdf0e10cSrcweir : OAdoUser(_pParent,_bCase,_Name) 140cdf0e10cSrcweir { 141cdf0e10cSrcweir } 142cdf0e10cSrcweir 143cdf0e10cSrcweir // ------------------------------------------------------------------------- 144cdf0e10cSrcweir void OUserExtend::construct() 145cdf0e10cSrcweir { 146cdf0e10cSrcweir OUser_TYPEDEF::construct(); 147cdf0e10cSrcweir registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD), PROPERTY_ID_PASSWORD,0,&m_Password,::getCppuType(reinterpret_cast< ::rtl::OUString*>(NULL))); 148cdf0e10cSrcweir } 149cdf0e10cSrcweir // ----------------------------------------------------------------------------- 150cdf0e10cSrcweir cppu::IPropertyArrayHelper* OUserExtend::createArrayHelper() const 151cdf0e10cSrcweir { 152cdf0e10cSrcweir Sequence< com::sun::star::beans::Property > aProps; 153cdf0e10cSrcweir describeProperties(aProps); 154cdf0e10cSrcweir return new cppu::OPropertyArrayHelper(aProps); 155cdf0e10cSrcweir } 156cdf0e10cSrcweir // ------------------------------------------------------------------------- 157cdf0e10cSrcweir cppu::IPropertyArrayHelper & OUserExtend::getInfoHelper() 158cdf0e10cSrcweir { 159cdf0e10cSrcweir return *OUserExtend_PROP::getArrayHelper(); 160cdf0e10cSrcweir } 161cdf0e10cSrcweir // ----------------------------------------------------------------------------- 162cdf0e10cSrcweir // ----------------------------------------------------------------------------- 163cdf0e10cSrcweir void SAL_CALL OAdoUser::acquire() throw() 164cdf0e10cSrcweir { 165cdf0e10cSrcweir OUser_TYPEDEF::acquire(); 166cdf0e10cSrcweir } 167cdf0e10cSrcweir // ----------------------------------------------------------------------------- 168cdf0e10cSrcweir void SAL_CALL OAdoUser::release() throw() 169cdf0e10cSrcweir { 170cdf0e10cSrcweir OUser_TYPEDEF::release(); 171cdf0e10cSrcweir } 172cdf0e10cSrcweir // ----------------------------------------------------------------------------- 173cdf0e10cSrcweir sal_Int32 SAL_CALL OAdoUser::getPrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(SQLException, RuntimeException) 174cdf0e10cSrcweir { 175cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 176cdf0e10cSrcweir checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); 177cdf0e10cSrcweir 178cdf0e10cSrcweir return ADOS::mapAdoRights2Sdbc(m_aUser.GetPermissions(objName, ADOS::mapObjectType2Ado(objType))); 179cdf0e10cSrcweir } 180cdf0e10cSrcweir // ------------------------------------------------------------------------- 181cdf0e10cSrcweir sal_Int32 SAL_CALL OAdoUser::getGrantablePrivileges( const ::rtl::OUString& objName, sal_Int32 objType ) throw(SQLException, RuntimeException) 182cdf0e10cSrcweir { 183cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 184cdf0e10cSrcweir checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); 185cdf0e10cSrcweir 186cdf0e10cSrcweir sal_Int32 nRights = 0; 187cdf0e10cSrcweir RightsEnum eRights = m_aUser.GetPermissions(objName, ADOS::mapObjectType2Ado(objType)); 188cdf0e10cSrcweir if((eRights & adRightWithGrant) == adRightWithGrant) 189cdf0e10cSrcweir nRights = ADOS::mapAdoRights2Sdbc(eRights); 190cdf0e10cSrcweir ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); 191cdf0e10cSrcweir return nRights; 192cdf0e10cSrcweir } 193cdf0e10cSrcweir // ------------------------------------------------------------------------- 194cdf0e10cSrcweir void SAL_CALL OAdoUser::grantPrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(SQLException, RuntimeException) 195cdf0e10cSrcweir { 196cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 197cdf0e10cSrcweir checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); 198cdf0e10cSrcweir m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessGrant,RightsEnum(ADOS::mapRights2Ado(objPrivileges))); 199cdf0e10cSrcweir ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); 200cdf0e10cSrcweir } 201cdf0e10cSrcweir // ------------------------------------------------------------------------- 202cdf0e10cSrcweir void SAL_CALL OAdoUser::revokePrivileges( const ::rtl::OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) throw(SQLException, RuntimeException) 203cdf0e10cSrcweir { 204cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 205cdf0e10cSrcweir checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); 206cdf0e10cSrcweir m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessRevoke,RightsEnum(ADOS::mapRights2Ado(objPrivileges))); 207cdf0e10cSrcweir ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); 208cdf0e10cSrcweir } 209cdf0e10cSrcweir // ----------------------------------------------------------------------------- 210cdf0e10cSrcweir // XUser 211cdf0e10cSrcweir void SAL_CALL OAdoUser::changePassword( const ::rtl::OUString& objPassword, const ::rtl::OUString& newPassword ) throw(SQLException, RuntimeException) 212cdf0e10cSrcweir { 213cdf0e10cSrcweir ::osl::MutexGuard aGuard(m_aMutex); 214cdf0e10cSrcweir checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); 215cdf0e10cSrcweir m_aUser.ChangePassword(objPassword,newPassword); 216cdf0e10cSrcweir ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); 217cdf0e10cSrcweir } 218cdf0e10cSrcweir // ----------------------------------------------------------------------------- 219cdf0e10cSrcweir 220cdf0e10cSrcweir 221cdf0e10cSrcweir 222cdf0e10cSrcweir 223cdf0e10cSrcweir 224