Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : Runtime plugin adapter for various "smbd"-functions. 4 : 5 : Copyright (C) Gerald (Jerry) Carter 2004. 6 : Copyright (C) Andrew Bartlett 2011. 7 : 8 : This program is free software; you can redistribute it and/or modify 9 : it under the terms of the GNU General Public License as published by 10 : the Free Software Foundation; either version 3 of the License, or 11 : (at your option) any later version. 12 : 13 : This program is distributed in the hope that it will be useful, 14 : but WITHOUT ANY WARRANTY; without even the implied warranty of 15 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 : GNU General Public License for more details. 17 : 18 : You should have received a copy of the GNU General Public License 19 : along with this program. If not, see <http://www.gnu.org/licenses/>. 20 : */ 21 : 22 : /* Shim functions required due to the horrible dependency mess 23 : in Samba. */ 24 : 25 : #include "includes.h" 26 : #include "smbd_shim.h" 27 : 28 : static struct smbd_shim shim; 29 : 30 582 : void set_smbd_shim(const struct smbd_shim *shim_functions) 31 : { 32 582 : shim = *shim_functions; 33 582 : } 34 : 35 785820 : bool change_to_root_user(void) 36 : { 37 785820 : if (shim.change_to_root_user) { 38 785544 : return shim.change_to_root_user(); 39 : } 40 276 : return false; 41 : } 42 : 43 602366 : bool become_authenticated_pipe_user(struct auth_session_info *session_info) 44 : { 45 602366 : if (shim.become_authenticated_pipe_user) { 46 602366 : return shim.become_authenticated_pipe_user(session_info); 47 : } 48 : 49 0 : return false; 50 : } 51 : 52 602366 : bool unbecome_authenticated_pipe_user(void) 53 : { 54 602366 : if (shim.unbecome_authenticated_pipe_user) { 55 602366 : return shim.unbecome_authenticated_pipe_user(); 56 : } 57 : 58 0 : return false; 59 : } 60 : 61 : /** 62 : * The following two functions need to be called from inside the low-level BRL 63 : * code for oplocks correctness in smbd. Since other utility binaries also 64 : * link in some of the brl code directly, these dummy functions are necessary 65 : * to avoid needing to link in the oplocks code and its dependencies to all of 66 : * the utility binaries. 67 : */ 68 193402 : void contend_level2_oplocks_begin(files_struct *fsp, 69 : enum level2_contention_type type) 70 : { 71 193402 : if (shim.contend_level2_oplocks_begin) { 72 193402 : shim.contend_level2_oplocks_begin(fsp, type); 73 : } 74 193402 : return; 75 : } 76 : 77 192994 : void contend_level2_oplocks_end(files_struct *fsp, 78 : enum level2_contention_type type) 79 : { 80 192994 : if (shim.contend_level2_oplocks_end) { 81 192994 : shim.contend_level2_oplocks_end(fsp, type); 82 : } 83 192994 : return; 84 : } 85 : 86 3789704 : void become_root(void) 87 : { 88 3789704 : if (shim.become_root) { 89 3753876 : shim.become_root(); 90 : } 91 3789704 : return; 92 : } 93 : 94 3789704 : void unbecome_root(void) 95 : { 96 3789704 : if (shim.unbecome_root) { 97 3753876 : shim.unbecome_root(); 98 : } 99 3789704 : return; 100 : } 101 : 102 0 : void exit_server(const char *reason) 103 : { 104 0 : if (shim.exit_server) { 105 0 : shim.exit_server(reason); 106 : } 107 0 : exit(1); 108 : } 109 : 110 31038 : void exit_server_cleanly(const char *const reason) 111 : { 112 31038 : if (shim.exit_server_cleanly) { 113 31038 : shim.exit_server_cleanly(reason); 114 : } 115 0 : exit(0); 116 : }