25 } ngx_http_access_rule6_t;
47 static void *ngx_http_access_create_loc_conf(
ngx_conf_t *cf);
48 static char *ngx_http_access_merge_loc_conf(
ngx_conf_t *cf,
49 void *parent,
void *child);
86 ngx_http_access_create_loc_conf,
87 ngx_http_access_merge_loc_conf
93 &ngx_http_access_module_ctx,
94 ngx_http_access_commands,
110 struct sockaddr_in *sin;
115 struct sockaddr_in6 *sin6;
125 return ngx_http_access_inet(r, alcf, sin->sin_addr.s_addr);
133 p = sin6->sin6_addr.s6_addr;
135 if (alcf->
rules && IN6_IS_ADDR_V4MAPPED(&sin6->sin6_addr)) {
140 return ngx_http_access_inet(r, alcf, htonl(addr));
144 return ngx_http_access_inet6(r, alcf, p);
165 "access: %08XD %08XD %08XD",
168 if ((addr & rule[i].mask) == rule[i].addr) {
169 return ngx_http_access_found(r, rule[i].deny);
185 ngx_http_access_rule6_t *rule6;
187 rule6 = alcf->rules6->elts;
188 for (i = 0; i < alcf->rules6->nelts; i++) {
202 "access: %*s %*s %*s", cl, ct, ml, mt, al, at);
206 for (n = 0; n < 16; n++) {
207 if ((p[n] & rule6[i].mask.s6_addr[n]) != rule6[i].addr.s6_addr[n]) {
212 return ngx_http_access_found(r, rule6[i].deny);
234 "access forbidden by rule");
255 ngx_http_access_rule6_t *rule6;
262 all = (value[1].
len == 3 &&
ngx_strcmp(value[1].data,
"all") == 0);
270 "invalid parameter \"%V\"", &value[1]);
276 "low address bits of %V are meaningless", &value[1]);
286 if (alcf->rules6 == NULL) {
288 sizeof(ngx_http_access_rule6_t));
289 if (alcf->rules6 == NULL) {
299 rule6->mask = cidr.
u.in6.mask;
300 rule6->addr = cidr.
u.in6.addr;
301 rule6->deny = (value[0].
data[0] ==
'd') ? 1 : 0;
312 if (alcf->
rules == NULL) {
315 if (alcf->
rules == NULL) {
327 rule->
deny = (value[0].
data[0] ==
'd') ? 1 : 0;
335 ngx_http_access_create_loc_conf(
ngx_conf_t *cf)
349 ngx_http_access_merge_loc_conf(
ngx_conf_t *cf,
void *parent,
void *child)
356 if (conf->
rules == NULL && conf->rules6 == NULL) {
358 conf->rules6 = prev->rules6;
363 if (conf->
rules == NULL) {
386 *h = ngx_http_access_handler;