- added a raw smb scanner
authorAndrew Tridgell <tridge@samba.org>
Wed, 13 Aug 2003 22:23:18 +0000 (22:23 +0000)
committerAndrew Tridgell <tridge@samba.org>
Wed, 13 Aug 2003 22:23:18 +0000 (22:23 +0000)
- its not a root_fid in ntrename

source/include/smb_interfaces.h
source/libcli/raw/rawfile.c
source/torture/gentest.c
source/torture/scanner.c
source/torture/torture.c
source/torture/torture_util.c

index f010883f187650b5ef1cca53fbc56f45a8e69802..2f5373702c26a897f730b4de91c38eeda80c6f40 100644 (file)
@@ -151,7 +151,7 @@ union smb_rename {
                struct {
                        uint16 attrib;
                        uint16 flags; /* see RENAME_FLAG_* */
-                       uint32 root_fid; /* is it? */
+                       uint32 unknown;
                        const char *old_name;
                        const char *new_name;
                } in;
index 57b6ded66f6dc4095db671a44889d8d2b75a207c..97ec7c1f003758cf657e355a6338980f1c0b15ca 100644 (file)
@@ -48,7 +48,7 @@ struct cli_request *smb_raw_rename_send(struct cli_tree *tree,
                SETUP_REQUEST(SMBntrename, 4, 0);
                SSVAL(req->out.vwv, VWV(0), parms->ntrename.in.attrib);
                SSVAL(req->out.vwv, VWV(1), parms->ntrename.in.flags);
-               SIVAL(req->out.vwv, VWV(2), parms->ntrename.in.root_fid);
+               SIVAL(req->out.vwv, VWV(2), parms->ntrename.in.unknown);
                cli_req_append_ascii4(req, parms->ntrename.in.old_name, STR_TERMINATE);
                cli_req_append_ascii4(req, parms->ntrename.in.new_name, STR_TERMINATE);
                break;
index 72b8e8d4049b6c699a9354bc7083a8a11a08c4d8..111d00b1a9943e6e12e2aa5ec4df31f058b4f73f 100644 (file)
@@ -1256,7 +1256,7 @@ static BOOL handler_ntrename(int instance)
        parm[0].ntrename.in.old_name = gen_fname();
        parm[0].ntrename.in.new_name = gen_fname();
        parm[0].ntrename.in.attrib = gen_attrib();
-       parm[0].ntrename.in.root_fid = gen_root_fid(instance);
+       parm[0].ntrename.in.unknown = gen_bits_mask2(0, 0xFFFFFFF);
        parm[0].ntrename.in.flags = gen_rename_flags();
 
        GEN_COPY_PARM;
index 0a92db9a4b8ef929a4b4897815b518c2e1f7bced..955ae7a274e54078ae6900400f2d1bb318d50dc2 100644 (file)
@@ -512,3 +512,52 @@ BOOL torture_nttrans_scan(int dummy)
        printf("nttrans scan finished\n");
        return True;
 }
+
+
+/* scan for valid base SMB requests */
+BOOL torture_smb_scan(int dummy)
+{
+       static struct cli_state *cli;
+       int op;
+       struct cli_request *req;
+       NTSTATUS status;
+
+       for (op=0x0;op<=0xFF;op++) {
+               if (op == SMBreadbraw) continue;
+
+               if (!torture_open_connection(&cli)) {
+                       return False;
+               }
+
+               req = cli_request_setup(cli->tree, op, 0, 0);
+
+               if (!cli_request_send(req)) {
+                       cli_request_destroy(req);
+                       break;
+               }
+
+               usleep(10000);
+               if (cli_transport_pending(cli->transport)) {
+                       status = cli_request_simple_recv(req);
+                       printf("op=0x%x status=%s\n", op, nt_errstr(status));
+                       torture_close_connection(cli);
+                       continue;
+               }
+
+               sleep(1);
+               if (cli_transport_pending(cli->transport)) {
+                       status = cli_request_simple_recv(req);
+                       printf("op=0x%x status=%s\n", op, nt_errstr(status));
+               } else {
+                       printf("op=0x%x no reply\n", op);
+                       cli_request_destroy(req);
+                       continue; /* don't attempt close! */
+               }
+
+               torture_close_connection(cli);
+       }
+
+
+       printf("smb scan finished\n");
+       return True;
+}
index a43db896e0bb870a8cacc4e7094eae1bc262b11e..bf46c888b2ee9db8f3796ca32bee7da62b9c4f49 100644 (file)
@@ -3929,6 +3929,7 @@ static struct {
        {"SCAN-TRANS2", torture_trans2_scan, 0},
        {"SCAN-NTTRANS", torture_nttrans_scan, 0},
        {"SCAN-ALIASES", torture_trans2_aliases, 0},
+       {"SCAN-SMB", torture_smb_scan, 0},
        {NULL, NULL, 0}};
 
 
index c8fb8a84b20ab9766bea97d9e640562a6dba7dd1..7fa8e1133b2d68617e59312bffd33eea63585741 100644 (file)
@@ -35,6 +35,41 @@ double end_timer(void)
               (tp2.tv_usec - tp1.tv_usec)*1.0e-6);
 }
 
+
+/*
+  create a directory, returning a handle to it
+*/
+int create_directory_handle(struct cli_state *cli, const char *dname)
+{
+       NTSTATUS status;
+       union smb_open io;
+       TALLOC_CTX *mem_ctx;
+
+       mem_ctx = talloc_init("create_directory_handle");
+
+       io.generic.level = RAW_OPEN_NTCREATEX;
+       io.ntcreatex.in.root_fid = 0;
+       io.ntcreatex.in.flags = 0;
+       io.ntcreatex.in.access_mask = SA_RIGHT_FILE_ALL_ACCESS;
+       io.ntcreatex.in.create_options = NTCREATEX_OPTIONS_DIRECTORY;
+       io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_NORMAL;
+       io.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_READ | NTCREATEX_SHARE_ACCESS_WRITE;
+       io.ntcreatex.in.alloc_size = 0;
+       io.ntcreatex.in.open_disposition = NTCREATEX_DISP_CREATE;
+       io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;
+       io.ntcreatex.in.security_flags = 0;
+       io.ntcreatex.in.fname = dname;
+
+       status = smb_raw_open(cli->tree, mem_ctx, &io);
+       if (!NT_STATUS_IS_OK(status)) {
+               talloc_destroy(mem_ctx);
+               return -1;
+       }
+
+       talloc_destroy(mem_ctx);
+       return io.ntcreatex.out.fnum;
+}
+
 /*
   sometimes we need a fairly complex file to work with, so we can test
   all possible attributes.