return ret;
}
-/* open a rpc connection to a named pipe */
-static NTSTATUS torture_rpc_tcp(struct dcerpc_pipe **p,
- const char *pipe_name,
- const char *pipe_uuid,
- uint32 pipe_version)
-{
- NTSTATUS status;
- char *host = lp_parm_string(-1, "torture", "host");
- const char *port_str = lp_parm_string(-1, "torture", "share");
- uint32 port = atoi(port_str);
-
- if (port == 0) {
- status = dcerpc_epm_map_tcp_port(host,
- pipe_uuid, pipe_version,
- &port);
- if (!NT_STATUS_IS_OK(status)) {
- DEBUG(0,("Failed to map DCERPC/TCP port for '%s' - %s\n",
- pipe_name, nt_errstr(status)));
- return status;
- }
- DEBUG(1,("Mapped to DCERPC/TCP port %u\n", port));
- }
-
- DEBUG(2,("Connecting to dcerpc server %s:%u\n", host, port));
-
- status = dcerpc_pipe_open_tcp(p, host, port);
- if (!NT_STATUS_IS_OK(status)) {
- printf("Open of pipe '%s' failed with error (%s)\n",
- pipe_name, nt_errstr(status));
- return status;
- }
-
- /* always do NDR validation in smbtorture */
- (*p)->flags |= DCERPC_DEBUG_VALIDATE_BOTH;
-
- /* enable signing on tcp connections */
- (*p)->flags |= DCERPC_SIGN;
-
- /* bind to the pipe, using the uuid as the key */
- status = dcerpc_bind_auth_ntlm(*p, pipe_uuid, pipe_version,
- lp_workgroup(),
- lp_parm_string(-1, "torture", "username"),
- lp_parm_string(-1, "torture", "password"));
- if (!NT_STATUS_IS_OK(status)) {
- dcerpc_pipe_close(*p);
- return status;
- }
-
- return status;
-}
-
/* open a rpc connection to a named pipe */
NTSTATUS torture_rpc_connection(struct dcerpc_pipe **p,
const char *pipe_uuid,
uint32 pipe_version)
{
- struct cli_state *cli;
NTSTATUS status;
- char *transport = lp_parm_string(-1, "torture", "transport");
-
- if (strcmp(transport, "ncacn_ip_tcp") == 0) {
- return torture_rpc_tcp(p, pipe_name, pipe_uuid, pipe_version);
- }
-
- if (strcmp(transport, "ncacn_np") != 0) {
- printf("Unsupported RPC transport '%s'\n", transport);
- return NT_STATUS_UNSUCCESSFUL;
- }
-
- if (! *lp_parm_string(-1, "torture", "share")) {
- lp_set_cmdline("torture:share", "ipc$");
- }
-
- if (!torture_open_connection(&cli)) {
- return NT_STATUS_UNSUCCESSFUL;
- }
+ char *binding = lp_parm_string(-1, "torture", "binding");
- status = dcerpc_pipe_open_smb(p, cli->tree, pipe_name);
- if (!NT_STATUS_IS_OK(status)) {
- printf("Open of pipe '%s' failed with error (%s)\n",
- pipe_name, nt_errstr(status));
- torture_close_connection(cli);
- return status;
- }
-
- /* this ensures that the reference count is decremented so
- a pipe close will really close the link */
- cli_tree_close(cli->tree);
-
- /* bind to the pipe, using the uuid as the key */
- status = dcerpc_bind_auth_none(*p, pipe_uuid, pipe_version);
- if (!NT_STATUS_IS_OK(status)) {
- dcerpc_pipe_close(*p);
- return status;
+ if (!binding) {
+ printf("You must specify a ncacn binding string\n");
+ return NT_STATUS_INVALID_PARAMETER;
}
- /* always do NDR validation in smbtorture */
- (*p)->flags |= DCERPC_DEBUG_VALIDATE_BOTH;
+ status = dcerpc_pipe_connect(p, binding, pipe_uuid, pipe_version,
+ lp_workgroup(),
+ lp_parm_string(-1, "torture", "username"),
+ lp_parm_string(-1, "torture", "password"));
return status;
}
uint16 device, function;
int fnum;
const char *fname = "\\ioctl.dat";
- DATA_BLOB blob;
NTSTATUS status;
- struct smb_ioctl parms;
+ union smb_ioctl parms;
TALLOC_CTX *mem_ctx;
if (!torture_open_connection(&cli)) {
return False;
}
- parms.in.request = IOCTL_QUERY_JOB_INFO;
+ parms.ioctl.level = RAW_IOCTL_IOCTL;
+ parms.ioctl.in.request = IOCTL_QUERY_JOB_INFO;
status = smb_raw_ioctl(cli->tree, mem_ctx, &parms);
printf("ioctl job info: %s\n", cli_errstr(cli));
for (device=0;device<0x100;device++) {
printf("testing device=0x%x\n", device);
for (function=0;function<0x100;function++) {
- parms.in.request = (device << 16) | function;
+ parms.ioctl.in.request = (device << 16) | function;
status = smb_raw_ioctl(cli->tree, mem_ctx, &parms);
if (NT_STATUS_IS_OK(status)) {
printf("ioctl device=0x%x function=0x%x OK : %d bytes\n",
- device, function, blob.length);
- data_blob_free(&parms.out.blob);
+ device, function, parms.ioctl.out.blob.length);
}
}
}
{"RPC-DFS", torture_rpc_dfs, 0},
{"RPC-SPOOLSS", torture_rpc_spoolss, 0},
{"RPC-SAMR", torture_rpc_samr, 0},
+ {"RPC-NETLOGON", torture_rpc_netlogon, 0},
{"RPC-WKSSVC", torture_rpc_wkssvc, 0},
{"RPC-SRVSVC", torture_rpc_srvsvc, 0},
{"RPC-ATSVC", torture_rpc_atsvc, 0},
{"RPC-WINREG", torture_rpc_winreg, 0},
{"RPC-MGMT", torture_rpc_mgmt, 0},
{"RPC-SCANNER", torture_rpc_scanner, 0},
+ {"RPC-AUTOIDL", torture_rpc_autoidl, 0},
{NULL, NULL, 0}};
/* see if its a RPC transport specifier */
- if (strncmp(argv[1], "ncacn", 5) == 0) {
- char *transport = strdup(argv[1]);
- p = strchr_m(transport, ':');
- if (!p) usage();
- *p = 0;
- host = p+1;
- p = strchr_m(host, ':');
- if (p) {
- *p = 0;
- share = p+1;
- lp_set_cmdline("torture:share", share);
- } else {
- share = "";
- lp_set_cmdline("torture:share", share);
- }
- lp_set_cmdline("torture:host", host);
- lp_set_cmdline("torture:transport", transport);
+ if (strncmp(argv[1], "ncacn_", 6) == 0) {
+ lp_set_cmdline("torture:binding", argv[1]);
} else {
if (strncmp(argv[1], "//", 2)) {
usage();
}
}
- printf("host=%s share=%s user=%s myname=%s\n",
- host, share, lp_parm_string(-1, "torture", "username"),
- lp_netbios_name());
-
if (argc == optind) {
printf("You must specify a test to run, or 'ALL'\n");
} else {