Received: (from majordom@localhost) by hyperreal.org (8.8.5/8.8.5) id EAA27861; Fri, 15 Aug 1997 04:49:33 -0700 (PDT) Received: from colin.muc.de (root@colin.muc.de [193.174.4.1]) by hyperreal.org (8.8.5/8.8.5) with SMTP id EAA27853 for ; Fri, 15 Aug 1997 04:49:21 -0700 (PDT) Received: from en by colin.muc.de with UUCP id <86685-1>; Fri, 15 Aug 1997 13:48:56 +0200 Received: by en1.engelschall.com (Sendmail 8.8.2) for new-httpd@apache.org id NAA14589; Fri, 15 Aug 1997 13:47:36 +0200 (MET DST) Message-Id: <199708151147.NAA14589@en1.engelschall.com> Subject: [STATUS] Apache 1.2.3 (Fri 15-Aug-1997 13:47 MET DST) To: new-httpd@apache.org Date: Fri, 15 Aug 1997 13:47:36 +0200 From: rse@engelschall.com (Ralf S. Engelschall) Organization: Engelschall, Germany. X-Home: http://www.engelschall.com/ X-Mailer: ELM [version 2.4ME+ PL32 (25)] MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=ELM871645655-14576-0_ Content-Transfer-Encoding: 7bit Sender: new-httpd-owner@apache.org Precedence: bulk Reply-To: new-httpd@apache.org --ELM871645655-14576-0_ Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit STATUS for Apache 1.2.3 ======================= Release Status: o IMPORTANT: Apache 1.2.2 was canceled because the pre-release tarballs were already rolled with a server version named 1.2.2 instead of 1.2.2-dev and a few of us (at least Marc, Ken, Ben, Lars and Paul) really want to avoid any confusion, especially related to occuring bugreports, etc. Because at least some people have grabbed the pre-release tarballs, even when they were only put on ftp://dev.apache.org/httpd/dist/apache_1.2.2/. This directoy was removed now. So now we treat 1.2.2 as a never released version which existed only for internal tests and bumped up the version number to 1.2.3-dev. A new pre-release was rolled again. Now correctly tagged 1.2.3-dev!! We now start a real test cycle with 1.2.3-dev for the various platform (see table below). o The current pre-release tarball for testing can be found here: ftp://dev.apache.org/httpd/dist/apache_1.2.3-dev.tar.gz => ** PLEASE TEST IT NOW YOURSELF AND THEN ADD YOUR TEST TO THE TABLE. ** IF ALL GOES WELL WE CAN ROLL THE FINAL 1.2.3 TARBALL IN A FEW DAYS. +----- [ essential platform which we really need to test successfully | PLEASE ADJUST! ] | V Operating System Tag Name Compiles Runs Binary - ------------------ ------------------------- -------- -------- ------ x AIX 4.1.x rs6000-ibm-aix4.1 lars +1 ?? -- x HP/UX 9.07 hppa11-hp-hpux9.07 ?? ?? -- x HP/UX 10.20 hppa11-hp-hpux10.20 rse +1 ?? -- MPE/iX 5.5 hp3000-hp-mpeix5.5 mdb +1 mdb +1 -- x IRIX 5.3 mips-sgi-irix5.3 paul +1 ?? -- x IRIX 6.2 mips-sgi-irix6.2 rse +1 ?? -- Ultrix 4.4 mips-dec-ultrix4.4 lars +1 ?? -- x Solaris 2.5.x sparc-sun-solaris2.5 rse +1 ?? -- Solaris/X86 2.5.x ix86-unknown-solaris2.5 ?? ?? -- x SunOS 4.1.3 sparc-sun-sunos4.1.3 rse +1 ?? -- SunOS 4.1.4 sparc-sun-sunos4.1.4 lars +1 ?? -- x Digital Unix 3.2 alpha-dec-dunix3.2 ?? ?? -- Digital Unix 4.0 alpha-dec-dunix4.0 lars +0 ?? -- SCO OpenServer 3 ix86-sco-openserver3 ?? ?? -- x SCO OpenServer 5 ix86-sco-openserver5 ?? ?? -- BSD/OS 2.0 ix86-unknown-bsdos2.0 ?? ?? -- x BSD/OS 2.1 ix86-unknown-bsdos2.1 rse +0 ?? -- x FreeBSD 2.1.5 ix86-unknown-freebsd2.1.5 rse +1 rse +1 -- x FreeBSD 2.2.x ix86-unknown-freebsd2.2 rse +1 rse +1 -- FreeBSD 2.2-STABLE ix86-unknown-freebsd2.2 jj +1 jj +1 -- FreeBSD 3.0-SNAP ix86-unknown-freebsd3.0 dvg +1 ?? -- NetBSD 1.1 ix86-unknown-netbsd1.1 ?? ?? -- NetBSD 1.1 vax-unknown-netbsd1.1 lars +1 ?? -- OpenBSD 2.0 pmax-unknown-openbsd2.0 lars +1 ?? -- OpenBSD 2.1 ix86-unknown-openbsd2.1 ?? ?? -- x Linux 2.0.x ix86-unknown-linux2.0.x rse +1 ?? -- x Unixware 1.1.x ix86-unknown-unixware1.1 ?? ?? -- A/UX 3.1.x m68k-apple-aux3.1 jj +1 jj +1 -- SINIX-N 5.43 mipseb-sni-sysv4 MnKr +1 ?? -- [dvg = Dirk van Gulik; mdb = Mark Bixby, MnKr = Martin Kraemer] o Still known problems with compilation and/or runtime: (When any occur we fix it immediateley in 1.2.3-dev and roll a new pre-release) - HARMLESS: Under IRIX 5.3 I was unable to compile with GCC because of the regex library. First regcomp.c fails with a lot of errors due to missing defines for system include files sys/types.h. After setting "EXTRA_CFLAGS=-D_MIPS_SZINT=32 -D_MIPS_SZLONG=32" these were gone but then gcc is still not happy. It shouts with a lot of warnings and errors. After manually switching to CC=cc all compiles fine. [rse] => What should we do? Dean thinks forcing CC=cc by Configure is NOT the correct thing. So what else should we do for IRIX? - HARMLESS: On taz (BSD/OS 2.1) it compiles only with CC=cc because the gcc (found by Configure) there (=/usr/local/bin/gcc) needs an additional -lbind because of inet_addr and inet_ntoa. No real problem with Apache, I think, but a little one on taz itself. [rse] => We can ignore this because seems to be related to the BIND 8.1 installation and not to BSD/OS itself. - HARMLESS: "Digital Unix 4.0 throws a bunch of casting warnings" when compiling with gcc [Lars] o Votes for final release: (Should be dependend on the success of all essential platforms, at least for compilation!) - Patches already committed between 1.2.2 and 1.2.3: (see ``src/CHANGES'' file for more details) o -- Patches which were committed between 1.2.1 and 1.2.2: (see ``src/CHANGES'' file for more details) o PR#813,814: obscure proxy stuff (case on Host:, etc.) o PR#797: fix mod_include logging a little... o PR#378 part 1: Fix handling of request body in core o API Symbol APACHE_RELEASE provides numeric form o PR#094: revisited o PR#848: treat container like others in mod_info. o PR#815: wrong length in get_client_block() o PR#875: MSIE 4.0 PR2 workaround ("downgrade-1.0") o PR#421,868: mod_auth_anon logs multiple times o PR#777/+++: final sync of mod_rewrite for Apache 1.2.2 o mod_include: handle_else was being used to handle endif. o merging in of all essential documentation changes from 1.3 o merging of updated mod_rewrite documentation after final sync o PR#748: mod_imap infinite loop for references above serverroot o fixed case where multiple s match and all are applied o PR#832: fixed solaris -HUP problems with slack fd o fixed improper vhost merging of and o patch for buff.c for better chunking and error handling. o patch for http_main.c: add missing logfile display o patch for http_request.c: avoid a too optimistic optimization Patches available: (see ``patches.txt'' MIME-attachment) o [patch.convexport] (PORT) Jeff Venters's patch to enhance the Convex OS port <199708130559.AAA09992@phoenix.rsn.hp.com> Status: RSE +1 o [patch.proxyscrewup] (BUGFIX) Roy's all-in-one patch for fixing a lot of problems with mod_proxy <9708122056.aa03566@paris.ics.uci.edu> Status: Roy +1 Ralf S. Engelschall rse@engelschall.com www.engelschall.com --ELM871645655-14576-0_ Content-Type: text/plain Content-Disposition: attachment; filename=patches.txt Content-Description: patches.txt Content-Transfer-Encoding: 7bit ====[patch.convexport]============================================ |From: venters@phoenix.rsn.hp.com (Jeff Venters) |Subject: ConvexOS 11.x improvement based on apache 1.2.1 |Date: 14 Aug 1997 03:14:35 +0200 |Message-ID: <199708130559.AAA09992@phoenix.rsn.hp.com> Greetings, I have added *better* support for ConvexOS 11.* (a BSD 4.2 derivative similar to SUNOS). FYI: ConvexOS 11.x runs on 4 generations of Vector Supercomputer products (C2, C34, C38, C4). The following changes are pretty simple and are based on Apache 1.2.1. I've added support for mmap() and cleaned up the supplied options for build (conf.h and Configure). Please let me know if you have any comments or questions (venters@convex.hp.com). Overview of changes: 1. Updated conf.h to include better info for ConvexOS. mmap() should now be used, etc. - much faster than previous version. 2. Updated configure script to add CFLAGS: -ext, -O1 3. http_main.c: ConvexOS has a slightly different implementation of the mmap () system call (don't blame me I didn't do it :-). Added special case mmap() for -DCONVEXOS11 The patch list (diff -c3 orig new) is included below (separated by ====). Jeff Venters, Convex Division of Hewlett-Packard ================================================================ *** orig.http_main.c Wed Aug 13 00:04:12 1997 --- http_main.c Wed Aug 13 00:07:04 1997 *************** *** 666,673 **** --- 666,692 ---- #elif defined(MAP_ANON) || defined(MAP_FILE) /* BSD style */ + #ifdef CONVEXOS11 + /* + * 9-Aug-97 - Jeff Venters (venters@convex.hp.com) + * ConvexOS maps address space as follows: + * 0x00000000 - 0x7fffffff : Kernel + * 0x80000000 - 0xffffffff : User + * Start mmapped area 1GB above start of text. + * + * Also, the length requires a pointer as the actual length is + * returned (rounded up to a page boundary). + */ + { + unsigned len = SCOREBOARD_SIZE; + + m = mmap((caddr_t)0xC0000000, &len, + PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, NOFD, 0); + } + #else m = mmap((caddr_t)0, SCOREBOARD_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0); + #endif if (m == (caddr_t)-1) { perror("mmap"); ================================================================ *** orig.Configure Wed Aug 13 00:00:57 1997 --- Configure Wed Aug 13 00:03:46 1997 *************** *** 469,475 **** ;; *convex-v11*) OS='CONVEXOS11' ! CFLAGS="$CFLAGS -DCONVEXOS11" CC='cc' DEF_WANTHSREGEX=yes ;; --- 469,476 ---- ;; *convex-v11*) OS='CONVEXOS11' ! CFLAGS="$CFLAGS -ext -DCONVEXOS11" ! OPTIM="-O1" # scalar optimization only CC='cc' DEF_WANTHSREGEX=yes ;; ================================================================ *** orig.conf.h Tue Aug 12 23:52:51 1997 --- conf.h Tue Aug 12 23:57:16 1997 *************** *** 295,304 **** extern int strcasecmp(const char *,const char *); extern int strncasecmp(const char *,const char *,unsigned); - #elif defined(CONVEXOS) - #define HAVE_GMTOFF - #define NEED_STRDUP - #elif defined(AUX) /* These are to let -Wall compile more cleanly */ extern int strcasecmp(const char *, const char *); --- 295,300 ---- *************** *** 491,496 **** --- 487,498 ---- /* Convex OS v11 */ #elif defined(CONVEXOS11) + #undef HAVE_GMTOFF + #undef NO_KILLPG + #undef NO_SETSID + #undef NEED_STRDUP + #define HAVE_MMAP + #define NO_TIMEZONE #include #include ====[patch.proxyscrewup]============================================ |Subject: [PATCH] for 1.2.X: proxy screwup |Date: Tue, 12 Aug 1997 20:56:59 -0700 |From: "Roy T. Fielding" |Message-ID: <9708122056.aa03566@paris.ics.uci.edu> This fixes most of the proxy problems mentioned on http-wg. It prevents the proxy responses from returning as HTTP/1.1 on errors or when the response is from the cache. The only thing I haven't figured out is how to handle OPTIONS * HTTP/1.1 Right now, http_core always handles it. It would probably be better if it was handled within mod_proxy as well, which would give it a different response only if the proxy was enabled. BTW, our proxy won't cache pages without a Last-Modified date, even if the page has an Expires. The CacheNegotiatedDocs and XBitHack things should be adding their own Last-Modified, with the same value as Date. ....Roy Index: http_protocol.c =================================================================== RCS file: /export/home/cvs/apache/src/http_protocol.c,v retrieving revision 1.126.2.5 diff -c -r1.126.2.5 http_protocol.c *** http_protocol.c 1997/07/31 08:19:48 1.126.2.5 --- http_protocol.c 1997/08/13 03:42:23 *************** *** 1044,1052 **** if (!r->status_line) r->status_line = status_lines[index_of_response(r->status)]; ! if (r->proto_num == 1000 ! && table_get(r->subprocess_env,"force-response-1.0")) protocol = "HTTP/1.0"; else protocol = SERVER_PROTOCOL; --- 1044,1059 ---- if (!r->status_line) r->status_line = status_lines[index_of_response(r->status)]; ! /* mod_proxy is only HTTP/1.0, so avoid sending HTTP/1.1 error response; ! * kluge around broken browsers when indicated by force-response-1.0 ! */ ! if (r->proxyreq ! || (r->proto_num == 1000 ! && table_get(r->subprocess_env,"force-response-1.0"))) { ! protocol = "HTTP/1.0"; + r->connection->keepalive = -1; + } else protocol = SERVER_PROTOCOL; Index: modules/proxy/mod_proxy.h =================================================================== RCS file: /export/home/cvs/apache/src/modules/proxy/mod_proxy.h,v retrieving revision 1.11 diff -c -r1.11 mod_proxy.h *** mod_proxy.h 1997/04/16 00:13:05 1.11 --- mod_proxy.h 1997/08/13 03:42:23 *************** *** 225,231 **** int proxy_cache_check(request_rec *r, char *url, struct cache_conf *conf, struct cache_req **cr); int proxy_cache_update(struct cache_req *c, array_header *resp_hdrs, ! const char *protocol, int nocache); void proxy_garbage_coll(request_rec *r); /* proxy_connect.c */ --- 225,231 ---- int proxy_cache_check(request_rec *r, char *url, struct cache_conf *conf, struct cache_req **cr); int proxy_cache_update(struct cache_req *c, array_header *resp_hdrs, ! const int is_HTTP1, int nocache); void proxy_garbage_coll(request_rec *r); /* proxy_connect.c */ Index: modules/proxy/proxy_cache.c =================================================================== RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_cache.c,v retrieving revision 1.13 diff -c -r1.13 proxy_cache.c *** proxy_cache.c 1997/05/29 15:16:01 1.13 --- proxy_cache.c 1997/08/13 03:42:23 *************** *** 581,587 **** */ int proxy_cache_update(struct cache_req *c, array_header *resp_hdrs, ! const char *protocol, int nocache) { request_rec *r=c->req; char *p; --- 581,587 ---- */ int proxy_cache_update(struct cache_req *c, array_header *resp_hdrs, ! const int is_HTTP1, int nocache) { request_rec *r=c->req; char *p; *************** *** 632,639 **** if ((r->status != 200 && r->status != 301 && r->status != 304) || (expire != NULL && expc == BAD_DATE) || (r->status == 304 && c->fp == NULL) || ! (r->status == 200 && lmods == NULL && ! strncmp(protocol, "HTTP/1.", 7) == 0) || r->header_only || table_get(r->headers_in, "Authorization") != NULL || nocache) --- 632,638 ---- if ((r->status != 200 && r->status != 301 && r->status != 304) || (expire != NULL && expc == BAD_DATE) || (r->status == 304 && c->fp == NULL) || ! (r->status == 200 && lmods == NULL && is_HTTP1) || r->header_only || table_get(r->headers_in, "Authorization") != NULL || nocache) Index: modules/proxy/proxy_ftp.c =================================================================== RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_ftp.c,v retrieving revision 1.21 diff -c -r1.21 proxy_ftp.c *** proxy_ftp.c 1997/04/22 03:29:37 1.21 --- proxy_ftp.c 1997/08/13 03:42:23 *************** *** 908,914 **** nocache = 1; } ! i = proxy_cache_update(c, resp_hdrs, "FTP", nocache); if (i != DECLINED) { --- 908,914 ---- nocache = 1; } ! i = proxy_cache_update(c, resp_hdrs, 0, nocache); if (i != DECLINED) { Index: modules/proxy/proxy_http.c =================================================================== RCS file: /export/home/cvs/apache/src/modules/proxy/proxy_http.c,v retrieving revision 1.17.2.1 diff -c -r1.17.2.1 proxy_http.c *** proxy_http.c 1997/07/20 18:36:03 1.17.2.1 --- proxy_http.c 1997/08/13 03:42:23 *************** *** 143,149 **** { char *p; const char *err, *desthost; ! int i, j, sock, len; array_header *reqhdrs_arr, *resp_hdrs; table_entry *reqhdrs; struct sockaddr_in server; --- 143,149 ---- { char *p; const char *err, *desthost; ! int i, j, sock, len, backasswards; array_header *reqhdrs_arr, *resp_hdrs; table_entry *reqhdrs; struct sockaddr_in server; *************** *** 151,157 **** struct hostent server_hp; BUFF *f, *cache; struct hdr_entry *hdr; ! char buffer[HUGE_STRING_LEN], inprotocol[9], outprotocol[9]; pool *pool=r->pool; const long int zero=0L; int destport = 0; --- 151,157 ---- struct hostent server_hp; BUFF *f, *cache; struct hdr_entry *hdr; ! char buffer[HUGE_STRING_LEN]; pool *pool=r->pool; const long int zero=0L; int destport = 0; *************** *** 286,292 **** return proxyerror(r, "Error reading from remote server"); } ! /* Is it an HTTP/1 response? */ if (checkmask(buffer, "HTTP/#.# ###*")) { /* If not an HTTP/1 messsage or if the status line was > 8192 bytes */ --- 286,292 ---- return proxyerror(r, "Error reading from remote server"); } ! /* Is it an HTTP/1 response? This is buggy if we ever see an HTTP/1.10 */ if (checkmask(buffer, "HTTP/#.# ###*")) { /* If not an HTTP/1 messsage or if the status line was > 8192 bytes */ *************** *** 296,307 **** kill_timeout(r); return BAD_GATEWAY; } buffer[--len] = '\0'; - memcpy(inprotocol, buffer, 8); - inprotocol[8] = '\0'; - /* we use the same protocol on output as on input */ - strcpy(outprotocol, inprotocol); buffer[12] = '\0'; r->status = atoi(&buffer[9]); buffer[12] = ' '; --- 296,304 ---- kill_timeout(r); return BAD_GATEWAY; } + backasswards = 0; buffer[--len] = '\0'; buffer[12] = '\0'; r->status = atoi(&buffer[9]); buffer[12] = ' '; *************** *** 312,322 **** /* Also, take care with headers with multiple occurences. */ resp_hdrs = proxy_read_headers(pool, buffer, HUGE_STRING_LEN, f); ! } else { /* an http/0.9 response */ ! strcpy(inprotocol, "HTTP/0.9"); ! strcpy(outprotocol, "HTTP/1.0"); r->status = 200; r->status_line = "200 OK"; --- 309,321 ---- /* Also, take care with headers with multiple occurences. */ resp_hdrs = proxy_read_headers(pool, buffer, HUGE_STRING_LEN, f); ! ! clear_connection((table *)resp_hdrs); /* Strip Connection hdrs */ ! } ! else { /* an http/0.9 response */ ! backasswards = 1; r->status = 200; r->status_line = "200 OK"; *************** *** 350,356 **** nocache = 1; } ! i = proxy_cache_update(c, resp_hdrs, inprotocol, nocache); if (i != DECLINED) { pclosef(pool, sock); --- 349,355 ---- nocache = 1; } ! i = proxy_cache_update(c, resp_hdrs, !backasswards, nocache); if (i != DECLINED) { pclosef(pool, sock); *************** *** 365,372 **** if (!r->assbackwards) rvputs(r, "HTTP/1.0 ", r->status_line, "\015\012", NULL); if (cache != NULL) ! if (bvputs(cache, outprotocol, " ", r->status_line, "\015\012", NULL) ! == -1) cache = proxy_cache_error(c); /* send headers */ --- 364,370 ---- if (!r->assbackwards) rvputs(r, "HTTP/1.0 ", r->status_line, "\015\012", NULL); if (cache != NULL) ! if (bvputs(cache, "HTTP/1.0 ", r->status_line, "\015\012", NULL) == -1) cache = proxy_cache_error(c); /* send headers */ *************** *** 389,395 **** bsetopt(r->connection->client, BO_BYTECT, &zero); r->sent_bodyct = 1; /* Is it an HTTP/0.9 respose? If so, send the extra data */ ! if (strcmp(inprotocol, "HTTP/0.9") == 0) { bwrite(r->connection->client, buffer, len); if (cache != NULL) --- 387,393 ---- bsetopt(r->connection->client, BO_BYTECT, &zero); r->sent_bodyct = 1; /* Is it an HTTP/0.9 respose? If so, send the extra data */ ! if (backasswards) { bwrite(r->connection->client, buffer, len); if (cache != NULL) --ELM871645655-14576-0_--