s3:smbd: skip file handle checks for SMB2 compounded requests
authorStefan Metzmacher <metze@samba.org>
Tue, 9 Jun 2009 16:47:26 +0000 (18:47 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 9 Jun 2009 17:51:02 +0000 (19:51 +0200)
metze

source3/smbd/smb2_close.c
source3/smbd/smb2_flush.c
source3/smbd/smb2_ioctl.c
source3/smbd/smb2_read.c
source3/smbd/smb2_write.c

index a600498b2d631372e216203a3213aaeb63d1230f..6724e5cc1589afdf5a981c72ecfaff9121abb212 100644 (file)
@@ -56,7 +56,9 @@ NTSTATUS smbd_smb2_request_process_close(struct smbd_smb2_request *req)
        in_file_id_persistent   = BVAL(inbody, 0x08);
        in_file_id_volatile     = BVAL(inbody, 0x10);
 
-       if (in_file_id_persistent != 0) {
+       if (req->compat_chain_fsp) {
+               /* skip check */
+       } else if (in_file_id_persistent != 0) {
                return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
        }
 
index 37a8309b3314c47167eff7c552fa24d86b042ed7..ce560a1362558d23d74fc211d69b3c0cdc7206b5 100644 (file)
@@ -55,7 +55,9 @@ NTSTATUS smbd_smb2_request_process_flush(struct smbd_smb2_request *req)
        in_file_id_persistent   = BVAL(inbody, 0x08);
        in_file_id_volatile     = BVAL(inbody, 0x10);
 
-       if (in_file_id_persistent != 0) {
+       if (req->compat_chain_fsp) {
+               /* skip check */
+       } else if (in_file_id_persistent != 0) {
                return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
        }
 
index 9ff6c8ea979436fe180444f597ffab4beed761a7..a1f28856680935b70a833f0bd81c84008b268e4f 100644 (file)
@@ -83,8 +83,10 @@ NTSTATUS smbd_smb2_request_process_ioctl(struct smbd_smb2_request *req)
        in_input_buffer.data = (uint8_t *)req->in.vector[i+2].iov_base;
        in_input_buffer.length = in_input_length;
 
-       if (in_file_id_persistent == UINT64_MAX &&
-           in_file_id_volatile == UINT64_MAX) {
+       if (req->compat_chain_fsp) {
+               /* skip check */
+       } else if (in_file_id_persistent == UINT64_MAX &&
+                  in_file_id_volatile == UINT64_MAX) {
                /* without a handle */
        } else if (in_file_id_persistent != 0) {
                return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
index ae6b0f444968f8acc532481a951a7efe560055ef..5890ca6c4231a3afee62671c0dfea02cef86ed79 100644 (file)
@@ -81,7 +81,9 @@ NTSTATUS smbd_smb2_request_process_read(struct smbd_smb2_request *req)
                return smbd_smb2_request_error(req, NT_STATUS_INVALID_PARAMETER);
        }
 
-       if (in_file_id_persistent != 0) {
+       if (req->compat_chain_fsp) {
+               /* skip check */
+       } else if (in_file_id_persistent != 0) {
                return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
        }
 
index 43a312ad7ee6ae837bb50fa71201aeed354024a2..ccfe3b343424d39dca582df982a18042b5a085e2 100644 (file)
@@ -90,7 +90,9 @@ NTSTATUS smbd_smb2_request_process_write(struct smbd_smb2_request *req)
        in_data_buffer.data = (uint8_t *)req->in.vector[i+2].iov_base;
        in_data_buffer.length = in_data_length;
 
-       if (in_file_id_persistent != 0) {
+       if (req->compat_chain_fsp) {
+               /* skip check */
+       } else if (in_file_id_persistent != 0) {
                return smbd_smb2_request_error(req, NT_STATUS_FILE_CLOSED);
        }