r25034: Remove unused variables.
[kai/samba.git] / source4 / torture / raw / setfileinfo.c
index 1bccb30094b45eed2d6689e2296a0aad3e376d2a..1178af4e9fb09a98190f993f99401304e93141d3 100644 (file)
@@ -5,7 +5,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -14,8 +14,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -24,6 +23,7 @@
 #include "libcli/raw/libcliraw.h"
 #include "libcli/libcli.h"
 #include "torture/util.h"
+#include "torture/raw/proto.h"
 
 #define BASEDIR "\\testsfileinfo"
 
    for each call we test that it succeeds, and where possible test 
    for consistency between the calls. 
 */
-BOOL torture_raw_sfileinfo(struct torture_context *torture)
+bool torture_raw_sfileinfo(struct torture_context *torture, 
+                          struct smbcli_state *cli)
 {
-       struct smbcli_state *cli;
-       BOOL ret = True;
-       TALLOC_CTX *mem_ctx;
-       int fnum_saved, d_fnum, fnum2, fnum = -1;
+       bool ret = true;
+       int fnum = -1;
        char *fnum_fname;
        char *fnum_fname_new;
        char *path_fname;
@@ -54,19 +53,13 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
        asprintf(&fnum_fname, BASEDIR "\\fnum_test_%d.txt", n);
        asprintf(&fnum_fname_new, BASEDIR "\\fnum_test_new_%d.txt", n);
 
-       if (!torture_open_connection(&cli, 0)) {
-               return False;
-       }
-
-       mem_ctx = talloc_init("torture_sfileinfo");
-
        if (!torture_setup_dir(cli, BASEDIR)) {
                return False;
        }
 
 #define RECREATE_FILE(fname) do { \
        if (fnum != -1) smbcli_close(cli->tree, fnum); \
-       fnum = create_complex_file(cli, mem_ctx, fname); \
+       fnum = create_complex_file(cli, torture, fname); \
        if (fnum == -1) { \
                printf("(%s) ERROR: open of %s failed (%s)\n", \
                       __location__, fname, smbcli_errstr(cli->tree)); \
@@ -95,7 +88,7 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
        } \
        finfo1.generic.level = RAW_FILEINFO_ALL_INFO; \
        finfo1.generic.in.file.fnum = fnum; \
-       status2 = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo1); \
+       status2 = smb_raw_fileinfo(cli->tree, torture, &finfo1); \
        if (!NT_STATUS_IS_OK(status2)) { \
                printf("(%s) %s pathinfo - %s\n", __location__, #call, nt_errstr(status)); \
                ret = False; \
@@ -118,10 +111,10 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
        } \
        finfo1.generic.level = RAW_FILEINFO_ALL_INFO; \
        finfo1.generic.in.file.path = path_fname; \
-       status2 = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo1); \
+       status2 = smb_raw_pathinfo(cli->tree, torture, &finfo1); \
        if (NT_STATUS_EQUAL(status2, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { \
                finfo1.generic.in.file.path = path_fname_new; \
-               status2 = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo1); \
+               status2 = smb_raw_pathinfo(cli->tree, torture, &finfo1); \
        } \
        if (!NT_STATUS_IS_OK(status2)) { \
                printf("(%s) %s pathinfo - %s\n", __location__, #call, nt_errstr(status2)); \
@@ -133,13 +126,13 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
                finfo2.generic.level = RAW_FILEINFO_ ## call; \
                if (check_fnum) { \
                        finfo2.generic.in.file.fnum = fnum; \
-                       status2 = smb_raw_fileinfo(cli->tree, mem_ctx, &finfo2); \
+                       status2 = smb_raw_fileinfo(cli->tree, torture, &finfo2); \
                } else { \
                        finfo2.generic.in.file.path = path_fname; \
-                       status2 = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo2); \
+                       status2 = smb_raw_pathinfo(cli->tree, torture, &finfo2); \
                        if (NT_STATUS_EQUAL(status2, NT_STATUS_OBJECT_NAME_NOT_FOUND)) { \
                                finfo2.generic.in.file.path = path_fname_new; \
-                               status2 = smb_raw_pathinfo(cli->tree, mem_ctx, &finfo2); \
+                               status2 = smb_raw_pathinfo(cli->tree, torture, &finfo2); \
                        } \
                } \
                if (!NT_STATUS_IS_OK(status2)) { \
@@ -154,7 +147,7 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
                printf("(%s) %s - %s/%s should be 0x%x - 0x%x\n", __location__, \
                       call_name, #stype, #field, \
                       (uint_t)value, (uint_t)finfo2.stype.out.field); \
-               dump_all_info(mem_ctx, &finfo1); \
+               dump_all_info(torture, &finfo1); \
                ret = False; \
        }} while (0)
 
@@ -165,9 +158,9 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
                        call_name, #stype, #field, \
                        (uint_t)value, \
                        (uint_t)nt_time_to_unix(finfo2.stype.out.field)); \
