This would appear to restore smbtorture to be able to use the syntax
[samba.git] / source4 / torture / torture.c
index 11b27f12ebfb227d7de37e4d0daea27c8be3ccb5..46bb99d2eac380748e0c8e4eafb72763f82a0006 100644 (file)
@@ -130,41 +130,6 @@ BOOL torture_close_connection(struct cli_state *c)
        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 = lp_parm_string(-1, "torture", "share");
-
-       DEBUG(2,("Connecting to dcerpc server %s:%s\n", host, port));
-
-       status = dcerpc_pipe_open_tcp(p, host, atoi(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;
-
-       /* 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, 
@@ -172,51 +137,18 @@ 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;
-       }
-
-       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;
-        }
+       char *binding = lp_parm_string(-1, "torture", "binding");
 
-       /* bind to the pipe, using the uuid as the key */
-#if 1
-       status = dcerpc_bind_auth_ntlm(*p, pipe_uuid, pipe_version,
-                                      lp_workgroup(),
-                                      lp_parm_string(-1, "torture", "username"),
-                                      lp_parm_string(-1, "torture", "password"));
-#else
-       status = dcerpc_bind_auth_none(*p, pipe_uuid, pipe_version);
-#endif
-       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;
 }
@@ -3572,9 +3504,8 @@ BOOL torture_ioctl_test(int dummy)
        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)) {
@@ -3593,20 +3524,20 @@ BOOL torture_ioctl_test(int dummy)
                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);
                        }
                }
        }
@@ -4045,6 +3976,7 @@ static struct {
         {"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},
@@ -4052,6 +3984,8 @@ static struct {
         {"RPC-EPMAPPER", torture_rpc_epmapper, 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}};
 
 
@@ -4191,24 +4125,10 @@ static void usage(void)
 
 
        /* 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 {
+               char *binding = NULL;
                if (strncmp(argv[1], "//", 2)) {
                        usage();
                }
@@ -4224,7 +4144,8 @@ static void usage(void)
                lp_set_cmdline("torture:host", host);
                lp_set_cmdline("torture:share", share);
                lp_set_cmdline("torture:password", "");
-               lp_set_cmdline("torture:transport", "ncacn_np");
+               asprintf(&binding, "ncacn_np:%s", host);
+               lp_set_cmdline("torture:binding", binding);
        }
 
        if (getenv("LOGNAME")) {
@@ -4301,10 +4222,6 @@ static void usage(void)
                }
        }
 
-       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 {