*stat()-ing symlinks with trailing slashes

Vlad GALU dudu at dudu.ro
Fri May 22 17:13:39 UTC 2009


-- cut here --
root at goofy / # rm -f passwd
root at goofy / # ln -s /etc/passwd passwd
root at goofy / # stat passwd
74 3 lrwxr-xr-x 1 root wheel 1668572463 11 "May 22 19:34:17 2009" "May
22 19:34:17 2009" "May 22 19:34:17 2009" "May 22 19:34:17 2009" 4096 0
0 passwd
root at goofy / # stat passwd/
74 95688 -rw-r--r-- 1 root wheel 393192 2158 "May 21 09:27:10 2009"
"May 21 09:27:10 2009" "May 22 17:25:49 2009" "Apr  7 13:05:32 2008"
4096 8 0 passwd/
root at goofy / #
-- and here --

stat(1) is smart enough to figure out that my /passwd is a symlink
then calls lstat() on it, thus returning the struct stat corresponding
to /etc/passwd
However, there's http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/21768

vfs_lookup.c has this piece of code:
-- cut here --
        /*
         * Check for bogus trailing slashes.
         */
        if (trailing_slash && dp->v_type != VDIR) {
                error = ENOTDIR;
                goto bad2;
        }
-- and here --

I've CC-ed my friend Mircea Danila, who noticed this behavior with lighttpd.
As my friend Mircea Danila, who I've CC-ed found out, lighttpd mistakenly treats


More information about the freebsd-fs mailing list