coreutils icon indicating copy to clipboard operation
coreutils copied to clipboard

`chmod`: passing multiple modes with leading hyphens.

Open tertsdiepraam opened this issue 3 years ago • 2 comments

GNU chmod has some... ehh... interesting behaviour when it comes to leading hyphens in the mode:

chmod -w -w f

changes the permissions of f (and not of a file called -w). uutils simply throws an error because it does not expect the flag -w.

On the other hand,

chmod a-w a-w f

does try to change the permissions of a-w and f.

However, this behaviour changes when the -w is passed after --, because

chmod -- -w -w f

tries to modify both -w and f. This case is currently handled correctly in uutils, but I still included it here, because it is likely to break for some naive solutions to this issue.

All this is tested in the chmod/usage.sh tests from GNU. The cases tested there are listed below, where the provided arguments are on the left, followed by a colon and the files that it will try to chmod:

--         :
-- --      :
-- -- -- f : -- f
-- -- -w f : -w f
-- -- f    : f
-- -w      :
-- -w -- f : -- f
-- -w -w f : -w f
-- -w f    : f
-- f       :
-w         :
-w --      :
-w -- -- f : -- f
-w -- -w f : -w f
-w -- f    : f
-w -w      :
-w -w -- f : f
-w -w -w f : f
-w -w f    : f
-w f       : f
f          :
f --       :
f -w       : f
f f        :
u+gr f     :
ug,+x f    :

tertsdiepraam avatar Feb 16 '22 17:02 tertsdiepraam

Simple testcase:

touch f
chmod -w -w -- f 
./target/debug/coreutils chmod -w -w -- f 

sylvestre avatar Mar 11 '22 22:03 sylvestre

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

stale[bot] avatar Mar 15 '25 11:03 stale[bot]