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 1206 : struct messaging_context *cmdline_messaging_context(const char *config_file)
27 : {
28 1206 : 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 1206 : 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 1206 : if (lp_clustering() && geteuid() != 0) {
46 0 : fprintf(stderr, "Cluster mode requires running as root.\n");
47 0 : exit(1);
48 : }
49 :
50 1206 : msg_ctx = global_messaging_context();
51 1206 : if (msg_ctx == NULL) {
52 0 : 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 0 : DBG_NOTICE("Unable to initialize messaging context.\n");
62 : }
63 : }
64 :
65 1206 : return msg_ctx;
66 : }
67 :
68 982 : void cmdline_messaging_context_free(void)
69 : {
70 982 : global_messaging_context_free();
71 982 : }
|