Search code examples
cygwinacllscygpath

Can cygwin ls show ACLs without providing the DOS path to file?


The commands

    cd c:/p4
    ls -ld  .  c:/p4  /cygdrive/c/p4

shows

    d---------+ 1 jgunter Domain Users 0 Apr 27 18:41 .
    d---------+ 1 jgunter Domain Users ? 0 Apr 27 18:41 /cygdrive/c/p4
    drwxr-xr-x  1 jgunter Domain Users ? 0 Apr 27 18:41 c:/p4

ls shows the perms I want to see only for files specified with a C:/ path.

I know about getfacl, but I'm hoping there's some ls option that will show me what I want without requiring I spell out absolute paths.

I can do something like:

     ls -ld `cygpath -da $@`

but when I'm in a deeply nested folder, the output is cluttered by full pathnames.


Solution

  • DOS path makes cygwin treat the file system as not having ACLs. It means that ls shows the correct ACLs, but the same directory is mounted with different options. Therefore ls doesn't have such an option, you need a workaround.

    https://cygwin.com/cygwin-ug-net/ov-new1.7.html states at 1.7.2:

    Handle native DOS paths always as if mounted with "posix=0,noacl"

    Beside this, I think, that d---------+ is strange. I've tried it on my PC, with 1.7.31 cygwin version, and it shows drwx------+, which is a bit better. I had experienced other bugs and strange behaviour in cygwin ACL handling. I guess there is confusion and some hacks about this. chmod 777 was a good workaround in my case.