Author: gd Date: 2006-08-08 11:45:57 +0000 (Tue, 08 Aug 2006) New Revision: 17454
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=17454 Log: Adding dfs_EnumEx for rpcclient (Samba4 IDL to follow). Guenther Modified: branches/SAMBA_3_0/source/include/rpc_dfs.h branches/SAMBA_3_0/source/rpc_client/cli_dfs.c branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c Changeset: Modified: branches/SAMBA_3_0/source/include/rpc_dfs.h =================================================================== --- branches/SAMBA_3_0/source/include/rpc_dfs.h 2006-08-08 11:00:16 UTC (rev 17453) +++ branches/SAMBA_3_0/source/include/rpc_dfs.h 2006-08-08 11:45:57 UTC (rev 17454) @@ -376,10 +376,21 @@ } NETDFS_R_DFS_REMOVE2; typedef struct netdfs_q_dfs_EnumEx { - uint32 dummy; + uint32 ptr0_dfs_name; + UNISTR2 dfs_name; + uint32 level; + uint32 bufsize; + uint32 ptr0_info; + NETDFS_DFS_ENUMSTRUCT info; + uint32 ptr0_total; + uint32 total; } NETDFS_Q_DFS_ENUMEX; typedef struct netdfs_r_dfs_EnumEx { + uint32 ptr0_info; + NETDFS_DFS_ENUMSTRUCT info; + uint32 ptr0_total; + uint32 total; WERROR status; } NETDFS_R_DFS_ENUMEX; Modified: branches/SAMBA_3_0/source/rpc_client/cli_dfs.c =================================================================== --- branches/SAMBA_3_0/source/rpc_client/cli_dfs.c 2006-08-08 11:00:16 UTC (rev 17453) +++ branches/SAMBA_3_0/source/rpc_client/cli_dfs.c 2006-08-08 11:45:57 UTC (rev 17454) @@ -576,7 +576,7 @@ return werror_to_ntstatus(r.status); } -NTSTATUS rpccli_dfs_EnumEx(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx) +NTSTATUS rpccli_dfs_EnumEx(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total, const char *dfs_name) { prs_struct qbuf, rbuf; NETDFS_Q_DFS_ENUMEX q; @@ -587,7 +587,7 @@ /* Marshall data and send request */ - if (!init_netdfs_q_dfs_EnumEx(&q)) + if (!init_netdfs_q_dfs_EnumEx(&q, level, bufsize, info, total, dfs_name)) return NT_STATUS_INVALID_PARAMETER; CLI_DO_RPC(cli, mem_ctx, PI_NETDFS, DFS_ENUMEX, Modified: branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c =================================================================== --- branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c 2006-08-08 11:00:16 UTC (rev 17453) +++ branches/SAMBA_3_0/source/rpc_parse/parse_dfs.c 2006-08-08 11:45:57 UTC (rev 17454) @@ -2569,10 +2569,33 @@ return True; } -BOOL init_netdfs_q_dfs_EnumEx(NETDFS_Q_DFS_ENUMEX *v) +BOOL init_netdfs_q_dfs_EnumEx(NETDFS_Q_DFS_ENUMEX *v, uint32 level, uint32 bufsize, NETDFS_DFS_ENUMSTRUCT *info, uint32 *total, const char *dfs_name) { DEBUG(5,("init_netdfs_q_dfs_EnumEx\n")); + + if (!dfs_name) + return False; + init_unistr2(&v->dfs_name, dfs_name, UNI_FLAGS_NONE|UNI_STR_TERMINATE); + + v->level = level; + + v->bufsize = bufsize; + + if (info) { + v->ptr0_info = 1; + v->info = *info; + } else { + v->ptr0_info = 0; + } + + if (total) { + v->ptr0_total = 1; + v->total = *total; + } else { + v->ptr0_total = 0; + } + return True; } @@ -2583,6 +2606,42 @@ prs_debug(ps, depth, desc, "netdfs_io_q_dfs_EnumEx"); depth++; + if (!prs_align_custom(ps, 4)) + return False; + + if (!smb_io_unistr2("dfs_name", &v->dfs_name, 1, ps, depth)) + return False; + + if (!prs_align_custom(ps, 4)) + return False; + + if (!prs_uint32("level", ps, depth, &v->level)) + return False; + + if (!prs_uint32("bufsize", ps, depth, &v->bufsize)) + return False; + + if (!prs_uint32("ptr0_info", ps, depth, &v->ptr0_info)) + return False; + + if (v->ptr0_info) { + if (!netdfs_io_dfs_EnumStruct_p("info", &v->info, ps, depth)) + return False; + if (!netdfs_io_dfs_EnumStruct_d("info", &v->info, ps, depth)) + return False; + } + + if (!prs_align_custom(ps, 4)) + return False; + + if (!prs_uint32("ptr0_total", ps, depth, &v->ptr0_total)) + return False; + + if (v->ptr0_total) { + if (!prs_uint32("total", ps, depth, &v->total)) + return False; + } + return True; } @@ -2602,10 +2661,39 @@ prs_debug(ps, depth, desc, "netdfs_io_r_dfs_EnumEx"); depth++; + if (!prs_uint32("ptr0_info", ps, depth, &v->ptr0_info)) + return False; + + if (v->ptr0_info) { + if (!netdfs_io_dfs_EnumStruct_p("info", &v->info, ps, depth)) + return False; + if (!netdfs_io_dfs_EnumStruct_d("info", &v->info, ps, depth)) + return False; + } + + if (!prs_align_custom(ps, 4)) + return False; + + if (!prs_uint32("ptr0_total", ps, depth, &v->ptr0_total)) + return False; + + if (v->ptr0_total) { + if (!prs_uint32("total", ps, depth, &v->total)) + return False; + } + + if (!prs_align_custom(ps, 4)) + return False; + if (!prs_werror("status", ps, depth, &v->status)) return False; return True; + + if (!prs_werror("status", ps, depth, &v->status)) + return False; + + return True; } BOOL init_netdfs_q_dfs_SetInfo2(NETDFS_Q_DFS_SETINFO2 *v) Modified: branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c =================================================================== --- branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c 2006-08-08 11:00:16 UTC (rev 17453) +++ branches/SAMBA_3_0/source/rpcclient/cmd_dfs.c 2006-08-08 11:45:57 UTC (rev 17454) @@ -212,6 +212,38 @@ return result; } +/* Enumerate dfs shares */ + +static NTSTATUS cmd_dfs_enumex(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, + int argc, const char **argv) +{ + NETDFS_DFS_ENUMSTRUCT str; + NETDFS_DFS_ENUMINFO_CTR ctr; + NTSTATUS result; + uint32 info_level = 1; + uint32 total = 0; + + if (argc < 2 || argc > 3) { + printf("Usage: %s dfs_name [info_level]\n", argv[0]); + return NT_STATUS_OK; + } + + if (argc == 3) + info_level = atoi(argv[2]); + + ZERO_STRUCT(ctr); + init_netdfs_dfs_EnumStruct(&str, info_level, ctr); + str.e.ptr0 = 1; + + result = rpccli_dfs_EnumEx(cli, mem_ctx, info_level, 0xFFFFFFFF, &str, &total, argv[1]); + + if (NT_STATUS_IS_OK(result)) + display_dfs_enumstruct(&str); + + return result; +} + + static NTSTATUS cmd_dfs_getinfo(struct rpc_pipe_client *cli, TALLOC_CTX *mem_ctx, int argc, const char **argv) { @@ -253,6 +285,7 @@ { "dfsremove", RPC_RTYPE_NTSTATUS, cmd_dfs_remove, NULL, PI_NETDFS, NULL, "Remove a DFS share", "" }, { "dfsgetinfo",RPC_RTYPE_NTSTATUS, cmd_dfs_getinfo, NULL, PI_NETDFS, NULL, "Query DFS share info", "" }, { "dfsenum", RPC_RTYPE_NTSTATUS, cmd_dfs_enum, NULL, PI_NETDFS, NULL, "Enumerate dfs shares", "" }, + { "dfsenumex", RPC_RTYPE_NTSTATUS, cmd_dfs_enumex, NULL, PI_NETDFS, NULL, "Enumerate dfs shares", "" }, { NULL } };