Re: cvs commit: httpd-test/perl-framework/Apache-Test/lib/Apache TestConfig.pm
On Mon, 3 Jun 2002, Justin Erenkrantz wrote: On Mon, Jun 03, 2002 at 11:21:57AM -0700, Doug MacEachern wrote: On Mon, 3 Jun 2002, Aaron Bannert wrote: Cliff is always mentioning something like t/TEST -d gdb or something like that. Won't that run in -X mode automatically? The reason I don't like that is because if I need to restart the server I have to quit my gdb. I want my gdb to last longer than the process (so my breakpoints et al remain the same). you can store the bps in the gdb startup script if you like. e.g. I've documented this idea here: http://perl.apache.org/release/docs/2.0/devel/debug_c/debug_c.html#Precooked_gdb_Startup_Scripts __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: cvs commit: httpd-test/specweb99/specweb99-2.0 mod_specweb99.c
Greg Ames wrote: But I can mention that my very unofficial mini-SPECweb99 runs with the client and server both on my ThinkPad with 100% standard dynamic GETs* show that prefork is the fastest, worker is about 1% slower, and leader is about another 1.5% slower. This is a noticeable improvement from when I started on specweb - worker was maybe 10% slower at that time, and leader had a compile error. If I were running the client server on separate boxes, the differences would probably be larger. That's good news. We can probably remove leader and threadpool soon. The current worker code contains basically all of the useful optimizations from the experimental MPMs. Do you have any profile data that shows where the bottlenecks are? From recent tests with other workloads, I anticipate that the most expensive operations are likely to be: reading the HTTP headers, directory_walk and file_walk, and possibly mod_mime. --Brian
Re: [PATCH] Switch DAV PUT to use brigades
+if (APR_BUCKET_IS_EOS(bucket)) { +seen_eos = 1; +break; +} + +/* Ahem, what to do? */ +if (APR_BUCKET_IS_METADATA(bucket)) { +continue; +} No need to test for this. You'll just get zero-length buckets. If an important metadata bucket *does* get generated in the future, then we'd want to be explicitly testing for and handling it (like what is being done for the EOS bucket). Until then, we don't have to worry about them. Um, I think the approach has been that you can't read from metadata buckets. That they may give you data back or they may not, but they certainly shouldn't be handled if you don't know what to do with them. This comes out of what little I've seen of the conversation with Cliff and Ryan. I may have it wrong, but I think someone said at some point that metadata may indeed respond to bucket_read with data, but that data shouldn't be construed as part of the input stream. I'm thoroughly confused at this point about what metadata buckets are. No, currently o metadata bucket responds to a read with data, and the way the metadata flag was implemented, it isn't possible for a metadata bucket to have data. I don't know the code well enough to know if this is implemented correctly, but the rule follows: All filters must make sure that all metadata buckets that they do not handle are sent to the next filter. If a previous filter created an error bucket, then that bucket must be sent to the next level. Ryan
Re: [PATCH] Switch DAV PUT to use brigades
On Mon, 3 Jun 2002, Justin Erenkrantz wrote: No need to test for this. You'll just get zero-length buckets. If an Um, I think the approach has been that you can't read from metadata buckets. That they may give you data back or they may not, but they certainly shouldn't be handled if you don't know what to do with them. This comes out of what little I've seen of the conversation with Cliff and Ryan. I may have it wrong, but I think someone said at some point that metadata may indeed respond to bucket_read with data, but that data shouldn't be construed as part of the input stream. Given the current implementation, APR_BUCKET_IS_METADATA(e) implies that e-length is 0 and apr_bucket_read(e) returns . Skipping the read call if it's a metadata is nothing more than an optimization in this case. (You should throw in the check for len != 0, that's almost as good an optimization.) My feelings aren't hurt one way or the other by having this in. --Cliff
Re: 1.3.25 release status
Jim Jagielski wrote: There are 2 outstanding questions regarding the Cygwin patches that Stipe submitted, which I would like resolved before the TR. It's also looking like the 2 patches noted in STATUS will *not* be added in. TR set for the morning of June4. I'll check about the src/helpers/install.sh issue this day and get back to the list. The src/main/http_main.c patch is definitly needed IMO for a stable running httpd on Cygwin, at least live tests on apache.dev.wapme.net have proofen this. Stipe [EMAIL PROTECTED] --- Wapme Systems AG Münsterstr. 248 40470 Düsseldorf Tel: +49-211-74845-0 Fax: +49-211-74845-299 E-Mail: [EMAIL PROTECTED] Internet: http://www.wapme-systems.de --- wapme.net - wherever you are
Re: [Bug 9488] - HTTP/0.9 requests spoken on https port returnsHTTP/1.0 response
Ryan Bloom wrote: From: Ben Laurie [mailto:[EMAIL PROTECTED]] Cliff Woolley wrote: On Mon, 3 Jun 2002, Ryan Bloom wrote: I was actually just about to look at this problem if you are busy. Go for it... I'm working on something else. Perhaps its just me, but I'm amused this is considered a bug. It's a security hole IMO. The problem is that if you rewrite the URL .*, then the error URL that mod_ssl will be rewritten. This means that you can serve information over HTTP that was supposed to be restricted to HTTPS. Sorry, I don't understand this - seems like you missed a word or two out? Cheers, Ben. -- http://www.apache-ssl.org/ben.html http://www.thebunker.net/ There is no limit to what a man can do or how far he can go if he doesn't mind who gets the credit. - Robert Woodruff
[PATCH] allow multiple calls to ap_discard_request_body
This basically just implements what Greg described last night. If HTTP_IN has already sent an EOS bucket up the stack for this request, then it will only ever respond with an EOS for this request. This resolves calling ap_discard_request_body multiple times for the same reques,t, which means that there are some hacks that can be removed from that code, but I didn't have the time to find them all. Finally, this passes the entire test suite, so it solves my original problem. Can somebody who is having problems with the proxy test this quickly? For completeness, we should probably include a call to ap_discard_request_body to ap_finalize_request, but that isn't required for this solution to work. Index: modules/http/http_protocol.c === RCS file: /home/cvs/httpd-2.0/modules/http/http_protocol.c,v retrieving revision 1.432 diff -u -d -b -w -u -r1.432 http_protocol.c --- modules/http/http_protocol.c31 May 2002 20:41:06 - 1.432 +++ modules/http/http_protocol.c4 Jun 2002 13:49:29 - @@ -742,6 +742,7 @@ BODY_LENGTH, BODY_CHUNK } state; +int eos_sent; } http_ctx_t; /* This is the HTTP_INPUT filter for HTTP requests and responses from @@ -769,6 +770,7 @@ ctx-state = BODY_NONE; ctx-remaining = 0; ctx-limit_used = 0; +ctx-eos_sent = 0; /* LimitRequestBody does not apply to proxied responses. * Consider implementing this check in its own filter. @@ -817,6 +819,7 @@ APR_BRIGADE_INSERT_TAIL(bb, e); e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, e); +ctx-eos_sent = 1; return ap_pass_brigade(f-r-output_filters, bb); } } @@ -835,6 +838,7 @@ if (ctx-state == BODY_NONE f-r-proxyreq != PROXYREQ_RESPONSE) { e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(b, e); +ctx-eos_sent = 1; return APR_SUCCESS; } @@ -886,6 +890,7 @@ APR_BRIGADE_INSERT_TAIL(bb, e); e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, e); +ctx-eos_sent = 1; return ap_pass_brigade(f-r-output_filters, bb); } @@ -895,23 +900,26 @@ ap_get_mime_headers(f-r); e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(b, e); +ctx-eos_sent = 1; return APR_SUCCESS; } } } -if (!ctx-remaining) { -switch (ctx-state) { -case BODY_NONE: -if (f-r-proxyreq != PROXYREQ_RESPONSE) { +if (ctx-eos_sent) { e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(b, e); return APR_SUCCESS; } + +if (!ctx-remaining) { +switch (ctx-state) { +case BODY_NONE: break; case BODY_LENGTH: e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(b, e); +ctx-eos_sent = 1; return APR_SUCCESS; case BODY_CHUNK: { @@ -950,6 +958,7 @@ APR_BRIGADE_INSERT_TAIL(bb, e); e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, e); +ctx-eos_sent = 1; return ap_pass_brigade(f-r-output_filters, bb); } @@ -959,6 +968,7 @@ ap_get_mime_headers(f-r); e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(b, e); +ctx-eos_sent = 1; return APR_SUCCESS; } } @@ -1010,6 +1020,7 @@ APR_BRIGADE_INSERT_TAIL(bb, e); e = apr_bucket_eos_create(f-c-bucket_alloc); APR_BRIGADE_INSERT_TAIL(bb, e); +ctx-eos_sent = 1; return ap_pass_brigade(f-r-output_filters, bb); } } Ryan ___ Ryan Bloom [EMAIL PROTECTED] 550 Jean St Oakland CA 94610 ---
RE: [Bug 9488] - HTTP/0.9 requests spoken on https port returns HTTP/1.0 response
From: Ben Laurie [mailto:[EMAIL PROTECTED]] Ryan Bloom wrote: From: Ben Laurie [mailto:[EMAIL PROTECTED]] Cliff Woolley wrote: On Mon, 3 Jun 2002, Ryan Bloom wrote: I was actually just about to look at this problem if you are busy. Go for it... I'm working on something else. Perhaps its just me, but I'm amused this is considered a bug. It's a security hole IMO. The problem is that if you rewrite the URL .*, then the error URL that mod_ssl will be rewritten. This means that you can serve information over HTTP that was supposed to be restricted to HTTPS. Sorry, I don't understand this - seems like you missed a word or two out? Sorry, here is a real example: RedirectMatch ^/([^/]+)?$ index.html Now, assume that this is specified for an SSL protected virtual host, so the only way to access this page should be through SSL. But, now I make an HTTP request over the SSL port. The way mod_ssl used to handle this case (fixed last night), was to fake a request that started with /mod_ssl:error... The handler would then see that URI, and send an error page back. The problem is that in the translate_name phase, mod_alias redirected /mod_ssl:error to index.html. Then, in the handler phase, we successfully served that page. The only good thing is that the ONLY page you can view is the one that you redirected to, but that is still a bad thing. Anyway, this was solved last night by removing all of the special /mod_ssl: URIs. Ryan
RE: help with apache configuration logic...
Take a look at the worker.c file, worker_pre_config function for an example of how to modify the configuration tree. Ok. I'm going to investigate that. It seems that I'll need to restructure the whole stuff for apache 2 instead of the minimum time port I hopped for initially. Fabien.
[PATCH include/http_log.h] APLOG_TOCLIENT.
I'm not sure whether ap_log_rerror() is the only user of APLOG_TOCLIENT. If so here is the patch that adds the whole story to the header file, so one doesn't need to dig in the .c files to find out how it works. Moreover, I'm still not happy with this description, as ap_log_rerror() doesn't really send the message to the client, but only sets 'error-notes' and it depends on the handler what it does about it. If I understand this correctly the note is misleading. Index: include/http_log.h === RCS file: /home/cvspublic/httpd-2.0/include/http_log.h,v retrieving revision 1.37 diff -u -r1.37 http_log.h --- include/http_log.h 23 May 2002 12:19:09 - 1.37 +++ include/http_log.h 4 Jun 2002 18:23:01 - @@ -109,6 +109,9 @@ /* Use APLOG_TOCLIENT to cause ap_log_rerror() to send the message * to the client in addition to recording it to the error log. + * In addition the following conditions should be true: + * the error level is 'warning' or more severe, + * AND there aren't already error-notes associated with this request */ #define APLOG_TOCLIENT (APLOG_LEVELMASK + 2) __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
Re: [PATCH include/http_log.h] APLOG_TOCLIENT.
Just committed this... diff -u -r1.37 http_log.h --- http_log.h 23 May 2002 12:19:09 - 1.37 +++ http_log.h 4 Jun 2002 19:00:29 - @@ -107,8 +107,17 @@ */ #define APLOG_NOERRNO (APLOG_LEVELMASK + 1) -/* Use APLOG_TOCLIENT to cause ap_log_rerror() to send the message - * to the client in addition to recording it to the error log. +/* Use APLOG_TOCLIENT on ap_log_rerror() to give content + * handlers the option of including the error text in the + * ErrorDocument sent back to the client. Setting APLOG_TOCLIENT + * will cause the error text to be saved in the request_rec-notes + * table, keyed to the string error-notes, iff: + * - the severity level of the message is APLOG_WARNING or greater + * - there are no other error-notes set in request_rec-notes + * Once error-notes is set, it is up to the content handler to + * determine whether this text should be send back to the client. + * Note: Client generated text streams sent back to the client MUST + * be escaped to prevent CSS attacks. */ Bill - Original Message - From: Stas Bekman [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Tuesday, June 04, 2002 2:28 PM Subject: [PATCH include/http_log.h] APLOG_TOCLIENT. I'm not sure whether ap_log_rerror() is the only user of APLOG_TOCLIENT. If so here is the patch that adds the whole story to the header file, so one doesn't need to dig in the .c files to find out how it works. Moreover, I'm still not happy with this description, as ap_log_rerror() doesn't really send the message to the client, but only sets 'error-notes' and it depends on the handler what it does about it. If I understand this correctly the note is misleading. Index: include/http_log.h === RCS file: /home/cvspublic/httpd-2.0/include/http_log.h,v retrieving revision 1.37 diff -u -r1.37 http_log.h --- include/http_log.h 23 May 2002 12:19:09 - 1.37 +++ include/http_log.h 4 Jun 2002 18:23:01 - @@ -109,6 +109,9 @@ /* Use APLOG_TOCLIENT to cause ap_log_rerror() to send the message * to the client in addition to recording it to the error log. + * In addition the following conditions should be true: + * the error level is 'warning' or more severe, + * AND there aren't already error-notes associated with this request */ #define APLOG_TOCLIENT (APLOG_LEVELMASK + 2) __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
mod_proxy and chunked transfer encoding
I am using Apache 2.0.36 as a reverse proxy to the Jetty java web-server. Everything worked fine, except redirects - they would wait 30 seconds (until Jetty timed out the keep-alive connection), and then Apache processed the redirect correctly. After some debugging, I found that Jetty's redirect response specified Transfer-Encoding: chunked. This was followed immediately by the size zero. Here is the http header: 1: HTTP/1.1 302 Moved Temporarily 2: Location: http://www.google.com 3: Transfer-Encoding: chunked 4: 5: 0 6: I believe this is a legitimate usage of the chunked encoding type, but apache blocks. If this is changed to the following, then everything works correctly: 1: HTTP/1.1 302 Moved Temporarily 2: Location: http://www.google.com 3: Content-Length: 0 4: The bug-database is currently down, so I decided to post this here first. Thanks for any help, -Larry
problems building modules with 2.0.36
Hi, I discovered problems today with building and compiling some own modules for httpd 2.0.36 on a SuSE 7.2 Box. The Server runs fine. Using apxs brought some things which I'm not clear on (I'm not a perl Guru): $ echo `./apxs -q CC` gcc $ echo `./apxs -q TARGET` httpd ... it goes wrong for CFLAGS_SHLIB, LD_SHLIB, LDFLAGS_SHLIB, LIBS_SHLIB $ echo `./apxs -q CFLAGS_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. echo `./apxs -q LD_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. $ echo `./apxs -q LDFLAGS_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. $ echo `./apxs -q LIBS_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. However I'm not clear if I did it all correct because I just want to know how it works basicly. Furtheron I discovered a typo: May it be the case that there is a typo in 'srclib/apr-util/include/apr_uri.h' the line #include apr_network_io.h should read #include apr_network_io.h thanks and best regards Heinrich -- http://www.xmlBlaster.org
Apache 1.3.25 DOA
Just a quick warning... having cvs up'ed the 1.3 tree, I was loath to discover I've broken my household proxy [which I was just about to try pipelining to with MozRC3.] D:\Apacheapache -k start -n proxyserver Processing config directory: d:/apache Processing config file: d:/apache/Apache.exe Syntax error on line 1 of d:/apache/apache.exe: Invalid command 'MZÉ', perhaps mis-spelled or defined by a module not included in the server configuration The config args for ProxyServer are -d d:/apache -f d:/apache/conf/httpd.conf So why it decided to use the system root, I have no clue. Looks like some borked patchwork has crept in. Releases_in_the_next_day_or_so -= 2; Just as I was about to attack the problems observed in 2.0. Gheesh. Bill
Re: cvs commit: apache-1.3/src/main http_main.c
At 10:58 AM 3/13/2002, you wrote: bnicholes02/03/13 07:58:40 Modified:src/main http_main.c Log: Added the -e command line directive for NetWare to force all fatal configuration file errors to the logger screen rather than to the Apache screen. This allows Apache to shutdown cleanly and completely on an error condition without losing the error information that was written to the screen or requiring user interaction to close the Apache screen. Outch... this didn't penetrate my thick skull. I'd introduced two new Apache 2.0 directives -e level --- specific warning level for messages prior to parsing LogLevel, e.g. -e debug -E tmpfile --- specify initial error log file [for services and things with no console] These flags rather conflict with the new Netware -e Flag... Can we come up with some comprimize on flags so that 1.3 and 2.0 don't start drifting? Unfortunately, both 2.0.36 and 1.3.24 introduced the two different \ meanings already. In terms of the new Netware -e meaning, it sure sounds like that feature aught to be a default behavior, no? It really sounds sorta of similar to either syslog logging on Unix or Event logging on NT. Bill
Re: cvs commit: apache-1.3/src/main http_main.c
At 11:21 PM 6/4/2002, William A. Rowe, Jr. wrote: At 10:58 AM 3/13/2002, you wrote: bnicholes02/03/13 07:58:40 Modified:src/main http_main.c Log: Added the -e command line directive for NetWare to force all fatal configuration file errors to the logger screen rather than to the Apache screen. This allows Apache to shutdown cleanly and completely on an error condition without losing the error information that was written to the screen or requiring user interaction to close the Apache screen. Can we come up with some comprimize on flags so that 1.3 and 2.0 don't start drifting? Unfortunately, both 2.0.36 and 1.3.24 introduced the two different \ meanings already. In terms of the new Netware -e meaning, it sure sounds like that feature aught to be a default behavior, no? It really sounds sorta of similar to either syslog logging on Unix or Event logging on NT. To be more specific, -e sounds very much like the converse of the -w option on windows, which causes the window to remain open if an error is encountered at startup [preventing the window from being closed before the message can be read at the console.]
Re: problems building modules with 2.0.36
Heinrich Götzger wrote: Hi, I discovered problems today with building and compiling some own modules for httpd 2.0.36 on a SuSE 7.2 Box. The Server runs fine. Using apxs brought some things which I'm not clear on (I'm not a perl Guru): $ echo `./apxs -q CC` gcc $ echo `./apxs -q TARGET` httpd ... it goes wrong for CFLAGS_SHLIB, LD_SHLIB, LDFLAGS_SHLIB, LIBS_SHLIB $ echo `./apxs -q CFLAGS_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. echo `./apxs -q LD_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. $ echo `./apxs -q LDFLAGS_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. $ echo `./apxs -q LIBS_SHLIB` Use of uninitialized value in concatenation (.) at ./apxs line 278. if the line is reported correctly here is the fix: Index: support/apxs.in === RCS file: /home/cvspublic/httpd-2.0/support/apxs.in,v retrieving revision 1.38 diff -u -r1.38 apxs.in --- support/apxs.in 13 May 2002 17:16:55 - 1.38 +++ support/apxs.in 5 Jun 2002 04:35:24 - @@ -275,7 +275,7 @@ if (exists $internal_vars{$arg} or exists $internal_vars{lc $arg}) { my $val = exists $internal_vars{$arg} ? $arg : lc $arg; $val = eval \$CFG_$val; -$result .= eval qq($val); +$result .= eval qq($val) if defined $val; $result .= ;;; $ok = 1; } __ Stas BekmanJAm_pH -- Just Another mod_perl Hacker http://stason.org/ mod_perl Guide --- http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com
1.3.25 green light again.
The transposed getopt list containing fF: was the culprit, of course. 1.3.25 rides again. Pipelining to our 1.3.25 proxy appears to work. Bill wrowe 2002/06/04 21:53:15 Modified:src/main http_main.c Log: First, checking for typos like fF: instead of Ff: in the getopt list would have been goodness. But this simply doesn't apply to win32, we don't DETACH in the Unix-ish way of the world. I don't even believe this applies to ANY user of the MULTITHREADed code path [only Netware and Win32 use it, correct?] But I'll leave the code in, and exclude only Win32 (where it was a noop anyways.) Revision ChangesPath 1.586 +6 -2 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.585 retrieving revision 1.586 diff -u -r1.585 -r1.586 --- http_main.c 3 Jun 2002 12:28:27 - 1.585 +++ http_main.c 5 Jun 2002 04:53:15 - 1.586 -1351,7 +1351,7 #ifdef WIN32 fprintf(stderr, Usage: %s [-D name] [-d directory] [-f file] [-n service]\n, bin); fprintf(stderr,%s [-C \directive\] [-c \directive\] [-k signal]\n, pad); -fprintf(stderr,%s [-v] [-V] [-h] [-l] [-L] [-S] [-t] [-T] [-F]\n, pad); +fprintf(stderr,%s [-v] [-V] [-h] [-l] [-L] [-S] [-t] [-T]\n, pad); #else /* !WIN32 */ #ifdef SHARED_CORE fprintf(stderr, Usage: %s [-R directory] [-D name] [-d directory] [-f file]\n, bin); -1382,7 +1382,9 #endif fprintf(stderr, -t : run syntax check for config files (with docroot check)\n); fprintf(stderr, -T : run syntax check for config files (without docroot check)\n); +#ifndef WIN32 fprintf(stderr, -F : run main process in foreground, for process supervisors\n); +#endif #ifdef WIN32 fprintf(stderr, -n name : name the Apache service for -k options below;\n); fprintf(stderr, -k stop|shutdown : tell running Apache to shutdown\n); -7256,7 +7258,7 reparsed = 1; } -while ((c = getopt(argc, argv, D:C:c:Xd:fF:vVlLz:Z:wiuStThk:n:W:)) != -1) { +while ((c = getopt(argc, argv, D:C:c:Xd:f:vVlLz:Z:wiuStThk:n:W:)) != -1) { #else /* !WIN32 */ while ((c = getopt(argc, argv, D:C:c:Xd:fF:vVlLesStTh)) != -1) { #endif -7380,9 +7382,11 ap_server_root[strlen(ap_server_root) - 1] == '/') ap_server_root[strlen(ap_server_root) - 1] = '\0'; break; +#ifndef WIN32 case 'F': do_detach = 0; break; +#endif case 'f': ap_cpystrn(ap_server_confname, ap_os_canonical_filename(pcommands, optarg),