From: Jeremy Allison Date: Wed, 17 Jul 2019 17:38:45 +0000 (-0700) Subject: s3: smbd: Prepare for SMB1 directory handle opens in reply_search() X-Git-Tag: tdb-1.4.2~365 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e686e7b6b3f6d8e8ac1cd71979e59d1382c2124a;p=thirdparty%2Fsamba.git s3: smbd: Prepare for SMB1 directory handle opens in reply_search() Call close_file() on any SMB1 directory handle once the dptr is closed. Signed-off-by: Jeremy Allison Reviewed-by: Ralph Boehme --- diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 2622681a2da..4fb35a485dd 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -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) {