You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by nd...@apache.org on 2004/03/14 17:24:55 UTC
cvs commit: httpd-2.0/server core.c
nd 2004/03/14 08:24:55
Modified: . CHANGES
include http_core.h
server core.c
Log:
Satisfy directives now can be influenced by a surrounding <Limit>
container.
PR: 14726.
Revision Changes Path
1.1424 +3 -0 httpd-2.0/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/httpd-2.0/CHANGES,v
retrieving revision 1.1423
retrieving revision 1.1424
diff -u -u -r1.1423 -r1.1424
--- CHANGES 13 Mar 2004 22:18:18 -0000 1.1423
+++ CHANGES 14 Mar 2004 16:24:55 -0000 1.1424
@@ -2,6 +2,9 @@
[Remove entries to the current 2.0 section below, when backported]
+ *) Satisfy directives now can be influenced by a surrounding <Limit>
+ container. PR 14726. [Andr� Malo]
+
*) htpasswd: use apr_temp_dir_get() and general cleanup
[Guenter Knauf <eflash gmx.net>, Thom May]
1.81 +1 -1 httpd-2.0/include/http_core.h
Index: http_core.h
===================================================================
RCS file: /home/cvs/httpd-2.0/include/http_core.h,v
retrieving revision 1.80
retrieving revision 1.81
diff -u -u -r1.80 -r1.81
--- http_core.h 9 Feb 2004 20:38:21 -0000 1.80
+++ http_core.h 14 Mar 2004 16:24:55 -0000 1.81
@@ -415,7 +415,7 @@
/* Authentication stuff. Groan... */
- int satisfy;
+ int *satisfy; /* for every method one */
char *ap_auth_type;
char *ap_auth_name;
apr_array_header_t *ap_requires;
1.266 +20 -6 httpd-2.0/server/core.c
Index: core.c
===================================================================
RCS file: /home/cvs/httpd-2.0/server/core.c,v
retrieving revision 1.265
retrieving revision 1.266
diff -u -u -r1.265 -r1.266
--- core.c 11 Mar 2004 03:57:49 -0000 1.265
+++ core.c 14 Mar 2004 16:24:55 -0000 1.266
@@ -85,6 +85,7 @@
static void *create_core_dir_config(apr_pool_t *a, char *dir)
{
core_dir_config *conf;
+ int i;
conf = (core_dir_config *)apr_pcalloc(a, sizeof(core_dir_config));
@@ -100,7 +101,10 @@
conf->use_canonical_name = USE_CANONICAL_NAME_UNSET;
conf->hostname_lookups = HOSTNAME_LOOKUP_UNSET;
- conf->satisfy = SATISFY_NOSPEC;
+ conf->satisfy = apr_palloc(a, sizeof(*conf->satisfy) * METHODS);
+ for (i = 0; i < METHODS; ++i) {
+ conf->satisfy[i] = SATISFY_NOSPEC;
+ }
#ifdef RLIMIT_CPU
conf->limit_cpu = NULL;
@@ -329,8 +333,10 @@
/* Otherwise we simply use the base->sec_file array
*/
- if (new->satisfy != SATISFY_NOSPEC) {
- conf->satisfy = new->satisfy;
+ for (i = 0; i < METHODS; ++i) {
+ if (new->satisfy[i] != SATISFY_NOSPEC) {
+ conf->satisfy[i] = new->satisfy[i];
+ }
}
if (new->server_signature != srv_sig_unset) {
@@ -662,7 +668,7 @@
conf = (core_dir_config *)ap_get_module_config(r->per_dir_config,
&core_module);
- return conf->satisfy;
+ return conf->satisfy[r->method_number];
}
/* Should probably just get rid of this... the only code that cares is
@@ -1479,15 +1485,23 @@
static const char *satisfy(cmd_parms *cmd, void *c_, const char *arg)
{
core_dir_config *c = c_;
+ int satisfy = SATISFY_NOSPEC;
+ int i;
if (!strcasecmp(arg, "all")) {
- c->satisfy = SATISFY_ALL;
+ satisfy = SATISFY_ALL;
}
else if (!strcasecmp(arg, "any")) {
- c->satisfy = SATISFY_ANY;
+ satisfy = SATISFY_ANY;
}
else {
return "Satisfy either 'any' or 'all'.";
+ }
+
+ for (i = 0; i < METHODS; ++i) {
+ if (cmd->limited & (AP_METHOD_BIT << i)) {
+ c->satisfy[i] = satisfy;
+ }
}
return NULL;