From ba8c00ba0854646f4000411fbbb214963daacce2 Mon Sep 17 00:00:00 2001 From: Uri Simchoni Date: Thu, 25 Feb 2016 07:08:06 +0200 Subject: [PATCH] smbd: ignore SVHDX create context According to discussions with dochelp@microsoft.com, an SMB server should ignore an SVHDX_OPEN_DEVICE_CONTEXT or SVHDX_OPEN_DEVICE_CONTEXT_V2 create context if it does not support the RSVD protocol. This is contrary to [MS-SMB2] rev 48.0 which states (3.3.5.9.14) that the open should fail in this case. Failing the create fails Windows backup if the SMB dialect is SMB3.0.2 or higher. Hopefully a new revision of MS-SMB2 will clear this up in the future. Meanwhile, this patch modifies smbd to ignore the SVHDX_OPEN_DEVICE_CONTEXT by default. This can be overriden by a VFS module if a VFS module adds support for RSVD. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11753 Signed-off-by: Uri Simchoni Reviewed-by: Jeremy Allison --- source3/smbd/smb2_create.c | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c index 76d6d69..f77a9f0 100644 --- a/source3/smbd/smb2_create.c +++ b/source3/smbd/smb2_create.c @@ -675,7 +675,6 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx, struct smb2_lease lease; struct smb2_lease *lease_ptr = NULL; ssize_t lease_len = -1; - struct smb2_create_blob *svhdx = NULL; exta = smb2_create_blob_find(&in_context_blobs, SMB2_CREATE_TAG_EXTA); @@ -689,13 +688,6 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx, SMB2_CREATE_TAG_TWRP); qfid = smb2_create_blob_find(&in_context_blobs, SMB2_CREATE_TAG_QFID); - if (smb2req->xconn->protocol >= PROTOCOL_SMB3_02) { - /* - * This was introduced with SMB3_02 - */ - svhdx = smb2_create_blob_find(&in_context_blobs, - SVHDX_OPEN_DEVICE_CONTEXT); - } fname = talloc_strdup(state, in_name); if (tevent_req_nomem(fname, req)) { @@ -916,13 +908,6 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx, } } - if (svhdx != NULL) { - /* SharedVHD is not yet supported */ - tevent_req_nterror( - req, NT_STATUS_INVALID_DEVICE_REQUEST); - return tevent_req_post(req, ev); - } - /* these are ignored for SMB2 */ in_create_options &= ~(0x10);/* NTCREATEX_OPTIONS_SYNC_ALERT */ in_create_options &= ~(0x20);/* NTCREATEX_OPTIONS_ASYNC_ALERT */ -- 2.5.0