s4-smbtorture: Make test names lowercase and dot-separated.
[metze/samba/wip.git] / source4 / torture / rpc / handles.c
index e72cd592d43acffa460ed847ceab605535e3f6d0..6b51eb5ab48548d52571860176b3c490ae07101d 100644 (file)
 */
 
 #include "includes.h"
-#include "torture/torture.h"
 #include "librpc/gen_ndr/ndr_samr_c.h"
 #include "librpc/gen_ndr/ndr_lsa_c.h"
 #include "librpc/gen_ndr/ndr_drsuapi_c.h"
-#include "torture/rpc/rpc.h"
+#include "torture/rpc/torture_rpc.h"
 
 /*
   this tests the use of policy handles between connections
@@ -34,6 +33,7 @@ static bool test_handles_lsa(struct torture_context *torture)
 {
        NTSTATUS status;
        struct dcerpc_pipe *p1, *p2;
+       struct dcerpc_binding_handle *b1, *b2;
        struct policy_handle handle;
        struct policy_handle handle2;
        struct lsa_ObjectAttribute attr;
@@ -45,11 +45,13 @@ static bool test_handles_lsa(struct torture_context *torture)
 
        torture_comment(torture, "RPC-HANDLE-LSARPC\n");
 
-       status = torture_rpc_connection(mem_ctx, &p1, &dcerpc_table_lsarpc);
+       status = torture_rpc_connection(torture, &p1, &ndr_table_lsarpc);
        torture_assert_ntstatus_ok(torture, status, "opening lsa pipe1");
+       b1 = p1->binding_handle;
 
-       status = torture_rpc_connection(mem_ctx, &p2, &dcerpc_table_lsarpc);
+       status = torture_rpc_connection(torture, &p2, &ndr_table_lsarpc);
        torture_assert_ntstatus_ok(torture, status, "opening lsa pipe1");
+       b2 = p2->binding_handle;
 
        qos.len = 0;
        qos.impersonation_level = 2;
@@ -68,8 +70,9 @@ static bool test_handles_lsa(struct torture_context *torture)
        r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
        r.out.handle = &handle;
 
-       status = dcerpc_lsa_OpenPolicy(p1, mem_ctx, &r);
-       if (!NT_STATUS_IS_OK(status)) {
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_OpenPolicy_r(b1, mem_ctx, &r),
+               "OpenPolicy failed");
+       if (!NT_STATUS_IS_OK(r.out.result)) {
                torture_comment(torture, "lsa_OpenPolicy not supported - skipping\n");
                talloc_free(mem_ctx);
                return true;
@@ -78,21 +81,18 @@ static bool test_handles_lsa(struct torture_context *torture)
        c.in.handle = &handle;
        c.out.handle = &handle2;
 
-       status = dcerpc_lsa_Close(p2, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p2");
-       torture_assert_int_equal(torture, p2->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b2, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p2");
 
-       status = dcerpc_lsa_Close(p1, mem_ctx, &c);
-       torture_assert_ntstatus_ok(torture, status, "closing policy handle on p1");
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_Close_r(b1, mem_ctx, &c),
+               "Close failed");
+       torture_assert_ntstatus_ok(torture, c.out.result, "closing policy handle on p1");
 
-       status = dcerpc_lsa_Close(p1, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
+       status = dcerpc_lsa_Close_r(b1, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p1 again");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
-                                     "closing policy handle on p1 again");
-       
+
        talloc_free(mem_ctx);
 
        return true;
@@ -102,6 +102,7 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
 {
        NTSTATUS status;
        struct dcerpc_pipe *p1, *p2, *p3, *p4, *p5;
+       struct dcerpc_binding_handle *b1, *b2, *b3, *b4;
        struct policy_handle handle;
        struct policy_handle handle2;
        struct lsa_ObjectAttribute attr;
@@ -109,6 +110,7 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
        struct lsa_OpenPolicy r;
        struct lsa_Close c;
        struct lsa_QuerySecurity qsec;
+       struct sec_desc_buf *sdbuf = NULL;
        uint16_t system_name = '\\';
        TALLOC_CTX *mem_ctx = talloc_new(torture);
        enum dcerpc_transport_t transport;
@@ -116,25 +118,25 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
 
        torture_comment(torture, "RPC-HANDLE-LSARPC-SHARED\n");
 
-       if (lp_parm_bool(-1, "torture", "samba4", False)) {
-               torture_comment(torture, "LSA shared-policy-handle test against Samba4 - skipping\n");
-               return true;
-       }
-
        torture_comment(torture, "connect lsa pipe1\n");
-       status = torture_rpc_connection(mem_ctx, &p1, &dcerpc_table_lsarpc);
+       status = torture_rpc_connection(torture, &p1, &ndr_table_lsarpc);
        torture_assert_ntstatus_ok(torture, status, "opening lsa pipe1");
+       b1 = p1->binding_handle;
 
-       transport       = p1->conn->transport.transport,
+       transport       = p1->conn->transport.transport;
        assoc_group_id  = p1->assoc_group_id;
 
        torture_comment(torture, "use assoc_group_id[0x%08X] for new connections\n", assoc_group_id);
 
        torture_comment(torture, "connect lsa pipe2\n");
-       status = torture_rpc_connection_transport(mem_ctx, &p2, &dcerpc_table_lsarpc,
+       status = torture_rpc_connection_transport(torture, &p2, &ndr_table_lsarpc,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_ok(torture, status, "opening lsa pipe2");
+       b2 = p2->binding_handle;
+
+       torture_comment(torture, "got assoc_group_id[0x%08X] for p2\n", 
+                       p2->assoc_group_id);
 
        qos.len = 0;
        qos.impersonation_level = 2;
@@ -154,8 +156,9 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
        r.out.handle = &handle;
 
        torture_comment(torture, "open lsa policy handle\n");
-       status = dcerpc_lsa_OpenPolicy(p1, mem_ctx, &r);
-       if (!NT_STATUS_IS_OK(status)) {
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_OpenPolicy_r(b1, mem_ctx, &r),
+               "OpenPolicy failed");
+       if (!NT_STATUS_IS_OK(r.out.result)) {
                torture_comment(torture, "lsa_OpenPolicy not supported - skipping\n");
                talloc_free(mem_ctx);
                return true;
@@ -165,13 +168,15 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
         * connect p3 after the policy handle is opened
         */
        torture_comment(torture, "connect lsa pipe3 after the policy handle is opened\n");
