Return-Path: Delivered-To: apmail-apache-cvs-archive@apache.org Received: (qmail 29891 invoked by uid 500); 5 Jun 2000 18:05:22 -0000 Mailing-List: contact apache-cvs-help@apache.org; run by ezmlm Precedence: bulk X-No-Archive: yes Reply-To: new-httpd@apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list apache-cvs@apache.org Received: (qmail 29661 invoked by uid 500); 5 Jun 2000 18:05:16 -0000 Delivered-To: apmail-apache-1.3-cvs@apache.org Date: 5 Jun 2000 18:05:13 -0000 Message-ID: <20000605180513.29588.qmail@locus.apache.org> From: wrowe@locus.apache.org To: apache-1.3-cvs@apache.org Subject: cvs commit: apache-1.3/src/os/win32 service.c service.h wrowe 00/06/05 11:05:11 Modified: . STATUS src CHANGES src/main http_main.c src/os/win32 service.c service.h Log: *) Add Win32 option -k stop as an alias of -k shutdown, to correspond to the NET START/NET STOP syntax. *) Force Apache to test the Win32 config prior to any operation, except the [-k shutdown -n service] and [-u -n service] combinations. *) Add Win32 Ctrl+C/Ctrl+Break/Close/Logoff/Shutdown handler. Modified submission by Jan Just Keijser Revision Changes Path 1.824 +31 -46 apache-1.3/STATUS Index: STATUS =================================================================== RCS file: /home/cvs/apache-1.3/STATUS,v retrieving revision 1.823 retrieving revision 1.824 diff -u -r1.823 -r1.824 --- STATUS 2000/06/05 16:08:09 1.823 +++ STATUS 2000/06/05 18:04:19 1.824 @@ -1,5 +1,5 @@ 1.3 STATUS: - Last modified at [$Date: 2000/06/05 16:08:09 $] + Last modified at [$Date: 2000/06/05 18:04:19 $] Release: @@ -27,26 +27,30 @@ * Add a simple hold console open patch (wait for close or the ESC key, with a nice message) if the server died a - bad death (non-zero exit code) in console mode. Add the - ConsoleHandler to deal with Ctrl+C/Ctrl+Break and, at - least under NT, shutdown, logoff and window close. + bad death (non-zero exit code) in console mode. OtherBill is working on this * Assure we haven't drifted too far between httpd.conf-dist and httpd.conf-dist-win. - * Assure the windows.html and win_compiling.html reflect - reality, today. - - running the server without admin - - how CGIs work (?) - - short/long name handling (?) - - better status page on current state of NT for users - > Basic answer the the last one - 2.0 is coming + * Document cvstodsp6.pl in win_compiling.html. + OtherBill will do this Wed if noone beats him to it. + + * Assure the windows.html reflects reality, today. + - running the service as a user other than SYSTEM (NT/2000). + - CONDITIONALLY - if someone posts revisions to the list for + htdocs/manual/windows.html to properly document JJK's Win95 + services support as a -HIGHLY EXPERIMENTAL- patch, + OtherBill will include that patch (with -k runservice rather + than -s, not documented in the -h list of options, and with + FreeConsole() -following- successful parsing of httpd.conf). + Too many are complaining, -but- 3+ Win95 users must step up + to test this new patch offered late Mon eve before we proceed. * Complete the security hole in stat() by testing for anything other than conventional file-not-found, permission-denied errors and rejecting the request then and there. By rights, all of - these cases aught to be Not Found, not Permission Denied. + these cases aught to be Not Found, not Permission Denied? RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: @@ -65,16 +69,20 @@ Available Patches: - * Eric Wedel 's patch for CONNECT method and proxy - on Win32. Addresses PR 5107 and maybe 2014. - PR: 5899 - Status: - * Dan Astoorian 's patch to fix mod_include RE tokenisation PR: 5898 Status: + * JJ Keijser's patch (99/10/06) to: + - Run Apache as a service on Win9x (PR2208) + - Making sure that Apache is shut down when the system is shutdown. + under Win95 (PR1643, PR2472) + - Use apache -i/-u to install/uninstalling Apache on Win9x + - Make Apache shut down cleanly when run on Windows 95 (PR4125) + PR#: PR2472, PR4125, PR1643 (suspended) and PR2208 (suspended). + Status: Martin +1(untested) + * Gerd Knorr 's patch to enable mod_auth_digest to handle both Digest *and* Basic authentication modes. PR: 5879 @@ -116,16 +124,6 @@ Status: Martin +1(untested), Ken +1(untested) - * JJ Keijser's patch (99/10/06) to: - - Run Apache as a service on Win95 (PR2208) - - Making sure that Apache is shut down when the system is shutdown. - (PR1643, PR2472) - - Use apache -i/-u to install/uninstalling Apache on Win95 - - Add ConsoleCtrlHandler to catch Ctrl-C in the Apache console window - - Make Apache shut down cleanly when run on Windows 95 (PR4125) - PR#: PR2472, PR4125, PR1643 (suspended) and PR2208 (suspended). - Status: Martin +1(untested) - * Paul Reder's patch to fix Allow/Deny (.htaccess parsing) in regex processing. Message-ID: <37A88E34.FD09C658@raleigh.ibm.com> @@ -422,27 +420,12 @@ Ken: What's W95-specific about it? Help: - * There are several PRs reporting Apache looping and they each seem to - implicate CGI script processing. The first PR happened about the time - we migrated to using native Win32 function calls to create the child - process. I have tried to recreate the problem w/o success. It just now - occurs to me that there may be a race condition between when the new - process comes alive and the parent sending data to (or attempting to - read data from) the child process. CreateProcess() returns immediately, - before the new process is created. The parent may be attempting I/O - with the child before it's ready. TODO: investigate ways to cause the - parent to wait for the child process to become fully active before - proceeding with CGI I/O processing. - * chdir() for CGI scripts and mod_include #exec needs to be re-implemented now that CreateProcess is being used. * process/thread model - need dynamic thread creation/destruction, similar to Unix process model - - can't use WaitForMultipleObjects in the same way we - do now, since that has a limit of 64(!) objects. Grr. - PR#1665 * some errors printed by CGIs to stderr don't end up making it to the server log unless an extra debugging message is added @@ -460,8 +443,6 @@ * the mutex should be critical-regions, since the current design is creating a mess of SO calls that are unnecessary - * we don't mmap on NT. Use TransmitFile? - * CGIs - docs on how they work w/scripts - WTF is the buffering coming from? @@ -469,8 +450,12 @@ * performance - * http_main.c hell - - split into two files? + * documentation: + - running the server without admin + - how CGIs work + - update README.NT + - short/long name handling + - better status page on current state of NT for users * who should run the service? Who exactly is the "system account"? 1.1548 +10 -0 apache-1.3/src/CHANGES Index: CHANGES =================================================================== RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1547 retrieving revision 1.1548 diff -u -r1.1547 -r1.1548 --- CHANGES 2000/06/05 16:08:15 1.1547 +++ CHANGES 2000/06/05 18:04:28 1.1548 @@ -1,5 +1,15 @@ Changes with Apache 1.3.13 + *) Add Win32 option -k stop as an alias of -k shutdown, to correspond to + the NET START/NET STOP syntax. [William Rowe] + + *) Force Apache to test the Win32 config prior to any operation, + except the [-k shutdown -n service] and [-u -n service] combinations. + [William Rowe] + + *) Add Win32 Ctrl+C/Ctrl+Break/Close/Logoff/Shutdown handler. + [William Rowe, Jan Just Keijser ] + *) Expand mod_setenvif so its directives can be used in and containers, and in .htaccess files when FileInfo overriding is allowed. PR#3000 [Ken Coar] 1.495 +25 -3 apache-1.3/src/main/http_main.c Index: http_main.c =================================================================== RCS file: /home/cvs/apache-1.3/src/main/http_main.c,v retrieving revision 1.494 retrieving revision 1.495 diff -u -r1.494 -r1.495 --- http_main.c 2000/06/01 23:42:25 1.494 +++ http_main.c 2000/06/05 18:04:41 1.495 @@ -6690,7 +6690,10 @@ ap_dump_settings = 1; break; case 'k': - signal_to_send = optarg; + if (!strcasecmp(optarg, "stop")) + signal_to_send = "shutdown"; + else + signal_to_send = optarg; break; #endif /* WIN32 */ #ifdef NETWARE @@ -6789,11 +6792,29 @@ ap_no2slash(ap_server_confname); #ifdef WIN32 + if (!child) { + /* Let's go fishing for some signals including ctrl+c/ctrl+break, + * and logoff, close and shutdown under WinNT/2000 + */ + SetConsoleCtrlHandler(ap_control_handler, TRUE); + atexit(ap_control_handler_terminate); + } + + /* Read the conf now unless we are uninstalling the service, + * or shutting down a running service + * (but do read the conf for the pidfile if we shutdown the console) + */ + if ((install >= 0) && (!service_name || !signal_to_send + || strcasecmp(signal_to_send,"shutdown"))) { + server_conf = ap_read_config(pconf, ptrans, ap_server_confname); + } + if (install) { if (!service_name) service_name = ap_pstrdup(pconf, DEFAULTSERVICENAME); if (install > 0) - InstallService(service_name, ap_server_root_relative(pcommands, ap_server_confname)); + InstallService(service_name, ap_server_root_relative(pcommands, + ap_server_confname)); else RemoveService(service_name); clean_parent_exit(0); @@ -6808,8 +6829,9 @@ printf("Unknown service: %s\n", service_name); clean_parent_exit(0); } -#endif +#else server_conf = ap_read_config(pconf, ptrans, ap_server_confname); +#endif if (ap_configtestonly) { fprintf(stderr, "%s: Syntax OK\n", ap_server_root_relative(pcommands, ap_server_confname)); 1.17 +42 -1 apache-1.3/src/os/win32/service.c Index: service.c =================================================================== RCS file: /home/cvs/apache-1.3/src/os/win32/service.c,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- service.c 2000/04/15 17:57:25 1.16 +++ service.c 2000/06/05 18:04:53 1.17 @@ -456,6 +456,47 @@ return TRUE; return FALSE; } - + +/* Control handler for processing Ctrl-C/Ctrl-Break and + * on Windows NT also user logoff and system shutdown + */ + +void ap_control_handler_terminate(void) +{ + /* Remove the control handler at the end of the day. */ + SetConsoleCtrlHandler(ap_control_handler, FALSE); +} + +BOOL CALLBACK ap_control_handler(DWORD ctrl_type) +{ + switch (ctrl_type) + { + case CTRL_C_EVENT: + case CTRL_BREAK_EVENT: + fprintf(stderr, "Apache server interrupted...\n"); + /* for Interrupt signals, shut down the server. + * Tell the system we have dealt with the signal + * without waiting for Apache to terminate. + */ + ap_start_shutdown(); + return TRUE; + + case CTRL_CLOSE_EVENT: + case CTRL_LOGOFF_EVENT: + case CTRL_SHUTDOWN_EVENT: + /* for Terminate signals, shut down the server. + * Wait for Apache to terminate, but respond + * after a reasonable time to tell the system + * that we have already tried to shut down. + */ + fprintf(stderr, "Apache server shutdown initiated...\n"); + ap_start_shutdown(); + Sleep(30000); + return TRUE; + } + + /* We should never get here, but this is (mostly) harmless */ + return FALSE; +} #endif /* WIN32 */ 1.6 +2 -0 apache-1.3/src/os/win32/service.h Index: service.h =================================================================== RCS file: /home/cvs/apache-1.3/src/os/win32/service.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- service.h 2000/03/13 21:00:41 1.5 +++ service.h 2000/06/05 18:04:55 1.6 @@ -12,6 +12,8 @@ void RemoveService(char *display_name); int service_init(); int send_signal_to_service(char *display_name, char *sig); +void ap_control_handler_terminate(void); +BOOL CALLBACK ap_control_handler(DWORD ctrl_type); #endif /* WIN32 */ #endif /* SERVICE_H */