]> granicus.if.org Git - apache/commitdiff
Win32: First cut at getting apache -k restart|shutdown and running apache as a servic...
authorBill Stoddard <stoddard@apache.org>
Wed, 8 Dec 1999 22:34:02 +0000 (22:34 +0000)
committerBill Stoddard <stoddard@apache.org>
Wed, 8 Dec 1999 22:34:02 +0000 (22:34 +0000)
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@84249 13f79535-47bb-0310-9956-ffa450edef68

Apache.dsp
ApacheCore.def
ApacheCore.dsp
httpd.dsp
libhttpd.def
server/mpm/winnt/registry.c
server/mpm/winnt/service.c

index bbb644ded95ea029c354f2ed2a33cee1c3bebfe5..e9fadf366ebed67121ad9ee49d5e48a7de1dab90 100644 (file)
@@ -41,7 +41,7 @@ RSC=rc.exe
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /c
-# ADD CPP /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O2 /I "./include" /I "./lib/apr/include" /D "NDEBUG" /D "WIN32" /D "_CONSOLE" /D "WIN32_LEAN_AND_MEAN" /YX /FD /c
 # ADD BASE RSC /l 0x809 /d "NDEBUG"
 # ADD RSC /l 0x809 /d "NDEBUG"
 BSC32=bscmake.exe
@@ -49,7 +49,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
-# ADD LINK32 CoreR\ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 lib\apr\Release\aprlib.lib  CoreR\ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:console /machine:I386
 
 !ELSEIF  "$(CFG)" == "Apache - Win32 Debug"
 
@@ -65,7 +65,7 @@ LINK32=link.exe
 # PROP Ignore_Export_Lib 0
 # PROP Target_Dir ""
 # ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /c
-# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /YX /FD /c
+# ADD CPP /nologo /MDd /W3 /Gm /GX /Zi /Od /I "./include" /I "./lib/apr/include" /D "_DEBUG" /D "WIN32" /D "_CONSOLE" /D "WIN32_LEAN_AND_MEAN" /YX /FD /c
 # ADD BASE RSC /l 0x809 /d "_DEBUG"
 # ADD RSC /l 0x809 /d "_DEBUG"
 BSC32=bscmake.exe
@@ -73,7 +73,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386
-# ADD LINK32 CoreD\ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386
+# ADD LINK32 lib\apr\debug\aprlib.lib  CoreD\ApacheCore.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib /nologo /subsystem:console /debug /machine:I386
 
 !ENDIF 
 
@@ -88,10 +88,26 @@ LINK32=link.exe
 
 SOURCE=.\os\win32\main_win32.c
 # End Source File
+# Begin Source File
+
+SOURCE=.\os\win32\registry.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\os\win32\service.c
+# End Source File
 # End Group
 # Begin Group "Header Files"
 
 # PROP Default_Filter "h;hpp;hxx;hm;inl;fi;fd"
+# Begin Source File
+
+SOURCE=.\os\win32\registry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\os\win32\service.h
+# End Source File
 # End Group
 # Begin Group "Resource Files"
 
index 0f2605a5a404556fbf2509d9cda3d33f9e716319..be38416682696a9c45ecdb9dd9638bee3219bfb8 100644 (file)
@@ -222,7 +222,7 @@ EXPORTS
        ap_send_fd_length   @215
        ap_send_http_header   @216
        ap_send_http_trace   @217
-       ap_send_mmap   @218
+;      ap_send_mmap   @218
        ap_send_size   @219
        ap_server_root_relative   @220
        ap_set_byterange   @221
@@ -368,3 +368,10 @@ EXPORTS
        ap_hook_fixups @363
         regerror @364
         ap_send_error_response @365
+       ap_start_shutdown @366
+;        ap_send_signal  @367
+        ap_pid_fname  @368
+        ap_read_config   @369
+       ap_server_pre_read_config  @370
+       ap_server_post_read_config @371
+       ap_setup_prelinked_modules @372
index b5ceec246df05952b1d3da17f3f62c47518afa96..333887c48a271d30194b7eb1b3281e9043f23d63 100644 (file)
@@ -218,10 +218,6 @@ SOURCE=.\os\win32\readdir.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\os\win32\registry.c
-# End Source File
-# Begin Source File
-
 SOURCE=.\main\rfc1413.c
 # End Source File
 # Begin Source File
