The servletapi gives us a perfectly good constant for 'javax.servlet.context.tempdir...
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 19 Jun 2009 12:10:05 +0000 (12:10 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Fri, 19 Jun 2009 12:10:05 +0000 (12:10 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@786471 13f79535-47bb-0310-9956-ffa450edef68

14 files changed:
java/org/apache/catalina/Globals.java
java/org/apache/catalina/core/StandardContext.java
java/org/apache/catalina/loader/WebappLoader.java
java/org/apache/catalina/manager/HTMLManagerServlet.java
java/org/apache/catalina/manager/ManagerServlet.java
java/org/apache/catalina/servlets/CGIServlet.java
java/org/apache/catalina/servlets/DefaultServlet.java
java/org/apache/catalina/session/FileStore.java
java/org/apache/catalina/session/StandardManager.java
java/org/apache/catalina/valves/AccessLogValve.java
java/org/apache/jasper/Constants.java
java/org/apache/jasper/EmbeddedServletOptions.java
java/org/apache/jasper/compiler/JspRuntimeContext.java
test/org/apache/catalina/connector/TestRequest.java

index dcfeaf4..2eaad85 100644 (file)
@@ -317,15 +317,6 @@ public final class Globals {
 
 
     /**
-     * The servlet context attribute under which we store a temporary
-     * working directory (as an object of type File) for use by servlets
-     * within this web application.
-     */
-    public static final String WORK_DIR_ATTR =
-        "javax.servlet.context.tempdir";
-
-
-    /**
      * The master flag which controls strict servlet specification 
      * compliance.
      */
index d26802b..2fe7346 100644 (file)
@@ -5122,10 +5122,10 @@ public class StandardContext
         dir.mkdirs();
 
         // Set the appropriate servlet context attribute
-        getServletContext().setAttribute(Globals.WORK_DIR_ATTR, dir);
+        getServletContext().setAttribute(ServletContext.TEMPDIR, dir);
         if (getServletContext() instanceof ApplicationContext)
             ((ApplicationContext) getServletContext()).setAttributeReadOnly
-                (Globals.WORK_DIR_ATTR);
+                (ServletContext.TEMPDIR);
 
     }
 
index 753b995..f5625a8 100644 (file)
@@ -792,7 +792,7 @@ public class WebappLoader
 
         // Assigning permissions for the work directory
         File workDir =
-            (File) servletContext.getAttribute(Globals.WORK_DIR_ATTR);
+            (File) servletContext.getAttribute(ServletContext.TEMPDIR);
         if (workDir != null) {
             try {
                 String workDirPath = workDir.getCanonicalPath();
@@ -883,7 +883,7 @@ public class WebappLoader
         loaderRepositories=new ArrayList<String>();
         // Loading the work directory
         File workDir =
-            (File) servletContext.getAttribute(Globals.WORK_DIR_ATTR);
+            (File) servletContext.getAttribute(ServletContext.TEMPDIR);
         if (workDir == null) {
             log.info("No work dir for " + servletContext);
         }
index da10eb2..11bd49f 100644 (file)
@@ -31,6 +31,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
+
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
@@ -175,7 +177,7 @@ public final class HTMLManagerServlet extends ManagerServlet {
 
         // Get the tempdir
         File tempdir = (File) getServletContext().getAttribute
-            ("javax.servlet.context.tempdir");
+            (ServletContext.TEMPDIR);
         // Set upload parameters
         upload.setSizeMax(-1);
         upload.setRepositoryPath(tempdir.getCanonicalPath());
index 994eb7f..7403541 100644 (file)
@@ -33,6 +33,7 @@ import javax.naming.Binding;
 import javax.naming.InitialContext;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.ServletInputStream;
 import javax.servlet.UnavailableException;
@@ -452,7 +453,7 @@ public class ManagerServlet
 
         // Calculate the directory into which we will be deploying applications
         versioned = (File) getServletContext().getAttribute
-            ("javax.servlet.context.tempdir");
+            (ServletContext.TEMPDIR);
 
         // Identify the appBase of the owning Host of this Context
         // (if any)
index eeadcf1..4f5a804 100644 (file)
@@ -694,7 +694,7 @@ public final class CGIServlet extends HttpServlet {
         protected void setupFromContext(ServletContext context) {
             this.context = context;
             this.webAppRootDir = context.getRealPath("/");
-            this.tmpDir = (File) context.getAttribute(Globals.WORK_DIR_ATTR);
+            this.tmpDir = (File) context.getAttribute(ServletContext.TEMPDIR);
         }
 
 
index 7a748bf..9ebb687 100644 (file)
@@ -42,6 +42,7 @@ import javax.naming.NameClassPair;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 import javax.naming.directory.DirContext;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.UnavailableException;
@@ -497,7 +498,7 @@ public class DefaultServlet
         // resource - create a temp. file on the local filesystem to
         // perform this operation
         File tempDir = (File) getServletContext().getAttribute
-            ("javax.servlet.context.tempdir");
+            (ServletContext.TEMPDIR);
         // Convert all '/' characters to '.' in resourcePath
         String convertedResourcePath = path.replace('/', '.');
         File contentFile = new File(tempDir, convertedResourcePath);
index 7d571de..d1c7a1d 100644 (file)
@@ -399,7 +399,7 @@ public final class FileStore extends StoreBase {
                 ServletContext servletContext =
                     ((Context) container).getServletContext();
                 File work = (File)
-                    servletContext.getAttribute(Globals.WORK_DIR_ATTR);
+                    servletContext.getAttribute(ServletContext.TEMPDIR);
                 file = new File(work, this.directory);
             } else {
                 throw new IllegalArgumentException
index 78f3841..50be799 100644 (file)
@@ -742,7 +742,7 @@ public class StandardManager
                 ServletContext servletContext =
                     ((Context) container).getServletContext();
                 File tempdir = (File)
-                    servletContext.getAttribute(Globals.WORK_DIR_ATTR);
+                    servletContext.getAttribute(ServletContext.TEMPDIR);
                 if (tempdir != null)
                     file = new File(tempdir, pathname);
             }
index 7df2740..2c688f7 100644 (file)
@@ -690,10 +690,12 @@ public class AccessLogValve
         }
 
         // Log this message
-        if (writer != null) {
-            writer.println(message);
-            if (!buffered) {
-                writer.flush();
+        synchronized(this) {
+            if (writer != null) {
+                writer.println(message);
+                if (!buffered) {
+                    writer.flush();
+                }
             }
         }
 
index 90db003..d93e7b2 100644 (file)
@@ -120,7 +120,6 @@ public class Constants {
      * uses. 
      */
     public static final String INC_SERVLET_PATH = "javax.servlet.include.servlet_path";
-    public static final String TMP_DIR = "javax.servlet.context.tempdir";
 
     // Must be kept in sync with org/apache/catalina/Globals.java
     public static final String ALT_DD_ATTR = 
index d0acf40..f349557 100644 (file)
@@ -571,7 +571,7 @@ public final class EmbeddedServletOptions implements Options {
             scratchDir = new File(dir);
         } else {
             // First try the Servlet 2.2 javax.servlet.context.tempdir property
-            scratchDir = (File) context.getAttribute(Constants.TMP_DIR);
+            scratchDir = (File) context.getAttribute(ServletContext.TEMPDIR);
             if (scratchDir == null) {
                 // Not running in a Servlet 2.2 container.
                 // Try to get the JDK 1.2 java.io.tmpdir property
index aac6c55..af728b7 100644 (file)
@@ -394,16 +394,19 @@ public final class JspRuntimeContext {
                 docBase = docBase + "-";
                 permissionCollection.add(new FilePermission(docBase,"read"));
 
-                // Create a file read permission for web app tempdir (work)
-                // directory
+                // Spec says apps should have read/write for their temp
+                // directory. This is fine, as no security sensitive files, at
+                // least any that the app doesn't have full control of anyway,
+                // will be written here.
                 String workDir = options.getScratchDir().toString();
                 if (!workDir.endsWith(File.separator)){
                     permissionCollection.add
-                        (new FilePermission(workDir,"read"));
+                        (new FilePermission(workDir,"read,write"));
                     workDir = workDir + File.separator;
                 }
                 workDir = workDir + "-";
-                permissionCollection.add(new FilePermission(workDir,"read"));
+                permissionCollection.add(new FilePermission(
+                        workDir,"read,write,delete"));
 
                 // Allow the JSP to access org.apache.jasper.runtime.HttpJspBase
                 permissionCollection.add( new RuntimePermission(
index e7094a2..7166c78 100644 (file)
@@ -56,35 +56,41 @@ public class TestRequest extends TestCase {
         Bug37794Client client = new Bug37794Client();
 
         // Edge cases around zero
-        client.doRequest(-1); // Unlimited
+        client.doRequest(-1, false); // Unlimited
         assertTrue(client.isResponse200());
         assertTrue(client.isResponseBodyOK());
         client.reset();
-        client.doRequest(0); // Unlimited
+        client.doRequest(0, false); // Unlimited
         assertTrue(client.isResponse200());
         assertTrue(client.isResponseBodyOK());
         client.reset();
-        client.doRequest(1); // 1 byte - too small should fail
+        client.doRequest(1, false); // 1 byte - too small should fail
         assertTrue(client.isResponse500());
         
         client.reset();
         
         // Edge cases around actual content length
         client.reset();
-        client.doRequest(6); // Too small should fail
+        client.doRequest(6, false); // Too small should fail
         assertTrue(client.isResponse500());
         client.reset();
-        client.doRequest(7); // Just enough should pass
+        client.doRequest(7, false); // Just enough should pass
         assertTrue(client.isResponse200());
         assertTrue(client.isResponseBodyOK());
         client.reset();
-        client.doRequest(8); // 1 extra - should pass
+        client.doRequest(8, false); // 1 extra - should pass
         assertTrue(client.isResponse200());
         assertTrue(client.isResponseBodyOK());
         
         // Much larger
         client.reset();
-        client.doRequest(8096); // Plenty of space - should pass
+        client.doRequest(8096, false); // Plenty of space - should pass
+        assertTrue(client.isResponse200());
+        assertTrue(client.isResponseBodyOK());
+
+        // Check for case insensitivity
+        client.reset();
+        client.doRequest(8096, true); // Plenty of space - should pass
         assertTrue(client.isResponse200());
         assertTrue(client.isResponseBodyOK());
     }
@@ -115,7 +121,7 @@ public class TestRequest extends TestCase {
      * Bug 37794 test client.
      */
     private static class Bug37794Client extends SimpleHttpClient {
-        private Exception doRequest(int postLimit) {
+        private Exception doRequest(int postLimit, boolean ucChunkedHead) {
             Tomcat tomcat = new Tomcat();
             try {
                 StandardContext root = tomcat.addContext("", TEMP_DIR);
@@ -129,14 +135,25 @@ public class TestRequest extends TestCase {
                 
                 // Send request in two parts
                 String[] request = new String[2];
-                request[0] =
-                    "POST http://localhost:8080/test HTTP/1.1" + CRLF +
-                    "content-type: application/x-www-form-urlencoded" + CRLF +
-                    "Transfer-Encoding: chunked" + CRLF +
-                    "Connection: close" + CRLF +
-                    CRLF +
-                    "3" + CRLF +
-                    "a=1" + CRLF;
+                if (ucChunkedHead) {
+                    request[0] =
+                        "POST http://localhost:8080/test HTTP/1.1" + CRLF +
+                        "content-type: application/x-www-form-urlencoded" + CRLF +
+                        "Transfer-Encoding: CHUNKED" + CRLF +
+                        "Connection: close" + CRLF +
+                        CRLF +
+                        "3" + CRLF +
+                        "a=1" + CRLF;
+                } else {
+                    request[0] =
+                        "POST http://localhost:8080/test HTTP/1.1" + CRLF +
+                        "content-type: application/x-www-form-urlencoded" + CRLF +
+                        "Transfer-Encoding: chunked" + CRLF +
+                        "Connection: close" + CRLF +
+                        CRLF +
+                        "3" + CRLF +
+                        "a=1" + CRLF;
+                }
                 request[1] =
                     "4" + CRLF +
                     "&b=2" + CRLF +