s4:torture/rpc/netlogon.c - factor out the computer name check in an own test function
authorMatthias Dieter Wallnöfer <mdw@samba.org>
Thu, 24 Nov 2011 16:38:14 +0000 (17:38 +0100)
committerMatthias Dieter Wallnöfer <mdw@samba.org>
Mon, 28 Nov 2011 19:51:38 +0000 (20:51 +0100)
This check is by no ways specific to "DsRGetSiteName" and hence it
should be factored out in an own function.
Samba atm does not implement the requested behaviour so I have added the
"torture_skip" action.

source4/torture/rpc/netlogon.c

index ffcb9fa6708d3a06c8fdf3eb583719059879e95d..4db2e4105f9fd4bd50a98e9a2d591556674c140a 100644 (file)
 
 #define TEST_MACHINE_NAME "torturetest"
 
+static bool test_netr_broken_binding_handle(struct torture_context *tctx,
+                                           struct dcerpc_pipe *p)
+{
+       NTSTATUS status;
+       struct netr_DsRGetSiteName r;
+       const char *site = NULL;
+       struct dcerpc_binding_handle *b = p->binding_handle;
+
+       if (torture_setting_bool(tctx, "samba3", false) ||
+           torture_setting_bool(tctx, "samba4", false)) {
+               torture_skip(tctx, "Skipping broken binding handle check against Samba");
+       }
+
+       r.in.computer_name              = "\\\\\\\\THIS_IS_NOT_VALID";
+       r.out.site                      = &site;
+
+       torture_comment(tctx,
+                       "Testing netlogon request with broken binding handle: %s\n", r.in.computer_name);
+
+       status = dcerpc_netr_DsRGetSiteName_r(b, tctx, &r);
+       torture_assert_ntstatus_ok(tctx, status,
+                                  "Netlogon request with broken binding handle");
+       torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_COMPUTERNAME,
+                                 "Netlogon request with broken binding handle");
+       return true;
+}
+
 static bool test_LogonUasLogon(struct torture_context *tctx, 
                               struct dcerpc_pipe *p)
 {
@@ -2344,17 +2371,6 @@ static bool test_netr_DsRGetSiteName(struct dcerpc_pipe *p, struct torture_conte
        torture_assert_werr_ok(tctx, r.out.result, "DsRGetSiteName");
        torture_assert_str_equal(tctx, expected_site, site, "netr_DsRGetSiteName");
 
-       if (torture_setting_bool(tctx, "samba4", false))
-               torture_skip(tctx, "skipping computer name check against Samba4");
-
-       r.in.computer_name              = talloc_asprintf(tctx, "\\\\%s", computer_name);
-       torture_comment(tctx, 
-                       "Testing netr_DsRGetSiteName with broken computer name: %s\n", r.in.computer_name);
-
-       status = dcerpc_netr_DsRGetSiteName_r(b, tctx, &r);
-       torture_assert_ntstatus_ok(tctx, status, "DsRGetSiteName");
-       torture_assert_werr_equal(tctx, r.out.result, WERR_INVALID_COMPUTERNAME, "netr_DsRGetSiteName");
-
        return true;
 }
 
@@ -3628,6 +3644,9 @@ struct torture_suite *torture_rpc_netlogon(TALLOC_CTX *mem_ctx)
        tcase = torture_suite_add_machine_bdc_rpc_iface_tcase(suite, "netlogon",
                                                  &ndr_table_netlogon, TEST_MACHINE_NAME);
 
+       torture_rpc_tcase_add_test(tcase, "Broken RPC binding handle",
+                                  test_netr_broken_binding_handle);
+
        torture_rpc_tcase_add_test(tcase, "LogonUasLogon", test_LogonUasLogon);
        torture_rpc_tcase_add_test(tcase, "LogonUasLogoff", test_LogonUasLogoff);
        torture_rpc_tcase_add_test_creds(tcase, "SamLogon", test_SamLogon);