s3:smbd: add file_fsp_smb2()
authorStefan Metzmacher <metze@samba.org>
Fri, 8 Jun 2012 08:11:57 +0000 (10:11 +0200)
committerKarolin Seeger <kseeger@samba.org>
Sun, 17 Jun 2012 19:01:02 +0000 (21:01 +0200)
metze

Signed-off-by: Jeremy Allison <jra@samba.org>
source3/smbd/files.c
source3/smbd/proto.h

index fafb10d89964f6db5b4ecb580bf7008b76674a7c..9cf17ce90154a0427d87cf60d6569df46f321e58 100644 (file)
@@ -551,6 +551,49 @@ 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 *fsp;
+
+       if (smb2req->compat_chain_fsp != NULL) {
+               return smb2req->compat_chain_fsp;
+       }
+
+       if (persistent_id != volatile_id) {
+               return NULL;
+       }
+
+       if (volatile_id > UINT16_MAX) {
+               return NULL;
+       }
+
+       fsp = file_fnum(smb2req->sconn, (uint16_t)volatile_id);
+       if (fsp == NULL) {
+               return NULL;
+       }
+
+       if (smb2req->tcon == NULL) {
+               return NULL;
+       }
+
+       if (smb2req->tcon->compat_conn != fsp->conn) {
+               return NULL;
+       }
+
+       if (smb2req->session == NULL) {
+               return NULL;
+       }
+
+       if (smb2req->session->vuid != fsp->vuid) {
+               return NULL;
+       }
+
+       smb2req->compat_chain_fsp = fsp;
+       return fsp;
+}
+
 /****************************************************************************
  Duplicate the file handle part for a DOS or FCB open.
 ****************************************************************************/
index e9f462411115c61211a6be710b3398c0778c1c3d..929387b21939636e48740a85557a19676e87bc52 100644 (file)
@@ -373,6 +373,9 @@ bool file_find_subpath(files_struct *dir_fsp);
 void file_sync_all(connection_struct *conn);
 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_smb2(struct smbd_smb2_request *smb2req,
+                                  uint64_t persistent_id,
+                                  uint64_t volatile_id);
 NTSTATUS dup_file_fsp(struct smb_request *req, files_struct *from,
                      uint32 access_mask, uint32 share_access,
                      uint32 create_options, files_struct *to);