From: Volker Lendecke Date: Sat, 2 May 2009 09:31:37 +0000 (+0200) Subject: Fix bug 6302: Give the VFS a chance to read from 0-byte files X-Git-Tag: tdb-1.1.5~728 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=386a5d99b32fa1296618f59f9a9072d9faf2c8ac;p=thirdparty%2Fsamba.git Fix bug 6302: Give the VFS a chance to read from 0-byte files --- diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index d2e1f8be5fa..418c8ba7884 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -3358,14 +3358,13 @@ static void send_file_readX(connection_struct *conn, struct smb_request *req, return; } - if (startpos > sbuf.st_size) { - smb_maxcnt = 0; - } else if (smb_maxcnt > (sbuf.st_size - startpos)) { - smb_maxcnt = (sbuf.st_size - startpos); - } - - if (smb_maxcnt == 0) { - goto normal_read; + if (!S_ISREG(sbuf.st_mode) || (startpos > sbuf.st_size) + || (smb_maxcnt > (sbuf.st_size - startpos))) { + /* + * We already know that we would do a short read, so don't + * try the sendfile() path. + */ + goto nosendfile_read; } #if defined(WITH_SENDFILE) @@ -3482,6 +3481,8 @@ normal_read: return; } +nosendfile_read: + reply_outbuf(req, 12, smb_maxcnt); nread = read_file(fsp, smb_buf(req->outbuf), startpos, smb_maxcnt);