Author: pero
Date: Fri Apr 14 10:48:28 2006
New Revision: 394151

URL: http://svn.apache.org/viewcvs?rev=394151&view=rev
Log:
Make sure that context config files are writeable.
But a bug with referenced war files outsite Host appBase exists. Currently 
context docBase from those
apps point to extract webapps/app directory. StoreConfig can't detect the 
orginal war file and 
redeployment crashed!

Modified:
    
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StandardContextSF.java
    
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreContextAppender.java
    
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreFactoryBase.java
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml

Modified: 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StandardContextSF.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StandardContextSF.java?rev=394151&r1=394150&r2=394151&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StandardContextSF.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StandardContextSF.java
 Fri Apr 14 10:48:28 2006
@@ -108,6 +108,13 @@
             if (!config.isAbsolute()) {
                 config = new File(System.getProperty("catalina.base"),
                         configFile);
+            }            
+            if( (!config.isFile()) || (!config.canWrite())) {
+                log.error("Cannot write context output file at "
+                            + configFile + ", not saving.");
+                throw new IOException("Context save file at "
+                                      + configFile
+                                      + " not a file, or not writable.");
             }
             if (log.isInfoEnabled())
                 log.info("Store Context " + aContext.getPath()
@@ -146,21 +153,27 @@
     protected void storeWithBackup(StandardContext aContext) throws Exception {
         StoreFileMover mover = getConfigFileWriter((Context) aContext);
         if (mover != null) {
+            // Bugzilla 37781 Check to make sure we can write this output file
+            if ((mover.getConfigOld() == null)
+                    || (!mover.getConfigOld().isFile())
+                    || (!mover.getConfigOld().canWrite())) {
+                log.error("Cannot move orignal context output file at "
+                        + mover.getConfigOld());
+                throw new IOException("Context orginal file at "
+                        + mover.getConfigOld()
+                        + " is null, not a file or not writable.");
+            }
+            File dir = mover.getConfigSave().getParentFile();
+            if (dir != null && dir.isDirectory() && (!dir.canWrite())) {
+                log.error("Cannot save context output file at "
+                        + mover.getConfigSave());
+                throw new IOException("Context save file at "
+                        + mover.getConfigSave() + " is not writable.");
+            }
             if (log.isInfoEnabled())
                 log.info("Store Context " + aContext.getPath()
                         + " separate with backup (at file "
                         + mover.getConfigSave() + " )");
-
-            // Bugzilla 37781 Check to make sure we can write this output file
-            if ((mover.getConfigSave() == null) ||
-                (! mover.getConfigSave().isFile()) ||
-                (! mover.getConfigSave().canWrite())) {
-                log.error("Cannot write context output file at "
-                            + mover.getConfigSave() + ", not saving.");
-                throw new IOException("Context save file at "
-                                      + mover.getConfigSave()
-                                      + " is null, not a file, or not 
writable.");
-            }
 
             PrintWriter writer = mover.getWriter();
             try {

Modified: 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreContextAppender.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreContextAppender.java?rev=394151&r1=394150&r2=394151&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreContextAppender.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreContextAppender.java
 Fri Apr 14 10:48:28 2006
@@ -21,14 +21,18 @@
 import org.apache.catalina.Container;
 import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.core.StandardHost;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 /**
- * store StandardContext Attributes ... TODO DefaultContext Handling
+ * store StandardContext Attributes ... 
  * 
  * @author Peter Rossbach
  *  
  */
 public class StoreContextAppender extends StoreAppender {
+
+    private static Log log = LogFactory.getLog(StoreContextAppender.class);
 
     /*
      * Print Context Values. <ul><li> Spezial handling to default workDir.

Modified: 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreFactoryBase.java
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreFactoryBase.java?rev=394151&r1=394150&r2=394151&view=diff
==============================================================================
--- 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreFactoryBase.java
 (original)
+++ 
tomcat/container/tc5.5.x/modules/storeconfig/src/share/org/apache/catalina/storeconfig/StoreFactoryBase.java
 Fri Apr 14 10:48:28 2006
@@ -1,5 +1,5 @@
 /*
- * Copyright 1999-2001,2004 The Apache Software Foundation.
+ * Copyright 1999-2001,2004-2006 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
 
 package org.apache.catalina.storeconfig;
 
+import java.io.IOException;
 import java.io.PrintWriter;
 
 import org.apache.catalina.util.StringManager;
@@ -149,9 +150,9 @@
      * Store only elements from storeChilds methods that are not a transient
      * child.
      * 
-     * @param aWriter
-     * @param indent
-     * @param aTagElement
+     * @param aWriter current output writer
+     * @param indent indentation level
+     * @param aTagElement current tomcat element
      * @throws Exception
      */
     protected void storeElement(PrintWriter aWriter, int indent,
@@ -173,13 +174,21 @@
     }
 
     /*
-     * Save a array of elements @param aWriter @param indent @param elements
+     * Save a array of elements
+     * @param aWriter current output writer
+     * @param indent indentation level
+     * @param elements list of child elments to store!
      */
     protected void storeElementArray(PrintWriter aWriter, int indent,
             Object[] elements) throws Exception {
         if (elements != null) {
             for (int i = 0; i < elements.length; i++) {
-                storeElement(aWriter, indent, elements[i]);
+                try {
+                    storeElement(aWriter, indent, elements[i]);
+                } catch (IOException ioe) {
+                    // ingore childs report error them self!
+                    // see StandartContext.storeWithBackup()
+                }
             }
         }
     }

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?rev=394151&r1=394150&r2=394151&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Fri Apr 14 10:48:28 2006
@@ -156,7 +156,7 @@
           manager app support and dialog box enhancements.  Thanks to George 
Sexton for the patch. (yoavs)
       </fix>
       <fix>
-        <bug>37781</bug>: Make sure context config file is writeable, 
suggested by George Sexton. (yoavs)
+        <bug>37781</bug>: Make sure context config file is writeable, 
suggested by George Sexton. (yoavs,pero)
       </fix>
     </changelog>
   </subsection>



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to