File mode with SetGID bit set gets wrong permissions.

697 views
Skip to first unread message

Deon Bredenhann

unread,
Aug 10, 2014, 1:00:54 PM8/10/14
to ansible...@googlegroups.com
- name: Create test
  file:
    path: /srv/test
    state: directory
    mode: 2770
    owner: root
    group: admin

Output of -v
{"changed": true, "gid": 6003, "group": "admin", "mode": "05322", "owner": "root", "path": "/srv/test", "size": 4096, "state": "directory", "uid": 0}

So the mode of 2770 somehow gets converted to 05322

So any mode with SetGID, SetUID or SetSticky, gets mangled.
Tried in 1.6 and 1.7

1770 -> 03352
2770 -> 05322
4770 -> 01242

I should convert the end permissions to octal and see if there is a pattern. Will do later. Just want to post this for now and see if someone knows anything about this.

Thanks
Deon

Greg Andrews

unread,
Aug 10, 2014, 6:39:31 PM8/10/14
to ansible...@googlegroups.com

There's no leading "0" on your mode number 2770.  In Perl, the run-time parses numbers as decimal unless they have certain hint prefixes, like "0x" for hexadecimal and "0" for octal.

I don't know how Python parses numbers, but 2770 decimal = 5322 octal, so it looks like that may be the source of the confusion.  The ansible.com docs for the file module don't address this explicitly, but both the examples have a leading "0" in the mode number.  It looks to me like a mode number of "02770" is what you need.

  -Greg



--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/36ed2d34-e94d-475f-b8a8-a1a00631fdd5%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Michael DeHaan

unread,
Aug 11, 2014, 8:28:25 AM8/11/14
to ansible...@googlegroups.com
Ansible contains some fuzzy logic for this.

Basically, if the number is a string, it will assume octal.

If you pass in a decimal, as you have done above, it will assume you know what you are doing.  (Most people use short-form arguments in Ansible, here you've split to another line and passed a decimal - which is fine).

So yes, this would be it.

Alternatively, this would also fit:

mode: "777"




Deon Bredenhann

unread,
Aug 12, 2014, 4:32:14 AM8/12/14
to ansible...@googlegroups.com
Thank you Greg and Michael.

That was the whole solution to the problem.
Reply all
Reply to author
Forward
0 new messages