-       status = torture_rpc_connection_transport(mem_ctx, &p3, &dcerpc_table_lsarpc,
+       status = torture_rpc_connection_transport(torture, &p3, &ndr_table_lsarpc,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_ok(torture, status, "opening lsa pipe3");
+       b3 = p3->binding_handle;
 
        qsec.in.handle          = &handle;
        qsec.in.sec_info        = 0;
+       qsec.out.sdbuf          = &sdbuf;
        c.in.handle = &handle;
        c.out.handle = &handle2;
 
@@ -179,65 +184,68 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
         * use policy handle on all 3 connections
         */
        torture_comment(torture, "use the policy handle on p1,p2,p3\n");
-       status = dcerpc_lsa_QuerySecurity(p1, mem_ctx, &qsec);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b1, mem_ctx, &qsec),
+               "QuerySecurity failed");
+       torture_assert_ntstatus_equal(torture, qsec.out.result, NT_STATUS_OK,
                                      "use policy handle on p1");
 
-       status = dcerpc_lsa_QuerySecurity(p2, mem_ctx, &qsec);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b2, mem_ctx, &qsec),
+               "QuerySecurity failed");
+       torture_assert_ntstatus_equal(torture, qsec.out.result, NT_STATUS_OK,
                                      "use policy handle on p2");
 
-       status = dcerpc_lsa_QuerySecurity(p3, mem_ctx, &qsec);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b3, mem_ctx, &qsec),
+               "QuerySecurity failed");
+       torture_assert_ntstatus_equal(torture, qsec.out.result, NT_STATUS_OK,
                                      "use policy handle on p3");
 
        /*
         * close policy handle on connection 2 and the others get a fault
         */
        torture_comment(torture, "close the policy handle on p2 others get a fault\n");
-       status = dcerpc_lsa_Close(p2, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_Close_r(b2, mem_ctx, &c),
+               "Close failed");
+       torture_assert_ntstatus_equal(torture, c.out.result, NT_STATUS_OK,
                                      "closing policy handle on p2");
 
