Use rpccli_svcctl_OpenSCManagerW() in net.
authorGünther Deschner <gd@samba.org>
Mon, 18 Feb 2008 11:10:54 +0000 (12:10 +0100)
committerGünther Deschner <gd@samba.org>
Mon, 18 Feb 2008 11:10:54 +0000 (12:10 +0100)
Guenther
(This used to be commit 275ce92e277c0d30cfa098e62674111c994aeb4c)

source3/utils/net_rpc_service.c

index 5ad907e8a6365a4e2434dcc77fa9aba33971cd63..789afe234fb2815b4a5465bdcc0c49efa06acea7 100644 (file)
@@ -20,6 +20,9 @@
 #include "utils/net.h"
 
 
+#define CLI_SERVER_NAME_SLASH(_ctx, _p, _cli) \
+       _p = talloc_asprintf(_ctx, "\\\\%s", _cli->cli->desthost);
+
 /********************************************************************
 ********************************************************************/
 
@@ -149,9 +152,11 @@ static NTSTATUS rpc_service_list_internal(const DOM_SID *domain_sid,
        POLICY_HND hSCM;
        ENUM_SERVICES_STATUS *services;
        WERROR result = WERR_GENERAL_FAILURE;
+       NTSTATUS status;
        fstring servicename;
        fstring displayname;
        uint32 num_services = 0;
+       const char *server_name;
        int i;
 
        if (argc != 0 ) {
@@ -159,8 +164,16 @@ static NTSTATUS rpc_service_list_internal(const DOM_SID *domain_sid,
                return NT_STATUS_OK;
        }
 
-       result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
-       if ( !W_ERROR_IS_OK(result) ) {
+       CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
+       NT_STATUS_HAVE_NO_MEMORY(server_name);
+
+       status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
+                                             server_name,
+                                             NULL,
+                                             SC_RIGHT_MGR_ENUMERATE_SERVICE,
+                                             &hSCM,
+                                             &result);
+       if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
                d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
                return werror_to_ntstatus(result);
        }
@@ -202,10 +215,12 @@ static NTSTATUS rpc_service_status_internal(const DOM_SID *domain_sid,
 {
        POLICY_HND hSCM, hService;
        WERROR result = WERR_GENERAL_FAILURE;
+       NTSTATUS status;
        fstring servicename;
        SERVICE_STATUS service_status;
        SERVICE_CONFIG config;
        fstring ascii_string;
+       const char *server_name;
 
        if (argc != 1 ) {
                d_printf("Usage: net rpc service status <service>\n");
@@ -215,9 +230,16 @@ static NTSTATUS rpc_service_status_internal(const DOM_SID *domain_sid,
        fstrcpy( servicename, argv[0] );
 
        /* Open the Service Control Manager */
-
-       result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
-       if ( !W_ERROR_IS_OK(result) ) {
+       CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
+       NT_STATUS_HAVE_NO_MEMORY(server_name);
+
+       status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
+                                             server_name,
+                                             NULL,
+                                             SC_RIGHT_MGR_ENUMERATE_SERVICE,
+                                             &hSCM,
+                                             &result);
+       if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
                d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
                return werror_to_ntstatus(result);
        }
@@ -304,7 +326,9 @@ static NTSTATUS rpc_service_stop_internal(const DOM_SID *domain_sid,
 {
        POLICY_HND hSCM;
        WERROR result = WERR_GENERAL_FAILURE;
+       NTSTATUS status;
        fstring servicename;
+       const char *server_name;
 
        if (argc != 1 ) {
                d_printf("Usage: net rpc service status <service>\n");
@@ -314,9 +338,16 @@ static NTSTATUS rpc_service_stop_internal(const DOM_SID *domain_sid,
        fstrcpy( servicename, argv[0] );
 
        /* Open the Service Control Manager */
-
-       result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
-       if ( !W_ERROR_IS_OK(result) ) {
+       CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
+       NT_STATUS_HAVE_NO_MEMORY(server_name);
+
+       status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
+                                             server_name,
+                                             NULL,
+                                             SC_RIGHT_MGR_ENUMERATE_SERVICE,
+                                             &hSCM,
+                                             &result);
+       if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
                d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
                return werror_to_ntstatus(result);
        }
@@ -342,7 +373,9 @@ static NTSTATUS rpc_service_pause_internal(const DOM_SID *domain_sid,
 {
        POLICY_HND hSCM;
        WERROR result = WERR_GENERAL_FAILURE;
+       NTSTATUS status;
        fstring servicename;
+       const char *server_name;
 
        if (argc != 1 ) {
                d_printf("Usage: net rpc service status <service>\n");
@@ -352,9 +385,16 @@ static NTSTATUS rpc_service_pause_internal(const DOM_SID *domain_sid,
        fstrcpy( servicename, argv[0] );
 
        /* Open the Service Control Manager */
-
-       result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
-       if ( !W_ERROR_IS_OK(result) ) {
+       CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
+       NT_STATUS_HAVE_NO_MEMORY(server_name);
+
+       status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
+                                             server_name,
+                                             NULL,
+                                             SC_RIGHT_MGR_ENUMERATE_SERVICE,
+                                             &hSCM,
+                                             &result);
+       if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
                d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
                return werror_to_ntstatus(result);
        }
@@ -380,7 +420,9 @@ static NTSTATUS rpc_service_resume_internal(const DOM_SID *domain_sid,
 {
        POLICY_HND hSCM;
        WERROR result = WERR_GENERAL_FAILURE;
+       NTSTATUS status;
        fstring servicename;
+       const char *server_name;
 
        if (argc != 1 ) {
                d_printf("Usage: net rpc service status <service>\n");
@@ -390,9 +432,16 @@ static NTSTATUS rpc_service_resume_internal(const DOM_SID *domain_sid,
        fstrcpy( servicename, argv[0] );
 
        /* Open the Service Control Manager */
-
-       result = rpccli_svcctl_open_scm(pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
-       if ( !W_ERROR_IS_OK(result) ) {
+       CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
+       NT_STATUS_HAVE_NO_MEMORY(server_name);
+
+       status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
+                                             server_name,
+                                             NULL,
+                                             SC_RIGHT_MGR_ENUMERATE_SERVICE,
+                                             &hSCM,
+                                             &result);
+       if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
                d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
                return werror_to_ntstatus(result);
        }
@@ -418,8 +467,10 @@ static NTSTATUS rpc_service_start_internal(const DOM_SID *domain_sid,
 {
        POLICY_HND hSCM, hService;
        WERROR result = WERR_GENERAL_FAILURE;
+       NTSTATUS status;
        fstring servicename;
        uint32 state = 0;
+       const char *server_name;
 
        if (argc != 1 ) {
                d_printf("Usage: net rpc service status <service>\n");
@@ -429,9 +480,16 @@ static NTSTATUS rpc_service_start_internal(const DOM_SID *domain_sid,
        fstrcpy( servicename, argv[0] );
 
        /* Open the Service Control Manager */
-
-       result = rpccli_svcctl_open_scm( pipe_hnd, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE  );
-       if ( !W_ERROR_IS_OK(result) ) {
+       CLI_SERVER_NAME_SLASH(mem_ctx, server_name, pipe_hnd);
+       NT_STATUS_HAVE_NO_MEMORY(server_name);
+
+       status = rpccli_svcctl_OpenSCManagerW(pipe_hnd, mem_ctx,
+                                             server_name,
+                                             NULL,
+                                             SC_RIGHT_MGR_ENUMERATE_SERVICE,
+                                             &hSCM,
+                                             &result);
+       if (!NT_STATUS_IS_OK(status) || !W_ERROR_IS_OK(result)) {
                d_fprintf(stderr, "Failed to open Service Control Manager.  [%s]\n", dos_errstr(result));
                return werror_to_ntstatus(result);
        }