package net.i2p.util;
import java.io.File;
/**
* Same as File but sets the file mode after mkdir() so it can
* be read and written by the owner only (i.e. 700 on linux)
* As of 0.8.2, just use SecureFile instead of this.
*
* @since 0.8.1
* @author zzz
*/
public class SecureDirectory extends File {
protected static final boolean isNotWindows = !SystemVersion.isWindows();
public SecureDirectory(String pathname) {
super(pathname);
}
public SecureDirectory(String parent, String child) {
super(parent, child);
}
public SecureDirectory(File parent, String child) {
super(parent, child);
}
/**
* Sets directory to mode 700 if the directory is created
*/
@Override
public boolean mkdir() {
boolean rv = super.mkdir();
if (rv)
setPerms();
return rv;
}
/**
* Sets directory to mode 700 if the directory is created
* Does NOT change the mode of other created directories
*/
@Override
public boolean mkdirs() {
boolean rv = super.mkdirs();
if (rv)
setPerms();
return rv;
}
/**
* Tries to set the permissions to 700,
* ignores errors
*/
protected void setPerms() {
if (!SecureFileOutputStream.canSetPerms())
return;
try {
setReadable(false, false);
setReadable(true, true);
setWritable(false, false);
setWritable(true, true);
if (isNotWindows) {
setExecutable(false, false);
setExecutable(true, true);
}
} catch (Throwable t) {
// NoSuchMethodException or NoSuchMethodError if we somehow got the
// version detection wrong or the JVM doesn't support it
}
}
}