From: Jeff Trawick Date: Fri, 15 Sep 2006 13:19:25 +0000 (+0000) Subject: merge from trunk (but preserve ap_get_server_version()): X-Git-Tag: 2.2.4~161 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=492e695c40e714d1973a7bb0569a584f4f2373dc;p=thirdparty%2Fapache%2Fhttpd.git merge from trunk (but preserve ap_get_server_version()): *) The full server version information is now included in the error log at startup as well as server status reports, irrespective of the setting of the ServerTokens directive. ap_get_server_version() is now deprecated, and is replaced by ap_get_server_banner() and ap_get_server_description(). Reviewed by: rpluem, jim git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.2.x@446606 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index ab495254a77..ad25eee0862 100644 --- a/CHANGES +++ b/CHANGES @@ -1,6 +1,12 @@ -*- coding: utf-8 -*- Changes with Apache 2.2.4 + *) The full server version information is now included in the error log at + startup as well as server status reports, irrespective of the setting + of the ServerTokens directive. ap_get_server_version() is now + deprecated, and is replaced by ap_get_server_banner() and + ap_get_server_description(). [Jeff Trawick] + *) mod_proxy_balancer: Workers can now be defined as part of a balancer cluster "set" in which members of a lower-numbered set are preferred over higher numbered ones. [Jim Jagielski] diff --git a/STATUS b/STATUS index 17d1c415475..b1276a4dc32 100644 --- a/STATUS +++ b/STATUS @@ -169,10 +169,6 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK: (proxy_interpolatem, proxy_vars) which does not belong to the pingpong patch. * full server version information in the error log at startup as well as server - status reports, regardless of ServerTokens - http://people.apache.org/~trawick/banner-2.2.x-rev2.txt - +1: trawick, rpluem, jim - * mod_proxy_balancer: Extract stickysession routing information contained as parameter in the URL correctly. PR: 40400 diff --git a/include/ap_mmn.h b/include/ap_mmn.h index c323093e2fd..9d8d89cd2c3 100644 --- a/include/ap_mmn.h +++ b/include/ap_mmn.h @@ -111,6 +111,8 @@ * proxy_server (minor) * 20051115.2 (2.2.2) added inreslist member to proxy_conn_rec (minor) * 20051115.3 (2.2.3) Added server_scheme member to server_rec (minor) + * 20051115.4 (2.2.4) Added ap_get_server_banner() and + * ap_get_server_description() (minor) */ #define MODULE_MAGIC_COOKIE 0x41503232UL /* "AP22" */ @@ -118,7 +120,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 20051115 #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 diff --git a/include/httpd.h b/include/httpd.h index 35124541a0d..76ce0de2b9d 100644 --- a/include/httpd.h +++ b/include/httpd.h @@ -420,13 +420,33 @@ typedef struct { AP_DECLARE(void) ap_get_server_revision(ap_version_t *version); /** - * Get the server version string + * Get the server version string, as controlled by the ServerTokens directive * @return The server version string + * @deprecated @see ap_get_server_banner() and ap_get_server_description() */ AP_DECLARE(const char *) ap_get_server_version(void); /** - * Add a component to the version string + * Get the server banner in a form suitable for sending over the + * network, with the level of information controlled by the + * ServerTokens directive. + * @return The server banner + */ +AP_DECLARE(const char *) ap_get_server_banner(void); + +/** + * Get the server description in a form suitable for local displays, + * status reports, or logging. This includes the detailed server + * version and information about some modules. It is not affected + * by the ServerTokens directive. + * @return The server description + */ +AP_DECLARE(const char *) ap_get_server_description(void); + +/** + * Add a component to the server description and banner strings + * (The latter is returned by the deprecated function + * ap_get_server_version().) * @param pconf The pool to allocate the component from * @param component The string to add */ diff --git a/modules/arch/netware/mod_nw_ssl.c b/modules/arch/netware/mod_nw_ssl.c index 535fbf1889c..e294763a415 100644 --- a/modules/arch/netware/mod_nw_ssl.c +++ b/modules/arch/netware/mod_nw_ssl.c @@ -1074,7 +1074,7 @@ char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, /* XXX-Can't get specific SSL info from NetWare */ /*result = ssl_var_lookup_ssl_version(p, var+12);*/ else if (strcEQ(var, "SERVER_SOFTWARE")) - result = ap_get_server_version(); + result = ap_get_server_banner(); else if (strcEQ(var, "API_VERSION")) { result = apr_itoa(p, MODULE_MAGIC_NUMBER); resdup = FALSE; diff --git a/modules/experimental/mod_example.c b/modules/experimental/mod_example.c index 1b343fb0584..a351e6bfd56 100644 --- a/modules/experimental/mod_example.c +++ b/modules/experimental/mod_example.c @@ -546,7 +546,7 @@ static int x_handler(request_rec *r) ap_rputs(" \n", r); ap_rputs("

