Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [PATCH] Allow globbing with unreadable parent directories



On Tue, Jan 12, 2021 at 7:04 PM Devin Hussey <husseydevin@xxxxxxxxx> wrote:
>
> POSIX specifies that when globbing, parent directories only have to be
> searchable, not readable.
>
> +       /* First check for search permission. */
> +       if (access(fn, X_OK) != 0)
>             return;

I don't think this is correct.  Even if it is strictly correct per
POSIX (which would seem strange to me), it should not be applied in
zsh native mode (see my previous email about setopts).

% mkdir /tmp/adirectory
% touch /tmp/adirectory/somefile
% chmod a-x /tmp/adirectory
% echo /tmp/adirectory/*
/tmp/adirectory/somefile
% echo /tmp/adirectory/*(.)
zsh: no match

Lack of search permission only means that you can't tell what kind of
file "somefile" is (you can't read its inode data, e.g., stat() it),
not that you can't see the name itself.

Compare "ls /tmp/adirectory" and "ls -l /tmp/adirectory" for a related example.

> +       /* Then, if we have read permission, try to open the directory. */
> +       if (access(fn, R_OK) == 0) {
> +           int dirs = !!q->next;
> +           DIR *lock = opendir(fn);

The access call here is redundant; opendir(fn) will fail if there is
not read permission.  Why do you believe the extra test is needed?

I think the rest is just re-indentation.  Did I miss an "else" clause
for the R_OK ?

Can you provide a specific test case that shows the difference in
behavior with and without this patch?  As far as I can tell, the patch
would only cause globbing to fail in more cases, not succeed where it
previously did not.




Messages sorted by: Reverse Date, Date, Thread, Author