* Ryan Phillips wrote: > Ryan Phillips <[EMAIL PROTECTED]> said: > > Jeff Trawick <[EMAIL PROTECTED]> said: > > > On Mon, Jun 9, 2008 at 9:19 PM, Ryan Phillips <[EMAIL PROTECTED]> wrote: > > > > Ryan Phillips <[EMAIL PROTECTED]> 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
