Hi,
I noticed that when running chmod with -v on a dangling symlink the
error message is somewhat random:
> ln -s file-that-does-not-exist lnk
> chmod -w lnk -v
> chmod: cannot operate on dangling symlink 'lnk'
> failed to change mode of 'lnk' from 0000 (---------) to 7777 (rwsrwsrwt)
> chmod -w lnk -v
> chmod: cannot operate on dangling symlink 'lnk'
> failed to change mode of 'lnk' from 0000 (---------) to 7775 (rwsrwsr-t)
> chmod -w lnk -v
> chmod: cannot operate on dangling symlink 'lnk'
> failed to change mode of 'lnk' from 0000 (---------) to 7774 (rwsrwsr-T)
(note that the value for "to" is different)
This appears to be because in the process_file function, old_mode and
new_mode are only set when ok is true. When chmod encounters a dangling
symlink, ok will be false and old_mode/new_mode won't be set. However,
old_mode and new_mode are still accessed for the invocation of
describe_change if verbosity is set to high, leading to incorrect error
messages.
I think a better behavior could be to not print the "from mode to mode"
part of the error message if the file could not be accessed, since it is
meaningless anyways.
Have a nice day,
Michael