views:

171

answers:

2

From within a Java program, I want to be able to list out the Windows users and groups who have permission to read a given file. Java has no built-in ability to read the Windows ACL information out (at least until Java 7), so I'm looking for other solutions.

Are there any third party libraries available which can provide direct access to the ACL information for a Windows file?

Failing that, maybe running cacls and capturing and then processing the output would be a reasonable temporary solution - Is the output format of cacls thoroughly documented anywhere, and is it likely to change between versions of Windows?

+2  A: 

If you know the windows APIs, you could use JNA (JNI without the hassle of writing native code) to call the Windows APIs to get the ACL data.

Altenatively here is an article that gets the file security details using VBScript. You could modify this, and have it return the details in a parsable format (e.g. XML). You can invoke a VBScript file by running "cscript.exe", using Runtime.exec() or ProcessBuilder. You can write the ACL info to standard output, and use the streams available on the java.lang.Process to read the process output.

Although exec'ing vbscript might seem a bit hacky, it will get you off to a quick start, since most of the code is already written and working (I presume - I haven't tried the script in the article.) Using the script also avoids needing to map the relevant Win32 apis to java via JNA.

mdma
A: 

Maybe taking a look Spring Security would help with this.

Binary Nerd
As far as I can tell, it has nothing to do with Windows ACLs - It just provides its own access control layer for we applications (with some hooks into other user directories). Am I missing something?
Matt Sheppard