2 Unix SMB/CIFS implementation.
3 test suite for wkssvc rpc operations
5 Copyright (C) Andrew Tridgell 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 3 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, see <http://www.gnu.org/licenses/>.
22 #include "torture/torture.h"
23 #include "librpc/gen_ndr/ndr_wkssvc_c.h"
24 #include "torture/rpc/rpc.h"
25 #include "lib/cmdline/popt_common.h"
26 #include "param/param.h"
28 #define SMBTORTURE_MACHINE_NAME "smbtrt_name"
29 #define SMBTORTURE_ALTERNATE_NAME "smbtrt_altname"
30 #define SMBTORTURE_TRANSPORT_NAME "\\Device\\smbtrt_transport_name"
31 #define SMBTORTURE_USE_NAME "S:"
32 #define SMBTORTURE_MESSAGE "You are currently tortured by Samba"
34 static bool test_NetWkstaGetInfo(struct torture_context *tctx,
35 struct dcerpc_pipe *p)
38 struct wkssvc_NetWkstaGetInfo r;
39 union wkssvc_NetWkstaInfo info;
40 uint16_t levels[] = {100, 101, 102, 502};
43 r.in.server_name = dcerpc_server_name(p);
46 for (i=0;i<ARRAY_SIZE(levels);i++) {
47 r.in.level = levels[i];
48 torture_comment(tctx, "testing NetWkstaGetInfo level %u\n", r.in.level);
49 status = dcerpc_wkssvc_NetWkstaGetInfo(p, tctx, &r);
50 torture_assert_ntstatus_ok(tctx, status,
51 talloc_asprintf(tctx, "NetWkstaGetInfo level %u failed", r.in.level));
52 torture_assert_werr_ok(tctx, r.out.result,
53 talloc_asprintf(tctx, "NetWkstaGetInfo level %u failed", r.in.level));
59 static bool test_NetWkstaTransportEnum(struct torture_context *tctx,
60 struct dcerpc_pipe *p)
63 struct wkssvc_NetWkstaTransportEnum r;
64 uint32_t resume_handle = 0;
65 struct wkssvc_NetWkstaTransportInfo info;
66 union wkssvc_NetWkstaTransportCtr ctr;
67 struct wkssvc_NetWkstaTransportCtr0 ctr0;
68 uint32_t total_entries = 0;
76 r.in.server_name = dcerpc_server_name(p);
78 r.in.max_buffer = (uint32_t)-1;
79 r.in.resume_handle = &resume_handle;
80 r.out.total_entries = &total_entries;
82 r.out.resume_handle = &resume_handle;
84 torture_comment(tctx, "testing NetWkstaTransportEnum level 0\n");
86 status = dcerpc_wkssvc_NetWkstaTransportEnum(p, tctx, &r);
87 torture_assert_ntstatus_ok(tctx, status,
88 "NetWkstaTransportEnum failed");
89 torture_assert_werr_ok(tctx, r.out.result, talloc_asprintf(tctx,
90 "NetWkstaTransportEnum level %u failed",
96 static bool test_NetrWkstaTransportAdd(struct torture_context *tctx,
97 struct dcerpc_pipe *p)
100 struct wkssvc_NetrWkstaTransportAdd r;
101 struct wkssvc_NetWkstaTransportInfo0 info0;
102 uint32_t parm_err = 0;
106 info0.quality_of_service = 0xffff;
108 info0.name = SMBTORTURE_TRANSPORT_NAME;
109 info0.address = "000000000000";
110 info0.wan_link = 0x400;
112 r.in.server_name = dcerpc_server_name(p);
115 r.in.parm_err = r.out.parm_err = &parm_err;
117 torture_comment(tctx, "testing NetrWkstaTransportAdd level 0\n");
119 status = dcerpc_wkssvc_NetrWkstaTransportAdd(p, tctx, &r);
120 torture_assert_ntstatus_ok(tctx, status,
121 "NetrWkstaTransportAdd failed");
122 torture_assert_werr_equal(tctx, r.out.result,
124 "NetrWkstaTransportAdd level 0 failed");
129 static bool test_NetrWkstaTransportDel(struct torture_context *tctx,
130 struct dcerpc_pipe *p)
133 struct wkssvc_NetrWkstaTransportDel r;
135 r.in.server_name = dcerpc_server_name(p);
136 r.in.transport_name = SMBTORTURE_TRANSPORT_NAME;
139 torture_comment(tctx, "testing NetrWkstaTransportDel\n");
141 status = dcerpc_wkssvc_NetrWkstaTransportDel(p, tctx, &r);
142 torture_assert_ntstatus_ok(tctx, status,
143 "NetrWkstaTransportDel failed");
144 torture_assert_werr_ok(tctx, r.out.result,
145 "NetrWkstaTransportDel");
150 static bool test_NetWkstaEnumUsers(struct torture_context *tctx,
151 struct dcerpc_pipe *p)
154 struct wkssvc_NetWkstaEnumUsers r;
156 uint32_t entries_read = 0;
157 struct wkssvc_NetWkstaEnumUsersInfo info;
158 struct wkssvc_NetWkstaEnumUsersCtr0 *user0;
159 struct wkssvc_NetWkstaEnumUsersCtr1 *user1;
160 uint32_t levels[] = { 0, 1 };
163 for (i=0; i<ARRAY_SIZE(levels); i++) {
167 info.level = levels[i];
168 switch (info.level) {
170 user0 = talloc_zero(tctx,
171 struct wkssvc_NetWkstaEnumUsersCtr0);
172 info.ctr.user0 = user0;
175 user1 = talloc_zero(tctx,
176 struct wkssvc_NetWkstaEnumUsersCtr1);
177 info.ctr.user1 = user1;
183 r.in.server_name = dcerpc_server_name(p);
184 r.in.prefmaxlen = (uint32_t)-1;
185 r.in.info = r.out.info = &info;
186 r.in.resume_handle = r.out.resume_handle = &handle;
188 r.out.entries_read = &entries_read;
190 torture_comment(tctx, "testing NetWkstaEnumUsers level %u\n",
193 status = dcerpc_wkssvc_NetWkstaEnumUsers(p, tctx, &r);
194 torture_assert_ntstatus_ok(tctx, status,
195 "NetWkstaEnumUsers failed");
196 torture_assert_werr_ok(tctx, r.out.result,
197 "NetWkstaEnumUsers failed");
203 static bool test_NetrWkstaUserGetInfo(struct torture_context *tctx,
204 struct dcerpc_pipe *p)
207 struct wkssvc_NetrWkstaUserGetInfo r;
208 union wkssvc_NetrWkstaUserInfo info;
209 const char *dom = lp_workgroup(global_loadparm);
210 struct cli_credentials *creds = cmdline_credentials;
211 const char *user = cli_credentials_get_username(creds);
219 { NULL, 0, WERR_NO_SUCH_LOGON_SESSION },
220 { NULL, 1, WERR_NO_SUCH_LOGON_SESSION },
221 { NULL, 1101, WERR_OK },
222 { dom, 0, WERR_INVALID_PARAM },
223 { dom, 1, WERR_INVALID_PARAM },
224 { dom, 1101, WERR_INVALID_PARAM },
225 { user, 0, WERR_INVALID_PARAM },
226 { user, 1, WERR_INVALID_PARAM },
227 { user, 1101, WERR_INVALID_PARAM },
230 for (i=0; i<ARRAY_SIZE(tests); i++) {
231 r.in.unknown = tests[i].unknown;
232 r.in.level = tests[i].level;
235 torture_comment(tctx, "testing NetrWkstaUserGetInfo level %u\n",
238 status = dcerpc_wkssvc_NetrWkstaUserGetInfo(p, tctx, &r);
239 torture_assert_ntstatus_ok(tctx, status,
240 "NetrWkstaUserGetInfo failed");
241 torture_assert_werr_equal(tctx, r.out.result,
243 "NetrWkstaUserGetInfo failed");
249 static bool test_NetrUseEnum(struct torture_context *tctx,
250 struct dcerpc_pipe *p)
253 struct wkssvc_NetrUseEnum r;
255 uint32_t entries_read = 0;
256 struct wkssvc_NetrUseEnumInfo info;
257 struct wkssvc_NetrUseEnumCtr0 *use0;
258 struct wkssvc_NetrUseEnumCtr1 *use1;
259 struct wkssvc_NetrUseEnumCtr2 *use2;
260 uint32_t levels[] = { 0, 1, 2 };
263 for (i=0; i<ARRAY_SIZE(levels); i++) {
267 info.level = levels[i];
268 switch (info.level) {
270 use0 = talloc_zero(tctx, struct wkssvc_NetrUseEnumCtr0);
271 info.ctr.ctr0 = use0;
274 use1 = talloc_zero(tctx, struct wkssvc_NetrUseEnumCtr1);
275 info.ctr.ctr1 = use1;
278 use2 = talloc_zero(tctx, struct wkssvc_NetrUseEnumCtr2);
279 info.ctr.ctr2 = use2;
285 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
286 r.in.prefmaxlen = (uint32_t)-1;
287 r.in.info = r.out.info = &info;
288 r.in.resume_handle = r.out.resume_handle = &handle;
290 r.out.entries_read = &entries_read;
292 torture_comment(tctx, "testing NetrUseEnum level %u\n",
295 status = dcerpc_wkssvc_NetrUseEnum(p, tctx, &r);
296 torture_assert_ntstatus_ok(tctx, status,
297 "NetrUseEnum failed");
298 torture_assert_werr_ok(tctx, r.out.result,
299 "NetrUseEnum failed");
305 static bool test_NetrUseAdd(struct torture_context *tctx,
306 struct dcerpc_pipe *p)
309 struct wkssvc_NetrUseAdd r;
310 struct wkssvc_NetrUseInfo0 info0;
311 struct wkssvc_NetrUseInfo1 info1;
312 union wkssvc_NetrUseGetInfoCtr *ctr;
313 uint32_t parm_err = 0;
315 ctr = talloc(tctx, union wkssvc_NetrUseGetInfoCtr);
319 info0.local = SMBTORTURE_USE_NAME;
320 info0.remote = "\\\\localhost\\c$";
324 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
327 r.in.parm_err = r.out.parm_err = &parm_err;
329 torture_comment(tctx, "testing NetrUseAdd level %u\n",
332 status = dcerpc_wkssvc_NetrUseAdd(p, tctx, &r);
333 torture_assert_ntstatus_ok(tctx, status,
334 "NetrUseAdd failed");
335 torture_assert_werr_equal(tctx, r.out.result, WERR_UNKNOWN_LEVEL,
336 "NetrUseAdd failed");
341 info1.local = SMBTORTURE_USE_NAME;
342 info1.remote = "\\\\localhost\\sysvol";
343 info1.password = NULL;
347 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
350 r.in.parm_err = r.out.parm_err = &parm_err;
352 torture_comment(tctx, "testing NetrUseAdd level %u\n",
355 status = dcerpc_wkssvc_NetrUseAdd(p, tctx, &r);
356 torture_assert_ntstatus_ok(tctx, status,
357 "NetrUseAdd failed");
358 torture_assert_werr_ok(tctx, r.out.result,
359 "NetrUseAdd failed");
364 static bool test_NetrUseDel(struct torture_context *tctx,
365 struct dcerpc_pipe *p)
368 struct wkssvc_NetrUseDel r;
370 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
371 r.in.use_name = SMBTORTURE_USE_NAME;
374 torture_comment(tctx, "testing NetrUseDel\n");
376 status = dcerpc_wkssvc_NetrUseDel(p, tctx, &r);
377 torture_assert_ntstatus_ok(tctx, status,
378 "NetrUseDel failed");
379 torture_assert_werr_ok(tctx, r.out.result,
380 "NetrUseDel failed");
384 static bool test_NetrUseGetInfo_level(struct torture_context *tctx,
385 struct dcerpc_pipe *p,
386 const char *use_name,
391 struct wkssvc_NetrUseGetInfo r;
392 union wkssvc_NetrUseGetInfoCtr ctr;
396 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
397 r.in.use_name = use_name;
400 status = dcerpc_wkssvc_NetrUseGetInfo(p, tctx, &r);
402 torture_assert_ntstatus_ok(tctx, status,
403 "NetrUseGetInfo failed");
404 torture_assert_werr_equal(tctx, r.out.result, werr,
405 "NetrUseGetInfo failed");
409 static bool test_NetrUseGetInfo(struct torture_context *tctx,
410 struct dcerpc_pipe *p)
413 struct wkssvc_NetrUseEnum r;
415 uint32_t entries_read = 0;
416 struct wkssvc_NetrUseEnumInfo info;
417 struct wkssvc_NetrUseEnumCtr0 *use0;
418 uint32_t levels[] = { 0, 1, 2 };
419 const char *use_name = NULL;
425 use0 = talloc_zero(tctx, struct wkssvc_NetrUseEnumCtr0);
426 info.ctr.ctr0 = use0;
428 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
429 r.in.prefmaxlen = (uint32_t)-1;
430 r.in.info = r.out.info = &info;
431 r.in.resume_handle = r.out.resume_handle = &handle;
432 r.out.entries_read = &entries_read;
434 status = dcerpc_wkssvc_NetrUseEnum(p, tctx, &r);
435 torture_assert_ntstatus_ok(tctx, status,
436 "NetrUseEnum failed");
437 torture_assert_werr_ok(tctx, r.out.result,
438 "NetrUseEnum failed");
440 for (k=0; k < r.out.info->ctr.ctr0->count; k++) {
442 use_name = r.out.info->ctr.ctr0->array[k].local;
444 for (i=0; i<ARRAY_SIZE(levels); i++) {
446 if (!test_NetrUseGetInfo_level(tctx, p, use_name,
450 if (levels[i] != 0) {
456 use_name = r.out.info->ctr.ctr0->array[k].remote;
458 for (i=0; i<ARRAY_SIZE(levels); i++) {
460 if (!test_NetrUseGetInfo_level(tctx, p, use_name,
464 if (levels[i] != 0) {
474 static bool test_NetrLogonDomainNameAdd(struct torture_context *tctx,
475 struct dcerpc_pipe *p)
478 struct wkssvc_NetrLogonDomainNameAdd r;
480 r.in.domain_name = lp_workgroup(global_loadparm);
482 torture_comment(tctx, "testing NetrLogonDomainNameAdd\n");
484 status = dcerpc_wkssvc_NetrLogonDomainNameAdd(p, tctx, &r);
485 torture_assert_ntstatus_ok(tctx, status,
486 "NetrLogonDomainNameAdd failed");
487 torture_assert_werr_equal(tctx, r.out.result, WERR_NOT_SUPPORTED,
488 "NetrLogonDomainNameAdd failed");
492 static bool test_NetrLogonDomainNameDel(struct torture_context *tctx,
493 struct dcerpc_pipe *p)
496 struct wkssvc_NetrLogonDomainNameDel r;
498 r.in.domain_name = lp_workgroup(global_loadparm);
500 torture_comment(tctx, "testing NetrLogonDomainNameDel\n");
502 status = dcerpc_wkssvc_NetrLogonDomainNameDel(p, tctx, &r);
503 torture_assert_ntstatus_ok(tctx, status,
504 "NetrLogonDomainNameDel failed");
505 torture_assert_werr_equal(tctx, r.out.result, WERR_NOT_SUPPORTED,
506 "NetrLogonDomainNameDel failed");
510 static bool test_NetrEnumerateComputerNames_level(struct torture_context *tctx,
511 struct dcerpc_pipe *p,
517 struct wkssvc_NetrEnumerateComputerNames r;
518 struct wkssvc_ComputerNamesCtr *ctr;
521 ctr = talloc_zero(tctx, struct wkssvc_ComputerNamesCtr);
523 r.in.server_name = dcerpc_server_name(p);
524 r.in.name_type = level;
528 torture_comment(tctx, "testing NetrEnumerateComputerNames level %u\n",
531 status = dcerpc_wkssvc_NetrEnumerateComputerNames(p, tctx, &r);
532 torture_assert_ntstatus_ok(tctx, status,
533 "NetrEnumerateComputerNames failed");
534 torture_assert_werr_ok(tctx, r.out.result,
535 "NetrEnumerateComputerNames failed");
537 if ((level == NetPrimaryComputerName) && ctr->count != 1) {
538 torture_comment(tctx,
539 "NetrEnumerateComputerNames did not return one "
540 "name but %u\n", ctr->count);
544 if (names && num_names) {
547 for (i=0; i<ctr->count; i++) {
548 if (!add_string_to_array(tctx,
549 ctr->computer_name[i].string,
561 static bool test_NetrEnumerateComputerNames(struct torture_context *tctx,
562 struct dcerpc_pipe *p)
564 uint16_t levels[] = {0,1,2};
567 for (i=0; i<ARRAY_SIZE(levels); i++) {
569 if (!test_NetrEnumerateComputerNames_level(tctx,
581 static bool test_NetrValidateName(struct torture_context *tctx,
582 struct dcerpc_pipe *p)
585 struct wkssvc_NetrValidateName r;
586 uint16_t levels[] = {0,1,2,3,4,5};
589 for (i=0; i<ARRAY_SIZE(levels); i++) {
591 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
592 r.in.name = lp_workgroup(global_loadparm);
594 r.in.Password = NULL;
595 r.in.name_type = levels[i];
597 torture_comment(tctx, "testing NetrValidateName level %u\n",
600 status = dcerpc_wkssvc_NetrValidateName(p, tctx, &r);
601 torture_assert_ntstatus_ok(tctx, status,
602 "NetrValidateName failed");
603 torture_assert_werr_equal(tctx, r.out.result,
605 "NetrValidateName failed");
611 static bool test_NetrValidateName2(struct torture_context *tctx,
612 struct dcerpc_pipe *p)
615 struct wkssvc_NetrValidateName2 r;
616 uint16_t levels[] = {0,1,2,3,4,5};
619 for (i=0; i<ARRAY_SIZE(levels); i++) {
621 r.in.server_name = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
622 r.in.name = lp_workgroup(global_loadparm);
624 r.in.EncryptedPassword = NULL;
625 r.in.name_type = levels[i];
627 torture_comment(tctx, "testing NetrValidateName2 level %u\n",
630 status = dcerpc_wkssvc_NetrValidateName2(p, tctx, &r);
631 torture_assert_ntstatus_ok(tctx, status,
632 "NetrValidateName2 failed");
633 torture_assert_werr_equal(tctx, r.out.result,
634 WERR_RPC_E_REMOTE_DISABLED,
635 "NetrValidateName2 failed");
641 static bool test_NetrAddAlternateComputerName(struct torture_context *tctx,
642 struct dcerpc_pipe *p)
645 struct wkssvc_NetrAddAlternateComputerName r;
646 const char **names = NULL;
650 r.in.server_name = dcerpc_server_name(p);
651 r.in.NewAlternateMachineName = SMBTORTURE_ALTERNATE_NAME;
653 r.in.EncryptedPassword = NULL;
656 torture_comment(tctx, "testing NetrAddAlternateComputerName\n");
658 status = dcerpc_wkssvc_NetrAddAlternateComputerName(p, tctx, &r);
659 torture_assert_ntstatus_ok(tctx, status,
660 "NetrAddAlternateComputerName failed");
661 torture_assert_werr_ok(tctx, r.out.result,
662 "NetrAddAlternateComputerName failed");
664 if (!test_NetrEnumerateComputerNames_level(tctx, p,
665 NetAlternateComputerNames,
671 for (i=0; i<num_names; i++) {
672 if (strequal(names[i], SMBTORTURE_ALTERNATE_NAME)) {
677 torture_comment(tctx, "new alternate name not set\n");
682 static bool test_NetrRemoveAlternateComputerName(struct torture_context *tctx,
683 struct dcerpc_pipe *p)
686 struct wkssvc_NetrRemoveAlternateComputerName r;
687 const char **names = NULL;
691 r.in.server_name = dcerpc_server_name(p);
692 r.in.AlternateMachineNameToRemove = SMBTORTURE_ALTERNATE_NAME;
694 r.in.EncryptedPassword = NULL;
697 torture_comment(tctx, "testing NetrRemoveAlternateComputerName\n");
699 status = dcerpc_wkssvc_NetrRemoveAlternateComputerName(p, tctx, &r);
700 torture_assert_ntstatus_ok(tctx, status,
701 "NetrRemoveAlternateComputerName failed");
702 torture_assert_werr_ok(tctx, r.out.result,
703 "NetrRemoveAlternateComputerName failed");
705 if (!test_NetrEnumerateComputerNames_level(tctx, p,
706 NetAlternateComputerNames,
712 for (i=0; i<num_names; i++) {
713 if (strequal(names[i], SMBTORTURE_ALTERNATE_NAME)) {
721 static bool test_NetrSetPrimaryComputername_name(struct torture_context *tctx,
722 struct dcerpc_pipe *p,
726 struct wkssvc_NetrSetPrimaryComputername r;
728 r.in.server_name = dcerpc_server_name(p);
729 r.in.primary_name = name;
731 r.in.EncryptedPassword = NULL;
734 status = dcerpc_wkssvc_NetrSetPrimaryComputername(p, tctx, &r);
735 torture_assert_ntstatus_ok(tctx, status,
736 "NetrSetPrimaryComputername failed");
737 torture_assert_werr_ok(tctx, r.out.result,
738 "NetrSetPrimaryComputername failed");
743 static bool test_NetrSetPrimaryComputername(struct torture_context *tctx,
744 struct dcerpc_pipe *p)
750 set new primary (alternate)
752 later: check if del is possible
753 set primary back to origin
758 const char **names_o = NULL, **names = NULL;
759 int num_names_o = 0, num_names = 0;
761 torture_comment(tctx, "testing NetrSetPrimaryComputername\n");
763 if (!test_NetrAddAlternateComputerName(tctx, p)) {
767 if (!test_NetrEnumerateComputerNames_level(tctx, p,
768 NetPrimaryComputerName,
769 &names_o, &num_names_o))
774 if (num_names_o != 1) {
778 if (!test_NetrSetPrimaryComputername_name(tctx, p,
779 SMBTORTURE_ALTERNATE_NAME))
784 if (!test_NetrEnumerateComputerNames_level(tctx, p,
785 NetPrimaryComputerName,
791 if (num_names != 1) {
795 if (!strequal(names[0], SMBTORTURE_ALTERNATE_NAME)) {
796 torture_comment(tctx,
797 "name mismatch (%s != %s) after NetrSetPrimaryComputername!\n",
798 names[0], SMBTORTURE_ALTERNATE_NAME);
802 if (!test_NetrSetPrimaryComputername_name(tctx, p,
808 if (!test_NetrRemoveAlternateComputerName(tctx, p)) {
816 static bool test_NetrRenameMachineInDomain(struct torture_context *tctx,
817 struct dcerpc_pipe *p)
820 struct wkssvc_NetrRenameMachineInDomain r;
822 r.in.server_name = dcerpc_server_name(p);
823 r.in.NewMachineName = SMBTORTURE_MACHINE_NAME;
825 r.in.password = NULL;
826 r.in.RenameOptions = 0;
828 torture_comment(tctx, "testing NetrRenameMachineInDomain\n");
830 status = dcerpc_wkssvc_NetrRenameMachineInDomain(p, tctx, &r);
831 torture_assert_ntstatus_ok(tctx, status,
832 "NetrRenameMachineInDomain failed");
833 torture_assert_werr_equal(tctx, r.out.result, WERR_NOT_SUPPORTED,
834 "NetrRenameMachineInDomain failed");
838 static bool test_NetrRenameMachineInDomain2_name(struct torture_context *tctx,
839 struct dcerpc_pipe *p,
840 const char *new_name)
843 struct wkssvc_NetrRenameMachineInDomain2 r;
845 r.in.server_name = dcerpc_server_name(p);
846 r.in.NewMachineName = new_name;
848 r.in.EncryptedPassword = NULL;
849 r.in.RenameOptions = 0;
851 status = dcerpc_wkssvc_NetrRenameMachineInDomain2(p, tctx, &r);
852 torture_assert_ntstatus_ok(tctx, status,
853 "NetrRenameMachineInDomain2 failed");
854 torture_assert_werr_ok(tctx, r.out.result,
855 "NetrRenameMachineInDomain2 failed");
859 static bool test_NetrRenameMachineInDomain2(struct torture_context *tctx,
860 struct dcerpc_pipe *p)
862 const char **names_o = NULL, **names = NULL;
863 int num_names_o = 0, num_names = 0;
865 torture_comment(tctx, "testing NetrRenameMachineInDomain2\n");
867 if (!test_NetrEnumerateComputerNames_level(tctx, p,
868 NetPrimaryComputerName,
869 &names_o, &num_names_o))
874 if (num_names_o != 1) {
878 if (!test_NetrRenameMachineInDomain2_name(tctx, p,
879 SMBTORTURE_MACHINE_NAME))
884 if (!test_NetrEnumerateComputerNames_level(tctx, p,
885 NetPrimaryComputerName,
891 if (num_names != 1) {
895 if (strequal(names[0], names_o[0])) {
896 test_NetrRenameMachineInDomain2_name(tctx, p, names_o[0]);
900 if (!strequal(names[0], SMBTORTURE_MACHINE_NAME)) {
901 test_NetrRenameMachineInDomain2_name(tctx, p, names_o[0]);
905 if (!test_NetrRenameMachineInDomain2_name(tctx, p, names_o[0]))
910 if (!test_NetrEnumerateComputerNames_level(tctx, p,
911 NetPrimaryComputerName,
917 if (num_names != 1) {
921 if (!strequal(names[0], names_o[0])) {
928 static bool test_NetrWorkstationStatisticsGet(struct torture_context *tctx,
929 struct dcerpc_pipe *p)
932 struct wkssvc_NetrWorkstationStatisticsGet r;
933 struct wkssvc_NetrWorkstationStatistics *info;
937 info = talloc_zero(tctx, struct wkssvc_NetrWorkstationStatistics);
939 r.in.server_name = dcerpc_server_name(p);
942 torture_comment(tctx, "testing NetrWorkstationStatisticsGet\n");
944 status = dcerpc_wkssvc_NetrWorkstationStatisticsGet(p, tctx, &r);
945 torture_assert_ntstatus_ok(tctx, status,
946 "NetrWorkstationStatisticsGet failed");
947 torture_assert_werr_ok(tctx, r.out.result,
948 "NetrWorkstationStatisticsGet failed");
952 /* only succeeds as long as the local messenger service is running - Guenther */
954 static bool test_NetrMessageBufferSend(struct torture_context *tctx,
955 struct dcerpc_pipe *p)
958 struct wkssvc_NetrMessageBufferSend r;
959 const char *message = SMBTORTURE_MESSAGE;
963 size = push_ucs2_talloc(tctx, (void **)&msg, message);
965 r.in.server_name = dcerpc_server_name(p);
966 r.in.message_name = dcerpc_server_name(p);
967 r.in.message_sender_name = dcerpc_server_name(p);
968 r.in.message_buffer = msg;
969 r.in.message_size = size;
971 torture_comment(tctx, "testing NetrMessageBufferSend\n");
973 status = dcerpc_wkssvc_NetrMessageBufferSend(p, tctx, &r);
974 torture_assert_ntstatus_ok(tctx, status,
975 "NetrMessageBufferSend failed");
976 torture_assert_werr_ok(tctx, r.out.result,
977 "NetrMessageBufferSend failed");
981 static bool test_NetrGetJoinInformation(struct torture_context *tctx,
982 struct dcerpc_pipe *p)
985 struct wkssvc_NetrGetJoinInformation r;
986 enum wkssvc_NetJoinStatus join_status;
987 const char *name_buffer = "";
989 r.in.server_name = dcerpc_server_name(p);
990 r.in.name_buffer = r.out.name_buffer = &name_buffer;
991 r.out.name_type = &join_status;
993 torture_comment(tctx, "testing NetrGetJoinInformation\n");
995 status = dcerpc_wkssvc_NetrGetJoinInformation(p, tctx, &r);
996 torture_assert_ntstatus_ok(tctx, status,
997 "NetrGetJoinInformation failed");
998 torture_assert_werr_ok(tctx, r.out.result,
999 "NetrGetJoinInformation failed");
1003 static bool test_NetrGetJoinableOus(struct torture_context *tctx,
1004 struct dcerpc_pipe *p)
1007 struct wkssvc_NetrGetJoinableOus r;
1008 uint32_t num_ous = 0;
1009 const char **ous = NULL;
1011 r.in.server_name = dcerpc_server_name(p);
1012 r.in.domain_name = lp_workgroup(global_loadparm);
1013 r.in.Account = NULL;
1014 r.in.unknown = NULL;
1015 r.in.num_ous = r.out.num_ous = &num_ous;
1018 torture_comment(tctx, "testing NetrGetJoinableOus\n");
1020 status = dcerpc_wkssvc_NetrGetJoinableOus(p, tctx, &r);
1021 torture_assert_ntstatus_ok(tctx, status, "NetrGetJoinableOus failed");
1022 torture_assert_werr_equal(tctx, r.out.result,
1024 "NetrGetJoinableOus failed");
1029 static bool test_NetrGetJoinableOus2(struct torture_context *tctx,
1030 struct dcerpc_pipe *p)
1033 struct wkssvc_NetrGetJoinableOus2 r;
1034 uint32_t num_ous = 0;
1035 const char **ous = NULL;
1037 r.in.server_name = dcerpc_server_name(p);
1038 r.in.domain_name = lp_workgroup(global_loadparm);
1039 r.in.Account = NULL;
1040 r.in.EncryptedPassword = NULL;
1041 r.in.num_ous = r.out.num_ous = &num_ous;
1044 torture_comment(tctx, "testing NetrGetJoinableOus2\n");
1046 status = dcerpc_wkssvc_NetrGetJoinableOus2(p, tctx, &r);
1047 torture_assert_ntstatus_ok(tctx, status, "NetrGetJoinableOus2 failed");
1048 torture_assert_werr_equal(tctx, r.out.result,
1049 WERR_RPC_E_REMOTE_DISABLED,
1050 "NetrGetJoinableOus2 failed");
1054 struct torture_suite *torture_rpc_wkssvc(TALLOC_CTX *mem_ctx)
1056 struct torture_suite *suite;
1057 struct torture_rpc_tcase *tcase;
1058 struct torture_test *test;
1060 suite = torture_suite_create(mem_ctx, "WKSSVC");
1061 tcase = torture_suite_add_rpc_iface_tcase(suite, "wkssvc",
1064 torture_rpc_tcase_add_test(tcase, "NetWkstaGetInfo",
1065 test_NetWkstaGetInfo);
1067 torture_rpc_tcase_add_test(tcase, "NetWkstaTransportEnum",
1068 test_NetWkstaTransportEnum);
1069 torture_rpc_tcase_add_test(tcase, "NetrWkstaTransportDel",
1070 test_NetrWkstaTransportDel);
1071 torture_rpc_tcase_add_test(tcase, "NetrUseGetInfo",
1072 test_NetrUseGetInfo);
1073 torture_rpc_tcase_add_test(tcase, "NetrWkstaTransportAdd",
1074 test_NetrWkstaTransportAdd);
1076 torture_rpc_tcase_add_test(tcase, "NetWkstaEnumUsers",
1077 test_NetWkstaEnumUsers);
1078 torture_rpc_tcase_add_test(tcase, "NetrWkstaUserGetInfo",
1079 test_NetrWkstaUserGetInfo);
1081 torture_rpc_tcase_add_test(tcase, "NetrUseDel",
1083 torture_rpc_tcase_add_test(tcase, "NetrUseEnum",
1085 torture_rpc_tcase_add_test(tcase, "NetrUseAdd",
1088 torture_rpc_tcase_add_test(tcase, "NetrValidateName",
1089 test_NetrValidateName);
1090 torture_rpc_tcase_add_test(tcase, "NetrValidateName2",
1091 test_NetrValidateName2);
1092 torture_rpc_tcase_add_test(tcase, "NetrLogonDomainNameDel",
1093 test_NetrLogonDomainNameDel);
1094 torture_rpc_tcase_add_test(tcase, "NetrLogonDomainNameAdd",
1095 test_NetrLogonDomainNameAdd);
1096 torture_rpc_tcase_add_test(tcase, "NetrRemoveAlternateComputerName",
1097 test_NetrRemoveAlternateComputerName);
1098 torture_rpc_tcase_add_test(tcase, "NetrAddAlternateComputerName",
1099 test_NetrAddAlternateComputerName);
1100 test = torture_rpc_tcase_add_test(tcase, "NetrSetPrimaryComputername",
1101 test_NetrSetPrimaryComputername);
1102 test->dangerous = true;
1103 test = torture_rpc_tcase_add_test(tcase, "NetrRenameMachineInDomain",
1104 test_NetrRenameMachineInDomain);
1105 test->dangerous = true;
1106 test = torture_rpc_tcase_add_test(tcase, "NetrRenameMachineInDomain2",
1107 test_NetrRenameMachineInDomain2);
1108 test->dangerous = true;
1109 torture_rpc_tcase_add_test(tcase, "NetrEnumerateComputerNames",
1110 test_NetrEnumerateComputerNames);
1112 torture_rpc_tcase_add_test(tcase, "NetrGetJoinInformation",
1113 test_NetrGetJoinInformation);
1114 torture_rpc_tcase_add_test(tcase, "NetrGetJoinableOus",
1115 test_NetrGetJoinableOus);
1116 torture_rpc_tcase_add_test(tcase, "NetrGetJoinableOus2",
1117 test_NetrGetJoinableOus2);
1119 torture_rpc_tcase_add_test(tcase, "NetrWorkstationStatisticsGet",
1120 test_NetrWorkstationStatisticsGet);
1121 torture_rpc_tcase_add_test(tcase, "NetrMessageBufferSend",
1122 test_NetrMessageBufferSend);