-       status = dcerpc_lsa_Close(p1, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p1 again");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b1, mem_ctx, &c);
+
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p1 again");
 
-       status = dcerpc_lsa_Close(p3, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p3");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b3, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p3");
 
-       status = dcerpc_lsa_Close(p2, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p2 again");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b2, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p2 again");
 
        /*
         * open a new policy handle on p3
         */
        torture_comment(torture, "open a new policy handle on p3\n");
-       status = dcerpc_lsa_OpenPolicy(p3, mem_ctx, &r);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_OpenPolicy_r(b3, mem_ctx, &r),
+               "OpenPolicy failed");
+       torture_assert_ntstatus_equal(torture, r.out.result, NT_STATUS_OK,
                                      "open policy handle on p3");
 
        /*
         * use policy handle on all 3 connections
         */
        torture_comment(torture, "use the policy handle on p1,p2,p3\n");
-       status = dcerpc_lsa_QuerySecurity(p1, mem_ctx, &qsec);
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b1, mem_ctx, &qsec),
+               "Query Security failed");
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
                                      "use policy handle on p1");
 
-       status = dcerpc_lsa_QuerySecurity(p2, mem_ctx, &qsec);
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b2, mem_ctx, &qsec),
+               "Query Security failed");
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
                                      "use policy handle on p2");
 
-       status = dcerpc_lsa_QuerySecurity(p3, mem_ctx, &qsec);
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b3, mem_ctx, &qsec),
+               "Query Security failed");
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
                                      "use policy handle on p3");
 
@@ -245,55 +253,54 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
         * close policy handle on connection 2 and the others get a fault
         */
        torture_comment(torture, "close the policy handle on p2 others get a fault\n");
-       status = dcerpc_lsa_Close(p2, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_Close_r(b2, mem_ctx, &c),
+               "Close failed");
+       torture_assert_ntstatus_equal(torture, c.out.result, NT_STATUS_OK,
                                      "closing policy handle on p2");
 
-       status = dcerpc_lsa_Close(p1, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p1 again");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b1, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p1 again");
 
-       status = dcerpc_lsa_Close(p3, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p3");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b3, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p3");
 
-       status = dcerpc_lsa_Close(p2, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p2 again");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b2, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p2 again");
 
        /*
         * open a new policy handle
         */
        torture_comment(torture, "open a new policy handle on p1 and use it\n");
-       status = dcerpc_lsa_OpenPolicy(p1, mem_ctx, &r);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_OpenPolicy_r(b1, mem_ctx, &r),
+               "OpenPolicy failed");
+       torture_assert_ntstatus_equal(torture, r.out.result, NT_STATUS_OK,
                                      "open 2nd policy handle on p1");
 
-       status = dcerpc_lsa_QuerySecurity(p1, mem_ctx, &qsec);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b1, mem_ctx, &qsec),
+               "QuerySecurity failed");
+       torture_assert_ntstatus_equal(torture, qsec.out.result, NT_STATUS_OK,
                                      "QuerySecurity handle on p1");
 
        /* close first connection */
        torture_comment(torture, "disconnect p1\n");
        talloc_free(p1);
-       msleep(5);
+       smb_msleep(5);
 
        /*
         * and it's still available on p2,p3
         */
        torture_comment(torture, "use policy handle on p2,p3\n");
-       status = dcerpc_lsa_QuerySecurity(p2, mem_ctx, &qsec);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b2, mem_ctx, &qsec),
+               "QuerySecurity failed");
+       torture_assert_ntstatus_equal(torture, qsec.out.result, NT_STATUS_OK,
                                      "QuerySecurity handle on p2 after p1 was disconnected");
 
-       status = dcerpc_lsa_QuerySecurity(p3, mem_ctx, &qsec);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b3, mem_ctx, &qsec),
+               "QuerySecurity failed");
+       torture_assert_ntstatus_equal(torture, qsec.out.result, NT_STATUS_OK,
                                      "QuerySecurity handle on p3 after p1 was disconnected");
 
        /*
@@ -301,13 +308,15 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
         * and use the handle on it
         */
        torture_comment(torture, "connect lsa pipe4 and use policy handle\n");
