summaryrefslogtreecommitdiffstats
path: root/libexec
diff options
context:
space:
mode:
authoryar <yar@FreeBSD.org>2003-01-31 13:18:55 +0000
committeryar <yar@FreeBSD.org>2003-01-31 13:18:55 +0000
commit02d8e2b208323d19b6fc75fb1a39d03f8cacbd29 (patch)
treec3af2c8ef31e3273def6a99bd478871a3b7af89e /libexec
parentc2f3a5547f3a6afd4a27161b20225a0bd35686f8 (diff)
downloadFreeBSD-src-02d8e2b208323d19b6fc75fb1a39d03f8cacbd29.zip
FreeBSD-src-02d8e2b208323d19b6fc75fb1a39d03f8cacbd29.tar.gz
Let real users access special files through FTP
if allowed by their filesystem permissions. This doesn't break anything since using sendfile(2) is triggered later by a separate S_ISREG conditional. PR: bin/20824 MFC after: 1 week
Diffstat (limited to 'libexec')
-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