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

Re: [Bug] Strange Globing Behaviour when used with sudo



> 2018/05/31 17:44, Peter Stephenson <p.stephenson@xxxxxxxxxxx> wrote:
> 
> On Wed, 30 May 2018 22:49:32 +0200
> Bengt Brodersen <bengt.brodersen@xxxxxxxxx> wrote:
>> Just found a paragraph in stat(2) manpage on macos
> 
> If I've read this correctly, it sounds like it's worth trying to
> 
> #define _DARWIN_NO_64_BIT_INODE

I think the problem is not related with these macros (or inode size),
but anyway I manually added

#define _DARWIN_NO_64_BIT_INODE
#undef _DARWIN_USE_64_BIT_INODE   (this is defined by AC_SYS_LARGEFILE)

to config.h and built zsh; still the same problem for root.

As Phil Pennock pointed out, the problem originates from:

> 2018/05/31 5:23, Phil Pennock <zsh-workers+phil.pennock@xxxxxxxxxxxx> wrote:
> non-root:
> stat64("./dummy/.\0", 0x7FFF5F8A1948, 0x1000)		 = -1 Err#20
> 
> root:
> stat64("./dummy/.\0", 0x7FFF547477C8, 0x1000)		 = 0 0


I believe this is a bug of macOS (or a "feature" related with the "rootless"
nature of the OS?).

% ls dummy/.
ls: dummy/.: Not a directory
% sudo ls dummy/.
dummy/.

Same for "stat dummy/.".

I've tested three system calls stat(2), lstat(2) and access(2) with
the path "dummy/." and found that all succeed if called by root.

If we want to workaround this "bug", we need to check st_mode of dummy
somewhere in glob.c.


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