Jeff Trawick wrote:
> On 8/11/06, Sebastian Nohn <[EMAIL PROTECTED]> wrote:
>
>> And now patches against trunk are available too (attached to this mail).
>
> A little more work is required. With this trunk patch and
> Rename existing ap_get_server_version() to ap_get_server_banner()
>
> Change code that builds strings to send on the wire to call
> ap_get_server_banner() instead.
>
> ap_get_server_version() always spits out something like
> "Apache/2.2.4-dev" (AP_SERVER_BASEVERSION AFAICT)
Please find attached a patch which respects and includes your patch from
<[EMAIL PROTECTED]>.
However, because your patch is not yet fully complete, as
ap_get_server_description() and ap_get_server_banner() both call
get_server_version(), this patch with ServerTokens Off still logs "" at
Server startup.
Best regards,
Sebastian Nohn
--
Sebastian Nohn · Wolfstraße 29 · 53111 Bonn · Germany
+49-228-4097103 · http://nohn.net/ · [EMAIL PROTECTED]
http://pgpkeys.pca.dfn.de:11371/pks/lookup?op=get&fingerprint=on&search=0xD47D55E0
Index: server/mpm/winnt/service.c
===================================================================
--- server/mpm/winnt/service.c (revision 438815)
+++ server/mpm/winnt/service.c (working copy)
@@ -436,7 +436,7 @@
/* Time to fix up the description, upon each successful restart
*/
- full_description = ap_get_server_version();
+ full_description = ap_get_server_description();
if ((osver.dwPlatformId == VER_PLATFORM_WIN32_NT)
&& (osver.dwMajorVersion > 4)
Index: server/mpm/winnt/mpm_winnt.c
===================================================================
--- server/mpm/winnt/mpm_winnt.c (revision 438815)
+++ server/mpm/winnt/mpm_winnt.c (working copy)
@@ -1705,7 +1705,7 @@
/* A real-honest to goodness parent */
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_NOTICE, 0, ap_server_conf,
"Server built: %s", ap_get_server_built());
Index: server/mpm/mpmt_os2/mpmt_os2.c
===================================================================
--- server/mpm/mpmt_os2/mpmt_os2.c (revision 438815)
+++ server/mpm/mpmt_os2/mpmt_os2.c (working copy)
@@ -207,7 +207,7 @@
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 @@
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
Index: server/mpm/netware/mpm_netware.c
===================================================================
--- server/mpm/netware/mpm_netware.c (revision 438815)
+++ server/mpm/netware/mpm_netware.c (working copy)
@@ -723,7 +723,7 @@
request_count = 0;
ClearScreen (getscreenhandle());
- printf("%s \n", ap_get_server_version());
+ printf("%s \n", ap_get_server_description());
for (i=0;i<SERVER_NUM_STATUS;i++) {
status_array[i] = 0;
@@ -793,7 +793,7 @@
ap_listen_rec *lr;
module **m;
- printf("%s\n", ap_get_server_version());
+ printf("%s\n", ap_get_server_description());
if (ap_my_addrspace && (ap_my_addrspace[0] != 'O') && (ap_my_addrspace[1]
!= 'S'))
printf(" Running in address space %s\n", ap_my_addrspace);
@@ -899,7 +899,7 @@
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
@@ -1204,7 +1204,7 @@
restart();
}
else if (!strnicmp("VERSION",&szcommandLine[iCommandLen],3)) {
- 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());
}
else if (!strnicmp("MODULES",&szcommandLine[iCommandLen],3)) {
Index: server/mpm/beos/beos.c
===================================================================
--- server/mpm/beos/beos.c (revision 438815)
+++ server/mpm/beos/beos.c (working copy)
@@ -935,7 +935,7 @@
*/
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());
Index: server/mpm/prefork/prefork.c
===================================================================
--- server/mpm/prefork/prefork.c (revision 438815)
+++ server/mpm/prefork/prefork.c (working copy)
@@ -976,7 +976,7 @@
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
Index: server/mpm/worker/worker.c
===================================================================
--- server/mpm/worker/worker.c (revision 438815)
+++ server/mpm/worker/worker.c (working copy)
@@ -1737,7 +1737,7 @@
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
Index: server/mpm/experimental/event/event.c
===================================================================
--- server/mpm/experimental/event/event.c (revision 438815)
+++ server/mpm/experimental/event/event.c (working copy)
@@ -1988,7 +1988,7 @@
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());
Index: server/mpm/experimental/threadpool/threadpool.c
===================================================================
--- server/mpm/experimental/threadpool/threadpool.c (revision 438815)
+++ server/mpm/experimental/threadpool/threadpool.c (working copy)
@@ -1778,7 +1778,7 @@
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
Index: server/mpm/experimental/perchild/perchild.c
===================================================================
--- server/mpm/experimental/perchild/perchild.c (revision 438815)
+++ server/mpm/experimental/perchild/perchild.c (working copy)
@@ -1314,7 +1314,7 @@
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
Index: server/mpm/experimental/leader/leader.c
===================================================================
--- server/mpm/experimental/leader/leader.c (revision 438815)
+++ server/mpm/experimental/leader/leader.c (working copy)
@@ -1529,7 +1529,7 @@
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
Index: server/core.c
===================================================================
--- server/core.c (revision 438815)
+++ server/core.c (working copy)
@@ -2580,7 +2580,7 @@
if (conf->server_signature == srv_sig_withmail) {
return apr_pstrcat(r->pool, prefix, "<address>",
- ap_get_server_version(),
+ ap_get_server_banner(),
" Server at <a href=\"",
ap_is_url(r->server->server_admin) ? "" : "mailto:",
ap_escape_html(r->pool, r->server->server_admin),
@@ -2590,7 +2590,7 @@
"</address>\n", NULL);
}
- return apr_pstrcat(r->pool, prefix, "<address>", ap_get_server_version(),
+ return apr_pstrcat(r->pool, prefix, "<address>", ap_get_server_banner(),
" Server at ",
ap_escape_html(r->pool, ap_get_server_name(r)),
" Port ", sport,
@@ -2614,7 +2614,8 @@
SrvTk_MINIMAL, /* eg: Apache/2.0.41 */
SrvTk_OS, /* eg: Apache/2.0.41 (UNIX) */
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: Nothing at all */
};
static enum server_token_type ap_server_tokens = SrvTk_FULL;
@@ -2634,11 +2635,21 @@
version->add_string = AP_SERVER_ADD_STRING;
}
-AP_DECLARE(const char *) ap_get_server_version(void)
+static const char *get_server_version(void)
{
return (server_version ? server_version : AP_SERVER_BASEVERSION);
}
+AP_DECLARE(const char *) ap_get_server_description(void)
+{
+ return get_server_version();
+}
+
+AP_DECLARE(const char *) ap_get_server_banner(void)
+{
+ return get_server_version();
+}
+
AP_DECLARE(void) ap_add_version_component(apr_pool_t *pconf, const char
*component)
{
if (! version_locked) {
@@ -2669,7 +2680,10 @@
*/
static void ap_set_version(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);
}
else if (ap_server_tokens == SrvTk_MINIMAL) {
@@ -2718,6 +2732,9 @@
else if (!strcasecmp(arg, "Prod") || !strcasecmp(arg, "ProductOnly")) {
ap_server_tokens = SrvTk_PRODUCT_ONLY;
}
+ else if (!strcasecmp(arg, "Off") ) {
+ ap_server_tokens = SrvTk_OFF;
+ }
else {
ap_server_tokens = SrvTk_FULL;
}
Index: server/util_script.c
===================================================================
--- server/util_script.c (revision 438815)
+++ server/util_script.c (working copy)
@@ -223,7 +223,7 @@
#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 */
Index: server/mpm_common.c
===================================================================
--- server/mpm_common.c (revision 438815)
+++ server/mpm_common.c (working copy)
@@ -635,7 +635,7 @@
* 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
Index: server/main.c
===================================================================
--- server/main.c (revision 438815)
+++ server/main.c (working copy)
@@ -92,7 +92,7 @@
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);
@@ -569,7 +569,7 @@
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);
Index: modules/http/http_filters.c
===================================================================
--- modules/http/http_filters.c (revision 438815)
+++ modules/http/http_filters.c (working copy)
@@ -735,11 +735,14 @@
if (server) {
form_header_field(&h, "Server", server);
} else {
- form_header_field(&h, "Server", ap_get_server_version());
+ form_header_field(&h, "Server", ap_get_server_banner());
}
}
else {
- form_header_field(&h, "Server", ap_get_server_version());
+ char *server_version = ap_get_server_banner();
+ if (server_version[0] != '\0') {
+ form_header_field(&h, "Server", ap_get_server_banner());
+ }
}
/* unset so we don't send them again */
Index: modules/proxy/mod_proxy_balancer.c
===================================================================
--- modules/proxy/mod_proxy_balancer.c (revision 438815)
+++ modules/proxy/mod_proxy_balancer.c (working copy)
@@ -669,7 +669,7 @@
ap_rputs("<body><h1>Load Balancer Manager for ", r);
ap_rvputs(r, ap_get_server_name(r), "</h1>\n\n", NULL);
ap_rvputs(r, "<dl><dt>Server Version: ",
- ap_get_server_version(), "</dt>\n", NULL);
+ ap_get_server_banner(), "</dt>\n", NULL);
ap_rvputs(r, "<dt>Server Built: ",
ap_get_server_built(), "\n</dt></dl>\n", NULL);
balancer = (proxy_balancer *)conf->balancers->elts;
Index: modules/proxy/mod_proxy_connect.c
===================================================================
--- modules/proxy/mod_proxy_connect.c (revision 438815)
+++ modules/proxy/mod_proxy_connect.c (working copy)
@@ -224,7 +224,7 @@
"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 @@
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 @@
*/
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
}
Index: modules/proxy/mod_proxy_ftp.c
===================================================================
--- modules/proxy/mod_proxy_ftp.c (revision 438815)
+++ modules/proxy/mod_proxy_ftp.c (working copy)
@@ -1662,7 +1662,7 @@
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) {
Index: modules/experimental/mod_example.c
===================================================================
--- modules/experimental/mod_example.c (revision 438815)
+++ modules/experimental/mod_example.c (working copy)
@@ -546,7 +546,7 @@
ap_rputs(" </H1>\n", r);
ap_rputs(" <P>\n", r);
ap_rprintf(r, " Apache HTTP Server version: \"%s\"\n",
- ap_get_server_version());
+ ap_get_server_banner());
ap_rputs(" <BR>\n", r);
ap_rprintf(r, " Server built: \"%s\"\n", ap_get_server_built());
ap_rputs(" </P>\n", r);;
Index: modules/ssl/ssl_engine_vars.c
===================================================================
--- modules/ssl/ssl_engine_vars.c (revision 438815)
+++ modules/ssl/ssl_engine_vars.c (working copy)
@@ -192,7 +192,7 @@
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;
Index: modules/mappers/mod_rewrite.c
===================================================================
--- modules/mappers/mod_rewrite.c (revision 438815)
+++ modules/mappers/mod_rewrite.c (working copy)
@@ -2006,7 +2006,7 @@
case 'S':
if (!strcmp(var, "SERVER_SOFTWARE")) {
- result = ap_get_server_version();
+ result = ap_get_server_banner();
}
break;
}
Index: modules/generators/mod_status.c
===================================================================
--- modules/generators/mod_status.c (revision 438815)
+++ modules/generators/mod_status.c (working copy)
@@ -397,7 +397,7 @@
ap_rputs("<h1>Apache Server Status for ", r);
ap_rvputs(r, ap_get_server_name(r), "</h1>\n\n", NULL);
ap_rvputs(r, "<dl><dt>Server Version: ",
- ap_get_server_version(), "</dt>\n", NULL);
+ ap_get_server_banner(), "</dt>\n", NULL);
ap_rvputs(r, "<dt>Server Built: ",
ap_get_server_built(), "\n</dt></dl><hr /><dl>\n", NULL);
ap_rvputs(r, "<dt>Current Time: ",
Index: modules/generators/mod_info.c
===================================================================
--- modules/generators/mod_info.c (revision 438815)
+++ modules/generators/mod_info.c (working copy)
@@ -347,7 +347,7 @@
ap_rprintf(r,
"<dl><dt><strong>Server Version:</strong> "
"<font size=\"+1\"><tt>%s</tt></font></dt>\n",
- ap_get_server_version());
+ ap_get_server_banner());
ap_rprintf(r,
"<dt><strong>Server Built:</strong> "
"<font size=\"+1\"><tt>%s</tt></font></dt>\n",
Index: modules/arch/netware/mod_nw_ssl.c
===================================================================
--- modules/arch/netware/mod_nw_ssl.c (revision 438815)
+++ modules/arch/netware/mod_nw_ssl.c (working copy)
@@ -1074,7 +1074,7 @@
/* 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;
Index: include/httpd.h
===================================================================
--- include/httpd.h (revision 438815)
+++ include/httpd.h (working copy)
@@ -420,13 +420,22 @@
AP_DECLARE(void) ap_get_server_revision(ap_version_t *version);
/**
- * Get the server version string
- * @return The server version string
+ * Get the server banner in a form suitable for sending over the
+ * network (as controlled by the ServerTokens directive).
+ * @return The server banner
*/
-AP_DECLARE(const char *) ap_get_server_version(void);
+AP_DECLARE(const char *) ap_get_server_banner(void);
/**
- * Add a component to the version string
+ * Get the server description in a form suitable for local displays
+ * or logging. This includes the detailed server version and
+ * information about some modules.
+ * @return The server description
+ */
+AP_DECLARE(const char *) ap_get_server_description(void);
+
+/**
+ * Add a component to the server description and banner strings
* @param pconf The pool to allocate the component from
* @param component The string to add
*/