#include <ngx_http.h>
-/* AF_INET only */
-
typedef struct {
in_addr_t mask;
in_addr_t addr;
/* AF_INET only */
+ if (r->connection->sockaddr->sa_family != AF_INET) {
+ return NGX_DECLINED;
+ }
+
sin = (struct sockaddr_in *) r->connection->sockaddr;
rule = alcf->rules->elts;
ngx_int_t rc;
ngx_str_t *value;
- ngx_inet_cidr_t in_cidr;
+ ngx_cidr_t cidr;
ngx_http_access_rule_t *rule;
if (alcf->rules == NULL) {
return NGX_CONF_OK;
}
- rc = ngx_ptocidr(&value[1], &in_cidr);
+ rc = ngx_ptocidr(&value[1], &cidr);
if (rc == NGX_ERROR) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid parameter \"%V\"",
return NGX_CONF_ERROR;
}
+ if (cidr.family != AF_INET) {
+ ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+ "\"allow\" supports IPv4 only");
+ return NGX_CONF_ERROR;
+ }
+
if (rc == NGX_DONE) {
ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
"low address bits of %V are meaningless", &value[1]);
}
- rule->mask = in_cidr.mask;
- rule->addr = in_cidr.addr;
+ rule->mask = cidr.u.in.mask;
+ rule->addr = cidr.u.in.addr;
return NGX_CONF_OK;
}