summaryrefslogtreecommitdiffstats
path: root/libexec/ftpd/ftpd.c
diff options
context:
space:
mode:
authoryar <yar@FreeBSD.org>2004-10-15 09:31:08 +0000
committeryar <yar@FreeBSD.org>2004-10-15 09:31:08 +0000
commit3cdbfddc4099f9cdb0376850e8c0d50e05d3958f (patch)
tree38696e509d3228bfafbce77cb11c5513878b6164 /libexec/ftpd/ftpd.c
parent745ab1a9bfe9687cf060fede5a2e2951709cbffe (diff)
downloadFreeBSD-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/ftpd.c')
-rw-r--r--libexec/ftpd/ftpd.c13
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);
}
OpenPOWER on IntegriCloud