a706a11cea0e91b4e1fc9bcbd75a47f711560907
[idra/samba.git] / source3 / rpc_server / rpc_config.c
1 /*
2    Unix SMB/Netbios implementation.
3    Generic infrstructure 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
24 /* the default is "embedded" so this table
25  * lists only services that are not using
26  * the default in order to keep enumerating it
27  * in rpc_service_mode() as short as possible
28  */
29 struct rpc_service_defaults {
30         const char *name;
31         const char *def_mode;
32 } rpc_service_defaults[] = {
33         { "epmapper", "external" },
34         /* { "spoolss", "embedded" }, */
35         /* { "lsarpc", "embedded" }, */
36         /* { "samr", "embedded" }, */
37         /* { "netlogon", "embedded" }, */
38
39         { NULL, NULL }
40 };
41
42 enum rpc_service_mode_e rpc_service_mode(const char *name)
43 {
44         const char *rpcsrv_type;
45         enum rpc_service_mode_e state;
46         const char *def;
47         int i;
48
49         def = "embedded";
50         for (i = 0; rpc_service_defaults[i].name; i++) {
51                 if (strcasecmp_m(name, rpc_service_defaults[i].name) == 0) {
52                         def = rpc_service_defaults[i].def_mode;
53                 }
54         }
55
56         rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
57                                            "rpc_server", name, def);
58
59         if (strcasecmp_m(rpcsrv_type, "embedded") == 0) {
60                 state = RPC_SERVICE_MODE_EMBEDDED;
61         } else if (strcasecmp_m(rpcsrv_type, "external") == 0) {
62                 state = RPC_SERVICE_MODE_EXTERNAL;
63         } else if (strcasecmp(rpcsrv_type, "daemon") == 0) {
64                 state = RPC_SERVICE_MODE_DAEMON;
65         } else {
66                 state = RPC_SERVICE_MODE_DISABLED;
67         }
68
69         return state;
70 }
71
72
73 /* the default is "embedded" so this table
74  * lists only daemons that are not using
75  * the default in order to keep enumerating it
76  * in rpc_daemon_type() as short as possible
77  */
78 struct rpc_daemon_defaults {
79         const char *name;
80         const char *def_type;
81 } rpc_daemon_defaults[] = {
82         { "epmd", "fork" },
83         /* { "spoolssd", "embedded" }, */
84         /* { "lsasd", "embedded" }, */
85
86         { NULL, NULL }
87 };
88
89 enum rpc_daemon_type_e rpc_daemon_type(const char *name)
90 {
91         const char *rpcsrv_type;
92         enum rpc_daemon_type_e type;
93         const char *def;
94         int i;
95
96         def = "embedded";
97         for (i = 0; rpc_daemon_defaults[i].name; i++) {
98                 if (strcasecmp_m(name, rpc_daemon_defaults[i].name) == 0) {
99                         def = rpc_daemon_defaults[i].def_type;
100                 }
101         }
102
103         rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
104                                            "rpc_daemon", name, def);
105
106         if (strcasecmp_m(rpcsrv_type, "embedded") == 0) {
107                 type = RPC_DAEMON_EMBEDDED;
108         } else if (strcasecmp_m(rpcsrv_type, "fork") == 0) {
109                 type = RPC_DAEMON_FORK;
110         } else {
111                 type = RPC_DAEMON_DISABLED;
112         }
113
114         return type;
115 }