Hi,

I'm about to set up a webdav server on a stock Tomcat 8.0.9 (RHEL 6.5 x86_64). To do so, I installed a dummy application with the web.xml attached to this message, altered the conf/tomcat-users.xml and started the tomcat server.

Now when uploading a file it doesn't show up immediately. Which is quite confusing for an application that does a PROPFIND right after PUTting the file, which results in a 404. Or, even worse, in a 500 when trying to MOVE or COPY the file.

Example:

(1)
dav:/webdav/> ls
Listing collection `/webdav/': collection is empty.
dav:/webdav/> put testfile.bin
Uploading testfile.bin to `/webdav/testfile.bin':
Progress: [=============================>] 100,0% of 102400 bytes succeeded.
dav:/webdav/> propget testfile.bin
Fetching properties for `testfile.bin': failed:
404 Not Found
[now I'm waiting for a couple of seconds]
dav:/webdav/> propget testfile.bin
Fetching properties for `testfile.bin':
DAV: creationdate = 2014-07-01T16:29:35Z
DAV: displayname = testfile.bin
DAV: getlastmodified = Tue, 01 Jul 2014 16:29:35 GMT
DAV: getcontentlength = 102400
DAV: getcontenttype = application/octet-stream
DAV: getetag = W/"102400-1404232175000"
DAV: resourcetype =
DAV: source =
DAV: supportedlock = 
<DAV:lockentry><DAV:lockscope><DAV:exclusive></DAV:exclusive></DAV:lockscope><DAV:locktype><DAV:write></DAV:write></DAV:locktype></DAV:lockentry><DAV:lockentry><DAV:lockscope><DAV:shared></DAV:shared></DAV:lockscope><DAV:locktype><DAV:write></DAV:write></DAV:locktype></DAV:lockentry>

(2)
dav:/webdav/> rm testfile.bin
Deleting `testfile.bin': succeeded.
dav:/webdav/> ls
Listing collection `/webdav/': collection is empty.
dav:/webdav/> put testfile.bin testfile.bin.tmp
Uploading testfile.bin to `/webdav/testfile.bin.tmp':
Progress: [=============================>] 100,0% of 102400 bytes succeeded.
dav:/webdav/> move testfile.bin.tmp testfile.bin
Moving `/webdav/testfile.bin.tmp' to `/webdav/testfile.bin':  failed:
500 Internal Server Error
[again, waiting for a couple of seconds]
dav:/webdav/> move testfile.bin.tmp testfile.bin
Moving `/webdav/testfile.bin.tmp' to `/webdav/testfile.bin':  succeeded.

Why is tomcat behaving like this and how do I configure it to allow immediate file operations after upload?

AFAICT this is not a client issue. I've tested with cadaver, the Gnome and KDE file browsers and owncloud.


Kind regards,

Philippe
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee";
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd";
	version="2.5">

	<display-name>webdav</display-name>
	<description>webdav access</description>

	<servlet>
		<servlet-name>webdav</servlet-name>
		<servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
		<init-param>
			<param-name>debug</param-name>
			<param-value>0</param-value>
		</init-param>
		<init-param>
			<param-name>listings</param-name>
			<param-value>true</param-value>
		</init-param>
		<init-param>
			<param-name>readonly</param-name>
			<param-value>false</param-value>
		</init-param>
		<!-- allow access to WEB-INF and META-INF -->
		<!--
		<init-param>
			<param-name>allowSpecialPaths</param-name>
			<param-value>true</param-value>
		</init-param>
		-->
	</servlet>

	<!-- change to /foo/* to enable webdav only in /foo -->
	<servlet-mapping>
		<servlet-name>webdav</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>


	<security-constraint>
		<web-resource-collection>
			<web-resource-name>WebDAV</web-resource-name>
			<url-pattern>/*</url-pattern>
			<http-method>CANCELUPLOAD</http-method>
			<http-method>CHECKIN</http-method>
			<http-method>CHECKOUT</http-method>
			<http-method>COPY</http-method>
			<http-method>DELETE</http-method>
			<http-method>GET</http-method>
			<http-method>GETLIB</http-method>
			<http-method>HEAD</http-method>
			<http-method>LOCK</http-method>
			<http-method>MKCOL</http-method>
			<http-method>MOVE</http-method>
			<http-method>PROPFIND</http-method>
			<http-method>PROPPATCH</http-method>
			<http-method>PUT</http-method>
			<http-method>REPORT</http-method>
			<http-method>UNCHECKOUT</http-method>
			<http-method>UNLOCK</http-method>
			<http-method>UPDATE</http-method>
			<http-method>VERSION-CONTROL</http-method>
		</web-resource-collection>
		<!-- force https -->
		<!--
		<user-data-constraint>
			<transport-guarantee>CONFIDENTIAL</transport-guarantee>
		</user-data-constraint>
		-->
		<auth-constraint>
			<role-name>*</role-name>
		</auth-constraint>
	</security-constraint>

	<login-config>
		<auth-method>BASIC</auth-method>
		<!--
		<auth-method>DIGEST</auth-method>
		-->
		<realm-name>WebDAV</realm-name>
	</login-config>

	<security-role>
		<description>WebDAV User</description>
		<role-name>webdav</role-name>
	</security-role>

	<distributable />

</web-app>


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

Reply via email to