s3: Rename server_messaging_context() to global_messaging_context()
[samba.git] / source3 / lib / cmdline_contexts.c
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
25 struct messaging_context *cmdline_messaging_context(const char *config_file)
26 {
27         struct messaging_context *msg_ctx = NULL;
28
29         /*
30          * Ensure that a config is loaded, in case the underlying
31          * messaging_init needs to create directories or sockets.
32          */
33         if (!lp_loaded()) {
34                 if (!lp_load_initial_only(config_file)) {
35                         return NULL;
36                 }
37         }
38
39         /*
40          * Clustered Samba can only work as root due to required
41          * access to the registry and ctdb, which in turn requires
42          * messaging access as root.
43          */
44         if (lp_clustering() && geteuid() != 0) {
45                 fprintf(stderr, "Cluster mode requires running as root.\n");
46                 exit(1);
47         }
48
49         msg_ctx = global_messaging_context();
50         if (msg_ctx == NULL) {
51                 if (geteuid() == 0) {
52                         fprintf(stderr,
53                                 "Unable to initialize messaging context!\n");
54                         exit(1);
55                 } else {
56                         /*
57                          * Non-cluster, non-root: Log error, but leave
58                          * it up to the caller how to proceed.
59                          */
60                         DBG_NOTICE("Unable to initialize messaging context.\n");
61                 }
62         }
63
64         return msg_ctx;
65 }
66
67 void cmdline_messaging_context_free(void)
68 {
69         global_messaging_context_free();
70 }