]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: Prepare for SMB1 directory handle opens in reply_search()
authorJeremy Allison <jra@samba.org>
Wed, 17 Jul 2019 17:38:45 +0000 (10:38 -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/reply.c

index 2622681a2da0dfb693e36367c80eed20160942d5..4fb35a485dddc48644c7f8725e6ad91ab2ad3236 100644 (file)
@@ -1773,6 +1773,7 @@ void reply_search(struct smb_request *req)
        struct dptr_struct *dirptr = NULL;
        struct smbXsrv_connection *xconn = req->xconn;
        struct smbd_server_connection *sconn = req->sconn;
+       files_struct *fsp = NULL;
 
        START_PROFILE(SMBsearch);
 
@@ -2003,15 +2004,30 @@ void reply_search(struct smb_request *req)
                (X/Open spec) */
 
        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;
+               }
        } else if(expect_close && status_len == 0) {
+               fsp = dptr_fsp(sconn, dptr_num);
                /* Close the dptr - we know it's gone */
                dptr_close(sconn, &dptr_num);
+               if (fsp != NULL) {
+                       close_file(NULL, fsp, NORMAL_CLOSE);
+                       fsp = NULL;
+               }
        }
 
        /* If we were called as SMBfunique, then we can close the dirptr now ! */
        if(dptr_num >= 0 && req->cmd == SMBfunique) {
+               fsp = dptr_fsp(sconn, dptr_num);
                dptr_close(sconn, &dptr_num);
+               if (fsp != NULL) {
+                       close_file(NULL, fsp, NORMAL_CLOSE);
+                       fsp = NULL;
+               }
        }
 
        if ((numentries == 0) && !mask_contains_wcard) {