diff options
Diffstat (limited to 'source/utils/smbtree.c')
-rw-r--r-- | source/utils/smbtree.c | 33 |
1 files changed, 16 insertions, 17 deletions
diff --git a/source/utils/smbtree.c b/source/utils/smbtree.c index 5d5a9743d53..7d62d65b056 100644 --- a/source/utils/smbtree.c +++ b/source/utils/smbtree.c @@ -133,12 +133,10 @@ static BOOL get_rpc_shares(struct cli_state *cli, NTSTATUS status; struct rpc_pipe_client *pipe_hnd; TALLOC_CTX *mem_ctx; - uint32 enum_hnd; - struct srvsvc_NetShareCtr1 ctr1; - union srvsvc_NetShareCtr ctr; - uint32 numentries; + ENUM_HND enum_hnd; + WERROR werr; + SRV_SHARE_INFO_CTR ctr; int i; - uint32 info_level = 1; mem_ctx = talloc_new(NULL); if (mem_ctx == NULL) { @@ -146,7 +144,8 @@ static BOOL get_rpc_shares(struct cli_state *cli, return False; } - enum_hnd = 0; + init_enum_hnd(&enum_hnd, 0); + pipe_hnd = cli_rpc_pipe_open_noauth(cli, PI_SRVSVC, &status); if (pipe_hnd == NULL) { @@ -156,23 +155,23 @@ static BOOL get_rpc_shares(struct cli_state *cli, return False; } - ZERO_STRUCT(ctr1); - ctr.ctr1 = &ctr1; - - status = rpccli_srvsvc_NetShareEnum(pipe_hnd, mem_ctx, NULL, - &info_level, &ctr, - 0xffffffff, &numentries, - &enum_hnd); + werr = rpccli_srvsvc_net_share_enum(pipe_hnd, mem_ctx, 1, &ctr, + 0xffffffff, &enum_hnd); - if (!NT_STATUS_IS_OK(status)) { + if (!W_ERROR_IS_OK(werr)) { TALLOC_FREE(mem_ctx); cli_rpc_pipe_close(pipe_hnd); return False; } - for (i=0; i<numentries; i++) { - fn(ctr.ctr1->array[i].name, ctr.ctr1->array[i].type, - ctr.ctr1->array[i].comment, state); + for (i=0; i<ctr.num_entries; i++) { + SRV_SHARE_INFO_1 *info = &ctr.share.info1[i]; + char *name, *comment; + name = rpcstr_pull_unistr2_talloc( + mem_ctx, &info->info_1_str.uni_netname); + comment = rpcstr_pull_unistr2_talloc( + mem_ctx, &info->info_1_str.uni_remark); + fn(name, info->info_1.type, comment, state); } TALLOC_FREE(mem_ctx); |