From: dgaudet Date: Fri, 27 Jun 1997 01:51:50 +0000 (+0000) Subject: PR#566: mod_status dumps core in inetd mode X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5b5880a851485e82cba938a39c95184db1aecd93;p=thirdparty%2Fapache%2Fhttpd.git PR#566: mod_status dumps core in inetd mode Submitted by: Marc Slemko and Roy Fielding Reviewed by: Marc Slemko, Roy Fielding, Alexei Kosut git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/1.3@78375 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/APACHE_1_2_X/src/CHANGES b/APACHE_1_2_X/src/CHANGES index ea91e82b4e1..56f91747233 100644 --- a/APACHE_1_2_X/src/CHANGES +++ b/APACHE_1_2_X/src/CHANGES @@ -1,5 +1,8 @@ Changes with Apache 1.2.1 + *) PR#566: mod_status dumps core in inetd mode. + [Marc Slemko and Roy Fielding] + *) Attempt to work around problems with third party libraries that do not handle high numbered descriptors (examples include bind, and solaris libc). On all systems apache attempts to keep all permanent diff --git a/APACHE_1_2_X/src/include/scoreboard.h b/APACHE_1_2_X/src/include/scoreboard.h index 1485a45a9a5..5aa808cb4d6 100644 --- a/APACHE_1_2_X/src/include/scoreboard.h +++ b/APACHE_1_2_X/src/include/scoreboard.h @@ -107,4 +107,4 @@ typedef struct extern void sync_scoreboard_image(void); short_score get_scoreboard_info(int x); - +int exists_scoreboard_image (); diff --git a/APACHE_1_2_X/src/main/http_main.c b/APACHE_1_2_X/src/main/http_main.c index 348ca039c3b..642d037cd00 100644 --- a/APACHE_1_2_X/src/main/http_main.c +++ b/APACHE_1_2_X/src/main/http_main.c @@ -941,6 +941,11 @@ void sync_scoreboard_image () #endif } +int exists_scoreboard_image () +{ + return (scoreboard_image ? 1 : 0); +} + int update_child_status (int child_num, int status, request_rec *r) { int old_status; diff --git a/APACHE_1_2_X/src/modules/standard/mod_status.c b/APACHE_1_2_X/src/modules/standard/mod_status.c index da0073a59a3..e2059cd03a8 100644 --- a/APACHE_1_2_X/src/modules/standard/mod_status.c +++ b/APACHE_1_2_X/src/modules/standard/mod_status.c @@ -95,6 +95,7 @@ #include "util_script.h" #include #include "scoreboard.h" +#include "http_log.h" #ifdef NEXT #include @@ -229,7 +230,14 @@ int status_handler (request_rec *r) status[SERVER_BUSY_DNS]='D'; status[SERVER_GRACEFUL]='G'; - if (r->method_number != M_GET) return NOT_IMPLEMENTED; + if (!exists_scoreboard_image()) { + log_printf(r->server, "Server status unavailable in inetd mode"); + return HTTP_NOT_IMPLEMENTED; + } + r->allowed = (1 << M_GET) | (1 << M_TRACE); + if (r->method_number != M_GET) return HTTP_METHOD_NOT_ALLOWED; + if (!exists_scoreboard_image()) return HTTP_NOT_IMPLEMENTED; + r->content_type = "text/html"; /*