]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: Prepare for SMB1 directory handle opens in call_trans2findfirst()
authorJeremy Allison <jra@samba.org>
Wed, 17 Jul 2019 17:45:14 +0000 (10:45 -0700)
committerRalph Boehme <slow@samba.org>
Tue, 6 Aug 2019 14:23:33 +0000 (14:23 +0000)
Call close_file() on any SMB1 directory handle once the dptr is closed.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/smbd/trans2.c

index 2f3ebb944c4598f1f648ae6ca40cc5e840852fa2..5442187cad46347e949cbb0cc12d269dfc717ccc 100644 (file)
@@ -2717,6 +2717,7 @@ static void call_trans2findfirst(connection_struct *conn,
                        ucf_flags_from_smb_request(req);
        bool backup_priv = false;
        bool as_root = false;
+       files_struct *fsp = NULL;
 
        if (total_params < 13) {
                reply_nterror(req, NT_STATUS_INVALID_PARAMETER);
@@ -3018,7 +3019,12 @@ total_data=%u (should be %u)\n", (unsigned int)total_data, (unsigned int)IVAL(pd
        /* Check if we can close the dirptr */
        if(close_after_first || (finished && close_if_end)) {
                DEBUG(5,("call_trans2findfirst - (2) closing dptr_num %d\n", dptr_num));
+               fsp = dptr_fsp(sconn, dptr_num);
                dptr_close(sconn, &dptr_num);
+               if (fsp != NULL) {
+                       close_file(NULL, fsp, NORMAL_CLOSE);
+                       fsp = NULL;
+               }
        }
 
        /*
@@ -3029,7 +3035,12 @@ total_data=%u (should be %u)\n", (unsigned int)total_data, (unsigned int)IVAL(pd
         */
 
        if(numentries == 0) {
+               fsp = dptr_fsp(sconn, dptr_num);
                dptr_close(sconn, &dptr_num);
+               if (fsp != NULL) {
+                       close_file(NULL, fsp, NORMAL_CLOSE);
+                       fsp = NULL;
+               }
                if (get_Protocol() < PROTOCOL_NT1) {
                        reply_force_doserror(req, ERRDOS, ERRnofiles);
                        goto out;