Author: rjung
Date: Fri Jul 11 01:43:33 2014
New Revision: 1609606
URL: http://svn.apache.org/r1609606
Log:
BZ 56661: Fix Servlet API getLocalAddr().
Use new custom request attribute "AJP_LOCAL_ADDR"
forwarded by the next mod_jk 1.2.41 to set the local
IP address returned by getLocalAddr():
Before this change Tomcat handled getLocalAddr() like
getLocalName().
Backport of r1609593 from trunk.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/Constants.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1609593
Modified:
tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java?rev=1609606&r1=1609605&r2=1609606&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/AbstractAjpProcessor.java
Fri Jul 11 01:43:33 2014
@@ -423,8 +423,11 @@ public abstract class AbstractAjpProcess
break;
}
case REQ_LOCAL_ADDR_ATTRIBUTE: {
- // Copy from local name for now, which should simply be an address
- request.localAddr().setString(request.localName().toString());
+ // Automatically populated during prepareRequest() when using
+ // modern AJP forwarder, otherwise copy from local name
+ if (request.localAddr().isNull()) {
+ request.localAddr().setString(request.localName().toString());
+ }
break;
}
case REQ_SET_BODY_REPLAY: {
@@ -791,13 +794,15 @@ public abstract class AbstractAjpProcess
requestHeaderMessage.getBytes(tmpMB);
String v = tmpMB.toString();
/*
- * AJP13 misses to forward the remotePort.
- * Allow the AJP connector to add this info via
- * a private request attribute.
- * We will accept the forwarded data as the remote port,
- * and remove it from the public list of request attributes.
+ * AJP13 misses to forward the local IP address and the
+ * remote port. Allow the AJP connector to add this info via
+ * private request attributes.
+ * We will accept the forwarded data and remove it from the
+ * public list of request attributes.
*/
- if(n.equals(Constants.SC_A_REQ_REMOTE_PORT)) {
+ if(n.equals(Constants.SC_A_REQ_LOCAL_ADDR)) {
+ request.localAddr().setString(v);
+ } else if(n.equals(Constants.SC_A_REQ_REMOTE_PORT)) {
try {
request.setRemotePort(Integer.parseInt(v));
} catch (NumberFormatException nfe) {
Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/Constants.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/Constants.java?rev=1609606&r1=1609605&r2=1609606&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/Constants.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/ajp/Constants.java Fri Jul 11
01:43:33 2014
@@ -104,6 +104,7 @@ public final class Constants {
/**
* AJP private request attributes
*/
+ public static final String SC_A_REQ_LOCAL_ADDR = "AJP_LOCAL_ADDR";
public static final String SC_A_REQ_REMOTE_PORT = "AJP_REMOTE_PORT";
// Terminates list of attributes
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=1609606&r1=1609605&r2=1609606&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Fri Jul 11 01:43:33 2014
@@ -208,6 +208,11 @@
Allow to configure <code>maxSwallowSize</code> attribute of an HTTP
connector via JMX. (kkolinko)
</update>
+ <fix>
+ <bug>56661</bug>: Fix <code>getLocalAddr()</code> for AJP connectors.
+ The complete fix is only available with a recent AJP forwarder like
+ the forthcoming mod_jk 1.2.41. (rjung)
+ </fix>
</changelog>
</subsection>
<subsection name="Jasper">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]