X-Git-Url: http://git.samba.org/?p=samba.git;a=blobdiff_plain;f=source%2Frpcclient%2Fcmd_svcctl.c;h=162b0204b71484dbde7dced2fc1e2e3490c91db0;hp=8ee454aaf5eec38a6874886329c61afee3acedcd;hb=f4dd8f6b566961890b2933b7a413241bf9b93797;hpb=0ed70972d72533558f0fdd43e6ec95ac2102b9d0 diff --git a/source/rpcclient/cmd_svcctl.c b/source/rpcclient/cmd_svcctl.c index 8ee454aaf5e..162b0204b71 100644 --- a/source/rpcclient/cmd_svcctl.c +++ b/source/rpcclient/cmd_svcctl.c @@ -46,10 +46,13 @@ void cmd_svc_enum(struct client_info *info) BOOL res1 = True; int i; uint32 resume_hnd = 0; + uint32 buf_size = 0; + uint32 dos_error = 0; ENUM_SRVC_STATUS *svcs = NULL; + uint32 num_svcs = 0; POLICY_HND sc_man_pol; - fstring full_keyname; + fstring srv_name; fstrcpy(srv_name, "\\\\"); @@ -68,50 +71,38 @@ void cmd_svc_enum(struct client_info *info) do { + buf_size += 0x800; + /* enumerate services */ res1 = res ? do_svc_enum_svcs(smb_cli, fnum, &sc_man_pol, 0x00000030, 0x00000003, - 0x00000080, &resume_hnd, &svcs) : False; - - } while (resume_hnd != 0); + &buf_size, &resume_hnd, &dos_error, + &svcs, &num_svcs) : False; - if (svcs != NULL) - { - free(svcs); - } + } while (dos_error == ERRmoredata); -#if 0 - if (res1 && num_subkeys > 0) + if (res1 && dos_error == 0x0 && num_svcs > 0 && svcs != NULL) { - fprintf(out_hnd,"Subkeys\n"); - fprintf(out_hnd,"-------\n"); + fprintf(out_hnd,"Services\n"); + fprintf(out_hnd,"--------\n"); } - for (i = 0; i < num_subkeys; i++) + for (i = 0; i < num_svcs && svcs != NULL; i++) { - BOOL res2 = True; - /* - * enumerate key - */ - - /* enum key */ - res2 = res2 ? do_svc_enum_key(smb_cli, fnum, &key_pol, - i, enum_name, - &enum_unk1, &enum_unk2, - &key_mod_time) : False; - - if (res2) + if (res1) { - display_svc_key_info(out_hnd, ACTION_HEADER , enum_name, key_mod_time); - display_svc_key_info(out_hnd, ACTION_ENUMERATE, enum_name, key_mod_time); - display_svc_key_info(out_hnd, ACTION_FOOTER , enum_name, key_mod_time); + display_svc_info(out_hnd, ACTION_HEADER , &svcs[i]); + display_svc_info(out_hnd, ACTION_ENUMERATE, &svcs[i]); + display_svc_info(out_hnd, ACTION_FOOTER , &svcs[i]); } - } + if (svcs != NULL) + { + free(svcs); } -#endif + res = res ? do_svc_close(smb_cli, fnum, &sc_man_pol) : False; /* close the session */