You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rj...@apache.org on 2013/01/18 16:09:58 UTC
svn commit: r1435178 - in /httpd/httpd/trunk:
docs/log-message-tags/next-number modules/proxy/ajp_header.c
modules/proxy/ajp_header.h
Author: rjung
Date: Fri Jan 18 15:09:58 2013
New Revision: 1435178
URL: http://svn.apache.org/viewvc?rev=1435178&view=rev
Log:
mod_proxy_ajp: Support unknown HTTP methods.
BZ 54416
Forward unknown methods as request attributes
using method id SC_M_JK_STORED=0xFF and
request attribute id SC_A_STORED_METHOD=13.
Code ported from mod_jk (which got it from mod_jk2).
Supported by Tomcat at least since TC 4.1.
Doesn't seem to be supported by Jetty though.
Modified:
httpd/httpd/trunk/docs/log-message-tags/next-number
httpd/httpd/trunk/modules/proxy/ajp_header.c
httpd/httpd/trunk/modules/proxy/ajp_header.h
Modified: httpd/httpd/trunk/docs/log-message-tags/next-number
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/log-message-tags/next-number?rev=1435178&r1=1435177&r2=1435178&view=diff
==============================================================================
--- httpd/httpd/trunk/docs/log-message-tags/next-number (original)
+++ httpd/httpd/trunk/docs/log-message-tags/next-number Fri Jan 18 15:09:58 2013
@@ -1 +1 @@
-2437
+2439
Modified: httpd/httpd/trunk/modules/proxy/ajp_header.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/ajp_header.c?rev=1435178&r1=1435177&r2=1435178&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/ajp_header.c (original)
+++ httpd/httpd/trunk/modules/proxy/ajp_header.c Fri Jan 18 15:09:58 2013
@@ -226,10 +226,10 @@ static apr_status_t ajp_marshal_into_msg
ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, r, "Into ajp_marshal_into_msgb");
if ((method = sc_for_req_method_by_id(r)) == UNKNOWN_METHOD) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(00967)
- "ajp_marshal_into_msgb - No such method %s",
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE8, 0, r, APLOGNO(02437)
+ "ajp_marshal_into_msgb - Sending unknown method %s as request attribute",
r->method);
- return AJP_EBAD_METHOD;
+ method = SC_M_JK_STORED;
}
is_ssl = (apr_byte_t) ap_proxy_conn_is_https(r->connection);
@@ -404,6 +404,17 @@ static apr_status_t ajp_marshal_into_msg
}
}
}
+ /* If the method was unrecognized, encode it as an attribute */
+ if (method == SC_M_JK_STORED) {
+ if (ajp_msg_append_uint8(msg, SC_A_STORED_METHOD)
+ || ajp_msg_append_string(msg, r->method)) {
+ ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, APLOGNO(02438)
+ "ajp_marshal_into_msgb: "
+ "Error appending the method '%s' as request attribute",
+ r->method);
+ return AJP_EOVERFLOW;
+ }
+ }
/* Forward the remote port information, which was forgotten
* from the builtin data of the AJP 13 protocol.
* Since the servlet spec allows to retrieve it via getRemotePort(),
Modified: httpd/httpd/trunk/modules/proxy/ajp_header.h
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/ajp_header.h?rev=1435178&r1=1435177&r2=1435178&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/proxy/ajp_header.h (original)
+++ httpd/httpd/trunk/modules/proxy/ajp_header.h Fri Jan 18 15:09:58 2013
@@ -41,6 +41,7 @@
#define SC_A_REQ_ATTRIBUTE (unsigned char)10
#define SC_A_SSL_KEY_SIZE (unsigned char)11 /* only in if JkOptions +ForwardKeySize */
#define SC_A_SECRET (unsigned char)12
+#define SC_A_STORED_METHOD (unsigned char)13
#define SC_A_ARE_DONE (unsigned char)0xFF
/*
@@ -111,6 +112,7 @@
#define SC_M_MERGE (unsigned char)25
#define SC_M_BASELINE_CONTROL (unsigned char)26
#define SC_M_MKACTIVITY (unsigned char)27
+#define SC_M_JK_STORED (unsigned char)0xFF
/*