httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Malo ...@perlig.de>
Subject Re: [patch] Add IPV6 'specials' flag to mod_rewrite - try 2
Date Thu, 12 Jun 2008 07:45:17 GMT
* Ryan Phillips wrote:

> Ryan Phillips <ryan-apache@trolocsis.com> said:
> > Jeff Trawick <trawick@gmail.com> said:
> > > On Mon, Jun 9, 2008 at 9:19 PM, Ryan Phillips 
<ryan-apache@trolocsis.com> wrote:
> > > > Ryan Phillips <ryan-apache@trolocsis.com> said:
> > > >> So I needed to create some mod_rewrite rules only for IPv6 when
> > > >> httpd is configured for both ipv4 and ipv6 modes.  This patch adds
> > > >> 'RewriteCond IPV6 on' support to the ruleset.
> > > >>
> > > >> I initially tried to see if the incoming socket was APR_INET6, but
> > > >> couldn't find the right structure within the request to query.
> > > >
> > > > Should r->connection->local_addr or remote_addr have the correct
> > > > socket family?  If I try either of these over an IPv4 connection, I
> > > > always get a socket family of IPv6.
> > >
> > > On most platforms, httpd will handle IPv4 connections on an IPv6
> > > socket; the address family will be APR_INET6 and the socket address
> > > will have a special format which indicates that the client is IPv4
> > > (http://en.wikipedia.org/wiki/IPv4_mapped_address).
> > >
> > > Replace "Listen ##" with the combination "Listen 0.0.0.0:##" +
> > > "Listen [::]:##" and you should be able to distinguish between client
> > > connection type by checking the address family (not a real solution).
> > >
> > > The system macro IN6_IS_ADDR_V4MAPPED() can check if an IPv6 socket
> > > address represents an IPv4 client connection.  Apparently APR doesn't
> > > provide an equivalent.
> >
> > Jeff,
> >
> > Thanks for the detailed explanation.  I wasn't aware of this.
>
> Attached is a patch which uses IN6_IS_ADDR_V4MAPPED to see if the client
> is from an IPv4 socket.

You should probably add conditionals for both macros (AF_INET6 and 
IN6_IS_ADDR_V4MAPPED) and deal with non-existance properly. If INET6 is 
missing, you can safely return "off", I think. If IN6_IS_ADDR_V4MAPPED is 
missing - well, then "on" might be right.

Next point - which header files are the macros and structs in? Should we 
include them explicitly? Or are they provided by APR already (and 
officially)?

And finally, "return apr_strdup" should be replaced by "result = ". I know, 
it's probably pasted from the HTTPS variable stuff, but that's not good 
there too ;)

Ah, another last point - is your patch against trunk? It doesn't look like 
it.

nd
-- 
If God intended people to be naked, they would be born that way.
  -- Oscar Wilde

Mime
View raw message