Commit 18c4d5dd authored by Rainer Jung's avatar Rainer Jung
Browse files

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
parent 62083ea0
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
                                                         -*- 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]

+0 −15
Original line number Diff line number Diff line
@@ -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
+14 −3
Original line number Diff line number Diff line
@@ -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(),
+2 −0
Original line number Diff line number Diff line
@@ -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


/*