summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/manual/platform/netware.html4
-rw-r--r--os/netware/util_nw.c11
-rw-r--r--server/mpm/netware/mpm_netware.c66
3 files changed, 66 insertions, 15 deletions
diff --git a/docs/manual/platform/netware.html b/docs/manual/platform/netware.html
index 6bfcdc5190..c2a01dbd7a 100644
--- a/docs/manual/platform/netware.html
+++ b/docs/manual/platform/netware.html
@@ -179,7 +179,7 @@
<blockquote>
<pre>or</pre>
</blockquote>
-<pre> httpd shutdown
+<pre> apache2 shutdown
</pre>
If apache is running in a protected address space specify the
address space in the unload statement:
@@ -227,7 +227,7 @@
<p>Apache 2.0 for NetWare includes a set of command line directives that can
be used to modify or display information about the running instance of the
web server.&nbsp; Each of these directives must be preceded by the keyword
- HTTPD:</p>
+ APACHE2:</p>
<ul>
<li>RESTART - Instructs Apache to terminate all running worker threads as
diff --git a/os/netware/util_nw.c b/os/netware/util_nw.c
index 77219815be..493abc31b4 100644
--- a/os/netware/util_nw.c
+++ b/os/netware/util_nw.c
@@ -58,12 +58,10 @@
#include "httpd.h"
#include "http_log.h"
-#include "apr_strings.h"
-#include <stdarg.h>
-#include <time.h>
-#include <stdlib.h>
+#include <netware.h>
+int nlmUnloadSignaled();
AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
const request_rec *r,
@@ -74,3 +72,8 @@ AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
{
return APR_ENOTIMPL;
}
+
+int _NonAppCheckUnload( void )
+{
+ return nlmUnloadSignaled();
+}
diff --git a/server/mpm/netware/mpm_netware.c b/server/mpm/netware/mpm_netware.c
index 9df5acc7ad..f389677fd1 100644
--- a/server/mpm/netware/mpm_netware.c
+++ b/server/mpm/netware/mpm_netware.c
@@ -310,6 +310,18 @@ static void set_signals(void)
apr_signal(SIGTERM, sig_term);
}
+int nlmUnloadSignaled()
+{
+ if (shutdown_pending == 1) {
+ printf ("Shutdown in progress. Please wait...\n");
+ }
+ else {
+ shutdown_pending = 1;
+ printf ("Shutdown signalled. Please wait...\n");
+ }
+ return 0;
+}
+
/*****************************************************************
* Child process main loop.
* The following vars are static to avoid getting clobbered by longjmp();
@@ -790,7 +802,7 @@ static void show_server_data()
ap_listen_rec *lr;
module **m;
- printf("%s \n", ap_get_server_version());
+ printf("%s ID: %d\n", ap_get_server_version(), getpid());
/* Display listening ports */
printf(" Listening on port(s):");
@@ -1030,31 +1042,56 @@ void netware_rewrite_args(process_rec *process)
static int CommandLineInterpreter(scr_t screenID, const char *commandLine)
{
+ char *szCommand = "APACHE2 ";
+ int iCommandLen = 8;
+ char szcommandLine[256];
+ char *pID;
screenID = screenID;
+
+
+ if (commandLine == NULL)
+ return NOTMYCOMMAND;
+
+ strncpy (szcommandLine, commandLine, sizeof(szcommandLine)-1);
+
/* All added commands begin with "HTTPD " */
- if (!strnicmp("HTTPD ", commandLine, 6)) {
+ if (!strnicmp(szCommand, szcommandLine, iCommandLen)) {
ActivateScreen (getscreenhandle());
- if (!strnicmp("RESTART",&commandLine[6],3)) {
+ /* If an instance id was not given but the nlm is loaded in
+ protected space, then the the command belongs to the
+ OS address space instance to pass it on. */
+ pID = strstr (szcommandLine, "-p");
+ if ((pID == NULL) && nlmisloadedprotected())
+ return NOTMYCOMMAND;
+
+ /* If we got an instance id but it doesn't match this
+ instance of the nlm, pass it on. */
+ if (pID && (atoi(&pID[2]) != getpid()))
+ return NOTMYCOMMAND;
+
+ /* If we have determined that this command belongs to this
+ instance of the nlm, then handle it. */
+ if (!strnicmp("RESTART",&szcommandLine[iCommandLen],3)) {
printf("Restart Requested...\n");
restart();
}
- else if (!strnicmp("VERSION",&commandLine[6],3)) {
+ else if (!strnicmp("VERSION",&szcommandLine[iCommandLen],3)) {
printf("Server version: %s\n", ap_get_server_version());
printf("Server built: %s\n", ap_get_server_built());
}
- else if (!strnicmp("MODULES",&commandLine[6],3)) {
+ else if (!strnicmp("MODULES",&szcommandLine[iCommandLen],3)) {
ap_show_modules();
}
- else if (!strnicmp("DIRECTIVES",&commandLine[6],3)) {
+ else if (!strnicmp("DIRECTIVES",&szcommandLine[iCommandLen],3)) {
ap_show_directives();
}
- else if (!strnicmp("SHUTDOWN",&commandLine[6],3)) {
+ else if (!strnicmp("SHUTDOWN",&szcommandLine[iCommandLen],3)) {
printf("Shutdown Requested...\n");
shutdown_pending = 1;
}
- else if (!strnicmp("SETTINGS",&commandLine[6],3)) {
+ else if (!strnicmp("SETTINGS",&szcommandLine[iCommandLen],3)) {
if (show_settings) {
show_settings = 0;
ClearScreen (getscreenhandle());
@@ -1066,7 +1103,18 @@ static int CommandLineInterpreter(scr_t screenID, const char *commandLine)
}
}
else {
- printf("Unknown HTTPD command %s\n", &commandLine[6]);
+ show_settings = 0;
+ if (!strnicmp("HELP",&szcommandLine[iCommandLen],3))
+ printf("Unknown HTTPD command %s\n", &szcommandLine[iCommandLen]);
+ printf("Usage: HTTPD [command] [-p <instance ID>]\n");
+ printf("Commands:\n");
+ printf("\tDIRECTIVES - Show directives\n");
+ printf("\tHELP - Display this help information\n");
+ printf("\tMODULES - Show a list of the loaded modules\n");
+ printf("\tRESTART - Reread the configurtion file and restart Apache\n");
+ printf("\tSETTINGS - Show current thread status\n");
+ printf("\tSHUTDOWN - Shutdown Apache\n");
+ printf("\tVERSION - Display the server version information\n");
}
/* Tell NetWare we handled the command */