-       status = torture_rpc_connection_transport(mem_ctx, &p4, &dcerpc_table_lsarpc,
+       status = torture_rpc_connection_transport(torture, &p4, &ndr_table_lsarpc,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_ok(torture, status, "opening lsa pipe4");
+       b4 = p4->binding_handle;
 
-       status = dcerpc_lsa_QuerySecurity(p4, mem_ctx, &qsec);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_OK, 
+       torture_assert_ntstatus_ok(torture, dcerpc_lsa_QuerySecurity_r(b4, mem_ctx, &qsec),
+               "QuerySecurity failed");
+       torture_assert_ntstatus_equal(torture, qsec.out.result, NT_STATUS_OK,
                                      "using policy handle on p4");
 
        /*
@@ -318,13 +327,13 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
        talloc_free(p2);
        talloc_free(p3);
        talloc_free(p4);
-       msleep(10);
+       smb_msleep(10);
 
        /*
         * now open p5
         */
        torture_comment(torture, "connect lsa pipe5 - should fail\n");
-       status = torture_rpc_connection_transport(mem_ctx, &p5, &dcerpc_table_lsarpc,
+       status = torture_rpc_connection_transport(torture, &p5, &ndr_table_lsarpc,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,
@@ -340,6 +349,7 @@ static bool test_handles_samr(struct torture_context *torture)
 {
        NTSTATUS status;
        struct dcerpc_pipe *p1, *p2;
+       struct dcerpc_binding_handle *b1, *b2;
        struct policy_handle handle;
        struct policy_handle handle2;
        struct samr_Connect r;
@@ -348,35 +358,35 @@ static bool test_handles_samr(struct torture_context *torture)
 
        torture_comment(torture, "RPC-HANDLE-SAMR\n");
 
-       status = torture_rpc_connection(mem_ctx, &p1, &dcerpc_table_samr);
+       status = torture_rpc_connection(torture, &p1, &ndr_table_samr);
        torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");
+       b1 = p1->binding_handle;
 
-       status = torture_rpc_connection(mem_ctx, &p2, &dcerpc_table_samr);
-       torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");
+       status = torture_rpc_connection(torture, &p2, &ndr_table_samr);
+       torture_assert_ntstatus_ok(torture, status, "opening samr pipe2");
+       b2 = p2->binding_handle;
 
        r.in.system_name = 0;
        r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
        r.out.connect_handle = &handle;
 
-       status = dcerpc_samr_Connect(p1, mem_ctx, &r);
-       torture_assert_ntstatus_ok(torture, status, "opening policy handle on p1");
+       torture_assert_ntstatus_ok(torture, dcerpc_samr_Connect_r(b1, mem_ctx, &r),
+               "Connect failed");
+       torture_assert_ntstatus_ok(torture, r.out.result, "opening policy handle on p1");
 
        c.in.handle = &handle;
        c.out.handle = &handle2;
 
-       status = dcerpc_samr_Close(p2, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p2");
-       torture_assert_int_equal(torture, p2->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_samr_Close_r(b2, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p2");
 
-       status = dcerpc_samr_Close(p1, mem_ctx, &c);
-       torture_assert_ntstatus_ok(torture, status, "closing policy handle on p1");
+       torture_assert_ntstatus_ok(torture, dcerpc_samr_Close_r(b1, mem_ctx, &c),
+               "Close failed");
+       torture_assert_ntstatus_ok(torture, c.out.result, "closing policy handle on p1");
 
-       status = dcerpc_samr_Close(p1, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p1 again");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_samr_Close_r(b1, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p1 again");
        
        talloc_free(mem_ctx);
@@ -388,6 +398,7 @@ static bool test_handles_mixed_shared(struct torture_context *torture)
 {
        NTSTATUS status;
        struct dcerpc_pipe *p1, *p2, *p3, *p4, *p5, *p6;
+       struct dcerpc_binding_handle *b1, *b2;
        struct policy_handle handle;
        struct policy_handle handle2;
        struct samr_Connect r;
@@ -399,33 +410,33 @@ static bool test_handles_mixed_shared(struct torture_context *torture)
 
        torture_comment(torture, "RPC-HANDLE-MIXED-SHARED\n");
 
-       if (lp_parm_bool(-1, "torture", "samba4", False)) {
-               torture_comment(torture, "Mixed shared-policy-handle test against Samba4 - skipping\n");
-               return true;
-       }
-
        torture_comment(torture, "connect samr pipe1\n");
-       status = torture_rpc_connection(mem_ctx, &p1, &dcerpc_table_samr);
+       status = torture_rpc_connection(torture, &p1, &ndr_table_samr);
        torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");
+       b1 = p1->binding_handle;
 
-       transport       = p1->conn->transport.transport,
+       transport       = p1->conn->transport.transport;
        assoc_group_id  = p1->assoc_group_id;
 
        torture_comment(torture, "use assoc_group_id[0x%08X] for new connections\n", assoc_group_id);
 
        torture_comment(torture, "connect lsa pipe2\n");
-       status = torture_rpc_connection_transport(mem_ctx, &p2, &dcerpc_table_lsarpc,
+       status = torture_rpc_connection_transport(torture, &p2, &ndr_table_lsarpc,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_ok(torture, status, "opening lsa pipe2");
+       b2 = p2->binding_handle;
 
+       torture_comment(torture, "got assoc_group_id[0x%08X] for p2\n", 
+                       p2->assoc_group_id);
        r.in.system_name = 0;
        r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
        r.out.connect_handle = &handle;
 
        torture_comment(torture, "samr_Connect to open a policy handle on samr p1\n");
-       status = dcerpc_samr_Connect(p1, mem_ctx, &r);
-       torture_assert_ntstatus_ok(torture, status, "opening policy handle on p1");
+       torture_assert_ntstatus_ok(torture, dcerpc_samr_Connect_r(b1, mem_ctx, &r),
+               "Connect failed");
+       torture_assert_ntstatus_ok(torture, r.out.result, "opening policy handle on p1");
 
        lc.in.handle            = &handle;
        lc.out.handle           = &handle2;
@@ -433,43 +444,42 @@ static bool test_handles_mixed_shared(struct torture_context *torture)
        sc.out.handle           = &handle2;
 
        torture_comment(torture, "use policy handle on lsa p2 - should fail\n");
-       status = dcerpc_lsa_Close(p2, mem_ctx, &lc);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing handle on lsa p2");
-       torture_assert_int_equal(torture, p2->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_lsa_Close_r(b2, mem_ctx, &lc);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing handle on lsa p2");
 
        torture_comment(torture, "closing policy handle on samr p1\n");
-       status = dcerpc_samr_Close(p1, mem_ctx, &sc);
-       torture_assert_ntstatus_ok(torture, status, "closing policy handle on p1");
+       torture_assert_ntstatus_ok(torture, dcerpc_samr_Close_r(b1, mem_ctx, &sc),
+               "Close failed");
+       torture_assert_ntstatus_ok(torture, sc.out.result, "closing policy handle on p1");
 
        talloc_free(p1);
        talloc_free(p2);
-       msleep(10);
+       smb_msleep(10);
 
        torture_comment(torture, "connect samr pipe3 - should fail\n");
-       status = torture_rpc_connection_transport(mem_ctx, &p3, &dcerpc_table_samr,
+       status = torture_rpc_connection_transport(torture, &p3, &ndr_table_samr,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,
                                      "opening samr pipe3");
 
        torture_comment(torture, "connect lsa pipe4 - should fail\n");
-       status = torture_rpc_connection_transport(mem_ctx, &p4, &dcerpc_table_lsarpc,
+       status = torture_rpc_connection_transport(torture, &p4, &ndr_table_lsarpc,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,
                                      "opening lsa pipe4");
 
        torture_comment(torture, "connect samr pipe5 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);
-       status = torture_rpc_connection_transport(mem_ctx, &p5, &dcerpc_table_samr,
+       status = torture_rpc_connection_transport(torture, &p5, &ndr_table_samr,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,
                                      "opening samr pipe5");
 
        torture_comment(torture, "connect lsa pipe6 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);
-       status = torture_rpc_connection_transport(mem_ctx, &p6, &dcerpc_table_lsarpc,
+       status = torture_rpc_connection_transport(torture, &p6, &ndr_table_lsarpc,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,
@@ -491,23 +501,23 @@ static bool test_handles_random_assoc(struct torture_context *torture)
        torture_comment(torture, "RPC-HANDLE-RANDOM-ASSOC\n");
 
        torture_comment(torture, "connect samr pipe1\n");
-       status = torture_rpc_connection(mem_ctx, &p1, &dcerpc_table_samr);
+       status = torture_rpc_connection(torture, &p1, &ndr_table_samr);
        torture_assert_ntstatus_ok(torture, status, "opening samr pipe1");
 
-       transport       = p1->conn->transport.transport,
+       transport       = p1->conn->transport.transport;
        assoc_group_id  = p1->assoc_group_id;
 
-       torture_comment(torture, "pip1 use assoc_group_id[0x%08X]\n", assoc_group_id);
+       torture_comment(torture, "pipe1 uses assoc_group_id[0x%08X]\n", assoc_group_id);
 
        torture_comment(torture, "connect samr pipe2 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);
-       status = torture_rpc_connection_transport(mem_ctx, &p2, &dcerpc_table_samr,
+       status = torture_rpc_connection_transport(torture, &p2, &ndr_table_samr,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,
                                      "opening samr pipe2");
 
        torture_comment(torture, "connect samr pipe3 with assoc_group_id[0x%08X]- should fail\n", ++assoc_group_id);
-       status = torture_rpc_connection_transport(mem_ctx, &p3, &dcerpc_table_samr,
+       status = torture_rpc_connection_transport(torture, &p3, &ndr_table_samr,
                                                  transport,
                                                  assoc_group_id);
        torture_assert_ntstatus_equal(torture, status, NT_STATUS_UNSUCCESSFUL,
@@ -523,6 +533,7 @@ static bool test_handles_drsuapi(struct torture_context *torture)
 {
        NTSTATUS status;
        struct dcerpc_pipe *p1, *p2;
+       struct dcerpc_binding_handle *b1, *b2;
        struct policy_handle handle;
        struct policy_handle handle2;
        struct GUID bind_guid;
@@ -532,11 +543,13 @@ static bool test_handles_drsuapi(struct torture_context *torture)
 
        torture_comment(torture, "RPC-HANDLE-DRSUAPI\n");
 
-       status = torture_rpc_connection(mem_ctx, &p1, &dcerpc_table_drsuapi);
+       status = torture_rpc_connection(torture, &p1, &ndr_table_drsuapi);
        torture_assert_ntstatus_ok(torture, status, "opening drsuapi pipe1");
+       b1 = p1->binding_handle;
 
-       status = torture_rpc_connection(mem_ctx, &p2, &dcerpc_table_drsuapi);
+       status = torture_rpc_connection(torture, &p2, &ndr_table_drsuapi);
        torture_assert_ntstatus_ok(torture, status, "opening drsuapi pipe1");
+       b2 = p2->binding_handle;
 
        GUID_from_string(DRSUAPI_DS_BIND_GUID, &bind_guid);
 
@@ -544,7 +557,7 @@ static bool test_handles_drsuapi(struct torture_context *torture)
        r.in.bind_info = NULL;
        r.out.bind_handle = &handle;
 
-       status = dcerpc_drsuapi_DsBind(p1, mem_ctx, &r);
+       status = dcerpc_drsuapi_DsBind_r(b1, mem_ctx, &r);
        if (!NT_STATUS_IS_OK(status)) {
                torture_comment(torture, "drsuapi_DsBind not supported - skipping\n");
                talloc_free(mem_ctx);
@@ -554,19 +567,15 @@ static bool test_handles_drsuapi(struct torture_context *torture)
        c.in.bind_handle = &handle;
        c.out.bind_handle = &handle2;
 
-       status = dcerpc_drsuapi_DsUnbind(p2, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p2");
-       torture_assert_int_equal(torture, p2->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_drsuapi_DsUnbind_r(b2, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p2");
 
-       status = dcerpc_drsuapi_DsUnbind(p1, mem_ctx, &c);
+       status = dcerpc_drsuapi_DsUnbind_r(b1, mem_ctx, &c);
        torture_assert_ntstatus_ok(torture, status, "closing policy handle on p1");
 
-       status = dcerpc_drsuapi_DsUnbind(p1, mem_ctx, &c);
-       torture_assert_ntstatus_equal(torture, status, NT_STATUS_NET_WRITE_FAULT, 
-                                     "closing policy handle on p1 again");
-       torture_assert_int_equal(torture, p1->last_fault_code, DCERPC_FAULT_CONTEXT_MISMATCH, 
+       status = dcerpc_drsuapi_DsUnbind_r(b1, mem_ctx, &c);
+       torture_assert_ntstatus_equal(torture, status, NT_STATUS_RPC_SS_CONTEXT_MISMATCH,
                                      "closing policy handle on p1 again");
        
        talloc_free(mem_ctx);
@@ -574,12 +583,11 @@ static bool test_handles_drsuapi(struct torture_context *torture)
        return true;
 }
 
-
-struct torture_suite *torture_rpc_handles(void)
+struct torture_suite *torture_rpc_handles(TALLOC_CTX *mem_ctx)
 {
        struct torture_suite *suite;
 
-       suite = torture_suite_create(talloc_autofree_context(), "HANDLES");
+       suite = torture_suite_create(mem_ctx, "handles");
        torture_suite_add_simple_test(suite, "lsarpc", test_handles_lsa);
        torture_suite_add_simple_test(suite, "lsarpc-shared", test_handles_lsa_shared);
        torture_suite_add_simple_test(suite, "samr", test_handles_samr);