r19392: Use torture_setting_* rather than lp_parm_* where possible.
[sfrench/samba-autobuild/.git] / source4 / torture / smb2 / connect.c
index 10b7046375db3f7ddac1ced1cbca76d7aad7f173..46aabc0e9a035940f279d48bcbb9799bd42212b7 100644 (file)
 */
 
 #include "includes.h"
-#include "smb.h"
 #include "librpc/gen_ndr/security.h"
 #include "libcli/smb2/smb2.h"
 #include "libcli/smb2/smb2_calls.h"
+#include "torture/torture.h"
 #include "torture/smb2/proto.h"
 
 /*
@@ -37,8 +37,8 @@ static NTSTATUS torture_smb2_close(struct smb2_tree *tree, struct smb2_handle ha
        TALLOC_CTX *tmp_ctx = talloc_new(tree);
 
        ZERO_STRUCT(io);
-       io.in.flags       = SMB2_CLOSE_FLAGS_FULL_INFORMATION;
-       io.in.handle   = handle;
+       io.in.file.handle       = handle;
+       io.in.flags             = SMB2_CLOSE_FLAGS_FULL_INFORMATION;
        status = smb2_close(tree, &io);
        if (!NT_STATUS_IS_OK(status)) {
                printf("close failed - %s\n", nt_errstr(status));
@@ -76,6 +76,8 @@ static NTSTATUS torture_smb2_write(struct smb2_tree *tree, struct smb2_handle ha
        
        if (lp_parm_bool(-1, "torture", "dangerous", False)) {
                data = data_blob_talloc(tree, NULL, 160000);
+       } else if (lp_parm_bool(-1, "torture", "samba4", False)) {
+               data = data_blob_talloc(tree, NULL, UINT16_MAX);
        } else {
                data = data_blob_talloc(tree, NULL, 120000);
        }
@@ -84,8 +86,8 @@ static NTSTATUS torture_smb2_write(struct smb2_tree *tree, struct smb2_handle ha
        }
 
        ZERO_STRUCT(w);
+       w.in.file.handle = handle;
        w.in.offset      = 0;
-       w.in.handle      = handle;
        w.in.data        = data;
 
        status = smb2_write(tree, &w);
@@ -105,7 +107,7 @@ static NTSTATUS torture_smb2_write(struct smb2_tree *tree, struct smb2_handle ha
        torture_smb2_all_info(tree, handle);
 
        ZERO_STRUCT(f);
-       f.in.handle      = handle;
+       f.in.file.handle = handle;
 
        status = smb2_flush(tree, &f);
        if (!NT_STATUS_IS_OK(status)) {
@@ -114,9 +116,9 @@ static NTSTATUS torture_smb2_write(struct smb2_tree *tree, struct smb2_handle ha
        }
 
        ZERO_STRUCT(r);
+       r.in.file.handle = handle;
        r.in.length      = data.length;
        r.in.offset      = 0;
-       r.in.handle      = handle;
 
        status = smb2_read(tree, tree, &r);
        if (!NT_STATUS_IS_OK(status)) {
@@ -159,7 +161,7 @@ static struct smb2_handle torture_smb2_create(struct smb2_tree *tree,
        status = smb2_create(tree, tmp_ctx, &io);
        if (!NT_STATUS_IS_OK(status)) {
                printf("create1 failed - %s\n", nt_errstr(status));
-               return io.out.handle;
+               return io.out.file.handle;
        }
 
        if (DEBUGLVL(1)) {
@@ -174,20 +176,20 @@ static struct smb2_handle torture_smb2_create(struct smb2_tree *tree,
                printf("size            = %lld\n", (long long)io.out.size);
                printf("file_attr       = 0x%x\n", io.out.file_attr);
                printf("handle          = %016llx%016llx\n", 
-                      (long long)io.out.handle.data[0], 
-                      (long long)io.out.handle.data[1]);
+                      (long long)io.out.file.handle.data[0], 
+                      (long long)io.out.file.handle.data[1]);
        }
 
        talloc_free(tmp_ctx);
        
-       return io.out.handle;
+       return io.out.file.handle;
 }
 
 
 /* 
    basic testing of SMB2 connection calls
 */
-BOOL torture_smb2_connect(void)
+BOOL torture_smb2_connect(struct torture_context *torture)
 {
        TALLOC_CTX *mem_ctx = talloc_new(NULL);
        struct smb2_tree *tree;
@@ -200,9 +202,27 @@ BOOL torture_smb2_connect(void)
 
        h1 = torture_smb2_create(tree, "test9.dat");
        h2 = torture_smb2_create(tree, "test9.dat");
-       torture_smb2_write(tree, h1);
-       torture_smb2_close(tree, h1);
-       torture_smb2_close(tree, h2);
+       status = torture_smb2_write(tree, h1);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("Write failed - %s\n", nt_errstr(status));
+               return False;
+       }
+       status = torture_smb2_close(tree, h1);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("Close failed - %s\n", nt_errstr(status));
+               return False;
+       }
+       status = torture_smb2_close(tree, h2);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("Close failed - %s\n", nt_errstr(status));
+               return False;
+       }
+
+       status = smb2_util_close(tree, h1);
+       if (!NT_STATUS_EQUAL(status, NT_STATUS_FILE_CLOSED)) {
+               printf("close should have closed the handle - %s\n", nt_errstr(status));
+               return False;
+       }
 
        status = smb2_tdis(tree);
        if (!NT_STATUS_IS_OK(status)) {