summaryrefslogtreecommitdiff
path: root/source3/rpcclient/cmd_svcctl.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/rpcclient/cmd_svcctl.c')
-rw-r--r--source3/rpcclient/cmd_svcctl.c51
1 files changed, 21 insertions, 30 deletions
diff --git a/source3/rpcclient/cmd_svcctl.c b/source3/rpcclient/cmd_svcctl.c
index 8ee454aaf5..162b0204b7 100644
--- a/source3/rpcclient/cmd_svcctl.c
+++ b/source3/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 */