smbd: split out file_fsp_get from file_fsp_smb2
authorDavid Disseldorp <ddiss@samba.org>
Tue, 15 Jan 2013 16:23:04 +0000 (17:23 +0100)
committerDavid Disseldorp <ddiss@samba.org>
Mon, 15 Apr 2013 16:15:14 +0000 (18:15 +0200)
Obtain the files_struct from smb2req, persistent_id and
volatile_id.

Reviewed by: Jeremy Allison <jra@samba.org>

(cherry picked from commit 7ca8663e313a55fd6157cf20eb02c2ac8be94a00)

source3/smbd/files.c
source3/smbd/proto.h

index ef229a4098a2f25a5c25f76afe0059db756678b9..cba79aefcf072f3b876ca308ec29ef09ffa8521e 100644 (file)
@@ -582,22 +582,15 @@ files_struct *file_fsp(struct smb_request *req, uint16 fid)
        return fsp;
 }
 
-struct files_struct *file_fsp_smb2(struct smbd_smb2_request *smb2req,
-                                  uint64_t persistent_id,
-                                  uint64_t volatile_id)
+struct files_struct *file_fsp_get(struct smbd_smb2_request *smb2req,
+                                 uint64_t persistent_id,
+                                 uint64_t volatile_id)
 {
        struct smbXsrv_open *op;
        NTSTATUS status;
        NTTIME now = 0;
        struct files_struct *fsp;
 
-       if (smb2req->compat_chain_fsp != NULL) {
-               if (smb2req->compat_chain_fsp->deferred_close) {
-                       return NULL;
-               }
-               return smb2req->compat_chain_fsp;
-       }
-
        now = timeval_to_nttime(&smb2req->request_time);
 
        status = smb2srv_open_lookup(smb2req->sconn->conn,
@@ -636,6 +629,27 @@ struct files_struct *file_fsp_smb2(struct smbd_smb2_request *smb2req,
                return NULL;
        }
 
+       return fsp;
+}
+
+struct files_struct *file_fsp_smb2(struct smbd_smb2_request *smb2req,
+                                  uint64_t persistent_id,
+                                  uint64_t volatile_id)
+{
+       struct files_struct *fsp;
+
+       if (smb2req->compat_chain_fsp != NULL) {
+               if (smb2req->compat_chain_fsp->deferred_close) {
+                       return NULL;
+               }
+               return smb2req->compat_chain_fsp;
+       }
+
+       fsp = file_fsp_get(smb2req, persistent_id, volatile_id);
+       if (fsp == NULL) {
+               return NULL;
+       }
+
        smb2req->compat_chain_fsp = fsp;
        return fsp;
 }
index 35ae8a24632c19f69cc2415ee30cd5c522eb5429..fa64f4c67e1c24cc44871a16f173bdec2183244f 100644 (file)
@@ -392,6 +392,9 @@ void file_sync_all(connection_struct *conn);
 void fsp_free(files_struct *fsp);
 void file_free(struct smb_request *req, files_struct *fsp);
 files_struct *file_fsp(struct smb_request *req, uint16 fid);
+struct files_struct *file_fsp_get(struct smbd_smb2_request *smb2req,
+                                 uint64_t persistent_id,
+                                 uint64_t volatile_id);
 struct files_struct *file_fsp_smb2(struct smbd_smb2_request *smb2req,
                                   uint64_t persistent_id,
                                   uint64_t volatile_id);