cvs commit: apache-site/contributors index.html
dgaudet 00/02/23 12:23:16 Modified:contributors index.html Log: remove excess redundancy Revision ChangesPath 1.89 +2 -2 apache-site/contributors/index.html Index: index.html === RCS file: /home/cvs/apache-site/contributors/index.html,v retrieving revision 1.88 retrieving revision 1.89 diff -u -r1.88 -r1.89 --- index.html2000/02/18 22:57:43 1.88 +++ index.html2000/02/23 20:23:15 1.89 @@ -299,8 +299,8 @@ STRONGName:/STRONG A NAME=dgaudetDean Gaudet/ABR !-- I hate mailto:s because of spiders that collect them for spam -- -STRONGEmail:/STRONG [EMAIL PROTECTED]BR -STRONGURL:/STRONG A HREF=http://www.arctic.org/~dgaudet/;http://www.arctic.org/~dgaudet//ABR +STRONGEmail:/STRONG [EMAIL PROTECTED]BR +STRONGURL:/STRONG A HREF=http://arctic.org/~dean/;http://arctic.org/~dean//ABR STRONGOrganization:/STRONG A HREF=http://www.cp.net/;Critical Path/A BR STRONGOccupation:/STRONG Sr. Software EngineerBR
cvs commit: apache-2.0/src/modules/standard mod_autoindex.c mod_cgi.c mod_cgid.c mod_expires.c mod_include.c mod_log_config.c mod_rewrite.c mod_status.c mod_usertrack.c
dgaudet 00/01/08 21:18:34 Modified:src modules.c src/include http_protocol.h http_request.h httpd.h util_date.h src/lib/apr/file_io/unix filestat.c src/lib/apr/include apr_file_io.h apr_time.h src/lib/apr/test ab_apr.c testtime.c src/lib/apr/time/unix Makefile.in time.c timestr.c src/main http_core.c http_log.c http_protocol.c http_request.c util.c util_date.c util_script.c src/modules/experimental Makefile.tmpl src/modules/standard mod_autoindex.c mod_cgi.c mod_cgid.c mod_expires.c mod_include.c mod_log_config.c mod_rewrite.c mod_status.c mod_usertrack.c Removed: src/lib/apr/time/unix access.c Log: time overhaul: - ap_time_t is a 64-bit scalar, microseconds since epoch - ap_exploded_time_t corresponds to struct tm with a few extras probably broken on anything except linux. Revision ChangesPath 1.4 +12 -3 apache-2.0/src/Attic/modules.c Index: modules.c === RCS file: /home/cvs/apache-2.0/src/Attic/modules.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- modules.c 1999/12/05 19:33:27 1.3 +++ modules.c 2000/01/09 05:18:15 1.4 @@ -7,7 +7,6 @@ #include http_config.h extern module core_module; -extern module mpm_mpmt_pthread_module; extern module env_module; extern module config_log_module; extern module mime_module; @@ -21,10 +20,14 @@ extern module action_module; extern module userdir_module; extern module alias_module; +extern module rewrite_module; extern module access_module; extern module auth_module; +extern module expires_module; +extern module usertrack_module; extern module setenvif_module; extern module echo_module; +extern module mpm_mpmt_pthread_module; /* * Modules which implicitly form the @@ -35,7 +38,6 @@ */ module *ap_prelinked_modules[] = { core_module, - mpm_mpmt_pthread_module, env_module, config_log_module, mime_module, @@ -49,10 +51,14 @@ action_module, userdir_module, alias_module, + rewrite_module, access_module, auth_module, + expires_module, + usertrack_module, setenvif_module, echo_module, + mpm_mpmt_pthread_module, NULL }; @@ -65,7 +71,6 @@ */ module *ap_preloaded_modules[] = { core_module, - mpm_mpmt_pthread_module, env_module, config_log_module, mime_module, @@ -79,10 +84,14 @@ action_module, userdir_module, alias_module, + rewrite_module, access_module, auth_module, + expires_module, + usertrack_module, setenvif_module, echo_module, + mpm_mpmt_pthread_module, NULL }; 1.10 +1 -1 apache-2.0/src/include/http_protocol.h Index: http_protocol.h === RCS file: /home/cvs/apache-2.0/src/include/http_protocol.h,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- http_protocol.h 1999/12/20 16:38:31 1.9 +++ http_protocol.h 2000/01/09 05:18:16 1.10 @@ -118,7 +118,7 @@ API_EXPORT(int) ap_set_content_length(request_rec *r, long length); API_EXPORT(int) ap_set_keepalive(request_rec *r); -API_EXPORT(ap_time_t *) ap_rationalize_mtime(request_rec *r, ap_time_t *mtime); +API_EXPORT(ap_time_t) ap_rationalize_mtime(request_rec *r, ap_time_t mtime); API_EXPORT(char *) ap_make_etag(request_rec *r, int force_weak); API_EXPORT(void) ap_set_etag(request_rec *r); API_EXPORT(void) ap_set_last_modified(request_rec *r); 1.5 +1 -1 apache-2.0/src/include/http_request.h Index: http_request.h === RCS file: /home/cvs/apache-2.0/src/include/http_request.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- http_request.h1999/12/20 16:38:31 1.4 +++ http_request.h2000/01/09 05:18:16 1.5 @@ -104,7 +104,7 @@ API_EXPORT(void) ap_internal_redirect_handler(const char *new_uri, request_rec *); API_EXPORT(int) ap_some_auth_required(request_rec *r); API_EXPORT(int) ap_is_initial_req(request_rec *r); -API_EXPORT(ap_time_t *) ap_update_mtime(request_rec *r, ap_time_t *dependency_mtime); +API_EXPORT(void) ap_update_mtime(request_rec *r, ap_time_t dependency_mtime); #ifdef CORE_PRIVATE /* Function called by main.c to handle first-level request */ 1.18 +4 -4 apache-2.0/src/include/httpd.h Index: httpd.h === RCS file: /home/cvs/apache-2.0/src/include/httpd.h,v retrieving
cvs commit: apache-2.0/src/lib/apr/test .cvsignore
dgaudet 00/01/08 21:19:04 Modified:src/lib/apr/test .cvsignore Log: more stuff to ignore Revision ChangesPath 1.2 +12 -0 apache-2.0/src/lib/apr/test/.cvsignore Index: .cvsignore === RCS file: /home/cvs/apache-2.0/src/lib/apr/test/.cvsignore,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- .cvsignore1999/08/17 15:59:49 1.1 +++ .cvsignore2000/01/09 05:19:02 1.2 @@ -1 +1,13 @@ Makefile +testmmap +htdigest +ab +testcontext +testargs +testtime +testthread +client +server +testsock +testproc +testfile
cvs commit: apache-2.0/src modules.c
dgaudet 00/01/08 21:23:22 Removed: src modules.c Log: what?
cvs commit: apache-2.0/src/modules/standard mod_rewrite.c mod_rewrite.h
dgaudet 99/12/30 21:03:34 Modified:src CHANGES src/modules/standard mod_rewrite.c mod_rewrite.h Log: port mod_rewrite to 2.0 Submitted by: Paul J. Reder [EMAIL PROTECTED] Revision ChangesPath 1.20 +2 -0 apache-2.0/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-2.0/src/CHANGES,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- CHANGES 1999/12/21 11:33:21 1.19 +++ CHANGES 1999/12/31 05:03:32 1.20 @@ -1,5 +1,7 @@ Changes with Apache 2.0-dev + *) port mod_rewrite to 2.0. [Paul J. Reder [EMAIL PROTECTED]] + *) More rigorous checking of Host: headers to fix security problems with mass name-based virtual hosting (whether using mod_rewrite or mod_vhost_alias). 1.6 +234 -202 apache-2.0/src/modules/standard/mod_rewrite.c Index: mod_rewrite.c === RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_rewrite.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- mod_rewrite.c 1999/10/22 16:01:27 1.5 +++ mod_rewrite.c 1999/12/31 05:03:33 1.6 @@ -89,8 +89,18 @@ */ +#include httpd.h +#include http_config.h +#include http_request.h +#include http_core.h +#include http_log.h +#include http_protocol.h #include mod_rewrite.h +#if !defined(OS2) !defined(WIN32) +#include unixd.h +#endif + #ifndef NO_WRITEV #include sys/types.h #include sys/uio.h @@ -183,27 +193,26 @@ { NULL } }; +static void register_hooks(void) +{ +ap_hook_post_config(init_module,NULL,NULL,HOOK_MIDDLE); +ap_hook_child_init(init_child,NULL,NULL,HOOK_MIDDLE); + +ap_hook_fixups(hook_fixup,NULL,NULL,HOOK_FIRST); +ap_hook_translate_name(hook_uri2file,NULL,NULL,HOOK_FIRST); +ap_hook_type_checker(hook_mimetype,NULL,NULL,HOOK_MIDDLE); +} + /* the main config structure */ module MODULE_VAR_EXPORT rewrite_module = { - STANDARD_MODULE_STUFF, - init_module, /* module initializer */ + STANDARD20_MODULE_STUFF, config_perdir_create,/* create per-dirconfig structures */ config_perdir_merge, /* merge per-dirconfig structures */ config_server_create,/* create per-server config structures */ config_server_merge, /* merge per-server config structures */ - command_table, /* ap_table_t of config file commands */ + command_table, /* ap_table_t of config file commands */ handler_table, /* [#8] MIME-typed-dispatched handlers */ - hook_uri2file, /* [#1] URI to filename translation*/ - NULL,/* [#4] validate user id from request */ - NULL,/* [#5] check if the user is ok _here_ */ - NULL,/* [#3] check access by host address */ - hook_mimetype, /* [#6] determine MIME type*/ - hook_fixup, /* [#7] pre-run fixups */ - NULL,/* [#9] log a transaction */ - NULL,/* [#2] header parser */ - init_child, /* child_init */ - NULL,/* child_exit */ - NULL /* [#0] post read-request */ + register_hooks /* register hooks */ }; /* the cache */ @@ -211,9 +220,10 @@ /* whether proxy module is available or not */ static int proxy_available; +static int once_through = 0; -static char *lockname; -static int lockfd = -1; +static const char *lockname; +static ap_file_t *lockfd = NULL; /* ** +---+ @@ -238,7 +248,7 @@ a-state = ENGINE_DISABLED; a-options = OPTION_NONE; a-rewritelogfile = NULL; -a-rewritelogfp= -1; +a-rewritelogfp= NULL; a-rewriteloglevel = 0; a-rewritemaps = ap_make_array(p, 2, sizeof(rewritemap_entry)); a-rewriteconds= ap_make_array(p, 2, sizeof(rewritecond_entry)); @@ -271,7 +281,7 @@ a-rewritelogfile = overrides-rewritelogfile != NULL ? overrides-rewritelogfile : base-rewritelogfile; -a-rewritelogfp= overrides-rewritelogfp != -1 +a-rewritelogfp= overrides-rewritelogfp != NULL ? overrides-rewritelogfp : base-rewritelogfp; a-rewritemaps
cvs commit: apache-2.0/src/modules/standard mod_rewrite.c mod_rewrite.h
dgaudet 99/12/30 21:05:29 Modified:src/modules/standard mod_rewrite.c mod_rewrite.h Log: merge 1.3 changes to rewrite forward onto 2.0 Submitted by: Paul J. Reder [EMAIL PROTECTED] Revision ChangesPath 1.7 +89 -61apache-2.0/src/modules/standard/mod_rewrite.c Index: mod_rewrite.c === RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_rewrite.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- mod_rewrite.c 1999/12/31 05:03:33 1.6 +++ mod_rewrite.c 1999/12/31 05:05:27 1.7 @@ -102,7 +102,9 @@ #endif #ifndef NO_WRITEV +#ifndef NETWARE #include sys/types.h +#endif #include sys/uio.h #endif @@ -1145,13 +1147,19 @@ return OK; } else if ( (strlen(r-filename) 7 -strncasecmp(r-filename, http://;, 7) == 0) +strncasecmp(r-filename, http://;, 7) == 0) || (strlen(r-filename) 8 -strncasecmp(r-filename, https://;, 8) == 0) +strncasecmp(r-filename, https://;, 8) == 0) || (strlen(r-filename) 9 strncasecmp(r-filename, gopher://;, 9) == 0) || (strlen(r-filename) 6 -strncasecmp(r-filename, ftp://;, 6) == 0)) { +strncasecmp(r-filename, ftp://;,6) == 0) +|| (strlen(r-filename) 5 +strncasecmp(r-filename, ldap:, 5) == 0) +|| (strlen(r-filename) 5 +strncasecmp(r-filename, news:;, 5) == 0) +|| (strlen(r-filename) 7 +strncasecmp(r-filename, mailto:;, 7) == 0)) { /* it was finally rewritten to a remote URL */ /* skip 'scheme:' */ @@ -1171,8 +1179,8 @@ /* append the QUERY_STRING part */ if (r-args != NULL) { - r-filename = ap_pstrcat(r-pool, r-filename, -?, r-args, NULL); +r-filename = ap_pstrcat(r-pool, r-filename, ?, + ap_escape_uri(r-pool, r-args), NULL); } /* determine HTTP redirect response code */ @@ -1216,7 +1224,7 @@ /* it was finally rewritten to a local path */ /* expand /~user prefix */ -#ifndef WIN32 +#if !defined(WIN32) !defined(NETWARE) r-filename = expand_tildepaths(r, r-filename); #endif rewritelog(r, 2, local path result: %s, r-filename); @@ -1389,9 +1397,7 @@ * (r-path_info was already appended by the * rewriting engine because of the per-dir context!) */ -if (r-args != NULL - r-uri == r-unparsed_uri) { -/* see proxy_http:proxy_http_canon() */ +if (r-args != NULL) { r-filename = ap_pstrcat(r-pool, r-filename, ?, r-args, NULL); } @@ -1405,13 +1411,19 @@ return OK; } else if ( (strlen(r-filename) 7 -strncmp(r-filename, http://;, 7) == 0) -|| (strlen(r-filename) 8 -strncmp(r-filename, https://;, 8) == 0) +strncasecmp(r-filename, http://;, 7) == 0) +|| (strlen(r-filename) 8 +strncasecmp(r-filename, https://;, 8) == 0) || (strlen(r-filename) 9 -strncmp(r-filename, gopher://;, 9) == 0) +strncasecmp(r-filename, gopher://;, 9) == 0) || (strlen(r-filename) 6 -strncmp(r-filename, ftp://;, 6) == 0)) { +strncasecmp(r-filename, ftp://;,6) == 0) +|| (strlen(r-filename) 5 +strncasecmp(r-filename, ldap:, 5) == 0) +|| (strlen(r-filename) 5 +strncasecmp(r-filename, news:;, 5) == 0) +|| (strlen(r-filename) 7 +strncasecmp(r-filename, mailto:;, 7) == 0)) { /* it was finally rewritten to a remote URL */ /* because we are in a per-dir context @@ -1460,8 +1472,8 @@ /* append the QUERY_STRING part */ if (r-args != NULL) { -r-filename = ap_pstrcat(r-pool, r-filename, - ?, r-args, NULL); +r-filename = ap_pstrcat(r-pool, r-filename, ?, + ap_escape_uri(r-pool, r-args), NULL); } /* determine HTTP
cvs commit: apache-2.0/src/lib/apr/time/unix timestr.c
dgaudet 99/12/30 21:09:22 Modified:src/lib/apr/include apr_time.h src/lib/apr/time/unix timestr.c Log: retsize should be ap_size_t, not hardwired to 32 bits Revision ChangesPath 1.8 +1 -1 apache-2.0/src/lib/apr/include/apr_time.h Index: apr_time.h === RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_time.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- apr_time.h1999/12/30 18:31:27 1.7 +++ apr_time.h1999/12/31 05:09:20 1.8 @@ -77,7 +77,7 @@ ap_status_t ap_implode_time(ap_time_t *); ap_status_t ap_timestr(char **date_str, struct atime_t *t, ap_timetype_e type, ap_context_t *p); -ap_status_t ap_strftime(char *s, ap_int32_t *retsize, ap_size_t max, const char *format, ap_time_t *tm); +ap_status_t ap_strftime(char *s, ap_size_t *retsize, ap_size_t max, const char *format, ap_time_t *tm); /* accessor functions */ ap_status_t ap_get_curtime(ap_time_t *, ap_int64_t *); 1.4 +1 -1 apache-2.0/src/lib/apr/time/unix/timestr.c Index: timestr.c === RCS file: /home/cvs/apache-2.0/src/lib/apr/time/unix/timestr.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- timestr.c 1999/12/30 18:31:28 1.3 +++ timestr.c 1999/12/31 05:09:21 1.4 @@ -126,7 +126,7 @@ */ } -ap_status_t ap_strftime(char *s, ap_int32_t *retsize, ap_size_t max, +ap_status_t ap_strftime(char *s, ap_size_t *retsize, ap_size_t max, const char *format, struct atime_t *tm) { (*retsize) = strftime(s, max, format, tm-explodedtime);
cvs commit: apache-2.0 STATUS
dgaudet 99/11/29 16:52:32 Modified:.STATUS Log: more accurate reflection of reality Revision ChangesPath 1.20 +4 -2 apache-2.0/STATUS Index: STATUS === RCS file: /home/cvs/apache-2.0/STATUS,v retrieving revision 1.19 retrieving revision 1.20 diff -u -r1.19 -r1.20 --- STATUS1999/11/30 00:10:23 1.19 +++ STATUS1999/11/30 00:52:30 1.20 @@ -1,5 +1,5 @@ Apache 2.0 STATUS: -Last modified at [$Date: 1999/11/30 00:10:23 $] +Last modified at [$Date: 1999/11/30 00:52:30 $] Release: @@ -125,7 +125,9 @@ * Work on other MPMs. Possible MPMs discussed or in progress include: - Dean Gaudet's async MPM - Status: ? + Status: dean is unlikely to begin work on this any time soon... + has lots of ideas he'll share with folks willing to begin + tackling the issues. this is apache 2.1 material. - Zach Brown's [EMAIL PROTECTED] Linux siginfo MPM Status: ?
cvs commit: apache-1.3/cgi-bin printenv
dgaudet 99/11/24 10:11:00 Modified:cgi-bin printenv Log: no comment on the rest of this... but this is for debugging, and i don't want a debugging tool losing information for me for the sake of looking good. Revision ChangesPath 1.5 +0 -1 apache-1.3/cgi-bin/printenv Index: printenv === RCS file: /home/cvs/apache-1.3/cgi-bin/printenv,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- printenv 1999/11/24 13:38:55 1.4 +++ printenv 1999/11/24 18:10:58 1.5 @@ -8,7 +8,6 @@ $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s||\\|g; -$val = substr($val, 0, 100).'[...]' if (length($val) 100); print ${var}=\${val}\\n; }
cvs commit: apache-1.3/htdocs index.html.en
dgaudet 99/11/01 13:48:49 Modified:htdocs index.html.en Log: i asked a friend who does interface design to comment on the it worked page. i liked what he had to say. From: James Home [EMAIL PROTECTED] reading over the page, it appears that the primary audience for the page is the person who's installing Apache. this doesn't really make sense though; the only information it's necessary to convey to that person is that the server is working, and the simple presence of the page does that. sure, there are the links to the Apache homepage and to documentation, but those don't require much prominence; if someone is looking for them, they're easy to find. I'd say that the primary audience for the *information* on the page is the poor befuddled user who doesn't know an Apache helicopter from an Apache web server and wants to know what happened to the website they've spent weeks working on. so how is a user like that going to experience the page? - a logo that they don't recognize at the bottom of the page apparently claiming responsibility for it; - some confusing It Worked! message at the top of the page; - a somewhat threatening and vague message that, despite the fact that this page is all about this mysterious software called Apache (note that it isn't explained that Apache is web server software until the very last line of small text), Apache isn't responsible for the site, and I should contact the administrator of the site involved (of course, if I was an end user who didn't understand how web servers work, I would assume *I* was the administrator of my site, leaving only this mysterious organization to contact). - clicking on the most prominent link takes me to another page that doesn't specifically mention web servers. there's a contact link though, which takes me to the page with the email address and Sally's phone number. I did a quick mockup to demonstrate how I think this might work better: http://www.vagabondage.com/~jim/apache/worked2.html Submitted by: James Home [EMAIL PROTECTED] Revision ChangesPath 1.2 +26 -38apache-1.3/htdocs/index.html.en Index: index.html.en === RCS file: /home/cvs/apache-1.3/htdocs/index.html.en,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- index.html.en 1999/08/27 15:08:02 1.1 +++ index.html.en 1999/11/01 21:48:49 1.2 @@ -1,7 +1,7 @@ !DOCTYPE HTML PUBLIC -//W3C//DTD HTML 3.2 Final//EN HTML HEAD - TITLETest Page for Apache Installation on Web Site/TITLE + TITLETest Page for Apache Installation/TITLE /HEAD !-- Background white, links blue (unvisited), navy (visited), red (active) -- BODY @@ -11,41 +11,29 @@ VLINK=#80 ALINK=#FF - H1 ALIGN=CENTER - It Worked! The Apache Web Server is Installed on this Web Site! - /H1 - P - If you can see this page, then the people who own this domain have just - installed the A HREF=http://www.apache.org/httpd;Apache Web server/A - software successfully. They now have to add content to this directory - and replace this placeholder page, or else point the server at their real - content. - /P - HR - BLOCKQUOTE - If you are seeing this page instead of the site you expected, please - STRONGcontact the administrator of the site involved./STRONG - (Try sending mail to SAMPlt;Webmaster@EMdomain/EMgt;/SAMP.) - Although this site is - running the Apache software it almost certainly has no other connection - to the Apache Group, so please do not send mail about this site or its - contents to the Apache authors. If you do, your message will be - STRONGBIGignored/BIG/STRONG. - /BLOCKQUOTE - HR - P - The Apache - A - HREF=manual/index.html - documentation/A - has been included with this distribution. - /P - P - The Webmaster of this site is free to use the image below on - an Apache-powered Web server. Thanks for using Apache! - /P - DIV ALIGN=CENTER - IMG SRC=apache_pb.gif ALT= - /DIV - /BODY + + +P +If you can see this, it means that the installation of the A HREF=http://www.apache.org/;Apache/A web server software on this system was successful. You may now add content to this directory and replace this page. + +PHR WIDTH=50% SIZE=8 + +H2 ALIGN=CENTERSeeing this instead of the website you expected?/H2 + +P +This page is here because the site administrator has changed the configuration of this web server. +Please STRONGcontact the person responsible for maintaining this server with questions./STRONG The Apache Software Foundation, which wrote the web server software this site administrator is using, has nothing to do with maintaining this site and cannot
cvs commit: apache-1.3/src/test check_chunked
dgaudet 99/08/12 17:51:35 Modified:src/test check_chunked Log: newer perls complain about \r in hex, whatever Revision ChangesPath 1.3 +2 -2 apache-1.3/src/test/check_chunked Index: check_chunked === RCS file: /home/cvs/apache-1.3/src/test/check_chunked,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- check_chunked 1998/02/07 21:14:18 1.2 +++ check_chunked 1999/08/13 00:51:35 1.3 @@ -24,9 +24,9 @@ for(;;) { $_ = || die unexpected end of file!\n; -m#^[0-9a-f]+ *\r$#i || die bogus chunklen: $_; +m#^([0-9a-f]+) *\r$#i || die bogus chunklen: $_; -my $chunklen = hex; +my $chunklen = hex($1); exit 0 if ($chunklen == 0);
cvs commit: apache-2.0/mpm/src/support/SHA1 - New directory
dgaudet 99/08/05 17:50:56 apache-2.0/mpm/src/support/SHA1 - New directory
cvs commit: apache-2.0/mpm/src/support/SHA1 README.sha1 convert-sha1.pl htpasswd-sha1.pl ldif-sha1.example
dgaudet 99/08/05 17:56:10 Modified:mpm INSTALL Makefile.tmpl config.layout configure mpm/src .gdbinit ApacheCore.dsp ApacheCore.mak Configuration.tmpl Configure mpm/src/ap Makefile.tmpl ap_md5c.c mpm/src/helpers GuessOS TestCompile buildinfo.sh mkshadow.sh mpm/src/include ap.h ap_config.h ap_md5.h ap_mmn.h http_conf_globals.h http_core.h httpd.h mpm/src/main buff.c http_connection.c http_core.c http_main.c http_protocol.c rfc1413.c util.c util_script.c util_uri.c mpm/src/modules/mpm/prefork prefork.c mpm/src/modules/proxy ApacheModuleProxy.dsp ApacheModuleProxy.mak proxy_cache.c mpm/src/modules/standard .cvsignore mod_auth.c mod_auth_db.c mod_auth_dbm.c mod_cgi.c mod_log_config.c mod_rewrite.c mod_rewrite.h mpm/src/os/bs2000 Makefile.tmpl bs2login.c os.h mpm/src/os/tpf os.c os.h mpm/src/os/unix unixd.c mpm/src/os/win32 ApacheModuleRewrite.dsp ApacheModuleRewrite.mak os.h registry.c mpm/src/regex debug.c main.c split.c mpm/src/support Makefile.tmpl README ab.c apxs.8 apxs.pl htdigest.c htpasswd.1 htpasswd.c httpd.8 httpd.exp suexec.c Added: mpm/src/ap ap_checkpass.c ap_sha1.c mpm/src/include ap_sha1.h mpm/src/modules/standard mod_vhost_alias.c mpm/src/support/SHA1 README.sha1 convert-sha1.pl htpasswd-sha1.pl ldif-sha1.example Log: merge the differences in apache-1.3 from tag apache-apr-merge-3 up to mpm-merge-1 onto the mpm tree prior to the merge, the mpm tree was tagged with apache-1_3-merge-1-pre and after the merge, the mpm tree will be tagged with apache-1_3-merge-1-post note: none of htdocs/manual is present in mpm at this point. Revision ChangesPath 1.2 +2 -2 apache-2.0/mpm/INSTALL Index: INSTALL === RCS file: /home/cvs/apache-2.0/mpm/INSTALL,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- INSTALL 1999/06/18 18:39:11 1.1 +++ INSTALL 1999/08/06 00:53:52 1.2 @@ -83,7 +83,7 @@ - FreeBSD - Solaris - AIX - Mac OS - OpenBSD - IRIX - SCO - OpenStep/Mach - NetBSD- HPUX - ReliantUNIX - - BSDI - Digital Unix + - BSDI - Digital Unix - DGUX o Entirely unsupported platforms are: - Ultrix @@ -326,7 +326,7 @@ this way implicitly enables them itself). Note 1: The --enable-shared option DOES NOT AUTOMATICALLY enable the - module because there are variants like `--enable-shared=all' + module because there are variants like `--enable-shared=max' which should not imply `--enable-module=all'. Note 2: Per default the DSO mechanism is globally disabled, i.e. no 1.2 +7 -0 apache-2.0/mpm/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/Makefile.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile.tmpl 1999/06/18 18:39:11 1.1 +++ Makefile.tmpl 1999/08/06 00:53:52 1.2 @@ -259,6 +259,7 @@ $(MKDIR) $(root)$(iconsdir) $(MKDIR) $(root)$(cgidir) $(MKDIR) $(root)$(includedir) + $(MKDIR) $(root)$(includedir)/xml $(MKDIR) $(root)$(runtimedir) $(MKDIR) $(root)$(logfiledir) $(MKDIR) $(root)$(proxycachedir) @@ -277,6 +278,11 @@ [EMAIL PROTECTED] [ .`grep '^[ ]*AddModule.*mod_so\.o' $(TOP)/$(SRC)/Configuration.apaci` != . ]; then \ echo $(INSTALL_CORE) $(TOP)/$(SRC)/$(TARGET) $(root)$(sbindir)/$(TARGET); \ $(INSTALL_CORE) $(TOP)/$(SRC)/$(TARGET) $(root)$(sbindir)/$(TARGET); \ + SHLIB_EXPORT_FILES=`grep '^SHLIB_EXPORT_FILES=' $(TOP)/$(SRC)/Makefile | sed -e 's:^.*=::'`; \ + if [ .$${SHLIB_EXPORT_FILES} != . ]; then \ + $(CP) $(TOP)/$(SRC)/support/httpd.exp $(root)$(libexecdir)/; \ + chmod 644 $(root)$(libexecdir)/httpd.exp; \ + fi; \ else \ echo $(INSTALL_PROGRAM) $(TOP)/$(SRC)/$(TARGET) $(root)$(sbindir)/$(TARGET); \ $(INSTALL_PROGRAM) $(TOP)/$(SRC)/$(TARGET) $(root)$(sbindir)/$(TARGET); \ @@ -422,6 +428,7 @@ install-include: @echo === [include: Installing
cvs commit: apache-2.0/mpm/src/modules/standard mod_include.c
dgaudet 99/08/05 18:09:39 Modified:mpm/src/modules/standard mod_include.c Log: doc TODO Revision ChangesPath 1.5 +3 -16 apache-2.0/mpm/src/modules/standard/mod_include.c Index: mod_include.c === RCS file: /home/cvs/apache-2.0/mpm/src/modules/standard/mod_include.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- mod_include.c 1999/07/27 12:05:08 1.4 +++ mod_include.c 1999/08/06 01:09:38 1.5 @@ -111,6 +111,9 @@ /* just need some arbitrary non-NULL pointer which can't also be a request_rec */ #define NESTED_INCLUDE_MAGIC (includes_module) +/* TODO: changing directory should be handled by CreateProcess */ +#define ap_chdir_file(x) do {} while(0) + /* Environment function -- */ /* XXX: could use ap_table_overlap here */ @@ -614,10 +617,7 @@ } ap_destroy_sub_req(rr); -/* changing directory should be handled by CreateProcess. - #ifndef WIN32 ap_chdir_file(r-filename); -#endif */ return 0; } @@ -737,10 +737,7 @@ if (!error_fmt ap_run_sub_req(rr)) { error_fmt = unable to include \%s\ in parsed file %s; } -/* changing directory should be handled by CreateProcess. - #ifndef WIN32 ap_chdir_file(r-filename); - #endif*/ if (error_fmt) { ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r, error_fmt, tag_val, r-filename); @@ -897,10 +894,7 @@ ap_rputs(error, r); } /* just in case some stooge changed directories */ -/* changing directory should be handled by CreateProcess. -#ifndef WIN32 ap_chdir_file(r-filename); - #endif*/ } else if (!strcmp(tag, cgi)) { parse_string(r, tag_val, parsed_string, sizeof(parsed_string), 0); @@ -909,11 +903,7 @@ invalid CGI ref \%s\ in %s, tag_val, file); ap_rputs(error, r); } -/* grumble groan */ - /* changing directory should be handled by CreateProcess. -#ifndef WIN32 ap_chdir_file(r-filename); - #endif*/ } else if (!strcmp(tag, done)) { return 0; @@ -2163,10 +2153,7 @@ printing = conditional_status = 1; if_nesting = 0; -/* changing directory should be handled by CreateProcess. -#ifndef WIN32 ap_chdir_file(r-filename); -#endif*/ if (r-args) { /* add QUERY stuff to env cause it ain't yet */ char *arg_copy = ap_pstrdup(r-pool, r-args);
cvs commit: apache-1.3/src/modules/standard mod_access.c
dgaudet 99/08/05 18:37:59 Modified:src CHANGES src/modules/standard mod_access.c Log: CIDR addresses such as a.b.c.d/24 where d != 0 weren't handled properly... mask off the host bits of the address. PR: 4770 Submitted by: Paul J. Reder [EMAIL PROTECTED] Revision ChangesPath 1.1410+4 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1409 retrieving revision 1.1410 diff -u -r1.1409 -r1.1410 --- CHANGES 1999/08/03 09:27:25 1.1409 +++ CHANGES 1999/08/06 01:37:56 1.1410 @@ -1,5 +1,9 @@ Changes with Apache 1.3.8 + *) CIDR addresses such as a.b.c.d/24 where d != 0 weren't handled + properly in mod_access. + [Paul J. Reder [EMAIL PROTECTED]] PR#4770 + *) RewriteLock/RewriteMap didn't work properly with virtual hosts. [Dmitry Khrustalev [EMAIL PROTECTED]] PR#3874 1.39 +1 -1 apache-1.3/src/modules/standard/mod_access.c Index: mod_access.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_access.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- mod_access.c 1999/01/01 19:05:06 1.38 +++ mod_access.c 1999/08/06 01:37:58 1.39 @@ -202,7 +202,7 @@ mask = htonl(mask); } a-x.ip.mask = mask; - +a-x.ip.net = (a-x.ip.net mask); /* pjr - This fixes PR 4770 */ } else if (ap_isdigit(*where) is_ip(where)) { /* legacy syntax for ip addrs: a.b.c. == a.b.c.0/24 for example */
cvs commit: apache-2.0/mpm/src/main alloc.c
dgaudet 99/08/05 18:56:25 Modified:mpm/src/main alloc.c Log: Remove a difference with 1.3's alloc.c ... the root_pool stuff was an experiment I tried with apache-nspr, and it really didn't win much. The idea was to have a free list per thread. But in practice that's too many free lists, too much memory sitting around doing squat. If we have lock contention on the alloc mutex then we might consider a handful, say 8, free lists, and use tid % 8 to figure out which one to go after. Revision ChangesPath 1.7 +23 -50apache-2.0/mpm/src/main/alloc.c Index: alloc.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/alloc.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- alloc.c 1999/07/06 21:32:09 1.6 +++ alloc.c 1999/08/06 01:56:25 1.7 @@ -179,7 +179,6 @@ struct process_chain; struct cleanup; -struct root_pool; struct pool { union block_hdr *first; @@ -190,7 +189,6 @@ struct pool *sub_next; struct pool *sub_prev; struct pool *parent; -struct root_pool *thread_root; /* the root pool for this thread */ char *free_first_avail; #ifdef ALLOC_USE_MALLOC void *allocation_list; @@ -200,13 +198,6 @@ #endif }; -/* there's really no difference between a root_pool and a regular pool - * at the moment. - */ -typedef struct root_pool { -struct pool p; -} root_pool; - static union block_hdr *block_freelist = NULL; static ap_thread_mutex *alloc_mutex; @@ -320,7 +311,7 @@ #endif -static void free_blocks(root_pool *root,union block_hdr *blok) +static void free_blocks(union block_hdr *blok) { #ifdef ALLOC_USE_MALLOC union block_hdr *next; @@ -422,7 +413,7 @@ return blok; } -static ap_inline union block_hdr *new_local_block(root_pool *root, int min_size) +static ap_inline union block_hdr *new_local_block(int min_size) { union block_hdr *blok; @@ -465,32 +456,6 @@ * gets taken off the parent's sub-pool list... */ -#define ROOT_HDR_CLICKS (1 + ((sizeof(struct root_pool) - 1) / CLICK_SZ)) -#define ROOT_HDR_BYTES (ROOT_HDR_CLICKS * CLICK_SZ) - -API_EXPORT(struct pool *) ap_make_root_pool(void) -{ -union block_hdr *blok; -root_pool *new_pool; - -(void) ap_thread_mutex_lock(alloc_mutex); - -blok = new_block(ROOT_HDR_BYTES); -new_pool = (root_pool *) blok-h.first_avail; -blok-h.first_avail += ROOT_HDR_BYTES; -#ifdef POOL_DEBUG -blok-h.owning_pool = (new_pool-p); -#endif - -memset(new_pool, 0, sizeof(*new_pool)); -new_pool-p.free_first_avail = blok-h.first_avail; -new_pool-p.first = new_pool-p.last = blok; -new_pool-p.thread_root = new_pool; - -(void) ap_thread_mutex_unlock(alloc_mutex); -return (pool *)new_pool; -} - static pool *permanent_pool; /* Each pool structure is allocated in the start of its own first block, @@ -508,7 +473,7 @@ union block_hdr *blok; pool *new_pool; -blok = new_local_block(p-thread_root, POOL_HDR_BYTES); +blok = new_local_block(POOL_HDR_BYTES); new_pool = (pool *) blok-h.first_avail; blok-h.first_avail += POOL_HDR_BYTES; #ifdef POOL_DEBUG @@ -519,12 +484,13 @@ new_pool-free_first_avail = blok-h.first_avail; new_pool-first = new_pool-last = blok; -new_pool-thread_root = p-thread_root; -new_pool-parent = p; -new_pool-sub_next = p-sub_pools; -if (new_pool-sub_next) - new_pool-sub_next-sub_prev = new_pool; -p-sub_pools = new_pool; +if (p) { + new_pool-parent = p; + new_pool-sub_next = p-sub_pools; + if (new_pool-sub_next) + new_pool-sub_next-sub_prev = new_pool; + p-sub_pools = new_pool; +} return new_pool; } @@ -569,7 +535,7 @@ #ifdef WIN32 spawn_mutex = ap_thread_mutex_new(); #endif -permanent_pool = ap_make_root_pool(); +permanent_pool = ap_make_sub_pool(NULL); #ifdef ALLOC_STATS atexit(dump_stats); #endif @@ -591,7 +557,7 @@ a-cleanups = NULL; free_proc_chain(a-subprocesses); a-subprocesses = NULL; -free_blocks(a-thread_root, a-first-h.next); +free_blocks(a-first-h.next); a-first-h.next = NULL; a-last = a-first; @@ -616,6 +582,15 @@ { ap_clear_pool(a); +/* XXX: I don't think this mutex is required here. In theory, + our plan is that upon thread creation, the creator thread + will create a pool A which it will hand the created thread. + The created thread then can create any subpools of A it + wants, and it doesn't need any locks to do this... and it + can destroy any subpool of A it desires -- it just can't + destroy A itself. When
cvs commit: apache-1.3/src/main http_config.c
dgaudet 99/08/06 09:21:34 Modified:src CHANGES src/main http_config.c Log: Fix a memory leak where the module counts were getting messed up across restarts. Submitted by: David Harris [EMAIL PROTECTED] Revision ChangesPath 1.1411+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1410 retrieving revision 1.1411 diff -u -r1.1410 -r1.1411 --- CHANGES 1999/08/06 01:37:56 1.1410 +++ CHANGES 1999/08/06 16:21:28 1.1411 @@ -1,5 +1,8 @@ Changes with Apache 1.3.8 + *) Fix a memory leak where the module counts were getting messed + up across restarts. [David Harris [EMAIL PROTECTED]] + *) CIDR addresses such as a.b.c.d/24 where d != 0 weren't handled properly in mod_access. [Paul J. Reder [EMAIL PROTECTED]] PR#4770 1.146 +1 -0 apache-1.3/src/main/http_config.c Index: http_config.c === RCS file: /home/cvs/apache-1.3/src/main/http_config.c,v retrieving revision 1.145 retrieving revision 1.146 diff -u -r1.145 -r1.146 --- http_config.c 1999/05/07 00:16:11 1.145 +++ http_config.c 1999/08/06 16:21:33 1.146 @@ -625,6 +625,7 @@ m-module_index = -1;/* simulate being unloaded, should * be unnecessary */ dynamic_modules--; +total_modules--; } API_EXPORT(void) ap_add_loaded_module(module *mod)
cvs commit: apache-1.3/src/modules/standard mod_rewrite.c mod_rewrite.h
dgaudet 99/08/03 02:27:42 Modified:src CHANGES src/modules/standard mod_rewrite.c mod_rewrite.h Log: This patch includes fix for rewritelock in vhost problem and makes program map writes atomic if writev is available. -Dima PR: 3874 Submitted by: Dmitry Khrustalev [EMAIL PROTECTED] Revision ChangesPath 1.1409+4 -1 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1408 retrieving revision 1.1409 diff -u -r1.1408 -r1.1409 --- CHANGES 1999/08/02 10:48:11 1.1408 +++ CHANGES 1999/08/03 09:27:25 1.1409 @@ -1,6 +1,9 @@ Changes with Apache 1.3.8 - * Support for compaq/tandem/com. + *) RewriteLock/RewriteMap didn't work properly with virtual hosts. + [Dmitry Khrustalev [EMAIL PROTECTED]] PR#3874 + + *) Support for compaq/tandem/com. [Ottati, Michael [EMAIL PROTECTED], dirkx] *) Added SHA1 password encryption support to easy migration from 1.144 +35 -49apache-1.3/src/modules/standard/mod_rewrite.c Index: mod_rewrite.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_rewrite.c,v retrieving revision 1.143 retrieving revision 1.144 diff -u -r1.143 -r1.144 --- mod_rewrite.c 1999/07/29 17:54:06 1.143 +++ mod_rewrite.c 1999/08/03 09:27:33 1.144 @@ -91,6 +91,10 @@ #include mod_rewrite.h +#ifndef NO_WRITEV +#include sys/types.h +#include sys/uio.h +#endif /* ** +---+ @@ -208,6 +212,8 @@ /* whether proxy module is available or not */ static int proxy_available; +static char *lockname; +static int lockfd = -1; /* ** +---+ @@ -234,8 +240,6 @@ a-rewritelogfile = NULL; a-rewritelogfp= -1; a-rewriteloglevel = 0; -a-rewritelockfile = NULL; -a-rewritelockfp = -1; a-rewritemaps = ap_make_array(p, 2, sizeof(rewritemap_entry)); a-rewriteconds= ap_make_array(p, 2, sizeof(rewritecond_entry)); a-rewriterules= ap_make_array(p, 2, sizeof(rewriterule_entry)); @@ -270,12 +274,6 @@ a-rewritelogfp= overrides-rewritelogfp != -1 ? overrides-rewritelogfp : base-rewritelogfp; -a-rewritelockfile = overrides-rewritelockfile != NULL - ? overrides-rewritelockfile - : base-rewritelockfile; -a-rewritelockfp = overrides-rewritelockfp != -1 - ? overrides-rewritelockfp - : base-rewritelockfp; a-rewritemaps = ap_append_arrays(p, overrides-rewritemaps, base-rewritemaps); a-rewriteconds= ap_append_arrays(p, overrides-rewriteconds, @@ -291,8 +289,6 @@ a-rewriteloglevel = overrides-rewriteloglevel; a-rewritelogfile = overrides-rewritelogfile; a-rewritelogfp= overrides-rewritelogfp; -a-rewritelockfile = overrides-rewritelockfile; -a-rewritelockfp = overrides-rewritelockfp; a-rewritemaps = overrides-rewritemaps; a-rewriteconds= overrides-rewriteconds; a-rewriterules= overrides-rewriterules; @@ -528,15 +524,12 @@ static const char *cmd_rewritelock(cmd_parms *cmd, void *dconf, char *a1) { -rewrite_server_conf *sconf; const char *error; if ((error = ap_check_cmd_context(cmd, GLOBAL_ONLY)) != NULL) return error; -sconf = (rewrite_server_conf *) -ap_get_module_config(cmd-server-module_config, rewrite_module); -sconf-rewritelockfile = a1; +lockname = a1; return NULL; } @@ -2920,6 +2913,9 @@ char buf[LONG_STRING_LEN]; char c; int i; +#ifndef NO_WRITEV +struct iovec iov[2]; +#endif /* when `RewriteEngine off' was used in the per-server * context then the rewritemap-programs were not spawned. @@ -2934,8 +2930,16 @@ rewritelock_alloc(r); /* write out the request key */ +#ifdef NO_WRITEV write(fpin, key, strlen(key)); write(fpin, \n, 1); +#else +iov[0].iov_base = key; +iov[0].iov_len = strlen(key); +iov[1].iov_base = \n; +iov[1].iov_len = 1; +writev(fpin, iov, 2); +#endif /* read in the response value */ i = 0; @@ -3254,28 +3258,26 @@ conf = ap_get_module_config(s-module_config, rewrite_module); /* only operate if a lockfile is used */ -if (conf-rewritelockfile
cvs commit: apache-1.3 STATUS
dgaudet 99/07/29 10:55:57 Modified:.STATUS Log: I don't see how this is a show stopper, sorry. This is a client bug, and we already have force-no-vary as a method to work around those clients. Revision ChangesPath 1.729 +4 -4 apache-1.3/STATUS Index: STATUS === RCS file: /home/cvs/apache-1.3/STATUS,v retrieving revision 1.728 retrieving revision 1.729 diff -u -r1.728 -r1.729 --- STATUS1999/07/29 17:53:36 1.728 +++ STATUS1999/07/29 17:55:54 1.729 @@ -1,5 +1,5 @@ 1.3 STATUS: - Last modified at [$Date: 1999/07/29 17:53:36 $] + Last modified at [$Date: 1999/07/29 17:55:54 $] Release: @@ -64,6 +64,8 @@ mips-dec-ultrix4.4no Sameer Parekh mips-unknown-linuxyes Lars Eilebrecht +RELEASE SHOWSTOPPERS: + * The Vary header field stuff is still broken (multiple entries occur, etc.). The result is that some browsers (AFAIK at least MSIE) are horribly confused by the responses. @@ -72,7 +74,7 @@ archive: Ken, Ralf and Roy have already found consensus in the past there. -RELEASE SHOWSTOPPERS: +RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: * The Vary header field stuff is still broken (multiple entries occur, etc.). The result is that some browsers (AFAIK at least @@ -81,8 +83,6 @@ how it should be done, please look at new-httpd mailing list archive: Ken, Ralf and Roy have already found consensus in the past there. - -RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP: * Graham Legget has found that if he uses the 1.3.7-dev core, and the 1.3.6 proxy code (plus a small patch of his) he doesn't get
cvs commit: apache-2.0/mpm/src/modules/standard mod_access.c mod_actions.c mod_alias.c mod_asis.c mod_auth.c mod_autoindex.c mod_cgi.c mod_dir.c mod_echo.c mod_env.c mod_imap.c mod_include.c mod_log_config.c mod_mime.c mod_negotiation.c mod_setenvif.c mod_userdir.c
dgaudet 99/07/27 05:05:15 Modified:mpm/src/include http_config.h mpm/src/main http_config.c http_core.c http_main.c http_vhost.c mpm/src/modules/mpm/dexter dexter.c mpm/src/modules/mpm/mpmt_pthread mpmt_pthread.c mpm/src/modules/mpm/prefork prefork.c mpm/src/modules/mpm/spmt_os2 spmt_os2.c mpm/src/modules/standard mod_access.c mod_actions.c mod_alias.c mod_asis.c mod_auth.c mod_autoindex.c mod_cgi.c mod_dir.c mod_echo.c mod_env.c mod_imap.c mod_include.c mod_log_config.c mod_mime.c mod_negotiation.c mod_setenvif.c mod_userdir.c Log: - get rid of pre_command_line_hook ... use register_hooks for this purpose - get rid of optreset... screw -D, use environment variables ONE_PROCESS, SHOW_HOOKS, DUMP_VHOSTS, ... at least it builds this way :) Revision ChangesPath 1.11 +0 -2 apache-2.0/mpm/src/include/http_config.h Index: http_config.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/http_config.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- http_config.h 1999/07/24 18:38:37 1.10 +++ http_config.h 1999/07/27 12:04:59 1.11 @@ -211,7 +211,6 @@ * (see also mod_so). */ -void (*pre_command_line)(pool *pcommands); void (*pre_config)(pool *pconf, pool *plog, pool *ptemp); void (*open_logs)(pool *pconf, pool *plog, pool *ptemp, server_rec *); void (*post_config)(pool *pconf, pool *plog, pool *ptemp, server_rec *); @@ -334,7 +333,6 @@ void ap_setup_prelinked_modules(void); void ap_show_directives(void); void ap_show_modules(void); -void ap_pre_command_line_hook(pool *pcommands); void ap_pre_config_hook(pool *pconf, pool *plog, pool *ptemp); server_rec *ap_read_config(pool *conf_pool, pool *temp_pool, const char *config_name); void ap_open_logs_hook(pool *pconf, pool *plog, pool *ptemp, server_rec *s); 1.14 +1 -10 apache-2.0/mpm/src/main/http_config.c Index: http_config.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/http_config.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- http_config.c 1999/07/24 18:38:46 1.13 +++ http_config.c 1999/07/27 12:05:00 1.14 @@ -496,7 +496,7 @@ { if(m-register_hooks) { - if(ap_exists_config_define(SHOW_HOOKS)) + if(getenv(SHOW_HOOKS)) { printf(Registering hooks for %s\n,m-name); g_bDebugHooks=1; @@ -1435,15 +1435,6 @@ if (m-create_dir_config) ap_set_module_config(s-lookup_defaults, m, (*m-create_dir_config)(p, NULL)); -} - -void ap_pre_command_line_hook(pool *pcommands) -{ -module *m; - -for (m = top_module; m; m = m-next) - if (m-pre_command_line) - (*m-pre_command_line) (pcommands); } void ap_pre_config_hook(pool *pconf, pool *plog, pool *ptemp) 1.12 +0 -1 apache-2.0/mpm/src/main/http_core.c Index: http_core.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/http_core.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- http_core.c 1999/07/25 14:24:01 1.11 +++ http_core.c 1999/07/27 12:05:00 1.12 @@ -2649,7 +2649,6 @@ API_VAR_EXPORT module core_module = { STANDARD20_MODULE_STUFF, -NULL,/* pre_command_line */ NULL,/* pre_config */ NULL,/* post_config */ core_open_logs, /* open_logs */ 1.5 +0 -15 apache-2.0/mpm/src/main/http_main.c Index: http_main.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/http_main.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- http_main.c 1999/07/10 13:32:47 1.4 +++ http_main.c 1999/07/27 12:05:00 1.5 @@ -247,9 +247,7 @@ pool *ptemp; /* Pool for temporart config stuff */ pool *pcommands; /* Pool for -C and -c switches */ extern char *optarg; -extern int optind,optreset; - /* TODO: PATHSEPARATOR should be one of the os defines */ #define PATHSEPARATOR '/' if ((s = strrchr(argv[0], PATHSEPARATOR)) != NULL) { @@ -270,21 +268,8 @@ ap_server_post_read_config = ap_make_array(pcommands, 1, sizeof(char *)); ap_server_config_defines = ap_make_array
cvs commit: apache-2.0/mpm/src/os/beos beosd.c
dgaudet 99/07/26 00:03:10 Modified:mpm/src/main listen.c mpm/src/os/beos beosd.c Log: some bug fixes from David Submitted by: David Reid [EMAIL PROTECTED] Revision ChangesPath 1.4 +1 -1 apache-2.0/mpm/src/main/listen.c Index: listen.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/listen.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- listen.c 1999/06/29 02:49:26 1.3 +++ listen.c 1999/07/26 07:03:09 1.4 @@ -121,7 +121,7 @@ * * If no size is specified, use the kernel default. */ -#ifndef SO_SNDBUF +#ifdef SO_SNDBUF if (send_buffer_size) { if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *) send_buffer_size, sizeof(int)) 0) { 1.2 +0 -8 apache-2.0/mpm/src/os/beos/beosd.c Index: beosd.c === RCS file: /home/cvs/apache-2.0/mpm/src/os/beos/beosd.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- beosd.c 1999/07/12 22:51:13 1.1 +++ beosd.c 1999/07/26 07:03:09 1.2 @@ -79,19 +79,11 @@ } RAISE_SIGSTOP(DETACH); -#ifndef NO_SETSID if ((pgrp = setsid()) == -1) { perror(setsid); fprintf(stderr, %s: setsid failed\n, ap_server_argv0); exit(1); } -#else -if ((pgrp = setpgrp(getpid(), 0)) == -1) { - perror(setpgrp); - fprintf(stderr, %s: setpgrp failed\n, ap_server_argv0); - exit(1); -} -#endif /* close out the standard file descriptors */ if (freopen(/dev/null, r, stdin) == NULL) {
cvs commit: apache-2.0/mpm/src/os/beos - New directory
dgaudet 99/07/12 15:48:54 apache-2.0/mpm/src/os/beos - New directory
cvs commit: apache-2.0/mpm/src/os/beos Makefile.tmpl beosd.c beosd.h iol_socket.c iol_socket.h os-inline.c os.c os.h
dgaudet 99/07/12 15:51:17 Modified:mpm/src CHANGES Configure mpm/src/include ap_config.h httpd.h mpm/src/main util.c Added: mpm/src/os/beos Makefile.tmpl beosd.c beosd.h iol_socket.c iol_socket.h os-inline.c os.c os.h Log: commit David's beos port. Submitted by: David Reid [EMAIL PROTECTED] Revision ChangesPath 1.13 +2 -0 apache-2.0/mpm/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-2.0/mpm/src/CHANGES,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- CHANGES 1999/07/05 13:00:39 1.12 +++ CHANGES 1999/07/12 22:51:05 1.13 @@ -1,5 +1,7 @@ Changes with MPM +* MPM BEOS port. [David Reid [EMAIL PROTECTED]] + * Start to implement module-defined hooks that are a) fast and b) typesafe. Replace pre_connection module call with a register_hook call and implement pre_connection as a hook. The intent is that these hooks will 1.12 +2 -1 apache-2.0/mpm/src/Configure Index: Configure === RCS file: /home/cvs/apache-2.0/mpm/src/Configure,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- Configure 1999/07/11 14:49:03 1.11 +++ Configure 1999/07/12 22:51:06 1.12 @@ -729,7 +729,8 @@ OS='BeOS'; CFLAGS=$CFLAGS -DBEOS DEF_WANTHSREGEX=yes - ;; + OSDIR='os/beos' + ;; 4850-*.*) OS='NCR MP/RAS' CFLAGS=$CFLAGS -DSVR4 -DMPRAS 1.3 +3 -0 apache-2.0/mpm/src/include/ap_config.h Index: ap_config.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_config.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ap_config.h 1999/07/12 08:47:47 1.2 +++ ap_config.h 1999/07/12 22:51:08 1.3 @@ -877,6 +877,9 @@ #elif defined(BEOS) #include stddef.h +#include kernel/OS.h +#include kernel/image.h +#include sys/uio.h #define NO_WRITEV #define NO_KILLPG 1.6 +3 -0 apache-2.0/mpm/src/include/httpd.h Index: httpd.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/httpd.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- httpd.h 1999/07/04 09:13:32 1.5 +++ httpd.h 1999/07/12 22:51:09 1.6 @@ -86,6 +86,9 @@ #elif defined(WIN32) /* Set default for Windows file system */ #define HTTPD_ROOT /apache +#elif defined (BEOS) +/* Set the default for BeOS */ +#define HTTPD_ROOT /boot/home/apache #else #define HTTPD_ROOT /usr/local/apache #endif 1.2 +6 -1 apache-2.0/mpm/src/main/util.c Index: util.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/util.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- util.c1999/06/18 18:39:30 1.1 +++ util.c1999/07/12 22:51:10 1.2 @@ -1962,7 +1962,12 @@ struct hostent *p; /* ZZZ change to use AP funcs. */ -if (gethostname(str, sizeof(str) - 1) != 0) { +#ifdef BEOS +if (gethostname(str, sizeof(str) - 1) == 0) +#else +if (gethostname(str, sizeof(str) - 1) != 0) +#endif +{ perror(Unable to gethostname); exit(1); } 1.1 apache-2.0/mpm/src/os/beos/Makefile.tmpl Index: Makefile.tmpl === CFLAGS=$(OPTIM) $(CFLAGS1) $(EXTRA_CFLAGS) LIBS=$(EXTRA_LIBS) $(LIBS1) INCLUDES=$(INCLUDES1) $(INCLUDES0) $(EXTRA_INCLUDES) LDFLAGS=$(LDFLAGS1) $(EXTRA_LDFLAGS) OBJS= os.o beosd.o iol_socket.o LIB= libos.a all: $(LIB) $(LIB): $(OBJS) rm -f $@ ar cr $@ $(OBJS) $(RANLIB) $@ .c.o: $(CC) -c $(INCLUDES) $(CFLAGS) $ clean: rm -f $(OBJS) $(LIB) distclean: clean -rm -f Makefile # We really don't expect end users to use this rule. It works only with # gcc, and rebuilds Makefile.tmpl. You have to re-run Configure after # using it. depend: cp Makefile.tmpl Makefile.tmpl.bak \ sed -ne '1,/^# DO NOT REMOVE/p' Makefile.tmpl Makefile.new \ gcc -MM $(INCLUDES) $(CFLAGS) *.c Makefile.new \ sed -e '1,$$s: $(INCDIR)/: $$(INCDIR)/:g' \ -e '1,$$s: $(OSDIR)/: $$(OSDIR)/:g' Makefile.new \ Makefile.tmpl \ rm Makefile.new $(OBJS): Makefile # DO NOT REMOVE 1.1 apache-2.0/mpm/src/os/beos/beosd.c Index: beosd.c
cvs commit: apache-2.0/mpm/src/main buff.c
dgaudet 99/06/30 21:07:22 Modified:mpm/src/main buff.c Log: uh that was an easy one to fix... I should know better than to post saying I'll look at it later ;) Revision ChangesPath 1.7 +1 -1 apache-2.0/mpm/src/main/buff.c Index: buff.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/buff.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- buff.c1999/06/24 08:58:00 1.6 +++ buff.c1999/07/01 04:07:19 1.7 @@ -554,7 +554,7 @@ i = 0; total = 0; while (i nvec) { - rv = writev_with_errors(fb, vec, 2); + rv = writev_with_errors(fb, vec + i, nvec - i); if (rv 0) { return total ? -1 : total; }
cvs commit: apache-2.0/mpm/src/os/unix iol_socket.c
dgaudet 99/06/28 12:00:50 Modified:mpm/src/include ap_iol.h mpm/src/main iol_file.c mpm/src/os/unix iol_socket.c Log: - eliminate readv -- it's mostly useful with a full zero-copy setup - document the simple writev possible when system has no writev Revision ChangesPath 1.4 +8 -4 apache-2.0/mpm/src/include/ap_iol.h Index: ap_iol.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_iol.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ap_iol.h 1999/06/24 08:57:58 1.3 +++ ap_iol.h 1999/06/28 19:00:48 1.4 @@ -68,7 +68,7 @@ } ap_iol_option; /* -write, writev, read, readv guarantee they won't return EINTR. +write, writev, read guarantee they won't return EINTR. If no error occurs, they return the number of bytes read/written. @@ -88,12 +88,18 @@ Just to drive the point home again -- none of these functions guarantee they will read/write the entire length specified. -Note: timeout == 0 is non-blocking operation... which requires a lot +Note: timeout == 0 is non-blocking operation... which requires a lot of care if you're implementing filters. It may mean you have to keep state from one call to the next. The chunking filter will have an example of this. If you're not sure how to handle the state sitatuation you will want to return EINVAL when the timeout is set to 0. This may break various things... hopefully we'll be able to recover gracefully. + +Note: implementation tip: if your system doesn't have writev(), you +still have to implement a writev() method. However, since the +iol writev() is allowed to return a partial write, you can essentially +treat all writev()s as write(fd, vec[0].iov_base, vec[0].iov_len), +and the layers above will loop over the entire vector for you. */ struct ap_iol_methods { @@ -101,7 +107,6 @@ int (*write)(ap_iol *fd, const char *buf, int len); int (*writev)(ap_iol *fd, const struct iovec *vec, int nvec); int (*read)(ap_iol *fd, char *buf, int len); -int (*readv)(ap_iol *fd, struct iovec *vec, int nvec); int (*setopt)(ap_iol *fd, ap_iol_option opt, const void *value); int (*getopt)(ap_iol *fd, ap_iol_option opt, void *value); /* TODO: accept, connect, ... */ @@ -118,7 +123,6 @@ #define iol_write(iol, a, b) ((iol)-methods-write((iol), (a), (b))) #define iol_writev(iol, a, b) ((iol)-methods-writev((iol), (a), (b))) #define iol_read(iol, a, b) ((iol)-methods-read((iol), (a), (b))) -#define iol_readv(iol, a, b) ((iol)-methods-readv((iol), (a), (b))) #define iol_setopt(iol, a, b) ((iol)-methods-setopt((iol), (a), (b))) #define iol_getopt(iol, a, b) ((iol)-methods-getopt((iol), (a), (b))) 1.2 +0 -2 apache-2.0/mpm/src/main/iol_file.c Index: iol_file.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/iol_file.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- iol_file.c1999/06/24 08:58:00 1.1 +++ iol_file.c1999/06/28 19:00:49 1.2 @@ -81,7 +81,6 @@ method(write, (ap_iol *viol, const char *arg1, int arg2)) method(writev, (ap_iol *viol, const struct iovec *arg1, int arg2)) method(read, (ap_iol *viol, char *arg1, int arg2)) -method(readv, (ap_iol *viol, struct iovec *arg1, int arg2)) static int file_close(ap_iol *viol) { @@ -113,7 +112,6 @@ file_write, file_writev, file_read, -file_readv, file_setopt, file_getopt }; 1.2 +0 -2 apache-2.0/mpm/src/os/unix/iol_socket.c Index: iol_socket.c === RCS file: /home/cvs/apache-2.0/mpm/src/os/unix/iol_socket.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- iol_socket.c 1999/06/24 08:58:04 1.1 +++ iol_socket.c 1999/06/28 19:00:50 1.2 @@ -185,7 +185,6 @@ method(write, (ap_iol *viol, const char *arg1, int arg2), write, NULL, fdset) method(writev, (ap_iol *viol, const struct iovec *arg1, int arg2), writev, NULL, fdset) method(read, (ap_iol *viol, char *arg1, int arg2), read, fdset, NULL) -method(readv, (ap_iol *viol, struct iovec *arg1, int arg2), readv, fdset, NULL) static int unix_close(ap_iol *viol) { @@ -205,7 +204,6 @@ unix_write, unix_writev, unix_read, -unix_readv, unix_setopt, unix_getopt };
cvs commit: apache-2.0/mpm/src/main http_protocol.c
dgaudet 99/06/24 18:17:01 Modified:mpm/src/main http_protocol.c Log: random futzing around Revision ChangesPath 1.7 +9 -9 apache-2.0/mpm/src/main/http_protocol.c Index: http_protocol.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/http_protocol.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- http_protocol.c 1999/06/24 07:29:31 1.6 +++ http_protocol.c 1999/06/25 01:16:57 1.7 @@ -1364,15 +1364,15 @@ * It is more expensive to check the User-Agent than it is to just add the * bytes, so we haven't used the BrowserMatch feature here. */ -static void terminate_header(BUFF *client) +static void terminate_header(request_rec *r) { long int bs; -ap_bgetopt(client, BO_BYTECT, bs); +ap_bgetopt(r-connection-client, BO_BYTECT, bs); if (bs = 255 bs = 257) -ap_bputs(X-Pad: avoid browser bug\015\012, client); +ap_rputs(X-Pad: avoid browser bug\015\012, r); -ap_bputs(\015\012, client); /* Send the terminating empty line */ +ap_rputs(\015\012, r); /* Send the terminating empty line */ } /* Build the Allow field-value from the request handler method mask. @@ -1440,7 +1440,7 @@ ap_table_do((int (*) (void *, const char *, const char *)) ap_send_header_field, (void *) r, r-headers_out, NULL); -terminate_header(r-connection-client); +terminate_header(r); ap_bsetopt(r-connection-client, BO_BYTECT, zero); @@ -1544,7 +1544,7 @@ ap_table_do((int (*) (void *, const char *, const char *)) ap_send_header_field, (void *) r, r-headers_out, NULL); -terminate_header(r-connection-client); +terminate_header(r); ap_bsetopt(r-connection-client, BO_BYTECT, zero); @@ -2186,7 +2186,7 @@ int n; if (r-connection-aborted) -return -1; +return EOF; n = ap_bwrite(r-connection-client, buf, nbyte); if (n 0) { @@ -2196,7 +2196,7 @@ ap_bsetflag(r-connection-client, B_EOUT, 1); r-connection-aborted = 1; } -return -1; +return EOF; } SET_BYTES_SENT(r); return n; @@ -2344,7 +2344,7 @@ Proxy-Authenticate, NULL); -terminate_header(r-connection-client); +terminate_header(r); return; }
cvs commit: apache-2.0/mpm/src/modules/mpm/prefork Makefile.tmpl prefork.c
dgaudet 99/06/24 18:25:12 Modified:mpm/src/include httpd.h mpm/src/main Makefile.tmpl http_config.c http_core.c mpm/src/modules/mpm/prefork Makefile.tmpl prefork.c Added: mpm/src/include ap_listen.h mpm/src/main listen.c Log: - ap_listen.h: interface to Listen, ListenBackLog and SendBufferSize directives - I didn't update mpmt_pthread with this change, it shouldn't be hard to fix. - maybe this isn't the best way to abstract listen... but it gets a little bit of the job done Revision ChangesPath 1.3 +0 -11 apache-2.0/mpm/src/include/httpd.h Index: httpd.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/httpd.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- httpd.h 1999/06/20 11:19:45 1.2 +++ httpd.h 1999/06/25 01:25:06 1.3 @@ -666,7 +666,6 @@ typedef struct conn_rec conn_rec; typedef struct server_rec server_rec; typedef struct request_rec request_rec; -typedef struct listen_rec listen_rec; #include util_uri.h @@ -921,7 +920,6 @@ int keep_alive_timeout; /* Seconds we'll wait for another request */ int keep_alive_max; /* Maximum requests per connection */ int keep_alive; /* Use persistent connections? */ -int send_buffer_size;/* size of TCP send buffer (in bytes) */ char *path; /* Pathname for ServerPath */ int pathlen; /* Length of path */ @@ -937,15 +935,6 @@ int limit_req_fields;/* limit on number of request header fields */ }; -/* These are more like real hosts than virtual hosts */ -struct listen_rec { -listen_rec *next; -struct sockaddr_in local_addr; /* local IP address and port */ -int fd; -int used; /* Only used during restart */ -int index;/* index into the listenfds array */ -/* more stuff here, like which protocol is bound to the port */ -}; /* Prototypes for utilities... util.c. */ 1.1 apache-2.0/mpm/src/include/ap_listen.h Index: ap_listen.h === /* * Copyright (c) 1996-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 *[EMAIL PROTECTED] * * 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
cvs commit: apache-2.0/mpm/src/modules/mpm/prefork prefork.c
dgaudet 99/06/24 00:29:33 Modified:mpm/src/include buff.h mpm/src/main buff.c http_protocol.c iol_unix.c mpm/src/modules/mpm/prefork prefork.c Log: new-fangled BUFF... this could easily be broken, but hey, the one that was in here before was broken in different ways... I've served up a few pages with this one. Revision ChangesPath 1.4 +38 -6 apache-2.0/mpm/src/include/buff.h Index: buff.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/buff.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- buff.h1999/06/18 23:34:58 1.3 +++ buff.h1999/06/24 07:29:29 1.4 @@ -65,6 +65,37 @@ #include stdarg.h #include ap_iol.h +/* +A BUFF is an i/o object which can be used in any of the following +output modes: + +blocking, buffered +blocking, buffered, HTTP-chunked +blocking, unbuffered +blocking, unbuffered, HTTP-chunked +non-blocking, unbuffered +non-blocking, unbuffered, HTTP-chunked + +In all the blocking modes, a bwrite(fb, buf, len) will return less +than len only in an error state. The error may be deferred until +the next use of fb. + +In the non-blocking, chunked mode, the caller of bwrite() makes a +guarantee that if a partial write occurs, they will call back later +with at least as many bytes to write -- prior to disabling chunking. +This is a protocol correctness requirement -- the chunk length may +already have hit the wire, and is in essence committed. + +bputc, bputs, bvputs, and bprintf are supported only in the buffered +modes. + +The following input modes are supported: + +blocking, buffered +blocking, unbuffered +non-blocking, unbuffered +*/ + /* Reading is buffered */ #define B_RD (1) /* Writing is buffered */ @@ -82,16 +113,12 @@ #undef B_ERROR #endif #define B_ERROR (48) -/* TODO: implement chunked encoding as a layer */ +/* Use chunked writing */ +#define B_CHUNK (64) /* bflush() if a read would block */ /* TODO: #define B_SAFEREAD (128) */ -/* buffer is a socket */ -#define B_SOCKET (256) - /* caller expects non-blocking behaviour */ #define B_NONBLOCK (512) -/* non-blocking bit set on fd */ -#define B_NONBLOCK_SET (1024) /* TODO: implement a ebcdic/ascii conversion layers */ @@ -103,10 +130,15 @@ unsigned char *inptr;/* pointer to next location to read */ int incnt; /* number of bytes left to read from input buffer; * always 0 if had a read error */ +int outchunk; /* location of chunk header when chunking */ int outcnt; /* number of byte put in output buffer */ unsigned char *inbase; unsigned char *outbase; int bufsiz; +int chunk_overcommit;/* when we start a chunk and get a partial write we + * keep track of the #remaining bytes in the chunk + * here + */ void (*error) (BUFF *fb, int op, void *data); void *error_data; long int bytes_sent; /* number of bytes actually written */ 1.5 +266 -143 apache-2.0/mpm/src/main/buff.c Index: buff.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/buff.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- buff.c1999/06/20 12:25:54 1.4 +++ buff.c1999/06/24 07:29:31 1.5 @@ -76,6 +76,17 @@ #define DEFAULT_BUFSIZE (4096) #endif +/* the maximum size of any chunk */ +#ifndef MAX_CHUNK_SIZE +#define MAX_CHUNK_SIZE (0x8000) +#endif + +/* This must be enough to represent MAX_CHUNK_SIZE in hex, + * plus two extra characters. + */ +#ifndef CHUNK_HEADER_SIZE +#define CHUNK_HEADER_SIZE (6) +#endif /* bwrite()s of greater than this size can result in a large_write() call, * which can result in a writev(). It's a little more work to set up the @@ -88,7 +99,6 @@ #define LARGE_WRITE_THRESHOLD 31 #endif - /* * Buffered I/O routines. * These are a replacement for the stdio routines. @@ -136,15 +146,18 @@ fb = ap_palloc(p, sizeof(BUFF)); fb-pool = p; fb-bufsiz = DEFAULT_BUFSIZE; -fb-flags = flags (B_RDWR | B_SOCKET); +fb-flags = flags B_RDWR; if (flags B_RD) fb-inbase = ap_palloc(p, fb-bufsiz); else fb-inbase = NULL; +/* overallocate so that we can put a chunk trailer of CRLF into this + * buffer... and possibly the beginning of a new chunk + */ if (flags B_WR) - fb-outbase
cvs commit: apache-2.0/mpm/src/modules/mpm/prefork .cvsignore
dgaudet 99/06/24 00:29:59 Added: mpm/src/modules/mpm/prefork .cvsignore Log: ignore Makefile Revision ChangesPath 1.1 apache-2.0/mpm/src/modules/mpm/prefork/.cvsignore Index: .cvsignore === Makefile
cvs commit: apache-2.0/mpm/src/os/unix iol_socket.c iol_socket.h Makefile.tmpl
dgaudet 99/06/24 01:58:06 Modified:mpm/src/include ap_iol.h buff.h mpm/src/main Makefile.tmpl alloc.c buff.c mpm/src/modules/mpm/prefork prefork.c mpm/src/os/unix Makefile.tmpl Added: mpm/src/main iol_file.c mpm/src/os/unix iol_socket.c iol_socket.h Removed: mpm/src/main iol_unix.c Log: I think this is a better i/o layer interface. - move main/iol_unix.c to os/unix/iol_socket.c - create main/iol_file.c ... use APR methods eventually - remove iol_data from ap_iol, instead the ap_iol is just embedded into the private data of the i/o layer - remove ap_bpushfd(), replace with ap_bpush_iol() Revision ChangesPath 1.3 +6 -4 apache-2.0/mpm/src/include/ap_iol.h Index: ap_iol.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_iol.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ap_iol.h 1999/06/19 20:40:16 1.2 +++ ap_iol.h 1999/06/24 08:57:58 1.3 @@ -107,8 +107,10 @@ /* TODO: accept, connect, ... */ }; +/* it is expected that each io layer will extend this structure as they +require; they must only ensure that the methods pointer remains in +the indicated position. */ struct ap_iol { -void *iol_data; const ap_iol_methods *methods; }; @@ -120,8 +122,8 @@ #define iol_setopt(iol, a, b) ((iol)-methods-setopt((iol), (a), (b))) #define iol_getopt(iol, a, b) ((iol)-methods-getopt((iol), (a), (b))) -/* clean this up later as well */ - -void unix_attach_fd(ap_iol *, int fd); +/* the file iol */ +/* TODO: use APR instead of unix semantics for this */ +ap_iol *ap_open_file(const char *name, int flags, int mask); #endif 1.5 +3 -2 apache-2.0/mpm/src/include/buff.h Index: buff.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/buff.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- buff.h1999/06/24 07:29:29 1.4 +++ buff.h1999/06/24 08:57:58 1.5 @@ -145,7 +145,7 @@ ap_pool *pool; -ap_iol iol; +ap_iol *iol; }; /* Options to bset/getopt */ @@ -155,7 +155,8 @@ /* Stream creation and modification */ API_EXPORT(BUFF *) ap_bcreate(pool *p, int flags); -API_EXPORT(void) ap_bpushfd(BUFF *fb, int fd); + +API_EXPORT(void) ap_bpush_iol(BUFF *fb, ap_iol *iol); /* XXX - unused right now - mvsk */ API_EXPORT(BUFF *) ap_bopenf(pool *a, const char *name, int flg, int mode); 1.6 +1 -1 apache-2.0/mpm/src/main/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/main/Makefile.tmpl,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Makefile.tmpl 1999/06/20 23:49:32 1.5 +++ Makefile.tmpl 1999/06/24 08:58:00 1.6 @@ -11,7 +11,7 @@ http_config.o http_core.o http_log.o \ http_main.o http_protocol.o http_request.o http_vhost.o \ util.o util_date.o util_script.o util_uri.o util_md5.o \ - rfc1413.o http_connection.o iol_unix.o + rfc1413.o http_connection.o iol_file.o .c.o: $(CC) -c $(INCLUDES) $(CFLAGS) $ 1.5 +4 -0 apache-2.0/mpm/src/main/alloc.c Index: alloc.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/alloc.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- alloc.c 1999/06/22 22:26:10 1.4 +++ alloc.c 1999/06/24 08:58:00 1.5 @@ -2370,6 +2370,9 @@ enum kill_conditions kill_how, BUFF **pipe_in, BUFF **pipe_out, BUFF **pipe_err) { +return 0; +/* TODO: need to abstract the spawning stuff in a more clean manner */ +#if 0 #ifdef WIN32 SECURITY_ATTRIBUTES sa = {0}; HANDLE hPipeOutputRead = NULL; @@ -2588,6 +2591,7 @@ #endif return pid; +#endif } static void free_proc_chain(struct process_chain *procs) 1.6 +13 -14apache-2.0/mpm/src/main/buff.c Index: buff.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/buff.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- buff.c1999/06/24 07:29:31 1.5 +++ buff.c1999/06/24 08:58:00 1.6 @@ -177,17 +177,16 @@ { BUFF *fb = v; -iol_close(fb-iol); +iol_close(fb-iol); } /* * Push some I/O file descriptors onto the stream */ -API_EXPORT(void) ap_bpushfd(BUFF *fb, APRFile fd) +API_EXPORT(void) ap_bpush_iol
cvs commit: apache-2.0/mpm/src/os/unix Makefile.tmpl
dgaudet 99/06/24 01:59:00 Modified:mpm/src/main Makefile.tmpl mpm/src/modules/mpm/prefork Makefile.tmpl mpm/src/os/unix Makefile.tmpl Log: depends Revision ChangesPath 1.7 +1 -1 apache-2.0/mpm/src/main/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/main/Makefile.tmpl,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Makefile.tmpl 1999/06/24 08:58:00 1.6 +++ Makefile.tmpl 1999/06/24 08:58:56 1.7 @@ -143,7 +143,7 @@ $(INCDIR)/http_config.h $(INCDIR)/http_log.h \ $(INCDIR)/http_vhost.h $(INCDIR)/http_protocol.h \ $(INCDIR)/http_core.h -iol_unix.o: iol_unix.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ +iol_file.o: iol_file.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ 1.2 +10 -7 apache-2.0/mpm/src/modules/mpm/prefork/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/modules/mpm/prefork/Makefile.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile.tmpl 1999/06/24 01:57:58 1.1 +++ Makefile.tmpl 1999/06/24 08:58:58 1.2 @@ -55,12 +55,15 @@ $(OBJS) $(OBJS_PIC): Makefile # DO NOT REMOVE -prefork.o: prefork.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ - $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ - $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ - $(INCDIR)/ap.h $(INCDIR)/apr.h $(INCDIR)/util_uri.h \ - $(INCDIR)/http_main.h $(INCDIR)/http_log.h $(INCDIR)/http_config.h \ +prefork.o: prefork.c $(INCDIR)/httpd.h \ + $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \ + $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ + $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h \ + $(INCDIR)/hsregex.h $(INCDIR)/alloc.h \ + $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ + $(INCDIR)/ap.h $(INCDIR)/apr.h \ + $(INCDIR)/util_uri.h $(INCDIR)/http_main.h \ + $(INCDIR)/http_log.h $(INCDIR)/http_config.h \ $(INCDIR)/http_core.h $(INCDIR)/http_connection.h \ $(INCDIR)/scoreboard_prefork.h $(INCDIR)/ap_mpm.h \ - $(OSDIR)/unixd.h + $(OSDIR)/unixd.h $(OSDIR)/iol_socket.h 1.6 +7 -0 apache-2.0/mpm/src/os/unix/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/os/unix/Makefile.tmpl,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Makefile.tmpl 1999/06/24 08:58:04 1.5 +++ Makefile.tmpl 1999/06/24 08:58:59 1.6 @@ -38,6 +38,13 @@ $(OBJS): Makefile # DO NOT REMOVE +iol_socket.o: iol_socket.c $(INCDIR)/httpd.h \ + $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \ + $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ + $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h \ + $(INCDIR)/hsregex.h $(INCDIR)/alloc.h $(INCDIR)/buff.h \ + $(INCDIR)/ap_iol.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ + $(INCDIR)/util_uri.h os-aix-dso.o: os-aix-dso.c os-inline.o: os-inline.c $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h \
cvs commit: apache-2.0/mpm/src/main http_connection.c mpm_prefork.c
dgaudet 99/06/20 16:09:54 Modified:mpm/src/include ap_mpm.h mpm/src/main http_connection.c mpm_prefork.c Log: ap_mpm_graceful_stop - ap_graceful_stop_signalled Revision ChangesPath 1.4 +1 -1 apache-2.0/mpm/src/include/ap_mpm.h Index: ap_mpm.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_mpm.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ap_mpm.h 1999/06/20 22:05:13 1.3 +++ ap_mpm.h 1999/06/20 23:09:51 1.4 @@ -112,7 +112,7 @@ /* predicate indicating if a graceful stop has been requested ... used by the connection loop */ -API_EXPORT(int) ap_mpm_graceful_stop(void); +API_EXPORT(int) ap_graceful_stop_signalled(void); /* a mutex which synchronizes threads within one process */ typedef struct ap_thread_mutex ap_thread_mutex; 1.4 +1 -1 apache-2.0/mpm/src/main/http_connection.c Index: http_connection.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/http_connection.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- http_connection.c 1999/06/19 20:23:37 1.3 +++ http_connection.c 1999/06/20 23:09:53 1.4 @@ -206,7 +206,7 @@ ap_destroy_pool(r-pool); - if (ap_mpm_graceful_stop()) { + if (ap_graceful_stop_signalled()) { /* XXX: hey wait, this should do a lingering_close! */ ap_bclose(c-client); return; 1.7 +3 -3 apache-2.0/mpm/src/main/mpm_prefork.c Index: mpm_prefork.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/mpm_prefork.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- mpm_prefork.c 1999/06/20 22:59:51 1.6 +++ mpm_prefork.c 1999/06/20 23:09:53 1.7 @@ -2377,7 +2377,7 @@ requests_this_child = ap_max_requests_per_child = 1; } -int ap_mpm_graceful_stop(void) +int ap_graceful_stop_signalled(void) { ap_sync_scoreboard_image(); if (deferred_die || @@ -2431,7 +2431,7 @@ } #endif -while (!ap_mpm_graceful_stop()) { +while (!ap_graceful_stop_signalled()) { BUFF *conn_io; /* Prepare to receive a SIGUSR1 due to graceful restart so that @@ -2581,7 +2581,7 @@ } } - if (ap_mpm_graceful_stop()) { + if (ap_graceful_stop_signalled()) { clean_child_exit(0); } usr1_just_die = 1;
cvs commit: apache-2.0/mpm/src Configure
dgaudet 99/06/20 16:14:18 Modified:mpm/src Configure Log: disable this while jim is working... no mpm/Makefile.tmpl yet Revision ChangesPath 1.5 +2 -1 apache-2.0/mpm/src/Configure Index: Configure === RCS file: /home/cvs/apache-2.0/mpm/src/Configure,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- Configure 1999/06/20 22:25:24 1.4 +++ Configure 1999/06/20 23:14:17 1.5 @@ -1594,7 +1594,8 @@ ## Choose the right MPM method ## TODO:: More later -SUBDIRS=mpm/$RULE_MPM_METHOD $SUBDIRS +#SUBDIRS=mpm/$RULE_MPM_METHOD $SUBDIRS +SUBDIRS=$SUBDIRS ## Add in the Expat library if needed/wanted.
cvs commit: apache-2.0/mpm/src/os/unix Makefile.tmpl
dgaudet 99/06/20 16:14:36 Modified:mpm/src Makefile.tmpl mpm/src/ap Makefile.tmpl mpm/src/main Makefile.tmpl mpm/src/modules/standard Makefile.tmpl mpm/src/os/unix Makefile.tmpl Log: depends Revision ChangesPath 1.3 +4 -3 apache-2.0/mpm/src/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/Makefile.tmpl,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Makefile.tmpl 1999/06/18 19:07:59 1.2 +++ Makefile.tmpl 1999/06/20 23:14:29 1.3 @@ -124,9 +124,10 @@ buildmark.o: buildmark.c include/ap_config.h include/ap_mmn.h \ include/ap_config_auto.h os/unix/os.h os/unix/os-inline.c \ include/ap_ctype.h include/hsregex.h include/httpd.h include/alloc.h \ - include/buff.h include/ap.h include/apr.h include/util_uri.h + include/buff.h include/ap_iol.h include/ap.h include/apr.h \ + include/util_uri.h modules.o: modules.c include/httpd.h include/ap_config.h \ include/ap_mmn.h include/ap_config_auto.h os/unix/os.h \ os/unix/os-inline.c include/ap_ctype.h include/hsregex.h \ - include/alloc.h include/buff.h include/ap.h include/apr.h \ - include/util_uri.h include/http_config.h + include/alloc.h include/buff.h include/ap_iol.h include/ap.h \ + include/apr.h include/util_uri.h include/http_config.h 1.4 +14 -10apache-2.0/mpm/src/ap/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/ap/Makefile.tmpl,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Makefile.tmpl 1999/06/19 20:41:59 1.3 +++ Makefile.tmpl 1999/06/20 23:14:30 1.4 @@ -39,16 +39,19 @@ rm Makefile.new # DO NOT REMOVE +ap_buf.o: ap_buf.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \ + $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \ + $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/ap_buf.h ap_cpystrn.o: ap_cpystrn.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ - $(INCDIR)/util_uri.h + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ + $(INCDIR)/ap.h $(INCDIR)/apr.h $(INCDIR)/util_uri.h ap_execve.o: ap_execve.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ - $(INCDIR)/util_uri.h + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ + $(INCDIR)/ap.h $(INCDIR)/apr.h $(INCDIR)/util_uri.h ap_fnmatch.o: ap_fnmatch.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \ $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/fnmatch.h @@ -63,15 +66,16 @@ ap_signal.o: ap_signal.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ - $(INCDIR)/util_uri.h + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ + $(INCDIR)/ap.h $(INCDIR)/apr.h $(INCDIR)/util_uri.h ap_slack.o: ap_slack.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ - $(INCDIR)/util_uri.h $(INCDIR)/http_log.h + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ + $(INCDIR)/ap.h $(INCDIR)/apr.h $(INCDIR)/util_uri.h \ + $(INCDIR)/http_log.h ap_snprintf.o: ap_snprintf.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ - $(INCDIR)/util_uri.h + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap_iol.h \ + $(INCDIR)/ap.h $(INCDIR)/apr.h $(INCDIR)/util_uri.h 1.4 +64 -48apache-2.0/mpm/src/main/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/main/Makefile.tmpl,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- Makefile.tmpl 1999/06/18 23:34:59 1.3 +++ Makefile.tmpl 1999/06/20 23:14:31 1.4 @@ -61,40 +61,44 @@ alloc.o: alloc.c $(INCDIR)/httpd.h
cvs commit: apache-2.0/mpm/src/ap ap_buf.c
dgaudet 99/06/20 12:34:29 Modified:mpm/src/include ap_buf.h mpm/src/ap ap_buf.c Log: some other stuff left over from hacking zero-copy Revision ChangesPath 1.2 +4 -0 apache-2.0/mpm/src/include/ap_buf.h Index: ap_buf.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_buf.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ap_buf.h 1999/06/19 20:42:01 1.1 +++ ap_buf.h 1999/06/20 19:34:28 1.2 @@ -73,6 +73,7 @@ struct ap_buf { ap_bufel *head; ap_bufel **tail; +unsigned size; }; /* allocate a bufel */ @@ -93,5 +94,8 @@ /* create an iovec of the elements in buf... return number of elements used */ API_EXPORT(int) ap_buf_to_iovec(ap_buf *, struct iovec *vec, int nvec); + +/* catenate buf b onto buf a, buf b is empty after this */ +API_EXPORT(void) ap_buf_catenate(ap_buf *a, ap_buf *b); #endif 1.2 +15 -0 apache-2.0/mpm/src/ap/ap_buf.c Index: ap_buf.c === RCS file: /home/cvs/apache-2.0/mpm/src/ap/ap_buf.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ap_buf.c 1999/06/19 20:42:00 1.1 +++ ap_buf.c 1999/06/20 19:34:29 1.2 @@ -76,12 +76,14 @@ { b-head = NULL; b-tail = b-head; +b-size = 0; } API_EXPORT(void) ap_buf_append(ap_buf *b, ap_bufel *e) { e-next = *b-tail; b-tail = e-next; +b-size += e-end - e-start; } API_EXPORT(void) ap_buf_consume(ap_buf *b, int nbytes) @@ -90,6 +92,7 @@ ap_bufel *n; int amt; +b-size -= nbytes; e = b-head; while (e nbytes) { amt = e-end - e-start; @@ -123,4 +126,16 @@ ++vec; } return vec - orig; +} + +API_EXPORT(void) ap_buf_catenate(ap_buf *a, ap_buf *b) +{ +if (b-head) { + *a-tail = b-head; + a-tail = b-tail; + b-head = NULL; + b-tail = b-head; + a-size += b-size; + b-size = 0; +} }
cvs commit: apache-2.0/mpm/src/main alloc.c http_config.c mpm_prefork.c
dgaudet 99/06/20 14:12:51 Modified:mpm/src CHANGES Configuration.mpm Configure mpm/src/include ap_mpm.h mpm/src/main alloc.c http_config.c mpm_prefork.c Log: crude ap_thread_mutex abstraction Revision ChangesPath 1.6 +3 -0 apache-2.0/mpm/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-2.0/mpm/src/CHANGES,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- CHANGES 1999/06/20 12:29:18 1.5 +++ CHANGES 1999/06/20 21:12:47 1.6 @@ -1,5 +1,8 @@ Changes with MPM +* Crude ap_thread_mutex abstraction so that we get the pthread stuff out + of alloc.c for now. [Dean Gaudet] + * Handle partial large writes correctly. [Ben Laurie] 1.7 +1 -1 apache-2.0/mpm/src/Configuration.mpm Index: Configuration.mpm === RCS file: /home/cvs/apache-2.0/mpm/src/Configuration.mpm,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Configuration.mpm 1999/06/20 15:59:56 1.6 +++ Configuration.mpm 1999/06/20 21:12:47 1.7 @@ -1,4 +1,4 @@ -EXTRA_CFLAGS= -Wall #-pthread -D_THREAD_SAFE # Uncomment for FreeBSD +EXTRA_CFLAGS= -Wall EXTRA_LDFLAGS= EXTRA_LIBS= EXTRA_INCLUDES= 1.3 +1 -1 apache-2.0/mpm/src/Configure Index: Configure === RCS file: /home/cvs/apache-2.0/mpm/src/Configure,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Configure 1999/06/18 19:20:18 1.2 +++ Configure 1999/06/20 21:12:48 1.3 @@ -426,7 +426,7 @@ *-linux2) DEF_WANTHSREGEX=yes OS='Linux' - CFLAGS=$CFLAGS -DLINUX=2 -pthread + CFLAGS=$CFLAGS -DLINUX=2 LIBS=$LIBS -lm ;; *-linux1) 1.2 +7 -0 apache-2.0/mpm/src/include/ap_mpm.h Index: ap_mpm.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_mpm.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ap_mpm.h 1999/06/18 18:39:29 1.1 +++ ap_mpm.h 1999/06/20 21:12:49 1.2 @@ -66,6 +66,13 @@ used by the connection loop */ API_EXPORT(int) ap_mpm_graceful_stop(void); +/* a mutex which synchronizes threads within one process */ +typedef struct ap_thread_mutex ap_thread_mutex; +API_EXPORT(ap_thread_mutex *) ap_thread_mutex_new(void); +API_EXPORT(void) ap_thread_mutex_lock(ap_thread_mutex *); +API_EXPORT(void) ap_thread_mutex_unlock(ap_thread_mutex *); +API_EXPORT(void) ap_thread_mutex_destroy(ap_thread_mutex *); + #ifdef HAS_OTHER_CHILD /* * register an other_child -- a child which the main loop keeps track of 1.2 +19 -14apache-2.0/mpm/src/main/alloc.c Index: alloc.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/alloc.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- alloc.c 1999/06/18 18:39:29 1.1 +++ alloc.c 1999/06/20 21:12:49 1.2 @@ -64,9 +64,9 @@ #include httpd.h #include http_log.h +#include ap_mpm.h #include stdarg.h -#include pthread.h #ifdef OS2 #define INCL_DOS @@ -209,7 +209,7 @@ static union block_hdr *block_freelist = NULL; -static pthread_mutex_t alloc_mutex = PTHREAD_MUTEX_INITIALIZER; +static ap_thread_mutex *alloc_mutex; #ifdef POOL_DEBUG static char *known_stack_point; static int stack_direction; @@ -343,7 +343,7 @@ if (blok == NULL) return; /* Sanity check --- freeing empty pool? */ -(void) pthread_mutex_lock(alloc_mutex); +(void) ap_thread_mutex_lock(alloc_mutex); old_free_list = block_freelist; block_freelist = blok; @@ -377,7 +377,7 @@ num_blocks_freed += num_blocks; #endif -(void) pthread_mutex_unlock(alloc_mutex); +(void) ap_thread_mutex_unlock(alloc_mutex); #endif } @@ -426,9 +426,9 @@ { union block_hdr *blok; -(void) pthread_mutex_lock(alloc_mutex); +(void) ap_thread_mutex_lock(alloc_mutex); blok = new_block(min_size); -(void) pthread_mutex_unlock(alloc_mutex); +(void) ap_thread_mutex_unlock(alloc_mutex); return blok; } @@ -473,7 +473,7 @@ union block_hdr *blok; root_pool *new_pool; -(void) pthread_mutex_lock(alloc_mutex); +(void) ap_thread_mutex_lock(alloc_mutex); blok = new_block(ROOT_HDR_BYTES); new_pool = (root_pool *) blok-h.first_avail; @@ -487,7 +487,7 @@ new_pool-p.first = new_pool-p.last = blok; new_pool-p.thread_root
cvs commit: apache-2.0/mpm/src/main alloc.c mpm_prefork.c
dgaudet 99/06/20 14:46:14 Modified:mpm/src CHANGES mpm/src/include alloc.h mpm/src/main alloc.c mpm_prefork.c Log: remove 1.3 timeout code; SIGUSR1/SIGHUP/SIGTERM working again Revision ChangesPath 1.7 +3 -0 apache-2.0/mpm/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-2.0/mpm/src/CHANGES,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- CHANGES 1999/06/20 21:12:47 1.6 +++ CHANGES 1999/06/20 21:46:11 1.7 @@ -1,5 +1,8 @@ Changes with MPM +* mpm_prefork: throw away all the alarm/timeout crud; and clean up the + signal handling for the new world order. [Dean Gaudet] + * Crude ap_thread_mutex abstraction so that we get the pthread stuff out of alloc.c for now. [Dean Gaudet] 1.2 +0 -22 apache-2.0/mpm/src/include/alloc.h Index: alloc.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/alloc.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- alloc.h 1999/06/18 18:39:27 1.1 +++ alloc.h 1999/06/20 21:46:12 1.2 @@ -287,10 +287,6 @@ * * Cleanups are identified for purposes of finding running them off by the * plain_cleanup and data, which should presumably be unique. - * - * NB any code which invokes register_cleanup or kill_cleanup directly - * is a critical section which should be guarded by block_alarms() and - * unblock_alarms() below... */ API_EXPORT(void) ap_register_cleanup(pool *p, void *data, @@ -303,24 +299,6 @@ /* A do-nothing cleanup, for register_cleanup; it's faster to do * things this way than to test for NULL. */ API_EXPORT_NONSTD(void) ap_null_cleanup(void *data); - -/* The time between when a resource is actually allocated, and when it - * its cleanup is registered is a critical section, during which the - * resource could leak if we got interrupted or timed out. So, anything - * which registers cleanups should bracket resource allocation and the - * cleanup registry with these. (This is done internally by run_cleanup). - * - * NB they are actually implemented in http_main.c, since they are bound - * up with timeout handling in general... - */ - -#ifdef TPF -#define ap_block_alarms() (0) -#define ap_unblock_alarms() (0) -#else -API_EXPORT(void) ap_block_alarms(void); -API_EXPORT(void) ap_unblock_alarms(void); -#endif /* TPF */ /* Common cases which want utility support.. * the note_cleanups_for_foo routines are for 1.3 +4 -4 apache-2.0/mpm/src/main/alloc.c Index: alloc.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/alloc.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- alloc.c 1999/06/20 21:12:49 1.2 +++ alloc.c 1999/06/20 21:46:12 1.3 @@ -303,7 +303,7 @@ #define test_is_free(_x) #endif -/* Free a chain of blocks --- must be called with alarms blocked. */ +/* Free a chain of blocks --- must be called with mutex held. */ #ifdef POOL_DEBUG #define reset_block(b) do { \ test_is_free(b); \ @@ -383,7 +383,7 @@ /* Get a new block, from our own free list if possible, from the system - * if necessary. Must be called with alarms blocked. + * if necessary. Must be called with mutex held. */ static union block_hdr *new_block(int min_size) @@ -873,8 +873,8 @@ * until all the output is done. * * Note that this is completely safe because nothing else can - * allocate in this pool while ap_psprintf is running. alarms are - * blocked, and the only thing outside of alloc.c that's invoked + * allocate in this pool while ap_psprintf is running. + * The only thing outside of alloc.c that's invoked * is ap_vformatter -- which was purposefully written to be * self-contained with no callouts. */ 1.5 +21 -348 apache-2.0/mpm/src/main/mpm_prefork.c Index: mpm_prefork.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/mpm_prefork.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- mpm_prefork.c 1999/06/20 21:12:50 1.4 +++ mpm_prefork.c 1999/06/20 21:46:13 1.5 @@ -82,7 +82,6 @@ * TODO: behave like apache-1.3... here's a short list of things I think * TODO: need cleaning up still: * TODO: - use ralf's mm stuff for the shared mem and mutexes - * TODO: - eliminate the timeout stuff... 2.0 timeouts are part of the BUFF * TODO: - abstract the Listen stuff, it's going to be common with other MPM * TODO: - clean up scoreboard stuff when we figure out how
cvs commit: apache-2.0/mpm/src/os/unix unixd.c unixd.h Makefile.tmpl
dgaudet 99/06/20 15:59:53 Modified:mpm/src CHANGES mpm/src/include http_config.h mpm/src/main mpm_prefork.c mpm/src/os/unix Makefile.tmpl Added: mpm/src/os/unix unixd.c unixd.h Log: detach, set_group_privs, and such... these will be common amongst the unix MPMs, so split them off into os/unix/unixd.[ch]. Revision ChangesPath 1.8 +3 -0 apache-2.0/mpm/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-2.0/mpm/src/CHANGES,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- CHANGES 1999/06/20 21:46:11 1.7 +++ CHANGES 1999/06/20 22:59:49 1.8 @@ -1,5 +1,8 @@ Changes with MPM +* os/unix/unixd.[ch]: detach, setuid, setgid, stuff which will be common + amongst the unix MPMs + * mpm_prefork: throw away all the alarm/timeout crud; and clean up the signal handling for the new world order. [Dean Gaudet] 1.2 +13 -13apache-2.0/mpm/src/include/http_config.h Index: http_config.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/http_config.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- http_config.h 1999/06/18 18:39:28 1.1 +++ http_config.h 1999/06/20 22:59:50 1.2 @@ -311,6 +311,19 @@ /* for implementing subconfigs and customized config files */ API_EXPORT(const char *) ap_srm_command_loop(cmd_parms *parms, void *config); +/* ap_check_cmd_context() definitions: */ +API_EXPORT(const char *) ap_check_cmd_context(cmd_parms *cmd, unsigned forbidden); + +/* ap_check_cmd_context(): Forbidden in: */ +#define NOT_IN_VIRTUALHOST 0x01 /* Virtualhost */ +#define NOT_IN_LIMIT 0x02 /* Limit */ +#define NOT_IN_DIRECTORY 0x04 /* Directory */ +#define NOT_IN_LOCATION0x08 /* Location */ +#define NOT_IN_FILES 0x10 /* Files */ +#define NOT_IN_DIR_LOC_FILE (NOT_IN_DIRECTORY|NOT_IN_LOCATION|NOT_IN_FILES) /* Directory/Location/Files*/ +#define GLOBAL_ONLY (NOT_IN_VIRTUALHOST|NOT_IN_LIMIT|NOT_IN_DIR_LOC_FILE) + + #ifdef CORE_PRIVATE extern API_VAR_EXPORT module *top_module; @@ -349,19 +362,6 @@ CORE_EXPORT(const char *) ap_init_virtual_host(pool *p, const char *hostname, server_rec *main_server, server_rec **); void ap_process_resource_config(server_rec *s, const char *fname, pool *p, pool *ptemp); - -/* ap_check_cmd_context() definitions: */ -API_EXPORT(const char *) ap_check_cmd_context(cmd_parms *cmd, unsigned forbidden); - -/* ap_check_cmd_context(): Forbidden in: */ -#define NOT_IN_VIRTUALHOST 0x01 /* Virtualhost */ -#define NOT_IN_LIMIT 0x02 /* Limit */ -#define NOT_IN_DIRECTORY 0x04 /* Directory */ -#define NOT_IN_LOCATION0x08 /* Location */ -#define NOT_IN_FILES 0x10 /* Files */ -#define NOT_IN_DIR_LOC_FILE (NOT_IN_DIRECTORY|NOT_IN_LOCATION|NOT_IN_FILES) /* Directory/Location/Files*/ -#define GLOBAL_ONLY (NOT_IN_VIRTUALHOST|NOT_IN_LIMIT|NOT_IN_DIR_LOC_FILE) - /* Module-method dispatchers, also for http_request.c */ 1.6 +13 -218 apache-2.0/mpm/src/main/mpm_prefork.c Index: mpm_prefork.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/mpm_prefork.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- mpm_prefork.c 1999/06/20 21:46:13 1.5 +++ mpm_prefork.c 1999/06/20 22:59:51 1.6 @@ -96,6 +96,7 @@ #include http_connection.h #include scoreboard_prefork.h #include ap_mpm.h +#include unixd.h #ifdef USE_SHMGET_SCOREBOARD #include sys/types.h #include sys/ipc.h @@ -108,12 +109,6 @@ /* config globals */ -static uid_t ap_user_id=0; -static char *ap_user_name=NULL; -static gid_t ap_group_id=0; -#ifdef MULTIPLE_GROUPS -static gid_t group_id_list[NGROUPS_MAX]; -#endif static int ap_max_requests_per_child=0; static char *ap_pid_fname=NULL; static char *ap_scoreboard_fname=NULL; @@ -163,7 +158,6 @@ static int sd; static fd_set listenfds; static int listenmaxfd; -static pid_t pgrp; /* one_process --- debugging mode variable; can be set from the command line * with the -X flag. If set, this gets you the child_main loop running @@ -502,8 +496,8 @@ /* restrict it to use only by the appropriate user_id ... not that this * stops CGIs from acquiring it and dinking around with it. */ - buf.sem_perm.uid = ap_user_id; - buf.sem_perm.gid = ap_group_id; + buf.sem_perm.uid = unixd_config.user_id; + buf.sem_perm.gid
cvs commit: apache-2.0/mpm/src/main iol_unix.c Makefile.tmpl buff.c http_connection.c http_protocol.c http_request.c
dgaudet 99/06/18 16:35:01 Modified:mpm/src CHANGES mpm/src/include buff.h mpm/src/main Makefile.tmpl buff.c http_connection.c http_protocol.c http_request.c Added: mpm/src/docs buff.txt mpm/src/include ap_iol.h mpm/src/main iol_unix.c Log: I'm sure this is wrong... but it's my start. i/o layering. Lots of stuff disabled/still to be implemented. This served up a few static requests. Revision ChangesPath 1.3 +7 -0 apache-2.0/mpm/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-2.0/mpm/src/CHANGES,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- CHANGES 1999/06/18 18:58:45 1.2 +++ CHANGES 1999/06/18 23:34:56 1.3 @@ -0,0 +1,7 @@ +Changes with MPM + +* I/O layering and BUFF revamp. See docs/buff.txt. [Dean Gaudet] + +* Basic restructuring to introduce the MPM concept; includes various + changes to the module API... better described by + docs/initial_blurb.txt. [Dean Gaudet] 1.1 apache-2.0/mpm/src/docs/buff.txt Index: buff.txt === - ap_bungetc added - ap_blookc changed to return the character, rather than take a char *buff - in theory, errno is always useful on return from a BUFF routine - ap_bhalfduplex, B_SAFEREAD will be re-implemented using a layer I think - chunking gone for now, will return as a layer - ebcdic gone for now... it should be a layer 1.3 +15 -15apache-2.0/mpm/src/include/buff.h Index: buff.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/buff.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- buff.h1999/06/18 19:20:47 1.2 +++ buff.h1999/06/18 23:34:58 1.3 @@ -63,6 +63,7 @@ #endif #include stdarg.h +#include ap_iol.h /* Reading is buffered */ #define B_RD (1) @@ -83,16 +84,22 @@ #define B_ERROR (48) /* TODO: implement chunked encoding as a layer */ /* bflush() if a read would block */ -#define B_SAFEREAD (128) +/* TODO: #define B_SAFEREAD (128) */ /* buffer is a socket */ #define B_SOCKET (256) +/* caller expects non-blocking behaviour */ +#define B_NONBLOCK (512) +/* non-blocking bit set on fd */ +#define B_NONBLOCK_SET (1024) + /* TODO: implement a ebcdic/ascii conversion layers */ typedef struct buff_struct BUFF; struct buff_struct { int flags; /* flags */ +int saved_errno; /* saved errno */ unsigned char *inptr;/* pointer to next location to read */ int incnt; /* number of bytes left to read from input buffer; * always 0 if had a read error */ @@ -106,14 +113,13 @@ ap_pool *pool; -/* could also put pointers to the basic I/O routines here */ -int fd; /* the file descriptor */ -time_t timeout; /* timeout for B_SOCKET operations */ +ap_iol iol; }; /* Options to bset/getopt */ #define BO_BYTECT (1) #define BO_TIMEOUT (2) +#define BO_ERROR (3) /* Stream creation and modification */ API_EXPORT(BUFF *) ap_bcreate(pool *p, int flags); @@ -136,8 +142,7 @@ /* I/O */ API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte); API_EXPORT(int) ap_bgets(char *s, int n, BUFF *fb); -API_EXPORT(int) ap_blookc(char *buff, BUFF *fb); -API_EXPORT(int) ap_bskiplf(BUFF *fb); +API_EXPORT(int) ap_blookc(BUFF *fb); API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte); API_EXPORT(int) ap_bflush(BUFF *fb); API_EXPORT(int) ap_bputs(const char *x, BUFF *fb); @@ -153,6 +158,10 @@ #define ap_bgetc(fb) ( ((fb)-incnt == 0) ? ap_bfilbuf(fb) : \ ((fb)-incnt--, *((fb)-inptr++)) ) +/* can only unput a single character that was read by ap_bgetc */ +#define ap_bungetc(c, fb) ((fb)-incnt++, *(--(fb)-inptr) = (c)) + + #define ap_bputc(c, fb) fb)-flags (B_EOUT|B_WRERR|B_WR)) != B_WR || \ (fb)-outcnt == (fb)-bufsiz) ? ap_bflsbuf(c, (fb)) : \ ((fb)-outbase[(fb)-outcnt++] = (c), 0)) @@ -181,15 +190,6 @@ API_EXPORT(int) ap_bspawn_child(pool *, int (*)(void *, child_info *), void *, enum kill_conditions, BUFF **pipe_in, BUFF **pipe_out, BUFF **pipe_err); - -/* enable non-blocking operations */ -API_EXPORT(int) ap_bnonblock(int fd); -API_EXPORT(int) ap_bblock(int fd); -/* and get an fd to select() on */ -API_EXPORT(int) ap_bfileno(BUFF *fb, int direction
cvs commit: apache-2.0/mpm/src/docs buff.txt
dgaudet 99/06/18 17:17:51 Modified:mpm/src/docs buff.txt Log: rambling on Revision ChangesPath 1.2 +77 -0 apache-2.0/mpm/src/docs/buff.txt Index: buff.txt === RCS file: /home/cvs/apache-2.0/mpm/src/docs/buff.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- buff.txt 1999/06/18 23:34:57 1.1 +++ buff.txt 1999/06/19 00:17:51 1.2 @@ -1,6 +1,83 @@ +goals? we need an i/o abstraction which has these properties: + +- buffered and non-buffered modes + +The buffered mode should look like FILE *. + +The non-buffered mode should look more like read(2)/write(2). + +- blocking and non-blocking modes + +The blocking mode is the easy mode -- it's what most module writers +will see. The non-blocking mode is the hard mode, this is where +module writers wanting to squeeze out some speed will have to play. +In order to build async/sync hybrid models we need the +non-blocking i/o abstraction. + +- timed reads and writes (for blocking cases) + +This is part of my jihad against asynchronous notification. + +- i/o filtering or layering + +Yet another Holy Grail of computing. But I digress. These are +hard when you take into consideration non-blocking i/o -- you have +to keep lots of state. I expect our core filters will all support +non-blocking i/o, well at least the ones I need to make sure we kick +ass on benchmarks. A filter can deny a switch to non-blocking mode, +the server will have to recover gracefully (ha). + +- copy-avoidance + +Hey what about zero copy a la IO-Lite? After having experienced it +in a production setting I'm no longer convinced of its benefits. +There is an enormous amount of overhead keeping lists of buffers, +and reference counts, and cleanup functions, and such which requires +a lot of tuning to get right. I think there may be something here, +but it's not a cakewalk. + +What I do know is that the heuristics I put into apache-1.3 to choose +writev() at times are almost as good as what you can get from doing +full zero-copy in the cases we *currently* care about. To put it +another way, let's wait another generation to deal with zero copy. + +But sendfile/transmitfile/etc. those are still interesting. + +So instead of listing zero copy as a property, I'll list +copy-avoidance. + +So far? + - ap_bungetc added - ap_blookc changed to return the character, rather than take a char *buff - in theory, errno is always useful on return from a BUFF routine - ap_bhalfduplex, B_SAFEREAD will be re-implemented using a layer I think - chunking gone for now, will return as a layer - ebcdic gone for now... it should be a layer + +- ap_iol.h defined, first crack at the layers... + +Step back a second to think on it. Much like we have fread(3) +and read(2), I've got a BUFF and an ap_iol abstraction. An ap_iol +could use a BUFF if it requires some form of buffering, but many +won't require buffering... or can do a better job themselves. + +Consider filters such as: + - ebcdic - ascii + - encryption + - compression +These all share the property that no matter what, they're going to make +an extra copy of the data. In some cases they can do it in place (read) +or into a fixed buffer... in most cases their buffering requirements +are different than what BUFF offers. + +Consider a filter such as chunking. This could actually use the writev +method to get its job done... depends on the chunks being used. This +is where zero-copy would be really nice, but we can get by with a few +heuristics. + +At any rate -- the NSPR folks didn't see any reason to included a +buffered i/o abstraction on top of their layered i/o abstraction... so +I feel like I'm not the only one who's thinking this way. + +- iol_unix.c implemented... should hold us for a bit
cvs commit: apache-2.0/mpm/src/main iol_unix.c
dgaudet 99/06/19 10:59:58 Modified:mpm/src/main iol_unix.c Log: cleanup Revision ChangesPath 1.2 +0 -2 apache-2.0/mpm/src/main/iol_unix.c Index: iol_unix.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/iol_unix.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- iol_unix.c1999/06/18 23:35:00 1.1 +++ iol_unix.c1999/06/19 17:59:57 1.2 @@ -57,8 +57,6 @@ #include httpd.h -#include http_main.h -#include http_log.h #include ap_iol.h #include errno.h
cvs commit: apache-2.0/mpm/src/modules/standard mod_access.c mod_actions.c mod_alias.c mod_asis.c mod_auth.c mod_autoindex.c mod_cgi.c mod_imap.c mod_include.c mod_log_config.c mod_negotiation.c mod_setenvif.c mod_userdir.c
dgaudet 99/06/19 11:10:12 Modified:mpm/src CHANGES Configuration.mpm mpm/src/modules/standard mod_access.c mod_actions.c mod_alias.c mod_asis.c mod_auth.c mod_autoindex.c mod_cgi.c mod_imap.c mod_include.c mod_log_config.c mod_negotiation.c mod_setenvif.c mod_userdir.c Log: Port a bunch of modules to the new module structure. (All the ones currently activated in Configuration.mpm plus cgi and include... but I didn't activate those because dynamic content is broken until I fix chunking.) Submitted by: Michael H. Voase [EMAIL PROTECTED] Revision ChangesPath 1.4 +3 -0 apache-2.0/mpm/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-2.0/mpm/src/CHANGES,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- CHANGES 1999/06/18 23:34:56 1.3 +++ CHANGES 1999/06/19 18:10:03 1.4 @@ -1,5 +1,8 @@ Changes with MPM +* Port a bunch of modules to the new module structure. + [Michael H. Voase [EMAIL PROTECTED]] + * I/O layering and BUFF revamp. See docs/buff.txt. [Dean Gaudet] * Basic restructuring to introduce the MPM concept; includes various 1.3 +10 -10apache-2.0/mpm/src/Configuration.mpm Index: Configuration.mpm === RCS file: /home/cvs/apache-2.0/mpm/src/Configuration.mpm,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Configuration.mpm 1999/06/18 19:20:18 1.2 +++ Configuration.mpm 1999/06/19 18:10:03 1.3 @@ -23,28 +23,28 @@ Rule WANTHSREGEX=default # AddModule modules/experimental/mod_mmap_static.o # AddModule modules/standard/mod_env.o -# AddModule modules/standard/mod_log_config.o +AddModule modules/standard/mod_log_config.o # AddModule modules/standard/mod_log_agent.o # AddModule modules/standard/mod_log_referer.o # AddModule modules/standard/mod_mime_magic.o AddModule modules/standard/mod_mime.o -# AddModule modules/standard/mod_negotiation.o +AddModule modules/standard/mod_negotiation.o # AddModule modules/standard/mod_status.o # AddModule modules/standard/mod_info.o # AddModule modules/standard/mod_include.o -# AddModule modules/standard/mod_autoindex.o +AddModule modules/standard/mod_autoindex.o AddModule modules/standard/mod_dir.o # AddModule modules/standard/mod_cgi.o -# AddModule modules/standard/mod_asis.o -# AddModule modules/standard/mod_imap.o +AddModule modules/standard/mod_asis.o +AddModule modules/standard/mod_imap.o # AddModule modules/standard/mod_actions.o # AddModule modules/standard/mod_speling.o -# AddModule modules/standard/mod_userdir.o +AddModule modules/standard/mod_userdir.o # AddModule modules/proxy/libproxy.a -# AddModule modules/standard/mod_alias.o +AddModule modules/standard/mod_alias.o # AddModule modules/standard/mod_rewrite.o -# AddModule modules/standard/mod_access.o -# AddModule modules/standard/mod_auth.o +AddModule modules/standard/mod_access.o +AddModule modules/standard/mod_auth.o # AddModule modules/standard/mod_auth_anon.o # AddModule modules/standard/mod_auth_dbm.o # AddModule modules/standard/mod_auth_db.o @@ -56,4 +56,4 @@ # AddModule modules/example/mod_example.o # AddModule modules/standard/mod_unique_id.o # AddModule modules/standard/mod_so.o -# AddModule modules/standard/mod_setenvif.o +AddModule modules/standard/mod_setenvif.o 1.2 +5 -3 apache-2.0/mpm/src/modules/standard/mod_access.c Index: mod_access.c === RCS file: /home/cvs/apache-2.0/mpm/src/modules/standard/mod_access.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mod_access.c 1999/06/18 18:39:35 1.1 +++ mod_access.c 1999/06/19 18:10:04 1.2 @@ -388,7 +388,11 @@ module MODULE_VAR_EXPORT access_module = { -STANDARD_MODULE_STUFF, +STANDARD20_MODULE_STUFF, +NULL,/* pre_command */ +NULL,/* pre_config */ +NULL,/* post_config */ +NULL,/* open_logs */ NULL,/* initializer */ create_access_dir_config,/* dir config creater */ NULL,/* dir merger --- default is to override */ @@ -404,7 +408,5 @@ NULL,/* fixups */ NULL,/* logger */ NULL,/* header parser */ -NULL,/* child_init */ -NULL,/* child_exit */ NULL /* post read-request */ }; 1.2 +6 -4 apache-2.0
cvs commit: apache-2.0/mpm/src/main iol_unix.c
dgaudet 99/06/19 13:40:18 Modified:mpm/src/include ap_iol.h mpm/src/main iol_unix.c Log: use ETIMEDOUT instead of ETIME Revision ChangesPath 1.2 +1 -1 apache-2.0/mpm/src/include/ap_iol.h Index: ap_iol.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/ap_iol.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- ap_iol.h 1999/06/18 23:34:57 1.1 +++ ap_iol.h 1999/06/19 20:40:16 1.2 @@ -80,7 +80,7 @@ If the timeout is positive, they will block up to the specified number of seconds. If the read/write can't be completed in that time, -a -1 will be returned and errno will be set to ETIME. +a -1 will be returned and errno will be set to ETIMEDOUT. TODO: we've all agreed errno is somewhat evil, and it must be replaced by a status result code. I'll leave that to someone else. 1.4 +1 -5 apache-2.0/mpm/src/main/iol_unix.c Index: iol_unix.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/iol_unix.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- iol_unix.c1999/06/19 20:23:37 1.3 +++ iol_unix.c1999/06/19 20:40:17 1.4 @@ -63,10 +63,6 @@ #include sys/types.h #include sys/uio.h -#ifndef ETIME -# define ETIME -1 -#endif - #define FD_NONBLOCKING_SET (1) typedef struct { @@ -146,7 +142,7 @@ rv = select(fd-fd + 1, selread, selwrite, NULL, fd-timeout 0 ? NULL : tv); \ } while (rv == -1 errno == EINTR); \ if (!FD_ISSET(fd-fd, fdset)) { \ - errno = ETIME; \ + errno = ETIMEDOUT; \ return -1; \ } \ do { \
cvs commit: apache-2.0/mpm/src/include ap_buf.h
dgaudet 99/06/19 13:42:01 Modified:mpm/src/ap Makefile.tmpl Added: mpm/src/ap ap_buf.c mpm/src/include ap_buf.h Log: this is where I'm going with the zero-copy stuff Revision ChangesPath 1.3 +1 -1 apache-2.0/mpm/src/ap/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/ap/Makefile.tmpl,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- Makefile.tmpl 1999/06/18 19:07:57 1.2 +++ Makefile.tmpl 1999/06/19 20:41:59 1.3 @@ -6,7 +6,7 @@ LIB=libap.a OBJS=ap_cpystrn.o ap_execve.o ap_fnmatch.o ap_getpass.o ap_md5c.o ap_signal.o \ - ap_slack.o ap_snprintf.o + ap_slack.o ap_snprintf.o ap_buf.o .c.o: $(CC) -c $(INCLUDES) $(CFLAGS) $ 1.1 apache-2.0/mpm/src/ap/ap_buf.c Index: ap_buf.c === /* * Copyright (c) 1996-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 *[EMAIL PROTECTED] * * 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/. * */ #include ap_config.h #include stdlib.h #include sys/uio.h #include ap_buf.h API_EXPORT(ap_bufel *) ap_bufel_new(void) { /* TODO: keep a free list of ap_bufels... and allocate them in big chunks */ return malloc(sizeof(ap_bufel)); } API_EXPORT(void) ap_bufel_destroy(ap_bufel *e) { e-free(e); free(e); } API_EXPORT(void) ap_buf_init(ap_buf *b) { b-head = NULL; b-tail = b-head; } API_EXPORT(void) ap_buf_append(ap_buf *b, ap_bufel *e) { e-next = *b-tail; b-tail = e-next; } API_EXPORT(void) ap_buf_consume(ap_buf *b, int nbytes) { ap_bufel *e; ap_bufel *n; int amt; e = b-head; while (e nbytes) { amt = e-end - e-start; if (nbytes amt) { e-start += nbytes; break; } n = e-next; ap_bufel_destroy(e); nbytes -= amt; e = n; } b-head = e; if (!e) { b-tail = b-head
cvs commit: apache-2.0/mpm/src/main mpm_prefork.c
dgaudet 99/06/19 14:56:28 Modified:mpm/src/main mpm_prefork.c Log: Ben L. was complaining that he wanted -X ... try -D ONE_PROCESS now instead. The general problem is that mpms need arbitrary extensions to the command line options... -D seems somewhat reasonable. Although I can think of better stuff. This works for now. Revision ChangesPath 1.2 +3 -1 apache-2.0/mpm/src/main/mpm_prefork.c Index: mpm_prefork.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/mpm_prefork.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mpm_prefork.c 1999/06/18 18:39:31 1.1 +++ mpm_prefork.c 1999/06/19 21:56:27 1.2 @@ -3680,12 +3680,14 @@ { static int restart_num = 0; +one_process = ap_exists_config_define(ONE_PROCESS); + /* sigh, want this only the second time around */ if (restart_num++ == 1) { is_graceful = 0; if (!one_process) { - //detach(); + /* TODO: detach(); ... it should work fine, this is just easier for debugging */ } my_pid = getpid();
cvs commit: apache-2.0/mpm - Imported sources
dgaudet 99/06/18 11:40:00 Log: import mpm-3 into the apache-2.0 repository Status: Vendor Tag: dgaudet Release Tags: mpm-3 N apache-2.0/mpm/ABOUT_APACHE N apache-2.0/mpm/Announcement N apache-2.0/mpm/INSTALL N apache-2.0/mpm/KEYS N apache-2.0/mpm/LICENSE N apache-2.0/mpm/Makefile.tmpl N apache-2.0/mpm/README N apache-2.0/mpm/README.NT N apache-2.0/mpm/README.configure N apache-2.0/mpm/RULES.CVS N apache-2.0/mpm/WARNING-NT.TXT N apache-2.0/mpm/config.layout N apache-2.0/mpm/configure N apache-2.0/mpm/config.status N apache-2.0/mpm/Makefile N apache-2.0/mpm/cgi-bin/printenv N apache-2.0/mpm/cgi-bin/test-cgi N apache-2.0/mpm/conf/.cvsignore N apache-2.0/mpm/conf/access.conf-dist N apache-2.0/mpm/conf/access.conf-dist-win N apache-2.0/mpm/conf/highperformance.conf-dist N apache-2.0/mpm/conf/httpd.conf-dist N apache-2.0/mpm/conf/httpd.conf-dist-win N apache-2.0/mpm/conf/magic N apache-2.0/mpm/conf/mime.types N apache-2.0/mpm/conf/srm.conf-dist N apache-2.0/mpm/conf/srm.conf-dist-win N apache-2.0/mpm/icons/back.gif N apache-2.0/mpm/icons/README N apache-2.0/mpm/icons/a.gif N apache-2.0/mpm/icons/alert.black.gif N apache-2.0/mpm/icons/alert.red.gif N apache-2.0/mpm/icons/apache_pb.gif N apache-2.0/mpm/icons/ball.gray.gif N apache-2.0/mpm/icons/ball.red.gif N apache-2.0/mpm/icons/binary.gif N apache-2.0/mpm/icons/binhex.gif N apache-2.0/mpm/icons/blank.gif N apache-2.0/mpm/icons/bomb.gif N apache-2.0/mpm/icons/box1.gif N apache-2.0/mpm/icons/box2.gif N apache-2.0/mpm/icons/broken.gif N apache-2.0/mpm/icons/burst.gif N apache-2.0/mpm/icons/c.gif N apache-2.0/mpm/icons/comp.blue.gif N apache-2.0/mpm/icons/comp.gray.gif N apache-2.0/mpm/icons/compressed.gif N apache-2.0/mpm/icons/continued.gif N apache-2.0/mpm/icons/dir.gif N apache-2.0/mpm/icons/dvi.gif N apache-2.0/mpm/icons/down.gif N apache-2.0/mpm/icons/f.gif N apache-2.0/mpm/icons/folder.gif N apache-2.0/mpm/icons/folder.open.gif N apache-2.0/mpm/icons/folder.sec.gif N apache-2.0/mpm/icons/forward.gif N apache-2.0/mpm/icons/generic.gif N apache-2.0/mpm/icons/generic.red.gif N apache-2.0/mpm/icons/generic.sec.gif N apache-2.0/mpm/icons/hand.right.gif N apache-2.0/mpm/icons/hand.up.gif N apache-2.0/mpm/icons/icon.sheet.gif N apache-2.0/mpm/icons/image1.gif N apache-2.0/mpm/icons/image2.gif N apache-2.0/mpm/icons/image3.gif N apache-2.0/mpm/icons/index.gif N apache-2.0/mpm/icons/layout.gif N apache-2.0/mpm/icons/left.gif N apache-2.0/mpm/icons/link.gif N apache-2.0/mpm/icons/movie.gif N apache-2.0/mpm/icons/p.gif N apache-2.0/mpm/icons/patch.gif N apache-2.0/mpm/icons/pdf.gif N apache-2.0/mpm/icons/pie0.gif N apache-2.0/mpm/icons/pie1.gif N apache-2.0/mpm/icons/pie2.gif N apache-2.0/mpm/icons/pie3.gif N apache-2.0/mpm/icons/pie4.gif N apache-2.0/mpm/icons/pie5.gif N apache-2.0/mpm/icons/pie6.gif N apache-2.0/mpm/icons/pie7.gif N apache-2.0/mpm/icons/pie8.gif N apache-2.0/mpm/icons/portal.gif N apache-2.0/mpm/icons/ps.gif N apache-2.0/mpm/icons/quill.gif N apache-2.0/mpm/icons/right.gif N apache-2.0/mpm/icons/screw1.gif N apache-2.0/mpm/icons/screw2.gif N apache-2.0/mpm/icons/script.gif N apache-2.0/mpm/icons/sound1.gif N apache-2.0/mpm/icons/sound2.gif N apache-2.0/mpm/icons/sphere1.gif N apache-2.0/mpm/icons/sphere2.gif N apache-2.0/mpm/icons/tar.gif N apache-2.0/mpm/icons/tex.gif N apache-2.0/mpm/icons/text.gif N apache-2.0/mpm/icons/transfer.gif N apache-2.0/mpm/icons/unknown.gif N apache-2.0/mpm/icons/up.gif N apache-2.0/mpm/icons/uu.gif N apache-2.0/mpm/icons/uuencoded.gif N apache-2.0/mpm/icons/world1.gif N apache-2.0/mpm/icons/world2.gif N apache-2.0/mpm/icons/small/README.txt N apache-2.0/mpm/icons/small/back.gif N apache-2.0/mpm/icons/small/binary.gif N apache-2.0/mpm/icons/small/binhex.gif N apache-2.0/mpm/icons/small/blank.gif N apache-2.0/mpm/icons/small/broken.gif N apache-2.0/mpm/icons/small/burst.gif N apache-2.0/mpm/icons/small/comp1.gif N apache-2.0/mpm/icons/small/comp2.gif N apache-2.0/mpm/icons/small/compressed.gif N apache-2.0/mpm/icons/small/continued.gif N apache-2.0/mpm/icons/small/dir.gif N apache-2.0/mpm/icons/small/dir2.gif N apache-2.0/mpm/icons/small/doc.gif N apache-2.0/mpm/icons/small/forward.gif N apache-2.0/mpm/icons/small/generic.gif N apache-2.0/mpm/icons/small/generic2.gif N apache-2.0/mpm/icons/small/generic3.gif N apache-2.0/mpm/icons/small/image.gif N apache-2.0/mpm/icons/small/image2.gif N apache-2.0/mpm/icons/small/index.gif N apache-2.0/mpm/icons/small/key.gif N apache-2.0/mpm/icons/small/movie.gif N apache-2.0/mpm/icons/small/patch.gif N apache-2.0/mpm/icons/small/ps.gif N apache-2.0/mpm/icons/small/rainbow.gif N apache-2.0/mpm/icons/small/sound.gif N apache-2.0/mpm/icons/small/sound2.gif N apache-2.0/mpm/icons/small/tar.gif N apache
cvs commit: apache-2.0/mpm/src/docs - New directory
dgaudet 99/06/18 11:43:13 apache-2.0/mpm/src/docs - New directory
cvs commit: apache-2.0/mpm/src/docs goals.txt initial_blurb.txt tls.txt
dgaudet 99/06/18 11:46:55 Added: mpm/src/docs goals.txt initial_blurb.txt tls.txt Log: add in some of the discussion Revision ChangesPath 1.1 apache-2.0/mpm/src/docs/goals.txt Index: goals.txt === From [EMAIL PROTECTED] Fri Jun 18 11:46:10 1999 Date: Fri, 18 Jun 1999 09:46:51 -0700 (PDT) From: Dean Gaudet [EMAIL PROTECTED] To: new-httpd@apache.org Subject: Re: work in progress: mpm-3.tar.gz X-Comment: Visit http://www.arctic.org/~dgaudet/legal for information regarding copyright and disclaimer. Reply-To: new-httpd@apache.org Yup it's a great idea waiting for someone to take it by the reins and implement it :) A lot of folks in the past (in the group, and not in the group) have asked me how can I help with 2.0? I'm trying to lay out a bunch of projects that will help me with this rearchitecture... and, if I can be so bold, I suspect that this is how we can finally get 2.0 going. The stuff I'm doing is something which has been long overdue, and which is necessary for many of the plans that we've been thinking of. I intend to make the feature set of mpm so desirable to unix-heads that they want to help clean it up, re-implement various 1.x features in it, and say this is apache 2.0. I intend to make the feature set of mpm general enough that non-unix-heads see exactly where they can plug in a new kick-ass model that suits their architecture... such as completion ports for NT. Previously these folks had to hack into the utter horrid mess of http_main, and there was much duplicated code. My goal (and I think I've accomplished it in this first version) is to abstract the real purpose of the main loop inside http_main so that it can be replaced with architecture specific main loops. Yes I'm a unix-bigot, but even within the unix world there are several possibilities for the MPM, and I want to be sure that people can implement all of them. There's a fellow Zach from redhat who just implemented what is probably the fastest userland model for linux, and he's waiting to plug it into apache somehow. There's a sun dude waiting to plug in solaris 7's in-kernel accelerator. I want to accomodate all of them. Hence the modular design of the MPM. Some day we'll have a portable run-time, and that day we'll integrate it with the MPM. I intend to ignore this issue for the moment, because we can't afford to wait any longer for the holy grail portable run-time... and I think it'll be obvious to the APR (or NSPR) folks how they too can plug into the MPM; but they're going to have to wait for layered BUFF first. At the moment this is dean's fork of apache, and I intend to play dictator on it for a while. I have some very specific goals for it, and I want people to see where I'm going first before I release control. I do want this to become apache 2.0 though, so I'm trying to accomodate enough people to make it acceptable. But I could really use help as I've outlined -- at best I'm going to have prototype quality code; we've got a couple months of cleanup and testing before it'll be beta quality. OK back to hacking :) Dean On Fri, 18 Jun 1999, Ralf S. Engelschall wrote: In article [EMAIL PROTECTED] you wrote: Oh, and another TODO which can happen now, before the modules are converted to the new structure... is to change the module structure to have only one on_load method, and have all other methods registered at run time. Yeah, that's a great idea. +1 We really have to get rid of the unflexible fixed dispatch lists... Ralf S. Engelschall [EMAIL PROTECTED] www.engelschall.com 1.1 apache-2.0/mpm/src/docs/initial_blurb.txt Index: initial_blurb.txt === From [EMAIL PROTECTED] Fri Jun 18 11:43:50 1999 Date: Thu, 17 Jun 1999 12:23:59 -0700 (PDT) From: Dean Gaudet [EMAIL PROTECTED] To: new-httpd@apache.org Subject: work in progress: mpm-3.tar.gz X-Comment: Visit http://www.arctic.org/~dgaudet/legal for information regarding copyright and disclaimer. Reply-To: new-httpd@apache.org This is the beginning of some massive code cleanup... we've been building so much crap into http_main it's been really difficult for me to work on the async/sync hybrid (ASH) stuff that I posted a few weeks back. My main goal here was to rip out the multi-processing model, or MPM, so that we can replace it with whatever we need depending on the platform. For example, there could be a prefork MPM, a win32 MPM, a select/thread hybrid MPM, a tpf MPM, ... The MPM's job is to listen
cvs commit: apache-2.0/mpm/src CHANGES BUILD.NOTES INDENT INSTALL PORTING README README.EBCDIC
dgaudet 99/06/18 11:58:49 Modified:mpm/src CHANGES Removed: mpm/src BUILD.NOTES INDENT INSTALL PORTING README README.EBCDIC Log: cleanup... rewrite the help later... clean state for changes for now Revision ChangesPath 1.2 +0 -6687 apache-2.0/mpm/src/CHANGES Binary file
cvs commit: apache-2.0/mpm 00README_FIRST_REALLY
dgaudet 99/06/18 12:00:18 Added: mpm 00README_FIRST_REALLY Log: ignore the man behind the curtain Revision ChangesPath 1.1 apache-2.0/mpm/00README_FIRST_REALLY Index: 00README_FIRST_REALLY === This is a work in progress, don't believe anything you read in the docs at this level of the tree. Save yourself a headache and cd src and start working there. Dean
cvs commit: apache-2.0/mpm/src/lib/expat-lite Makefile.tmpl
dgaudet 99/06/18 12:04:23 Modified:mpm/src/lib/expat-lite Makefile.tmpl Log: someone needs to put a depend rule into here Revision ChangesPath 1.2 +2 -0 apache-2.0/mpm/src/lib/expat-lite/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/lib/expat-lite/Makefile.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile.tmpl 1999/06/18 18:39:24 1.1 +++ Makefile.tmpl 1999/06/18 19:04:21 1.2 @@ -29,3 +29,5 @@ .c.o: $(CC) -c $(INCLUDES) $(CFLAGS) $ + +depend:
cvs commit: apache-2.0/mpm/src/os/unix Makefile.tmpl
dgaudet 99/06/18 12:08:08 Modified:mpm/src/ap Makefile.tmpl mpm/src Makefile.tmpl mpm/src/main Makefile.tmpl mpm/src/modules/standard Makefile.tmpl mpm/src/os/unix Makefile.tmpl Log: update dependencies Revision ChangesPath 1.2 +8 -7 apache-2.0/mpm/src/ap/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/ap/Makefile.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile.tmpl 1999/06/18 18:39:23 1.1 +++ Makefile.tmpl 1999/06/18 19:07:57 1.2 @@ -42,35 +42,36 @@ ap_cpystrn.o: ap_cpystrn.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h \ + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ $(INCDIR)/util_uri.h ap_execve.o: ap_execve.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h \ + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ $(INCDIR)/util_uri.h ap_fnmatch.o: ap_fnmatch.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \ $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/fnmatch.h ap_getpass.o: ap_getpass.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \ - $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/ap.h + $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/ap.h \ + $(INCDIR)/apr.h ap_md5c.o: ap_md5c.c $(INCDIR)/ap_config.h $(INCDIR)/ap_mmn.h \ $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h $(OSDIR)/os-inline.c \ $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h $(INCDIR)/ap_md5.h \ - $(INCDIR)/ap.h + $(INCDIR)/ap.h $(INCDIR)/apr.h ap_signal.o: ap_signal.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h \ + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ $(INCDIR)/util_uri.h ap_slack.o: ap_slack.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h \ + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ $(INCDIR)/util_uri.h $(INCDIR)/http_log.h ap_snprintf.o: ap_snprintf.c $(INCDIR)/httpd.h $(INCDIR)/ap_config.h \ $(INCDIR)/ap_mmn.h $(INCDIR)/ap_config_auto.h $(OSDIR)/os.h \ $(OSDIR)/os-inline.c $(INCDIR)/ap_ctype.h $(INCDIR)/hsregex.h \ - $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h \ + $(INCDIR)/alloc.h $(INCDIR)/buff.h $(INCDIR)/ap.h $(INCDIR)/apr.h \ $(INCDIR)/util_uri.h 1.2 +6 -5 apache-2.0/mpm/src/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/Makefile.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile.tmpl 1999/06/18 18:39:23 1.1 +++ Makefile.tmpl 1999/06/18 19:07:59 1.2 @@ -122,10 +122,11 @@ # DO NOT REMOVE buildmark.o: buildmark.c include/ap_config.h include/ap_mmn.h \ - include/ap_config_auto.h os/unix/os.h include/ap_ctype.h \ - include/hsregex.h include/httpd.h include/alloc.h include/buff.h \ - include/ap.h include/util_uri.h + include/ap_config_auto.h os/unix/os.h os/unix/os-inline.c \ + include/ap_ctype.h include/hsregex.h include/httpd.h include/alloc.h \ + include/buff.h include/ap.h include/apr.h include/util_uri.h modules.o: modules.c include/httpd.h include/ap_config.h \ include/ap_mmn.h include/ap_config_auto.h os/unix/os.h \ - include/ap_ctype.h include/hsregex.h include/alloc.h include/buff.h \ - include/ap.h include/util_uri.h include/http_config.h + os/unix/os-inline.c include/ap_ctype.h include/hsregex.h \ + include/alloc.h include/buff.h include/ap.h include/apr.h \ + include/util_uri.h include/http_config.h 1.2 +34 -63apache-2.0/mpm/src/main/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-2.0/mpm/src/main/Makefile.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Makefile.tmpl 1999/06/18 18:39:29 1.1 +++ Makefile.tmpl 1999/06/18 19:08:01 1.2
cvs commit: apache-2.0/mpm/src Configuration.mpm Configure
dgaudet 99/06/18 12:20:19 Modified:mpm/src Configuration.mpm Configure Log: lots todo Revision ChangesPath 1.2 +1 -1 apache-2.0/mpm/src/Configuration.mpm Index: Configuration.mpm === RCS file: /home/cvs/apache-2.0/mpm/src/Configuration.mpm,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Configuration.mpm 1999/06/18 18:49:44 1.1 +++ Configuration.mpm 1999/06/18 19:20:18 1.2 @@ -19,7 +19,7 @@ Rule IRIXNIS=no Rule IRIXN32=yes Rule PARANOID=no -Rule EXPAT=default +Rule EXPAT=no Rule WANTHSREGEX=default # AddModule modules/experimental/mod_mmap_static.o # AddModule modules/standard/mod_env.o 1.2 +6 -0 apache-2.0/mpm/src/Configure Index: Configure === RCS file: /home/cvs/apache-2.0/mpm/src/Configure,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- Configure 1999/06/18 18:39:23 1.1 +++ Configure 1999/06/18 19:20:18 1.2 @@ -1679,6 +1679,12 @@ ## Now create modules.c ## + +## TODO: the mpm thing below should be controlled by a configuration +## TODO: directive... it should really be like another module, with +## TODO: a default selected depending on the platform +## TODO: there should be an mpm/foo/ hierarchy for the MPM + $CAT $awkfile 'EOFM' BEGIN { modules[n++] = core
cvs commit: apache-2.0/mpm/src/main buff.c http_protocol.c
dgaudet 99/06/18 12:20:50 Modified:mpm/src/include buff.h mpm/src/main buff.c http_protocol.c Log: break chunked encoding, ebcdic, ... layering goes here Revision ChangesPath 1.2 +4 -48 apache-2.0/mpm/src/include/buff.h Index: buff.h === RCS file: /home/cvs/apache-2.0/mpm/src/include/buff.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- buff.h1999/06/18 18:39:28 1.1 +++ buff.h1999/06/18 19:20:47 1.2 @@ -62,10 +62,6 @@ extern C { #endif -#ifdef B_SFIO -#include sfio.h -#endif - #include stdarg.h /* Reading is buffered */ @@ -85,16 +81,13 @@ #undef B_ERROR #endif #define B_ERROR (48) -/* Use chunked writing */ -#define B_CHUNK (64) +/* TODO: implement chunked encoding as a layer */ /* bflush() if a read would block */ #define B_SAFEREAD (128) /* buffer is a socket */ #define B_SOCKET (256) -#ifdef CHARSET_EBCDIC -#define B_ASCII2EBCDIC 0x4000 /* Enable conversion for this buffer */ -#define B_EBCDIC2ASCII 0x8000 /* Enable conversion for this buffer */ -#endif /*CHARSET_EBCDIC*/ + +/* TODO: implement a ebcdic/ascii conversion layers */ typedef struct buff_struct BUFF; @@ -103,7 +96,6 @@ unsigned char *inptr;/* pointer to next location to read */ int incnt; /* number of bytes left to read from input buffer; * always 0 if had a read error */ -int outchunk;/* location of chunk header when chunking */ int outcnt; /* number of byte put in output buffer */ unsigned char *inbase; unsigned char *outbase; @@ -116,29 +108,9 @@ /* could also put pointers to the basic I/O routines here */ int fd; /* the file descriptor */ -#ifdef WIN32 -HANDLE hFH; /* Windows filehandle */ -#endif time_t timeout; /* timeout for B_SOCKET operations */ - -/* transport handle, for RPC binding handle or some such */ -void *t_handle; - -#ifdef B_SFIO -Sfio_t *sf_in; -Sfio_t *sf_out; -#endif }; -#ifdef B_SFIO -typedef struct { -Sfdisc_t disc; -BUFF *buff; -} apache_sfio; - -extern Sfdisc_t *bsfio_new(pool *p, BUFF *b); -#endif - /* Options to bset/getopt */ #define BO_BYTECT (1) #define BO_TIMEOUT (2) @@ -150,9 +122,6 @@ /* XXX - unused right now - mvsk */ API_EXPORT(BUFF *) ap_bopenf(pool *a, const char *name, int flg, int mode); -#ifdef WIN32 -API_EXPORT(void) ap_bpushh(BUFF *fb, HANDLE hFH); -#endif API_EXPORT(int) ap_bsetopt(BUFF *fb, int optname, const void *optval); API_EXPORT(int) ap_bgetopt(BUFF *fb, int optname, void *optval); API_EXPORT(int) ap_bsetflag(BUFF *fb, int flag, int value); @@ -181,27 +150,14 @@ API_EXPORT(int) ap_bflsbuf(int c, BUFF *fb); API_EXPORT(int) ap_bfilbuf(BUFF *fb); -#ifndef CHARSET_EBCDIC - #define ap_bgetc(fb) ( ((fb)-incnt == 0) ? ap_bfilbuf(fb) : \ ((fb)-incnt--, *((fb)-inptr++)) ) #define ap_bputc(c, fb) fb)-flags (B_EOUT|B_WRERR|B_WR)) != B_WR || \ (fb)-outcnt == (fb)-bufsiz) ? ap_bflsbuf(c, (fb)) : \ ((fb)-outbase[(fb)-outcnt++] = (c), 0)) - -#else /*CHARSET_EBCDIC*/ - -#define ap_bgetc(fb) ( ((fb)-incnt == 0) ? ap_bfilbuf(fb) : \ - ((fb)-incnt--, (fb-flags B_ASCII2EBCDIC)\ - ?os_toebcdic[(unsigned char)*((fb)-inptr++)]:*((fb)-inptr++)) ) - -#define ap_bputc(c, fb) fb)-flags (B_EOUT|B_WRERR|B_WR)) != B_WR || \ - (fb)-outcnt == (fb)-bufsiz) ? ap_bflsbuf(c, (fb)) : \ - ((fb)-outbase[(fb)-outcnt++] = (fb-flags B_EBCDIC2ASCII)\ - ?os_toascii[(unsigned char)c]:(c), 0)) -#endif /*CHARSET_EBCDIC*/ +/* XXX: this doesn't belong here... should be part of a generic spawning API in APR/NSPR */ struct child_info { #ifdef WIN32 /* 1.2 +11 -417 apache-2.0/mpm/src/main/buff.c Index: buff.c === RCS file: /home/cvs/apache-2.0/mpm/src/main/buff.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- buff.c1999/06/18 18:39:29 1.1 +++ buff.c1999/06/18 19:20:48 1.2 @@ -75,12 +75,6 @@ #ifndef DEFAULT_BUFSIZE #define DEFAULT_BUFSIZE (4096) #endif -/* This must be enough to represent (DEFAULT_BUFSIZE - 3) in hex, - * plus two extra characters. - */ -#ifndef CHUNK_HEADER_SIZE -#define CHUNK_HEADER_SIZE (5) -#endif /* bwrite()s of greater than this size can result in a large_write() call, @@ -219,37 +213,21 @@ else fb-inbase = NULL
cvs commit: apache-apr/pthreads/src/test/rename apapi.h
dgaudet 99/06/09 15:03:44 Modified:pthreads/src/include buff.h pthreads/src/main alloc.c buff.c http_main.c pthreads/src/modules/proxy proxy_cache.c proxy_ftp.c proxy_http.c pthreads/src/test/rename apapi.h Log: get rid of fd_in, it's not needed by anything anymore Revision ChangesPath 1.6 +1 -2 apache-apr/pthreads/src/include/buff.h Index: buff.h === RCS file: /home/cvs/apache-apr/pthreads/src/include/buff.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- buff.h1999/06/03 23:46:21 1.5 +++ buff.h1999/06/09 22:03:38 1.6 @@ -116,7 +116,6 @@ /* could also put pointers to the basic I/O routines here */ int fd; /* the file descriptor */ -int fd_in; /* input file descriptor, if different */ #ifdef WIN32 HANDLE hFH; /* Windows filehandle */ #endif @@ -145,7 +144,7 @@ /* Stream creation and modification */ API_EXPORT(BUFF *) ap_bcreate(pool *p, int flags); -API_EXPORT(void) ap_bpushfd(BUFF *fb, int fd_in, int fd_out); +API_EXPORT(void) ap_bpushfd(BUFF *fb, int fd); /* XXX - unused right now - mvsk */ API_EXPORT(BUFF *) ap_bopenf(pool *a, const char *name, int flg, int mode); 1.7 +3 -3 apache-apr/pthreads/src/main/alloc.c Index: alloc.c === RCS file: /home/cvs/apache-apr/pthreads/src/main/alloc.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- alloc.c 1999/05/30 23:48:58 1.6 +++ alloc.c 1999/06/09 22:03:39 1.7 @@ -2452,19 +2452,19 @@ if (pipe_out) { *pipe_out = ap_bcreate(p, B_RD); ap_note_cleanups_for_fd(p, fd_out); - ap_bpushfd(*pipe_out, fd_out, fd_out); + ap_bpushfd(*pipe_out, fd_out); } if (pipe_in) { *pipe_in = ap_bcreate(p, B_WR); ap_note_cleanups_for_fd(p, fd_in); - ap_bpushfd(*pipe_in, fd_in, fd_in); + ap_bpushfd(*pipe_in, fd_in); } if (pipe_err) { *pipe_err = ap_bcreate(p, B_RD); ap_note_cleanups_for_fd(p, fd_err); - ap_bpushfd(*pipe_err, fd_err, fd_err); + ap_bpushfd(*pipe_err, fd_err); } #endif 1.12 +10 -22apache-apr/pthreads/src/main/buff.c Index: buff.c === RCS file: /home/cvs/apache-apr/pthreads/src/main/buff.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- buff.c1999/06/03 23:46:22 1.11 +++ buff.c1999/06/09 22:03:39 1.12 @@ -239,7 +239,6 @@ fb-bytes_sent = 0; fb-fd = -1; -fb-fd_in = -1; fb-timeout = -1; #ifdef B_SFIO @@ -257,10 +256,9 @@ /* * Push some I/O file descriptors onto the stream */ -API_EXPORT(void) ap_bpushfd(BUFF *fb, APRFile fd_in, APRFile fd_out) +API_EXPORT(void) ap_bpushfd(BUFF *fb, APRFile fd) { -fb-fd = fd_out; -fb-fd_in = fd_in; +fb-fd = fd; } API_EXPORT(int) ap_bsetopt(BUFF *fb, int optname, const void *optval) @@ -445,7 +443,7 @@ API_EXPORT(int) ap_bfileno(BUFF *fb, int direction) { -return (direction == B_RD) ? fb-fd_in : fb-fd; +return fb-fd; } /* @@ -469,7 +467,7 @@ /* Test the descriptor and flush the output buffer if it looks like * we will block on the next read. * - * Note we assume the caller has ensured that fb-fd_in = FD_SETSIZE + * Note we assume the caller has ensured that fb-fd = FD_SETSIZE */ API_EXPORT(void) ap_bhalfduplex(BUFF *fb) { @@ -481,16 +479,16 @@ * or there is something readable in the incoming buffer * or there is nothing flushable in the output buffer. */ -if (fb == NULL || fb-fd_in 0 || fb-incnt 0 || fb-outcnt == 0) { +if (fb == NULL || fb-fd 0 || fb-incnt 0 || fb-outcnt == 0) { return; } /* test for a block */ do { FD_ZERO(fds); - FD_SET(fb-fd_in, fds); + FD_SET(fb-fd, fds); tv.tv_sec = 0; tv.tv_usec = 0; - rv = ap_select(fb-fd_in + 1, fds, NULL, NULL, tv); + rv = ap_select(fb-fd + 1, fds, NULL, NULL, tv); } while (rv 0 errno == EINTR !(fb-flags B_EOUT)); /* treat any error as if it would block as well */ @@ -507,7 +505,7 @@ ap_bhalfduplex(fb); } do { - rv = recvwithtimeout(fb-fd_in, buf, nbyte, fb-timeout); + rv = recvwithtimeout(fb-fd, buf, nbyte, fb-timeout); } while (rv == -1 errno == EINTR !(fb-flags B_EOUT)); return (rv); } @@ -1309,12 +1307,6 @@ else rc1 = 0; rc2 = ap_pclosef(fb-pool, fb-fd); -if (fb
cvs commit: apache-apr/pthreads/src/include buff.h httpd.h
dgaudet 99/06/09 15:06:30 Modified:pthreads/src/include buff.h httpd.h Log: BO_TIMEOUT belongs in buff.h Revision ChangesPath 1.7 +1 -0 apache-apr/pthreads/src/include/buff.h Index: buff.h === RCS file: /home/cvs/apache-apr/pthreads/src/include/buff.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- buff.h1999/06/09 22:03:38 1.6 +++ buff.h1999/06/09 22:06:29 1.7 @@ -141,6 +141,7 @@ /* Options to bset/getopt */ #define BO_BYTECT (1) +#define BO_TIMEOUT (2) /* Stream creation and modification */ API_EXPORT(BUFF *) ap_bcreate(pool *p, int flags); 1.16 +0 -2 apache-apr/pthreads/src/include/httpd.h Index: httpd.h === RCS file: /home/cvs/apache-apr/pthreads/src/include/httpd.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- httpd.h 1999/05/24 06:53:32 1.15 +++ httpd.h 1999/06/09 22:06:29 1.16 @@ -1141,8 +1141,6 @@ #endif #define strtoul strtoul_is_not_a_portable_function_use_strtol_instead -#define BO_TIMEOUT 2 - #define ap_is_aborted(abort) (abort-aborted ==1) #ifdef __cplusplus
cvs commit: apache-1.3 STATUS
dgaudet 99/06/04 09:49:14 Modified:.STATUS Log: a sunny day here Revision ChangesPath 1.698 +5 -15 apache-1.3/STATUS Index: STATUS === RCS file: /home/cvs/apache-1.3/STATUS,v retrieving revision 1.697 retrieving revision 1.698 diff -u -r1.697 -r1.698 --- STATUS1999/06/04 16:37:58 1.697 +++ STATUS1999/06/04 16:49:10 1.698 @@ -1,5 +1,5 @@ 1.3 STATUS: - Last modified at [$Date: 1999/06/04 16:37:58 $] + Last modified at [$Date: 1999/06/04 16:49:10 $] Release: @@ -95,7 +95,7 @@ * Ralf's [PATCH] to add EAPI (ctx, hook, mm, etc.) to the base package Message-ID: [EMAIL PROTECTED] - Status: Jim +1, Mark +1, Dean -0, BenH +1 + Status: Jim +1, Mark +1, Dean +1, BenH +1 * Tony Finch's patch to support mass virtual hosting Message-ID: [EMAIL PROTECTED] @@ -115,11 +115,11 @@ * Aidan Cully's patch to allow assignment of 'ownership' of resources to either the server UID or the file's owner. Message-ID: [EMAIL PROTECTED] - Status: Ken +1 + Status: Ken +1, Dean +1 * John Giannadrea's patch for ceiling on file size for mmap (PR#4122) Message-ID: [EMAIL PROTECTED] - Status: Ken +1 + Status: Ken +1, Dean +1 * Keith Wannamaker's NT multiple services patch Message-ID: [EMAIL PROTECTED] @@ -175,6 +175,7 @@ please review the shared memory deep-level code. Doug: +1 on concept (untested) Lars: +1 on concept + Dean: isn't this superceded by EAPI? * Mark Bixby's freshening up the MPE/iX port (mostly APACI) Message-ID: [EMAIL PROTECTED] @@ -251,17 +252,6 @@ * general/3787: SERVER_PORT is always 80 if client comes to any port = needs review by the protocol guys, I think. - -* Someone other than Dean has to do a security/correctness review on - psprintf(), bprintf(), and ap_snprintf(). In particular these routines - do lots of fun pointer manipulations and such and possibly have overflow - errors. The respective flush_funcs also need to be exercised. - o Jim's looked over the ap_snprintf() stuff (the changes that Dean - did to make thread-safe) and they look fine. - o Laura La Gassa's looked over ap_vformatter other related code - o Martin did a source review as well. - o Could still use 1 or 2 more sets of eyeballs. - Status: Is this still valid?? * Paul would like to see a 'gdbm' option because he uses it a lot.
cvs commit: apache-1.3 STATUS
dgaudet 99/06/04 10:00:27 Modified:.STATUS Log: still sunny Revision ChangesPath 1.699 +6 -2 apache-1.3/STATUS Index: STATUS === RCS file: /home/cvs/apache-1.3/STATUS,v retrieving revision 1.698 retrieving revision 1.699 diff -u -r1.698 -r1.699 --- STATUS1999/06/04 16:49:10 1.698 +++ STATUS1999/06/04 17:00:25 1.699 @@ -1,5 +1,5 @@ 1.3 STATUS: - Last modified at [$Date: 1999/06/04 16:49:10 $] + Last modified at [$Date: 1999/06/04 17:00:25 $] Release: @@ -69,7 +69,11 @@ libraries are detected, but the ndbm include file was moved to /usr/include/db1 Status: Ralf is looking at it - + +- graham legget has found that if he uses the 1.3.7-dev core, and + the 1.3.6 proxy code (plus a small patch of his) he doesn't get + the hangs he was reporting. Something is broken in the 1.3.7-dev + proxy. RELEASE NON-SHOWSTOPPERS BUT WOULD BE REAL NICE TO WRAP THESE UP:
cvs commit: apache-1.3/src/modules/standard mod_negotiation.c
dgaudet 99/06/04 10:15:53 Modified:htdocs/manual content-negotiation.html src CHANGES src/modules/standard mod_negotiation.c Log: This patch removes the processing of `mxb' parameters in Accept headers in mod_negotiation. A second patch updates the manual to reflect this (mxb is not documented directly in the manual but support for it is implied in one place). Reasons for removing this feature: 1) As currently implemented, the 'mxb' feature makes possible certain denial-of-service attacks on negotiated content. These attacks are posssible for user communities which access an Apache server from behind a HTTP/1.1 proxy which implements `Vary' related optimisations. Plugging this denial of service hole without removing `mxb' is fairly expensive in terms of degrading caching efficiency. 2) `mxb' is not in HTTP/1.0 or HTTP/1.1 or any other standard 3) Nobody seems to make use of 'mxb'. (Balachander Krishnamurthy kindly offered to grep some of his web traffic traces -- he did not find a single Accept with mxb in a whole day of recent traffic, nor in older traces) 4) Removing a feature makes a nice change from adding features. Submitted by: Koen Holtman [EMAIL PROTECTED] Revision ChangesPath 1.22 +3 -4 apache-1.3/htdocs/manual/content-negotiation.html Index: content-negotiation.html === RCS file: /home/cvs/apache-1.3/htdocs/manual/content-negotiation.html,v retrieving revision 1.21 retrieving revision 1.22 diff -u -r1.21 -r1.22 --- content-negotiation.html 1999/03/19 21:23:19 1.21 +++ content-negotiation.html 1999/06/04 17:15:48 1.22 @@ -196,10 +196,9 @@ for compress'd files, and CODEx-gzip/CODE for gzip'd files. The CODEx-/CODE prefix is ignored for encoding comparisons. DT CODEContent-Length:/CODE - DD The size of the file. Clients can ask to receive a given media - type only if the variant isn't too big; specifying a content - length in the map allows the server to compare against these - thresholds without checking the actual file. + DD The size of the file. Specifying content + lengths in the type-map allows the server to compare file sizes + without checking the actual files. DT CODEDescription:/CODE DD A human-readable textual description of the variant. If Apache cannot find any appropriate variant to return, it will return an error 1.1369+4 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1368 retrieving revision 1.1369 diff -u -r1.1368 -r1.1369 --- CHANGES 1999/06/04 00:21:36 1.1368 +++ CHANGES 1999/06/04 17:15:49 1.1369 @@ -1,5 +1,9 @@ Changes with Apache 1.3.7 + *) Remove mxb support from mod_negotiation -- it was a draft feature + never accepted into any standard, and it opens up certain DoS + attacks. [Koen Holtman [EMAIL PROTECTED]] + *) The source is now quad (long long) aware as needed. Specifically, the Configure process determines the correct size of off_t and *void. When the OS/platform/compiler supports quads, ap_snprintf() 1.99 +0 -23 apache-1.3/src/modules/standard/mod_negotiation.c Index: mod_negotiation.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_negotiation.c,v retrieving revision 1.98 retrieving revision 1.99 diff -u -r1.98 -r1.99 --- mod_negotiation.c 1999/03/19 21:23:24 1.98 +++ mod_negotiation.c 1999/06/04 17:15:51 1.99 @@ -140,7 +140,6 @@ typedef struct accept_rec { char *name; /* MUST be lowercase */ float quality; -float max_bytes; float level; char *charset; /* for content-type only */ } accept_rec; @@ -315,7 +314,6 @@ const char *accept_line) { result-quality = 1.0f; -result-max_bytes = 0.0f; result-level = 0.0f; result-charset = ; @@ -392,10 +390,6 @@ (parm[1] == '\0' || (parm[1] == 's' parm[2] == '\0'))) { result-quality = atof(cp); } -else if (parm[0] == 'm' parm[1] == 'x' - parm[2] == 'b' parm[3] == '\0') { -result-max_bytes = atof(cp); -} else if (parm[0] == 'l' !strcmp(parm[1], evel)) { result-level = atof(cp); } @@ -613,7 +607,6 @@ new_accept-name = */*; new_accept-quality = 1.0f; new_accept-level = 0.0f; -new_accept-max_bytes = 0.0f; } new_accept = (accept_rec
cvs commit: apache-1.3/src/main http_main.c
dgaudet 99/06/01 23:30:07 Modified:src CHANGES src/main http_main.c Log: Piped error logs could cause a segfault if an error occured during configuration after a restart. PR: 4456 Submitted by: Aidan Cully [EMAIL PROTECTED] Revision ChangesPath 1.1364+4 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1363 retrieving revision 1.1364 diff -u -r1.1363 -r1.1364 --- CHANGES 1999/05/26 18:27:43 1.1363 +++ CHANGES 1999/06/02 06:30:03 1.1364 @@ -1,5 +1,9 @@ Changes with Apache 1.3.7 + *) Piped error logs could cause a segfault if an error occured + during configuration after a restart. + [Aidan Cully [EMAIL PROTECTED]] PR#4456 + *) If a Location field was stored in r-err_headers_out rather than r-headers_out, redirect processing wouldn't find it and the server would core dump on ap_escape_html(NULL). 1.440 +13 -7 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.439 retrieving revision 1.440 diff -u -r1.439 -r1.440 --- http_main.c 1999/05/25 11:49:46 1.439 +++ http_main.c 1999/06/02 06:30:05 1.440 @@ -333,7 +333,9 @@ static other_child_rec *other_children; #endif +static pool *pglobal;/* Global pool */ static pool *pconf; /* Pool for config stuff */ +static pool *plog; /* Pool for error-logging files */ static pool *ptrans; /* Pool for per-transaction stuff */ static pool *pchild; /* Pool for httpd child stuff */ static pool *pcommands; /* Pool for -C and -c switches */ @@ -2104,7 +2106,7 @@ static void clean_parent_exit(int code) { /* Clear the pool - including any registered cleanups */ -ap_destroy_pool(pconf); +ap_destroy_pool(pglobal); exit(code); } @@ -3579,7 +3581,9 @@ AMCSocketInitialize(); #endif /* WIN32 */ -pconf = ap_init_alloc(); +pglobal = ap_init_alloc(); +pconf = ap_make_sub_pool(pglobal); +plog = ap_make_sub_pool(pglobal); ptrans = ap_make_sub_pool(pconf); ap_util_init(); @@ -4415,7 +4419,8 @@ server_conf = ap_read_config(pconf, ptrans, ap_server_confname); setup_listeners(pconf); - ap_open_logs(server_conf, pconf); + ap_clear_pool(plog); + ap_open_logs(server_conf, plog); ap_log_pid(pconf, ap_pid_fname); ap_set_version(); /* create our server_version string */ ap_init_modules(pconf, server_conf); @@ -4762,7 +4767,7 @@ #ifndef TPF if (ap_standalone) { - ap_open_logs(server_conf, pconf); + ap_open_logs(server_conf, plog); ap_set_version(); ap_init_modules(pconf, server_conf); version_locked++; @@ -4805,7 +4810,7 @@ /* Yes this is called twice. */ ap_init_modules(pconf, server_conf); version_locked++; - ap_open_logs(server_conf, pconf); + ap_open_logs(server_conf, plog); ap_init_modules(pconf, server_conf); set_group_privs(); @@ -5855,7 +5860,8 @@ pparent = ap_make_sub_pool(pconf); server_conf = ap_read_config(pconf, pparent, ap_server_confname); - ap_open_logs(server_conf, pconf); + ap_clear_pool(plog); + ap_open_logs(server_conf, plog); ap_set_version(); ap_init_modules(pconf, server_conf); version_locked++; @@ -6093,7 +6099,7 @@ ap_init_modules(pconf, server_conf); ap_suexec_enabled = init_suexec(); version_locked++; -ap_open_logs(server_conf, pconf); +ap_open_logs(server_conf, plog); set_group_privs(); }
cvs commit: apache-1.3/src/modules/proxy proxy_cache.c
dgaudet 99/06/02 11:10:11 Modified:src/modules/proxy proxy_cache.c Log: missing ap_unblock_alarms Revision ChangesPath 1.60 +0 -1 apache-1.3/src/modules/proxy/proxy_cache.c Index: proxy_cache.c === RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_cache.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- proxy_cache.c 1999/04/22 14:27:51 1.59 +++ proxy_cache.c 1999/06/02 18:10:09 1.60 @@ -327,7 +327,6 @@ else { lastcheck = buf.st_mtime; /* save the time */ if (garbage_now lastcheck + every) { -ap_unblock_alarms(); return 0; } if (utime(filename, NULL) == -1)
cvs commit: apache-1.3/src/modules/standard mod_include.c mod_autoindex.c
dgaudet 99/05/13 12:00:48 Modified:src/modules/standard mod_include.c mod_autoindex.c Log: Back out the evil hack portion of Raymond's patch. In addition to being an evil hack, it causes memory corruption. You cannot destroy a #included subrequest of mod_include... look for all uses of request_config in mod_include, in particular look at the code around the ap_join_pool call. Revision ChangesPath 1.116 +9 -40 apache-1.3/src/modules/standard/mod_include.c Index: mod_include.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_include.c,v retrieving revision 1.115 retrieving revision 1.116 diff -u -r1.115 -r1.116 --- mod_include.c 1999/05/13 18:25:57 1.115 +++ mod_include.c 1999/05/13 19:00:41 1.116 @@ -108,6 +108,9 @@ module MODULE_VAR_EXPORT includes_module; +/* just need some arbitrary non-NULL pointer which can't also be a request_rec */ +#define NESTED_INCLUDE_MAGIC (includes_module) + /* Environment function -- */ /* XXX: could use ap_table_overlap here */ @@ -743,7 +746,9 @@ } /* destroy the sub request if it's not a nested include */ - if (rr != NULL) { +if (rr != NULL + ap_get_module_config(rr-request_config, includes_module) + != NESTED_INCLUDE_MAGIC) { ap_destroy_sub_req(rr); } } @@ -2371,41 +2376,6 @@ return OK; } -#define SUB_REQ_STRING Sub request to mod_include -#define PARENT_STRINGParent request to mod_include - -if (ap_table_get(r-notes, SUB_REQ_STRING) != NULL) { - request_rec *p = r-main; - - /* - * The note is a flag to mod_include that this request is actually - * a subrequest from another module and that mod_include needs to - * treat it as if it's a subrequest from mod_include. - * - * HACK ALERT! - * There is no good way to pass the parent request_rec to mod_include. - * Tables only take string values and there is nowhere appropriate in - * in the request_rec that can safely be used. - * - * So we search up the chain of requests and redirects looking for - * the parent request. - */ - - while (p) { - if (ap_table_get(p-notes, PARENT_STRING) != NULL) { - /* Kludge --- See below */ - ap_set_module_config(r-request_config, includes_module, p); - - ap_add_common_vars(p); - ap_add_cgi_vars(p); - add_include_vars(p, DEFAULT_TIME_FORMAT); - ap_table_unset(r-notes, SUB_REQ_STRING); - break; - } - p = (p-prev) ? p-prev : p-main; - } -} - if ((parent = ap_get_module_config(r-request_config, includes_module))) { /* Kludge --- for nested includes, we want to keep the subprocess * environment of the base document (for compatibility); that means @@ -2441,10 +2411,9 @@ send_parsed_content(f, r); if (parent) { - /* Kludge --- Doing this allows the caller to safely destroy the - * sub_req - */ - r-pool = ap_make_sub_pool(r-pool); + /* signify that the sub request should not be killed */ + ap_set_module_config(r-request_config, includes_module, + NESTED_INCLUDE_MAGIC); } ap_kill_timeout(r); 1.108 +0 -8 apache-1.3/src/modules/standard/mod_autoindex.c Index: mod_autoindex.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_autoindex.c,v retrieving revision 1.107 retrieving revision 1.108 diff -u -r1.107 -r1.108 --- mod_autoindex.c 1999/05/13 18:25:56 1.107 +++ mod_autoindex.c 1999/05/13 19:00:43 1.108 @@ -924,10 +924,6 @@ ap_rputs(/PRE\n, r); } -/* See mod_include */ -#define SUB_REQ_STRING Sub request to mod_include -#define PARENT_STRINGParent request to mod_include - /* * Handle the preamble through the H1 tag line, inclusive. Locate * the file with a subrequests. Process text/html documents by actually @@ -969,8 +965,6 @@ if (! suppress_amble) { emit_preamble(r, title); } - ap_table_add(r-notes, PARENT_STRING, ); - ap_table_add(rr-notes, SUB_REQ_STRING, ); /* * If there's a problem running the subrequest, display the * preamble if we didn't do it before -- the header file @@ -1045,8 +1039,6 @@ */ if (rr-content_type != NULL) { if (!strcasecmp(text/html, rr-content_type)) { - ap_table_add(r
cvs commit: apache-1.3/src/include alloc.h
dgaudet 99/05/13 12:44:15 Modified:src/include alloc.h Log: add a bunch more info to the pool/ancestor documentation... Raymond's comments made it clear to me that what I'd written wasn't so clear ;) Revision ChangesPath 1.68 +36 -2 apache-1.3/src/include/alloc.h Index: alloc.h === RCS file: /home/cvs/apache-1.3/src/include/alloc.h,v retrieving revision 1.67 retrieving revision 1.68 diff -u -r1.67 -r1.68 --- alloc.h 1999/03/07 14:05:33 1.67 +++ alloc.h 1999/05/13 19:44:14 1.68 @@ -95,8 +95,42 @@ API_EXPORT(pool *) ap_make_sub_pool(pool *); /* All pools are subpools of permanent_pool */ API_EXPORT(void) ap_destroy_pool(pool *); -/* used to guarantee to the pool debugging code that the sub pool will not be - * destroyed before the parent pool +/* pools have nested lifetimes -- sub_pools are destroyed when the + * parent pool is cleared. We allow certain liberties with operations + * on things such as tables (and on other structures in a more general + * sense) where we allow the caller to insert values into a table which + * were not allocated from the table's pool. The table's data will + * remain valid as long as all the pools from which its values are + * allocated remain valid. + * + * For example, if B is a sub pool of A, and you build a table T in + * pool B, then it's safe to insert data allocated in A or B into T + * (because B lives at most as long as A does, and T is destroyed when + * B is cleared/destroyed). On the other hand, if S is a table in + * pool A, it is safe to insert data allocated in A into S, but it + * is *not safe* to insert data allocated from B into S... because + * B can be cleared/destroyed before A is (which would leave dangling + * pointers in T's data structures). + * + * In general we say that it is safe to insert data into a table T + * if the data is allocated in any ancestor of T's pool. This is the + * basis on which the POOL_DEBUG code works -- it tests these ancestor + * relationships for all data inserted into tables. POOL_DEBUG also + * provides tools (ap_find_pool, and ap_pool_is_ancestor) for other + * folks to implement similar restrictions for their own data + * structures. + * + * However, sometimes this ancestor requirement is inconvenient -- + * sometimes we're forced to create a sub pool (such as through + * ap_sub_req_lookup_uri), and the sub pool is guaranteed to have + * the same lifetime as the parent pool. This is a guarantee implemented + * by the *caller*, not by the pool code. That is, the caller guarantees + * they won't destroy the sub pool individually prior to destroying the + * parent pool. + * + * In this case the caller must call ap_pool_join() to indicate this + * guarantee to the POOL_DEBUG code. There are a few examples spread + * through the standard modules. */ #ifndef POOL_DEBUG #ifdef ap_pool_join
cvs commit: apache-1.3/src/main http_request.c
dgaudet 99/05/12 09:50:43 Modified:src CHANGES src/main http_request.c Log: don't assume the struct stat passed to stat() is left alone when the stat fails Submitted by: Ed Korthof [EMAIL PROTECTED] Revision ChangesPath 1.1353+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1352 retrieving revision 1.1353 diff -u -r1.1352 -r1.1353 --- CHANGES 1999/05/07 00:38:05 1.1352 +++ CHANGES 1999/05/12 16:50:40 1.1353 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) When stat() fails, don't assume anything about the contents of + the struct stat. [Ed Korthof [EMAIL PROTECTED]] + *) It's OK for a semop to return EINTR, just loop around and try again. [Dean Gaudet] 1.148 +10 -8 apache-1.3/src/main/http_request.c Index: http_request.c === RCS file: /home/cvs/apache-1.3/src/main/http_request.c,v retrieving revision 1.147 retrieving revision 1.148 diff -u -r1.147 -r1.148 --- http_request.c1999/04/20 23:38:44 1.147 +++ http_request.c1999/05/12 16:50:42 1.148 @@ -265,8 +265,12 @@ *cp = '\0'; return OK; } + /* must set this to zero, some stat()s may have corrupted it + * even if they returned an error. + */ + r-finfo.st_mode = 0; #if defined(ENOENT) defined(ENOTDIR) -else if (errno == ENOENT || errno == ENOTDIR) { +if (errno == ENOENT || errno == ENOTDIR) { last_cp = cp; while (--cp path *cp != '/') @@ -299,15 +303,13 @@ * you needed to do this. Please be sure to include the operating * system you are using. */ -else { -last_cp = cp; + last_cp = cp; -while (--cp path *cp != '/') -continue; + while (--cp path *cp != '/') + continue; -while (cp path cp[-1] == '/') ---cp; -} + while (cp path cp[-1] == '/') + --cp; #endif /* ENOENT ENOTDIR */ } return OK;
cvs commit: apache-1.3/src/main http_main.c
dgaudet 99/05/06 17:38:13 Modified:src CHANGES src/main http_main.c Log: loop around on EINTR from semop() Revision ChangesPath 1.1352+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1351 retrieving revision 1.1352 diff -u -r1.1351 -r1.1352 --- CHANGES 1999/05/07 00:16:06 1.1351 +++ CHANGES 1999/05/07 00:38:05 1.1352 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) It's OK for a semop to return EINTR, just loop around and try + again. [Dean Gaudet] + *) Fix configuration engine re-entrant hangups, which solve a handful of problems seen with mod_perl Perl configuration sections [Salvador Ortiz Garcia [EMAIL PROTECTED]] 1.436 +10 -6 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.435 retrieving revision 1.436 diff -u -r1.435 -r1.436 --- http_main.c 1999/05/05 20:42:58 1.435 +++ http_main.c 1999/05/07 00:38:11 1.436 @@ -741,17 +741,21 @@ static void accept_mutex_on(void) { -if (semop(sem_id, op_on, 1) 0) { - perror(accept_mutex_on); - clean_child_exit(APEXIT_CHILDFATAL); +while (semop(sem_id, op_on, 1) 0) { + if (errno != EINTR) { + perror(accept_mutex_on); + clean_child_exit(APEXIT_CHILDFATAL); + } } } static void accept_mutex_off(void) { -if (semop(sem_id, op_off, 1) 0) { - perror(accept_mutex_off); - clean_child_exit(APEXIT_CHILDFATAL); +while (semop(sem_id, op_off, 1) 0) { + if (errno != EINTR) { + perror(accept_mutex_off); + clean_child_exit(APEXIT_CHILDFATAL); + } } }
cvs commit: apache-1.3/src/modules/standard mod_include.c
dgaudet 99/05/05 10:46:08 Modified:src CHANGES src/modules/standard mod_include.c Log: mod_include's fsize/flastmod should allow only relative paths, just like include file. This bug was introduced during the 1.98 - 1.99 rev of mod_include. Submitted by: Jaroslav Benkovsky [EMAIL PROTECTED] Revision ChangesPath 1.1347+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1346 retrieving revision 1.1347 diff -u -r1.1346 -r1.1347 --- CHANGES 1999/05/04 11:21:07 1.1346 +++ CHANGES 1999/05/05 17:46:05 1.1347 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) mod_include's fsize/flastmod should allow only relative paths, just + like include file. [Jaroslav Benkovsky [EMAIL PROTECTED]] + *) OS/2: Add support for building loadable modules using DLLs. [Brian Havard] 1.114 +26 -20apache-1.3/src/modules/standard/mod_include.c Index: mod_include.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_include.c,v retrieving revision 1.113 retrieving revision 1.114 diff -u -r1.113 -r1.114 --- mod_include.c 1999/04/27 20:36:35 1.113 +++ mod_include.c 1999/05/05 17:46:07 1.114 @@ -1045,35 +1045,41 @@ static int find_file(request_rec *r, const char *directive, const char *tag, char *tag_val, struct stat *finfo, const char *error) { -char *to_send; -request_rec *rr; +char *to_send = tag_val; +request_rec *rr = NULL; int ret=0; +char *error_fmt = NULL; if (!strcmp(tag, file)) { -ap_getparents(tag_val);/* get rid of any nasties */ - -rr = ap_sub_req_lookup_file(tag_val, r); +/* be safe; only files in this directory or below allowed */ +if (!is_only_below(tag_val)) { +error_fmt = unable to access file \%s\ +in parsed file %s; +} +else { +ap_getparents(tag_val);/* get rid of any nasties */ +rr = ap_sub_req_lookup_file(tag_val, r); -if (rr-status == HTTP_OK rr-finfo.st_mode != 0) { -to_send = rr-filename; -if ((ret = stat(to_send, finfo)) == -1) { -ap_log_rerror(APLOG_MARK, APLOG_ERR, r, -unable to get information about \%s\ -in parsed file %s, -to_send, r-filename); -ap_rputs(error, r); +if (rr-status == HTTP_OK rr-finfo.st_mode != 0) { +to_send = rr-filename; +if (stat(to_send, finfo)) { +error_fmt = unable to get information about \%s\ +in parsed file %s; +} +} +else { +error_fmt = unable to lookup information about \%s\ +in parsed file %s; } } -else { + +if (error_fmt) { ret = -1; -ap_log_rerror(APLOG_MARK, APLOG_ERR, r, -unable to lookup information about \%s\ -in parsed file %s, -tag_val, r-filename); +ap_log_rerror(APLOG_MARK, APLOG_ERR, r, error_fmt, to_send, r-filename); ap_rputs(error, r); } - -ap_destroy_sub_req(rr); + +if (rr) ap_destroy_sub_req(rr); return ret; }
cvs commit: apache-1.3/src/modules/proxy proxy_ftp.c proxy_http.c proxy_util.c
dgaudet 99/05/01 10:02:30 Modified:src CHANGES src/main http_main.c src/modules/proxy proxy_ftp.c proxy_http.c proxy_util.c Log: *) Fix intermittent SEGV in ap_proxy_cache_error() in src/modules/proxy_util.c where a NULL filepointer and temporary filename were closed and unlinked. *) Fix inconsistant error messages reported by mod_proxy PR: 3178 Submitted by: Graham Leggett [EMAIL PROTECTED] Revision ChangesPath 1.1337+8 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1336 retrieving revision 1.1337 diff -u -r1.1336 -r1.1337 --- CHANGES 1999/05/01 13:42:07 1.1336 +++ CHANGES 1999/05/01 17:02:24 1.1337 @@ -1,5 +1,13 @@ Changes with Apache 1.3.7 + *) Fix intermittent SEGV in ap_proxy_cache_error() in + src/modules/proxy_util.c where a NULL filepointer and + temporary filename were closed and unlinked. + [Graham Leggett [EMAIL PROTECTED]] PR#3178 + + *) Fix inconsistant error messages reported by mod_proxy. + [Graham Leggett [EMAIL PROTECTED]] + *) OS/2: Fix terminating CGIs that aren't compiled by EMX GCC when a connection is aborted. [Brian Havard] 1.433 +2 -1 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.432 retrieving revision 1.433 diff -u -r1.432 -r1.433 --- http_main.c 1999/04/27 20:36:31 1.432 +++ http_main.c 1999/05/01 17:02:26 1.433 @@ -3678,6 +3678,7 @@ #endif #endif signal(SIGALRM, alrm_handler); +signal(SIGUSR2, alrm_handler); #ifdef TPF signal(SIGHUP, just_die); signal(SIGTERM, just_die); @@ -4241,7 +4242,7 @@ else if (ps-last_rtime + ss-timeout_len now) { /* no progress, and the timeout length has been exceeded */ ss-timeout_len = 0; - kill(ps-pid, SIGALRM); + kill(ps-pid, SIGUSR2); } } #endif 1.75 +18 -5 apache-1.3/src/modules/proxy/proxy_ftp.c Index: proxy_ftp.c === RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_ftp.c,v retrieving revision 1.74 retrieving revision 1.75 diff -u -r1.74 -r1.75 --- proxy_ftp.c 1999/04/09 13:06:28 1.74 +++ proxy_ftp.c 1999/05/01 17:02:28 1.75 @@ -323,8 +323,11 @@ while (!con-aborted) { n = ap_bgets(buf, sizeof buf, f); if (n == -1) { /* input error */ - if (c != NULL) + if (c != NULL) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, c-req, + proxy: error reading from %s, c-url); c = ap_proxy_cache_error(c); + } break; } if (n == 0) @@ -383,8 +386,11 @@ o = 0; total_bytes_sent += n; - if (c != NULL c-fp ap_bwrite(c-fp, buf, n) != n) + if (c != NULL c-fp ap_bwrite(c-fp, buf, n) != n) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, c-req, + proxy: error writing to %s, c-tempfile); c = ap_proxy_cache_error(c); + } while (n !r-connection-aborted) { w = ap_bwrite(con-client, buf[o], n); @@ -1196,8 +1202,11 @@ if (!r-assbackwards) ap_rvputs(r, HTTP/1.0 , r-status_line, CRLF, NULL); if (c != NULL c-fp != NULL - ap_bvputs(c-fp, HTTP/1.0 , r-status_line, CRLF, NULL) == -1) - c = ap_proxy_cache_error(c); + ap_bvputs(c-fp, HTTP/1.0 , r-status_line, CRLF, NULL) == -1) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, c-req, + proxy: error writing CRLF to %s, c-tempfile); + c = ap_proxy_cache_error(c); +} /* send headers */ tdo.req = r; @@ -1206,8 +1215,11 @@ if (!r-assbackwards) ap_rputs(CRLF, r); -if (c != NULL c-fp != NULL ap_bputs(CRLF, c-fp) == -1) +if (c != NULL c-fp != NULL ap_bputs(CRLF, c-fp) == -1) { + ap_log_rerror(APLOG_MARK, APLOG_ERR, c-req, + proxy: error writing CRLF to %s, c-tempfile); c = ap_proxy_cache_error(c); +} ap_bsetopt(r-connection-client, BO_BYTECT, zero); r-sent_bodyct = 1; @@ -1226,6 +1238,7 @@ /* XXX: we checked for 125||150||226||250 above. This is redundant. */ if (rc != 226 rc != 250) +/* XXX: we no longer log an error writing to c-tempfile - should we? */ c = ap_proxy_cache_error(c); } else { 1.64 +21 -7 apache-1.3/src/modules/proxy/proxy_http.c Index
cvs commit: apache-1.3/src CHANGES
dgaudet 99/05/01 10:03:50 Modified:src CHANGES Log: PR#3178 submitter also diagnosed the fix Revision ChangesPath 1.1338+2 -1 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1337 retrieving revision 1.1338 diff -u -r1.1337 -r1.1338 --- CHANGES 1999/05/01 17:02:24 1.1337 +++ CHANGES 1999/05/01 17:03:48 1.1338 @@ -3,7 +3,8 @@ *) Fix intermittent SEGV in ap_proxy_cache_error() in src/modules/proxy_util.c where a NULL filepointer and temporary filename were closed and unlinked. - [Graham Leggett [EMAIL PROTECTED]] PR#3178 + [Graham Leggett [EMAIL PROTECTED], + Tim Costello [EMAIL PROTECTED]] PR#3178 *) Fix inconsistant error messages reported by mod_proxy. [Graham Leggett [EMAIL PROTECTED]]
cvs commit: apache-1.3/src/modules/standard mod_autoindex.c
dgaudet 99/05/01 10:13:05 Modified:src/modules/standard mod_autoindex.c Log: fix a slight problem with my recent fix to mod_autoindex Submitted by: Raymond S Brand [EMAIL PROTECTED] Revision ChangesPath 1.104 +2 -2 apache-1.3/src/modules/standard/mod_autoindex.c Index: mod_autoindex.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_autoindex.c,v retrieving revision 1.103 retrieving revision 1.104 diff -u -r1.103 -r1.104 --- mod_autoindex.c 1999/04/21 02:00:55 1.103 +++ mod_autoindex.c 1999/05/01 17:13:04 1.104 @@ -1167,8 +1167,8 @@ nwidth = name_width; } ap_rvputs(r, A HREF=\, anchor, \, - ap_escape_html(scratch, t2), pad_scratch + nwidth, - /A, NULL); + ap_escape_html(scratch, t2), /A, pad_scratch + nwidth, + NULL); /* * The blank before the storm.. er, before the next field. */
cvs commit: apache-1.3/conf mime.types
dgaudet 99/04/20 16:19:36 Modified:conf mime.types Log: add .xls (flame away) PR: 3935 Revision ChangesPath 1.24 +1 -1 apache-1.3/conf/mime.types Index: mime.types === RCS file: /home/cvs/apache-1.3/conf/mime.types,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- mime.types1999/03/14 23:58:59 1.23 +++ mime.types1999/04/20 23:19:33 1.24 @@ -117,7 +117,7 @@ application/vnd.mitsubishi.misty-guard.trustweb application/vnd.ms-artgalry application/vnd.ms-asf -application/vnd.ms-excel +application/vnd.ms-excel xls application/vnd.ms-powerpointppt application/vnd.ms-project application/vnd.ms-tnef
cvs commit: apache-1.3/src/main http_request.c
dgaudet 99/04/20 16:38:45 Modified:src CHANGES src/main http_request.c Log: copy expecting_100 when doing an internal redirect PR: 3910 Submitted by: Jose KAHAN [EMAIL PROTECTED] Revision ChangesPath 1.1316+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1315 retrieving revision 1.1316 diff -u -r1.1315 -r1.1316 --- CHANGES 1999/04/20 21:53:22 1.1315 +++ CHANGES 1999/04/20 23:38:41 1.1316 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) The 100 Continue response wasn't being sent after internal + redirects. [Jose KAHAN [EMAIL PROTECTED]] PR#3910 + *) When padding the name with spaces for display, mod_autoindex would count , , and in their escaped width, messing up the display. [Dean Gaudet] PR#4075 1.147 +1 -0 apache-1.3/src/main/http_request.c Index: http_request.c === RCS file: /home/cvs/apache-1.3/src/main/http_request.c,v retrieving revision 1.146 retrieving revision 1.147 diff -u -r1.146 -r1.147 --- http_request.c1999/03/07 15:05:36 1.146 +++ http_request.c1999/04/20 23:38:44 1.147 @@ -1309,6 +1309,7 @@ new-htaccess= r-htaccess; new-no_cache= r-no_cache; +new-expecting_100= r-expecting_100; new-no_local_copy = r-no_local_copy; new-read_length = r-read_length; /* We can only read it once */ new-vlist_validator = r-vlist_validator;
cvs commit: apache-1.3/src CHANGES
dgaudet 99/04/20 18:29:21 Modified:src CHANGES Log: a few more PRs Revision ChangesPath 1.1317+1 -1 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1316 retrieving revision 1.1317 diff -u -r1.1316 -r1.1317 --- CHANGES 1999/04/20 23:38:41 1.1316 +++ CHANGES 1999/04/21 01:29:17 1.1317 @@ -1,7 +1,7 @@ Changes with Apache 1.3.7 *) The 100 Continue response wasn't being sent after internal - redirects. [Jose KAHAN [EMAIL PROTECTED]] PR#3910 + redirects. [Jose KAHAN [EMAIL PROTECTED]] PR#3910, 3806, 3575 *) When padding the name with spaces for display, mod_autoindex would count , , and in their escaped width, messing up the display.
cvs commit: apache-1.3/src/modules/standard mod_autoindex.c
dgaudet 99/04/20 19:00:57 Modified:src CHANGES src/modules/standard mod_autoindex.c Log: we don't need padding when we're not doing fancyindexing PR: 3770 Submitted by: [EMAIL PROTECTED] Revision ChangesPath 1.1318+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1317 retrieving revision 1.1318 diff -u -r1.1317 -r1.1318 --- CHANGES 1999/04/21 01:29:17 1.1317 +++ CHANGES 1999/04/21 02:00:48 1.1318 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) IndexOptions None generated extra spaces at the end of each + line. [EMAIL PROTECTED] PR#3770 + *) The 100 Continue response wasn't being sent after internal redirects. [Jose KAHAN [EMAIL PROTECTED]] PR#3910, 3806, 3575 1.103 +1 -1 apache-1.3/src/modules/standard/mod_autoindex.c Index: mod_autoindex.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_autoindex.c,v retrieving revision 1.102 retrieving revision 1.103 diff -u -r1.102 -r1.103 --- mod_autoindex.c 1999/04/20 21:53:25 1.102 +++ mod_autoindex.c 1999/04/21 02:00:55 1.103 @@ -1198,7 +1198,7 @@ } else { ap_rvputs(r, LIA HREF=\, anchor, \ , t2, - /A, pad_scratch + strlen(t2), NULL); + /A, NULL); } ap_rputc('\n', r); }
cvs commit: apache-1.3/src/modules/standard mod_mime_magic.c
dgaudet 99/04/20 20:42:35 Modified:src CHANGES src/modules/standard mod_mime_magic.c Log: uncompress and gzip don't like getting only 4k of the file... pass them the entire file (but we still only read 4k, so they don't get to run for long). PR: 4097 Submitted by: Marcin Cieslak [EMAIL PROTECTED] Revision ChangesPath 1.1319+7 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1318 retrieving revision 1.1319 diff -u -r1.1318 -r1.1319 --- CHANGES 1999/04/21 02:00:48 1.1318 +++ CHANGES 1999/04/21 03:42:31 1.1319 @@ -1,5 +1,12 @@ Changes with Apache 1.3.7 + *) mod_mime_magic passed only the first 4k of a file to + uncompress/gzip, but those tools sometimes do not produce + any output unless a sufficient portion of the compressed + file is input. Change to pass the entire file -- but + only read 4k of output. + [Marcin Cieslak [EMAIL PROTECTED]] PR#4097 + *) IndexOptions None generated extra spaces at the end of each line. [EMAIL PROTECTED] PR#3770 1.39 +27 -21apache-1.3/src/modules/standard/mod_mime_magic.c Index: mod_mime_magic.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_mime_magic.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- mod_mime_magic.c 1999/01/01 19:05:11 1.38 +++ mod_mime_magic.c 1999/04/21 03:42:33 1.39 @@ -242,7 +242,7 @@ static int ascmagic(request_rec *, unsigned char *, int); static int is_tar(unsigned char *, int); static int softmagic(request_rec *, unsigned char *, int); -static void tryit(request_rec *, unsigned char *, int); +static void tryit(request_rec *, unsigned char *, int, int); static int zmagic(request_rec *, unsigned char *, int); static int getvalue(server_rec *, struct magic *, char **); @@ -256,7 +256,7 @@ static int mcheck(request_rec *, union VALUETYPE *, struct magic *); static void mprint(request_rec *, union VALUETYPE *, struct magic *); -static int uncompress(request_rec *, int, const unsigned char *, +static int uncompress(request_rec *, int, unsigned char **, int); static long from_oct(int, char *); static int fsmagic(request_rec *r, const char *fn); @@ -887,7 +887,7 @@ magic_rsl_puts(r, MIME_TEXT_UNKNOWN); else { buf[nbytes++] = '\0'; /* null-terminate it */ - tryit(r, buf, nbytes); + tryit(r, buf, nbytes, 1); } (void) ap_pclosef(r-pool, fd); @@ -897,13 +897,15 @@ } -static void tryit(request_rec *r, unsigned char *buf, int nb) +static void tryit(request_rec *r, unsigned char *buf, int nb, int checkzmagic) { /* * Try compression stuff */ -if (zmagic(r, buf, nb) == 1) - return; + if (checkzmagic == 1) { + if (zmagic(r, buf, nb) == 1) + return; + } /* * try tests in /etc/magic (or surrogate magic file) @@ -2082,9 +2084,13 @@ char *encoding; /* MUST be lowercase */ } compr[] = { +/* we use gzip here rather than uncompress because we have to pass + * it a full filename -- and uncompress only considers filenames + * ending with .Z + */ { \037\235, 2, { - uncompress, -c, NULL + gzip, -dcq, NULL }, 0, x-compress }, { @@ -2121,8 +2127,8 @@ if (i == ncompr) return 0; -if ((newsize = uncompress(r, i, buf, newbuf, nbytes)) 0) { - tryit(r, newbuf, newsize); +if ((newsize = uncompress(r, i, newbuf, nbytes)) 0) { + tryit(r, newbuf, newsize, 0); /* set encoding type in the request record */ r-content_encoding = compr[i].encoding; @@ -2139,6 +2145,13 @@ static int uncompress_child(void *data, child_info *pinfo) { struct uncompress_parms *parm = data; + char *new_argv[4]; + + new_argv[0] = compr[parm-method].argv[0]; + new_argv[1] = compr[parm-method].argv[1]; + new_argv[2] = parm-r-filename; + new_argv[3] = NULL; + #if defined(WIN32) int child_pid; #endif @@ -2149,10 +2162,10 @@ #if defined(WIN32) child_pid = spawnvp(compr[parm-method].argv[0], - compr[parm-method].argv); + new_argv); return (child_pid); #else -execvp(compr[parm-method].argv[0], compr[parm-method].argv); +execvp(compr[parm-method].argv[0], new_argv); ap_log_rerror(APLOG_MARK, APLOG_ERR, parm-r, MODNAME : could not execute `%s'., compr[parm-method].argv[0
cvs commit: apache-1.3/src CHANGES
dgaudet 99/04/20 20:50:41 Modified:src CHANGES Log: another PR# Revision ChangesPath 1.1320+1 -1 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1319 retrieving revision 1.1320 diff -u -r1.1319 -r1.1320 --- CHANGES 1999/04/21 03:42:31 1.1319 +++ CHANGES 1999/04/21 03:50:36 1.1320 @@ -15,7 +15,7 @@ *) When padding the name with spaces for display, mod_autoindex would count , , and in their escaped width, messing up the display. - [Dean Gaudet] PR#4075 + [Dean Gaudet] PR#4075, 3758 *) PORT: fixed a compilation problem on NEXT. [Jacques Distler [EMAIL PROTECTED]] PR#4130
cvs commit: apache-1.3/htdocs/manual/misc howto.html
dgaudet 99/04/20 22:01:25 Modified:htdocs/manual/misc howto.html Log: missing / in example PR: 3631 Submitted by: Sebastian Andersson [EMAIL PROTECTED] Revision ChangesPath 1.11 +1 -1 apache-1.3/htdocs/manual/misc/howto.html Index: howto.html === RCS file: /home/cvs/apache-1.3/htdocs/manual/misc/howto.html,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- howto.html1998/10/23 15:14:14 1.10 +++ howto.html1999/04/21 05:01:24 1.11 @@ -77,7 +77,7 @@ PHere's how to redirect all requests to a script... In the server configuration file, -BLOCKQUOTEPREScriptAlias / /usr/local/httpd/cgi-bin/redirect_script/PRE +BLOCKQUOTEPREScriptAlias / /usr/local/httpd/cgi-bin/redirect_script//PRE /BLOCKQUOTE and here's a simple perl script to redirect requests:
cvs commit: apache-1.3 configure
dgaudet 99/04/21 00:21:04 Modified:.configure Log: fix typo PR: 4282 Submitted by: Philippe M.Chiasson [EMAIL PROTECTED] Revision ChangesPath 1.83 +1 -1 apache-1.3/configure Index: configure === RCS file: /home/cvs/apache-1.3/configure,v retrieving revision 1.82 retrieving revision 1.83 diff -u -r1.82 -r1.83 --- configure 1999/04/20 18:19:14 1.82 +++ configure 1999/04/21 07:21:03 1.83 @@ -780,7 +780,7 @@ module ) case $apc_optarg in all ) - OOIFS=$IFSr + OOIFS=$IFS IFS=':' for module in $modules; do eval module_${module}=no
cvs commit: apache-1.3 Makefile.tmpl
dgaudet 99/04/20 09:19:59 Modified:.Makefile.tmpl Log: I want to be able to run make install as a non-root user. Revision ChangesPath 1.71 +2 -2 apache-1.3/Makefile.tmpl Index: Makefile.tmpl === RCS file: /home/cvs/apache-1.3/Makefile.tmpl,v retrieving revision 1.70 retrieving revision 1.71 diff -u -r1.70 -r1.71 --- Makefile.tmpl 1999/04/05 20:53:05 1.70 +++ Makefile.tmpl 1999/04/20 16:19:57 1.71 @@ -257,8 +257,8 @@ $(MKDIR) $(root)$(runtimedir) $(MKDIR) $(root)$(logfiledir) $(MKDIR) $(root)$(proxycachedir) - chown $(conf_user) $(root)$(proxycachedir) - chgrp $(conf_group) $(root)$(proxycachedir) + -chown $(conf_user) $(root)$(proxycachedir) + -chgrp $(conf_group) $(root)$(proxycachedir) @echo === [mktree] # install the server program and optionally corresponding
cvs commit: apache-1.3/src/main alloc.c
dgaudet 99/04/20 09:28:47 Modified:src/main alloc.c Log: ALLOC_STATS support... I don't think this hurts anything... but feel free to remove it if someone objects. Revision ChangesPath 1.108 +51 -0 apache-1.3/src/main/alloc.c Index: alloc.c === RCS file: /home/cvs/apache-1.3/src/main/alloc.c,v retrieving revision 1.107 retrieving revision 1.108 diff -u -r1.107 -r1.108 --- alloc.c 1999/04/08 11:36:33 1.107 +++ alloc.c 1999/04/20 16:28:46 1.108 @@ -111,6 +111,11 @@ */ /* #define MAKE_TABLE_PROFILE */ +/* Provide some statistics on the cost of allocations. It requires a + * bit of an understanding of how alloc.c works. + */ +/* #define ALLOC_STATS */ + #ifdef POOL_DEBUG #ifdef ALLOC_USE_MALLOC # error sorry, no support for ALLOC_USE_MALLOC and POOL_DEBUG at the same time @@ -171,6 +176,13 @@ static union block_hdr *global_block_list; #define FREE_POOL((struct pool *)(-1)) #endif +#ifdef ALLOC_STATS +static unsigned long long num_free_blocks_calls; +static unsigned long long num_blocks_freed; +static unsigned max_blocks_in_one_free; +static unsigned num_malloc_calls; +static unsigned num_malloc_bytes; +#endif #ifdef ALLOC_DEBUG #define FILL_BYTE((char)(0xa5)) @@ -208,6 +220,10 @@ */ size += CLICK_SZ; #endif +#ifdef ALLOC_STATS +++num_malloc_calls; +num_malloc_bytes += size + sizeof(union block_hdr); +#endif blok = (union block_hdr *) malloc(size + sizeof(union block_hdr)); if (blok == NULL) { fprintf(stderr, Ouch! malloc failed in malloc_block()\n); @@ -261,6 +277,9 @@ free(blok); } #else +#ifdef ALLOC_STATS +unsigned num_blocks; +#endif /* First, put new blocks at the head of the free list --- * we'll eventually bash the 'next' pointer of the last block * in the chain to point to the free blocks we already had. @@ -281,7 +300,13 @@ * now. */ +#ifdef ALLOC_STATS +num_blocks = 1; +#endif while (blok-h.next != NULL) { +#ifdef ALLOC_STATS + ++num_blocks; +#endif chk_on_blk_list(blok, old_free_list); blok-h.first_avail = (char *) (blok + 1); debug_fill(blok-h.first_avail, blok-h.endp - blok-h.first_avail); @@ -301,6 +326,15 @@ /* Finally, reset next pointer to get the old free blocks back */ blok-h.next = old_free_list; + +#ifdef ALLOC_STATS +if (num_blocks max_blocks_in_one_free) { + max_blocks_in_one_free = num_blocks; +} +++num_free_blocks_calls; +num_blocks_freed += num_blocks; +#endif + (void) ap_release_mutex(alloc_mutex); #endif } @@ -448,6 +482,20 @@ } #endif +#ifdef ALLOC_STATS +static void dump_stats(void) +{ +fprintf(stderr, + alloc_stats: [%d] #free_blocks %llu #blocks %llu max %u #malloc %u #bytes %u\n, + (int)getpid(), + num_free_blocks_calls, + num_blocks_freed, + max_blocks_in_one_free, + num_malloc_calls, + num_malloc_bytes); +} +#endif + pool *ap_init_alloc(void) { #ifdef POOL_DEBUG @@ -459,6 +507,9 @@ alloc_mutex = ap_create_mutex(NULL); spawn_mutex = ap_create_mutex(NULL); permanent_pool = ap_make_sub_pool(NULL); +#ifdef ALLOC_STATS +atexit(dump_stats); +#endif return permanent_pool; }
cvs commit: apache-1.3/src/main http_core.c
dgaudet 99/04/20 10:03:28 Modified:src CHANGES src/main http_core.c Log: fix memory leak exacerbated by certain configurations PR: 4225 Revision ChangesPath 1.1309+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1308 retrieving revision 1.1309 diff -u -r1.1308 -r1.1309 --- CHANGES 1999/04/20 15:44:08 1.1308 +++ CHANGES 1999/04/20 17:03:25 1.1309 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) Fix a memory leak which is exacerbated by certain configurations. + [Dean Gaudet] PR#4225 + *) Prevent clobbering saved IFS values in APACI. [Jim Jagielski] *) Fix buffer overflows in ap_uuencode and ap_uudecode pointed out 1.259 +7 -12 apache-1.3/src/main/http_core.c Index: http_core.c === RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v retrieving revision 1.258 retrieving revision 1.259 diff -u -r1.258 -r1.259 --- http_core.c 1999/04/09 12:57:07 1.258 +++ http_core.c 1999/04/20 17:03:27 1.259 @@ -407,18 +407,16 @@ int nelts; void **elts; int i; +pool *tmp; -/* XXX: we are about to waste some ram ... we will build a new array - * and we need some scratch space to do it. The old array and the - * scratch space are never freed. - */ sconf = ap_get_module_config(s-module_config, core_module); sec = sconf-sec; nelts = sec-nelts; elts = (void **)sec-elts; -/* build our sorting space */ -sortbin = ap_palloc(p, sec-nelts * sizeof(*sortbin)); +/* we have to allocate tmp space to do a stable sort */ +tmp = ap_make_sub_pool(p); +sortbin = ap_palloc(tmp, sec-nelts * sizeof(*sortbin)); for (i = 0; i nelts; ++i) { sortbin[i].orig_index = i; sortbin[i].elt = elts[i]; @@ -426,15 +424,12 @@ qsort(sortbin, nelts, sizeof(*sortbin), reorder_sorter); -/* and now build a new array */ -/* XXX: uh I don't see why we can't reuse the old array, what - * was I thinking? -djg */ -sec = ap_make_array(p, nelts, sizeof(void *)); +/* and now copy back to the original array */ for (i = 0; i nelts; ++i) { - *(void **)ap_push_array(sec) = sortbin[i].elt; + elts[i] = sortbin[i].elt; } -sconf-sec = sec; +ap_destroy_pool(tmp); } /*
cvs commit: apache-1.3/src/modules/standard mod_mime.c
dgaudet 99/04/20 10:27:51 Modified:src CHANGES src/modules/standard mod_mime.c Log: islower() returns true for stuff outside a-z when locale isn't C PR: 3427 Revision ChangesPath 1.1310+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1309 retrieving revision 1.1310 diff -u -r1.1309 -r1.1310 --- CHANGES 1999/04/20 17:03:25 1.1309 +++ CHANGES 1999/04/20 17:27:47 1.1310 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) Fix the mod_mime hash table to work properly with locales other + than C. [Dean Gaudet] PR#3427 + *) Fix a memory leak which is exacerbated by certain configurations. [Dean Gaudet] PR#4225 1.49 +2 -7 apache-1.3/src/modules/standard/mod_mime.c Index: mod_mime.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_mime.c,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- mod_mime.c1999/01/01 19:05:11 1.48 +++ mod_mime.c1999/04/20 17:27:51 1.49 @@ -233,13 +233,8 @@ * get private versions through AddType... */ -/* MIME_HASHSIZE used to be 27 (26 chars and one non-alpha slot), but - * with character sets like EBCDIC, this is insufficient because the - * range 'a'...'z' is not contigous. Defining it as ('z'-'a'+2) is - * equivalent to 27 in ASCII, and makes it work in EBCDIC. - */ -#define MIME_HASHSIZE ('z'-'a'+2) -#define hash(i) (ap_isalpha(i) ? (ap_tolower(i)) - 'a' : (MIME_HASHSIZE-1)) +#define MIME_HASHSIZE (32) +#define hash(i) (ap_tolower(i) % MIME_HASHSIZE) static table *hash_buckets[MIME_HASHSIZE];
cvs commit: apache-1.3/src/main http_protocol.c
dgaudet 99/04/20 10:51:40 Modified:src CHANGES src/include ap_mmn.h http_protocol.h src/main http_protocol.c Log: Add ap_vrprintf() function PR: 4246 Submitted by: John Tobey [EMAIL PROTECTED] Revision ChangesPath 1.1311+2 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1310 retrieving revision 1.1311 diff -u -r1.1310 -r1.1311 --- CHANGES 1999/04/20 17:27:47 1.1310 +++ CHANGES 1999/04/20 17:51:35 1.1311 @@ -1,5 +1,7 @@ Changes with Apache 1.3.7 + *) Add ap_vrprintf() function. [John Tobey [EMAIL PROTECTED]] PR#4246 + *) Fix the mod_mime hash table to work properly with locales other than C. [Dean Gaudet] PR#3427 1.33 +2 -1 apache-1.3/src/include/ap_mmn.h Index: ap_mmn.h === RCS file: /home/cvs/apache-1.3/src/include/ap_mmn.h,v retrieving revision 1.32 retrieving revision 1.33 diff -u -r1.32 -r1.33 --- ap_mmn.h 1999/03/20 23:43:23 1.32 +++ ap_mmn.h 1999/04/20 17:51:37 1.33 @@ -214,6 +214,7 @@ * 19990108.6 - SIGPIPE is now ignored by the core server. * 19990108.7 - ap_isxdigit added * 19990320 - METHODS and M_INVALID symbol values modified + * 19990320.1 - add ap_vrprintf() */ #define MODULE_MAGIC_COOKIE 0x41503133UL /* AP13 */ @@ -221,7 +222,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 19990320 #endif -#define MODULE_MAGIC_NUMBER_MINOR 0 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 1 /* 0...n */ #define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR/* backward compat */ /* Useful for testing for features. */ 1.49 +1 -0 apache-1.3/src/include/http_protocol.h Index: http_protocol.h === RCS file: /home/cvs/apache-1.3/src/include/http_protocol.h,v retrieving revision 1.48 retrieving revision 1.49 diff -u -r1.48 -r1.49 --- http_protocol.h 1999/01/01 19:04:40 1.48 +++ http_protocol.h 1999/04/20 17:51:37 1.49 @@ -148,6 +148,7 @@ API_EXPORT(int) ap_rputs(const char *str, request_rec *r); API_EXPORT(int) ap_rwrite(const void *buf, int nbyte, request_rec *r); API_EXPORT_NONSTD(int) ap_rvputs(request_rec *r,...); +API_EXPORT(int) ap_vrprintf(request_rec *r, const char *fmt, va_list vlist); API_EXPORT_NONSTD(int) ap_rprintf(request_rec *r, const char *fmt,...) __attribute__((format(printf,2,3))); API_EXPORT(int) ap_rflush(request_rec *r); 1.262 +22 -0 apache-1.3/src/main/http_protocol.c Index: http_protocol.c === RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v retrieving revision 1.261 retrieving revision 1.262 diff -u -r1.261 -r1.262 --- http_protocol.c 1999/03/10 17:42:42 1.261 +++ http_protocol.c 1999/04/20 17:51:38 1.262 @@ -2173,6 +2173,28 @@ return n; } +API_EXPORT(int) ap_vrprintf(request_rec *r, const char *fmt, va_list ap) +{ +int n; + +if (r-connection-aborted) +return -1; + +n = ap_vbprintf(r-connection-client, fmt, ap); + +if (n 0) { +if (!r-connection-aborted) { +ap_log_rerror(APLOG_MARK, APLOG_INFO, r, +client stopped connection before vrprintf completed); +ap_bsetflag(r-connection-client, B_EOUT, 1); +r-connection-aborted = 1; +} +return -1; +} +SET_BYTES_SENT(r); +return n; +} + API_EXPORT(int) ap_rprintf(request_rec *r, const char *fmt,...) { va_list vlist;
cvs commit: apache-1.3/conf httpd.conf-dist
dgaudet 99/04/20 10:59:38 Modified:conf httpd.conf-dist Log: * matches a single component, this example makes more sense PR: 4221 Revision ChangesPath 1.39 +1 -1 apache-1.3/conf/httpd.conf-dist Index: httpd.conf-dist === RCS file: /home/cvs/apache-1.3/conf/httpd.conf-dist,v retrieving revision 1.38 retrieving revision 1.39 diff -u -r1.38 -r1.39 --- httpd.conf-dist 1999/03/10 09:14:27 1.38 +++ httpd.conf-dist 1999/04/20 17:59:35 1.39 @@ -328,7 +328,7 @@ # Control access to UserDir directories. The following is an example # for a site where these directories are restricted to read-only. # -#Directory /*/public_html +#Directory /home/*/public_html #AllowOverride FileInfo AuthConfig Limit #Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec #Limit GET POST OPTIONS PROPFIND
cvs commit: apache-1.3/conf httpd.conf-dist
dgaudet 99/04/20 11:03:12 Modified:conf httpd.conf-dist Log: protect .ht* files ... rather than just .htaccess (it costs pretty much the same) PR: 4215 Revision ChangesPath 1.40 +4 -1 apache-1.3/conf/httpd.conf-dist Index: httpd.conf-dist === RCS file: /home/cvs/apache-1.3/conf/httpd.conf-dist,v retrieving revision 1.39 retrieving revision 1.40 diff -u -r1.39 -r1.40 --- httpd.conf-dist 1999/04/20 17:59:35 1.39 +++ httpd.conf-dist 1999/04/20 18:03:09 1.40 @@ -361,7 +361,10 @@ # .htaccess files. If you change the AccessFileName directive above, # be sure to make the corresponding changes here. # -Files .htaccess +# Also, folks tend to use names such as .htpasswd for password +# files, so this will protect those as well. +# +Files ~ ^\.ht Order allow,deny Deny from all /Files
cvs commit: apache-1.3/src/main http_protocol.c
dgaudet 99/04/20 11:36:10 Modified:src CHANGES src/main http_protocol.c Log: deal with UTS compiler error PR: 4189 Submitted by: Dave Dykstra [EMAIL PROTECTED] Revision ChangesPath 1.1312+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1311 retrieving revision 1.1312 diff -u -r1.1311 -r1.1312 --- CHANGES 1999/04/20 17:51:35 1.1311 +++ CHANGES 1999/04/20 18:36:01 1.1312 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) PORT: deal with UTS compiler error in http_protocol.c + [Dave Dykstra [EMAIL PROTECTED]] PR#4189 + *) Add ap_vrprintf() function. [John Tobey [EMAIL PROTECTED]] PR#4246 *) Fix the mod_mime hash table to work properly with locales other 1.263 +10 -1 apache-1.3/src/main/http_protocol.c Index: http_protocol.c === RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v retrieving revision 1.262 retrieving revision 1.263 diff -u -r1.262 -r1.263 --- http_protocol.c 1999/04/20 17:51:38 1.262 +++ http_protocol.c 1999/04/20 18:36:07 1.263 @@ -1170,7 +1170,16 @@ * and must be listed in order. */ -static const char * const status_lines[RESPONSE_CODES] = { +#ifdef UTS21 +/* The second const triggers an assembler bug on UTS 2.1. + * Another workaround is to move some code out of this file into another, + * but this is easier. Dave Dykstra, 3/31/99 + */ +static const char * status_lines[RESPONSE_CODES] = +#else +static const char * const status_lines[RESPONSE_CODES] = +#endif +{ 100 Continue, 101 Switching Protocols, 102 Processing,
cvs commit: apache-1.3/src/main http_main.c http_protocol.c
dgaudet 99/04/20 12:15:46 Modified:src CHANGES src/main http_main.c http_protocol.c Log: r-request_time wasn't being set in certain error cases PR: 4156 Revision ChangesPath 1.1313+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1312 retrieving revision 1.1313 diff -u -r1.1312 -r1.1313 --- CHANGES 1999/04/20 18:36:01 1.1312 +++ CHANGES 1999/04/20 19:15:34 1.1313 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) r-request_time wasn't being set properly in certain error conditions. + [Dean Gaudet] PR#4156 + *) PORT: deal with UTS compiler error in http_protocol.c [Dave Dykstra [EMAIL PROTECTED]] PR#4189 1.430 +6 -1 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.429 retrieving revision 1.430 diff -u -r1.429 -r1.430 --- http_main.c 1999/04/08 21:04:43 1.429 +++ http_main.c 1999/04/20 19:15:39 1.430 @@ -1079,8 +1079,13 @@ log_req = log_req-prev; } - if (!current_conn-keptalive) + if (!current_conn-keptalive) { + /* in some cases we come here before setting the time */ + if (log_req-request_time == 0) { + log_req-request_time = time(0); + } ap_log_transaction(log_req); + } ap_bsetflag(save_req-connection-client, B_EOUT, 1); ap_bclose(save_req-connection-client); 1.264 +4 -0 apache-1.3/src/main/http_protocol.c Index: http_protocol.c === RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v retrieving revision 1.263 retrieving revision 1.264 diff -u -r1.263 -r1.264 --- http_protocol.c 1999/04/20 18:36:07 1.263 +++ http_protocol.c 1999/04/20 19:15:41 1.264 @@ -791,6 +791,10 @@ while ((len = getline(l, sizeof(l), conn-client, 0)) = 0) { if ((len 0) || ap_bgetflag(conn-client, B_EOF)) { ap_bsetflag(conn-client, B_SAFEREAD, 0); + /* this is a hack to make sure that request time is set, + * it's not perfect, but it's better than nothing + */ + r-request_time = time(0); return 0; } }
cvs commit: apache-1.3/htdocs/manual windows.html
dgaudet 99/04/20 12:18:42 Modified:htdocs/manual windows.html Log: note about 127.0.0.1 PR: 4155 Revision ChangesPath 1.29 +6 -0 apache-1.3/htdocs/manual/windows.html Index: windows.html === RCS file: /home/cvs/apache-1.3/htdocs/manual/windows.html,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- windows.html 1999/04/08 21:56:40 1.28 +++ windows.html 1999/04/20 19:18:41 1.29 @@ -202,6 +202,12 @@ This should respond with a welcome page, and a link to the Apache manual. If nothing happens or you get an error, look in the SAMPerror_log/SAMP file in the SAMPlogs/SAMP directory. +If your host isn't connected to the net, you may have to use +this URL: + +PRE + http://127.0.0.1/ +/PRE P
cvs commit: apache-1.3/src/include ap_config.h
dgaudet 99/04/20 12:43:00 Modified:src CHANGES src/include ap_config.h Log: what the heck? We don't use n_long anywhere, why define it? And even more perplexing -- why were the rlim_t and n_long conditionalized on S_IWOTH ?? PR: 4130 Revision ChangesPath 1.1314+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1313 retrieving revision 1.1314 diff -u -r1.1313 -r1.1314 --- CHANGES 1999/04/20 19:15:34 1.1313 +++ CHANGES 1999/04/20 19:42:54 1.1314 @@ -1,5 +1,8 @@ Changes with Apache 1.3.7 + *) PORT: fixed a compilation problem on NEXT. + [Jacques Distler [EMAIL PROTECTED]] PR#4130 + *) r-request_time wasn't being set properly in certain error conditions. [Dean Gaudet] PR#4156 1.254 +0 -4 apache-1.3/src/include/ap_config.h Index: ap_config.h === RCS file: /home/cvs/apache-1.3/src/include/ap_config.h,v retrieving revision 1.253 retrieving revision 1.254 diff -u -r1.253 -r1.254 --- ap_config.h 1999/04/08 11:36:32 1.253 +++ ap_config.h 1999/04/20 19:42:59 1.254 @@ -367,10 +367,6 @@ #endif #ifndef S_IWOTH #define S_IWOTH 02 -#ifndef rlim_t -typedef int rlim_t; -#endif -typedef u_long n_long; #endif #define STDIN_FILENO 0
cvs commit: apache-1.3/htdocs/manual/misc known_client_problems.html
dgaudet 99/04/20 13:00:40 Modified:htdocs/manual/misc known_client_problems.html Log: ie40 screws up vary PR: 4118 Revision ChangesPath 1.16 +7 -0 apache-1.3/htdocs/manual/misc/known_client_problems.html Index: known_client_problems.html === RCS file: /home/cvs/apache-1.3/htdocs/manual/misc/known_client_problems.html,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- known_client_problems.html1999/01/22 18:04:11 1.15 +++ known_client_problems.html1999/04/20 20:00:39 1.16 @@ -279,6 +279,13 @@ these versions of Lynx. As a workaround future versions of Apache will ignore this header when sent by the Lynx client. +h3a name=ie40-varyMSIE 4.0 mishandles Vary response header/a/h3 + +pMSIE 4.0 does not handle a Vary header properly. The Vary header is +generated by mod_rewrite in apache 1.3. The result is an error from MSIE +saying it cannot download the requested file. There are more details +in a href=http://bugs.apache.org/index/full/4118;PR#4118/a. + !--#include virtual=footer.html -- /BODY /HTML
cvs commit: apache-1.3/src/include ap_config.h
dgaudet 99/03/16 08:16:08 Modified:src CHANGES src/include ap_config.h Log: switch back to fcntl() locking on linux PR: 3531 Reviewed by: Lincoln Stein [EMAIL PROTECTED] Revision ChangesPath 1.1282+4 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1281 retrieving revision 1.1282 diff -u -r1.1281 -r1.1282 --- CHANGES 1999/03/16 00:38:53 1.1281 +++ CHANGES 1999/03/16 16:16:03 1.1282 @@ -1,5 +1,9 @@ Changes with Apache 1.3.5 + *) PORT: Switch back to using fcntl() locking on Linux -- instabilities + have been reported with flock() locking (probably related to kernel + version). [Dean Gaudet] PR#3531 + *) Using APACI, the main config file (usually httpd.conf) was not being adjusted as $(TARGET).conf. [Wilfredo Sanchez [EMAIL PROTECTED]] 1.252 +7 -1 apache-1.3/src/include/ap_config.h Index: ap_config.h === RCS file: /home/cvs/apache-1.3/src/include/ap_config.h,v retrieving revision 1.251 retrieving revision 1.252 diff -u -r1.251 -r1.252 --- ap_config.h 1999/03/10 11:37:52 1.251 +++ ap_config.h 1999/03/16 16:16:07 1.252 @@ -460,7 +460,13 @@ #define USE_MMAP_FILES /* flock is faster ... but hasn't been tested on 1.x systems */ -#define USE_FLOCK_SERIALIZED_ACCEPT +/* PR#3531 indicates flock() may not be stable, probably depends on + * kernel version. Go back to using fcntl, but provide a way for + * folks to tweak their Configuration to get flock. + */ +#ifndef USE_FLOCK_SERIALIZED_ACCEPT +#define USE_FCNTL_SERIALIZED_ACCEPT +#endif #define SYS_SIGLIST _sys_siglist
cvs commit: apache-1.3/src CHANGES
dgaudet 99/03/16 08:51:08 Modified:src CHANGES Log: also pr#2723 Revision ChangesPath 1.1283+1 -1 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1282 retrieving revision 1.1283 diff -u -r1.1282 -r1.1283 --- CHANGES 1999/03/16 16:16:03 1.1282 +++ CHANGES 1999/03/16 16:51:06 1.1283 @@ -2,7 +2,7 @@ *) PORT: Switch back to using fcntl() locking on Linux -- instabilities have been reported with flock() locking (probably related to kernel - version). [Dean Gaudet] PR#3531 + version). [Dean Gaudet] PR#2723, 3531 *) Using APACI, the main config file (usually httpd.conf) was not being adjusted as $(TARGET).conf. [Wilfredo Sanchez
cvs commit: apache-1.3/src CHANGES
dgaudet 99/03/11 08:47:59 Modified:src CHANGES Log: should really say SECURITY on this line Revision ChangesPath 1.1279+5 -4 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1278 retrieving revision 1.1279 diff -u -r1.1278 -r1.1279 --- CHANGES 1999/03/10 18:09:40 1.1278 +++ CHANGES 1999/03/11 16:47:56 1.1279 @@ -16,10 +16,11 @@ DSO/DLL section because it's a directive from mod_status and isn't available before the DLL of mod_status is loaded. [Martin POESCHL [EMAIL PROTECTED]] PR#3936 - - *) Fix a bug in the calculation of the buffer size for the line continuation - facility in Apache's configuration files which could lead to a buffer - overflow situation. [Thomas Devanneaux [EMAIL PROTECTED]] PR#3617 + + *) SECURITY: Fix a bug in the calculation of the buffer size for the line + continuation facility in Apache's configuration files which could + lead to a buffer overflow situation. + [Thomas Devanneaux [EMAIL PROTECTED]] PR#3617 *) Make documentation and error messages of APACI's --activate-module=FILE option more clear. [Jan Wolter [EMAIL PROTECTED]] PR#3995
cvs commit: apache-1.3/src/main http_log.c
dgaudet 99/03/11 08:52:39 Modified:src/main http_log.c Log: remove the extra httpd: logged for each error message Reviewed by: Marc Slemko, Ralf S. Engelschall Revision ChangesPath 1.76 +1 -2 apache-1.3/src/main/http_log.c Index: http_log.c === RCS file: /home/cvs/apache-1.3/src/main/http_log.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -r1.75 -r1.76 --- http_log.c1999/01/01 19:04:48 1.75 +++ http_log.c1999/03/11 16:52:38 1.76 @@ -322,8 +322,7 @@ } if (logf) { - len = ap_snprintf(errstr, sizeof(errstr), %s: [%s] , - ap_server_argv0, ap_get_time()); + len = ap_snprintf(errstr, sizeof(errstr), [%s] , ap_get_time()); } else { len = 0; }
cvs commit: apache-1.3/src/modules/proxy mod_proxy.c proxy_ftp.c proxy_util.c
dgaudet 99/03/10 09:42:47 Modified:src CHANGES src/include ap_ctype.h ap_mmn.h http_core.h src/main http_protocol.c util.c util_date.c src/modules/proxy mod_proxy.c proxy_ftp.c proxy_util.c Log: somehow we missed implementing ap_isxdigit... oh and there was a stray use of isdigit() Revision ChangesPath 1.1277+3 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1276 retrieving revision 1.1277 diff -u -r1.1276 -r1.1277 --- CHANGES 1999/03/10 13:37:58 1.1276 +++ CHANGES 1999/03/10 17:42:35 1.1277 @@ -1,5 +1,8 @@ Changes with Apache 1.3.5 + *) ap_isxdigit was somehow neglected when adding the ap_isfoo() macros + for 8-bit safeness. [Dean Gaudet] + *) Use -fPIC instead of -fpic on Solaris and SunOS for compiling DSOs because SPARCs have a small machine-specific maximum size for the Global Offset Table which is often exceeded when compiling one of the larger 1.5 +1 -0 apache-1.3/src/include/ap_ctype.h Index: ap_ctype.h === RCS file: /home/cvs/apache-1.3/src/include/ap_ctype.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ap_ctype.h1999/01/01 19:04:39 1.4 +++ ap_ctype.h1999/03/10 17:42:39 1.5 @@ -79,6 +79,7 @@ #define ap_ispunct(c) (ispunct(((unsigned char)(c #define ap_isspace(c) (isspace(((unsigned char)(c #define ap_isupper(c) (isupper(((unsigned char)(c +#define ap_isxdigit(c) (isxdigit(((unsigned char)(c #define ap_tolower(c) (tolower(((unsigned char)(c #define ap_toupper(c) (toupper(((unsigned char)(c 1.31 +2 -1 apache-1.3/src/include/ap_mmn.h Index: ap_mmn.h === RCS file: /home/cvs/apache-1.3/src/include/ap_mmn.h,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- ap_mmn.h 1999/03/08 15:43:59 1.30 +++ ap_mmn.h 1999/03/10 17:42:40 1.31 @@ -212,6 +212,7 @@ * 19990108.5 - added ap_sub_req_method_uri() and added const to the *definition of method in request_rec. * 19990108.6 - SIGPIPE is now ignored by the core server. + * 19990108.7 - ap_isxdigit added */ #define MODULE_MAGIC_COOKIE 0x41503133UL /* AP13 */ @@ -219,7 +220,7 @@ #ifndef MODULE_MAGIC_NUMBER_MAJOR #define MODULE_MAGIC_NUMBER_MAJOR 19990108 #endif -#define MODULE_MAGIC_NUMBER_MINOR 6 /* 0...n */ +#define MODULE_MAGIC_NUMBER_MINOR 7 /* 0...n */ #define MODULE_MAGIC_NUMBER MODULE_MAGIC_NUMBER_MAJOR/* backward compat */ /* Useful for testing for features. */ 1.54 +3 -0 apache-1.3/src/include/http_core.h Index: http_core.h === RCS file: /home/cvs/apache-1.3/src/include/http_core.h,v retrieving revision 1.53 retrieving revision 1.54 diff -u -r1.53 -r1.54 --- http_core.h 1999/02/05 00:37:48 1.53 +++ http_core.h 1999/03/10 17:42:40 1.54 @@ -238,6 +238,9 @@ */ unsigned d_is_fnmatch : 1; +/* takes sense only if use_canonical_name is on */ +unsigned use_canonical_port : 1; + /* System Resource Control */ #ifdef RLIMIT_CPU struct rlimit *limit_cpu; 1.261 +2 -2 apache-1.3/src/main/http_protocol.c Index: http_protocol.c === RCS file: /home/cvs/apache-1.3/src/main/http_protocol.c,v retrieving revision 1.260 retrieving revision 1.261 diff -u -r1.260 -r1.261 --- http_protocol.c 1999/03/08 15:44:00 1.260 +++ http_protocol.c 1999/03/10 17:42:42 1.261 @@ -1664,7 +1664,7 @@ { long chunksize = 0; -while (isxdigit(*b)) { +while (ap_isxdigit(*b)) { int xvalue = 0; if (*b = '0' *b = '9') @@ -1742,7 +1742,7 @@ chunk_start = getline(buffer, bufsiz, r-connection-client, 0); if ((chunk_start = 0) || (chunk_start = (bufsiz - 1)) -|| !isxdigit(*buffer)) { +|| !ap_isxdigit(*buffer)) { r-connection-keepalive = -1; return -1; } 1.155 +1 -1 apache-1.3/src/main/util.c Index: util.c === RCS file: /home/cvs/apache-1.3/src/main/util.c,v retrieving revision 1.154 retrieving revision 1.155 diff -u -r1.154 -r1.155 --- util.c1999/03/10 12:11:57 1.154 +++ util.c1999/03
cvs commit: apache-1.3/src/main util_script.c
dgaudet 99/03/10 10:09:46 Modified:src CHANGES src/main util_script.c Log: Set-Cookie headers were being doubled up for some CGIs by the O(n^2) avoidance code added in 1.3.3. PR: 3872 Submitted by: Jeff Lewis [EMAIL PROTECTED] Revision ChangesPath 1.1278+4 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1277 retrieving revision 1.1278 diff -u -r1.1277 -r1.1278 --- CHANGES 1999/03/10 17:42:35 1.1277 +++ CHANGES 1999/03/10 18:09:40 1.1278 @@ -1,5 +1,9 @@ Changes with Apache 1.3.5 + *) Set-Cookie headers were being doubled up for some CGIs by the O(n^2) + avoidance code added in 1.3.3. + [Dean Gaudet, Jeff Lewis [EMAIL PROTECTED]] PR#3872 + *) ap_isxdigit was somehow neglected when adding the ap_isfoo() macros for 8-bit safeness. [Dean Gaudet] 1.139 +2 -0 apache-1.3/src/main/util_script.c Index: util_script.c === RCS file: /home/cvs/apache-1.3/src/main/util_script.c,v retrieving revision 1.138 retrieving revision 1.139 diff -u -r1.138 -r1.139 --- util_script.c 1999/02/05 00:37:48 1.138 +++ util_script.c 1999/03/10 18:09:44 1.139 @@ -496,6 +496,8 @@ ap_overlap_tables(r-err_headers_out, merge, AP_OVERLAP_TABLES_MERGE); if (!ap_is_empty_table(cookie_table)) { + /* the cookies have already been copied to the cookie_table */ + ap_table_unset(r-err_headers_out, Set-Cookie); r-err_headers_out = ap_overlay_tables(r-pool, r-err_headers_out, cookie_table); }
cvs commit: apache-1.3/src/include http_core.h
dgaudet 99/03/10 12:18:59 Modified:src/include http_core.h Log: oops this was not supposed to be committed Revision ChangesPath 1.55 +0 -3 apache-1.3/src/include/http_core.h Index: http_core.h === RCS file: /home/cvs/apache-1.3/src/include/http_core.h,v retrieving revision 1.54 retrieving revision 1.55 diff -u -r1.54 -r1.55 --- http_core.h 1999/03/10 17:42:40 1.54 +++ http_core.h 1999/03/10 20:18:55 1.55 @@ -238,9 +238,6 @@ */ unsigned d_is_fnmatch : 1; -/* takes sense only if use_canonical_name is on */ -unsigned use_canonical_port : 1; - /* System Resource Control */ #ifdef RLIMIT_CPU struct rlimit *limit_cpu;
cvs commit: apache-1.3/src/modules/standard mod_log_config.c
dgaudet 99/03/04 11:28:41 Modified:.STATUS htdocs/manual/mod mod_log_config.html src CHANGES src/modules/standard mod_log_config.c Log: Commit %V and \n changes to mod_log_config. Submitted by: Tony Finch [EMAIL PROTECTED] Revision ChangesPath 1.634 +1 -11 apache-1.3/STATUS Index: STATUS === RCS file: /home/cvs/apache-1.3/STATUS,v retrieving revision 1.633 retrieving revision 1.634 diff -u -r1.633 -r1.634 --- STATUS1999/03/03 12:58:50 1.633 +++ STATUS1999/03/04 19:28:36 1.634 @@ -1,5 +1,5 @@ 1.3 STATUS: - Last modified at [$Date: 1999/03/03 12:58:50 $] + Last modified at [$Date: 1999/03/04 19:28:36 $] Release: @@ -55,11 +55,6 @@ MID: [EMAIL PROTECTED] Status: Ken +1, Lars +1 (untested) -* Tony Finch's [PATCH] mod_log_config: support for reliably parsable logs - Allows use of C-style backslash escapes in mod_log_config format strings -MID: [EMAIL PROTECTED] -Status: - * Ralf's [PATCH] Shared Memory Pools Message-ID: [EMAIL PROTECTED] Status: Roy?: Not sure if this is intended for 1.3.x or just feedback @@ -80,11 +75,6 @@ ftp://ftp.kame.net/pub/kame/misc/apache-134-v6-19990118.diff.gz Message-ID: [EMAIL PROTECTED] Status: Lars +1 (on concept) - -* Tony Finch's [PATCH] to mod_log_config.c to get both the 1.3.3 - behaviour of %v and the 1.3.4 behaviour as %V. -Message-ID: [EMAIL PROTECTED] -Status: * Ralf's patch to fix append of target name to layout paths Message-ID: [EMAIL PROTECTED] 1.32 +1 -0 apache-1.3/htdocs/manual/mod/mod_log_config.html Index: mod_log_config.html === RCS file: /home/cvs/apache-1.3/htdocs/manual/mod/mod_log_config.html,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- mod_log_config.html 1999/02/22 16:41:06 1.31 +++ mod_log_config.html 1999/03/04 19:28:37 1.32 @@ -143,6 +143,7 @@ %...u: Remote user (from auth; may be bogus if return status (%s) is 401) %...U: The URL path requested. %...v: The canonical ServerName of the server serving the request. +%...V: The server name according to the UseCanonicalName setting. /PRE The `...' can be nothing at all (EMe.g./EM, CODE%h %u %r %s %b/CODE), or it can 1.1259+7 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1258 retrieving revision 1.1259 diff -u -r1.1258 -r1.1259 --- CHANGES 1999/02/27 17:39:46 1.1258 +++ CHANGES 1999/03/04 19:28:38 1.1259 @@ -1,5 +1,12 @@ Changes with Apache 1.3.5 + *) Add %V to mod_log_config, this logs the hostname according to the + UseCanonicalName setting (this is the pre-1.3.4 behaviour of + %v). Useful for mass vhosting. [Tony Finch [EMAIL PROTECTED]] + + *) Add support for \n and \t to mod_log_config, can be used to produce + more reliable logs with multiline entries. [Tony Finch [EMAIL PROTECTED]] + *) Fixed a few compiler nits. [John Bley [EMAIL PROTECTED]] *) Added some informative error messages for some failed malloc() 1.76 +58 -15apache-1.3/src/modules/standard/mod_log_config.c Index: mod_log_config.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_log_config.c,v retrieving revision 1.75 retrieving revision 1.76 diff -u -r1.75 -r1.76 --- mod_log_config.c 1999/02/20 00:13:27 1.75 +++ mod_log_config.c 1999/03/04 19:28:40 1.76 @@ -138,7 +138,8 @@ * %...T: the time taken to serve the request, in seconds. * %...u: remote user (from auth; may be bogus if return status (%s) is 401) * %...U: the URL path requested. - * %...v: the name of the server (i.e. which virtual host?) + * %...v: the configured name of the server (i.e. which virtual host?) + * %...V: the server name according to the UseCanonicalName setting * * The '...' can be nothing at all (e.g. %h %u %r %s %b), or it can * indicate conditions for inclusion of the item (which will cause it @@ -417,6 +418,14 @@ r-server-port ? r-server-port : ap_default_port(r)); } +/* This respects the setting of UseCanonicalName so that + * the dynamic mass virtual hosting trick works better. + */ +static const char *log_server_name(request_rec *r, char *a) +{ +return ap_get_server_name(r); +} + static const char *log_child_pid(request_rec
cvs commit: apache-1.3/src/modules/standard mod_so.c
dgaudet 99/03/01 07:37:54 Modified:src/modules/standard mod_so.c Log: missing fixer_upper comment Submitted by: John Bley [EMAIL PROTECTED] Revision ChangesPath 1.31 +1 -0 apache-1.3/src/modules/standard/mod_so.c Index: mod_so.c === RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_so.c,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- mod_so.c 1999/01/01 22:32:16 1.30 +++ mod_so.c 1999/03/01 15:37:53 1.31 @@ -351,6 +351,7 @@ NULL, /* check auth */ NULL, /* check access */ NULL, /* type_checker */ + NULL, /* fixer_upper */ NULL, /* logger */ NULL, /* header parser */ NULL, /* child_init */
cvs commit: apache-1.3/src/main http_core.c
dgaudet 99/02/24 01:33:38 Modified:src/main http_core.c Log: did I really remove this NULL? what was I thinking? Revision ChangesPath 1.251 +2 -1 apache-1.3/src/main/http_core.c Index: http_core.c === RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v retrieving revision 1.250 retrieving revision 1.251 diff -u -r1.250 -r1.251 --- http_core.c 1999/02/22 17:07:39 1.250 +++ http_core.c 1999/02/24 09:33:37 1.251 @@ -2874,7 +2874,8 @@ { LimitRequestBody, set_limit_req_body, (void*)XtOffsetOf(core_dir_config, limit_req_body), OR_ALL, TAKE1, - Limit (in bytes) on maximum size of request message body } + Limit (in bytes) on maximum size of request message body }, +{ NULL } }; /*
cvs commit: apache-1.3/src/main http_config.c http_core.c
dgaudet 99/02/22 09:07:40 Modified:src CHANGES src/main http_config.c http_core.c Log: pad out some initializers; reduce a string constant from 510 to below 509 characters Submitted by: John Bley [EMAIL PROTECTED] Revision ChangesPath 1.1257+2 -0 apache-1.3/src/CHANGES Index: CHANGES === RCS file: /home/cvs/apache-1.3/src/CHANGES,v retrieving revision 1.1256 retrieving revision 1.1257 diff -u -r1.1256 -r1.1257 --- CHANGES 1999/02/20 18:12:32 1.1256 +++ CHANGES 1999/02/22 17:07:37 1.1257 @@ -1,5 +1,7 @@ Changes with Apache 1.3.5 + *) Fixed a few compiler nits. [John Bley [EMAIL PROTECTED]] + *) Added some informative error messages for some failed malloc() calls. [John Bley [EMAIL PROTECTED], Jim Jagielski] 1.142 +1 -1 apache-1.3/src/main/http_config.c Index: http_config.c === RCS file: /home/cvs/apache-1.3/src/main/http_config.c,v retrieving revision 1.141 retrieving revision 1.142 diff -u -r1.141 -r1.142 --- http_config.c 1999/02/20 18:12:35 1.141 +++ http_config.c 1999/02/22 17:07:39 1.142 @@ -1075,7 +1075,7 @@ */ static cmd_parms default_parms = -{NULL, 0, -1, NULL, NULL, NULL, NULL, NULL, NULL}; +{NULL, 0, -1, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; API_EXPORT(char *) ap_server_root_relative(pool *p, char *file) { 1.250 +7 -8 apache-1.3/src/main/http_core.c Index: http_core.c === RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v retrieving revision 1.249 retrieving revision 1.250 diff -u -r1.249 -r1.250 --- http_core.c 1999/02/09 20:20:26 1.249 +++ http_core.c 1999/02/22 17:07:39 1.250 @@ -1902,7 +1902,7 @@ Error:\tApache has not been designed to serve pages while\n \trunning as root. There are known race conditions that\n \twill allow any local user to read any file on the system.\n - \tShould you still desire to serve pages as root then\n + \tIf you still desire to serve pages as root then\n \tadd -DBIG_SECURITY_HOLE to the EXTRA_CFLAGS line in your\n \tsrc/Configuration file and rebuild the server. It is\n \tstrongly suggested that you instead modify the User\n @@ -2859,6 +2859,10 @@ { BS2000Account, set_bs2000_account, NULL, RSRC_CONF, TAKE1, Name of server User's bs2000 logon account name }, #endif +#ifdef WIN32 +{ ScriptInterpreterSource, set_interpreter_source, NULL, OR_FILEINFO, TAKE1, + Where to find interpreter to run Win32 scripts (Registry or script shebang line) }, +#endif { ServerTokens, set_serv_tokens, NULL, RSRC_CONF, TAKE1, Determine tokens displayed in the Server: header - Min(imal), OS or Full }, { LimitRequestLine, set_limit_req_line, NULL, RSRC_CONF, TAKE1, @@ -2870,12 +2874,7 @@ { LimitRequestBody, set_limit_req_body, (void*)XtOffsetOf(core_dir_config, limit_req_body), OR_ALL, TAKE1, - Limit (in bytes) on maximum size of request message body }, -#ifdef WIN32 -{ ScriptInterpreterSource, set_interpreter_source, NULL, OR_FILEINFO, TAKE1, - Where to find interpreter to run Win32 scripts (Registry or script shebang line) }, -#endif -{ NULL }, + Limit (in bytes) on maximum size of request message body } }; /* @@ -3116,7 +3115,7 @@ static const handler_rec core_handlers[] = { { */*, default_handler }, { default-handler, default_handler }, -{ NULL } +{ NULL, NULL } }; API_VAR_EXPORT module core_module = {