2004-02-12 08:24:02 +03:00
/*
Unix SMB / CIFS implementation .
2012-10-18 17:58:01 +04:00
Runtime plugin adapter for various " smbd " - functions .
2004-02-12 08:24:02 +03:00
Copyright ( C ) Gerald ( Jerry ) Carter 2004.
2011-05-31 07:18:37 +04:00
Copyright ( C ) Andrew Bartlett 2011.
2004-02-12 08:24:02 +03:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
2007-07-09 23:25:36 +04:00
the Free Software Foundation ; either version 3 of the License , or
2004-02-12 08:24:02 +03:00
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
2007-07-10 04:52:41 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2004-02-12 08:24:02 +03:00
*/
2011-05-31 07:18:37 +04:00
/* Shim functions required due to the horrible dependency mess
2004-02-12 08:24:02 +03:00
in Samba . */
2005-05-03 01:30:57 +04:00
# include "includes.h"
2011-05-31 07:18:37 +04:00
# include "smbd_shim.h"
static struct smbd_shim shim ;
void set_smbd_shim ( const struct smbd_shim * shim_functions )
{
shim = * shim_functions ;
}
2005-05-02 21:49:43 +04:00
2010-05-07 12:20:26 +04:00
void cancel_pending_lock_requests_by_fid ( files_struct * fsp ,
struct byte_range_lock * br_lck ,
enum file_close_type close_type )
2006-07-18 01:09:02 +04:00
{
2011-05-31 07:18:37 +04:00
if ( shim . cancel_pending_lock_requests_by_fid ) {
shim . cancel_pending_lock_requests_by_fid ( fsp , br_lck , close_type ) ;
}
2006-07-18 01:09:02 +04:00
}
2007-01-18 09:19:24 +03:00
2010-07-07 00:43:14 +04:00
void send_stat_cache_delete_message ( struct messaging_context * msg_ctx ,
const char * name )
2007-01-18 09:19:24 +03:00
{
2011-05-31 07:18:37 +04:00
if ( shim . send_stat_cache_delete_message ) {
shim . send_stat_cache_delete_message ( msg_ctx , name ) ;
}
2007-01-18 09:19:24 +03:00
}
2008-10-04 01:18:35 +04:00
bool change_to_root_user ( void )
{
2011-05-31 07:18:37 +04:00
if ( shim . change_to_root_user ) {
return shim . change_to_root_user ( ) ;
}
2008-10-04 01:18:35 +04:00
return false ;
}
2013-10-23 13:02:39 +04:00
bool become_authenticated_pipe_user ( struct auth_session_info * session_info )
{
if ( shim . become_authenticated_pipe_user ) {
return shim . become_authenticated_pipe_user ( session_info ) ;
}
return false ;
}
bool unbecome_authenticated_pipe_user ( void )
{
if ( shim . unbecome_authenticated_pipe_user ) {
return shim . unbecome_authenticated_pipe_user ( ) ;
}
return false ;
}
2009-02-03 22:56:35 +03:00
/**
* The following two functions need to be called from inside the low - level BRL
* code for oplocks correctness in smbd . Since other utility binaries also
* link in some of the brl code directly , these dummy functions are necessary
* to avoid needing to link in the oplocks code and its dependencies to all of
* the utility binaries .
*/
void contend_level2_oplocks_begin ( files_struct * fsp ,
enum level2_contention_type type )
{
2011-05-31 07:18:37 +04:00
if ( shim . contend_level2_oplocks_begin ) {
shim . contend_level2_oplocks_begin ( fsp , type ) ;
}
2009-02-03 22:56:35 +03:00
return ;
}
void contend_level2_oplocks_end ( files_struct * fsp ,
enum level2_contention_type type )
{
2011-05-31 07:18:37 +04:00
if ( shim . contend_level2_oplocks_end ) {
shim . contend_level2_oplocks_end ( fsp , type ) ;
}
return ;
}
void become_root ( void )
{
if ( shim . become_root ) {
shim . become_root ( ) ;
}
return ;
}
void unbecome_root ( void )
{
if ( shim . unbecome_root ) {
shim . unbecome_root ( ) ;
}
2009-02-03 22:56:35 +03:00
return ;
}
2012-10-09 16:35:04 +04:00
void exit_server ( const char * reason )
{
if ( shim . exit_server ) {
shim . exit_server ( reason ) ;
}
exit ( 1 ) ;
}
void exit_server_cleanly ( const char * const reason )
{
if ( shim . exit_server_cleanly ) {
shim . exit_server_cleanly ( reason ) ;
}
exit ( 0 ) ;
}