diff options
author | Gerald Carter <jerry@samba.org> | 2005-03-24 18:05:31 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 10:56:18 -0500 |
commit | 9d009834a63e45e8a348419d4f5313757cff8c8d (patch) | |
tree | d0665f66b8d8273879564e0b64c8df7f7df23741 /source3/utils | |
parent | eb1adc527bb1b01f28fa86e7caa66c85181df764 (diff) | |
download | samba-9d009834a63e45e8a348419d4f5313757cff8c8d.tar.gz samba-9d009834a63e45e8a348419d4f5313757cff8c8d.tar.bz2 samba-9d009834a63e45e8a348419d4f5313757cff8c8d.zip |
r6040: finish out 'net rpc service list'
(This used to be commit 42588ba50cb1b47a00f3e0bed33ca3431eb8af14)
Diffstat (limited to 'source3/utils')
-rw-r--r-- | source3/utils/net_rpc_service.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/source3/utils/net_rpc_service.c b/source3/utils/net_rpc_service.c index 98711c95b6..3d6bf7617c 100644 --- a/source3/utils/net_rpc_service.c +++ b/source3/utils/net_rpc_service.c @@ -28,25 +28,46 @@ static NTSTATUS rpc_service_list_internal( const DOM_SID *domain_sid, const char int argc, const char **argv ) { POLICY_HND hSCM; + ENUM_SERVICES_STATUS *services; WERROR result = WERR_GENERAL_FAILURE; + fstring servicename; + fstring displayname; + uint32 num_services = 0; + int i; if (argc != 0 ) { d_printf("Usage: net rpc service list\n"); return NT_STATUS_OK; } - if ( !W_ERROR_IS_OK(result = cli_svcctl_open_scm( cli, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE )) ) { + result = cli_svcctl_open_scm( cli, mem_ctx, &hSCM, SC_RIGHT_MGR_ENUMERATE_SERVICE ); + if ( !W_ERROR_IS_OK(result) ) { d_printf("Failed to open Service Control Manager. [%s]\n", dos_errstr(result)); return werror_to_ntstatus(result); } - d_printf("Successfully opened Service Control Manager.\n"); + result = cli_svcctl_enumerate_services( cli, mem_ctx, &hSCM, SVCCTL_TYPE_WIN32, + SVCCTL_STATE_ALL, &num_services, &services ); + if ( !W_ERROR_IS_OK(result) ) { + d_printf("Failed to enumerate services. [%s]\n", dos_errstr(result)); + goto done; + } + if ( num_services == 0 ) + d_printf("No services returned\n"); + for ( i=0; i<num_services; i++ ) { + rpcstr_pull( servicename, services[i].servicename.buffer, sizeof(servicename), -1, STR_TERMINATE ); + rpcstr_pull( displayname, services[i].displayname.buffer, sizeof(displayname), -1, STR_TERMINATE ); + + d_printf("%s (%s)\n", displayname, servicename); + } + +done: close_service_handle( cli, mem_ctx, &hSCM ); - return NT_STATUS_OK; + return werror_to_ntstatus(result); } |