index b5ceec246df05952b1d3da17f3f62c47518afa96..333887c48a271d30194b7eb1b3281e9043f23d63 100644 (file)
--- a/httpd.dsp
+++ b/httpd.dsp
@@ -218,10 +218,6 @@ SOURCE=.\os\win32\readdir.c
 # End Source File
 # Begin Source File
 
-SOURCE=.\os\win32\registry.c
-# End Source File
-# Begin Source File
-
 SOURCE=.\main\rfc1413.c
 # End Source File
 # Begin Source File
index 0f2605a5a404556fbf2509d9cda3d33f9e716319..be38416682696a9c45ecdb9dd9638bee3219bfb8 100644 (file)
@@ -222,7 +222,7 @@ EXPORTS
        ap_send_fd_length   @215
        ap_send_http_header   @216
        ap_send_http_trace   @217
-       ap_send_mmap   @218
+;      ap_send_mmap   @218
        ap_send_size   @219
        ap_server_root_relative   @220
        ap_set_byterange   @221
@@ -368,3 +368,10 @@ EXPORTS
        ap_hook_fixups @363
         regerror @364
         ap_send_error_response @365
+       ap_start_shutdown @366
+;        ap_send_signal  @367
+        ap_pid_fname  @368
+        ap_read_config   @369
+       ap_server_pre_read_config  @370
+       ap_server_post_read_config @371
+       ap_setup_prelinked_modules @372
index 93897a5120c7efa140f33ca34f9551a1b3d76193..0631b03766c5b122a32f1c25bd24bb767c3ffaf6 100644 (file)
@@ -1,3 +1,60 @@
+/* ====================================================================
+ * Copyright (c) 1995-1999 The Apache Group.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer. 
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ *    software must display the following acknowledgment:
+ *    "This product includes software developed by the Apache Group
+ *    for use in the Apache HTTP server project (http://www.apache.org/)."
+ *
+ * 4. The names "Apache Server" and "Apache Group" must not be used to
+ *    endorse or promote products derived from this software without
+ *    prior written permission. For written permission, please contact
+ *    apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache"
+ *    nor may "Apache" appear in their names without prior written
+ *    permission of the Apache Group.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ *    acknowledgment:
+ *    "This product includes software developed by the Apache Group
+ *    for use in the Apache HTTP server project (http://www.apache.org/)."
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Group and was originally based
+ * on public domain software written at the National Center for
+ * Supercomputing Applications, University of Illinois, Urbana-Champaign.
+ * For more information on the Apache Group and the Apache HTTP server
+ * project, please see <http://www.apache.org/>.
+ *
+ */
+
 /*
  * Functions to handle interacting with the Win32 registry
  */
@@ -24,9 +81,9 @@
  * 
  * HKLM\Software\[Vendor]\[Software]\[Version]\ServerRoot
  */
-
-#include <windows.h>
-#include <stdio.h>
+#include "os.h"
+//#include <windows.h>
+//#include <stdio.h>
 
 #include "httpd.h"
 #include "http_log.h"
