The code:
File dir = new File(path); boolean rc1 = dir.setExecutable(true, false); boolean rc2 = dir.setReadable(true, false); boolean rc3 = dir.setWritable(true, false); if (!rc1 || !rc2 || !rc3){ logger.warn("One of the permissions set returned false: rc1="+rc1+" rc2="+rc2+" rc3="+rc3 + " [for dir '"+dir+"']"); }
On Ubuntu all 3 calls return false. On my Windows only the 3rd call to setWritable returns false.
The target is to create the file/dir so the user (tomcat) and the group will be able to read/write.
BUT the file created on Ubuntu without permissions for the group to write.
Advertisement
Answer
I found the solution and will answer my own question:
When setting permissions on file or directory, you first MUST actually create the directory or write the file and only then set the permissions.
So, what I was doing at start was wrong:
File dir = new File(path); boolean rc1 = dir.setExecutable(true, false);
While actually need to:
File dir = new File(path); dir.mkdirs(); boolean rc1 = dir.setExecutable(true, false); boolean rc2 = dir.setReadable(true, false); boolean rc3 = dir.setWritable(true, false);
or
File f = new File(uploadedFileLocation); ImageIO.write(image, "jpg", f); boolean rc1 = f.setExecutable(true, false); boolean rc2 = f.setReadable(true, false); boolean rc3 = f.setWritable(true, false);
Then it will work 🙂