Date: Tue, 31 Oct 2000 03:49:43 -0600 (CST) From: Ryan Thompson <ryan@sasknow.com> To: "Jose M. Alcaide" <jose@we.lc.ehu.es> Cc: hackers@FreeBSD.ORG Subject: Re: Who broke "ls" in FreeBSD? and why? Message-ID: <Pine.BSF.4.21.0010310336140.14845-100000@ren.sasknow.com> In-Reply-To: <39F6AC8D.542149FC@we.lc.ehu.es>
next in thread | previous in thread | raw e-mail | index | archive | help
Woo.. Trimmed the CC list on this one. Didn't catch the last
one. Sorry! :-)
Jose M. Alcaide wrote to Sean Lutner and hackers@FreeBSD.ORG:
> 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.
It won't, because in order to generate a listing of filenames in the
directory, you must have read access to that directory. To run ls -l,
both read AND search are required, as you must be able to a) get a list of
files, b) map those files to inodes (to return size, link and date
information, etc)
> > 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.
> >
What broken version? :-)
> 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:
When you use wildcard expansion, the shell is definitely involved.
Remember it is the shell, not ls, that expands wildcards.
>
> $ 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 (?!?!??)
What sort of shell functions/aliases do you have defined in bash? Looks
like ls is possibly aliased to something. (Possibly with different
command line arguments to /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
> %
>
Why not call /bin/ls explicitly in your examples, to remove the inherent
ambiguity?
> 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.
"Opened for reading" is different than "has execute (search) permission".
The two can be independent. Even still, I don't see where
getdirentries(2) "only requires the directory must be open for reading".
If that IS the case, then the -doc people have a change to commit :-)
Search permission is required to map pathnames to inodes. That's a
requirement of the kernel (and, consequently, of kernel calls) for normal
users.
> 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
>
--
Ryan Thompson <ryan@sasknow.com>
Network Administrator, Accounts
Phone: +1 (306) 664-1161
SaskNow Technologies http://www.sasknow.com
#106-380 3120 8th St E Saskatoon, SK S7H 0W2
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?Pine.BSF.4.21.0010310336140.14845-100000>