\n", r); ap_rprintf(r, " Apache HTTP Server version: \"%s\"\n", - ap_get_server_version()); + ap_get_server_banner()); ap_rputs("
\n", r); ap_rprintf(r, " Server built: \"%s\"\n", ap_get_server_built()); ap_rputs("

\n", r);; diff --git a/modules/generators/mod_info.c b/modules/generators/mod_info.c index ad2b57f32c3..7386bb005f5 100644 --- a/modules/generators/mod_info.c +++ b/modules/generators/mod_info.c @@ -346,7 +346,7 @@ static int show_server_settings(request_rec * r) ap_rprintf(r, "
Server Version: " "%s
\n", - ap_get_server_version()); + ap_get_server_description()); ap_rprintf(r, "
Server Built: " "%s
\n", diff --git a/modules/generators/mod_status.c b/modules/generators/mod_status.c index fa4386ee777..7fb0f332f7a 100644 --- a/modules/generators/mod_status.c +++ b/modules/generators/mod_status.c @@ -397,7 +397,7 @@ static int status_handler(request_rec *r) ap_rputs("

Apache Server Status for ", r); ap_rvputs(r, ap_get_server_name(r), "

\n\n", NULL); ap_rvputs(r, "
Server Version: ", - ap_get_server_version(), "
\n", NULL); + ap_get_server_description(), "\n", NULL); ap_rvputs(r, "
Server Built: ", ap_get_server_built(), "\n

\n", NULL); ap_rvputs(r, "
Current Time: ", diff --git a/modules/http/http_filters.c b/modules/http/http_filters.c index 7e28e47114f..6df4edf627b 100644 --- a/modules/http/http_filters.c +++ b/modules/http/http_filters.c @@ -737,7 +737,7 @@ static void basic_http_header(request_rec *r, apr_bucket_brigade *bb, } } else { - form_header_field(&h, "Server", ap_get_server_version()); + form_header_field(&h, "Server", ap_get_server_banner()); } /* unset so we don't send them again */ diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c index 58f348a6223..6bd5a95f889 100644 --- a/modules/mappers/mod_rewrite.c +++ b/modules/mappers/mod_rewrite.c @@ -2003,7 +2003,7 @@ static char *lookup_variable(char *var, rewrite_ctx *ctx) case 'S': if (!strcmp(var, "SERVER_SOFTWARE")) { - result = ap_get_server_version(); + result = ap_get_server_banner(); } break; } diff --git a/modules/proxy/mod_proxy_balancer.c b/modules/proxy/mod_proxy_balancer.c index 175b49f0060..32cbe4e4f16 100644 --- a/modules/proxy/mod_proxy_balancer.c +++ b/modules/proxy/mod_proxy_balancer.c @@ -648,7 +648,7 @@ static int balancer_handler(request_rec *r) ap_rputs("

Load Balancer Manager for ", r); ap_rvputs(r, ap_get_server_name(r), "

\n\n", NULL); ap_rvputs(r, "
Server Version: ", - ap_get_server_version(), "
\n", NULL); + ap_get_server_description(), "
\n", NULL); ap_rvputs(r, "
Server Built: ", ap_get_server_built(), "\n
\n", NULL); balancer = (proxy_balancer *)conf->balancers->elts; diff --git a/modules/proxy/mod_proxy_connect.c b/modules/proxy/mod_proxy_connect.c index d0519dde7c8..eb9b7de77a5 100644 --- a/modules/proxy/mod_proxy_connect.c +++ b/modules/proxy/mod_proxy_connect.c @@ -224,7 +224,7 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, "CONNECT %s HTTP/1.0" CRLF, r->uri); apr_socket_send(sock, buffer, &nbytes); nbytes = apr_snprintf(buffer, sizeof(buffer), - "Proxy-agent: %s" CRLF CRLF, ap_get_server_version()); + "Proxy-agent: %s" CRLF CRLF, ap_get_server_banner()); apr_socket_send(sock, buffer, &nbytes); } else { @@ -235,7 +235,7 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, ap_xlate_proto_to_ascii(buffer, nbytes); apr_socket_send(client_socket, buffer, &nbytes); nbytes = apr_snprintf(buffer, sizeof(buffer), - "Proxy-agent: %s" CRLF CRLF, ap_get_server_version()); + "Proxy-agent: %s" CRLF CRLF, ap_get_server_banner()); ap_xlate_proto_to_ascii(buffer, nbytes); apr_socket_send(client_socket, buffer, &nbytes); #if 0 @@ -244,7 +244,7 @@ static int proxy_connect_handler(request_rec *r, proxy_worker *worker, */ r->status = HTTP_OK; r->header_only = 1; - apr_table_set(r->headers_out, "Proxy-agent: %s", ap_get_server_version()); + apr_table_set(r->headers_out, "Proxy-agent: %s", ap_get_server_banner()); ap_rflush(r); #endif } diff --git a/modules/proxy/mod_proxy_ftp.c b/modules/proxy/mod_proxy_ftp.c index c56fca4ef92..63775f3b806 100644 --- a/modules/proxy/mod_proxy_ftp.c +++ b/modules/proxy/mod_proxy_ftp.c @@ -1662,7 +1662,7 @@ static int proxy_ftp_handler(request_rec *r, proxy_worker *worker, apr_rfc822_date(dates, r->request_time); apr_table_setn(r->headers_out, "Date", dates); - apr_table_setn(r->headers_out, "Server", ap_get_server_version()); + apr_table_setn(r->headers_out, "Server", ap_get_server_banner()); /* set content-type */ if (dirlisting) { diff --git a/modules/ssl/ssl_engine_vars.c b/modules/ssl/ssl_engine_vars.c index 03fa6c23911..71f93e76a91 100644 --- a/modules/ssl/ssl_engine_vars.c +++ b/modules/ssl/ssl_engine_vars.c @@ -192,7 +192,7 @@ char *ssl_var_lookup(apr_pool_t *p, server_rec *s, conn_rec *c, request_rec *r, if (strlen(var) > 12 && strcEQn(var, "SSL_VERSION_", 12)) result = ssl_var_lookup_ssl_version(p, var+12); else if (strcEQ(var, "SERVER_SOFTWARE")) - result = ap_get_server_version(); + result = ap_get_server_banner(); else if (strcEQ(var, "API_VERSION")) { result = apr_itoa(p, MODULE_MAGIC_NUMBER); resdup = FALSE; diff --git a/server/core.c b/server/core.c index 3cf40444bd1..69cd3dcbb8c 100644 --- a/server/core.c +++ b/server/core.c @@ -2661,7 +2661,7 @@ AP_DECLARE(const char *) ap_psignature(const char *prefix, request_rec *r) if (conf->server_signature == srv_sig_withmail) { return apr_pstrcat(r->pool, prefix, "
", - ap_get_server_version(), + ap_get_server_banner(), " Server at server->server_admin) ? "" : "mailto:", ap_escape_html(r->pool, r->server->server_admin), @@ -2671,7 +2671,7 @@ AP_DECLARE(const char *) ap_psignature(const char *prefix, request_rec *r) "
\n", NULL); } - return apr_pstrcat(r->pool, prefix, "
", ap_get_server_version(), + return apr_pstrcat(r->pool, prefix, "
", ap_get_server_banner(), " Server at ", ap_escape_html(r->pool, ap_get_server_name(r)), " Port ", sport, @@ -2699,8 +2699,9 @@ static const char *set_authname(cmd_parms *cmd, void *mconfig, * string. */ -static char *server_version = NULL; -static int version_locked = 0; +static char *server_banner = NULL; +static int banner_locked = 0; +static char *server_description = NULL; enum server_token_type { SrvTk_MAJOR, /* eg: Apache/2 */ @@ -2712,11 +2713,12 @@ enum server_token_type { }; static enum server_token_type ap_server_tokens = SrvTk_FULL; -static apr_status_t reset_version(void *dummy) +static apr_status_t reset_banner(void *dummy) { - version_locked = 0; + banner_locked = 0; ap_server_tokens = SrvTk_FULL; - server_version = NULL; + server_banner = NULL; + server_description = NULL; return APR_SUCCESS; } @@ -2728,40 +2730,56 @@ AP_DECLARE(void) ap_get_server_revision(ap_version_t *version) version->add_string = AP_SERVER_ADD_STRING; } +AP_DECLARE(const char *) ap_get_server_description(void) +{ + return server_description ? server_description : + AP_SERVER_BASEVERSION " (" PLATFORM ")"; +} + +AP_DECLARE(const char *) ap_get_server_banner(void) +{ + return server_banner ? server_banner : AP_SERVER_BASEVERSION; +} + +/* ap_get_server_version() is deprecated. ap_get_server_banner() + * provides the same semantics. + */ AP_DECLARE(const char *) ap_get_server_version(void) { - return (server_version ? server_version : AP_SERVER_BASEVERSION); + return ap_get_server_banner(); } AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char *component) { - if (! version_locked) { + if (! banner_locked) { /* * If the version string is null, register our cleanup to reset the * pointer on pool destruction. We also know that, if NULL, * we are adding the original SERVER_BASEVERSION string. */ - if (server_version == NULL) { - apr_pool_cleanup_register(pconf, NULL, reset_version, + if (server_banner == NULL) { + apr_pool_cleanup_register(pconf, NULL, reset_banner, apr_pool_cleanup_null); - server_version = apr_pstrdup(pconf, component); + server_banner = apr_pstrdup(pconf, component); } else { /* * Tack the given component identifier to the end of * the existing string. */ - server_version = apr_pstrcat(pconf, server_version, " ", - component, NULL); + server_banner = apr_pstrcat(pconf, server_banner, " ", + component, NULL); } } + server_description = apr_pstrcat(pconf, server_description, " ", + component, NULL); } /* - * This routine adds the real server base identity to the version string, + * This routine adds the real server base identity to the banner string, * and then locks out changes until the next reconfig. */ -static void ap_set_version(apr_pool_t *pconf) +static void set_banner(apr_pool_t *pconf) { if (ap_server_tokens == SrvTk_PRODUCT_ONLY) { ap_add_version_component(pconf, AP_SERVER_BASEPRODUCT); @@ -2780,12 +2798,13 @@ static void ap_set_version(apr_pool_t *pconf) } /* - * Lock the server_version string if we're not displaying + * Lock the server_banner string if we're not displaying * the full set of tokens */ if (ap_server_tokens != SrvTk_FULL) { - version_locked++; + banner_locked++; } + server_description = AP_SERVER_BASEVERSION " (" PLATFORM ")"; } static const char *set_serv_tokens(cmd_parms *cmd, void *dummy, @@ -3756,7 +3775,7 @@ static int core_post_config(apr_pool_t *pconf, apr_pool_t *plog, apr_pool_t *pte logio_add_bytes_out = APR_RETRIEVE_OPTIONAL_FN(ap_logio_add_bytes_out); ident_lookup = APR_RETRIEVE_OPTIONAL_FN(ap_ident_lookup); - ap_set_version(pconf); + set_banner(pconf); ap_setup_make_content_type(pconf); return OK; } diff --git a/server/main.c b/server/main.c index 8b9fc816833..29557f23748 100644 --- a/server/main.c +++ b/server/main.c @@ -88,7 +88,7 @@ static void show_mpm_settings(void) static void show_compile_settings(void) { - printf("Server version: %s\n", ap_get_server_version()); + printf("Server version: %s\n", ap_get_server_description()); printf("Server built: %s\n", ap_get_server_built()); printf("Server's Module Magic Number: %u:%u\n", MODULE_MAGIC_NUMBER_MAJOR, MODULE_MAGIC_NUMBER_MINOR); @@ -549,7 +549,7 @@ int main(int argc, const char * const argv[]) break; case 'v': - printf("Server version: %s\n", ap_get_server_version()); + printf("Server version: %s\n", ap_get_server_description()); printf("Server built: %s\n", ap_get_server_built()); destroy_and_exit_process(process, 0); diff --git a/server/mpm/beos/beos.c b/server/mpm/beos/beos.c index b7e4671b068..70515ee0ec9 100644 --- a/server/mpm/beos/beos.c +++ b/server/mpm/beos/beos.c @@ -935,7 +935,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s) */ ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf, "%s configured -- resuming normal operations", - ap_get_server_version()); + ap_get_server_description()); ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf, "Server built: %s", ap_get_server_built()); diff --git a/server/mpm/experimental/event/event.c b/server/mpm/experimental/event/event.c index c47e857d9af..e105c25e97d 100644 --- a/server/mpm/experimental/event/event.c +++ b/server/mpm/experimental/event/event.c @@ -1923,7 +1923,7 @@ int ap_mpm_run(apr_pool_t * _pconf, apr_pool_t * plog, server_rec * s) ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf, "%s configured -- resuming normal operations", - ap_get_server_version()); + ap_get_server_description()); ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf, "Server built: %s", ap_get_server_built()); diff --git a/server/mpm/mpmt_os2/mpmt_os2.c b/server/mpm/mpmt_os2/mpmt_os2.c index 8fb10ce9c38..b3a83c43b23 100644 --- a/server/mpm/mpmt_os2/mpmt_os2.c +++ b/server/mpm/mpmt_os2/mpmt_os2.c @@ -207,7 +207,7 @@ static char master_main() int listener_num, num_listeners, slot; ULONG rc; - printf("%s \n", ap_get_server_version()); + printf("%s \n", ap_get_server_description()); set_signals(); if (ap_setup_listeners(ap_server_conf) < 1) { @@ -270,7 +270,7 @@ static char master_main() ap_scoreboard_image->global->restart_time = apr_time_now(); ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf, "%s configured -- resuming normal operations", - ap_get_server_version()); + ap_get_server_description()); ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf, "Server built: %s", ap_get_server_built()); #ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH diff --git a/server/mpm/netware/mpm_netware.c b/server/mpm/netware/mpm_netware.c index dd4cb3592a4..a6f896335f4 100644 --- a/server/mpm/netware/mpm_netware.c +++ b/server/mpm/netware/mpm_netware.c @@ -723,7 +723,7 @@ static void display_settings () request_count = 0; ClearScreen (getscreenhandle()); - printf("%s \n", ap_get_server_version()); + printf("%s \n", ap_get_server_description()); for (i=0;i 4) diff --git a/server/mpm/worker/worker.c b/server/mpm/worker/worker.c index b71cd23771d..a9d822f5411 100644 --- a/server/mpm/worker/worker.c +++ b/server/mpm/worker/worker.c @@ -1733,7 +1733,7 @@ int ap_mpm_run(apr_pool_t *_pconf, apr_pool_t *plog, server_rec *s) ap_log_error(APLOG_MARK, APLOG_NOTICE, 0, ap_server_conf, "%s configured -- resuming normal operations", - ap_get_server_version()); + ap_get_server_description()); ap_log_error(APLOG_MARK, APLOG_INFO, 0, ap_server_conf, "Server built: %s", ap_get_server_built()); #ifdef AP_MPM_WANT_SET_ACCEPT_LOCK_MECH diff --git a/server/mpm_common.c b/server/mpm_common.c index ba60155d880..26a74891031 100644 --- a/server/mpm_common.c +++ b/server/mpm_common.c @@ -635,7 +635,7 @@ static apr_status_t dummy_connection(ap_pod_t *pod) * requests in their logs. */ srequest = apr_pstrcat(p, "GET / HTTP/1.0\r\nUser-Agent: ", - ap_get_server_version(), + ap_get_server_banner(), " (internal dummy connection)\r\n\r\n", NULL); /* Since some operating systems support buffering of data or entire diff --git a/server/util_script.c b/server/util_script.c index 957413a4ce6..09c8dd414d7 100644 --- a/server/util_script.c +++ b/server/util_script.c @@ -223,7 +223,7 @@ AP_DECLARE(void) ap_add_common_vars(request_rec *r) #endif apr_table_addn(e, "SERVER_SIGNATURE", ap_psignature("", r)); - apr_table_addn(e, "SERVER_SOFTWARE", ap_get_server_version()); + apr_table_addn(e, "SERVER_SOFTWARE", ap_get_server_banner()); apr_table_addn(e, "SERVER_NAME", ap_escape_html(r->pool, ap_get_server_name(r))); apr_table_addn(e, "SERVER_ADDR", r->connection->local_ip); /* Apache */