cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java
remm02/03/09 15:22:38 Modified:catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java Log: - Add some hooks to allow the directory context implementation to compute strong etags. Revision ChangesPath 1.51 +22 -26 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java Index: DefaultServlet.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- DefaultServlet.java 8 Jan 2002 12:14:57 - 1.50 +++ DefaultServlet.java 9 Mar 2002 23:22:38 - 1.51 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.50 2002/01/08 12:14:57 remm Exp $ - * $Revision: 1.50 $ - * $Date: 2002/01/08 12:14:57 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.51 2002/03/09 23:22:38 remm Exp $ + * $Revision: 1.51 $ + * $Date: 2002/03/09 23:22:38 $ * * * @@ -125,7 +125,7 @@ * * @author Craig R. McClanahan * @author Remy Maucherat - * @version $Revision: 1.50 $ $Date: 2002/01/08 12:14:57 $ + * @version $Revision: 1.51 $ $Date: 2002/03/09 23:22:38 $ */ public class DefaultServlet @@ -785,7 +785,7 @@ ResourceInfo resourceInfo) throws IOException { -String eTag = getETag(resourceInfo, true); +String eTag = getETag(resourceInfo); long fileLength = resourceInfo.length; long lastModified = resourceInfo.date; @@ -918,31 +918,21 @@ /** - * Get the ETag value associated with a file. - * - * @param resourceInfo File object - * @param strong True if we want a strong ETag, in which case a checksum - * of the file has to be calculated - */ -protected String getETagValue(ResourceInfo resourceInfo, boolean strong) { -// FIXME : Compute a strong ETag if requested, using an MD5 digest -// of the file contents -return resourceInfo.length + - + resourceInfo.date; -} - - -/** * Get the ETag associated with a file. * * @param resourceInfo File object * @param strong True if we want a strong ETag, in which case a checksum * of the file has to be calculated */ -protected String getETag(ResourceInfo resourceInfo, boolean strong) { -if (strong) -return \ + getETagValue(resourceInfo, strong) + \; -else -return W/\ + getETagValue(resourceInfo, strong) + \; +protected String getETag(ResourceInfo resourceInfo) { +if (resourceInfo.strongETag != null) { +return resourceInfo.strongETag; +} else if (resourceInfo.weakETag != null) { +return resourceInfo.weakETag; +} else { +return W/\ + resourceInfo.length + - ++ resourceInfo.date + \; +} } @@ -1199,7 +1189,7 @@ ranges = parseRange(request, response, resourceInfo); // ETag header -response.setHeader(ETag, getETag(resourceInfo, true)); +response.setHeader(ETag, getETag(resourceInfo)); // Last-Modified header if (debug 0) @@ -1416,7 +1406,7 @@ String headerValue = request.getHeader(If-Range); if (headerValue != null) { -String eTag = getETag(resourceInfo, true); +String eTag = getETag(resourceInfo); long lastModified = resourceInfo.date; Date date = null; @@ -2269,6 +2259,8 @@ public long date; public long length; public boolean collection; +public String weakETag; +public String strongETag; public boolean exists; public DirContext resources; protected InputStream is; @@ -2285,6 +2277,8 @@ date = 0; length = -1; collection = true; +weakETag = null; +strongETag = null; exists = false; resources = null; is = null; @@ -2329,6 +2323,8 @@ } else { httpDate = FastHttpDateFormat.getCurrentDate(); } +weakETag = tempAttrs.getETag(); +strongETag = tempAttrs.getETag(true); length = tempAttrs.getContentLength();
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java
remm01/04/05 19:45:48 Modified:catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java Log: - Add addiotional check to prevent using DELETE and PUT on URLs starting with /WEB-INF and /META-INF. Revision ChangesPath 1.35 +16 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java Index: DefaultServlet.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- DefaultServlet.java 2001/04/05 18:47:50 1.34 +++ DefaultServlet.java 2001/04/06 02:45:48 1.35 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.34 2001/04/05 18:47:50 remm Exp $ - * $Revision: 1.34 $ - * $Date: 2001/04/05 18:47:50 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.35 2001/04/06 02:45:48 remm Exp $ + * $Revision: 1.35 $ + * $Date: 2001/04/06 02:45:48 $ * * * @@ -122,7 +122,7 @@ * * @author Craig R. McClanahan * @author Remy Maucherat - * @version $Revision: 1.34 $ $Date: 2001/04/05 18:47:50 $ + * @version $Revision: 1.35 $ $Date: 2001/04/06 02:45:48 $ */ public class DefaultServlet @@ -575,6 +575,12 @@ String path = getRelativePath(req); +if ((path.toUpperCase().startsWith("/WEB-INF")) || +(path.toUpperCase().startsWith("/META-INF"))) { +resp.sendError(HttpServletResponse.SC_FORBIDDEN); +return; +} + // Looking for a Content-Range header if (req.getHeader("Content-Range") != null) { // No content range header is supported @@ -636,6 +642,12 @@ } String path = getRelativePath(req); + +if ((path.toUpperCase().startsWith("/WEB-INF")) || +(path.toUpperCase().startsWith("/META-INF"))) { +resp.sendError(HttpServletResponse.SC_FORBIDDEN); +return; +} // Retrieve the Catalina context // Retrieve the resources 1.17 +10 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java Index: WebdavServlet.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- WebdavServlet.java2001/04/05 19:03:08 1.16 +++ WebdavServlet.java2001/04/06 02:45:48 1.17 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v 1.16 2001/04/05 19:03:08 remm Exp $ - * $Revision: 1.16 $ - * $Date: 2001/04/05 19:03:08 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v 1.17 2001/04/06 02:45:48 remm Exp $ + * $Revision: 1.17 $ + * $Date: 2001/04/06 02:45:48 $ * * * @@ -125,7 +125,7 @@ * are handled by the DefaultServlet. * * @author Remy Maucherat - * @version $Revision: 1.16 $ $Date: 2001/04/05 19:03:08 $ + * @version $Revision: 1.17 $ $Date: 2001/04/06 02:45:48 $ */ public class WebdavServlet @@ -1685,6 +1685,12 @@ private boolean deleteResource(String path, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + +if ((path.toUpperCase().startsWith("/WEB-INF")) || +(path.toUpperCase().startsWith("/META-INF"))) { +resp.sendError(WebdavStatus.SC_FORBIDDEN); +return false; +} String ifHeader = req.getHeader("If"); if (ifHeader == null)
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java
remm01/01/24 21:45:41 Modified:catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java Log: - Update PROPFIND to use streaming (as the response could get very big). - Fix a bug where href elements could include incorrect paths containing "//". - Avoid putting the '' character in the XML response. Revision ChangesPath 1.21 +13 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java Index: DefaultServlet.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v retrieving revision 1.20 retrieving revision 1.21 diff -u -r1.20 -r1.21 --- DefaultServlet.java 2001/01/23 04:47:57 1.20 +++ DefaultServlet.java 2001/01/25 05:45:40 1.21 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.20 2001/01/23 04:47:57 remm Exp $ - * $Revision: 1.20 $ - * $Date: 2001/01/23 04:47:57 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.21 2001/01/25 05:45:40 remm Exp $ + * $Revision: 1.21 $ + * $Date: 2001/01/25 05:45:40 $ * * * @@ -119,7 +119,7 @@ * * @author Craig R. McClanahan * @author Remy Maucherat - * @version $Revision: 1.20 $ $Date: 2001/01/23 04:47:57 $ + * @version $Revision: 1.21 $ $Date: 2001/01/25 05:45:40 $ */ public class DefaultServlet @@ -911,6 +911,15 @@ if (index 0) break; normalized = normalized.substring(0, index) + "%20" + + normalized.substring(index + 1); + } + + // Replace "" with "%26" +while (true) { + int index = normalized.indexOf(""); + if (index 0) + break; + normalized = normalized.substring(0, index) + "%26" + normalized.substring(index + 1); } 1.11 +23 -13 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java Index: WebdavServlet.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- WebdavServlet.java2001/01/23 04:47:57 1.10 +++ WebdavServlet.java2001/01/25 05:45:40 1.11 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v 1.10 2001/01/23 04:47:57 remm Exp $ - * $Revision: 1.10 $ - * $Date: 2001/01/23 04:47:57 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/WebdavServlet.java,v 1.11 2001/01/25 05:45:40 remm Exp $ + * $Revision: 1.11 $ + * $Date: 2001/01/25 05:45:40 $ * * * @@ -124,7 +124,7 @@ * are handled by the DefaultServlet. * * @author Remy Maucherat - * @version $Revision: 1.10 $ $Date: 2001/01/23 04:47:57 $ + * @version $Revision: 1.11 $ $Date: 2001/01/25 05:45:40 $ */ public class WebdavServlet @@ -507,7 +507,7 @@ resp.setStatus(WebdavStatus.SC_MULTI_STATUS); // Create multistatus object -XMLWriter generatedXML = new XMLWriter(); +XMLWriter generatedXML = new XMLWriter(resp.getWriter()); generatedXML.writeXMLHeader(); generatedXML.writeElement(null, "multistatus" @@ -543,7 +543,7 @@ NameClassPair ncPair = (NameClassPair) enum.nextElement(); String newPath = currentPath; -if (!newPath.equals("/")) +if (!(newPath.endsWith("/"))) newPath += "/"; newPath += ncPair.getName(); stackBelow.push(newPath); @@ -581,15 +581,21 @@ stackBelow = new Stack(); } +generatedXML.sendData(); + } } generatedXML.writeElement(null, "multistatus", XMLWriter.CLOSING); +generatedXML.sendData(); + +/* Writer writer = resp.getWriter(); writer.write(generatedXML.toString()); writer.flush(); +*/ } @@ -1906,8 +1912,9 @@
cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java
remm00/11/08 23:22:24 Modified:catalina/src/share/org/apache/catalina/servlets DefaultServlet.java WebdavServlet.java Log: - Add a debug method in the DefaultServlet, which will output to System.out all the info about the request. It should be useful to debug conditional requests and ranged requests. - In the WebDAV servlet, one of the XMLWriters I was using wasn't properly initialized. As a result, the XML header wasn't present in the XML sent back to the client, which may have caused various problems with some clients. - Now use ISO date format for the creationdate property. - Fixes one or two cosmetic issues in the code layout. - The displayname property now have a more "friendly" value (the '/' are replaced by '_') - The JSP include fix intrduced a bug : The response stream was not opened at the right time, so chunking was enabled all the time (it seems). Note : We should decide if we chunk or not in a more robust way. It will be addressed in a future patch. Revision ChangesPath 1.12 +141 -23 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java Index: DefaultServlet.java === RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- DefaultServlet.java 2000/10/17 19:45:27 1.11 +++ DefaultServlet.java 2000/11/09 07:22:22 1.12 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.11 2000/10/17 19:45:27 craigmcc Exp $ - * $Revision: 1.11 $ - * $Date: 2000/10/17 19:45:27 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/servlets/DefaultServlet.java,v 1.12 2000/11/09 07:22:22 remm Exp $ + * $Revision: 1.12 $ + * $Date: 2000/11/09 07:22:22 $ * * * @@ -112,7 +112,7 @@ * * @author Craig R. McClanahan * @author Remy Maucherat - * @version $Revision: 1.11 $ $Date: 2000/10/17 19:45:27 $ + * @version $Revision: 1.12 $ $Date: 2000/11/09 07:22:22 $ */ public class DefaultServlet @@ -280,6 +280,93 @@ /** + * Show HTTP header information. + */ +protected void showRequestInfo(HttpServletRequest req) { + + System.out.println(); + System.out.println("SlideDAV Request Info"); + System.out.println(); + + // Show generic info + System.out.println("Encoding : " + req.getCharacterEncoding()); + System.out.println("Length : " + req.getContentLength()); + System.out.println("Type : " + req.getContentType()); + + System.out.println(); + System.out.println("Parameters"); + + Enumeration parameters = req.getParameterNames(); + + while (parameters.hasMoreElements()) { + String paramName = (String) parameters.nextElement(); + String[] values = req.getParameterValues(paramName); + System.out.print(paramName + " : "); + for (int i = 0; i values.length; i++) { + System.out.print(values[i] + ", "); + } + System.out.println(); + } + + System.out.println(); + + System.out.println("Protocol : " + req.getProtocol()); + System.out.println("Address : " + req.getRemoteAddr()); + System.out.println("Host : " + req.getRemoteHost()); + System.out.println("Scheme : " + req.getScheme()); + System.out.println("Server Name : " + req.getServerName()); + System.out.println("Server Port : " + req.getServerPort()); + + System.out.println(); + System.out.println("Attributes"); + + Enumeration attributes = req.getAttributeNames(); + + while (attributes.hasMoreElements()) { + String attributeName = (String) attributes.nextElement(); + System.out.print(attributeName + " : "); + System.out.println(req.getAttribute(attributeName).toString()); + } + + System.out.println(); + + // Show HTTP info + System.out.println(); + System.out.println("HTTP Header Info"); + System.out.println(); + + System.out.println("Authentication Type : " + req.getAuthType()); + System.out.println("HTTP Method : " + req.getMethod()); + System.out.println("Path Info : " + req.getPathInfo()); + System.out.println("Path translated : " + req.getPathTranslated()); + System.out.println("Query string : " + req.getQueryString()); + System.out.println("Remote user : " + req.getRemoteUser()); + System.out.println("Requested session id : " +