#include "rpc_server/rpc_service_setup.h"
#include "rpc_server/rpc_ep_register.h"
#include "rpc_server/rpc_server.h"
+#include "rpc_server/rpc_config.h"
#include "rpc_server/epmapper/srv_epmapper.h"
-enum rpc_service_mode_e rpc_epmapper_mode(void)
-{
- const char *rpcsrv_type;
- enum rpc_service_mode_e state;
-
- rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
- "rpc_server",
- "epmapper",
- "daemon");
-
- if (strcasecmp_m(rpcsrv_type, "external") == 0) {
- state = RPC_SERVICE_MODE_EXTERNAL;
- } else if (strcasecmp_m(rpcsrv_type, "daemon") == 0) {
- state = RPC_SERVICE_MODE_DAEMON;
- } else {
- state = RPC_SERVICE_MODE_DISABLED;
- }
-
- return state;
-}
-
-enum rpc_service_mode_e rpc_spoolss_mode(void)
-{
- const char *rpcsrv_type;
- enum rpc_service_mode_e state;
-
- rpcsrv_type = lp_parm_const_string(GLOBAL_SECTION_SNUM,
- "rpc_server",
- "spoolss",
- "embedded");
-
- if (strcasecmp_m(rpcsrv_type, "embedded") == 0) {
- state = RPC_SERVICE_MODE_EMBEDDED;
- } else if (strcasecmp_m(rpcsrv_type, "external") == 0) {
- state = RPC_SERVICE_MODE_EXTERNAL;
- } else if (strcasecmp_m(rpcsrv_type, "daemon") == 0) {
- state = RPC_SERVICE_MODE_DAEMON;
- } else {
- state = RPC_SERVICE_MODE_DISABLED;
- }
-
- return state;
-}
-
static bool rpc_setup_epmapper(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx)
{
enum rpc_service_mode_e epm_mode = rpc_epmapper_mode();
+ enum rpc_daemon_type_e epm_type = rpc_epmapper_daemon();
NTSTATUS status;
- if (epm_mode != RPC_SERVICE_MODE_DISABLED) {
+ if (epm_mode != RPC_SERVICE_MODE_DISABLED &&
+ epm_type != RPC_DAEMON_DISABLED) {
status = rpc_epmapper_init(NULL);
if (!NT_STATUS_IS_OK(status)) {
return false;
const char *pipe_name = "lsarpc";
struct dcerpc_binding_vector *v2;
enum rpc_service_mode_e epm_mode = rpc_epmapper_mode();
+ enum rpc_service_mode_e lsarpc_mode = rpc_lsarpc_mode();
+ enum rpc_daemon_type_e lsasd_type = rpc_lsasd_daemon();
NTSTATUS status;
bool ok;
return false;
}
- if (epm_mode != RPC_SERVICE_MODE_DISABLED) {
+ if (lsarpc_mode == RPC_SERVICE_MODE_EMBEDDED &&
+ lsasd_type != RPC_DAEMON_DISABLED &&
+ epm_mode != RPC_SERVICE_MODE_DISABLED) {
v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
if (v2 == NULL) {
return false;
const char *pipe_name = "samr";
struct dcerpc_binding_vector *v2;
enum rpc_service_mode_e epm_mode = rpc_epmapper_mode();
+ enum rpc_service_mode_e samr_mode = rpc_samr_mode();
+ enum rpc_daemon_type_e lsasd_type = rpc_lsasd_daemon();
NTSTATUS status;
bool ok;
return false;
}
- if (epm_mode != RPC_SERVICE_MODE_DISABLED) {
+ if (samr_mode == RPC_SERVICE_MODE_EMBEDDED &&
+ lsasd_type != RPC_DAEMON_DISABLED &&
+ epm_mode != RPC_SERVICE_MODE_DISABLED) {
v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
if (v2 == NULL) {
return false;
const char *pipe_name = "netlogon";
struct dcerpc_binding_vector *v2;
enum rpc_service_mode_e epm_mode = rpc_epmapper_mode();
+ enum rpc_service_mode_e netlogon_mode = rpc_netlogon_mode();
+ enum rpc_daemon_type_e lsasd_type = rpc_lsasd_daemon();
NTSTATUS status;
bool ok;
return false;
}
- if (epm_mode != RPC_SERVICE_MODE_DISABLED) {
+ if (netlogon_mode == RPC_SERVICE_MODE_EMBEDDED &&
+ lsasd_type != RPC_DAEMON_DISABLED &&
+ epm_mode != RPC_SERVICE_MODE_DISABLED) {
v2 = dcerpc_binding_vector_dup(talloc_tos(), v);
if (v2 == NULL) {
return false;
struct rpc_srv_callbacks spoolss_cb;
struct dcerpc_binding_vector *v;
enum rpc_service_mode_e spoolss_mode = rpc_spoolss_mode();
- NTSTATUS status;
+ enum rpc_daemon_type_e spoolss_type = rpc_spoolss_daemon();
+ NTSTATUS status = NT_STATUS_UNSUCCESSFUL;
if (_lp_disable_spoolss() ||
+ spoolss_type == RPC_DAEMON_DISABLED ||
spoolss_mode == RPC_SERVICE_MODE_DISABLED) {
return true;
}
- if (spoolss_mode == RPC_SERVICE_MODE_EMBEDDED) {
+ if (spoolss_type == RPC_DAEMON_EMBEDDED) {
spoolss_cb.init = spoolss_init_cb;
spoolss_cb.shutdown = spoolss_shutdown_cb;
spoolss_cb.private_data = msg_ctx;
status = rpc_spoolss_init(&spoolss_cb);
- } else if (spoolss_mode == RPC_SERVICE_MODE_EXTERNAL ||
- spoolss_mode == RPC_SERVICE_MODE_DAEMON) {
+ } else if (spoolss_type == RPC_DAEMON_FORK) {
status = rpc_spoolss_init(NULL);
}
if (!NT_STATUS_IS_OK(status)) {
return false;
}
- if (spoolss_mode == RPC_SERVICE_MODE_EMBEDDED) {
+ if (spoolss_type == RPC_DAEMON_EMBEDDED) {
enum rpc_service_mode_e epm_mode = rpc_epmapper_mode();
if (epm_mode != RPC_SERVICE_MODE_DISABLED) {
bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx)
{
+ enum rpc_service_mode_e epm_mode = rpc_epmapper_mode();
struct dcerpc_binding_vector *v;
const char *rpcsrv_type;
TALLOC_CTX *tmp_ctx;
"tcpip",
"no");
- if (strcasecmp_m(rpcsrv_type, "yes") == 0 ||
- strcasecmp_m(rpcsrv_type, "true") == 0) {
+ if ((strcasecmp_m(rpcsrv_type, "yes") == 0 ||
+ strcasecmp_m(rpcsrv_type, "true") == 0)
+ && epm_mode != RPC_SERVICE_MODE_DISABLED) {
status = rpc_setup_tcpip_sockets(ev_ctx,
msg_ctx,
&ndr_table_winreg,