You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2003/07/02 20:29:46 UTC
DO NOT REPLY [Bug 21288] New: -
DirContext caching problem with Dreamweaver 6 when recursively creating directories
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=21288>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=21288
DirContext caching problem with Dreamweaver 6 when recursively creating directories
Summary: DirContext caching problem with Dreamweaver 6 when
recursively creating directories
Product: Tomcat 4
Version: 4.1.24
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: Other
Component: Servlets:WebDAV
AssignedTo: tomcat-dev@jakarta.apache.org
ReportedBy: puckman@taglab.com
I have a webdav enabled webapp in /webdav.
If I in Dreamweaver drag-drop a deep directory structure such as:
risk2/
risk2/character/
risk2/character/file.txt
And the risk2 directory does not exist under /webdav/.
The commands at one point issued are:
PROPFIND /webdav-www.boscom.com.preview.taglab.com/risk2 HTTP/1.1
HTTP/1.1 404
PROPFIND /webdav-www.boscom.com.preview.taglab.com/ HTTP/1.1
HTTP/1.1 207
MKCOL /webdav-www.boscom.com.preview.taglab.com/risk2/ HTTP/1.1
HTTP/1.1 201
PROPFIND /webdav-www.boscom.com.preview.taglab.com/risk2/character HTTP/1.1
HTTP/1.1 404
PROPFIND /webdav-www.boscom.com.preview.taglab.com/risk2/ HTTP/1.1
HTTP/1.1 404
The problem is the last PROPFIND fails despite the MKCOL for the same resource
succeeded.
It all boils down to that doPropfind() always strips a trailing "/" of the path.
This means that "/risk2/" would be used as "/risk2". The lookup in the
DirContext is done using "/risk2" (resources.lookup()) and such the very first
"/risk2" propfind (before MKCOL) gets cached in the DirContext as not existing
(which is correct). However the MKCOL is done using "/risk2/" with the trailing
slash which means that the resources.createSubcontext() call does not clear the
DirContext cached entry for "/risk2", and such the second call to propfind for
"/risk2/" fails with a 404.
Here is one solution to this specific problem.
$ diff -u WebdavServlet.java-2003-07-01 WebdavServlet.java
--- WebdavServlet.java-2003-07-01 2003-07-01 11:37:34.000000000 +0100
+++ WebdavServlet.java 2003-07-02 15:10:30.000000000 +0100
@@ -692,6 +692,8 @@
}
String path = getRelativePath(req);
+ if (path.endsWith("/"))
+ path = path.substring(0, path.length() - 1);
if ((path.toUpperCase().startsWith("/WEB-INF")) ||
(path.toUpperCase().startsWith("/META-INF"))) {
I think that this needs to be solved on a more fundamental level. ALL methods in
the WebdavServlet should do the same processing of the path so that no
inconsistencies against the DirContext can occur. Perhaps getRelativePath()
could be overriden and _always_ strip any trailing slashes. I haven't tried this
out and I'm out of time in resolving this issue now.
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org