Skip to content

chmod: passing multiple modes with leading hyphens. #3147

Open
@tertsdiepraam

Description

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    :

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions