-
Bug
-
Resolution: Not an Issue
-
P4
-
8
-
x86_64
-
linux
FULL PRODUCT VERSION :
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux lxdmgdev 3.0.82-0.7-xen #1 SMP Thu Jun 27 13:19:18 UTC 2013 (6efde93) x86_64 x86_64 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
Those cases end up without group and others write permission:
case nioc:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwxrwx")));
break;
case nioc2:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(new HashSet<PosixFilePermission>(Arrays.asList(
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE,
PosixFilePermission.OWNER_EXECUTE,
PosixFilePermission.GROUP_READ,
PosixFilePermission.GROUP_WRITE,
PosixFilePermission.GROUP_EXECUTE,
PosixFilePermission.OTHERS_READ,
PosixFilePermission.OTHERS_WRITE,
PosixFilePermission.OTHERS_EXECUTE))));
break;
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Group write and others write Posix file permissions set
ACTUAL -
Group write and others write Posix file permissions missing
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Arrays;
import java.util.HashSet;
public class FilePermissions {
private enum Instruction {
file, nioc, nioc2, nios, nios2;
}
private interface Arguments {
String getFilenamePrefix();
}
public static void main(String[] aArguments) throws IOException {
Arguments arguments = parse(aArguments);
final String filenamePrefix = arguments.getFilenamePrefix();
for (Instruction instruction: Instruction.values()) {
perInstruction(
new File(String.format("%s.%s.txt", filenamePrefix, instruction.name())),
instruction);
}
System.out.println("Done");
}
protected static void perInstruction(File file, final Instruction instruction) throws IOException {
System.out.println(String.format(
"Creating %s using %s",
file.getPath(),
instruction.name()));
switch (instruction) {
case file:
if (file.createNewFile()) {
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
} else {
System.err.println(String.format("Die Datei %s existiert bereits", file.getPath()));
}
break;
case nioc:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwxrwx")));
break;
case nioc2:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(new HashSet<PosixFilePermission>(Arrays.asList(
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE,
PosixFilePermission.OWNER_EXECUTE,
PosixFilePermission.GROUP_READ,
PosixFilePermission.GROUP_WRITE,
PosixFilePermission.GROUP_EXECUTE,
PosixFilePermission.OTHERS_READ,
PosixFilePermission.OTHERS_WRITE,
PosixFilePermission.OTHERS_EXECUTE))));
break;
case nios:
if (!file.createNewFile()) {
System.err.println(String.format("Die Datei %s konnte nicht erstellt werden", file.getPath()));
}
Files.setPosixFilePermissions(
Paths.get(file.getPath()),
PosixFilePermissions.fromString("rwxrwxrwx"));
break;
case nios2:
if (!file.createNewFile()) {
System.err.println(String.format("Die Datei %s konnte nicht erstellt werden", file.getPath()));
}
Files.setPosixFilePermissions(
Paths.get(file.getPath()),
new HashSet<PosixFilePermission>(Arrays.asList(
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE,
PosixFilePermission.OWNER_EXECUTE,
PosixFilePermission.GROUP_READ,
PosixFilePermission.GROUP_WRITE,
PosixFilePermission.GROUP_EXECUTE,
PosixFilePermission.OTHERS_READ,
PosixFilePermission.OTHERS_WRITE,
PosixFilePermission.OTHERS_EXECUTE)));
break;
default:
break;
}
}
private static Arguments parse(String[] aArguments) {
String filenamePrefix = null;
for (int index = 0; index < aArguments.length; index++) {
switch (index) {
case 0:
filenamePrefix = aArguments[index];
break;
default:
break;
}
}
if (null == filenamePrefix) {
throw new RuntimeException("Syntax: java this.jar {file} file|nio");
}
final String filenamePrefixFinal = filenamePrefix;
return new Arguments() {
public String getFilenamePrefix() {
return filenamePrefixFinal;
}
};
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use java.nio.file.Files.setPosixFilePermissions(Path, Set<PosixFilePermission>) after creating the file.
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Linux lxdmgdev 3.0.82-0.7-xen #1 SMP Thu Jun 27 13:19:18 UTC 2013 (6efde93) x86_64 x86_64 x86_64 GNU/Linux
A DESCRIPTION OF THE PROBLEM :
Those cases end up without group and others write permission:
case nioc:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwxrwx")));
break;
case nioc2:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(new HashSet<PosixFilePermission>(Arrays.asList(
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE,
PosixFilePermission.OWNER_EXECUTE,
PosixFilePermission.GROUP_READ,
PosixFilePermission.GROUP_WRITE,
PosixFilePermission.GROUP_EXECUTE,
PosixFilePermission.OTHERS_READ,
PosixFilePermission.OTHERS_WRITE,
PosixFilePermission.OTHERS_EXECUTE))));
break;
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Group write and others write Posix file permissions set
ACTUAL -
Group write and others write Posix file permissions missing
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Arrays;
import java.util.HashSet;
public class FilePermissions {
private enum Instruction {
file, nioc, nioc2, nios, nios2;
}
private interface Arguments {
String getFilenamePrefix();
}
public static void main(String[] aArguments) throws IOException {
Arguments arguments = parse(aArguments);
final String filenamePrefix = arguments.getFilenamePrefix();
for (Instruction instruction: Instruction.values()) {
perInstruction(
new File(String.format("%s.%s.txt", filenamePrefix, instruction.name())),
instruction);
}
System.out.println("Done");
}
protected static void perInstruction(File file, final Instruction instruction) throws IOException {
System.out.println(String.format(
"Creating %s using %s",
file.getPath(),
instruction.name()));
switch (instruction) {
case file:
if (file.createNewFile()) {
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
} else {
System.err.println(String.format("Die Datei %s existiert bereits", file.getPath()));
}
break;
case nioc:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwxrwxrwx")));
break;
case nioc2:
Files.createFile(
Paths.get(file.getPath()),
PosixFilePermissions.asFileAttribute(new HashSet<PosixFilePermission>(Arrays.asList(
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE,
PosixFilePermission.OWNER_EXECUTE,
PosixFilePermission.GROUP_READ,
PosixFilePermission.GROUP_WRITE,
PosixFilePermission.GROUP_EXECUTE,
PosixFilePermission.OTHERS_READ,
PosixFilePermission.OTHERS_WRITE,
PosixFilePermission.OTHERS_EXECUTE))));
break;
case nios:
if (!file.createNewFile()) {
System.err.println(String.format("Die Datei %s konnte nicht erstellt werden", file.getPath()));
}
Files.setPosixFilePermissions(
Paths.get(file.getPath()),
PosixFilePermissions.fromString("rwxrwxrwx"));
break;
case nios2:
if (!file.createNewFile()) {
System.err.println(String.format("Die Datei %s konnte nicht erstellt werden", file.getPath()));
}
Files.setPosixFilePermissions(
Paths.get(file.getPath()),
new HashSet<PosixFilePermission>(Arrays.asList(
PosixFilePermission.OWNER_READ,
PosixFilePermission.OWNER_WRITE,
PosixFilePermission.OWNER_EXECUTE,
PosixFilePermission.GROUP_READ,
PosixFilePermission.GROUP_WRITE,
PosixFilePermission.GROUP_EXECUTE,
PosixFilePermission.OTHERS_READ,
PosixFilePermission.OTHERS_WRITE,
PosixFilePermission.OTHERS_EXECUTE)));
break;
default:
break;
}
}
private static Arguments parse(String[] aArguments) {
String filenamePrefix = null;
for (int index = 0; index < aArguments.length; index++) {
switch (index) {
case 0:
filenamePrefix = aArguments[index];
break;
default:
break;
}
}
if (null == filenamePrefix) {
throw new RuntimeException("Syntax: java this.jar {file} file|nio");
}
final String filenamePrefixFinal = filenamePrefix;
return new Arguments() {
public String getFilenamePrefix() {
return filenamePrefixFinal;
}
};
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use java.nio.file.Files.setPosixFilePermissions(Path, Set<PosixFilePermission>) after creating the file.