s3-smbd: Init the svcctl registry keys on service startup.
authorAndreas Schneider <asn@samba.org>
Tue, 1 Feb 2011 10:50:10 +0000 (11:50 +0100)
committerGünther Deschner <gd@samba.org>
Mon, 7 Feb 2011 11:32:01 +0000 (12:32 +0100)
Signed-off-by: Günther Deschner <gd@samba.org>
source3/registry/reg_init_full.c
source3/rpc_server/srv_rpc_register.c

index 39ce8f348b3c00cc3f0d757f74094add887f9a42..f14ffd0709d5b47562fb7e441c233f940185b4ff 100644 (file)
@@ -96,8 +96,6 @@ WERROR registry_init_full(void)
                reghook_dump_cache(20);
 
        /* add any keys for other services */
-
-       svcctl_init_keys();
        perfcount_init_keys();
 
 fail:
index 1e938622c218f6439f93c119fa399d5d0879714d..8cb6e8e33476eed9c0149c4f6607be790f867e3d 100644 (file)
@@ -39,6 +39,7 @@
 
 #include "printing/nt_printing_migrate.h"
 #include "rpc_server/srv_eventlog_reg.h"
+#include "rpc_server/srv_svcctl_reg.h"
 
 #include "librpc/rpc/dcerpc_ep.h"
 
@@ -192,11 +193,25 @@ static bool spoolss_shutdown_cb(void *ptr)
 
 static bool svcctl_init_cb(void *ptr)
 {
+       struct messaging_context *msg_ctx = talloc_get_type_abort(
+               ptr, struct messaging_context);
+       bool ok;
+
+       ok = svcctl_init_winreg(msg_ctx);
+       if (!ok) {
+               return false;
+       }
+
+       /* initialize the control hooks */
+       init_service_op_table();
+
        return NT_STATUS_IS_OK(_rpc_ep_register(&ndr_table_svcctl, "svcctl"));
 }
 
 static bool svcctl_shutdown_cb(void *ptr)
 {
+       shutdown_service_op_table();
+
        return NT_STATUS_IS_OK(_rpc_ep_unregister(&ndr_table_svcctl));
 }
 
@@ -351,7 +366,7 @@ bool srv_rpc_register(struct messaging_context *msg_ctx) {
 
        svcctl_cb.init         = svcctl_init_cb;
        svcctl_cb.shutdown     = svcctl_shutdown_cb;
-       svcctl_cb.private_data = NULL;
+       svcctl_cb.private_data = msg_ctx;
        if (!NT_STATUS_IS_OK(rpc_svcctl_init(&svcctl_cb))) {
                return false;
        }