diff options
author | yar <yar@FreeBSD.org> | 2004-10-15 09:31:08 +0000 |
---|---|---|
committer | yar <yar@FreeBSD.org> | 2004-10-15 09:31:08 +0000 |
commit | 3cdbfddc4099f9cdb0376850e8c0d50e05d3958f (patch) | |
tree | 38696e509d3228bfafbce77cb11c5513878b6164 /libexec/ftpd | |
parent | 745ab1a9bfe9687cf060fede5a2e2951709cbffe (diff) | |
download | FreeBSD-src-3cdbfddc4099f9cdb0376850e8c0d50e05d3958f.zip FreeBSD-src-3cdbfddc4099f9cdb0376850e8c0d50e05d3958f.tar.gz |
Account for the fact that sendfile(2) may hit the end of file
prematurely, e.g., if the file has been truncated by someone else.
PR: bin/72649
Submitted by: Oleg Koreshkov (portions)
MFC after: 2 weeks
Diffstat (limited to 'libexec/ftpd')
-rw-r--r-- | libexec/ftpd/ftpd.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c index 90373c6..f2aef51 100644 --- a/libexec/ftpd/ftpd.c +++ b/libexec/ftpd/ftpd.c @@ -2038,6 +2038,7 @@ send_data(FILE *instr, FILE *outstr, off_t blksize, off_t filesize, int isreg) if (isreg) { + char *msg = "Transfer complete."; off_t offset; int err; @@ -2062,10 +2063,20 @@ send_data(FILE *instr, FILE *outstr, off_t blksize, off_t filesize, int isreg) goto data_err; } + + /* + * We hit the EOF prematurely. + * Perhaps the file was externally truncated. + */ + if (cnt == 0) { + msg = "Transfer finished due to " + "premature end of file."; + break; + } } transflag = 0; - reply(226, "Transfer complete."); + reply(226, msg); return (0); } |