s3:smbd: if a fsp has fsp->deferred_close, clients shouldn't be able to use it
authorStefan Metzmacher <metze@samba.org>
Mon, 23 Jul 2012 10:07:42 +0000 (12:07 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 23 Jul 2012 14:22:03 +0000 (16:22 +0200)
metze

Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Mon Jul 23 16:22:03 CEST 2012 on sn-devel-104

source3/smbd/files.c

index 390718f83ed99b5e7158236b09da15268f3cdb79..0550b3115521d6310544847807c1979ffe19c115 100644 (file)
@@ -544,6 +544,9 @@ files_struct *file_fsp(struct smb_request *req, uint16 fid)
        }
 
        if (req->chain_fsp != NULL) {
+               if (req->chain_fsp->deferred_close) {
+                       return NULL;
+               }
                return req->chain_fsp;
        }
 
@@ -560,9 +563,15 @@ files_struct *file_fsp(struct smb_request *req, uint16 fid)
        }
 
        fsp = op->compat;
-       if (fsp != NULL) {
-               req->chain_fsp = fsp;
+       if (fsp == NULL) {
+               return NULL;
        }
+
+       if (fsp->deferred_close) {
+               return NULL;
+       }
+
+       req->chain_fsp = fsp;
        return fsp;
 }
 
@@ -576,6 +585,9 @@ struct files_struct *file_fsp_smb2(struct smbd_smb2_request *smb2req,
        struct files_struct *fsp;
 
        if (smb2req->compat_chain_fsp != NULL) {
+               if (smb2req->compat_chain_fsp->deferred_close) {
+                       return NULL;
+               }
                return smb2req->compat_chain_fsp;
        }
 
@@ -613,6 +625,10 @@ struct files_struct *file_fsp_smb2(struct smbd_smb2_request *smb2req,
                return NULL;
        }
 
+       if (fsp->deferred_close) {
+               return NULL;
+       }
+
        smb2req->compat_chain_fsp = fsp;
        return fsp;
 }