diff options
Diffstat (limited to 'source4/torture/rpc')
-rw-r--r-- | source4/torture/rpc/drsuapi.c | 165 | ||||
-rw-r--r-- | source4/torture/rpc/lsa_lookup.c | 83 | ||||
-rw-r--r-- | source4/torture/rpc/rpc.c | 2 | ||||
-rw-r--r-- | source4/torture/rpc/scanner.c | 6 |
4 files changed, 96 insertions, 160 deletions
diff --git a/source4/torture/rpc/drsuapi.c b/source4/torture/rpc/drsuapi.c index 606240993f..509bdad353 100644 --- a/source4/torture/rpc/drsuapi.c +++ b/source4/torture/rpc/drsuapi.c @@ -28,12 +28,11 @@ #define TEST_MACHINE_NAME "torturetest" -BOOL test_DsBind(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, +bool test_DsBind(struct dcerpc_pipe *p, struct torture_context *tctx, struct DsPrivate *priv) { NTSTATUS status; struct drsuapi_DsBind r; - BOOL ret = True; GUID_from_string(DRSUAPI_DS_BIND_GUID, &priv->bind_guid); @@ -41,30 +40,27 @@ BOOL test_DsBind(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, r.in.bind_info = NULL; r.out.bind_handle = &priv->bind_handle; - printf("testing DsBind\n"); + torture_comment(tctx, "testing DsBind\n"); - status = dcerpc_drsuapi_DsBind(p, mem_ctx, &r); + status = dcerpc_drsuapi_DsBind(p, tctx, &r); if (!NT_STATUS_IS_OK(status)) { const char *errstr = nt_errstr(status); if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) { - errstr = dcerpc_errstr(mem_ctx, p->last_fault_code); + errstr = dcerpc_errstr(tctx, p->last_fault_code); } - printf("dcerpc_drsuapi_DsBind failed - %s\n", errstr); - ret = False; + torture_fail(tctx, "dcerpc_drsuapi_DsBind failed"); } else if (!W_ERROR_IS_OK(r.out.result)) { - printf("DsBind failed - %s\n", win_errstr(r.out.result)); - ret = False; + torture_fail(tctx, "DsBind failed"); } - return ret; + return true; } -static BOOL test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, +static bool test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, struct torture_context *torture, struct DsPrivate *priv) { NTSTATUS status; struct drsuapi_DsGetDomainControllerInfo r; - BOOL ret = True; BOOL found = False; int i, j, k; @@ -101,39 +97,26 @@ static BOOL test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, TALLOC_CTX *me r.in.req.req1.domain_name = names[j].name; r.in.req.req1.level = level; - printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n", + torture_comment(torture, + "testing DsGetDomainControllerInfo level %d on domainname '%s'\n", r.in.req.req1.level, r.in.req.req1.domain_name); - status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, mem_ctx, &r); - if (!NT_STATUS_IS_OK(status)) { - const char *errstr = nt_errstr(status); - if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) { - errstr = dcerpc_errstr(mem_ctx, p->last_fault_code); - } - printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d\n" - " with dns domain failed - %s\n", - r.in.req.req1.level, errstr); - ret = False; - } else if (!W_ERROR_EQUAL(r.out.result, names[j].expected)) { - printf("DsGetDomainControllerInfo level %d\n" - " with dns domain failed - %s, expected %s\n", - r.in.req.req1.level, win_errstr(r.out.result), - win_errstr(names[j].expected)); - ret = False; - } + status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, torture, &r); + torture_assert_ntstatus_ok(torture, status, + "dcerpc_drsuapi_DsGetDomainControllerInfo with dns domain failed"); + torture_assert_werr_equal(torture, + r.out.result, names[j].expected, + "DsGetDomainControllerInfo level with dns domain failed"); if (!W_ERROR_IS_OK(r.out.result)) { /* If this was an error, we can't read the result structure */ continue; } - if (r.in.req.req1.level != r.out.level_out) { - printf("dcerpc_drsuapi_DsGetDomainControllerInfo level in (%d) != out (%d)\n", - r.in.req.req1.level, r.out.level_out); - ret = False; - /* We can't safely read the result structure */ - continue; - } + torture_assert_int_equal(torture, + r.in.req.req1.level, r.out.level_out, + "dcerpc_drsuapi_DsGetDomainControllerInfo level"); + switch (level) { case 1: for (k=0; k < r.out.ctr.ctr1.count; k++) { @@ -155,20 +138,11 @@ static BOOL test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, TALLOC_CTX *me } break; } - if (!found) { - printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d: Failed to find the domain controller (%s) we just created during the join\n", - r.in.req.req1.level, - torture_join_netbios_name(priv->join)); - ret = False; - } + torture_assert(torture, found, + "dcerpc_drsuapi_DsGetDomainControllerInfo: Failed to find the domain controller we just created during the join"); } } - if (lp_parm_bool(-1, "torture", "samba4", False)) { - printf("skipping DsGetDomainControllerInfo level -1 test against Samba4\n"); - return ret; - } - r.in.bind_handle = &priv->bind_handle; r.in.level = 1; @@ -178,25 +152,15 @@ static BOOL test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, TALLOC_CTX *me printf("testing DsGetDomainControllerInfo level %d on domainname '%s'\n", r.in.req.req1.level, r.in.req.req1.domain_name); - status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, mem_ctx, &r); - if (!NT_STATUS_IS_OK(status)) { - const char *errstr = nt_errstr(status); - if (NT_STATUS_EQUAL(status, NT_STATUS_NET_WRITE_FAULT)) { - errstr = dcerpc_errstr(mem_ctx, p->last_fault_code); - } - printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d\n" - " with dns domain failed - %s\n", - r.in.req.req1.level, errstr); - ret = False; - } else if (!W_ERROR_IS_OK(r.out.result)) { - printf("DsGetDomainControllerInfo level %d\n" - " with dns domain failed - %s\n", - r.in.req.req1.level, win_errstr(r.out.result)); - ret = False; - } + status = dcerpc_drsuapi_DsGetDomainControllerInfo(p, torture, &r); + + torture_assert_ntstatus_ok(torture, status, + "dcerpc_drsuapi_DsGetDomainControllerInfo with dns domain failed"); + torture_assert_werr_ok(torture, r.out.result, + "DsGetDomainControllerInfo with dns domain failed"); { - const char *dc_account = talloc_asprintf(mem_ctx, "%s\\%s$", + const char *dc_account = talloc_asprintf(torture, "%s\\%s$", torture_join_dom_netbios_name(priv->join), priv->dcinfo.netbios_name); for (k=0; k < r.out.ctr.ctr01.count; k++) { @@ -206,16 +170,12 @@ static BOOL test_DsGetDomainControllerInfo(struct dcerpc_pipe *p, TALLOC_CTX *me break; } } - if (!found) { - printf("dcerpc_drsuapi_DsGetDomainControllerInfo level %d: Failed to find the domain controller (%s) in last logon records\n", - r.in.req.req1.level, - dc_account); - ret = False; - } + torture_assert(torture, found, + "dcerpc_drsuapi_DsGetDomainControllerInfo level: Failed to find the domain controller in last logon records"); } - return ret; + return true; } static BOOL test_DsWriteAccountSpn(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, @@ -728,25 +688,20 @@ BOOL test_DsUnbind(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, return ret; } -BOOL torture_rpc_drsuapi(struct torture_context *torture) +bool torture_rpc_drsuapi(struct torture_context *torture) { NTSTATUS status; struct dcerpc_pipe *p; - TALLOC_CTX *mem_ctx; - BOOL ret = True; + bool ret = true; struct DsPrivate priv; struct cli_credentials *machine_credentials; - mem_ctx = talloc_init("torture_rpc_drsuapi"); - ZERO_STRUCT(priv); priv.join = torture_join_domain(TEST_MACHINE_NAME, ACB_SVRTRUST, &machine_credentials); if (!priv.join) { - talloc_free(mem_ctx); - printf("Failed to join as BDC\n"); - return False; + torture_fail(torture, "Failed to join as BDC"); } status = torture_rpc_connection(torture, @@ -754,31 +709,28 @@ BOOL torture_rpc_drsuapi(struct torture_context *torture) &ndr_table_drsuapi); if (!NT_STATUS_IS_OK(status)) { torture_leave_domain(priv.join); - talloc_free(mem_ctx); - return False; + torture_fail(torture, "Unable to connect to DRSUAPI pipe"); } - ret &= test_DsBind(p, mem_ctx, &priv); + ret &= test_DsBind(p, torture, &priv); #if 0 - ret &= test_QuerySitesByCost(p, mem_ctx, &priv); + ret &= test_QuerySitesByCost(p, torture, &priv); #endif - ret &= test_DsGetDomainControllerInfo(p, mem_ctx, &priv); - - ret &= test_DsCrackNames(p, mem_ctx, &priv); + ret &= test_DsGetDomainControllerInfo(p, torture, &priv); - ret &= test_DsWriteAccountSpn(p, mem_ctx, &priv); + ret &= test_DsCrackNames(p, torture, &priv); - ret &= test_DsReplicaGetInfo(p, mem_ctx, &priv); + ret &= test_DsWriteAccountSpn(p, torture, &priv); - ret &= test_DsReplicaSync(p, mem_ctx, &priv); + ret &= test_DsReplicaGetInfo(p, torture, &priv); - ret &= test_DsReplicaUpdateRefs(p, mem_ctx, &priv); + ret &= test_DsReplicaSync(p, torture, &priv); - ret &= test_DsGetNCChanges(p, mem_ctx, &priv); + ret &= test_DsReplicaUpdateRefs(p, torture, &priv); - ret &= test_DsUnbind(p, mem_ctx, &priv); + ret &= test_DsGetNCChanges(p, torture, &priv); - talloc_free(mem_ctx); + ret &= test_DsUnbind(p, torture, &priv); torture_leave_domain(priv.join); @@ -786,27 +738,22 @@ BOOL torture_rpc_drsuapi(struct torture_context *torture) } -BOOL torture_rpc_drsuapi_cracknames(struct torture_context *torture) +bool torture_rpc_drsuapi_cracknames(struct torture_context *torture) { NTSTATUS status; struct dcerpc_pipe *p; - TALLOC_CTX *mem_ctx; - BOOL ret = True; + bool ret = true; struct DsPrivate priv; struct cli_credentials *machine_credentials; - mem_ctx = talloc_init("torture_rpc_drsuapi"); - - printf("Connected to DRAUAPI pipe\n"); + torture_comment(torture, "Connected to DRSUAPI pipe\n"); ZERO_STRUCT(priv); priv.join = torture_join_domain(TEST_MACHINE_NAME, ACB_SVRTRUST, &machine_credentials); if (!priv.join) { - talloc_free(mem_ctx); - printf("Failed to join as BDC\n"); - return False; + torture_fail(torture, "Failed to join as BDC\n"); } status = torture_rpc_connection(torture, @@ -814,21 +761,19 @@ BOOL torture_rpc_drsuapi_cracknames(struct torture_context *torture) &ndr_table_drsuapi); if (!NT_STATUS_IS_OK(status)) { torture_leave_domain(priv.join); - talloc_free(mem_ctx); - return False; + torture_fail(torture, "Unable to connect to DRSUAPI pipe"); } - ret &= test_DsBind(p, mem_ctx, &priv); + ret &= test_DsBind(p, torture, &priv); if (ret) { /* We don't care if this fails, we just need some info from it */ - test_DsGetDomainControllerInfo(p, mem_ctx, &priv); + test_DsGetDomainControllerInfo(p, torture, &priv); - ret &= test_DsCrackNames(p, mem_ctx, &priv); + ret &= test_DsCrackNames(p, torture, &priv); - ret &= test_DsUnbind(p, mem_ctx, &priv); + ret &= test_DsUnbind(p, torture, &priv); } - talloc_free(mem_ctx); torture_leave_domain(priv.join); diff --git a/source4/torture/rpc/lsa_lookup.c b/source4/torture/rpc/lsa_lookup.c index d90c3694a9..7cab05257d 100644 --- a/source4/torture/rpc/lsa_lookup.c +++ b/source4/torture/rpc/lsa_lookup.c @@ -122,6 +122,7 @@ static const char *sid_type_lookup(enum lsa_SidType r) case SID_NAME_DELETED: return "SID_NAME_DELETED"; break; case SID_NAME_INVALID: return "SID_NAME_INVALID"; break; case SID_NAME_UNKNOWN: return "SID_NAME_UNKNOWN"; break; + case SID_NAME_COMPUTER: return "SID_NAME_COMPUTER"; break; } return "Invalid sid type\n"; } @@ -164,7 +165,7 @@ static BOOL test_lookupsids(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *p, return ret; } -static BOOL get_downleveltrust(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *p, +static BOOL get_downleveltrust(struct torture_context *tctx, struct dcerpc_pipe *p, struct policy_handle *handle, struct dom_sid **sid) { @@ -180,16 +181,13 @@ static BOOL get_downleveltrust(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *p, r.out.domains = &domains; r.out.resume_handle = &resume_handle; - status = dcerpc_lsa_EnumTrustDom(p, mem_ctx, &r); + status = dcerpc_lsa_EnumTrustDom(p, tctx, &r); - if (NT_STATUS_EQUAL(status, NT_STATUS_NO_MORE_ENTRIES)) { - printf("no trusts\n"); - return False; - } + if (NT_STATUS_EQUAL(status, NT_STATUS_NO_MORE_ENTRIES)) + torture_fail(tctx, "no trusts"); if (domains.count == 0) { - printf("no trusts\n"); - return False; + torture_fail(tctx, "no trusts"); } for (i=0; i<domains.count; i++) { @@ -201,7 +199,7 @@ static BOOL get_downleveltrust(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *p, q.in.handle = handle; q.in.dom_sid = domains.domains[i].sid; q.in.level = 6; - status = dcerpc_lsa_QueryTrustedDomainInfoBySid(p, mem_ctx, &q); + status = dcerpc_lsa_QueryTrustedDomainInfoBySid(p, tctx, &q); if (!NT_STATUS_IS_OK(status)) continue; if ((q.out.info->info_ex.trust_direction & 2) && @@ -211,52 +209,48 @@ static BOOL get_downleveltrust(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *p, } } - printf("I need a AD DC with an outgoing trust to NT4\n"); - return False; + torture_fail(tctx, "I need a AD DC with an outgoing trust to NT4"); } #define NUM_SIDS 8 -BOOL torture_rpc_lsa_lookup(struct torture_context *torture) +bool torture_rpc_lsa_lookup(struct torture_context *torture) { NTSTATUS status; struct dcerpc_pipe *p; - TALLOC_CTX *mem_ctx; BOOL ret = True; struct policy_handle *handle; struct dom_sid *dom_sid; struct dom_sid *trusted_sid; struct dom_sid *sids[NUM_SIDS]; - mem_ctx = talloc_init("torture_rpc_lsa"); - status = torture_rpc_connection(torture, &p, &ndr_table_lsarpc); if (!NT_STATUS_IS_OK(status)) { - ret = False; - goto done; + torture_fail(torture, "unable to connect to table"); } - ret &= open_policy(mem_ctx, p, &handle); - if (!ret) goto done; + ret &= open_policy(torture, p, &handle); + if (!ret) return false; - ret &= get_domainsid(mem_ctx, p, handle, &dom_sid); - if (!ret) goto done; + ret &= get_domainsid(torture, p, handle, &dom_sid); + if (!ret) return false; - ret &= get_downleveltrust(mem_ctx, p, handle, &trusted_sid); - if (!ret) goto done; + ret &= get_downleveltrust(torture, p, handle, &trusted_sid); + if (!ret) return false; - printf("domain sid: %s\n", dom_sid_string(mem_ctx, dom_sid)); + torture_comment(torture, "domain sid: %s\n", + dom_sid_string(torture, dom_sid)); - sids[0] = dom_sid_parse_talloc(mem_ctx, "S-1-1-0"); - sids[1] = dom_sid_parse_talloc(mem_ctx, "S-1-5-4"); - sids[2] = dom_sid_parse_talloc(mem_ctx, "S-1-5-32"); - sids[3] = dom_sid_parse_talloc(mem_ctx, "S-1-5-32-545"); - sids[4] = dom_sid_dup(mem_ctx, dom_sid); - sids[5] = dom_sid_add_rid(mem_ctx, dom_sid, 512); - sids[6] = dom_sid_dup(mem_ctx, trusted_sid); - sids[7] = dom_sid_add_rid(mem_ctx, trusted_sid, 512); + sids[0] = dom_sid_parse_talloc(torture, "S-1-1-0"); + sids[1] = dom_sid_parse_talloc(torture, "S-1-5-4"); + sids[2] = dom_sid_parse_talloc(torture, "S-1-5-32"); + sids[3] = dom_sid_parse_talloc(torture, "S-1-5-32-545"); + sids[4] = dom_sid_dup(torture, dom_sid); + sids[5] = dom_sid_add_rid(torture, dom_sid, 512); + sids[6] = dom_sid_dup(torture, trusted_sid); + sids[7] = dom_sid_add_rid(torture, trusted_sid, 512); - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 0, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 0, NT_STATUS_INVALID_PARAMETER, NULL); { @@ -265,7 +259,7 @@ BOOL torture_rpc_lsa_lookup(struct torture_context *torture) SID_NAME_ALIAS, SID_NAME_DOMAIN, SID_NAME_DOM_GRP, SID_NAME_DOMAIN, SID_NAME_DOM_GRP }; - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 1, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 1, NT_STATUS_OK, types); } @@ -275,7 +269,7 @@ BOOL torture_rpc_lsa_lookup(struct torture_context *torture) SID_NAME_UNKNOWN, SID_NAME_UNKNOWN, SID_NAME_DOMAIN, SID_NAME_DOM_GRP, SID_NAME_DOMAIN, SID_NAME_DOM_GRP }; - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 2, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 2, STATUS_SOME_UNMAPPED, types); } @@ -285,7 +279,7 @@ BOOL torture_rpc_lsa_lookup(struct torture_context *torture) SID_NAME_UNKNOWN, SID_NAME_UNKNOWN, SID_NAME_DOMAIN, SID_NAME_DOM_GRP, SID_NAME_UNKNOWN, SID_NAME_UNKNOWN }; - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 3, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 3, STATUS_SOME_UNMAPPED, types); } @@ -295,11 +289,11 @@ BOOL torture_rpc_lsa_lookup(struct torture_context *torture) SID_NAME_UNKNOWN, SID_NAME_UNKNOWN, SID_NAME_DOMAIN, SID_NAME_DOM_GRP, SID_NAME_UNKNOWN, SID_NAME_UNKNOWN }; - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 4, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 4, STATUS_SOME_UNMAPPED, types); } - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 5, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 5, NT_STATUS_NONE_MAPPED, NULL); { @@ -308,21 +302,18 @@ BOOL torture_rpc_lsa_lookup(struct torture_context *torture) SID_NAME_UNKNOWN, SID_NAME_UNKNOWN, SID_NAME_DOMAIN, SID_NAME_DOM_GRP, SID_NAME_UNKNOWN, SID_NAME_UNKNOWN }; - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 6, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 6, STATUS_SOME_UNMAPPED, types); } - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 7, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 7, NT_STATUS_INVALID_PARAMETER, NULL); - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 8, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 8, NT_STATUS_INVALID_PARAMETER, NULL); - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 9, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 9, NT_STATUS_INVALID_PARAMETER, NULL); - ret &= test_lookupsids(mem_ctx, p, handle, sids, NUM_SIDS, 10, + ret &= test_lookupsids(torture, p, handle, sids, NUM_SIDS, 10, NT_STATUS_INVALID_PARAMETER, NULL); - done: - talloc_free(mem_ctx); - return ret; } diff --git a/source4/torture/rpc/rpc.c b/source4/torture/rpc/rpc.c index af7e05a9f0..365f750c92 100644 --- a/source4/torture/rpc/rpc.c +++ b/source4/torture/rpc/rpc.c @@ -303,7 +303,7 @@ NTSTATUS torture_rpc_init(void) torture_suite_add_simple_test(suite, "SAMBA3-LSA", torture_samba3_rpc_lsa); torture_suite_add_simple_test(suite, "SAMBA3-SPOOLSS", torture_samba3_rpc_spoolss); torture_suite_add_simple_test(suite, "SAMBA3-WKSSVC", torture_samba3_rpc_wkssvc); - torture_suite_add_simple_test(suite, "RPC-SAMBA3-WINREG", torture_samba3_rpc_winreg); + torture_suite_add_simple_test(suite, "SAMBA3-WINREG", torture_samba3_rpc_winreg); torture_suite_add_simple_test(suite, "DRSUAPI", torture_rpc_drsuapi); torture_suite_add_simple_test(suite, "CRACKNAMES", torture_rpc_drsuapi_cracknames); torture_suite_add_simple_test(suite, "DSSETUP", torture_rpc_dssetup); diff --git a/source4/torture/rpc/scanner.c b/source4/torture/rpc/scanner.c index b2dd99fd66..e8203061e7 100644 --- a/source4/torture/rpc/scanner.c +++ b/source4/torture/rpc/scanner.c @@ -28,7 +28,7 @@ /* work out how many calls there are for an interface */ -static BOOL test_num_calls(struct torture_context *tctx, +static bool test_num_calls(struct torture_context *tctx, const struct ndr_interface_table *iface, TALLOC_CTX *mem_ctx, struct ndr_syntax_id *id) @@ -88,12 +88,12 @@ static BOOL test_num_calls(struct torture_context *tctx, done: talloc_free(p); - return True; + return true; } -BOOL torture_rpc_scanner(struct torture_context *torture) +bool torture_rpc_scanner(struct torture_context *torture) { NTSTATUS status; struct dcerpc_pipe *p; |