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 2012/07/22 12:46:22 UTC
svn commit: r1364253 - in /httpd/httpd/branches/2.4.x: ./ CHANGES STATUS
modules/filters/mod_deflate.c
Author: rjung
Date: Sun Jul 22 10:46:21 2012
New Revision: 1364253
URL: http://svn.apache.org/viewvc?rev=1364253&view=rev
Log:
Make mod_deflate skip compression if compression is enabled at SSL level.
Backport of r1359057 from trunk.
Submitted by: sf
Reviewed by: jorton, rjung
Backported by: rjung
Modified:
httpd/httpd/branches/2.4.x/ (props changed)
httpd/httpd/branches/2.4.x/CHANGES
httpd/httpd/branches/2.4.x/STATUS
httpd/httpd/branches/2.4.x/modules/filters/mod_deflate.c
Propchange: httpd/httpd/branches/2.4.x/
------------------------------------------------------------------------------
Merged /httpd/httpd/trunk:r1359057
Modified: httpd/httpd/branches/2.4.x/CHANGES
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/CHANGES?rev=1364253&r1=1364252&r2=1364253&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/CHANGES [utf-8] (original)
+++ httpd/httpd/branches/2.4.x/CHANGES [utf-8] Sun Jul 22 10:46:21 2012
@@ -8,6 +8,9 @@ Changes with Apache 2.4.3
possible XSS for a site where untrusted users can upload files to
a location with MultiViews enabled. [Niels Heinen <heinenn google.com>]
+ *) mod_deflate: Skip compression if compression is enabled at SSL level.
+ [Stefan Fritsch]
+
*) core: Add missing HTTP status codes registered with IANA.
[Julian Reschke <julian.reschke gmx.de>, Rainer Jung]
Modified: httpd/httpd/branches/2.4.x/STATUS
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/STATUS?rev=1364253&r1=1364252&r2=1364253&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/STATUS (original)
+++ httpd/httpd/branches/2.4.x/STATUS Sun Jul 22 10:46:21 2012
@@ -88,12 +88,6 @@ RELEASE SHOWSTOPPERS:
PATCHES ACCEPTED TO BACKPORT FROM TRUNK:
[ start all new proposals below, under PATCHES PROPOSED. ]
- * mod_deflate: Make mod_deflate skip compression if compression is enabled
- at SSL level.
- trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1359057
- 2.4.x patch: trunk patch works (ex. CHANGES)
- +1: sf, rjung, jorton
-
* core: Always log if LimitRequestFieldSize triggers
trunk patch: http://svn.apache.org/viewvc?view=revision&revision=1352911
2.4.x patch: trunk patch works
Modified: httpd/httpd/branches/2.4.x/modules/filters/mod_deflate.c
URL: http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/filters/mod_deflate.c?rev=1364253&r1=1364252&r2=1364253&view=diff
==============================================================================
--- httpd/httpd/branches/2.4.x/modules/filters/mod_deflate.c (original)
+++ httpd/httpd/branches/2.4.x/modules/filters/mod_deflate.c Sun Jul 22 10:46:21 2012
@@ -45,6 +45,7 @@
#include "http_request.h"
#define APR_WANT_STRFUNC
#include "apr_want.h"
+#include "mod_ssl.h"
#include "zlib.h"
@@ -83,6 +84,7 @@ static const char deflate_magic[2] = { '
#define DEFAULT_MEMLEVEL 9
#define DEFAULT_BUFFERSIZE 8096
+static APR_OPTIONAL_FN_TYPE(ssl_var_lookup) *mod_deflate_ssl_var = NULL;
/* Check whether a request is gzipped, so we can un-gzip it.
* If a request has multiple encodings, we need the gzip
@@ -419,6 +421,18 @@ static void deflate_check_etag(request_r
}
}
+static int have_ssl_compression(request_rec *r)
+{
+ const char *comp;
+ if (mod_deflate_ssl_var == NULL)
+ return 0;
+ comp = mod_deflate_ssl_var(r->pool, r->server, r->connection, r,
+ "SSL_COMPRESS_METHOD");
+ if (comp == NULL || *comp == '\0' || strcmp(comp, "NULL") == 0)
+ return 0;
+ return 1;
+}
+
static apr_status_t deflate_out_filter(ap_filter_t *f,
apr_bucket_brigade *bb)
{
@@ -448,6 +462,14 @@ static apr_status_t deflate_out_filter(a
char *token;
const char *encoding;
+ if (have_ssl_compression(r)) {
+ ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r,
+ "Compression enabled at SSL level; not compressing "
+ "at HTTP level.");
+ ap_remove_output_filter(f);
+ return ap_pass_brigade(f->next, bb);
+ }
+
/* We have checked above that bb is not empty */
e = APR_BRIGADE_LAST(bb);
if (APR_BUCKET_IS_EOS(e)) {
@@ -1474,6 +1496,14 @@ static apr_status_t inflate_out_filter(a
return APR_SUCCESS;
}
+static int mod_deflate_post_config(apr_pool_t *pconf, apr_pool_t *plog,
+ apr_pool_t *ptemp, server_rec *s)
+{
+ mod_deflate_ssl_var = APR_RETRIEVE_OPTIONAL_FN(ssl_var_lookup);
+ return OK;
+}
+
+
#define PROTO_FLAGS AP_FILTER_PROTO_CHANGE|AP_FILTER_PROTO_CHANGE_LENGTH
static void register_hooks(apr_pool_t *p)
{
@@ -1483,6 +1513,7 @@ static void register_hooks(apr_pool_t *p
AP_FTYPE_RESOURCE-1);
ap_register_input_filter(deflateFilterName, deflate_in_filter, NULL,
AP_FTYPE_CONTENT_SET);
+ ap_hook_post_config(mod_deflate_post_config, NULL, NULL, APR_HOOK_MIDDLE);
}
static const command_rec deflate_filter_cmds[] = {