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)
committerJeremy Allison <jra@samba.org>
Wed, 16 Jan 2013 22:15:07 +0000 (23:15 +0100)
Obtain the files_struct from smb2req, persistent_id and
volatile_id.

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

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 772730203f4b3c32e7a8572133d1d6537f9036d3..603114ecc9de984905d170a1dae1febb55e523b6 100644 (file)
@@ -387,6 +387,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);