remm 2004/07/27 04:22:54 Modified: catalina/src/share/org/apache/catalina/startup HostConfig.java Log: - Address two fixmes regarding undeployment. Revision Changes Path 1.40 +47 -6 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java Index: HostConfig.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- HostConfig.java 27 Jul 2004 10:04:39 -0000 1.39 +++ HostConfig.java 27 Jul 2004 11:22:53 -0000 1.40 @@ -561,8 +561,6 @@ context.setConfigFile(contextXml.getAbsolutePath()); context.setPath(contextPath); // Add the context XML to the list of watched files - // FIXME: Special case of a xml which points to a WAR without unpackWAR or - // a directory outside of appBase -> the .xml should be a redeployResource deployedApp.reloadResources.put (contextXml.getAbsolutePath(), new Long(contextXml.lastModified())); // Add the associated docBase to the redeployed list if it's a WAR @@ -601,6 +599,22 @@ new Long(docBase.lastModified())); addWatchedResources(deployedApp, docBase.getAbsolutePath(), context); } else { + if (context.getDocBase() != null) { + File docBase = new File(context.getDocBase()); + if (!docBase.isAbsolute()) { + docBase = new File(appBase(), context.getDocBase()); + } + try { + docBase = docBase.getCanonicalFile(); + if (!docBase.getAbsolutePath().startsWith(appBase().getAbsolutePath())) { + deployedApp.redeployResources.put + (contextXml.getAbsolutePath(), new Long(contextXml.lastModified())); + deployedApp.reloadResources.remove(contextXml.getAbsolutePath()); + } + } catch (IOException e) { + // Ignore + } + } addWatchedResources(deployedApp, null, context); } } catch (Throwable t) { @@ -924,7 +938,16 @@ // Delete other redeploy resources for (int j = 0; j < resources.length; j++) { if (j != i) { - ExpandWar.delete(new File(resources[j])); + try { + File current = new File(resources[j]); + current = current.getCanonicalFile(); + if ((current.getAbsolutePath().startsWith(appBase().getAbsolutePath())) + || (current.getAbsolutePath().startsWith(configBase().getAbsolutePath()))) + ExpandWar.delete(current); + } catch (IOException e) { + log.warn(sm.getString + ("hostConfig.canonicalizing", app.name), e); + } } } deployed.remove(app.name); @@ -942,12 +965,30 @@ } // Delete all redeploy resources for (int j = 0; j < resources.length; j++) { - ExpandWar.delete(new File(resources[j])); + try { + File current = new File(resources[j]); + current = current.getCanonicalFile(); + if ((current.getAbsolutePath().startsWith(appBase().getAbsolutePath())) + || (current.getAbsolutePath().startsWith(configBase().getAbsolutePath()))) + ExpandWar.delete(current); + } catch (IOException e) { + log.warn(sm.getString + ("hostConfig.canonicalizing", app.name), e); + } } // Delete reload resources as well (to remove any remaining .xml descriptor) String[] resources2 = (String[]) app.reloadResources.keySet().toArray(new String[0]); for (int j = 0; j < resources2.length; j++) { - ExpandWar.delete(new File(resources2[j])); + try { + File current = new File(resources2[j]); + current = current.getCanonicalFile(); + if ((current.getAbsolutePath().startsWith(appBase().getAbsolutePath())) + || (current.getAbsolutePath().startsWith(configBase().getAbsolutePath()))) + ExpandWar.delete(current); + } catch (IOException e) { + log.warn(sm.getString + ("hostConfig.canonicalizing", app.name), e); + } } deployed.remove(app.name); return;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]