diff options
author | yar <yar@FreeBSD.org> | 2003-01-31 13:18:55 +0000 |
---|---|---|
committer | yar <yar@FreeBSD.org> | 2003-01-31 13:18:55 +0000 |
commit | 02d8e2b208323d19b6fc75fb1a39d03f8cacbd29 (patch) | |
tree | c3af2c8ef31e3273def6a99bd478871a3b7af89e /libexec/ftpd | |
parent | c2f3a5547f3a6afd4a27161b20225a0bd35686f8 (diff) | |
download | FreeBSD-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/ftpd')
-rw-r--r-- | libexec/ftpd/ftpd.c | 16 |
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) { |