You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by sc...@apache.org on 2006/05/05 06:17:37 UTC
svn commit: r399947 - in /httpd/httpd/trunk: CHANGES include/ap_mmn.h
include/httpd.h modules/http/http_core.c server/config.c server/core.c
Author: sctemme
Date: Thu May 4 21:17:36 2006
New Revision: 399947
URL: http://svn.apache.org/viewcvs?rev=399947&view=rev
Log:
Add optional 'scheme://' prefix to ServerName directive. For
'https', mod_http returns "https" for the ap_hook_http_scheme and
DEFAULT_HTTPS_PORT for ap_hook_default_port. This fixes Redirect
responses to requests for directories without a trailing slash
when httpd runs behind a proxy or offload device that processes
SSL. It also enables support for Subversion in that
configuration. This change is completely backwards compatible
and passes the perl-framework. Minor mmn bump because I add a
field to server_rec.
Modified:
httpd/httpd/trunk/CHANGES
httpd/httpd/trunk/include/ap_mmn.h
httpd/httpd/trunk/include/httpd.h
httpd/httpd/trunk/modules/http/http_core.c
httpd/httpd/trunk/server/config.c
httpd/httpd/trunk/server/core.c
Modified: httpd/httpd/trunk/CHANGES
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/CHANGES?rev=399947&r1=399946&r2=399947&view=diff
==============================================================================
--- httpd/httpd/trunk/CHANGES [utf-8] (original)
+++ httpd/httpd/trunk/CHANGES [utf-8] Thu May 4 21:17:36 2006
@@ -2,6 +2,15 @@
Changes with Apache 2.3.0
[Remove entries to the current 2.0 and 2.2 section below, when backported]
+ *) core, mod_http: add optional 'scheme://' prefix to ServerName directive.
+ For 'https', mod_http returns "https" for the ap_hook_http_scheme and
+ DEFAULT_HTTPS_PORT for ap_hook_default_port. This fixes Redirect
+ responses to requests for directories without a trailing slash when
+ httpd runs behind a proxy or offload device that processes SSL. It
+ also enables support for Subversion in that configuration. This change is
+ completely backwards compatible and passes the perl-framework. Minor
+ mmn bump because I add a field to server_rec. [Sander Temme]
+
*) mod_charset_lite: Bypass translation when the source and dest charsets
are the same. [Jeff Trawick]
@@ -139,7 +148,7 @@
non-SSL request is processed for an SSL vhost (such as the
"HTTP request received on SSL port" error message when an 400
ErrorDocument is configured, or if using "SSLEngine optional").
- PR 37791. [R� Pl�e Orton]
+ PR 37791. [Rüdiger Plüm, Joe Orton]
*) SECURITY: CVE-2005-3352 (cve.mitre.org)
mod_imagemap: Escape untrusted referer header before outputting
Modified: httpd/httpd/trunk/include/ap_mmn.h
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/include/ap_mmn.h?rev=399947&r1=399946&r2=399947&view=diff
==============================================================================
--- httpd/httpd/trunk/include/ap_mmn.h (original)
+++ httpd/httpd/trunk/include/ap_mmn.h Thu May 4 21:17:36 2006
@@ -120,6 +120,7 @@
* 20060110.2 (2.3.0-dev) flush_packets and flush_wait members added to
* proxy_server (minor)
* 20060110.3 (2.3.0-dev) added inreslist member to proxy_conn_rec (minor)
+ * 20060110.4 (2.3.0-dev) Added server_scheme member to server_rec (minor)
*/
#define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */
@@ -127,7 +128,7 @@
#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20060110
#endif
-#define MODULE_MAGIC_NUMBER_MINOR 3 /* 0...n */
+#define MODULE_MAGIC_NUMBER_MINOR 4 /* 0...n */
/**
* Determine if the server's current MODULE_MAGIC_NUMBER is at least a
Modified: httpd/httpd/trunk/include/httpd.h
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/include/httpd.h?rev=399947&r1=399946&r2=399947&view=diff
==============================================================================
--- httpd/httpd/trunk/include/httpd.h (original)
+++ httpd/httpd/trunk/include/httpd.h Thu May 4 21:17:36 2006
@@ -1197,6 +1197,9 @@
int limit_req_fieldsize;
/** limit on number of request header fields */
int limit_req_fields;
+
+ /** The server request scheme for redirect responses */
+ const char *server_scheme;
};
typedef struct core_output_filter_ctx {
Modified: httpd/httpd/trunk/modules/http/http_core.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/modules/http/http_core.c?rev=399947&r1=399946&r2=399947&view=diff
==============================================================================
--- httpd/httpd/trunk/modules/http/http_core.c (original)
+++ httpd/httpd/trunk/modules/http/http_core.c Thu May 4 21:17:36 2006
@@ -99,11 +99,23 @@
static const char *http_scheme(const request_rec *r)
{
+ /*
+ * The http module shouldn't return anything other than
+ * "http" (the default) or "https".
+ */
+ if (r->server->server_scheme &&
+ (strcmp(r->server->server_scheme, "https") == 0))
+ return "https";
+
return "http";
}
static apr_port_t http_port(const request_rec *r)
{
+ if (r->server->server_scheme &&
+ (strcmp(r->server->server_scheme, "https") == 0))
+ return DEFAULT_HTTPS_PORT;
+
return DEFAULT_HTTP_PORT;
}
Modified: httpd/httpd/trunk/server/config.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/server/config.c?rev=399947&r1=399946&r2=399947&view=diff
==============================================================================
--- httpd/httpd/trunk/server/config.c (original)
+++ httpd/httpd/trunk/server/config.c Thu May 4 21:17:36 2006
@@ -1855,6 +1855,7 @@
s->process = main_server->process;
s->server_admin = NULL;
s->server_hostname = NULL;
+ s->server_scheme = NULL;
s->error_fname = NULL;
s->timeout = 0;
s->keep_alive_timeout = 0;
@@ -1940,6 +1941,7 @@
s->port = 0;
s->server_admin = DEFAULT_ADMIN;
s->server_hostname = NULL;
+ s->server_scheme = NULL;
s->error_fname = DEFAULT_ERRORLOG;
s->loglevel = DEFAULT_LOGLEVEL;
s->limit_req_line = DEFAULT_LIMIT_REQUEST_LINE;
Modified: httpd/httpd/trunk/server/core.c
URL: http://svn.apache.org/viewcvs/httpd/httpd/trunk/server/core.c?rev=399947&r1=399946&r2=399947&view=diff
==============================================================================
--- httpd/httpd/trunk/server/core.c (original)
+++ httpd/httpd/trunk/server/core.c Thu May 4 21:17:36 2006
@@ -2225,20 +2225,41 @@
return NULL;
}
+/*
+ * The ServerName directive takes one argument with format
+ * [scheme://]fully-qualified-domain-name[:port], for instance
+ * ServerName www.example.com
+ * ServerName www.example.com:80
+ * ServerName https://www.example.com:443
+ */
+
static const char *server_hostname_port(cmd_parms *cmd, void *dummy, const char *arg)
{
const char *err = ap_check_cmd_context(cmd, NOT_IN_DIR_LOC_FILE|NOT_IN_LIMIT);
- const char *portstr;
+ core_server_config *conf;
+ const char *portstr, *part;
+ char *scheme;
int port;
if (err != NULL) {
return err;
}
- portstr = ap_strchr_c(arg, ':');
+ part = ap_strstr_c(arg, "://");
+
+ if (part) {
+ scheme = apr_pstrndup(cmd->pool, arg, part - arg);
+ ap_str_tolower(scheme);
+ cmd->server->server_scheme = (const char *)scheme;
+ part += 3;
+ } else {
+ part = arg;
+ }
+
+ portstr = ap_strchr_c(part, ':');
if (portstr) {
- cmd->server->server_hostname = apr_pstrndup(cmd->pool, arg,
- portstr - arg);
+ cmd->server->server_hostname = apr_pstrndup(cmd->pool, part,
+ portstr - part);
portstr++;
port = atoi(portstr);
if (port <= 0 || port >= 65536) { /* 65536 == 1<<16 */
@@ -2248,7 +2269,7 @@
}
}
else {
- cmd->server->server_hostname = apr_pstrdup(cmd->pool, arg);
+ cmd->server->server_hostname = apr_pstrdup(cmd->pool, part);
port = 0;
}