rd->smb2.out.data.length= rd2->generic.out.nread;
rd->smb2.out.remaining = 0;
rd->smb2.out.reserved = 0;
- if (NT_STATUS_IS_OK(status) &&
- rd->smb2.out.data.length == 0) {
- status = NT_STATUS_END_OF_FILE;
- }
- /* SMB2 does honor the min_count field, SMB does not */
- if (NT_STATUS_IS_OK(status) &&
- rd->smb2.in.min_count > rd->smb2.out.data.length) {
- rd->smb2.out.data.length = 0;
- status = NT_STATUS_END_OF_FILE;
- }
break;
default:
return NT_STATUS_INVALID_LEVEL;
case RAW_READ_SMB2:
rd2->readx.in.file.ntvfs= rd->smb2.in.file.ntvfs;
rd2->readx.in.offset = rd->smb2.in.offset;
- rd2->readx.in.mincnt = rd->smb2.in.length;
+ rd2->readx.in.mincnt = rd->smb2.in.min_count;
rd2->readx.in.maxcnt = rd->smb2.in.length;
rd2->readx.in.remaining = 0;
rd2->readx.out.data = rd->smb2.out.data.data;
return pvfs_map_errno(pvfs, errno);
}
+ /* only SMB2 honors mincnt */
+ if (req->ctx->protocol == PROTOCOL_SMB2) {
+ if (rd->readx.in.mincnt > ret ||
+ (ret == 0 && maxcnt > 0)) {
+ return NT_STATUS_END_OF_FILE;
+ }
+ }
+
f->handle->position = f->handle->seek_offset = rd->readx.in.offset + ret;
rd->readx.out.nread = ret;