diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 40cfe4cea4..9ffdc06ef6 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -1058,13 +1058,27 @@ public class SnarkManager implements CompleteListener, ClientApp { } catch (NumberFormatException nfe) {} } + // set this before we check the data dir + if (areFilesPublic() != filesPublic) { + _config.setProperty(PROP_FILES_PUBLIC, Boolean.toString(filesPublic)); + _util.setFilesPublic(filesPublic); + if (filesPublic) + addMessage(_t("New files will be publicly readable")); + else + addMessage(_t("New files will not be publicly readable")); + changed = true; + } + if (dataDir != null && !dataDir.equals(getDataDir().getAbsolutePath())) { dataDir = DataHelper.stripHTML(dataDir.trim()); - File dd = new File(dataDir); + File dd = areFilesPublic() ? new File(dataDir) : new SecureDirectory(dataDir); if (!dd.isAbsolute()) { addMessage(_t("Data directory must be an absolute path") + ": " + dataDir); - } else if (!dd.exists()) { - addMessage(_t("Data directory does not exist") + ": " + dataDir); + } else if (!dd.exists() && !dd.mkdirs()) { + // save this tag for now, may need it again + if (false) + addMessage(_t("Data directory does not exist") + ": " + dataDir); + addMessage(_t("Data directory cannot be created") + ": " + dataDir); } else if (!dd.isDirectory()) { addMessage(_t("Not a directory") + ": " + dataDir); } else if (!dd.canRead()) { @@ -1196,16 +1210,6 @@ public class SnarkManager implements CompleteListener, ClientApp { changed = true; } // reconnect || changed options - if (areFilesPublic() != filesPublic) { - _config.setProperty(PROP_FILES_PUBLIC, Boolean.toString(filesPublic)); - _util.setFilesPublic(filesPublic); - if (filesPublic) - addMessage(_t("New files will be publicly readable")); - else - addMessage(_t("New files will not be publicly readable")); - changed = true; - } - if (shouldAutoStart() != autoStart) { _config.setProperty(PROP_AUTO_START, Boolean.toString(autoStart)); if (autoStart) diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java index c0f489d9b0..8e10532b69 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java @@ -39,6 +39,7 @@ import net.i2p.data.DataHelper; import net.i2p.servlet.util.WriterOutputStream; import net.i2p.util.ByteCache; import net.i2p.util.Log; +import net.i2p.util.SecureFile; import net.i2p.util.SystemVersion; @@ -113,7 +114,7 @@ class BasicServlet extends HttpServlet String rb=getInitParameter("resourceBase"); if (rb!=null) { - File f = new File(rb); + File f = new SecureFile(rb); setResourceBase(f); } String wb = getInitParameter("warBase"); @@ -124,10 +125,10 @@ class BasicServlet extends HttpServlet /** * Files are served from here */ - protected void setResourceBase(File base) throws UnavailableException { + protected synchronized void setResourceBase(File base) throws UnavailableException { if (!base.isDirectory()) { - _log.log(Log.CRIT, "Configured i2psnark directory " + base + " does not exist"); - throw new UnavailableException("Resource base does not exist: " + base); + _log.error("Configured i2psnark directory " + base + " does not exist"); + //throw new UnavailableException("Resource base does not exist: " + base); } _resourceBase = base; if (_log.shouldLog(Log.INFO)) diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index aa14b85aca..9b4390d12f 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -377,8 +377,14 @@ public class I2PSnarkServlet extends BasicServlet { // end of mainsection div if (pageOne) { out.write("