Return-Path: X-Original-To: apmail-tomcat-dev-archive@www.apache.org Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1172D8B15 for ; Fri, 26 Aug 2011 17:08:48 +0000 (UTC) Received: (qmail 73484 invoked by uid 500); 26 Aug 2011 17:08:47 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 73375 invoked by uid 500); 26 Aug 2011 17:08:46 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 73366 invoked by uid 99); 26 Aug 2011 17:08:46 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Aug 2011 17:08:46 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 26 Aug 2011 17:08:41 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 8265B238897D for ; Fri, 26 Aug 2011 17:08:19 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1162169 - in /tomcat/trunk: java/org/apache/catalina/core/ java/org/apache/catalina/loader/ java/org/apache/catalina/manager/ java/org/apache/catalina/manager/host/ java/org/apache/catalina/servlets/ java/org/apache/catalina/session/ java/... Date: Fri, 26 Aug 2011 17:08:18 -0000 To: dev@tomcat.apache.org From: markt@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110826170819.8265B238897D@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: markt Date: Fri Aug 26 17:08:17 2011 New Revision: 1162169 URL: http://svn.apache.org/viewvc?rev=1162169&view=rev Log: 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. Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java tomcat/trunk/java/org/apache/catalina/session/FileStore.java tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/startup/ExpandWar.java tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java tomcat/trunk/java/org/apache/juli/FileHandler.java tomcat/trunk/test/org/apache/catalina/connector/TestCoyoteAdapter.java tomcat/trunk/test/org/apache/catalina/core/TestAsyncContextImpl.java tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java tomcat/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java tomcat/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original) +++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Fri Aug 26 17:08:17 2011 @@ -6057,7 +6057,7 @@ public class StandardContext extends Con workDir, catalinaHomePath, getName()), e); } } - if (!dir.exists() && !dir.mkdirs()) { + if (!dir.mkdirs() && !dir.isDirectory()) { log.warn(sm.getString("standardContext.workCreateFail", dir, getName())); } Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Fri Aug 26 17:08:17 2011 @@ -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 { Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original) +++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Fri Aug 26 17:08:17 2011 @@ -883,10 +883,10 @@ public class WebappLoader extends Lifecy } 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 Lifecy } 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")); } } Modified: tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java (original) +++ tomcat/trunk/java/org/apache/catalina/manager/ManagerServlet.java Fri Aug 26 17:08:17 2011 @@ -636,7 +636,7 @@ public class ManagerServlet extends Http 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 Http addServiced(name); try { if (config != null) { - if (!configBase.isDirectory() && !configBase.mkdirs()) { + if (!configBase.mkdirs() && !configBase.isDirectory()) { writer.println(smClient.getString( "managerServlet.mkdirFail",configBase)); return; Modified: tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java (original) +++ tomcat/trunk/java/org/apache/catalina/manager/host/HostManagerServlet.java Fri Aug 26 17:08:17 2011 @@ -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; } Modified: tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java (original) +++ tomcat/trunk/java/org/apache/catalina/servlets/CGIServlet.java Fri Aug 26 17:08:17 2011 @@ -1149,9 +1149,11 @@ public final class CGIServlet extends Ht 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; } Modified: tomcat/trunk/java/org/apache/catalina/session/FileStore.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/FileStore.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/FileStore.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/FileStore.java Fri Aug 26 17:08:17 2011 @@ -395,7 +395,7 @@ public final class FileStore extends Sto * 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 Sto } } 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 Sto * @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); Modified: tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/catalina/session/LocalStrings.properties Fri Aug 26 17:08:17 2011 @@ -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} Modified: tomcat/trunk/java/org/apache/catalina/startup/ExpandWar.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ExpandWar.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/ExpandWar.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/ExpandWar.java Fri Aug 26 17:08:17 2011 @@ -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; Modified: tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java?rev=1162169&r1=1162168&r2=1162169&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/HostConfig.java Fri Aug 26 17:08:17 2011 @@ -1290,7 +1290,7 @@ public class HostConfig if (host.getCreateDirs()) { File[] dirs = new File[] {host.getAppBaseFile(),configBase()}; for (int i=0; i