-               printf("\t%s", timestring(mem_ctx, value)); \
-               printf("\t%s\n", nt_time_string(mem_ctx, finfo2.stype.out.field)); \
-               dump_all_info(mem_ctx, &finfo1); \
+               printf("\t%s", timestring(torture, value)); \
+               printf("\t%s\n", nt_time_string(torture, finfo2.stype.out.field)); \
+               dump_all_info(torture, &finfo1); \
                ret = False; \
        }} while (0)
 
@@ -178,7 +171,7 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
                        call_name, #stype, #field, \
                        value, \
                        finfo2.stype.out.field); \
-               dump_all_info(mem_ctx, &finfo1); \
+               dump_all_info(torture, &finfo1); \
                ret = False; \
        }} while (0)
 
@@ -424,10 +417,64 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
 
        CHECK_CALL_PATH(MODE_INFORMATION, NT_STATUS_OK);
        CHECK_VALUE(MODE_INFORMATION, mode_information, mode, 0);
-#if 1
-       printf("finally the rename_information level\n");
-       smbcli_close(cli->tree, create_complex_file(cli, mem_ctx, fnum_fname_new));
-       smbcli_close(cli->tree, create_complex_file(cli, mem_ctx, path_fname_new));
+
+#if 0
+       printf("test unix_basic level\n");
+       CHECK_CALL_FNUM(UNIX_BASIC, NT_STATUS_OK);
+       CHECK_CALL_PATH(UNIX_BASIC, NT_STATUS_OK);
+
+       printf("test unix_link level\n");
+       CHECK_CALL_FNUM(UNIX_LINK, NT_STATUS_OK);
+       CHECK_CALL_PATH(UNIX_LINK, NT_STATUS_OK);
+#endif
+
+done:
+       smb_raw_exit(cli->session);
+       smbcli_close(cli->tree, fnum);
+       if (NT_STATUS_IS_ERR(smbcli_unlink(cli->tree, fnum_fname))) {
+               printf("Failed to delete %s - %s\n", fnum_fname, smbcli_errstr(cli->tree));
+       }
+       if (NT_STATUS_IS_ERR(smbcli_unlink(cli->tree, path_fname))) {
+               printf("Failed to delete %s - %s\n", path_fname, smbcli_errstr(cli->tree));
+       }
+
+       return ret;
+}
+
+/*
+ * basic testing of all RAW_SFILEINFO_RENAME call
+ */
+bool torture_raw_sfileinfo_rename(struct torture_context *torture,
+                                                                 struct smbcli_state *cli)
+{
+       BOOL ret = True;
+       int fnum_saved, d_fnum, fnum2, fnum = -1;
+       char *fnum_fname;
+       char *fnum_fname_new;
+       char *path_fname;
+       char *path_fname_new;
+       union smb_fileinfo finfo1, finfo2;
+       union smb_setfileinfo sfinfo;
+       NTSTATUS status, status2;
+       const char *call_name;
+       BOOL check_fnum;
+       int n = time(NULL) % 100;
+       
+       asprintf(&path_fname, BASEDIR "\\fname_test_%d.txt", n);
+       asprintf(&path_fname_new, BASEDIR "\\fname_test_new_%d.txt", n);
+       asprintf(&fnum_fname, BASEDIR "\\fnum_test_%d.txt", n);
+       asprintf(&fnum_fname_new, BASEDIR "\\fnum_test_new_%d.txt", n);
+
+       if (!torture_setup_dir(cli, BASEDIR)) {
+               return False;
+       }
+
+       RECREATE_BOTH;
+
+       ZERO_STRUCT(sfinfo);
+
+       smbcli_close(cli->tree, create_complex_file(cli, torture, fnum_fname_new));
+       smbcli_close(cli->tree, create_complex_file(cli, torture, path_fname_new));
 
        sfinfo.rename_information.in.overwrite = 0;
        sfinfo.rename_information.in.root_fid  = 0;
@@ -447,7 +494,7 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
        CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname_new);
 
        printf("Trying rename with dest file open\n");
