aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/http/modules/ngx_http_access_module.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/src/http/modules/ngx_http_access_module.c b/src/http/modules/ngx_http_access_module.c
index bfc36e9bf..a28ebf7b7 100644
--- a/src/http/modules/ngx_http_access_module.c
+++ b/src/http/modules/ngx_http_access_module.c
@@ -108,20 +108,30 @@ ngx_http_access_handler(ngx_http_request_t *r)
{
struct sockaddr_in *sin;
ngx_http_access_loc_conf_t *alcf;
+#if (NGX_HAVE_INET6)
+ u_char *p;
+ in_addr_t addr;
+ struct sockaddr_in6 *sin6;
+#endif
alcf = ngx_http_get_module_loc_conf(r, ngx_http_access_module);
-#if (NGX_HAVE_INET6)
+ switch (r->connection->sockaddr->sa_family) {
+
+ case AF_INET:
+ if (alcf->rules) {
+ sin = (struct sockaddr_in *) r->connection->sockaddr;
+ return ngx_http_access_inet(r, alcf, sin->sin_addr.s_addr);
+ }
+ break;
- if (alcf->rules6 && r->connection->sockaddr->sa_family == AF_INET6) {
- u_char *p;
- in_addr_t addr;
- struct sockaddr_in6 *sin6;
+#if (NGX_HAVE_INET6)
+ case AF_INET6:
sin6 = (struct sockaddr_in6 *) r->connection->sockaddr;
p = sin6->sin6_addr.s6_addr;
- if (IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
+ if (alcf->rules && IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
addr = p[12] << 24;
addr += p[13] << 16;
addr += p[14] << 8;
@@ -129,14 +139,11 @@ ngx_http_access_handler(ngx_http_request_t *r)
return ngx_http_access_inet(r, alcf, htonl(addr));
}
- return ngx_http_access_inet6(r, alcf, p);
- }
+ if (alcf->rules6) {
+ return ngx_http_access_inet6(r, alcf, p);
+ }
#endif
-
- if (alcf->rules && r->connection->sockaddr->sa_family == AF_INET) {
- sin = (struct sockaddr_in *) r->connection->sockaddr;
- return ngx_http_access_inet(r, alcf, sin->sin_addr.s_addr);
}
return NGX_DECLINED;