2 Unix SMB/Netbios implementation.
3 Generic infrstructure for RPC Daemons
4 Copyright (C) Simo Sorce 2011
5 Copyright (C) Andreas Schneider 2011
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.
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.
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/>.
22 #include "rpc_server/rpc_config.h"
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
29 struct rpc_service_defaults
{
32 } rpc_service_defaults
[] = {
33 { "epmapper", "disabled" },
34 /* { "spoolss", "embedded" }, */
35 /* { "lsarpc", "embedded" }, */
36 /* { "samr", "embedded" }, */
37 /* { "netlogon", "embedded" }, */
42 enum rpc_service_mode_e
rpc_service_mode(const char *name
)
44 const char *pipe_name
= name
;
45 const char *rpcsrv_type
;
46 enum rpc_service_mode_e state
;
50 /* Handle pipes with multiple names */
51 if (strcmp(pipe_name
, "lsass") == 0) {
53 } else if (strcmp(pipe_name
, "plugplay") == 0) {
57 def
= lp_parm_const_string(GLOBAL_SECTION_SNUM
,
58 "rpc_server", "default", NULL
);
60 for (i
= 0; rpc_service_defaults
[i
].name
; i
++) {
61 if (strcasecmp_m(pipe_name
, rpc_service_defaults
[i
].name
) == 0) {
62 def
= rpc_service_defaults
[i
].def_mode
;
66 /* if the default is unspecified then use 'embedded' */
72 rpcsrv_type
= lp_parm_const_string(GLOBAL_SECTION_SNUM
,
73 "rpc_server", pipe_name
, def
);
75 if (strcasecmp_m(rpcsrv_type
, "embedded") == 0) {
76 state
= RPC_SERVICE_MODE_EMBEDDED
;
77 } else if (strcasecmp_m(rpcsrv_type
, "external") == 0) {
78 state
= RPC_SERVICE_MODE_EXTERNAL
;
80 state
= RPC_SERVICE_MODE_DISABLED
;
87 /* the default is "embedded" so this table
88 * lists only daemons that are not using
89 * the default in order to keep enumerating it
90 * in rpc_daemon_type() as short as possible
92 struct rpc_daemon_defaults
{
95 } rpc_daemon_defaults
[] = {
96 { "epmd", "disabled" },
97 /* { "spoolssd", "embedded" }, */
98 /* { "lsasd", "embedded" }, */
103 enum rpc_daemon_type_e
rpc_daemon_type(const char *name
)
105 const char *rpcsrv_type
;
106 enum rpc_daemon_type_e type
;
111 for (i
= 0; rpc_daemon_defaults
[i
].name
; i
++) {
112 if (strcasecmp_m(name
, rpc_daemon_defaults
[i
].name
) == 0) {
113 def
= rpc_daemon_defaults
[i
].def_type
;
117 rpcsrv_type
= lp_parm_const_string(GLOBAL_SECTION_SNUM
,
118 "rpc_daemon", name
, def
);
120 if (strcasecmp_m(rpcsrv_type
, "embedded") == 0) {
121 type
= RPC_DAEMON_EMBEDDED
;
122 } else if (strcasecmp_m(rpcsrv_type
, "fork") == 0) {
123 type
= RPC_DAEMON_FORK
;
125 type
= RPC_DAEMON_DISABLED
;