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?