December 2002
Intermediate to advanced
588 pages
25h 57m
English
Check Access
int module_check_access(request_rec *pReq)
This routine checks access, in the allow/deny
sense. It can return OK ,
DECLINED, or a status code. All modules are called
until one of them returns something other than
DECLINED or OK. If all modules
return DECLINED, it is considered a configuration
error. At this point, the URL and the filename (if relevant) are
known, as are the client’s address, user agent, and
so forth. All of these are available through pReq.
As long as everything says DECLINED or
OK, the request can proceed.
The only example available in the standard modules is, unsurprisingly, from mod_access.c. See Example 21-17 for an excerpt from mod_access.c.
static int find_allowdeny(request_rec *r, array_header *a, int method) { allowdeny *ap = (allowdeny *) a->elts; int mmask = (1 << method); int i; int gothost = 0; const char *remotehost = NULL; for (i = 0; i < a->nelts; ++i) { if (!(mmask & ap[i].limited)) continue; switch (ap[i].type) { case T_ENV: if (ap_table_get(r->subprocess_env, ap[i].x.from)) { return 1; } break; case T_ALL: return 1; case T_IP: if (ap[i].x.ip.net != INADDR_NONE && (r->connection->remote_addr.sin_addr.s_addr & ap[i].x.ip.mask) == ap[i].x.ip.net) { return 1; } break; case T_HOST: if (!gothost) { remotehost = ap_get_remote_host(r->connection, r->per_dir_config, REMOTE_DOUBLE_REV); if ((remotehost == NULL) || is_ip(remotehost)) gothost = 1; else gothost = 2; } if ((gothost == 2) && in_domain(ap[i].x.from, ...Read now
Unlock full access