@@ -180,11 +237,11 @@ static int ap_registry_get_key_int(ap_context_t *p, char *key, char *name, char
 
     rv = RegCloseKey(hKey);
     if (rv != ERROR_SUCCESS) {
-    do_error(rv, "RegCloseKey HKLM\\%s", key);
-       if (retval == 0) {
-           /* Keep error status from RegQueryValueEx, if any */
-           retval = -4;  
-       }
+        do_error(rv, "RegCloseKey HKLM\\%s", key);
+        if (retval == 0) {
+            /* Keep error status from RegQueryValueEx, if any */
+            retval = -4;  
+        }
     }
 
     return retval < 0 ? retval : nSize;
@@ -197,7 +254,7 @@ static int ap_registry_get_key_int(ap_context_t *p, char *key, char *name, char
  * dir will contain an empty string), or -1 if there was
  * an error getting the key.
  */
-
+#if 0
 int ap_registry_get_server_root(ap_context_t *p, char *dir, int size)
 {
     int rv;
@@ -209,7 +266,19 @@ int ap_registry_get_server_root(ap_context_t *p, char *dir, int size)
 
     return (rv < -1) ? -1 : 0;
 }
+#else
+int ap_registry_get_server_root(ap_context_t *p, char **buf)
+{
+    int rv;
+
+    rv = ap_registry_get_key_int(p, REGKEY, "ServerRoot", NULL, 0, buf);
+    if (rv < 0) {
+        *buf = NULL;
+    }
 
+    return (rv < -1) ? -1 : 0;
+}
+#endif
 char *ap_get_service_key(char *service_name)
 {
     char *key = malloc(strlen(SERVICEKEYPRE) +
@@ -220,7 +289,7 @@ char *ap_get_service_key(char *service_name)
 
     return(key);
 }
-
+#if 0
 int ap_registry_get_service_conf(ap_context_t *p, char *dir, int size, char *service_name)
 {
     int rv;
@@ -234,6 +303,21 @@ int ap_registry_get_service_conf(ap_context_t *p, char *dir, int size, char *ser
     free(key);
     return (rv < -1) ? -1 : 0;
 }
+#else
+int ap_registry_get_service_conf(ap_context_t *p, char **buf, char *service_name)
+{
+    int rv;
+    char *key = ap_get_service_key(service_name);
+
+    rv = ap_registry_get_key_int(p, key, "ConfPath", NULL, 0, buf);
+    if (rv < 0) {
+        *buf = NULL;
+    }
+
+    free(key);
+    return (rv < -1) ? -1 : 0;
+}
+#endif
 
 /**********************************************************************
  * The rest of this file deals with storing keys or values in the registry
index 8108ae1ad9347cc384df8ee87dc9dfdc6b074e2f..ec48db1f14b96bda208d98602c7ede9f02ad150a 100644 (file)
@@ -1,16 +1,70 @@
+/* ====================================================================
+ * Copyright (c) 1995-1999 The Apache Group.  All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
+ * modification, are permitted provided that the following conditions 
+ * are met: 
+ * 
+ * 1. Redistributions of source code must retain the above copyright 
+ *    notice, this list of conditions and the following disclaimer.  
+ * 
+ * 2. Redistributions in binary form must reproduce the above copyright 
+ *    notice, this list of conditions and the following disclaimer in 
+ *    the documentation and/or other materials provided with the 
+ *    distribution. 
+ * 
+ * 3. All advertising materials mentioning features or use of this 
+ *    software must display the following acknowledgment: 
+ *    "This product includes software developed by the Apache Group 
+ *    for use in the Apache HTTP server project (http://www.apache.org/)." 
+ * 
+ * 4. The names "Apache Server" and "Apache Group" must not be used to 
+ *    endorse or promote products derived from this software without 
+ *    prior written permission. For written permission, please contact 
+ *    apache@apache.org. 
+ * 
+ * 5. Products derived from this software may not be called "Apache" 
+ *    nor may "Apache" appear in their names without prior written 
+ *    permission of the Apache Group. 
+ * 
+ * 6. Redistributions of any form whatsoever must retain the following 
+ *    acknowledgment: 
+ *    "This product includes software developed by the Apache Group 
+ *    for use in the Apache HTTP server project (http://www.apache.org/)." 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY 
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR 
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
+ * OF THE POSSIBILITY OF SUCH DAMAGE. 
+ * ==================================================================== 
+ * 
+ * This software consists of voluntary contributions made by many 
+ * individuals on behalf of the Apache Group and was originally based 
+ * on public domain software written at the National Center for 
+ * Supercomputing Applications, University of Illinois, Urbana-Champaign. 
+ * For more information on the Apache Group and the Apache HTTP server 
+ * project, please see <http://www.apache.org/>. 
+ * 
+ */ 
+
 #ifdef WIN32
 
-#include <windows.h>
-#include <stdio.h>
+#include "os.h"
 #include <stdlib.h>
-#include <process.h>
 #include <direct.h>
 
 #include "httpd.h"
 #include "http_conf_globals.h"
 #include "http_log.h"
 #include "http_main.h"
-#include "multithread.h"
 #include "service.h"
 #include "registry.h"
 
@@ -41,14 +95,14 @@ int service_main(int (*main_fn)(int, char **), int argc, char **argv )
     };
 
     globdat.main_fn = main_fn;
-    globdat.stop_event = create_event(0, 0, "apache-signal");
+    globdat.stop_event = CreateEvent(NULL, 0, 0, "apache-signal");
     globdat.connected = 1;
 
     if(!StartServiceCtrlDispatcher(dispatchTable))
     {
         /* This is a genuine failure of the SCM. */
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-        "Error starting service control dispatcher");
+        ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
+                     "Error starting service control dispatcher");
         return(globdat.exit_status);
     }
     else
