s4: torture: Fix directory test against a server that actually uses index returns.
authorJeremy Allison <jra@samba.org>
Thu, 24 Sep 2015 18:28:50 +0000 (11:28 -0700)
committerJeremy Allison <jra@samba.org>
Fri, 25 Sep 2015 06:21:49 +0000 (08:21 +0200)
Who knew ? Finally found one that does this :-).

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Jim McDonough <jmcd@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri Sep 25 08:21:49 CEST 2015 on sn-devel-104

source4/torture/smb2/dir.c

index c57ce75c829a79382341670302b829f113f35801..98844b43005ce0ef8d16d9788dd9d28f4e4ef631 100644 (file)
@@ -710,6 +710,10 @@ static NTSTATUS multiple_smb2_search(struct smb2_tree *tree,
                        return NT_STATUS_UNSUCCESSFUL;
                }
 
+               if (count == 0 || result == NULL || result->count == 0) {
+                       return NT_STATUS_UNSUCCESSFUL;
+               }
+
                /*
                 * After the first iteration is complete set the CONTINUE
                 * FLAGS appropriately
@@ -717,6 +721,30 @@ static NTSTATUS multiple_smb2_search(struct smb2_tree *tree,
                switch (cont_type) {
                        case CONT_INDEX:
                                f.in.continue_flags = SMB2_CONTINUE_FLAG_INDEX;
+                               switch (data_level) {
+                                       case RAW_SEARCH_DATA_BOTH_DIRECTORY_INFO:
+                                               f.in.file_index =
+                                                       result->list[result->count-1].both_directory_info.file_index;
+                                               break;
+                                       case RAW_SEARCH_DATA_DIRECTORY_INFO:
+                                               f.in.file_index =
+                                                       result->list[result->count-1].directory_info.file_index;
+                                               break;
+                                       case RAW_SEARCH_DATA_FULL_DIRECTORY_INFO:
+                                               f.in.file_index =
+                                                       result->list[result->count-1].full_directory_info.file_index;
+                                               break;
+                                       case RAW_SEARCH_DATA_ID_FULL_DIRECTORY_INFO:
+                                               f.in.file_index =
+                                                       result->list[result->count-1].id_full_directory_info.file_index;
+                                               break;
+                                       case RAW_SEARCH_DATA_ID_BOTH_DIRECTORY_INFO:
+                                               f.in.file_index =
+                                                       result->list[result->count-1].id_both_directory_info.file_index;
+                                               break;
+                                       default:
+                                               return NT_STATUS_INVALID_PARAMETER;
+                               }
                                break;
                        case CONT_SINGLE:
                                f.in.continue_flags = SMB2_CONTINUE_FLAG_SINGLE;