Line data Source code
1 : /* 2 : Unix SMB/Netbios implementation. 3 : Generic infrastructure for RPC Daemons 4 : Copyright (C) Simo Sorce 2011 5 : Copyright (C) Andreas Schneider 2011 6 : 7 : This program is free software; you can redistribute it and/or modify 8 : it under the terms of the GNU General Public License as published by 9 : the Free Software Foundation; either version 3 of the License, or 10 : (at your option) any later version. 11 : 12 : This program is distributed in the hope that it will be useful, 13 : but WITHOUT ANY WARRANTY; without even the implied warranty of 14 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 : GNU General Public License for more details. 16 : 17 : You should have received a copy of the GNU General Public License 18 : along with this program. If not, see <http://www.gnu.org/licenses/>. 19 : */ 20 : 21 : #include "includes.h" 22 : #include "rpc_server/rpc_config.h" 23 : #include "rpc_server/rpc_server.h" 24 : #include "lib/param/param.h" 25 : #include "librpc/rpc/dcesrv_core.h" 26 : #include "lib/global_contexts.h" 27 : 28 : #undef DBGC_CLASS 29 : #define DBGC_CLASS DBGC_RPC_SRV 30 : 31 : static struct dcesrv_context_callbacks srv_callbacks = { 32 : .log.successful_authz = dcesrv_log_successful_authz, 33 : .auth.gensec_prepare = dcesrv_auth_gensec_prepare, 34 : .auth.become_root = become_root, 35 : .auth.unbecome_root = unbecome_root, 36 : .assoc_group.find = dcesrv_assoc_group_find, 37 : }; 38 : 39 : static struct dcesrv_context *global_dcesrv_ctx = NULL; 40 : 41 636 : struct dcesrv_context *global_dcesrv_context(void) 42 : { 43 0 : NTSTATUS status; 44 : 45 636 : if (global_dcesrv_ctx == NULL) { 46 636 : struct loadparm_context *lp_ctx = NULL; 47 : 48 636 : DBG_INFO("Initializing DCE/RPC server context\n"); 49 : 50 636 : lp_ctx = loadparm_init_s3(NULL, loadparm_s3_helpers()); 51 636 : if (lp_ctx == NULL) { 52 0 : smb_panic("No memory"); 53 : } 54 : 55 : /* 56 : * Note we MUST use the NULL context here, not the 57 : * autofree context, to avoid side effects in forked 58 : * children exiting. 59 : */ 60 636 : status = dcesrv_init_context(global_event_context(), 61 : lp_ctx, 62 : &srv_callbacks, 63 : &global_dcesrv_ctx); 64 636 : if (!NT_STATUS_IS_OK(status)) { 65 0 : smb_panic("Failed to init DCE/RPC context"); 66 : } 67 : 68 636 : talloc_steal(global_dcesrv_ctx, lp_ctx); 69 : } 70 : 71 636 : return global_dcesrv_ctx; 72 : } 73 : 74 0 : void global_dcesrv_context_free(void) 75 : { 76 0 : TALLOC_FREE(global_dcesrv_ctx); 77 0 : }