@@ -72,7 +126,7 @@ void __stdcall service_main_fn(DWORD argc, LPTSTR *argv)
 
     if(!(globdat.hServiceStatus = RegisterServiceCtrlHandler( globdat.name, service_ctrl)))
     {
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+        ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
         "Failure registering service handler");
         return;
     }
@@ -83,7 +137,7 @@ void __stdcall service_main_fn(DWORD argc, LPTSTR *argv)
         3000);                 // wait hint
 
     service_cd();
-    if( service_init() ) 
+//    if( service_init() ) 
         /* Arguments are ok except for \! */
         globdat.exit_status = (*globdat.main_fn)( argc, argv );
     
@@ -197,7 +251,7 @@ void InstallService(char *service_name, char *conf)
 
     if (GetModuleFileName( NULL, szPath, 512 ) == 0)
     {
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+        ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
         "GetModuleFileName failed");
         return;
     }
@@ -210,8 +264,8 @@ void InstallService(char *service_name, char *conf)
                         SC_MANAGER_ALL_ACCESS   // access required
                         );
    if (!schSCManager) {
-       ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-          "OpenSCManager failed");
+       ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
+                    "OpenSCManager failed");
     }
     else {
         schService = CreateService(
@@ -237,8 +291,8 @@ void InstallService(char *service_name, char *conf)
                 printf("The %s service has been installed successfully.\n", service_name );
         }
         else {
-            ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL, 
-               "CreateService failed");
+            ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL, 
+                         "CreateService failed");
         }
 
         CloseServiceHandle(schSCManager);
@@ -259,15 +313,15 @@ void RemoveService(char *service_name)
                         SC_MANAGER_ALL_ACCESS   // access required
                         );
     if (!schSCManager) {
-       ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-          "OpenSCManager failed");
+       ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
+                    "OpenSCManager failed");
     }
     else {
         schService = OpenService(schSCManager, service_name, SERVICE_ALL_ACCESS);
 
         if (schService == NULL) {
             /* Could not open the service */
-           ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+           ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
                        "OpenService failed");
         }
         else {
@@ -276,8 +330,8 @@ void RemoveService(char *service_name)
 
             // now remove the service
             if (DeleteService(schService) == 0)
-               ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-                   "DeleteService failed");
+               ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
+                             "DeleteService failed");
             else
                 printf("The %s service has been removed successfully.\n", service_name );
             CloseServiceHandle(schService);
@@ -307,8 +361,8 @@ BOOL isValidService(char *service_name) {
     int Err;
 
     if (!(schSCM = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS))) {
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-        "OpenSCManager failed");
+        ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
+                     "OpenSCManager failed");
        return FALSE;
     }
 
@@ -320,8 +374,8 @@ BOOL isValidService(char *service_name) {
 
     Err = GetLastError();
     if (Err != ERROR_SERVICE_DOES_NOT_EXIST && Err != ERROR_INVALID_NAME)
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-        "OpenService failed");
+        ap_log_error(APLOG_MARK, APLOG_ERR, Err, NULL,
+                     "OpenService failed");
 
     return FALSE;
 }
@@ -351,20 +405,20 @@ int send_signal_to_service(char *service_name, char *sig) {
                         SC_MANAGER_ALL_ACCESS   // access required
                         );
     if (!schSCManager) {
-        ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-        "OpenSCManager failed");
+        ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
+                     "OpenSCManager failed");
     }
     else {
         schService = OpenService(schSCManager, service_name, SERVICE_ALL_ACCESS);
 
         if (schService == NULL) {
             /* Could not open the service */
-           ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
-            "OpenService failed");
+           ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
+                        "OpenService failed");
         }
         else {
             if (!QueryServiceStatus(schService, &globdat.ssStatus))
-                ap_log_error(APLOG_MARK, APLOG_ERR|APLOG_WIN32ERROR, NULL,
+                ap_log_error(APLOG_MARK, APLOG_ERR, GetLastError(), NULL,
                              "QueryService failed");
             else {
                 if (globdat.ssStatus.dwCurrentState == SERVICE_STOPPED && action == stop)