Date: Wed, 25 Oct 2000 11:49:01 +0200 From: "Jose M. Alcaide" <jose@we.lc.ehu.es> To: Sean Lutner <sean@rentul.net>, hackers@FreeBSD.org Subject: Re: Who broke "ls" in FreeBSD? and why? Message-ID: <39F6AC8D.542149FC@we.lc.ehu.es> References: <Pine.BSF.4.21.0010241956520.16878-100000@lowrider.lewman.org>
next in thread | previous in thread | raw e-mail | index | archive | help
Sean Lutner wrote: > > I may just be being naive here, which is why I took this off the list. I > don't understand how a directory that is a-x will not let you run ls -l on > it. > > (48) sean@h0050dab9d058: ~ $ ls test > one three two > (49) sean@h0050dab9d058: ~ $ ls -l test/ > total 0 > -rw-r--r-- 1 sean sean 0 Oct 24 19:59 one > -rw-r--r-- 1 sean sean 0 Oct 24 19:59 three > -rw-r--r-- 1 sean sean 0 Oct 24 19:59 two > (50) sean@h0050dab9d058: ~ $ chmod a-x test/ > (51) sean@h0050dab9d058: ~ $ ls test/ > one three two > (52) sean@h0050dab9d058: ~ $ ls -l test/ > (53) sean@h0050dab9d058: ~ $ > > As you can see, after changing the permissions, you cannot run ls -l as > you could before. Perhaps I don't have the broken version, or there is > something I am missing. At any rate, a better understanding would be nice. > If a directory does not have search permission, the i-node contents of each of its entries cannot be examined. Under these circumstances, the directory listing "per se" does not fail, but the information requested cannot be shown. For example, in Solaris (and in SunOS 4.x): $ ls -ld Test/ drw-r----- 2 jose lsi 512 oct 25 11:13 Test/ $ ls Test 1 2 3 $ ls -i Test 288799 1 288800 2 288801 3 $ ls -l Test Test/1: Permission denied Test/2: Permission denied Test/3: Permission denied total 0 $ Anyway, I found something interesting: the bash shell is involved in some way: Using bash: $ mkdir Test $ touch Test/{1,2,3} $ chmod a-x Test $ ls Test && echo SUCCESS SUCCESS <------ WRONG!! $ /bin/ls Test && echo SUCCESS 1 2 3 <------ This works as expected (?!?!??) SUCCESS $ type ls ls is hashed (/bin/ls) Using [t]csh: $ csh %ls -ld Test drw------- 2 jose lsi 512 25 oct 10:49 Test %ls Test 1 2 3 <------ This works as expected %ls -i Test <------ WRONG!! %which ls /bin/ls % Using both bash and csh, 'ls -i' and 'ls -l' give nothing and don't return any error when the directory does not have search permission. "ls -i" should work, since getdirentries(2) only requires that the directory must be opened for reading. The behavior of "ls -l" may be a subject for discussion. Cheers, -- JMA ****** Jose M. Alcaide // jose@we.lc.ehu.es // jmas@FreeBSD.org ****** ** "Beware of Programmers who carry screwdrivers" -- Leonard Brandwein ** To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?39F6AC8D.542149FC>