/*
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;
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;
ret = False;
}
- if (!test_inq_if_ids(p, loop_ctx)) {
+ if (!test_inq_if_ids(p, loop_ctx, NULL, NULL)) {
ret = False;
}
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 */
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;
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)
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;
}
+