From 0697e76440c548910ebab955676114e1e26d7ee3 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 31 Mar 2006 13:41:49 +0000 Subject: r14843: the results of the srvsrv_* calls depends on the user, try some tests anonymous... metze (This used to be commit eb63d83f007e374f77ff63b3d7b81f187260c8fa) --- source4/torture/rpc/srvsvc.c | 217 ++++++++++++++++++++++++++----------------- 1 file changed, 132 insertions(+), 85 deletions(-) (limited to 'source4/torture/rpc/srvsvc.c') diff --git a/source4/torture/rpc/srvsvc.c b/source4/torture/rpc/srvsvc.c index 41b27df205..dc48516b91 100644 --- a/source4/torture/rpc/srvsvc.c +++ b/source4/torture/rpc/srvsvc.c @@ -415,12 +415,49 @@ static BOOL test_NetSessEnum(struct dcerpc_pipe *p, /**************************/ /* srvsvc_NetShare */ /**************************/ +static BOOL test_NetShareCheck(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, + const char *device_name) +{ + NTSTATUS status; + struct srvsvc_NetShareCheck r; + BOOL ret = True; + + r.in.server_unc = talloc_asprintf(mem_ctx, "\\\\%s", dcerpc_server_name(p)); + r.in.device_name = device_name; + + printf("testing NetShareCheck on device '%s'\n", r.in.device_name); + + status = dcerpc_srvsvc_NetShareCheck(p, mem_ctx, &r); + if (!NT_STATUS_IS_OK(status)) { + printf("dcerpc_srvsvc_NetShareCheck on device '%s' failed - %s\n", + r.in.device_name, nt_errstr(status)); + ret = False; + } else if (!W_ERROR_IS_OK(r.out.result)) { + printf("NetShareCheck on device '%s' failed - %s\n", + r.in.device_name, win_errstr(r.out.result)); + ret = False; + } + + return ret; +} + static BOOL test_NetShareGetInfo(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, - const char *sharename) + const char *sharename, BOOL admin) { NTSTATUS status; struct srvsvc_NetShareGetInfo r; - uint32_t levels[] = {0, 1, 2, 501, 502, 1005}; + struct { + uint32_t level; + WERROR anon_status; + WERROR admin_status; + } levels[] = { + { 0, WERR_OK, WERR_OK }, + { 1, WERR_OK, WERR_OK }, + { 2, WERR_ACCESS_DENIED, WERR_OK }, + { 501, WERR_OK, WERR_OK }, + { 502, WERR_ACCESS_DENIED, WERR_OK }, + { 1005, WERR_OK, WERR_OK }, + }; int i; BOOL ret = True; @@ -428,8 +465,12 @@ static BOOL test_NetShareGetInfo(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, r.in.share_name = sharename; for (i=0;ipath) continue; + if (!test_NetShareCheck(p, mem_ctx, r.out.info.info2->path)) { + ret = False; + } } return ret; @@ -481,12 +504,22 @@ static BOOL test_NetShareCheck(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, /* srvsvc_NetShare */ /**************************/ static BOOL test_NetShareEnumAll(struct dcerpc_pipe *p, - TALLOC_CTX *mem_ctx) + TALLOC_CTX *mem_ctx, BOOL admin) { NTSTATUS status; struct srvsvc_NetShareEnumAll r; struct srvsvc_NetShareCtr0 c0; - uint32_t levels[] = {0, 1, 2, 501, 502}; + struct { + uint32_t level; + WERROR anon_status; + WERROR admin_status; + } levels[] = { + { 0, WERR_OK, WERR_OK }, + { 1, WERR_OK, WERR_OK }, + { 2, WERR_ACCESS_DENIED, WERR_OK }, + { 501, WERR_ACCESS_DENIED, WERR_OK }, + { 502, WERR_ACCESS_DENIED, WERR_OK }, + }; int i; BOOL ret = True; uint32_t resume_handle; @@ -501,10 +534,15 @@ static BOOL test_NetShareEnumAll(struct dcerpc_pipe *p, for (i=0;icount;j++) { const char *name; - const char *device; name = r.out.ctr.ctr2->array[j].name; - if (!test_NetShareGetInfo(p, mem_ctx, name)) { - ret = False; - } - device = r.out.ctr.ctr2->array[j].path; - if (!test_NetShareCheck(p, mem_ctx, device)) { + if (!test_NetShareGetInfo(p, mem_ctx, name, admin)) { ret = False; } } @@ -538,12 +573,22 @@ static BOOL test_NetShareEnumAll(struct dcerpc_pipe *p, } static BOOL test_NetShareEnum(struct dcerpc_pipe *p, - TALLOC_CTX *mem_ctx) + TALLOC_CTX *mem_ctx, BOOL admin) { NTSTATUS status; struct srvsvc_NetShareEnum r; struct srvsvc_NetShareCtr0 c0; - uint32_t levels[] = {0, 1, 2, 502}; + struct { + uint32_t level; + WERROR anon_status; + WERROR admin_status; + } levels[] = { + { 0, WERR_OK, WERR_OK }, + { 1, WERR_OK, WERR_OK }, + { 2, WERR_ACCESS_DENIED, WERR_OK }, + { 501, WERR_UNKNOWN_LEVEL, WERR_UNKNOWN_LEVEL }, + { 502, WERR_ACCESS_DENIED, WERR_OK }, + }; int i; BOOL ret = True; @@ -555,8 +600,14 @@ static BOOL test_NetShareEnum(struct dcerpc_pipe *p, r.in.resume_handle = NULL; for (i=0;i