From ed42b567e502fd059efc84b2cdcbfe7eed7830f9 Mon Sep 17 00:00:00 2001 From: Tal Aloni Date: Wed, 26 Jul 2017 23:15:35 +0300 Subject: [PATCH] SMBServer: SMB1: ReadAndX: Added workaround for JCIFS --- SMBLibrary/Server/SMB1/ReadWriteResponseHelper.cs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/SMBLibrary/Server/SMB1/ReadWriteResponseHelper.cs b/SMBLibrary/Server/SMB1/ReadWriteResponseHelper.cs index a11d391..b012b71 100644 --- a/SMBLibrary/Server/SMB1/ReadWriteResponseHelper.cs +++ b/SMBLibrary/Server/SMB1/ReadWriteResponseHelper.cs @@ -78,7 +78,14 @@ namespace SMBLibrary.Server.SMB1 } byte[] data; header.Status = share.FileStore.ReadFile(out data, openFile.Handle, (long)request.Offset, (int)maxCount); - if (header.Status != NTStatus.STATUS_SUCCESS) + if (header.Status == NTStatus.STATUS_END_OF_FILE) + { + // [MS-CIFS] Windows servers set the DataLength field to 0x0000 and return STATUS_SUCCESS. + // JCIFS expects the same response. + data = new byte[0]; + header.Status = NTStatus.STATUS_SUCCESS; + } + else if (header.Status != NTStatus.STATUS_SUCCESS) { state.LogToServer(Severity.Verbose, "Read from '{0}{1}' failed. NTStatus: {2}.", share.Name, openFile.Path, header.Status); return new ErrorResponse(request.CommandName);