-       fnum2 = create_complex_file(cli, mem_ctx, fnum_fname);
+       fnum2 = create_complex_file(cli, torture, fnum_fname);
        sfinfo.rename_information.in.new_name  = fnum_fname+strlen(BASEDIR)+1;
        sfinfo.rename_information.in.overwrite = 1;
        CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_ACCESS_DENIED);
@@ -474,7 +521,7 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
        CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);
        CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname);
 
-       fnum2 = create_complex_file(cli, mem_ctx, fnum_fname);
+       fnum2 = create_complex_file(cli, torture, fnum_fname);
        sfinfo.rename_information.in.new_name  = fnum_fname_new+strlen(BASEDIR)+1;
        sfinfo.rename_information.in.overwrite = 0;
        CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_OK);
@@ -506,17 +553,6 @@ BOOL torture_raw_sfileinfo(struct torture_context *torture)
        sfinfo.rename_information.in.root_fid = d_fnum;
        CHECK_CALL_FNUM(RENAME_INFORMATION, NT_STATUS_INVALID_PARAMETER);
        CHECK_STR(NAME_INFO, name_info, fname.s, fnum_fname);
-#endif
-
-#if 0
-       printf("test unix_basic level\n");
-       CHECK_CALL_FNUM(UNIX_BASIC, NT_STATUS_OK);
-       CHECK_CALL_PATH(UNIX_BASIC, NT_STATUS_OK);
-
-       printf("test unix_link level\n");
-       CHECK_CALL_FNUM(UNIX_LINK, NT_STATUS_OK);
-       CHECK_CALL_PATH(UNIX_LINK, NT_STATUS_OK);
-#endif
 
 done:
        smb_raw_exit(cli->session);
@@ -528,36 +564,25 @@ done:
                printf("Failed to delete %s - %s\n", path_fname, smbcli_errstr(cli->tree));
        }
 
-       torture_close_connection(cli);
-       talloc_free(mem_ctx);
        return ret;
 }
 
-
 /* 
    look for the w2k3 setpathinfo STANDARD bug
 */
-BOOL torture_raw_sfileinfo_bug(struct torture_context *torture)
+bool torture_raw_sfileinfo_bug(struct torture_context *torture,
+                                                          struct smbcli_state *cli)
 {
-       struct smbcli_state *cli;
-       TALLOC_CTX *mem_ctx;
        const char *fname = "\\bug3.txt";
        union smb_setfileinfo sfinfo;
        NTSTATUS status;
        int fnum;
 
-       if (!lp_parm_bool(-1, "torture", "dangerous", False)) {
-               printf("torture_raw_sfileinfo_bug disabled - enable dangerous tests to use\n");
-               return True;
-       }
-
-       if (!torture_open_connection(&cli, 0)) {
-               return False;
-       }
-
-       mem_ctx = talloc_init("torture_sfileinfo");
+       if (!torture_setting_bool(torture, "dangerous", false))
+               torture_skip(torture, 
+                       "torture_raw_sfileinfo_bug disabled - enable dangerous tests to use\n");
 
-       fnum = create_complex_file(cli, mem_ctx, fname);
+       fnum = create_complex_file(cli, torture, fname);
        smbcli_close(cli->tree, fnum);
 
        sfinfo.generic.level = RAW_SFILEINFO_STANDARD;