diff options
Diffstat (limited to 'source3/rpcclient/cmd_svcctl.c')
-rw-r--r-- | source3/rpcclient/cmd_svcctl.c | 407 |
1 files changed, 0 insertions, 407 deletions
diff --git a/source3/rpcclient/cmd_svcctl.c b/source3/rpcclient/cmd_svcctl.c deleted file mode 100644 index d118a7d15d..0000000000 --- a/source3/rpcclient/cmd_svcctl.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - Unix SMB/Netbios implementation. - Version 1.9. - NT Domain Authentication SMB / MSRPC client - Copyright (C) Andrew Tridgell 1994-1997 - Copyright (C) Luke Kenneth Casson Leighton 1996-1997 - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -*/ - - - -#ifdef SYSLOG -#undef SYSLOG -#endif - -#include "includes.h" -#include "nterr.h" - -extern int DEBUGLEVEL; - -extern FILE* out_hnd; - -void svc_display_query_svc_cfg(const QUERY_SERVICE_CONFIG *cfg) -{ - display_query_svc_cfg(out_hnd, ACTION_HEADER , cfg); - display_query_svc_cfg(out_hnd, ACTION_ENUMERATE, cfg); - display_query_svc_cfg(out_hnd, ACTION_FOOTER , cfg); -} - -BOOL svc_query_service( POLICY_HND *pol_scm, - const char *svc_name, - SVC_QUERY_FN(svc_query_fn)) -{ - BOOL res2 = True; - BOOL res3; - POLICY_HND pol_svc; - QUERY_SERVICE_CONFIG cfg; - uint32 svc_buf_size = 0x8000; - - res2 = res2 ? svc_open_service( pol_scm, - svc_name, 0x80000001, - &pol_svc) : False; - res3 = res2 ? svc_query_svc_cfg( &pol_svc, &cfg, - &svc_buf_size) : False; - - if (res3 && svc_query_fn != NULL) - { - svc_query_fn(&cfg); - } - - res2 = res2 ? svc_close(&pol_svc) : False; - - return res3; -} - -/**************************************************************************** -nt service info -****************************************************************************/ -void cmd_svc_info(struct client_info *info, int argc, char *argv[]) -{ - BOOL res = True; - BOOL res1 = True; - char *svc_name; - - POLICY_HND pol_scm; - - fstring srv_name; - - fstrcpy(srv_name, "\\\\"); - fstrcat(srv_name, info->dest_host); - strupper(srv_name); - - DEBUG(4,("cmd_svc_info: server:%s\n", srv_name)); - - if (argc < 2) - { - report(out_hnd,"svcinfo <service name>\n"); - return; - } - - svc_name = argv[1]; - - /* open service control manager receive a policy handle */ - res = res ? svc_open_sc_man( srv_name, NULL, 0x80000004, - &pol_scm) : False; - - res1 = svc_query_service(&pol_scm, svc_name, - svc_display_query_svc_cfg); - - res = res ? svc_close(&pol_scm) : False; - - if (res && res1) - { - DEBUG(5,("cmd_svc_info: query succeeded\n")); - } - else - { - DEBUG(5,("cmd_svc_info: query failed\n")); - } -} - -static void svc_display_svc_info(const ENUM_SRVC_STATUS *svc) -{ - display_svc_info(out_hnd, ACTION_HEADER , svc); - display_svc_info(out_hnd, ACTION_ENUMERATE, svc); - display_svc_info(out_hnd, ACTION_FOOTER , svc); -} - -/**************************************************************************** -nt service enum -****************************************************************************/ -BOOL msrpc_svc_enum(const char* srv_name, - ENUM_SRVC_STATUS **svcs, - uint32 *num_svcs, - SVC_INFO_FN(info_fn), - SVC_QUERY_FN(query_fn)) -{ - BOOL res = True; - BOOL res1 = False; - int i; - uint32 resume_hnd = 0; - uint32 buf_size = 0; - uint32 dos_error = 0; - - POLICY_HND pol_scm; - - (*svcs) = NULL; - (*num_svcs) = 0; - - /* open service control manager receive a policy handle */ - res = res ? svc_open_sc_man( srv_name, NULL, 0x80000004, - &pol_scm) : False; - - do - { - if ((*svcs) != NULL) - { - free(*svcs); - (*svcs) = NULL; - (*num_svcs) = 0; - } - - buf_size += 0x800; - - /* enumerate services */ - res1 = res ? svc_enum_svcs( &pol_scm, - 0x00000030, 0x00000003, - &buf_size, &resume_hnd, &dos_error, - svcs, num_svcs) : False; - - } while (res1 && dos_error == ERRmoredata); - - for (i = 0; i < (*num_svcs) && (*svcs) != NULL && res1; i++) - { - fstring svc_name; - - unistr_to_ascii(svc_name, (*svcs)[i].uni_srvc_name.buffer, - sizeof(svc_name)-1); - - if (query_fn != NULL) - { - res1 = svc_query_service(&pol_scm, - svc_name, query_fn); - } - else if (info_fn != NULL) - { - info_fn(&(*svcs)[i]); - } - } - - res = res ? svc_close(&pol_scm) : False; - - return res1; -} - -/**************************************************************************** -nt service enum -****************************************************************************/ -void cmd_svc_enum(struct client_info *info, int argc, char *argv[]) -{ - ENUM_SRVC_STATUS *svcs = NULL; - uint32 num_svcs = 0; - BOOL request_info = False; - int opt; - fstring srv_name; - - fstrcpy(srv_name, "\\\\"); - fstrcat(srv_name, info->dest_host); - strupper(srv_name); - - while ((opt = getopt(argc, argv,"i")) != EOF) - { - switch (opt) - { - case 'i': - { - request_info = True; - break; - } - } - } - - report(out_hnd,"Services\n"); - report(out_hnd,"--------\n"); - - msrpc_svc_enum(srv_name, &svcs, &num_svcs, - request_info ? NULL : svc_display_svc_info, - request_info ? svc_display_query_svc_cfg : NULL); - - if (svcs != NULL) - { - free(svcs); - } -} - -/**************************************************************************** -nt stop service -****************************************************************************/ -void cmd_svc_stop(struct client_info *info, int argc, char *argv[]) -{ - BOOL res = True; - BOOL res1 = True; - char *svc_name; - BOOL res2 = True; - POLICY_HND pol_svc; - POLICY_HND pol_scm; - - fstring srv_name; - - fstrcpy(srv_name, "\\\\"); - fstrcat(srv_name, info->dest_host); - strupper(srv_name); - - DEBUG(4,("cmd_svc_stop: server:%s\n", srv_name)); - - if (argc < 2) - { - report(out_hnd,"svcstop <service name>\n"); - return; - } - - svc_name = argv[1]; - - /* open service control manager receive a policy handle */ - res = res ? svc_open_sc_man( srv_name, NULL, 0x80000000, - &pol_scm) : False; - - res1 = res ? svc_open_service( &pol_scm, - svc_name, 0x00000020, - &pol_svc) : False; - res2 = res1 ? svc_stop_service(&pol_svc, 0x1) : False; - - res1 = res1 ? svc_close(&pol_svc) : False; - res = res ? svc_close(&pol_scm) : False; - - if (res2) - { - report(out_hnd,"Stopped Service %s\n", svc_name); - DEBUG(5,("cmd_svc_stop: succeeded\n")); - } - else - report(out_hnd,"Failed Service Stopped (%s)\n", svc_name); - { - DEBUG(5,("cmd_svc_stop: failed\n")); - } -} - -/**************************************************************************** -nt start service -****************************************************************************/ -void cmd_svc_start(struct client_info *info, int argc, char *argv[]) -{ - BOOL res = True; - BOOL res1 = True; - char *svc_name; - BOOL res2 = True; - POLICY_HND pol_svc; - POLICY_HND pol_scm; - - fstring srv_name; - - fstrcpy(srv_name, "\\\\"); - fstrcat(srv_name, info->dest_host); - strupper(srv_name); - - DEBUG(4,("cmd_svc_start: server:%s\n", srv_name)); - - if (argc < 2) - { - report(out_hnd,"svcstart <service name> [arg 0] [arg 1]...]\n"); - return; - } - - argv++; - argc--; - - svc_name = argv[0]; - - argv++; - argc--; - - /* open service control manager receive a policy handle */ - res = res ? svc_open_sc_man( srv_name, NULL, 0x80000000, - &pol_scm) : False; - - res1 = res ? svc_open_service( &pol_scm, - svc_name, 0x80000010, - &pol_svc) : False; - res2 = res1 ? svc_start_service( &pol_svc, argc, argv) : False; - - res1 = res1 ? svc_close(&pol_svc) : False; - res = res ? svc_close(&pol_scm) : False; - - if (res2) - { - report(out_hnd,"Started Service %s\n", svc_name); - DEBUG(5,("cmd_svc_start: succeeded\n")); - } - else - report(out_hnd,"Failed Service Startup (%s)\n", svc_name); - { - DEBUG(5,("cmd_svc_start: failed\n")); - } -} - -/**************************************************************************** -nt service set -****************************************************************************/ -void cmd_svc_set(struct client_info *info, int argc, char *argv[]) -{ - BOOL res = True; - BOOL res2 = True; - BOOL res3; - POLICY_HND pol_svc; - QUERY_SERVICE_CONFIG cfg; - uint32 svc_buf_size = 0x8000; - - char *svc_name; - - POLICY_HND pol_scm; - - fstring srv_name; - - fstrcpy(srv_name, "\\\\"); - fstrcat(srv_name, info->dest_host); - strupper(srv_name); - - DEBUG(4,("cmd_svc_set: server:%s\n", srv_name)); - - if (argc < 2) - { - report(out_hnd,"svcset <service name>\n"); - return; - } - - svc_name = argv[1]; - - /* open service control manager receive a policy handle */ - res = res ? svc_open_sc_man( srv_name, NULL, 0x80000004, - &pol_scm) : False; - - res2 = res ? svc_open_service( &pol_scm, - svc_name, 0x80000001, - &pol_svc) : False; - res3 = res2 ? svc_query_svc_cfg( &pol_svc, &cfg, - &svc_buf_size) : False; - - if (res3) - { - res3 = svc_change_svc_cfg(&pol_svc, - cfg.service_type, - cfg.start_type, - 0xffffffff, - 0, - NULL, NULL, - cfg.tag_id, - NULL, "administrator", NULL, NULL); - - } - - res2 = res2 ? svc_close(&pol_svc) : False; - - res = res ? svc_close(&pol_scm) : False; - - if (res3) - { - DEBUG(5,("cmd_svc_set: change succeeded\n")); - } - else - { - DEBUG(5,("cmd_svc_set: change failed\n")); - } -} - |