Subject: chmod 9.0 failing, where 8.29 succeeds - but no error message

From: "Jost, Martin (Nokia - DE/Ulm)" <[email-masked]>
Date: Fri, 14 Jan 2022 16:37:54 +0000

Hello,

we found a case, where chmod from coreutils 9.0 fails (exit value 1), while the one from 8.29 succeeds. (exit value 0)
Unfortunately, no (error) message is given, just the exit value is 0 and 1 respectively.

Here is the example:

============== 8.29: fine

>chmod --version
chmod (GNU coreutils) 8.29
...
> chmod -R go+r-w MB_192378  
> echo $?
0

Exit value 0, everyone happy.

============== 8.30: bad

> /build/home/..../coreutils-9.0/src/chmod --version
chmod (GNU coreutils) 9.0
....

> /build/home/.../coreutils-9.0/src/chmod -R go+r-w MB_192378
> echo $?                                                                
1

Exit value 1 - no error message given.

==========================================

Notes:
1 this call, using "go+r-w" is generated by some tool, outside our immediate control.
   I would expect 'go+r,go-w'. Can you confirm to me, whether the used syntax is ok ?
   (From the description in the info-page, I'm not sure; OTOH no diagnostic given for both versions.)

1 a I tried " chmod -R go+r,go-w" with 9.0, but that had the same behaviour (No error indication; exit value 1)

2 How can I (try to) find what is causing the bug ?
  (Note: The tree I'm changing, is rather big...)
  I'm currently trying to run the command "under" strace in an emacs shell buffer - but I'm afraid that will be overwhelming...

3. The chmod is done on a NFS mounted FS
    The chmod binary - both 8.29 as well as 9.0 - are located on NFS as well.

4. The "configure' options for 8.29 and 9.0 are the same; both are build on the same machine. (*)
    Both were build after a 'make distclean' in short succession (a few hours); 8.29 intended to "downdate" to that one again, after I ran into the problem.
   The test runs above, had been running on a different machine compared to the build machine.
   (*) I just learned the hard way, that e.g. 'GNU cp' is silently ignoring options like capabilities or ACL, if the needed development (header) packages aren't installed on the build  machine. That triggered the whole "update" thing.

5. Both 8.29 as well as 9.0 passed 'make check' after compilation.

Regards

Martin