mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
OK, might as well finish this... Allow ServerTokens Off
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@808895 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
4
CHANGES
4
CHANGES
@@ -2,6 +2,10 @@
|
|||||||
|
|
||||||
Changes with Apache 2.3.3
|
Changes with Apache 2.3.3
|
||||||
|
|
||||||
|
*) ServerTokens now accepts 'Off' which disables sending of
|
||||||
|
Server: header and sets SERVER_SOFTWARE to empty.
|
||||||
|
[Jim Jagielski]
|
||||||
|
|
||||||
*) mod_headers: generalise the envclause to support expression
|
*) mod_headers: generalise the envclause to support expression
|
||||||
evaluation with ap_expr parser [Nick Kew]
|
evaluation with ap_expr parser [Nick Kew]
|
||||||
|
|
||||||
|
@@ -2873,6 +2873,11 @@ header</description>
|
|||||||
information about compiled-in modules.</p>
|
information about compiled-in modules.</p>
|
||||||
|
|
||||||
<dl>
|
<dl>
|
||||||
|
<dt><code>ServerTokens Off</code></dt>
|
||||||
|
|
||||||
|
<dd>Server sends no <code>Server:</code> header
|
||||||
|
(and <code>SERVER_SOFTWARE</code> is blank)</dd>
|
||||||
|
|
||||||
<dt><code>ServerTokens Prod[uctOnly]</code></dt>
|
<dt><code>ServerTokens Prod[uctOnly]</code></dt>
|
||||||
|
|
||||||
<dd>Server sends (<em>e.g.</em>): <code>Server:
|
<dd>Server sends (<em>e.g.</em>): <code>Server:
|
||||||
|
@@ -874,6 +874,7 @@ static void basic_http_header(request_rec *r, apr_bucket_brigade *bb,
|
|||||||
{
|
{
|
||||||
char *date;
|
char *date;
|
||||||
const char *server;
|
const char *server;
|
||||||
|
const char *us = ap_get_server_banner();
|
||||||
header_struct h;
|
header_struct h;
|
||||||
struct iovec vec[4];
|
struct iovec vec[4];
|
||||||
|
|
||||||
@@ -930,19 +931,25 @@ static void basic_http_header(request_rec *r, apr_bucket_brigade *bb,
|
|||||||
if (server) {
|
if (server) {
|
||||||
form_header_field(&h, "Server", server);
|
form_header_field(&h, "Server", server);
|
||||||
} else {
|
} else {
|
||||||
|
if (*us) {
|
||||||
form_header_field(&h, "Server", ap_get_server_banner());
|
form_header_field(&h, "Server", ap_get_server_banner());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
|
date = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
|
||||||
ap_recent_rfc822_date(date, r->request_time);
|
ap_recent_rfc822_date(date, r->request_time);
|
||||||
form_header_field(&h, "Date", date);
|
form_header_field(&h, "Date", date);
|
||||||
|
if (*us) {
|
||||||
form_header_field(&h, "Server", ap_get_server_banner());
|
form_header_field(&h, "Server", ap_get_server_banner());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* unset so we don't send them again */
|
/* unset so we don't send them again */
|
||||||
apr_table_unset(r->headers_out, "Date"); /* Avoid bogosity */
|
apr_table_unset(r->headers_out, "Date"); /* Avoid bogosity */
|
||||||
|
if (*us) {
|
||||||
apr_table_unset(r->headers_out, "Server");
|
apr_table_unset(r->headers_out, "Server");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
AP_DECLARE(void) ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
|
AP_DECLARE(void) ap_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
|
||||||
|
@@ -229,7 +229,7 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker,
|
|||||||
"CONNECT %s HTTP/1.0" CRLF, r->uri);
|
"CONNECT %s HTTP/1.0" CRLF, r->uri);
|
||||||
apr_socket_send(sock, buffer, &nbytes);
|
apr_socket_send(sock, buffer, &nbytes);
|
||||||
nbytes = apr_snprintf(buffer, sizeof(buffer),
|
nbytes = apr_snprintf(buffer, sizeof(buffer),
|
||||||
"Proxy-agent: %s" CRLF CRLF, ap_get_server_banner());
|
"Proxy-agent: %s" CRLF CRLF, ap_get_server_description());
|
||||||
apr_socket_send(sock, buffer, &nbytes);
|
apr_socket_send(sock, buffer, &nbytes);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@@ -1774,7 +1774,7 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker,
|
|||||||
|
|
||||||
apr_rfc822_date(dates, r->request_time);
|
apr_rfc822_date(dates, r->request_time);
|
||||||
apr_table_setn(r->headers_out, "Date", dates);
|
apr_table_setn(r->headers_out, "Date", dates);
|
||||||
apr_table_setn(r->headers_out, "Server", ap_get_server_banner());
|
apr_table_setn(r->headers_out, "Server", ap_get_server_description());
|
||||||
|
|
||||||
/* set content-type */
|
/* set content-type */
|
||||||
if (dirlisting) {
|
if (dirlisting) {
|
||||||
|
@@ -2684,7 +2684,8 @@ enum server_token_type {
|
|||||||
SrvTk_MINIMAL, /* eg: Apache/2.0.41 */
|
SrvTk_MINIMAL, /* eg: Apache/2.0.41 */
|
||||||
SrvTk_OS, /* eg: Apache/2.0.41 (UNIX) */
|
SrvTk_OS, /* eg: Apache/2.0.41 (UNIX) */
|
||||||
SrvTk_FULL, /* eg: Apache/2.0.41 (UNIX) PHP/4.2.2 FooBar/1.2b */
|
SrvTk_FULL, /* eg: Apache/2.0.41 (UNIX) PHP/4.2.2 FooBar/1.2b */
|
||||||
SrvTk_PRODUCT_ONLY /* eg: Apache */
|
SrvTk_PRODUCT_ONLY, /* eg: Apache */
|
||||||
|
SrvTk_OFF /* eg: <blank> */
|
||||||
};
|
};
|
||||||
static enum server_token_type ap_server_tokens = SrvTk_FULL;
|
static enum server_token_type ap_server_tokens = SrvTk_FULL;
|
||||||
|
|
||||||
@@ -2748,7 +2749,10 @@ AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char *compone
|
|||||||
*/
|
*/
|
||||||
static void set_banner(apr_pool_t *pconf)
|
static void set_banner(apr_pool_t *pconf)
|
||||||
{
|
{
|
||||||
if (ap_server_tokens == SrvTk_PRODUCT_ONLY) {
|
if (ap_server_tokens == SrvTk_OFF) {
|
||||||
|
ap_add_version_component(pconf, "");
|
||||||
|
}
|
||||||
|
else if (ap_server_tokens == SrvTk_PRODUCT_ONLY) {
|
||||||
ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT);
|
ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT);
|
||||||
}
|
}
|
||||||
else if (ap_server_tokens == SrvTk_MINIMAL) {
|
else if (ap_server_tokens == SrvTk_MINIMAL) {
|
||||||
@@ -2783,7 +2787,10 @@ static const char *set_serv_tokens(cmd_parms *cmd, void *dummy,
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!strcasecmp(arg, "OS")) {
|
if (!strcasecmp(arg, "Off")) {
|
||||||
|
ap_server_tokens = SrvTk_OFF;
|
||||||
|
}
|
||||||
|
else if (!strcasecmp(arg, "OS")) {
|
||||||
ap_server_tokens = SrvTk_OS;
|
ap_server_tokens = SrvTk_OS;
|
||||||
}
|
}
|
||||||
else if (!strcasecmp(arg, "Min") || !strcasecmp(arg, "Minimal")) {
|
else if (!strcasecmp(arg, "Min") || !strcasecmp(arg, "Minimal")) {
|
||||||
@@ -3304,7 +3311,7 @@ AP_INIT_TAKE1("LogLevel", set_loglevel, NULL, RSRC_CONF,
|
|||||||
AP_INIT_TAKE1("NameVirtualHost", ap_set_name_virtual_host, NULL, RSRC_CONF,
|
AP_INIT_TAKE1("NameVirtualHost", ap_set_name_virtual_host, NULL, RSRC_CONF,
|
||||||
"A numeric IP address:port, or the name of a host"),
|
"A numeric IP address:port, or the name of a host"),
|
||||||
AP_INIT_TAKE1("ServerTokens", set_serv_tokens, NULL, RSRC_CONF,
|
AP_INIT_TAKE1("ServerTokens", set_serv_tokens, NULL, RSRC_CONF,
|
||||||
"Determine tokens displayed in the Server: header - Min(imal), OS or Full"),
|
"Determine tokens displayed in the Server: header - Min(imal), Major, Minor, Prod, OS, Off or Full"),
|
||||||
AP_INIT_TAKE1("LimitRequestLine", set_limit_req_line, NULL, RSRC_CONF,
|
AP_INIT_TAKE1("LimitRequestLine", set_limit_req_line, NULL, RSRC_CONF,
|
||||||
"Limit on maximum size of an HTTP request line"),
|
"Limit on maximum size of an HTTP request line"),
|
||||||
AP_INIT_TAKE1("LimitRequestFieldsize", set_limit_req_fieldsize, NULL,
|
AP_INIT_TAKE1("LimitRequestFieldsize", set_limit_req_fieldsize, NULL,
|
||||||
|
@@ -553,7 +553,7 @@ static apr_status_t dummy_connection(ap_pod_t *pod)
|
|||||||
* requests in their logs.
|
* requests in their logs.
|
||||||
*/
|
*/
|
||||||
srequest = apr_pstrcat(p, "OPTIONS * HTTP/1.0\r\nUser-Agent: ",
|
srequest = apr_pstrcat(p, "OPTIONS * HTTP/1.0\r\nUser-Agent: ",
|
||||||
ap_get_server_banner(),
|
ap_get_server_description(),
|
||||||
" (internal dummy connection)\r\n\r\n", NULL);
|
" (internal dummy connection)\r\n\r\n", NULL);
|
||||||
|
|
||||||
/* Since some operating systems support buffering of data or entire
|
/* Since some operating systems support buffering of data or entire
|
||||||
|
Reference in New Issue
Block a user