#include "rpc_server/rpc_server.h"
#include "rpc_server/rpc_ep_register.h"
#include "rpc_server/rpc_sock_helper.h"
+#include "rpc_server/rpc_modules.h"
#include "librpc/gen_ndr/srv_mdssvc.h"
#include "rpc_server/mdssvc/srv_mdssvc_nt.h"
void *siginfo,
void *private_data)
{
- rpc_mdssvc_shutdown();
+ shutdown_rpc_module("mdssvc");
DEBUG(0, ("termination signal\n"));
exit(0);
messaging_register(msg_ctx, ev_ctx,
MSG_PREFORK_PARENT_EVENT, parent_ping);
- status = rpc_mdssvc_init(NULL);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0, ("Failed to intialize RPC: %s\n",
- nt_errstr(status)));
+ ok = init_rpc_module("mdssvc", NULL);
+ if (!ok) {
+ DBG_ERR("Failed to de-intialize RPC\n");
return false;
}
return ok;
}
-static bool mdssvc_init_cb(void *ptr)
-{
- struct messaging_context *msg_ctx =
- talloc_get_type_abort(ptr, struct messaging_context);
- bool ok;
-
- ok = init_service_mdssvc(msg_ctx);
- if (!ok) {
- return false;
- }
-
- return true;
-}
-
-static bool mdssvc_shutdown_cb(void *ptr)
-{
- shutdown_service_mdssvc();
-
- return true;
-}
-
void start_mdssd(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx)
{
pid_t pid;
int rc;
bool ok;
- struct rpc_srv_callbacks mdssvc_cb;
DEBUG(1, ("Forking Metadata Service Daemon\n"));
messaging_register(msg_ctx, ev_ctx,
MSG_PREFORK_CHILD_EVENT, child_ping);
- mdssvc_cb.init = mdssvc_init_cb;
- mdssvc_cb.shutdown = mdssvc_shutdown_cb;
- mdssvc_cb.private_data = msg_ctx;
-
- status = rpc_mdssvc_init(&mdssvc_cb);
- if (!NT_STATUS_IS_OK(status)) {
+ ok = setup_rpc_module(ev_ctx, msg_ctx, "mdssvc");
+ if (!ok) {
exit(1);
}
#include "includes.h"
#include "ntdomain.h"
+#include "rpc_server/rpc_service_setup.h"
+#include "rpc_server/rpc_config.h"
+#include "rpc_server/rpc_modules.h"
#include "rpc_server/mdssvc/srv_mdssvc_nt.h"
#include "../librpc/gen_ndr/srv_mdssvc.h"
#include "libcli/security/security_token.h"
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_RPC_SRV
+static bool mdssvc_init_cb(void *ptr)
+{
+ struct messaging_context *msg_ctx =
+ talloc_get_type_abort(ptr, struct messaging_context);
+ bool ok;
+
+ ok = init_service_mdssvc(msg_ctx);
+ if (!ok) {
+ return false;
+ }
+
+ return true;
+}
+
+static bool mdssvc_shutdown_cb(void *ptr)
+{
+ shutdown_service_mdssvc();
+
+ return true;
+}
+
+static bool rpc_setup_mdssvc(struct tevent_context *ev_ctx,
+ struct messaging_context *msg_ctx)
+{
+ const struct ndr_interface_table *t = &ndr_table_mdssvc;
+ const char *pipe_name = "mdssvc";
+ struct rpc_srv_callbacks mdssvc_cb;
+ NTSTATUS status;
+ enum rpc_service_mode_e service_mode = rpc_service_mode(t->name);
+ enum rpc_daemon_type_e mdssvc_type = rpc_mdssd_daemon();
+
+ mdssvc_cb.init = mdssvc_init_cb;
+ mdssvc_cb.shutdown = mdssvc_shutdown_cb;
+ mdssvc_cb.private_data = msg_ctx;
+
+ status = rpc_mdssvc_init(&mdssvc_cb);
+ if (!NT_STATUS_IS_OK(status)) {
+ return false;
+ }
+
+ if (service_mode != RPC_SERVICE_MODE_EMBEDDED
+ || mdssvc_type != RPC_DAEMON_EMBEDDED) {
+ return true;
+ }
+
+ return rpc_setup_embedded(ev_ctx, msg_ctx, t, pipe_name);
+}
+
+static struct rpc_module_fns rpc_module_mdssvc_fns = {
+ .setup = rpc_setup_mdssvc,
+ .init = rpc_mdssvc_init,
+ .shutdown = rpc_mdssvc_shutdown,
+};
+
+static_decl_rpc;
+NTSTATUS rpc_mdssvc_module_init(void)
+{
+ DBG_DEBUG("Registering mdsvc RPC service\n");
+
+ return register_rpc_module(&rpc_module_mdssvc_fns, "mdssvc");
+}
+
+
bool init_service_mdssvc(struct messaging_context *msg_ctx)
{
return mds_init(msg_ctx);
#include "../librpc/gen_ndr/srv_spoolss.h"
#include "../librpc/gen_ndr/srv_svcctl.h"
#include "../librpc/gen_ndr/srv_wkssvc.h"
-#include "../librpc/gen_ndr/srv_mdssvc.h"
#include "printing/nt_printing_migrate_internal.h"
#include "rpc_server/eventlog/srv_eventlog_reg.h"
#include "rpc_server/svcctl/srv_svcctl_reg.h"
#include "rpc_server/spoolss/srv_spoolss_nt.h"
#include "rpc_server/svcctl/srv_svcctl_nt.h"
-#include "rpc_server/mdssvc/srv_mdssvc_nt.h"
#include "librpc/rpc/dcerpc_ep.h"
#include "rpc_server/rpc_sock_helper.h"
return rpc_setup_embedded(ev_ctx, msg_ctx, t, NULL);
}
-#ifdef WITH_SPOTLIGHT
-static bool mdssvc_init_cb(void *ptr)
-{
- struct messaging_context *msg_ctx =
- talloc_get_type_abort(ptr, struct messaging_context);
- bool ok;
-
- ok = init_service_mdssvc(msg_ctx);
- if (!ok) {
- return false;
- }
-
- return true;
-}
-
-static bool mdssvc_shutdown_cb(void *ptr)
-{
- shutdown_service_mdssvc();
-
- return true;
-}
-
-static bool rpc_setup_mdssvc(struct tevent_context *ev_ctx,
- struct messaging_context *msg_ctx)
-{
- const struct ndr_interface_table *t = &ndr_table_mdssvc;
- const char *pipe_name = "mdssvc";
- struct rpc_srv_callbacks mdssvc_cb;
- NTSTATUS status;
- enum rpc_service_mode_e service_mode = rpc_service_mode(t->name);
- enum rpc_daemon_type_e mdssvc_type = rpc_mdssd_daemon();
-
- if (service_mode != RPC_SERVICE_MODE_EMBEDDED
- || mdssvc_type != RPC_DAEMON_EMBEDDED) {
- return true;
- }
-
- mdssvc_cb.init = mdssvc_init_cb;
- mdssvc_cb.shutdown = mdssvc_shutdown_cb;
- mdssvc_cb.private_data = msg_ctx;
-
- status = rpc_mdssvc_init(&mdssvc_cb);
- if (!NT_STATUS_IS_OK(status)) {
- return false;
- }
-
- return rpc_setup_embedded(ev_ctx, msg_ctx, t, pipe_name);
-}
-#endif
-
bool dcesrv_ep_setup(struct tevent_context *ev_ctx,
struct messaging_context *msg_ctx)
{
goto done;
}
-#ifdef WITH_SPOTLIGHT
- ok = rpc_setup_mdssvc(ev_ctx, msg_ctx);
- if (!ok) {
- goto done;
- }
-#endif
-
/* Initialize static subsystems */
static_init_rpc;
../../librpc/gen_ndr/srv_wkssvc.c''',
deps='LIBNET')
-bld.SAMBA3_SUBSYSTEM('RPC_MDSSVC',
- source='''mdssvc/mdssvc.c
- mdssvc/dalloc.c
- mdssvc/marshalling.c
- mdssvc/sparql_mapping.c
- mdssvc/sparql_parser.c
- mdssvc/sparql_lexer.c
- mdssvc/srv_mdssvc_nt.c
- ../../librpc/gen_ndr/srv_mdssvc.c''',
- deps='samba-util ' + bld.env['libtracker'],
- enabled=bld.env.with_spotlight)
+bld.SAMBA3_MODULE('rpc_mdssvc_module',
+ subsystem='rpc',
+ allow_undefined_symbols=True,
+ source='''mdssvc/mdssvc.c
+ mdssvc/dalloc.c
+ mdssvc/marshalling.c
+ mdssvc/sparql_mapping.c
+ mdssvc/sparql_parser.c
+ mdssvc/sparql_lexer.c
+ mdssvc/srv_mdssvc_nt.c
+ ../../librpc/gen_ndr/srv_mdssvc.c''',
+ init_function='',
+ deps='samba-util ' + bld.env['libtracker'],
+ internal_module=bld.SAMBA3_IS_STATIC_MODULE('rpc_mdssvc_module'),
+ enabled=bld.SAMBA3_IS_ENABLED_MODULE('rpc_mdssvc_module'))
# RPC_SERVICE
bld.SAMBA3_SUBSYSTEM('RPC_SERVER_REGISTER',
RPC_SERVER
RPC_EPMAPPER
RPC_FSS_AGENT
- RPC_MDSSVC
''')
# RPC_DAEMONS
deps='samba-util')
bld.SAMBA3_SUBSYSTEM('MDSSD',
- source='mdssd.c',
+ source='mdssd.c rpc_modules.c',
deps='RPC_SOCK_HELPER samba-util',
enabled=bld.env.with_spotlight)
if not conf.env.with_spotlight:
conf.fatal("Spotlight support requested but tracker-sparql library missing")
Logs.info("building with Spotlight support")
+ default_static_modules.extend(TO_LIST('rpc_mdssvc_module'))
forced_static_modules.extend(TO_LIST('auth_domain auth_builtin auth_sam auth_winbind'))
default_static_modules.extend(TO_LIST('''pdb_smbpasswd pdb_tdbsam pdb_wbc_sam