]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:torture/rpc: add RPC-OBJECTUUID
authorStefan Metzmacher <metze@samba.org>
Tue, 30 Sep 2008 04:40:15 +0000 (06:40 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 30 Sep 2008 04:47:25 +0000 (06:47 +0200)
This test shows that object uuids should be ignored
if they're present in a dcerpc request.

metze

source4/torture/config.mk
source4/torture/rpc/object_uuid.c [new file with mode: 0644]
source4/torture/rpc/rpc.c

index 96da10b5dfeb78c07897b084e478142d3a4ed1fa..211d09756db84619a6ffe574011b58c27bd29ca0 100644 (file)
@@ -116,7 +116,7 @@ torture_rpc_OBJ_FILES = $(addprefix $(torturesrcdir)/rpc/, \
                eventlog.o epmapper.o winreg.o initshutdown.o oxidresolve.o remact.o mgmt.o \
                scanner.o autoidl.o countcalls.o testjoin.o schannel.o netlogon.o remote_pac.o samlogon.o \
                samsync.o bind.o dssetup.o alter_context.o bench.o samba3rpc.o rpc.o async_bind.o \
-               handles.o frsapi.o)
+               handles.o frsapi.o object_uuid.o)
 
 $(eval $(call proto_header_template,$(torturesrcdir)/rpc/proto.h,$(torture_rpc_OBJ_FILES:.o=.c)))
 
diff --git a/source4/torture/rpc/object_uuid.c b/source4/torture/rpc/object_uuid.c
new file mode 100644 (file)
index 0000000..5a77bd1
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+   Unix SMB/CIFS implementation.
+
+   test suite for behaviour of object uuids in rpc requests
+
+   Copyright (C) Stefan Metzmacher 2008
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "torture/torture.h"
+#include "librpc/gen_ndr/ndr_dssetup.h"
+#include "librpc/gen_ndr/ndr_dssetup_c.h"
+#include "librpc/gen_ndr/ndr_lsa.h"
+#include "librpc/gen_ndr/ndr_lsa_c.h"
+#include "torture/rpc/rpc.h"
+
+/*
+  this tests the send object uuids in the dcerpc request
+*/
+
+static bool test_random_uuid(struct torture_context *torture)
+{
+       NTSTATUS status;
+       struct dcerpc_pipe *p1, *p2;
+       struct rpc_request *req;
+       struct GUID uuid;
+       struct dssetup_DsRoleGetPrimaryDomainInformation r1;
+       struct lsa_GetUserName r2;
+       struct lsa_StringPointer authority_name_p;
+
+       torture_comment(torture, "RPC-OBJECTUUID-RANDOM\n");
+
+       status = torture_rpc_connection(torture, &p1, &ndr_table_dssetup);
+       torture_assert_ntstatus_ok(torture, status, "opening dsetup pipe1");
+
+       status = torture_rpc_connection(torture, &p2, &ndr_table_lsarpc);
+       torture_assert_ntstatus_ok(torture, status, "opening lsa pipe1");
+
+       uuid = GUID_random();
+
+       r1.in.level = DS_ROLE_BASIC_INFORMATION;
+       req = dcerpc_ndr_request_send(p1, &uuid,
+                                     &ndr_table_dssetup,
+                                     NDR_DSSETUP_DSROLEGETPRIMARYDOMAININFORMATION,
+                                     torture, &r1);
+       status = dcerpc_ndr_request_recv(req);
+       torture_assert_ntstatus_ok(torture, status, "DsRoleGetPrimaryDomainInformation failed");
+       torture_assert_werr_ok(torture, r1.out.result, "DsRoleGetPrimaryDomainInformation failed");
+
+       uuid = GUID_random();
+
+       r2.in.system_name = "\\";
+       r2.in.account_name = NULL;
+       r2.in.authority_name = &authority_name_p;
+       authority_name_p.string = NULL;
+
+       req = dcerpc_ndr_request_send(p2, &uuid,
+                                     &ndr_table_lsarpc,
+                                     NDR_LSA_GETUSERNAME,
+                                     torture, &r2);
+       status = dcerpc_ndr_request_recv(req);
+       torture_assert_ntstatus_ok(torture, status, "lsaClose failed");
+       torture_assert_ntstatus_ok(torture, r2.out.result, "lsaClose failed");
+
+       return true;
+}
+
+struct torture_suite *torture_rpc_object_uuid(TALLOC_CTX *mem_ctx)
+{
+       struct torture_suite *suite;
+       suite = torture_suite_create(mem_ctx, "OBJECTUUID");
+       torture_suite_add_simple_test(suite, "random-uuid", test_random_uuid);
+       return suite;
+}
index 85f7bde16c60e3f7a7146308d8e9a79d95920a96..c35f93e3f90571a0ee1d661b0468cc62f93ecb78 100644 (file)
@@ -387,6 +387,7 @@ NTSTATUS torture_rpc_init(void)
        torture_suite_add_suite(suite, torture_rpc_atsvc(suite));
        torture_suite_add_suite(suite, torture_rpc_wkssvc(suite));
        torture_suite_add_suite(suite, torture_rpc_handles(suite));
+       torture_suite_add_suite(suite, torture_rpc_object_uuid(suite));
        torture_suite_add_suite(suite, torture_rpc_winreg(suite));
        torture_suite_add_simple_test(suite, "SPOOLSS", torture_rpc_spoolss);
        torture_suite_add_suite(suite, torture_rpc_spoolss_notify(suite));