Sorry, just spotted a silly error in my patch. The line methodsAllowed.append("PROPFIND, "); in determineMethodsAllowed() should have been methodsAllowed.append(", PROPFIND");
Grateful if one of the committers could fix this. Again, apologies. Mark On Friday, November 14, 2003 10:16 AM, [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED] wrote: > remm 2003/11/14 02:16:22 > > Modified: catalina/src/share/org/apache/catalina/servlets > WebdavServlet.java > Log: > - Allow header handling. > - Bug 24006, submitted by Mark Thomas. > > Revision Changes Path > 1.6 +64 -31 jakarta-tomcat- > catalina/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java > > Index: WebdavServlet.java > =================================================================== > RCS file: /home/cvs/jakarta-tomcat- > catalina/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v > retrieving revision 1.5 > retrieving revision 1.6 > diff -u -r1.5 -r1.6 > --- WebdavServlet.java 6 Oct 2003 08:05:46 -0000 1.5 > +++ WebdavServlet.java 14 Nov 2003 10:16:22 -0000 1.6 > @@ -338,11 +338,8 @@ > protected void doOptions(HttpServletRequest req, HttpServletResponse > resp) > throws ServletException, IOException { > > - String path = getRelativePath(req); > - > resp.addHeader("DAV", "1,2"); > - String methodsAllowed = null; > - > + > // Retrieve the resources > DirContext resources = getResources(); > > @@ -351,28 +348,10 @@ > return; > } > > - boolean exists = true; > - Object object = null; > - try { > - object = resources.lookup(path); > - } catch (NamingException e) { > - exists = false; > - } > - > - if (!exists) { > - methodsAllowed = "OPTIONS, MKCOL, PUT, LOCK"; > - resp.addHeader("Allow", methodsAllowed); > - return; > - } > - > - methodsAllowed = "OPTIONS, GET, HEAD, POST, DELETE, TRACE, " > - + "PROPFIND, PROPPATCH, COPY, MOVE, LOCK, UNLOCK"; > - if (!(object instanceof DirContext)) { > - methodsAllowed += ", PUT"; > - } > - > - resp.addHeader("Allow", methodsAllowed); > + StringBuffer methodsAllowed = determineMethodsAllowed(resources, > + req); > > + resp.addHeader("Allow", methodsAllowed.toString()); > resp.addHeader("MS-Author-Via", "DAV"); > > } > @@ -385,6 +364,19 @@ > throws ServletException, IOException { > > if (!listings) { > + // Retrieve the resources > + DirContext resources = getResources(); > + > + if (resources == null) { > + resp.sendError > (HttpServletResponse.SC_INTERNAL_SERVER_ERROR); > + return; > + } > + > + // Get allowed methods > + StringBuffer methodsAllowed = determineMethodsAllowed > (resources, > + req); > + > + resp.addHeader("Allow", methodsAllowed.toString()); > resp.sendError(WebdavStatus.SC_METHOD_NOT_ALLOWED); > return; > } > @@ -649,7 +641,7 @@ > return; > } > > - resp.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); > + resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED); > > } > > @@ -697,6 +689,12 @@ > // Can't create a collection if a resource already exists at the > given > // path > if (exists) { > + // Get allowed methods > + StringBuffer methodsAllowed = determineMethodsAllowed > (resources, > + req); > + > + resp.addHeader("Allow", methodsAllowed.toString()); > + > resp.sendError(WebdavStatus.SC_METHOD_NOT_ALLOWED); > return; > } > @@ -2566,6 +2564,42 @@ > return creationDateValue.toString(); > } > > + /** > + * Determines the methods normally allowed for the resource. > + * > + */ > + private StringBuffer determineMethodsAllowed(DirContext resources, > + HttpServletRequest req) { > + > + StringBuffer methodsAllowed = new StringBuffer(); > + boolean exists = true; > + Object object = null; > + try { > + String path = getRelativePath(req); > + > + object = resources.lookup(path); > + } catch (NamingException e) { > + exists = false; > + } > + > + if (!exists) { > + methodsAllowed.append("OPTIONS, MKCOL, PUT, LOCK"); > + return methodsAllowed; > + } > + > + methodsAllowed.append("OPTIONS, GET, HEAD, POST, DELETE, TRACE, "); > > + methodsAllowed.append("PROPPATCH, COPY, MOVE, LOCK, UNLOCK"); > + > + if (listings) { > + methodsAllowed.append("PROPFIND, "); > + } > + > + if (!(object instanceof DirContext)) { > + methodsAllowed.append(", PUT"); > + } > + > + return methodsAllowed; > + } > > // -------------------------------------------------- LockInfo Inner > Class > > @@ -3041,7 +3075,6 @@ > private static void addStatusCodeMap(int nKey, String strVal) { > mapStatusCodes.put(new Integer(nKey), strVal); > } > - > > }; > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]