s3:smbd: add file_fsp_smb2()
authorStefan Metzmacher <metze@samba.org>
Fri, 8 Jun 2012 08:11:57 +0000 (10:11 +0200)
committerStefan Metzmacher <metze@samba.org>
Sat, 9 Jun 2012 19:23:44 +0000 (21:23 +0200)
metze

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

index 1fe5596acf6ae9b59868abbab9800120cf419f0b..50ce1b50cab9555feb69cad533d880f3a9ad6edc 100644 (file)
@@ -581,6 +581,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 d81feef073db0cd517650edd99e8c1539901b1d8..e7bc3eb5b48b671794426a46cd81d4ab5a119a54 100644 (file)
@@ -387,6 +387,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);