-diff -Nur apache_1.3.26.orig/README.v6 apache_1.3.26/README.v6
---- apache_1.3.26.orig/README.v6 Thu Jan 1 01:00:00 1970
-+++ apache_1.3.26/README.v6 Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/README.v6 apache_1.3.28/README.v6
+--- apache_1.3.28.orig/README.v6 Thu Jan 1 01:00:00 1970
++++ apache_1.3.28/README.v6 Fri Jul 25 11:01:55 2003
@@ -0,0 +1,166 @@
+IPv6-ready apache 1.3.x
+KAME Project
+ http://www.v6.linux.or.jp/
+ YOSHIFUJI Hideaki, USAGI Project
+ http://www.linux-ipv6.org/
-diff -Nur apache_1.3.26.orig/conf/httpd.conf-dist apache_1.3.26/conf/httpd.conf-dist
---- apache_1.3.26.orig/conf/httpd.conf-dist Tue Mar 5 17:19:12 2002
-+++ apache_1.3.26/conf/httpd.conf-dist Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/conf/httpd.conf-dist apache_1.3.28/conf/httpd.conf-dist
+--- apache_1.3.28.orig/conf/httpd.conf-dist Wed Jul 16 21:36:41 2003
++++ apache_1.3.28/conf/httpd.conf-dist Fri Jul 25 11:01:55 2003
@@ -174,6 +174,11 @@
#Listen 3000
#Listen 12.34.56.78:80
#
# BindAddress: You can support virtual hosts with this option. This directive
# is used to tell the server which IP address to listen to. It can either
-diff -Nur apache_1.3.26.orig/configure.v6 apache_1.3.26/configure.v6
---- apache_1.3.26.orig/configure.v6 Thu Jan 1 01:00:00 1970
-+++ apache_1.3.26/configure.v6 Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/configure.v6 apache_1.3.28/configure.v6
+--- apache_1.3.28.orig/configure.v6 Thu Jan 1 01:00:00 1970
++++ apache_1.3.28/configure.v6 Fri Jul 25 11:01:55 2003
@@ -0,0 +1,3 @@
+#! /bin/sh
+
+./configure --enable-rule=INET6 --enable-module=proxy $*
-diff -Nur apache_1.3.26.orig/src/Configuration.tmpl apache_1.3.26/src/Configuration.tmpl
---- apache_1.3.26.orig/src/Configuration.tmpl Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/Configuration.tmpl Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/Configuration.tmpl apache_1.3.28/src/Configuration.tmpl
+--- apache_1.3.28.orig/src/Configuration.tmpl Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/Configuration.tmpl Fri Jul 25 11:01:55 2003
@@ -191,6 +191,9 @@
# Rule EXPAT=default : If Expat can be found at the system or
# in lib/expat-lite, use it; otherwise
Rule CYGWIN_WINSOCK=no
# DEV_RANDOM:
-diff -Nur apache_1.3.26.orig/src/Configure apache_1.3.26/src/Configure
---- apache_1.3.26.orig/src/Configure Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/Configure Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/Configure apache_1.3.28/src/Configure
+--- apache_1.3.28.orig/src/Configure Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/Configure Fri Jul 25 11:01:55 2003
@@ -238,6 +238,7 @@
RULE_CYGWIN_WINSOCK=`./helpers/CutRule CYGWIN_WINSOCK $file`
RULE_SHARED_CORE=`./helpers/CutRule SHARED_CORE $file`
####################################################################
## Rule SHARED_CORE implies required DSO support
-@@ -1701,6 +1702,124 @@
+@@ -1724,6 +1725,124 @@
esac
fi
####################################################################
## Find out what modules we want and try and configure things for them
## Module lines can look like this:
-@@ -2296,6 +2415,38 @@
+@@ -2320,6 +2439,38 @@
echo "#define AP_LONGEST_LONG $AP_LONGEST_LONG" >>$AP_CONFIG_AUTO_H
echo "#endif" >>$AP_CONFIG_AUTO_H
####################################################################
## More building ap_config_auto.h
##
-diff -Nur apache_1.3.26.orig/src/ap/ap_snprintf.c apache_1.3.26/src/ap/ap_snprintf.c
---- apache_1.3.26.orig/src/ap/ap_snprintf.c Thu Mar 14 13:08:06 2002
-+++ apache_1.3.26/src/ap/ap_snprintf.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/ap/ap_snprintf.c apache_1.3.28/src/ap/ap_snprintf.c
+--- apache_1.3.28.orig/src/ap/ap_snprintf.c Mon Feb 3 18:13:17 2003
++++ apache_1.3.28/src/ap/ap_snprintf.c Fri Jul 25 11:01:55 2003
@@ -73,6 +73,7 @@
#include <string.h>
#include <stdlib.h>
#ifdef WIN32
#include <float.h>
#endif
-@@ -504,6 +505,42 @@
+@@ -510,6 +511,42 @@
/*
* Convert a floating point number to a string formats 'f', 'e' or 'E'.
* The result is placed in buf, and len denotes the length of the string
-@@ -1055,6 +1092,7 @@
+@@ -1057,6 +1094,7 @@
/* print a struct sockaddr_in as a.b.c.d:port */
case 'I':
{
struct sockaddr_in *si;
si = va_arg(ap, struct sockaddr_in *);
-@@ -1063,6 +1101,16 @@
+@@ -1065,6 +1103,16 @@
if (adjust_precision && precision < s_len)
s_len = precision;
}
else {
s = S_NULL;
s_len = S_NULL_LEN;
-diff -Nur apache_1.3.26.orig/src/include/ap.h apache_1.3.26/src/include/ap.h
---- apache_1.3.26.orig/src/include/ap.h Tue Jun 18 06:19:45 2002
-+++ apache_1.3.26/src/include/ap.h Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/include/ap.h apache_1.3.28/src/include/ap.h
+--- apache_1.3.28.orig/src/include/ap.h Mon Feb 3 18:13:17 2003
++++ apache_1.3.28/src/include/ap.h Fri Jul 25 11:01:55 2003
@@ -95,7 +95,8 @@
* with some extensions. The extensions are:
*
* %pp takes a void * and outputs it in hex
*
* The %p hacks are to force gcc's printf warning code to skip
-diff -Nur apache_1.3.26.orig/src/include/ap_config.h apache_1.3.26/src/include/ap_config.h
---- apache_1.3.26.orig/src/include/ap_config.h Mon Jun 3 14:28:27 2002
-+++ apache_1.3.26/src/include/ap_config.h Wed Jun 19 10:26:32 2002
-@@ -407,6 +407,10 @@
+diff -Nur apache_1.3.28.orig/src/include/ap_config.h apache_1.3.28/src/include/ap_config.h
+--- apache_1.3.28.orig/src/include/ap_config.h Mon May 5 13:45:49 2003
++++ apache_1.3.28/src/include/ap_config.h Fri Jul 25 11:01:55 2003
+@@ -411,6 +411,10 @@
#endif
#ifndef S_IWOTH
#define S_IWOTH 000002
#endif
#define STDIN_FILENO 0
-@@ -1509,6 +1513,70 @@
+@@ -1523,6 +1527,70 @@
#define ap_wait_t int
#endif
#ifdef __cplusplus
}
#endif
-diff -Nur apache_1.3.26.orig/src/include/http_conf_globals.h apache_1.3.26/src/include/http_conf_globals.h
---- apache_1.3.26.orig/src/include/http_conf_globals.h Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/include/http_conf_globals.h Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/include/http_conf_globals.h apache_1.3.28/src/include/http_conf_globals.h
+--- apache_1.3.28.orig/src/include/http_conf_globals.h Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/include/http_conf_globals.h Fri Jul 25 11:01:55 2003
@@ -82,7 +82,8 @@
extern API_VAR_EXPORT int ap_max_requests_per_child;
extern API_VAR_EXPORT int ap_threads_per_child;
extern listen_rec *ap_listeners;
extern API_VAR_EXPORT int ap_daemons_to_start;
extern API_VAR_EXPORT int ap_daemons_min_free;
-diff -Nur apache_1.3.26.orig/src/include/http_vhost.h apache_1.3.26/src/include/http_vhost.h
---- apache_1.3.26.orig/src/include/http_vhost.h Wed Mar 13 22:05:29 2002
-+++ apache_1.3.26/src/include/http_vhost.h Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/include/http_vhost.h apache_1.3.28/src/include/http_vhost.h
+--- apache_1.3.28.orig/src/include/http_vhost.h Mon Feb 3 18:13:19 2003
++++ apache_1.3.28/src/include/http_vhost.h Fri Jul 25 11:01:55 2003
@@ -73,7 +73,7 @@
API_EXPORT(const char *) ap_parse_vhost_addrs(pool *p, const char *hostname, server_rec *s);
/* given an ip address only, give our best guess as to what vhost it is */
API_EXPORT(void) ap_update_vhost_given_ip(conn_rec *conn);
-diff -Nur apache_1.3.26.orig/src/include/httpd.h apache_1.3.26/src/include/httpd.h
---- apache_1.3.26.orig/src/include/httpd.h Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/include/httpd.h Wed Jun 19 10:26:32 2002
-@@ -903,8 +903,8 @@
+diff -Nur apache_1.3.28.orig/src/include/httpd.h apache_1.3.28/src/include/httpd.h
+--- apache_1.3.28.orig/src/include/httpd.h Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/include/httpd.h Fri Jul 25 11:01:55 2003
+@@ -904,8 +904,8 @@
/* Who is the client? */
char *remote_ip; /* Client's IP address */
char *remote_host; /* Client's DNS name, if known.
* NULL if DNS hasn't been checked,
-@@ -946,8 +946,8 @@
+@@ -947,8 +947,8 @@
typedef struct server_addr_rec server_addr_rec;
struct server_addr_rec {
server_addr_rec *next;
char *virthost; /* The name given in <VirtualHost> */
};
-@@ -1015,7 +1015,7 @@
+@@ -1016,7 +1016,7 @@
/* These are more like real hosts than virtual hosts */
struct listen_rec {
listen_rec *next;
int fd;
int used; /* Only used during restart */
/* more stuff here, like which protocol is bound to the port */
-@@ -1183,7 +1183,7 @@
+@@ -1184,7 +1184,7 @@
#endif /*#ifdef CHARSET_EBCDIC*/
API_EXPORT(char *) ap_get_local_host(pool *);
extern API_VAR_EXPORT time_t ap_restart_time;
-diff -Nur apache_1.3.26.orig/src/include/sa_len.h apache_1.3.26/src/include/sa_len.h
---- apache_1.3.26.orig/src/include/sa_len.h Thu Jan 1 01:00:00 1970
-+++ apache_1.3.26/src/include/sa_len.h Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/include/sa_len.h apache_1.3.28/src/include/sa_len.h
+--- apache_1.3.28.orig/src/include/sa_len.h Thu Jan 1 01:00:00 1970
++++ apache_1.3.28/src/include/sa_len.h Fri Jul 25 11:01:55 2003
@@ -0,0 +1,41 @@
+/* sa_len.h : tiny version of SA_LEN (written by <yoshfuji@ecei.tohoku.ac.jp>) */
+
+}
+#endif /* SA_LEN */
+#endif /* HAVE_SOCKADDR_LEN */
-diff -Nur apache_1.3.26.orig/src/include/sockaddr_storage.h apache_1.3.26/src/include/sockaddr_storage.h
---- apache_1.3.26.orig/src/include/sockaddr_storage.h Thu Jan 1 01:00:00 1970
-+++ apache_1.3.26/src/include/sockaddr_storage.h Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/include/sockaddr_storage.h apache_1.3.28/src/include/sockaddr_storage.h
+--- apache_1.3.28.orig/src/include/sockaddr_storage.h Thu Jan 1 01:00:00 1970
++++ apache_1.3.28/src/include/sockaddr_storage.h Fri Jul 25 11:01:55 2003
@@ -0,0 +1,53 @@
+/*
+struct sockaddr_storage
+#define su_port su_si.si_port
+
+#endif /* NEED_SOCKADDR_STORAGE */
-diff -Nur apache_1.3.26.orig/src/main/getaddrinfo.c apache_1.3.26/src/main/getaddrinfo.c
---- apache_1.3.26.orig/src/main/getaddrinfo.c Thu Jan 1 01:00:00 1970
-+++ apache_1.3.26/src/main/getaddrinfo.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/main/getaddrinfo.c apache_1.3.28/src/main/getaddrinfo.c
+--- apache_1.3.28.orig/src/main/getaddrinfo.c Thu Jan 1 01:00:00 1970
++++ apache_1.3.28/src/main/getaddrinfo.c Fri Jul 25 11:01:55 2003
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
+ }
+ return EAI_NODATA;
+}
-diff -Nur apache_1.3.26.orig/src/main/getnameinfo.c apache_1.3.26/src/main/getnameinfo.c
---- apache_1.3.26.orig/src/main/getnameinfo.c Thu Jan 1 01:00:00 1970
-+++ apache_1.3.26/src/main/getnameinfo.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/main/getnameinfo.c apache_1.3.28/src/main/getnameinfo.c
+--- apache_1.3.28.orig/src/main/getnameinfo.c Thu Jan 1 01:00:00 1970
++++ apache_1.3.28/src/main/getnameinfo.c Fri Jul 25 11:01:55 2003
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 1995, 1996, 1997, 1998, and 1999 WIDE Project.
+ return EAI_NODATA;
+ return 0;
+}
-diff -Nur apache_1.3.26.orig/src/main/http_config.c apache_1.3.26/src/main/http_config.c
---- apache_1.3.26.orig/src/main/http_config.c Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/main/http_config.c Wed Jun 19 10:26:32 2002
-@@ -1564,7 +1564,6 @@
+diff -Nur apache_1.3.28.orig/src/main/http_config.c apache_1.3.28/src/main/http_config.c
+--- apache_1.3.28.orig/src/main/http_config.c Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/main/http_config.c Fri Jul 25 11:01:55 2003
+@@ -1591,7 +1591,6 @@
ap_scoreboard_fname = DEFAULT_SCOREBOARD;
ap_lock_fname = DEFAULT_LOCKFILE;
ap_max_requests_per_child = DEFAULT_MAX_REQUESTS_PER_CHILD;
ap_listeners = NULL;
ap_listenbacklog = DEFAULT_LISTENBACKLOG;
ap_extended_status = 0;
-@@ -1597,7 +1596,13 @@
+@@ -1624,7 +1623,13 @@
s->next = NULL;
s->addrs = ap_pcalloc(p, sizeof(server_addr_rec));
/* NOT virtual host; don't match any real network interface */
s->addrs->host_port = 0; /* matches any port */
s->addrs->virthost = ""; /* must be non-NULL */
s->names = s->wild_names = NULL;
-@@ -1616,21 +1621,33 @@
+@@ -1643,21 +1648,33 @@
static void default_listeners(pool *p, server_rec *s)
{
listen_rec *new;
}
-diff -Nur apache_1.3.26.orig/src/main/http_core.c apache_1.3.26/src/main/http_core.c
---- apache_1.3.26.orig/src/main/http_core.c Tue Jun 18 02:59:57 2002
-+++ apache_1.3.26/src/main/http_core.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/main/http_core.c apache_1.3.28/src/main/http_core.c
+--- apache_1.3.28.orig/src/main/http_core.c Mon Jul 7 15:02:28 2003
++++ apache_1.3.28/src/main/http_core.c Fri Jul 25 12:11:48 2003
@@ -71,6 +71,7 @@
#include "util_md5.h"
#include "scoreboard.h"
#ifdef USE_MMAP_FILES
#include <sys/mman.h>
-@@ -638,7 +639,9 @@
+@@ -651,7 +652,9 @@
*/
static ap_inline void do_double_reverse (conn_rec *conn)
{
if (conn->double_reverse) {
/* already done */
-@@ -650,19 +653,43 @@
+@@ -663,19 +666,43 @@
conn->remote_host = ""; /* prevent another lookup */
return;
}
/* invalidate possible reverse-resolved hostname if forward lookup fails */
conn->remote_host = "";
}
-@@ -670,10 +697,9 @@
+@@ -683,10 +710,9 @@
API_EXPORT(const char *) ap_get_remote_host(conn_rec *conn, void *dir_config,
int type)
{
/* If we haven't checked the host name, and we want to */
if (dir_config) {
-@@ -695,10 +721,14 @@
+@@ -708,10 +734,14 @@
|| hostname_lookups != HOSTNAME_LOOKUP_OFF)) {
old_stat = ap_update_child_status(conn->child_num, SERVER_BUSY_DNS,
(request_rec*)NULL);
ap_str_tolower(conn->remote_host);
if (hostname_lookups == HOSTNAME_LOOKUP_DOUBLE) {
-@@ -776,6 +806,7 @@
+@@ -789,6 +819,7 @@
{
conn_rec *conn = r->connection;
core_dir_config *d;
d = (core_dir_config *)ap_get_module_config(r->per_dir_config,
&core_module);
-@@ -785,23 +816,22 @@
+@@ -798,23 +829,22 @@
}
if (d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
if (conn->local_host == NULL) {
(void) ap_update_child_status(conn->child_num, old_stat, r);
}
return conn->local_host;
-@@ -820,11 +850,13 @@
+@@ -833,11 +863,13 @@
if (d->use_canonical_name == USE_CANONICAL_NAME_OFF
|| d->use_canonical_name == USE_CANONICAL_NAME_DNS) {
}
API_EXPORT(char *) ap_construct_url(pool *p, const char *uri,
-@@ -2556,12 +2588,25 @@
+@@ -2569,12 +2601,25 @@
static const char *set_bind_address(cmd_parms *cmd, void *dummy, char *arg)
{
return NULL;
}
-@@ -2593,44 +2638,70 @@
+@@ -2606,48 +2651,71 @@
return NULL;
}
+static const char *set_listener(cmd_parms *cmd, void *dummy, char *h, char *p)
{
listen_rec *new;
-- char *ports;
-- unsigned short port;
+- char *ports, *endptr;
+- long port;
+ char *host, *port;
+ struct addrinfo hints, *res;
+ int error;
- return "Address must end in :<port-number>";
+ host = port = NULL;
+ if (!p) {
-+ port = strrchr(h, ':');
-+ if (port != NULL) {
++ port = strrchr(h, ':');
++ if (port != NULL) {
+ if (port == h) {
-+ return "Missing IP address";
++ return "Missing IP address";
+ }
+ else if (port[1] == '\0') {
-+ return "Address must end in :<port-number>";
++ return "Address must end in :<port-number>";
+ }
+ *(port++) = '\0';
+ if (*h)
+ host = h;
-+ } else {
++ }
++ else {
+ host = NULL;
+ port = h;
}
- else {
- new->local_addr.sin_addr.s_addr = ap_get_virthost_addr(ips, NULL);
- }
-- port = atoi(ports);
-- if (!port) {
-- return "Port must be numeric";
+- errno = 0; /* clear errno before calling strtol */
+- port = ap_strtol(ports, &endptr, 10);
+- if (errno /* some sort of error */
+- || (endptr && *endptr) /* make sure no trailing characters */
+- || port < 1 || port > 65535) /* underflow/overflow */
+- {
+- return "Missing, invalid, or non-numeric port";
+ if (host && strcmp(host, "*") == 0)
+ host = NULL;
+
+ fprintf(stderr, "resolved to multiple addresses, ambiguous.\n");
+ exit(1);
}
-- new->local_addr.sin_port = htons(port);
+- new->local_addr.sin_port = htons((unsigned short)port);
+
+ memcpy(&new->local_addr, res->ai_addr, res->ai_addrlen);
+
new->fd = -1;
new->used = 0;
new->next = ap_listeners;
-@@ -3353,7 +3424,7 @@
+@@ -3524,7 +3592,7 @@
{ "ThreadStackSize", set_threadstacksize, NULL, RSRC_CONF, TAKE1,
"Stack size each created thread will use."},
#endif
"A port number or a numeric IP address and a port number"},
{ "SendBufferSize", set_send_buffer_size, NULL, RSRC_CONF, TAKE1,
"Send buffer size in bytes"},
-@@ -3387,7 +3458,7 @@
+@@ -3558,7 +3626,7 @@
"Name of the config file to be included" },
{ "LogLevel", set_loglevel, NULL, RSRC_CONF, TAKE1,
"Level of verbosity in error logging" },
"A numeric IP address:port, or the name of a host" },
#ifdef _OSD_POSIX
{ "BS2000Account", set_bs2000_account, NULL, RSRC_CONF, TAKE1,
-diff -Nur apache_1.3.26.orig/src/main/http_main.c apache_1.3.26/src/main/http_main.c
---- apache_1.3.26.orig/src/main/http_main.c Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/main/http_main.c Wed Jun 19 10:30:52 2002
+diff -Nur apache_1.3.28.orig/src/main/http_main.c apache_1.3.28/src/main/http_main.c
+--- apache_1.3.28.orig/src/main/http_main.c Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/main/http_main.c Fri Jul 25 12:13:12 2003
@@ -124,6 +124,8 @@
#include <bstring.h> /* for IRIX, FD_SET calls bzero() */
#endif
API_VAR_EXPORT int ap_daemons_to_start=0;
API_VAR_EXPORT int ap_daemons_min_free=0;
API_VAR_EXPORT int ap_daemons_max_free=0;
-@@ -1389,7 +1396,11 @@
+@@ -1448,7 +1455,11 @@
fprintf(stderr, "Usage: %s [-D name] [-d directory] [-f file]\n", bin);
#endif
fprintf(stderr, " %s [-C \"directive\"] [-c \"directive\"]\n", pad);
fprintf(stderr, "Options:\n");
#ifdef SHARED_CORE
fprintf(stderr, " -R directory : specify an alternate location for shared object files\n");
-@@ -1415,6 +1426,10 @@
+@@ -1474,6 +1485,10 @@
#ifndef WIN32
fprintf(stderr, " -F : run main process in foreground, for process supervisors\n");
#endif
#ifdef WIN32
fprintf(stderr, " -n name : name the Apache service for -k options below;\n");
fprintf(stderr, " -k stop|shutdown : tell running Apache to shutdown\n");
-@@ -3592,11 +3607,13 @@
+@@ -3630,11 +3645,13 @@
static conn_rec *new_connection(pool *p, server_rec *server, BUFF *inout,
/* Got a connection structure, so initialize what fields we can
* (the rest are zeroed out by pcalloc).
-@@ -3605,17 +3622,29 @@
+@@ -3643,17 +3660,29 @@
conn->child_num = child_num;
conn->pool = p;
#ifdef EAPI
conn->ctx = ap_ctx_new(conn->pool);
#endif /* EAPI */
-@@ -3666,21 +3695,47 @@
- #define sock_disable_nagle(s) /* NOOP */
+@@ -3711,21 +3740,47 @@
+ #define sock_disable_nagle(s, c) /* NOOP */
#endif
-static int make_sock(pool *p, const struct sockaddr_in *server)
ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
"make_sock: failed to get a socket for %s", addr);
-@@ -3783,15 +3838,19 @@
+@@ -3828,15 +3883,19 @@
#ifdef MPE
/* MPE requires CAP=PM and GETPRIVMODE to bind to ports less than 1024 */
GETUSERMODE();
#endif
-@@ -3804,7 +3863,7 @@
+@@ -3849,7 +3908,7 @@
exit(1);
}
#ifdef MPE
GETUSERMODE();
#endif
-@@ -3957,15 +4016,17 @@
+@@ -4002,15 +4061,17 @@
for (;;) {
fd = find_listener(lr);
if (fd < 0) {
+ fd = make_sock(p, (struct sockaddr *)&lr->local_addr);
}
else {
- ap_note_cleanups_for_socket(p, fd);
+ ap_note_cleanups_for_socket_ex(p, fd, 1);
}
/* if we get here, (fd >= 0) && (fd < FD_SETSIZE) */
- FD_SET(fd, &listenfds);
+ if (fd > 0) {
+ FD_SET(fd, &listenfds);
+ if (fd > listenmaxfd)
-+ listenmaxfd = fd;
++ listenmaxfd = fd;
+ }
lr->fd = fd;
if (lr->next == NULL)
break;
-@@ -4280,8 +4341,8 @@
+@@ -4327,8 +4388,8 @@
static void child_main(int child_num_arg)
{
NET_SIZE_T clen;
listen_rec *lr;
/* All of initialization is a critical section, we don't care if we're
-@@ -4453,7 +4514,7 @@
+@@ -4505,7 +4566,7 @@
usr1_just_die = 0;
for (;;) {
clen = sizeof(sa_client);
if (csd >= 0 || errno != EINTR)
break;
if (deferred_die) {
-@@ -4616,7 +4677,7 @@
+@@ -4671,7 +4732,7 @@
*/
clen = sizeof(sa_server);
- if (getsockname(csd, &sa_server, &clen) < 0) {
+ if (getsockname(csd, (struct sockaddr *)&sa_server, &clen) < 0) {
- ap_log_error(APLOG_MARK, APLOG_ERR, server_conf, "getsockname");
- continue;
- }
-@@ -4661,8 +4722,8 @@
+ ap_log_error(APLOG_MARK, APLOG_DEBUG, server_conf,
+ "getsockname, client %pA probably dropped the "
+ "connection",
+@@ -4719,8 +4780,8 @@
ap_bpushfd(conn_io, csd, dupped_csd);
current_conn = new_connection(ptrans, server_conf, conn_io,
my_child_num);
/*
-@@ -4817,12 +4878,13 @@
+@@ -4875,12 +4936,13 @@
#ifdef _OSD_POSIX
/* BS2000 requires a "special" version of fork() before a setuid() call */
ap_log_error(APLOG_MARK, APLOG_ERR, s, "fork: Unable to fork new process");
/* fork didn't succeed. Fix the scoreboard or else
-@@ -5434,7 +5496,10 @@
+@@ -5497,7 +5559,10 @@
ap_setup_prelinked_modules();
while ((c = getopt(argc, argv,
#ifdef DEBUG_SIGSTOP
"Z:"
#endif
-@@ -5512,8 +5577,14 @@
+@@ -5575,8 +5640,14 @@
ap_configtestonly = 1;
ap_docrootcheck = 0;
break;
case '?':
usage(argv[0]);
}
-@@ -5601,9 +5672,10 @@
+@@ -5665,9 +5736,10 @@
else {
conn_rec *conn;
request_rec *r;
ap_set_version();
/* Yes this is called twice. */
-@@ -5658,25 +5730,32 @@
+@@ -5722,25 +5794,32 @@
#endif
l = sizeof(sa_client);
while ((r = ap_read_request(conn)) != NULL) {
-@@ -7383,7 +7462,11 @@
+@@ -7447,7 +7526,11 @@
while ((c = getopt(argc, argv, "D:C:c:Xd:f:vVlLz:Z:wiuStThk:n:W:")) != -1) {
#else /* !WIN32 */
#endif
char **new;
switch (c) {
-@@ -7929,6 +8012,10 @@
+@@ -7993,6 +8076,10 @@
case 't':
case 'T':
case 'h':
case '?':
break;
case 'R':
-diff -Nur apache_1.3.26.orig/src/main/http_vhost.c apache_1.3.26/src/main/http_vhost.c
---- apache_1.3.26.orig/src/main/http_vhost.c Wed Mar 13 22:05:31 2002
-+++ apache_1.3.26/src/main/http_vhost.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/main/http_vhost.c apache_1.3.28/src/main/http_vhost.c
+--- apache_1.3.28.orig/src/main/http_vhost.c Mon Feb 3 18:13:23 2003
++++ apache_1.3.28/src/main/http_vhost.c Fri Jul 25 11:01:55 2003
@@ -68,6 +68,7 @@
#include "http_log.h"
#include "http_vhost.h"
/* otherwise we're stuck with just the main server
* and no name-based vhosts
*/
-diff -Nur apache_1.3.26.orig/src/main/rfc1413.c apache_1.3.26/src/main/rfc1413.c
---- apache_1.3.26.orig/src/main/rfc1413.c Wed Mar 13 22:05:31 2002
-+++ apache_1.3.26/src/main/rfc1413.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/main/rfc1413.c apache_1.3.28/src/main/rfc1413.c
+--- apache_1.3.28.orig/src/main/rfc1413.c Mon Feb 3 18:13:23 2003
++++ apache_1.3.28/src/main/rfc1413.c Fri Jul 25 12:15:05 2003
@@ -82,6 +82,7 @@
#include "http_log.h" /* for aplog_error */
#include "rfc1413.h"
result = FROM_UNKNOWN;
-- sock = ap_psocket(conn->pool, AF_INET, SOCK_STREAM, IPPROTO_TCP);
-+ sock = ap_psocket(conn->pool, conn->remote_addr.ss_family, SOCK_STREAM, IPPROTO_TCP);
+- sock = ap_psocket_ex(conn->pool, AF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
++ sock = ap_psocket_ex(conn->pool, conn->remote_addr.ss_family, SOCK_STREAM, IPPROTO_TCP, 1);
if (sock < 0) {
ap_log_error(APLOG_MARK, APLOG_CRIT, srv,
"socket: rfc1413: error creating socket");
}
ap_set_callback_and_alarm(NULL, 0);
ap_pclosesocket(conn->pool, sock);
-diff -Nur apache_1.3.26.orig/src/main/util.c apache_1.3.26/src/main/util.c
---- apache_1.3.26.orig/src/main/util.c Tue Jun 18 02:59:58 2002
-+++ apache_1.3.26/src/main/util.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/main/util.c apache_1.3.28/src/main/util.c
+--- apache_1.3.28.orig/src/main/util.c Mon Feb 3 18:13:23 2003
++++ apache_1.3.28/src/main/util.c Fri Jul 25 11:01:55 2003
@@ -2017,52 +2017,87 @@
* Parses a host of the form <address>[:port]
* :port is permitted if 'port' is not NULL
+#ifdef NEED_GETNAMEINFO
+#include "getnameinfo.c"
+#endif
-diff -Nur apache_1.3.26.orig/src/main/util_script.c apache_1.3.26/src/main/util_script.c
---- apache_1.3.26.orig/src/main/util_script.c Thu Mar 21 17:07:02 2002
-+++ apache_1.3.26/src/main/util_script.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/main/util_script.c apache_1.3.28/src/main/util_script.c
+--- apache_1.3.28.orig/src/main/util_script.c Mon Feb 3 18:13:23 2003
++++ apache_1.3.28/src/main/util_script.c Fri Jul 25 11:01:55 2003
@@ -67,6 +67,7 @@
#include "http_request.h" /* for sub_req_lookup_uri() */
#include "util_script.h"
/* use a temporary table which we'll overlap onto
* r->subprocess_env later
-@@ -293,8 +295,16 @@
+@@ -294,8 +296,16 @@
ap_table_addn(e, "SERVER_ADMIN", s->server_admin); /* Apache */
ap_table_addn(e, "SCRIPT_FILENAME", r->filename); /* Apache */
if (c->user) {
ap_table_addn(e, "REMOTE_USER", c->user);
-diff -Nur apache_1.3.26.orig/src/main/util_uri.c apache_1.3.26/src/main/util_uri.c
---- apache_1.3.26.orig/src/main/util_uri.c Tue Jun 18 02:59:58 2002
-+++ apache_1.3.26/src/main/util_uri.c Wed Jun 19 10:26:32 2002
-@@ -419,6 +419,12 @@
+diff -Nur apache_1.3.28.orig/src/main/util_uri.c apache_1.3.28/src/main/util_uri.c
+--- apache_1.3.28.orig/src/main/util_uri.c Mon Feb 3 18:13:24 2003
++++ apache_1.3.28/src/main/util_uri.c Fri Jul 25 11:01:55 2003
+@@ -424,6 +424,12 @@
* the hostname. If there's a port it is the first colon.
*/
s = memchr(hostinfo, ':', uri - hostinfo);
if (s == NULL) {
/* we expect the common case to have no port */
uptr->hostname = ap_pstrndup(p, hostinfo, uri - hostinfo);
-@@ -475,7 +481,12 @@
+@@ -480,7 +486,12 @@
/* We expect hostinfo to point to the first character of
* the hostname. There must be a port, separated by a colon
*/
if (s == NULL) {
return HTTP_BAD_REQUEST;
}
-diff -Nur apache_1.3.26.orig/src/modules/proxy/mod_proxy.c apache_1.3.26/src/modules/proxy/mod_proxy.c
---- apache_1.3.26.orig/src/modules/proxy/mod_proxy.c Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/modules/proxy/mod_proxy.c Wed Jun 19 10:32:29 2002
+diff -Nur apache_1.3.28.orig/src/modules/proxy/mod_proxy.c apache_1.3.28/src/modules/proxy/mod_proxy.c
+--- apache_1.3.28.orig/src/modules/proxy/mod_proxy.c Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/modules/proxy/mod_proxy.c Fri Jul 25 11:01:55 2003
@@ -574,11 +574,31 @@
struct proxy_remote *new;
char *p, *q;
new->port = port;
return NULL;
}
-diff -Nur apache_1.3.26.orig/src/modules/proxy/mod_proxy.h apache_1.3.26/src/modules/proxy/mod_proxy.h
---- apache_1.3.26.orig/src/modules/proxy/mod_proxy.h Sun Apr 21 13:35:07 2002
-+++ apache_1.3.26/src/modules/proxy/mod_proxy.h Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/modules/proxy/mod_proxy.h apache_1.3.28/src/modules/proxy/mod_proxy.h
+--- apache_1.3.28.orig/src/modules/proxy/mod_proxy.h Mon Feb 3 18:13:26 2003
++++ apache_1.3.28/src/modules/proxy/mod_proxy.h Fri Jul 25 11:01:55 2003
@@ -310,7 +310,7 @@
int ap_proxy_is_domainname(struct dirconn_entry *This, pool *p);
int ap_proxy_is_hostname(struct dirconn_entry *This, pool *p);
int ap_proxy_garbage_init(server_rec *, pool *);
/* This function is called by ap_table_do() for all header lines */
int ap_proxy_send_hdr_line(void *p, const char *key, const char *value);
-diff -Nur apache_1.3.26.orig/src/modules/proxy/proxy_connect.c apache_1.3.26/src/modules/proxy/proxy_connect.c
---- apache_1.3.26.orig/src/modules/proxy/proxy_connect.c Mon Mar 25 10:21:58 2002
-+++ apache_1.3.26/src/modules/proxy/proxy_connect.c Wed Jun 19 10:38:06 2002
+diff -Nur apache_1.3.28.orig/src/modules/proxy/proxy_connect.c apache_1.3.28/src/modules/proxy/proxy_connect.c
+--- apache_1.3.28.orig/src/modules/proxy/proxy_connect.c Mon Feb 3 18:13:26 2003
++++ apache_1.3.28/src/modules/proxy/proxy_connect.c Fri Jul 25 11:27:12 2003
@@ -113,14 +113,15 @@
const char *proxyhost, int proxyport)
{
case DEFAULT_SNEWS_PORT:
break;
default:
-+ freeaddrinfo(res0);
++ freeaddrinfo(res0);
return HTTP_FORBIDDEN;
}
}
- else if (!allowed_port(conf, port))
+ else if (!allowed_port(conf, port)) {
-+ freeaddrinfo(res0);
++ freeaddrinfo(res0);
return HTTP_FORBIDDEN;
+ }
- return ap_proxyerror(r,
- proxyhost ? HTTP_BAD_GATEWAY : HTTP_INTERNAL_SERVER_ERROR, err);
-
-- sock = ap_psocket(r->pool, PF_INET, SOCK_STREAM, IPPROTO_TCP);
+- sock = ap_psocket_ex(r->pool, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
- if (sock == -1) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, r, "proxy: error creating socket");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
+ sock = i = -1;
+ for (res = res0; res; res = res->ai_next) {
-+ sock = ap_psocket(r->pool, res->ai_family, res->ai_socktype, res->ai_protocol);
++ sock = ap_psocket_ex(r->pool, res->ai_family, res->ai_socktype, res->ai_protocol, 1);
+ if (sock == -1)
+ continue;
if (i == -1) {
ap_pclosesocket(r->pool, sock);
return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, ap_pstrcat(r->pool,
-diff -Nur apache_1.3.26.orig/src/modules/proxy/proxy_ftp.c apache_1.3.26/src/modules/proxy/proxy_ftp.c
---- apache_1.3.26.orig/src/modules/proxy/proxy_ftp.c Sun Apr 7 20:57:36 2002
-+++ apache_1.3.26/src/modules/proxy/proxy_ftp.c Wed Jun 19 10:49:53 2002
+diff -Nur apache_1.3.28.orig/src/modules/proxy/proxy_ftp.c apache_1.3.28/src/modules/proxy/proxy_ftp.c
+--- apache_1.3.28.orig/src/modules/proxy/proxy_ftp.c Mon Feb 3 18:13:26 2003
++++ apache_1.3.28/src/modules/proxy/proxy_ftp.c Fri Jul 25 11:18:38 2003
@@ -62,6 +62,7 @@
#include "http_main.h"
#include "http_log.h"
/* stuff for responses */
char resp[MAX_STRING_LEN];
char *size = NULL;
-@@ -658,62 +668,52 @@
+@@ -658,62 +668,50 @@
if (parms != NULL)
*(parms++) = '\0';
- memset(&server, 0, sizeof(struct sockaddr_in));
- server.sin_family = AF_INET;
-- server.sin_port = htons((unsigned short)port);
-- err = ap_proxy_host2addr(host, &server_hp);
+- server.sin_port = htons((unsigned short)destport);
+- err = ap_proxy_host2addr(desthost, &server_hp);
- if (err != NULL)
- return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, err);
-
-- sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
+- sock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
- if (sock == -1) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
- "proxy: error creating socket");
- return HTTP_INTERNAL_SERVER_ERROR;
-- }
-+ ap_snprintf(portbuf, sizeof(portbuf), "%d", port);
++ ap_snprintf(portbuf, sizeof(portbuf), "%d", destport);
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
-+ error = getaddrinfo(host, portbuf, &hints, &res0);
++ error = getaddrinfo(desthost, portbuf, &hints, &res0);
+ if (error) {
-+ return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
-+ gai_strerror(error));
-+ }
-+
++ return ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR, gai_strerror(error));
+ }
+
+ i = -1;
+ for (res = res0; res; res = res->ai_next) {
-+ sock = ap_psocket(p, res->ai_family, res->ai_socktype,
-+ res->ai_protocol);
++ sock = ap_psocket_ex(p, res->ai_family, res->ai_socktype,
++ res->ai_protocol, 1);
+ if (sock == -1)
+ continue;
-
++
#if !defined(TPF) && !defined(BEOS)
- if (conf->recv_buffer_size > 0
- && setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
- ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
- "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
- }
-+ if (conf->recv_buffer_size > 0
-+ && setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
-+ (const char *)&conf->recv_buffer_size, sizeof(int))
-+ == -1) {
-+ ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
-+ "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
-+ }
++ if (conf->recv_buffer_size > 0
++ && setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
++ (const char *)&conf->recv_buffer_size, sizeof(int))
++ == -1) {
++ ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
++ "setsockopt(SO_RCVBUF): Failed to set ProxyReceiveBufferSize, using default");
++ }
#endif
- if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&one,
- sizeof(one)) == -1) {
-+ if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&one,
-+ sizeof(one)) == -1) {
++ if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&one,
++ sizeof(one)) == -1) {
#ifndef _OSD_POSIX /* BS2000 has this option "always on" */
- ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
- "proxy: error setting reuseaddr option: setsockopt(SO_REUSEADDR)");
- ap_pclosesocket(p, sock);
- return HTTP_INTERNAL_SERVER_ERROR;
-+ ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
-+ "proxy: error setting reuseaddr option: setsockopt(SO_REUSEADDR)");
-+ ap_pclosesocket(p, sock);
++ ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
++ "proxy: error setting reuseaddr option: setsockopt(SO_REUSEADDR)");
++ ap_pclosesocket(p, sock);
+ freeaddrinfo(res0);
-+ return HTTP_INTERNAL_SERVER_ERROR;
++ return HTTP_INTERNAL_SERVER_ERROR;
#endif /* _OSD_POSIX */
- }
-
- sizeof(struct in_addr));
- i = ap_proxy_doconnect(sock, &server, r);
- if (i == 0)
-+
-+ i = ap_proxy_doconnect(sock, res->ai_addr, r);
-+ if (i == 0) {
++ i = ap_proxy_doconnect(sock, res->ai_addr, r);
++ if (i == 0) {
+ memcpy(&server, res->ai_addr, res->ai_addrlen);
break;
- j++;
if (i == -1) {
return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
ap_proxyerror(r, HTTP_BAD_GATEWAY, ap_pstrcat(r->pool,
-@@ -944,7 +944,7 @@
+@@ -944,7 +942,7 @@
}
/* try to set up PASV data connection first */
-- dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
-+ dsock = ap_psocket(p, server.ss_family, SOCK_STREAM, IPPROTO_TCP);
+- dsock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
++ dsock = ap_psocket_ex(p, server.ss_family, SOCK_STREAM, IPPROTO_TCP, 1);
if (dsock == -1) {
return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
-@@ -961,11 +961,22 @@
+@@ -961,11 +959,22 @@
}
#endif
/* 421 Service not available, closing control connection. */
/* 500 Syntax error, command unrecognized. */
/* 501 Syntax error in parameters or arguments. */
-@@ -976,7 +987,7 @@
+@@ -976,7 +985,7 @@
if (i == -1 || i == 421) {
return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
}
else {
pasv[i - 1] = '\0';
-@@ -1004,10 +1015,14 @@
+@@ -1004,10 +1013,14 @@
pport = (p1 << 8) + p0;
ap_log_error(APLOG_MARK, APLOG_DEBUG | APLOG_NOERRNO, r->server, "FTP: contacting host %d.%d.%d.%d:%d",
h3, h2, h1, h0, pport);
if (i == -1) {
return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
-@@ -1017,6 +1032,64 @@
+@@ -1017,6 +1030,64 @@
strerror(errno), NULL)));
}
pasvmode = 1;
}
else {
ap_pclosesocket(p, dsock); /* and try the regular way */
-@@ -1025,14 +1098,14 @@
+@@ -1025,14 +1096,14 @@
}
if (!pasvmode) { /* set up data connection */
"proxy: error getting socket address"));
}
-- dsock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
-+ dsock = ap_psocket(p, server.ss_family, SOCK_STREAM, IPPROTO_TCP);
+- dsock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
++ dsock = ap_psocket_ex(p, server.ss_family, SOCK_STREAM, IPPROTO_TCP, 1);
if (dsock == -1) {
return ftp_cleanup_and_return(r, ctrl, data, sock, dsock,
ap_proxyerror(r, HTTP_INTERNAL_SERVER_ERROR,
-@@ -1048,13 +1121,28 @@
+@@ -1048,13 +1119,28 @@
#endif /* _OSD_POSIX */
}
}
listen(dsock, 2); /* only need a short queue */
}
-@@ -1308,7 +1396,7 @@
+@@ -1308,7 +1394,7 @@
if (!pasvmode) { /* wait for connection */
ap_hard_timeout("proxy ftp data connect", r);
do
csd = accept(dsock, (struct sockaddr *)&server, &clen);
while (csd == -1 && errno == EINTR);
-diff -Nur apache_1.3.26.orig/src/modules/proxy/proxy_http.c apache_1.3.26/src/modules/proxy/proxy_http.c
---- apache_1.3.26.orig/src/modules/proxy/proxy_http.c Wed Jun 19 10:25:56 2002
-+++ apache_1.3.26/src/modules/proxy/proxy_http.c Wed Jun 19 11:00:47 2002
+diff -Nur apache_1.3.28.orig/src/modules/proxy/proxy_http.c apache_1.3.28/src/modules/proxy/proxy_http.c
+--- apache_1.3.28.orig/src/modules/proxy/proxy_http.c Fri Jul 25 11:00:49 2003
++++ apache_1.3.28/src/modules/proxy/proxy_http.c Fri Jul 25 11:25:37 2003
@@ -156,9 +156,8 @@
table *req_hdrs, *resp_hdrs;
array_header *reqhdrs_arr;
strp2 = strchr(desthost, ':');
if (strp2 != NULL) {
*(strp2++) = '\0';
-@@ -223,46 +234,70 @@
+@@ -222,46 +233,71 @@
+ }
}
- /* check if ProxyBlock directive on this host */
-- destaddr.s_addr = ap_inet_addr(desthost);
-- for (i = 0; i < conf->noproxies->nelts; i++) {
-- if (destaddr.s_addr == npent[i].addr.s_addr ||
-- (npent[i].name != NULL &&
-- (npent[i].name[0] == '*' || strstr(desthost, npent[i].name) != NULL)))
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = PF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ gai_strerror(error)); /* give up */
+ }
+
-+ /* check if ProxyBlock directive on this host */
+ /* check if ProxyBlock directive on this host */
+- destaddr.s_addr = ap_inet_addr(desthost);
+- for (i = 0; i < conf->noproxies->nelts; i++) {
+- if (destaddr.s_addr == npent[i].addr.s_addr ||
+- (npent[i].name != NULL &&
+- (npent[i].name[0] == '*' || strstr(desthost, npent[i].name) != NULL)))
+ for (res = res0; res; res = res->ai_next) {
+ struct sockaddr_in *sin;
+#ifdef INET6
-#endif
- }
-
--
-- /*
-- * we have worked out who exactly we are going to connect to, now make
-- * that connection...
-- */
-- sock = ap_psocket(p, PF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+ /*
+ * we have worked out who exactly we are going to connect to, now make
+ * that connection...
+ */
+- sock = ap_psocket_ex(p, PF_INET, SOCK_STREAM, IPPROTO_TCP, 1);
- if (sock == -1) {
- ap_log_rerror(APLOG_MARK, APLOG_ERR, r,
- "proxy: error creating socket");
- return HTTP_INTERNAL_SERVER_ERROR;
- }
-
-+
+ sock = i = -1;
+ for (res = res0; res; res = res->ai_next) {
-+ sock = ap_psocket(p, res->ai_family, res->ai_socktype,
-+ res->ai_protocol);
++ sock = ap_psocket_ex(p, res->ai_family, res->ai_socktype, res->ai_protocol, 1);
+ if (sock < 0)
+ continue;
-+
+
#if !defined(TPF) && !defined(BEOS)
if (conf->recv_buffer_size) {
- if (setsockopt(sock, SOL_SOCKET, SO_RCVBUF,
-@@ -274,28 +309,12 @@
+@@ -274,28 +310,12 @@
}
#endif
if (i == -1) {
if (proxyhost != NULL)
return DECLINED; /* try again another way */
-@@ -599,17 +618,30 @@
+@@ -597,17 +617,30 @@
ap_table_set(resp_hdrs, "Content-Location", proxy_location_reverse_map(r, urlstr));
/* check if NoCache directive on this host */
/*
* update the cache file, possibly even fulfilling the request if it
* turns out a conditional allowed us to serve the object from the
-diff -Nur apache_1.3.26.orig/src/modules/proxy/proxy_util.c apache_1.3.26/src/modules/proxy/proxy_util.c
---- apache_1.3.26.orig/src/modules/proxy/proxy_util.c Tue Jun 18 02:59:59 2002
-+++ apache_1.3.26/src/modules/proxy/proxy_util.c Wed Jun 19 11:05:11 2002
+diff -Nur apache_1.3.28.orig/src/modules/proxy/proxy_util.c apache_1.3.28/src/modules/proxy/proxy_util.c
+--- apache_1.3.28.orig/src/modules/proxy/proxy_util.c Mon Feb 3 18:13:26 2003
++++ apache_1.3.28/src/modules/proxy/proxy_util.c Fri Jul 25 11:01:55 2003
@@ -64,6 +64,7 @@
#include "http_log.h"
#include "util_uri.h"
}
ap_kill_timeout(r);
-diff -Nur apache_1.3.26.orig/src/modules/standard/mod_access.c apache_1.3.26/src/modules/standard/mod_access.c
---- apache_1.3.26.orig/src/modules/standard/mod_access.c Wed Mar 13 22:05:33 2002
-+++ apache_1.3.26/src/modules/standard/mod_access.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/modules/standard/mod_access.c apache_1.3.28/src/modules/standard/mod_access.c
+--- apache_1.3.28.orig/src/modules/standard/mod_access.c Mon Feb 3 18:13:27 2003
++++ apache_1.3.28/src/modules/standard/mod_access.c Fri Jul 25 11:01:55 2003
@@ -74,7 +74,10 @@
T_ALL,
T_IP,
case T_HOST:
if (!gothost) {
-diff -Nur apache_1.3.26.orig/src/modules/standard/mod_unique_id.c apache_1.3.26/src/modules/standard/mod_unique_id.c
---- apache_1.3.26.orig/src/modules/standard/mod_unique_id.c Wed Mar 13 22:05:34 2002
-+++ apache_1.3.26/src/modules/standard/mod_unique_id.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/modules/standard/mod_unique_id.c apache_1.3.28/src/modules/standard/mod_unique_id.c
+--- apache_1.3.28.orig/src/modules/standard/mod_unique_id.c Mon Feb 3 18:13:30 2003
++++ apache_1.3.28/src/modules/standard/mod_unique_id.c Fri Jul 25 11:01:55 2003
@@ -67,10 +67,22 @@
#include "http_config.h"
#include "http_log.h"
/*
* If we use 0 as the initial counter we have a little less protection
-diff -Nur apache_1.3.26.orig/src/support/ab.c apache_1.3.26/src/support/ab.c
---- apache_1.3.26.orig/src/support/ab.c Sat May 11 22:47:57 2002
-+++ apache_1.3.26/src/support/ab.c Wed Jun 19 11:08:58 2002
+diff -Nur apache_1.3.28.orig/src/support/ab.c apache_1.3.28/src/support/ab.c
+--- apache_1.3.28.orig/src/support/ab.c Sun Jul 6 19:52:27 2003
++++ apache_1.3.28/src/support/ab.c Fri Jul 25 11:01:55 2003
@@ -158,6 +158,8 @@
#include <sys/uio.h>
#endif
if (errno != EINPROGRESS) {
what = "CONNECT";
goto _bad;
-@@ -1182,7 +1189,7 @@
+@@ -1189,7 +1196,7 @@
struct timeval timeout, now;
fd_set sel_read, sel_except, sel_write;
long i;
char * connecthost;
char * url_on_request;
-@@ -1225,17 +1232,21 @@
+@@ -1232,17 +1239,21 @@
}
{
/* get server information */
}
con = malloc(concurrency * sizeof(struct connection));
-@@ -1423,7 +1434,7 @@
+@@ -1430,7 +1441,7 @@
if (strlen(purl) > 8 && strncmp(purl, "https://", 8) == 0) {
purl += 8;
ssl = 1;
}
#else
if (strlen(purl) > 8 && strncmp(purl, "https://", 8) == 0) {
-@@ -1444,15 +1455,15 @@
+@@ -1451,15 +1462,15 @@
*cp = '\0';
strcpy(hostname, h);
if (p != NULL)
} else {
colonport[0] = '\0';
}
-@@ -1615,7 +1626,7 @@
+@@ -1622,7 +1633,7 @@
if ((p = strchr(optarg, ':'))) {
*p = '\0';
p++;
};
strcpy(proxyhost, optarg);
isproxy = 1;
-@@ -1698,3 +1709,7 @@
+@@ -1705,3 +1716,7 @@
exit(0);
}
+#ifdef NEED_GETADDRINFO
+#include "../main/getaddrinfo.c"
+#endif
-diff -Nur apache_1.3.26.orig/src/support/logresolve.c apache_1.3.26/src/support/logresolve.c
---- apache_1.3.26.orig/src/support/logresolve.c Wed May 23 00:52:21 2001
-+++ apache_1.3.26/src/support/logresolve.c Wed Jun 19 10:26:32 2002
+diff -Nur apache_1.3.28.orig/src/support/logresolve.c apache_1.3.28/src/support/logresolve.c
+--- apache_1.3.28.orig/src/support/logresolve.c Wed May 23 00:52:21 2001
++++ apache_1.3.28/src/support/logresolve.c Fri Jul 25 11:01:55 2003
@@ -54,7 +54,9 @@
#endif /* BEOS */
#endif /* !MPE && !WIN32*/
+#ifdef NEED_GETNAMEINFO
+#include "../main/getnameinfo.c"
+#endif
+--- apache_1.3.28/src/modules/standard/mod_usertrack.c.orig Mon Feb 3 18:13:30 2003
++++ apache_1.3.28/src/modules/standard/mod_usertrack.c Fri Jul 25 13:13:43 2003
+@@ -162,7 +162,7 @@
+ long reqtime = (long) r->request_time;
+ long clocktime;
+
+- unsigned long ipaddr = ntohl(r->connection->remote_addr.sin_addr.s_addr);
++ unsigned long ipaddr = ntohl(((struct sockaddr_in*)&r->connection->remote_addr)->sin_addr.s_addr);
+ const char *rname = ap_get_remote_host(r->connection, r->per_dir_config,
+ REMOTE_NAME);
+ dcfg = ap_get_module_config(r->per_dir_config, &usertrack_module);