Subject: bug#50791: Recursive chmod exit status in coreutils-9.0

From: Pádraig Brady <[email-masked]>
Date: Sat, 25 Sep 2021 11:49:06 +0100

On 25/09/2021 07:07, Chris Webb wrote:
>> Thanks for the analysis and patch.
>> I've already pushed a very similar patch at:
>> https://git.sv.gnu.org/gitweb/?p=coreutils.git;a=commitdiff;h=e8b56ebd5
> 
> Many thanks!
> 
> With the above fix, do we also need something like
> 
> @@ -300,7 +300,7 @@ process_file (FTS *fts, FTSENT *ent)
>           describe_change (file_full_name, &ch);
>       }
>   
> -  if (CH_NO_CHANGE_REQUESTED <= ch.status && diagnose_surprises)
> +  if (CH_NOT_APPLIED <= ch.status && diagnose_surprises)
>       {
>         mode_t naively_expected_mode =
>           mode_adjust (ch.old_mode, S_ISDIR (ch.old_mode) != 0, 0, change, NULL);
> 
> in the diagnose_surprises stanza, to avoid checking every symlink we skip for
> unexpected permissions?

CH_NOT_APPLIED is smaller than CH_NO_CHANGE_REQUESTED
in the current enum ordering, so we skip this
block as expected for the ignored symlink case.

cheers,
Pádraig