From: Rainer Jung Date: Fri, 15 Feb 2013 15:09:44 +0000 (+0000) Subject: mod_proxy_ajp: Support unknown HTTP methods. X-Git-Tag: 2.2.24~24 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7c4536fe2b0f5202e49592e53bc7a6d8e4c30b62;p=thirdparty%2Fapache%2Fhttpd.git 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. Backport of r1435178 from trunk resp. r1436400 from 2.4.x. Submitted/backported by: rjung Reviewed by: wrowe, rpluem git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@1446624 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index a4607cbf1b5..2f113a9f5ac 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,9 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.24 + *) mod_proxy_ajp: Support unknown HTTP methods. PR 54416. + [Rainer Jung] + *) mod_dir: Add support for the value 'disabled' in FallbackResource. [Vincent Deffontaines] diff --git a/STATUS b/STATUS index feccdc365b7..a968bc33795 100644 --- a/STATUS +++ b/STATUS @@ -94,21 +94,6 @@ RELEASE SHOWSTOPPERS: PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - * mod_proxy_ajp: Support unknown HTTP methods. PR54416. - 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. - trunk patch: http://svn.apache.org/r1435178 - 2.4.x patch: http://svn.apache.org/r1436400 - plus http://svn.apache.org/r1436436 (CHANGES) - 2.2.x patch: http://people.apache.org/~rjung/patches/httpd-2_2_x-ajp-unknown_-methods.patch - plus CHANGES - Difference to 2.4.x only in logging. - +1: rjung, wrowe, rpluem - * mod_ssl: PR 52162: log revoked certificates at level INFO instead of DEBUG trunk/2.4.x: Changed as part of http://svn.apache.org/viewvc?rev=1165056&view=rev 2.2.x patch: https://issues.apache.org/bugzilla/attachment.cgi?id=27913 diff --git a/modules/proxy/ajp_header.c b/modules/proxy/ajp_header.c index 5aed7d2912b..72440822378 100644 --- a/modules/proxy/ajp_header.c +++ b/modules/proxy/ajp_header.c @@ -225,10 +225,10 @@ static apr_status_t ajp_marshal_into_msgb(ajp_msg_t *msg, "Into ajp_marshal_into_msgb"); if ((method = sc_for_req_method_by_id(r)) == UNKNOWN_METHOD) { - ap_log_error(APLOG_MARK, APLOG_ERR, 0, r->server, - "ajp_marshal_into_msgb - No such method %s", + ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, r->server, + "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); @@ -403,6 +403,17 @@ static apr_status_t ajp_marshal_into_msgb(ajp_msg_t *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_error(APLOG_MARK, APLOG_ERR, 0, r->server, + "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(), diff --git a/modules/proxy/ajp_header.h b/modules/proxy/ajp_header.h index 35379feef9e..158966e89de 100644 --- a/modules/proxy/ajp_header.h +++ b/modules/proxy/ajp_header.h @@ -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 /*