Index: docs/manual/mod/mod_setenvif.xml =================================================================== --- docs/manual/mod/mod_setenvif.xml (revision 264763) +++ docs/manual/mod/mod_setenvif.xml (working copy) @@ -183,14 +183,6 @@ among request characteristics and a regular expression was not used for the attribute. -
','.
- The oid should reference a string-valued extension.
-The second argument (regex) is a
SetEnvIf object_is_image xbm XBIT_PROCESSING=1
:
- SetEnvIf OID("2.16.840.1.113730.1.13") "(.*)" NetscapeComment=$1
- :
SetEnvIf ^TS* ^[a-z].* HAVE_TS
@@ -240,10 +230,6 @@
the referring page was somewhere on the
www.mydomain.com Web site.
The sixth example will set the NetscapeComment
- environment variable to the string found in the corresponding
- SSL client certificate field (if found).
The last example will set environment variable
HAVE_TS if the request contains any headers that
begin with "TS" whose values begins with any character in the
Index: server/listen.c
===================================================================
--- server/listen.c (revision 264763)
+++ server/listen.c (working copy)
@@ -346,7 +346,16 @@
return NULL;
}
+/* Evaluates to true if the (apr_sockaddr_t *) addr argument is the
+ * IPv4 match-any-address, 0.0.0.0. */
+#define IS_INADDR_ANY(addr) ((addr)->family == APR_INET \
+ && (addr)->sa.sin.sin_addr.s_addr == INADDR_ANY)
+/* Evaluates to true if the (apr_sockaddr_t *) addr argument is the
+ * IPv6 match-any-address, [::]. */
+#define IS_IN6ADDR_ANY(addr) ((addr)->family == APR_INET6 \
+ && IN6_IS_ADDR_UNSPECIFIED(&(addr)->sa.sin6.sin6_addr))
+
/**
* Create, open, listen, and bind all sockets.
* @param process The process record for the currently running server
@@ -374,22 +383,43 @@
else {
#if APR_HAVE_IPV6
int v6only_setting;
+
+ /* If we have the unspecified IPv4 address (0.0.0.0) and
+ * the unspecified IPv6 address (::) is next, we need to
+ * swap the order of these in the list. We always try to
+ * bind to IPv6 first, then IPv4, since an IPv6 socket
+ * might be able to receive IPv4 packets if V6ONLY is not
+ * enabled, but never the other way around. */
+ if (lr->next != NULL
+ && IS_INADDR_ANY(lr->bind_addr)
+ && lr->bind_addr->port == lr->next->bind_addr->port
+ && IS_IN6ADDR_ANY(lr->next->bind_addr)) {
+ /* Exchange lr and lr->next */
+ ap_listen_rec *next = lr->next;
+ lr->next = next->next;
+ next->next = lr;
+ if (previous) {
+ previous->next = next;
+ }
+ else {
+ ap_listeners = next;
+ }
+ lr = next;
+ }
+
/* If we are trying to bind to 0.0.0.0 and the previous listener
* was :: on the same port and in turn that socket does not have
* the IPV6_V6ONLY flag set; we must skip the current attempt to
* listen (which would generate an error). IPv4 will be handled
* on the established IPv6 socket.
*/
- if (previous != NULL &&
- lr->bind_addr->family == APR_INET &&
- lr->bind_addr->sa.sin.sin_addr.s_addr == INADDR_ANY &&
- lr->bind_addr->port == previous->bind_addr->port &&
- previous->bind_addr->family == APR_INET6 &&
- IN6_IS_ADDR_UNSPECIFIED(
- &previous->bind_addr->sa.sin6.sin6_addr) &&
- apr_socket_opt_get(previous->sd, APR_IPV6_V6ONLY,
- &v6only_setting) == APR_SUCCESS &&
- v6only_setting == 0) {
+ if (previous != NULL
+ && IS_INADDR_ANY(lr->bind_addr)
+ && lr->bind_addr->port == previous->bind_addr->port
+ && IS_IN6ADDR_ANY(previous->bind_addr)
+ && apr_socket_opt_get(previous->sd, APR_IPV6_V6ONLY,
+ &v6only_setting) == APR_SUCCESS
+ && v6only_setting == 0) {
/* Remove the current listener from the list */
previous->next = lr->next;
@@ -407,13 +437,10 @@
* error. The user will still get a warning from make_sock
* though.
*/
- if (lr->next != NULL && lr->bind_addr->family == APR_INET6 &&
- IN6_IS_ADDR_UNSPECIFIED(
- &lr->bind_addr->sa.sin6.sin6_addr) &&
- lr->bind_addr->port == lr->next->bind_addr->port &&
- lr->next->bind_addr->family == APR_INET &&
- lr->next->bind_addr->sa.sin.sin_addr.s_addr == INADDR_ANY) {
-
+ if (lr->next != NULL
+ && IS_IN6ADDR_ANY(lr->bind_addr)
+ && lr->bind_addr->port == lr->next->bind_addr->port
+ && IS_INADDR_ANY(lr->next->bind_addr)) {
/* Remove the current listener from the list */
if (previous) {
previous->next = lr->next;
Index: build/rpm/httpd.spec.in
===================================================================
--- build/rpm/httpd.spec.in (revision 264763)
+++ build/rpm/httpd.spec.in (working copy)
@@ -203,7 +203,6 @@
# docroot
mkdir $RPM_BUILD_ROOT%{contentdir}/html
rm -r $RPM_BUILD_ROOT%{contentdir}/manual/style
-rm $RPM_BUILD_ROOT%{contentdir}/manual/*/*.xml
# logs
rmdir $RPM_BUILD_ROOT%{_sysconfdir}/httpd/logs
@@ -324,6 +323,7 @@
%{_sbindir}/logresolve
%{_sbindir}/httpd
%{_sbindir}/httpd.worker
+%{_sbindir}/httxt2dbm
%{_sbindir}/apachectl
%{_sbindir}/rotatelogs
%attr(4510,root,%{suexec_caller}) %{_sbindir}/suexec
@@ -397,6 +397,10 @@
%{_libdir}/httpd/build/mkdir.sh
%changelog
+* Fri Aug 26 2005 Graham Leggett