s3:rpc_server/netlogon: make usage of session_extract_session_key()
[kai/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", "disabled" },
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 *pipe_name = name;
45         const char *rpcsrv_type;
46         enum rpc_service_mode_e state;
47         const char *def;
48         int i;
49
50         /* Handle pipes with multiple names */
51         if (strcmp(pipe_name, "lsass") == 0) {
52                 pipe_name = "lsarpc";
53         } else if (strcmp(pipe_name, "plugplay") == 0) {
54                 pipe_name = "ntsvcs";
55         }
56
57         def = lp_parm_const_string(GLOBAL_SECTION_SNUM,
58                                    "rpc_server", "default", NULL);
59         if (def == 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;
63                                 break;
64                         }
65                 }
66                 /* if the default is unspecified then use 'embedded' */
67                 if (def == NULL) {
68                         def = "embedded";
69                 }
70         }
71
72         rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
73                                            "rpc_server", pipe_name, def);
74
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;
79         } else {
80                 state = RPC_SERVICE_MODE_DISABLED;
81         }
82
83         return state;
84 }
85
86
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
91  */
92 struct rpc_daemon_defaults {
93         const char *name;
94         const char *def_type;
95 } rpc_daemon_defaults[] = {
96         { "epmd", "disabled" },
97         /* { "spoolssd", "embedded" }, */
98         /* { "lsasd", "embedded" }, */
99
100         { NULL, NULL }
101 };
102
103 enum rpc_daemon_type_e rpc_daemon_type(const char *name)
104 {
105         const char *rpcsrv_type;
106         enum rpc_daemon_type_e type;
107         const char *def;
108         int i;
109
110         def = "embedded";
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;
114                 }
115         }
116
117         rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
118                                            "rpc_daemon", name, def);
119
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;
124         } else {
125                 type = RPC_DAEMON_DISABLED;
126         }
127
128         return type;
129 }