On Fri, Feb 24, 2017 at 1:35 PM, Stefan Eissing
<stefan.eiss...@greenbytes.de> wrote:
> Meh.
>
> Stefan: once during the last 2 days or several?
>
>
> This is accessing r->useragent_addr by mod_access_compat which is, for h2 
> slaves, initialized with c->client_addr.
>
> Since c->client_addr is always initialized by the master connection, I did 
> not see any race issues with sharing this across multiple slaves. Anyone has 
> an idea?

No idea, but don't see it related to http2, though.

I'm there:

1078 APR_DECLARE(int) apr_ipsubnet_test(apr_ipsubnet_t *ipsub,
apr_sockaddr_t *sa)
1079 {
1080 #if APR_HAVE_IPV6
1081     /* XXX This line will segv on Win32 build with APR_HAVE_IPV6,
1082      * but without the IPV6 drivers installed.
1083      */
1084     if (sa->family == AF_INET) {
1085         if (ipsub->family == AF_INET &&
1086             ((sa->sa.sin.sin_addr.s_addr & ipsub->mask[0]) ==
ipsub->sub[0])) {
1087             return 1;
1088         }
1089     }
1090     else if (IN6_IS_ADDR_V4MAPPED((struct in6_addr *)sa->ipaddr_ptr)) {
1091         if (ipsub->family == AF_INET &&
1092             (((apr_uint32_t *)sa->ipaddr_ptr)[3] &
ipsub->mask[0]) == ipsub->sub[0]) {
1093             return 1;
1094         }
1095     }
1096     else if (sa->family == AF_INET6 && ipsub->family == AF_INET6) {
1097         apr_uint32_t *addr = (apr_uint32_t *)sa->ipaddr_ptr;
1098
1099         if ((addr[0] & ipsub->mask[0]) == ipsub->sub[0] &&
1100             (addr[1] & ipsub->mask[1]) == ipsub->sub[1] &&
1101             (addr[2] & ipsub->mask[2]) == ipsub->sub[2] &&
1102             (addr[3] & ipsub->mask[3]) == ipsub->sub[3]) {
1103             return 1;
1104         }
1105     }
1106 #else
1107     if ((sa->sa.sin.sin_addr.s_addr & ipsub->mask[0]) == ipsub->sub[0]) {
1108         return 1;
1109     }
1110 #endif /* APR_HAVE_IPV6 */
1111     return 0; /* no match */
1112 }

=> IN6_IS_ADDR_V4MAPPED((struct in6_addr *)sa->ipaddr_ptr)

Hmm...

Reply via email to