summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/rpc_server/rpc_server.c44
-rw-r--r--source3/rpc_server/rpc_server.h21
2 files changed, 65 insertions, 0 deletions
diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c
index 2e6bfa53e2..5136fb82a3 100644
--- a/source3/rpc_server/rpc_server.c
+++ b/source3/rpc_server/rpc_server.c
@@ -36,6 +36,50 @@
#define SERVER_TCP_LOW_PORT 1024
#define SERVER_TCP_HIGH_PORT 1300
+/* the default is "embedded" so this table
+ * lists only daemons that are not using
+ * the default in order to keep enumerating it
+ * in rpc_daemon_type() as short as possible
+ */
+struct rpc_daemon_defaults {
+ const char *name;
+ const char *def_type;
+} rpc_daemon_defaults[] = {
+ { "epmd", "fork" },
+ /* { "spoolssd", "embedded" }, */
+ /* { "lsasd", "embedded" }, */
+
+ { NULL, NULL }
+};
+
+enum rpc_daemon_type_e rpc_daemon_type(const char *name)
+{
+ const char *rpcsrv_type;
+ enum rpc_daemon_type_e type;
+ const char *def;
+ int i;
+
+ def = "embedded";
+ for (i = 0; rpc_daemon_defaults[i].name; i++) {
+ if (strcasecmp_m(name, rpc_daemon_defaults[i].name) == 0) {
+ def = rpc_daemon_defaults[i].def_type;
+ }
+ }
+
+ rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
+ "rpc_daemon", name, def);
+
+ if (strcasecmp_m(rpcsrv_type, "embedded") == 0) {
+ type = RPC_DAEMON_EMBEDDED;
+ } else if (strcasecmp_m(rpcsrv_type, "fork") == 0) {
+ type = RPC_DAEMON_FORK;
+ } else {
+ type = RPC_DAEMON_DISABLED;
+ }
+
+ return type;
+}
+
static NTSTATUS auth_anonymous_session_info(TALLOC_CTX *mem_ctx,
struct auth_session_info **session_info)
{
diff --git a/source3/rpc_server/rpc_server.h b/source3/rpc_server/rpc_server.h
index 1d368c324c..79c15deaed 100644
--- a/source3/rpc_server/rpc_server.h
+++ b/source3/rpc_server/rpc_server.h
@@ -20,6 +20,27 @@
#ifndef _RPC_SERVER_H_
#define _RPC_SERVER_H_
+enum rpc_daemon_type_e {
+ RPC_DAEMON_DISABLED = 0,
+ RPC_DAEMON_EMBEDDED,
+ RPC_DAEMON_FORK
+};
+
+/**
+ * @brief Get the mode in which a server is started.
+ *
+ * @param name Name of the rpc server
+ * @param def_type The default type for the server
+ *
+ * @return The actual configured type.
+ */
+enum rpc_daemon_type_e rpc_daemon_type(const char *name);
+
+#define rpc_epmapper_daemon() rpc_daemon_type("epmd")
+#define rpc_spoolss_daemon() rpc_daemon_type("spoolssd")
+#define rpc_lsasd_daemon() rpc_daemon_type("lsasd")
+
+
struct pipes_struct;
typedef bool (*dcerpc_ncacn_disconnect_fn)(struct pipes_struct *p);