HACK source4/torture/smb2/getinfo.c
authorStefan Metzmacher <metze@samba.org>
Thu, 25 Apr 2019 15:30:59 +0000 (17:30 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 15 Oct 2019 07:36:38 +0000 (09:36 +0200)
source4/torture/smb2/getinfo.c

index 5c9097f420028719d213f83d477c6610b8a84aa9..9c873f017893cd5ed6f8782669c63aa121f85352 100644 (file)
 #include "torture/smb2/proto.h"
 #include "torture/util.h"
 
+#define SMB_FILE_DIRECTORY_INFORMATION                 1001
+#define SMB_FILE_FULL_DIRECTORY_INFORMATION            1002
+#define SMB_FILE_BOTH_DIRECTORY_INFORMATION            1003
+#define SMB_FILE_BASIC_INFORMATION                     1004
+#define SMB_FILE_STANDARD_INFORMATION                  1005
+#define SMB_FILE_INTERNAL_INFORMATION                  1006
+#define SMB_FILE_EA_INFORMATION                                1007
+#define SMB_FILE_ACCESS_INFORMATION                    1008
+#define SMB_FILE_NAME_INFORMATION                      1009
+#define SMB_FILE_RENAME_INFORMATION                    1010
+#define SMB2_FILE_RENAME_INFORMATION_INTERNAL          0xFF0A  /* Internal mapped version. */
+#define SMB_FILE_LINK_INFORMATION                      1011
+#define SMB_FILE_NAMES_INFORMATION                     1012
+#define SMB_FILE_DISPOSITION_INFORMATION               1013
+#define SMB_FILE_POSITION_INFORMATION                  1014
+#define SMB_FILE_FULL_EA_INFORMATION                   1015
+#define SMB_FILE_MODE_INFORMATION                      1016
+#define SMB_FILE_ALIGNMENT_INFORMATION                 1017
+#define SMB_FILE_ALL_INFORMATION                       1018
+#define SMB_FILE_ALLOCATION_INFORMATION                        1019
+#define SMB_FILE_END_OF_FILE_INFORMATION               1020
+#define SMB_FILE_ALTERNATE_NAME_INFORMATION            1021
+#define SMB_FILE_STREAM_INFORMATION                    1022
+#define SMB_FILE_PIPE_INFORMATION                      1023
+#define SMB_FILE_PIPE_LOCAL_INFORMATION                        1024
+#define SMB_FILE_PIPE_REMOTE_INFORMATION               1025
+#define SMB_FILE_MAILSLOT_QUERY_INFORMATION            1026
+#define SMB_FILE_MAILSLOT_SET_INFORMATION              1027
+#define SMB_FILE_COMPRESSION_INFORMATION               1028
+#define SMB_FILE_OBJECTID_INFORMATION                  1029
+#define SMB_FILE_COMPLETION_INFORMATION                        1030
+#define SMB_FILE_MOVE_CLUSTER_INFORMATION              1031
+#define SMB_FILE_QUOTA_INFORMATION                     1032
+#define SMB_FILE_REPARSEPOINT_INFORMATION              1033
+#define SMB_FILE_NETWORK_OPEN_INFORMATION              1034
+#define SMB_FILE_ATTRIBUTE_TAG_INFORMATION             1035
+#define SMB_FILE_TRACKING_INFORMATION                  1036
+#define SMB_FILE_ID_BOTH_DIRECTORY_INFORMATION         1037
+#define SMB_FILE_ID_FULL_DIRECTORY_INFORMATION         1038
+#define SMB_FILE_VALID_DATA_LENGTH_INFORMATION         1039
+#define SMB_FILE_SHORT_NAME_INFORMATION                        1040
+#define SMB_FILE_SFIO_RESERVE_INFORMATION              1044
+#define SMB_FILE_SFIO_VOLUME_INFORMATION               1045
+#define SMB_FILE_HARD_LINK_INFORMATION                 1046
+#define SMB_FILE_NORMALIZED_NAME_INFORMATION           1048
+#define SMB_FILE_ID_GLOBAL_TX_DIRECTORY_INFORMATION    1050
+#define SMB_FILE_STANDARD_LINK_INFORMATION             1054
+#define SMB_FILE_MAXIMUM_INFORMATION                   1055
 static struct {
        const char *name;
        uint16_t level;
@@ -37,6 +85,53 @@ static struct {
        union smb_fileinfo dinfo;
 } file_levels[] = {
 #define LEVEL(x) .name = #x, .level = x
+ { LEVEL(SMB_FILE_DIRECTORY_INFORMATION) },
+ { LEVEL(SMB_FILE_FULL_DIRECTORY_INFORMATION) },
+ { LEVEL(SMB_FILE_BOTH_DIRECTORY_INFORMATION) },
+ { LEVEL(SMB_FILE_BASIC_INFORMATION) },
+ { LEVEL(SMB_FILE_STANDARD_INFORMATION) },
+ { LEVEL(SMB_FILE_INTERNAL_INFORMATION) },
+ { LEVEL(SMB_FILE_EA_INFORMATION) },
+ { LEVEL(SMB_FILE_ACCESS_INFORMATION) },
+ { LEVEL(SMB_FILE_NAME_INFORMATION) },
+ { LEVEL(SMB_FILE_RENAME_INFORMATION) },
+ { LEVEL(SMB_FILE_LINK_INFORMATION) },
+ { LEVEL(SMB_FILE_NAMES_INFORMATION) },
+ { LEVEL(SMB_FILE_DISPOSITION_INFORMATION) },
+ { LEVEL(SMB_FILE_POSITION_INFORMATION) },
+ { LEVEL(SMB_FILE_FULL_EA_INFORMATION) },
+ { LEVEL(SMB_FILE_MODE_INFORMATION) },
+ { LEVEL(SMB_FILE_ALIGNMENT_INFORMATION) },
+ { LEVEL(SMB_FILE_ALL_INFORMATION) },
+ { LEVEL(SMB_FILE_ALLOCATION_INFORMATION) },
+ { LEVEL(SMB_FILE_END_OF_FILE_INFORMATION) },
+ { LEVEL(SMB_FILE_ALTERNATE_NAME_INFORMATION) },
+ { LEVEL(SMB_FILE_STREAM_INFORMATION) },
+ { LEVEL(SMB_FILE_PIPE_INFORMATION) },
+ { LEVEL(SMB_FILE_PIPE_LOCAL_INFORMATION) },
+ { LEVEL(SMB_FILE_PIPE_REMOTE_INFORMATION) },
+ { LEVEL(SMB_FILE_MAILSLOT_QUERY_INFORMATION) },
+ { LEVEL(SMB_FILE_MAILSLOT_SET_INFORMATION) },
+ { LEVEL(SMB_FILE_COMPRESSION_INFORMATION) },
+ { LEVEL(SMB_FILE_OBJECTID_INFORMATION) },
+ { LEVEL(SMB_FILE_COMPLETION_INFORMATION) },
+ { LEVEL(SMB_FILE_MOVE_CLUSTER_INFORMATION) },
+ { LEVEL(SMB_FILE_QUOTA_INFORMATION) },
+ { LEVEL(SMB_FILE_REPARSEPOINT_INFORMATION) },
+ { LEVEL(SMB_FILE_NETWORK_OPEN_INFORMATION) },
+ { LEVEL(SMB_FILE_ATTRIBUTE_TAG_INFORMATION) },
+ { LEVEL(SMB_FILE_TRACKING_INFORMATION) },
+ { LEVEL(SMB_FILE_ID_BOTH_DIRECTORY_INFORMATION) },
+ { LEVEL(SMB_FILE_ID_FULL_DIRECTORY_INFORMATION) },
+ { LEVEL(SMB_FILE_VALID_DATA_LENGTH_INFORMATION) },
+ { LEVEL(SMB_FILE_SHORT_NAME_INFORMATION) },
+ { LEVEL(SMB_FILE_SFIO_RESERVE_INFORMATION) },
+ { LEVEL(SMB_FILE_SFIO_VOLUME_INFORMATION) },
+ { LEVEL(SMB_FILE_HARD_LINK_INFORMATION) },
+ { LEVEL(SMB_FILE_NORMALIZED_NAME_INFORMATION) },
+ { LEVEL(SMB_FILE_ID_GLOBAL_TX_DIRECTORY_INFORMATION) },
+ { LEVEL(SMB_FILE_STANDARD_LINK_INFORMATION) },
+
  { LEVEL(RAW_FILEINFO_BASIC_INFORMATION) },
  { LEVEL(RAW_FILEINFO_STANDARD_INFORMATION) },
  { LEVEL(RAW_FILEINFO_INTERNAL_INFORMATION) },
@@ -112,13 +207,19 @@ static bool torture_smb2_fileinfo(struct torture_context *tctx, struct smb2_tree
                file_levels[i].finfo.generic.level = file_levels[i].level;
                file_levels[i].finfo.generic.in.file.handle = hfile;
                file_levels[i].fstatus = smb2_getinfo_file(tree, tree, &file_levels[i].finfo);
-               torture_assert_ntstatus_ok(tctx, file_levels[i].fstatus,
+               torture_comment(tctx, "Testing file info %s - %s\n",
+                               file_levels[i].name,
+                               nt_errstr(file_levels[i].fstatus));
+               if (0) torture_assert_ntstatus_ok(tctx, file_levels[i].fstatus,
                                           talloc_asprintf(tctx, "%s on file",
                                                           file_levels[i].name));
                file_levels[i].dinfo.generic.level = file_levels[i].level;
                file_levels[i].dinfo.generic.in.file.handle = hdir;
                file_levels[i].dstatus = smb2_getinfo_file(tree, tree, &file_levels[i].dinfo);
-               torture_assert_ntstatus_ok(tctx, file_levels[i].dstatus,
+               torture_comment(tctx, "Testing dir info %s - %s\n",
+                               file_levels[i].name,
+                               nt_errstr(file_levels[i].dstatus));
+               if (0) torture_assert_ntstatus_ok(tctx, file_levels[i].dstatus,
                                           talloc_asprintf(tctx, "%s on dir",
                                                           file_levels[i].name));
        }
@@ -192,6 +293,11 @@ static bool torture_smb2_fileinfo_normalized(struct torture_context *tctx)
                        .level = RAW_FILEINFO_NORMALIZED_NAME_INFORMATION,
                },
        };
+       union smb_fileinfo sinfo = {
+               .stream_info = {
+               .level = RAW_FILEINFO_STREAM_INFORMATION,
+               },
+       };
        NTSTATUS status;
        enum protocol_types protocol;
        struct smb2_tree *tree_3_0 = NULL;
@@ -327,6 +433,11 @@ static bool torture_smb2_fileinfo_normalized(struct torture_context *tctx)
        status = torture_smb2_open(tree, f4sd, SEC_RIGHTS_FILE_ALL, &hf4sd);
        torture_assert_ntstatus_ok(tctx, status, "Unable to open hf4sd");
 
+       sinfo.stream_info.in.file.handle = hd3;
+       ZERO_STRUCT(sinfo.stream_info.out);
+       status = smb2_getinfo_file(tree, tree, &sinfo);
+       torture_assert_ntstatus_ok(tctx, status, "getinfo stream hd3");
+
        info.normalized_name_info.in.file.handle = hd1;
        ZERO_STRUCT(info.normalized_name_info.out);
        status = smb2_getinfo_file(tree, tree, &info);
@@ -625,19 +736,21 @@ static bool torture_smb2_qfile_buffercheck(struct torture_context *tctx)
        int i;
 
        struct level_buffersize levels[] = {
-               { 4, 40 },
-               { 5, 24 },
-               { 6, 8 },
-               { 7, 4 },
-               { 8, 4 },
-               { 16, 4 },
-               { 17, 4 },
+               //{ 4, 40 },
+               //{ 5, 24 },
+               //{ 6, 8 },
+               //{ 7, 4 },
+               //{ 8, 4 },
+               ////{ 9, 8 },
+               //{ 16, 4 },
+               //{ 17, 4 },
                { 18, 104 },
                { 21, 8 },
-               { 22, 32 },
-               { 28, 16 },
-               { 34, 56 },
-               { 35, 8 },
+               //{ 22, 32 },
+               //{ 28, 16 },
+               //{ 34, 56 },
+               //{ 35, 8 },
+               { 48, 8 },
        };
 
        torture_comment(tctx, "Testing SMB2_GETINFO_FILE buffer sizes\n");