Cygwin has setfacl and getfacl. IIRC cygwin does just enough windows acls to implement un*x permissions semantics, so keep in mind it might not give you everything. (BTW where is your setacl, I have windows xp and could not find it, and so could not contrast the output of both set*acl).
If you don't care for a "normal install" using cygwin setup, do the following:
- Get the "cygwin" package (just 1 package) for example the latest one say with 'curl -O ftp://ftp.heanet.ie/pub/cygwin/release/cygwin/cygwin-1.5.24-2.tar.bz2' (-big-Oh not -zero)
- extract it somewhere and just put the *facl and cygwin1.dll in a directory you can access from your code
- try running getfacl from there; if it does not work get the ash package, proceed as before but run getfacl from ash.
IIRC directories have also a default acl...note that *I do not do acls* ;)
At least that gives something to try if you're stuck. Good luck.
% steph@ap (/home/stephan) %
% cygcheck /usr/bin/getfacl.exe
C:/cygwin/bin/getfacl.exe
C:/cygwin/bin\cygwin1.dll
C:\WINDOWS\system32\ADVAPI32.DLL
C:\WINDOWS\system32\ntdll.dll
C:\WINDOWS\system32\KERNEL32.dll
C:\WINDOWS\system32\RPCRT4.dll
cheers
--stephan
| [reply] [Watch: Dir/Any] [d/l] |
Not sure where Perl comes into this, which Perl interface are you using? There are several and these will affect the answer. There are also several layers of Win32 security APISs, and that depend on the version of Windows (NT4, 2000, XP, 2003, Vista all instoduced new security APIs).
Here is what I would do using C/C++/XS: You can get an existing ACL using GetNamedSecurityInfo(), and then create ACEs with BuildExplicitAccessWithName(). You then merge the new ACEs with the 'old' ACL to create a new one, using SetEntriesInAcl() - I guess this is the guy you want. You then set the new ACL into the object's security descriptor(SD) using SetNamedSecurityInfo().
I'm not sure what you have screwed up, maybe you wrote a bad SD? The DACL is not supposed to be searched if you are the owner, but it looks like the SID might be toast. If this is a file, try copying it to a non-secure filesystem (like FAT) and back again, always assuming you can get the copy to work. You might have to use an Administrator user for that.
update: OK, I missed that you are using cygwin. | [reply] [Watch: Dir/Any] |