From owner-freebsd-fs@FreeBSD.ORG Fri May 22 19:58:44 2009 Return-Path: Delivered-To: freebsd-fs@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D5DC5106564A for ; Fri, 22 May 2009 19:58:44 +0000 (UTC) (envelope-from dudu@dudu.ro) Received: from mail-bw0-f165.google.com (mail-bw0-f165.google.com [209.85.218.165]) by mx1.freebsd.org (Postfix) with ESMTP id 6E2678FC1C for ; Fri, 22 May 2009 19:58:44 +0000 (UTC) (envelope-from dudu@dudu.ro) Received: by bwz9 with SMTP id 9so1909966bwz.43 for ; Fri, 22 May 2009 12:58:43 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.115.193 with SMTP id j1mr2498319faq.85.1243022323411; Fri, 22 May 2009 12:58:43 -0700 (PDT) In-Reply-To: References: Date: Fri, 22 May 2009 22:58:43 +0300 Message-ID: From: Vlad GALU To: freebsd-fs@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: Mircea Danila-Dumitrescu Subject: Re: *stat()-ing symlinks with trailing slashes X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 22 May 2009 19:58:45 -0000 On 5/22/09, Vlad GALU wrote: > -- cut here -- > root@goofy / # rm -f passwd > root@goofy / # ln -s /etc/passwd passwd > root@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@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@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 > So, to finish my idea, since I wasn't previously able to write a fully coherent mail, the behavior is that lighttpd returns the full source of scripts, instead of executing them, when they're symlinks and when the GET requests has a trailing "/". When there's no trailing slash, they get executed, as expected. The lighttpd devs say that, due to stat() not returning ENOTDIR, they simply try to list the content. Unfortunately I haven't dug any deeper into this, but merely proxied the symptoms from Mircea to this list. He should be able to provide more input on request.