2 Unix SMB/CIFS implementation.
3 test suite for srvsvc rpc operations
5 Copyright (C) Stefan (metze) Metzmacher 2003
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 static BOOL test_NetConnEnum(struct dcerpc_pipe *p,
29 struct srvsvc_NetConnEnum r;
30 struct srvsvc_NetConnCtr0 c0;
31 uint32 levels[] = {0, 1};
35 r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
36 r.in.path = talloc_asprintf(mem_ctx,"%s","ADMIN$");
38 r.in.ctr.ctr0->count = 0;
39 r.in.ctr.ctr0->array = NULL;
40 r.in.preferred_len = (uint32)-1;
41 r.in.resume_handle = NULL;
43 for (i=0;i<ARRAY_SIZE(levels);i++) {
44 r.in.level = levels[i];
45 printf("testing NetConnEnum level %u\n", r.in.level);
46 status = dcerpc_srvsvc_NetConnEnum(p, mem_ctx, &r);
47 if (!NT_STATUS_IS_OK(status)) {
48 printf("NetConnEnum level %u failed - %s\n", r.in.level, nt_errstr(status));
56 static BOOL test_NetFileEnum(struct dcerpc_pipe *p,
60 struct srvsvc_NetFileEnum r;
61 struct srvsvc_NetFileCtr3 c3;
62 uint32 levels[] = {2, 3};
66 r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
70 r.in.ctr.ctr3->count = 0;
71 r.in.ctr.ctr3->array = NULL;
72 r.in.preferred_len = (uint32)4096;
73 r.in.resume_handle = NULL;
75 for (i=0;i<ARRAY_SIZE(levels);i++) {
76 r.in.level = levels[i];
77 printf("testing NetFileEnum level %u\n", r.in.level);
78 status = dcerpc_srvsvc_NetFileEnum(p, mem_ctx, &r);
79 if (!NT_STATUS_IS_OK(status)) {
80 printf("NetFileEnum level %u failed - %s\n", r.in.level, nt_errstr(status));
88 static BOOL test_NetSessEnum(struct dcerpc_pipe *p,
92 struct srvsvc_NetSessEnum r;
93 struct srvsvc_NetSessCtr0 c0;
94 uint32 levels[] = {0, 1, 2, 10, 502};
98 r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
102 r.in.ctr.ctr0->count = 0;
103 r.in.ctr.ctr0->array = NULL;
104 r.in.preferred_len = (uint32)-1;
105 r.in.resume_handle = NULL;
107 for (i=0;i<ARRAY_SIZE(levels);i++) {
108 r.in.level = levels[i];
109 printf("testing NetSessEnum level %u\n", r.in.level);
110 status = dcerpc_srvsvc_NetSessEnum(p, mem_ctx, &r);
111 if (!NT_STATUS_IS_OK(status)) {
112 printf("NetSessEnum level %u failed - %s\n", r.in.level, nt_errstr(status));
120 static BOOL test_NetShareEnumAll(struct dcerpc_pipe *p,
124 struct srvsvc_NetShareEnumAll r;
125 struct srvsvc_NetShareCtr0 c0;
126 uint32 levels[] = {0, 1, 2, 501, 502, 1004};
129 uint32 resume_handle;
133 r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
135 r.in.max_buffer = (uint32)-1;
136 r.in.resume_handle = &resume_handle;
137 r.out.resume_handle = &resume_handle;
139 for (i=0;i<ARRAY_SIZE(levels);i++) {
141 r.in.level = levels[i];
142 printf("testing NetShareEnumAll level %u\n", r.in.level);
143 status = dcerpc_srvsvc_NetShareEnumAll(p, mem_ctx, &r);
144 if (!NT_STATUS_IS_OK(status)) {
145 printf("NetShareEnumAll level %u failed - %s\n", r.in.level, nt_errstr(status));
154 static BOOL test_NetDiskEnum(struct dcerpc_pipe *p,
158 struct srvsvc_NetDiskEnum r;
159 uint32 levels[] = {0};
163 r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
164 r.in.preferred_len = (uint32)-1;
165 r.in.resume_handle = NULL;
167 for (i=0;i<ARRAY_SIZE(levels);i++) {
168 r.in.level = levels[i];
170 printf("testing NetDiskEnum level %u\n", r.in.level);
171 status = dcerpc_srvsvc_NetDiskEnum(p, mem_ctx, &r);
172 if (!NT_STATUS_IS_OK(status)) {
173 NDR_PRINT_OUT_DEBUG(srvsvc_NetDiskEnum, &r);
174 printf("NetDiskEnum level %u failed - %s\n", r.in.level, nt_errstr(status));
182 static BOOL test_NetTransportEnum(struct dcerpc_pipe *p,
186 struct srvsvc_NetTransportEnum r;
187 struct srvsvc_NetTransportCtr0 c0;
188 uint32 levels[] = {0, 1};
192 r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
194 r.in.ctr.ctr0->count = 0;
195 r.in.ctr.ctr0->array = NULL;
196 r.in.preferred_len = (uint32)-1;
197 r.in.resume_handle = NULL;
199 for (i=0;i<ARRAY_SIZE(levels);i++) {
200 r.in.level = levels[i];
201 printf("testing NetTransportEnum level %u\n", r.in.level);
202 status = dcerpc_srvsvc_NetTransportEnum(p, mem_ctx, &r);
203 if (!NT_STATUS_IS_OK(status)) {
204 printf("NetTransportEnum level %u failed - %s\n", r.in.level, nt_errstr(status));
212 static BOOL test_NetShareEnum(struct dcerpc_pipe *p,
216 struct srvsvc_NetShareEnum r;
217 struct srvsvc_NetShareCtr0 c0;
218 uint32 levels[] = {0, 1, 2, 502};
222 r.in.server_unc = talloc_asprintf(mem_ctx,"\\\\%s",dcerpc_server_name(p));
224 r.in.ctr.ctr0->count = 0;
225 r.in.ctr.ctr0->array = NULL;
226 r.in.preferred_len = (uint32)-1;
227 r.in.resume_handle = NULL;
229 for (i=0;i<ARRAY_SIZE(levels);i++) {
230 r.in.level = levels[i];
231 printf("testing NetShareEnum level %u\n", r.in.level);
232 status = dcerpc_srvsvc_NetShareEnum(p, mem_ctx, &r);
233 if (!NT_STATUS_IS_OK(status)) {
234 printf("NetShareEnum level %u failed - %s\n", r.in.level, nt_errstr(status));
242 BOOL torture_rpc_srvsvc(int dummy)
245 struct dcerpc_pipe *p;
249 mem_ctx = talloc_init("torture_rpc_srvsvc");
251 status = torture_rpc_connection(&p,
254 DCERPC_SRVSVC_VERSION);
255 if (!NT_STATUS_IS_OK(status)) {
259 p->flags |= DCERPC_DEBUG_PRINT_BOTH;
261 if (!test_NetConnEnum(p, mem_ctx)) {
265 if (!test_NetFileEnum(p, mem_ctx)) {
269 if (!test_NetSessEnum(p, mem_ctx)) {
273 if (!test_NetShareEnumAll(p, mem_ctx)) {
277 if (!test_NetDiskEnum(p, mem_ctx)) {
281 if (!test_NetTransportEnum(p, mem_ctx)) {
285 if (!test_NetShareEnum(p, mem_ctx)) {
289 talloc_destroy(mem_ctx);
291 torture_rpc_close(p);