Author: markt
Date: Tue Jan  8 20:26:14 2013
New Revision: 1430489

URL: http://svn.apache.org/viewvc?rev=1430489&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54377
Correctly set request attributes for AccessLog in RemoteIpFilter
Patch by Violeta Georgieva

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java
    
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
  Merged /tomcat/trunk:r1430487

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java?rev=1430489&r1=1430488&r2=1430489&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java 
Tue Jan  8 20:26:14 2013
@@ -820,13 +820,13 @@ public class RemoteIpFilter implements F
             }
             if (requestAttributesEnabled) {
                 request.setAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE,
-                        request.getRemoteAddr());
+                        xRequest.getRemoteAddr());
                 request.setAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE,
-                        request.getRemoteHost());
+                        xRequest.getRemoteHost());
                 request.setAttribute(AccessLog.PROTOCOL_ATTRIBUTE,
-                        request.getProtocol());
+                        xRequest.getProtocol());
                 request.setAttribute(AccessLog.SERVER_PORT_ATTRIBUTE,
-                        Integer.valueOf(request.getServerPort()));
+                        Integer.valueOf(xRequest.getServerPort()));
             }
             chain.doFilter(xRequest, response);
         } else {

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java?rev=1430489&r1=1430488&r2=1430489&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java 
Tue Jan  8 20:26:14 2013
@@ -45,6 +45,7 @@ import static org.junit.Assert.assertNul
 
 import org.junit.Test;
 
+import org.apache.catalina.AccessLog;
 import org.apache.catalina.Context;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.connector.Connector;
@@ -127,7 +128,12 @@ public class TestRemoteIpFilter extends 
 
         @Override
         public void setAttribute(String name, Object value) {
-            // NOOP. Prevents NPE during testing.
+            getCoyoteRequest().getAttributes().put(name, value);
+        }
+
+        @Override
+        public Object getAttribute(String name) {
+            return getCoyoteRequest().getAttributes().get(name);
         }
     }
 
@@ -503,6 +509,37 @@ public class TestRemoteIpFilter extends 
         return filterChain.getRequest();
     }
 
+    @Test
+    public void testRequestAttributesForAccessLog() throws Exception {
+        // PREPARE
+        FilterDef filterDef = new FilterDef();
+        filterDef.addInitParameter("protocolHeader", "x-forwarded-proto");
+        filterDef.addInitParameter("remoteIpHeader", "x-my-forwarded-for");
+        filterDef.addInitParameter("httpServerPort", "8080");
+
+        MockHttpServletRequest request = new MockHttpServletRequest();
+        request.setRemoteAddr("192.168.0.10");
+        request.setHeader("x-my-forwarded-for", "140.211.11.130");
+        request.setHeader("x-forwarded-proto", "http");
+
+        // TEST
+        HttpServletRequest actualRequest =
+                testRemoteIpFilter(filterDef, request);
+
+        // VERIFY
+        Assert.assertEquals("org.apache.catalina.AccessLog.ServerPort",
+                Integer.valueOf(8080),
+                actualRequest.getAttribute(AccessLog.SERVER_PORT_ATTRIBUTE));
+
+        Assert.assertEquals("org.apache.catalina.AccessLog.RemoteAddr",
+                "140.211.11.130",
+                actualRequest.getAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE));
+
+        Assert.assertEquals("org.apache.catalina.AccessLog.RemoteHost",
+                "140.211.11.130",
+                actualRequest.getAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE));
+    }
+
     /**
      * Test {@link RemoteIpFilter} in Tomcat standalone server
      */

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java?rev=1430489&r1=1430488&r2=1430489&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java 
Tue Jan  8 20:26:14 2013
@@ -30,8 +30,10 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.catalina.AccessLog;
 import org.apache.catalina.connector.Request;
 import org.apache.catalina.connector.Response;
 
@@ -80,7 +82,12 @@ public class TestRemoteIpValve {
     public static class MockRequest extends Request {
         @Override
         public void setAttribute(String name, Object value) {
-            // NOOP. Prevents NPE during testing.
+            getCoyoteRequest().getAttributes().put(name, value);
+        }
+
+        @Override
+        public Object getAttribute(String name) {
+            return getCoyoteRequest().getAttribute(name);
         }
     }
 
@@ -670,6 +677,43 @@ public class TestRemoteIpValve {
         assertArrayEquals(expected, actual);
     }
 
+    @Test
+    public void testRequestAttributesForAccessLog() throws Exception {
+
+        // PREPARE
+        RemoteIpValve remoteIpValve = new RemoteIpValve();
+        remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+        remoteIpValve.setProtocolHeader("x-forwarded-proto");
+        RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new 
RemoteAddrAndHostTrackerValve();
+        remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+
+        Request request = new MockRequest();
+        request.setCoyoteRequest(new org.apache.coyote.Request());
+        // client ip
+        request.setRemoteAddr("192.168.0.10");
+        request.setRemoteHost("192.168.0.10");
+        
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130");
+        // protocol
+        request.setServerPort(8080);
+        request.getCoyoteRequest().scheme().setString("http");
+
+        // TEST
+        remoteIpValve.invoke(request, null);
+
+        // VERIFY
+        Assert.assertEquals("org.apache.catalina.AccessLog.ServerPort",
+                Integer.valueOf(8080),
+                request.getAttribute(AccessLog.SERVER_PORT_ATTRIBUTE));
+
+        Assert.assertEquals("org.apache.catalina.AccessLog.RemoteAddr",
+                "140.211.11.130",
+                request.getAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE));
+
+        Assert.assertEquals("org.apache.catalina.AccessLog.RemoteHost",
+                "140.211.11.130",
+                request.getAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE));
+    }
+
     private void assertArrayEquals(String[] expected, String[] actual) {
         if (expected == null) {
             assertNull(actual);

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1430489&r1=1430488&r2=1430489&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Jan  8 20:26:14 2013
@@ -110,6 +110,10 @@
         Genova. (markt)
       </fix>
       <fix>
+        <bug>54377</bug>: Correctly set request attributes for AccessLog in
+        RemoteIpFilter. Patch by Violeta Georgieva. (markt)
+      </fix>
+      <fix>
         <bug>54380</bug>: Do not try to register servlets or contexts into the
         mapper too early (which just caused a warning to be logged). (kkolinko)
       </fix>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to