summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/torture/rpc/mgmt.c12
-rw-r--r--source4/torture/rpc/scanner.c53
2 files changed, 14 insertions, 51 deletions
diff --git a/source4/torture/rpc/mgmt.c b/source4/torture/rpc/mgmt.c
index 97b1d0462d..f28a0a9342 100644
--- a/source4/torture/rpc/mgmt.c
+++ b/source4/torture/rpc/mgmt.c
@@ -30,7 +30,11 @@
/*
ask the server what interface IDs are available on this endpoint
*/
-static BOOL test_inq_if_ids(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
+BOOL test_inq_if_ids(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
+ BOOL (*per_id_test)(const struct dcerpc_interface_table *iface,
+ TALLOC_CTX *mem_ctx,
+ struct dcerpc_syntax_id *id),
+ const void *priv)
{
NTSTATUS status;
struct mgmt_inq_if_ids r;
@@ -63,6 +67,10 @@ static BOOL test_inq_if_ids(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
printf("\tuuid %s version 0x%08x '%s'\n",
GUID_string(mem_ctx, &id->uuid),
id->if_version, idl_pipe_name(&id->uuid, id->if_version));
+
+ if (per_id_test) {
+ per_id_test(priv, mem_ctx, id);
+ }
}
return True;
@@ -255,7 +263,7 @@ BOOL torture_rpc_mgmt(struct torture_context *torture)
ret = False;
}
- if (!test_inq_if_ids(p, loop_ctx)) {
+ if (!test_inq_if_ids(p, loop_ctx, NULL, NULL)) {
ret = False;
}
diff --git a/source4/torture/rpc/scanner.c b/source4/torture/rpc/scanner.c
index 23e2b96c45..c0014f0617 100644
--- a/source4/torture/rpc/scanner.c
+++ b/source4/torture/rpc/scanner.c
@@ -51,7 +51,7 @@ static BOOL test_num_calls(const struct dcerpc_interface_table *iface,
printf("Failed to connect to '%s' on '%s' - %s\n",
uuid_str, iface->name, nt_errstr(status));
talloc_free(uuid_str);
- return False;
+ return True;
}
/* make null calls */
@@ -59,7 +59,7 @@ static BOOL test_num_calls(const struct dcerpc_interface_table *iface,
memset(stub_in.data, 0xFF, stub_in.length);
for (i=0;i<200;i++) {
- status = dcerpc_request(p, NULL, False, i, mem_ctx, &stub_in, &stub_out);
+ status = dcerpc_request(p, NULL, i, False, mem_ctx, &stub_in, &stub_out);
if (!NT_STATUS_IS_OK(status) &&
p->last_fault_code == DCERPC_FAULT_OP_RNG_ERROR) {
break;
@@ -91,52 +91,6 @@ done:
return True;
}
-/*
- ask the server what interface IDs are available on this endpoint
-*/
-static BOOL test_inq_if_ids(struct dcerpc_pipe *p,
- TALLOC_CTX *mem_ctx,
- const struct dcerpc_interface_table *iface)
-{
- NTSTATUS status;
- struct mgmt_inq_if_ids r;
- struct rpc_if_id_vector_t *vector;
- int i;
-
- r.out.if_id_vector = &vector;
-
- status = dcerpc_mgmt_inq_if_ids(p, mem_ctx, &r);
- if (!NT_STATUS_IS_OK(status)) {
- printf("inq_if_ids failed - %s\n", nt_errstr(status));
- return False;
- }
-
- if (!W_ERROR_IS_OK(r.out.result)) {
- printf("inq_if_ids gave error code %s\n", win_errstr(r.out.result));
- return False;
- }
-
- if (!r.out.if_id_vector) {
- printf("inq_if_ids gave NULL if_id_vector\n");
- return False;
- }
-
- for (i=0;i<vector->count;i++) {
- const char *uuid;
- struct dcerpc_syntax_id *id = vector->if_id[i].id;
- if (!id) continue;
-
- uuid = GUID_string(mem_ctx, &id->uuid),
-
- printf("\n\tuuid %s version 0x%08x '%s'\n",
- uuid,
- id->if_version, idl_pipe_name(&id->uuid, id->if_version));
-
- test_num_calls(iface, mem_ctx, id);
- }
-
- return True;
-}
BOOL torture_rpc_scanner(struct torture_context *torture)
@@ -196,10 +150,11 @@ BOOL torture_rpc_scanner(struct torture_context *torture)
continue;
}
- if (!test_inq_if_ids(p, mem_ctx, l->table)) {
+ if (!test_inq_if_ids(p, mem_ctx, test_num_calls, l->table)) {
ret = False;
}
}
return ret;
}
+