https://issues.apache.org/bugzilla/show_bug.cgi?id=47626

           Summary: File of directory which referred by symbolic link was
                    deleted.
           Product: Tomcat 6
           Version: 6.0.20
          Platform: All
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: Catalina
        AssignedTo: dev@tomcat.apache.org
        ReportedBy: tatsushita....@oss.ntt.co.jp


Deploy war.
Make symbolic link in the generated directory.
Symbolic link refer to the directory.
Undeploy war. 
As a result, file of directory which referred by symbolic link was deleted. 

The following are the reproduction methods. 


1.Deploy the sample.war in $TOMCAT_HOME/webapps/

2.Make symbolic link in the generated directory.
  Symbolic link refer to the directory.
[*...@**** sample]# ln -s /tmp/sampledir/ sampleln
[*...@**** sample]# ls
WEB-INF  sampleln  jsp  
[*...@**** sample]# cd sampleln/
[*...@**** sampleln]# ls
samplefile.txt

3.Undeploy sample.war.  

4.webapps/sample/ directory is delete. 

5.File of directory which referred by symbolic link was deleted.
[*...@**** webapps]# cd /tmp/sampledir/
[*...@**** sampledir]# ls 

The file of that directory must not delete!


I made two patches.
This patch added the conditional expression that it was a directory and was not
the symbolic link.

Index: java/org/apache/catalina/startup/ExpandWar.java
===================================================================
--- java/org/apache/catalina/startup/ExpandWar.java    (revision 798806 ( 
https://svn.apache.org/viewcvs.cgi?view=rev&rev=798806 ))
+++ java/org/apache/catalina/startup/ExpandWar.java    (working copy)
@@ -281,11 +281,17 @@
         }
         for (int i = 0; i < files.length; i++) {
             File file = new File(dir, files[i]);
-            if (file.isDirectory()) {
-                deleteDir(file);
-            } else {
-                file.delete();
-            }
+                try {
+                    if (file.isDirectory()
+                            &&
file.getCanonicalPath().equals(file.getAbsolutePath())) {
+                        // Directory that is not symbolic link
+                        deleteDir(file);
+                    } else {
+                        file.delete();
+                    }
+                } catch (IOException e) {
+                   
log.error(sm.getString("expandWar.canonicalizing",file.getAbsolutePath()), e);
+                }
         }
         return dir.delete();


This patch is LocalStrings

Index: java/org/apache/catalina/startup/LocalStrings.properties
===================================================================
--- java/org/apache/catalina/startup/LocalStrings.properties    (revision
798806 ( https://svn.apache.org/viewcvs.cgi?view=rev&rev=798806 ))
+++ java/org/apache/catalina/startup/LocalStrings.properties    (working copy)
@@ -59,6 +59,7 @@
 engineConfig.start=EngineConfig: Processing START
 engineConfig.stop=EngineConfig: Processing STOP
 expandWar.copy=Error copying {0} to {1}
+expandWar.canonicalizing=Error delete file or directory [{0}]
 hostConfig.appBase=Application base directory {0} does not exist
 hostConfig.canonicalizing=Error delete redeploy resources from context [{0}]
 hostConfig.cce=Lifecycle event data object {0} is not a Host




Best regards

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to