From: markt Date: Fri, 26 Aug 2011 17:08:17 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51704 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=0d6d84ed4061b2b3608ffc8c29f16d0a13fe513c;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51704 Make calls to File.mkdirs() more robust and handle errors in a few places where they were ignored and should not have been. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1162169 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/core/StandardContext.java b/java/org/apache/catalina/core/StandardContext.java index 5d98b9b10..e115380de 100644 --- a/java/org/apache/catalina/core/StandardContext.java +++ b/java/org/apache/catalina/core/StandardContext.java @@ -6057,7 +6057,7 @@ public class StandardContext extends ContainerBase workDir, catalinaHomePath, getName()), e); } } - if (!dir.exists() && !dir.mkdirs()) { + if (!dir.mkdirs() && !dir.isDirectory()) { log.warn(sm.getString("standardContext.workCreateFail", dir, getName())); } diff --git a/java/org/apache/catalina/loader/WebappClassLoader.java b/java/org/apache/catalina/loader/WebappClassLoader.java index 72b2a4847..dbb15a2eb 100644 --- a/java/org/apache/catalina/loader/WebappClassLoader.java +++ b/java/org/apache/catalina/loader/WebappClassLoader.java @@ -3011,8 +3011,11 @@ public class WebappClassLoader throw new IllegalArgumentException( sm.getString("webappClassLoader.validationErrorJarPath", jarEntry2.getName()), ioe); - } - resourceFile.getParentFile().mkdirs(); + } + File parentFile = resourceFile.getParentFile(); + if (!parentFile.mkdirs() && !parentFile.exists()) { + // Ignore the error (like the IOExceptions below) + } FileOutputStream os = null; InputStream is = null; try { diff --git a/java/org/apache/catalina/loader/WebappLoader.java b/java/org/apache/catalina/loader/WebappLoader.java index 9bd5a7f22..245dd4318 100644 --- a/java/org/apache/catalina/loader/WebappLoader.java +++ b/java/org/apache/catalina/loader/WebappLoader.java @@ -883,10 +883,10 @@ public class WebappLoader extends LifecycleMBeanBase } else { classRepository = new File(workDir, classesPath); - if (!classRepository.isDirectory()) { - if (!classRepository.mkdirs()) - throw new IOException( - sm.getString("webappLoader.mkdirFailure")); + if (!classRepository.mkdirs() && + !classRepository.isDirectory()) { + throw new IOException( + sm.getString("webappLoader.mkdirFailure")); } if (!copyDir(classes, classRepository)) { throw new IOException( @@ -935,10 +935,9 @@ public class WebappLoader extends LifecycleMBeanBase } else { copyJars = true; destDir = new File(workDir, libPath); - if (!destDir.isDirectory()) { - if (!destDir.mkdirs()) - throw new IOException( - sm.getString("webappLoader.mkdirFailure")); + if (!destDir.mkdirs() && !destDir.isDirectory()) { + throw new IOException( + sm.getString("webappLoader.mkdirFailure")); } } diff --git a/java/org/apache/catalina/manager/ManagerServlet.java b/java/org/apache/catalina/manager/ManagerServlet.java index c8e82e199..04ae35257 100644 --- a/java/org/apache/catalina/manager/ManagerServlet.java +++ b/java/org/apache/catalina/manager/ManagerServlet.java @@ -636,7 +636,7 @@ public class ManagerServlet extends HttpServlet implements ContainerServlet { File deployedPath = deployed; if (tag != null) { deployedPath = new File(versioned, tag); - if (!deployedPath.isDirectory() && !deployedPath.mkdirs()) { + if (!deployedPath.mkdirs() && !deployedPath.isDirectory()) { writer.println(smClient.getString("managerServlet.mkdirFail", deployedPath)); return; @@ -830,7 +830,7 @@ public class ManagerServlet extends HttpServlet implements ContainerServlet { addServiced(name); try { if (config != null) { - if (!configBase.isDirectory() && !configBase.mkdirs()) { + if (!configBase.mkdirs() && !configBase.isDirectory()) { writer.println(smClient.getString( "managerServlet.mkdirFail",configBase)); return; diff --git a/java/org/apache/catalina/manager/host/HostManagerServlet.java b/java/org/apache/catalina/manager/host/HostManagerServlet.java index dc8c7dd57..c666709c2 100644 --- a/java/org/apache/catalina/manager/host/HostManagerServlet.java +++ b/java/org/apache/catalina/manager/host/HostManagerServlet.java @@ -381,13 +381,11 @@ public class HostManagerServlet } catch (IOException e) { appBaseFile = file; } - if (!appBaseFile.exists()) { - if (!appBaseFile.mkdirs()) { - writer.println(smClient.getString( - "hostManagerServlet.appBaseCreateFail", - appBaseFile.toString(), name)); - return; - } + if (!appBaseFile.mkdirs() && !appBaseFile.isDirectory()) { + writer.println(smClient.getString( + "hostManagerServlet.appBaseCreateFail", + appBaseFile.toString(), name)); + return; } // Create base for config files @@ -704,10 +702,8 @@ public class HostManagerServlet if (installedHost != null) { configBase = new File(configBase, hostName); } - if (!configBase.exists()) { - if (!configBase.mkdirs()) { - return null; - } + if (!configBase.mkdirs() && !configBase.isDirectory()) { + return null; } return configBase; } diff --git a/java/org/apache/catalina/servlets/CGIServlet.java b/java/org/apache/catalina/servlets/CGIServlet.java index df8f20e60..f9a025b47 100644 --- a/java/org/apache/catalina/servlets/CGIServlet.java +++ b/java/org/apache/catalina/servlets/CGIServlet.java @@ -1149,9 +1149,11 @@ public final class CGIServlet extends HttpServlet { String dirPath = destPath.toString().substring( 0,destPath.toString().lastIndexOf("/")); File dir = new File(dirPath); - if (!dir.mkdirs() && debug >= 2) { - log("expandCGIScript: failed to create directories for '" + - dir.getAbsolutePath() + "'"); + if (!dir.mkdirs() && !dir.isDirectory()) { + if (debug >= 2) { + log("expandCGIScript: failed to create directories for '" + + dir.getAbsolutePath() + "'"); + } return; } diff --git a/java/org/apache/catalina/session/FileStore.java b/java/org/apache/catalina/session/FileStore.java index 8afadd542..60c3fea22 100644 --- a/java/org/apache/catalina/session/FileStore.java +++ b/java/org/apache/catalina/session/FileStore.java @@ -395,7 +395,7 @@ public final class FileStore extends StoreBase { * session persistence directory, if any. The directory will be * created if it does not already exist. */ - private File directory() { + private File directory() throws IOException { if (this.directory == null) { return (null); @@ -419,8 +419,14 @@ public final class FileStore extends StoreBase { } } if (!file.exists() || !file.isDirectory()) { - file.delete(); - file.mkdirs(); + if (!file.delete() && file.exists()) { + throw new IOException( + sm.getString("fileStore.deleteFailed", file)); + } + if (!file.mkdirs() && !file.isDirectory()) { + throw new IOException( + sm.getString("fileStore.createFailed", file)); + } } this.directoryFile = file; return (file); @@ -435,7 +441,7 @@ public final class FileStore extends StoreBase { * @param id The ID of the Session to be retrieved. This is * used in the file naming. */ - private File file(String id) { + private File file(String id) throws IOException { if (this.directory == null) { return (null); diff --git a/java/org/apache/catalina/session/LocalStrings.properties b/java/org/apache/catalina/session/LocalStrings.properties index c3d0c7435..6037ed0d5 100644 --- a/java/org/apache/catalina/session/LocalStrings.properties +++ b/java/org/apache/catalina/session/LocalStrings.properties @@ -18,6 +18,8 @@ applicationSession.value.iae=null value fileStore.saving=Saving Session {0} to file {1} fileStore.loading=Loading Session {0} from file {1} fileStore.removing=Removing Session {0} at file {1} +fileStore.deleteFailed=Unable to delete file [{0}] which is preventing the creation of the session storage location +fileStore.createFailed=Unable to create directory [{0}] for the storage of session data JDBCStore.close=Exception closing database connection {0} JDBCStore.saving=Saving Session {0} to database {1} JDBCStore.loading=Loading Session {0} from database {1} diff --git a/java/org/apache/catalina/startup/ExpandWar.java b/java/org/apache/catalina/startup/ExpandWar.java index 4bdd6f606..f9f1b4f34 100644 --- a/java/org/apache/catalina/startup/ExpandWar.java +++ b/java/org/apache/catalina/startup/ExpandWar.java @@ -115,7 +115,10 @@ public class ExpandWar { if (last >= 0) { File parent = new File(docBase, name.substring(0, last)); - parent.mkdirs(); + if (!parent.mkdirs() && !parent.isDirectory()) { + throw new IOException( + sm.getString("expandWar.createFailed", parent)); + } } if (name.endsWith("/")) { continue; diff --git a/java/org/apache/catalina/startup/HostConfig.java b/java/org/apache/catalina/startup/HostConfig.java index 2cefbb985..222325955 100644 --- a/java/org/apache/catalina/startup/HostConfig.java +++ b/java/org/apache/catalina/startup/HostConfig.java @@ -1290,7 +1290,7 @@ public class HostConfig if (host.getCreateDirs()) { File[] dirs = new File[] {host.getAppBaseFile(),configBase()}; for (int i=0; i