summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libexec/ftpd/ftpd.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/libexec/ftpd/ftpd.c b/libexec/ftpd/ftpd.c
index cf7d73d..477102a 100644
--- a/libexec/ftpd/ftpd.c
+++ b/libexec/ftpd/ftpd.c
@@ -1663,9 +1663,19 @@ retrieve(char *cmd, char *name)
return;
}
byte_count = -1;
- if (cmd == 0 && (fstat(fileno(fin), &st) < 0 || !S_ISREG(st.st_mode))) {
- reply(550, "%s: not a plain file.", name);
- goto done;
+ if (cmd == 0) {
+ if (fstat(fileno(fin), &st) < 0) {
+ perror_reply(550, name);
+ goto done;
+ }
+ if (!S_ISREG(st.st_mode)) {
+ if (guest) {
+ reply(550, "%s: not a plain file.", name);
+ goto done;
+ }
+ st.st_size = -1;
+ /* st.st_blksize is set for all descriptor types */
+ }
}
if (restart_point) {
if (type == TYPE_A) {
OpenPOWER on IntegriCloud