Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : cmdline context wrapper. 4 : 5 : Copyright (C) Christof Schmitt <cs@samba.org> 2018 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 "cmdline_contexts.h" 22 : #include "includes.h" 23 : #include "messages.h" 24 : #include "lib/global_contexts.h" 25 : 26 4372 : struct messaging_context *cmdline_messaging_context(const char *config_file) 27 : { 28 4372 : struct messaging_context *msg_ctx = NULL; 29 : 30 : /* 31 : * Ensure that a config is loaded, in case the underlying 32 : * messaging_init needs to create directories or sockets. 33 : */ 34 4372 : if (!lp_loaded()) { 35 0 : if (!lp_load_initial_only(config_file)) { 36 0 : return NULL; 37 : } 38 : } 39 : 40 : /* 41 : * Clustered Samba can only work as root due to required 42 : * access to the registry and ctdb, which in turn requires 43 : * messaging access as root. 44 : */ 45 4372 : if (lp_clustering() && geteuid() != 0) { 46 0 : fprintf(stderr, "Cluster mode requires running as root.\n"); 47 0 : exit(1); 48 : } 49 : 50 4372 : msg_ctx = global_messaging_context(); 51 4372 : if (msg_ctx == NULL) { 52 5 : if (geteuid() == 0) { 53 0 : fprintf(stderr, 54 : "Unable to initialize messaging context!\n"); 55 0 : exit(1); 56 : } else { 57 : /* 58 : * Non-cluster, non-root: Log error, but leave 59 : * it up to the caller how to proceed. 60 : */ 61 5 : DBG_NOTICE("Unable to initialize messaging context.\n"); 62 : } 63 : } 64 : 65 4367 : return msg_ctx; 66 : } 67 : 68 3643 : void cmdline_messaging_context_free(void) 69 : { 70 3643 : global_messaging_context_free(); 71 3643 : }