You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Cody Sherr <cs...@covalent.net> on 2001/08/11 01:57:36 UTC
[PATCH] directives changes
Adding a macro for the 1 that is shifted to check for <Limit> masks.
1 is by default an int, so if it's shifted more than 32 it wraps around.
The macro casts the 1 to apr_int64_t, which is what is currently being
used for limit directives.
This allows things proper checking on methods that get registered > 32,
and ap_method_register(apr_hash_t registry, const char *methnam) 2nd arg
is now properly const (kudos to Ryan Morgan).
cheers,
--
Cody Sherr
Engineer
Covalent Technologies
phone: (415)536-5292
email: csherr@covalent.net
Index: include/http_protocol.h
===================================================================
RCS file: /home/cvspublic/httpd-2.0/include/http_protocol.h,v
retrieving revision 1.61
diff -u -r1.61 http_protocol.h
--- include/http_protocol.h 2001/08/02 04:25:19 1.61
+++ include/http_protocol.h 2001/08/10 23:44:14
@@ -246,7 +246,7 @@
* @param methname The name of the new method to register.
* @return Ab int value representing an offset into a bitmask.
*/
-AP_DECLARE(int) ap_method_register(apr_pool_t *p, char *methname);
+AP_DECLARE(int) ap_method_register(apr_pool_t *p, const char *methname);
/**
* Initialize the method_registry and allocate memory for it.
@@ -259,7 +259,8 @@
* This is a convenience macro to ease with checking a mask
* against a method name.
*/
-#define AP_METHOD_CHECK_ALLOWED(mask, methname) ((mask) & (1 << ap_method_number_of((methname))))
+#define AP_METHOD_CHECK_ALLOWED(mask, methname) \
+ ((mask) & (AP_METHOD_BIT << ap_method_number_of((methname))))
/**
* Create a new method list with the specified number of preallocated
Index: include/httpd.h
===================================================================
RCS file: /home/cvspublic/httpd-2.0/include/httpd.h,v
retrieving revision 1.157
diff -u -r1.157 httpd.h
--- include/httpd.h 2001/08/02 04:25:19 1.157
+++ include/httpd.h 2001/08/10 23:44:14
@@ -503,6 +503,12 @@
*/
#define METHODS 64
+/**
+ * The method mask bit to shift for anding with a bitmask.
+ */
+#define AP_METHOD_BIT (apr_int64_t)1
+
+
typedef struct ap_method_list_t ap_method_list_t;
/**
* Structure for handling HTTP methods. Methods known to the server are
Index: modules/aaa/mod_access.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/aaa/mod_access.c,v
retrieving revision 1.33
diff -u -r1.33 mod_access.c
--- modules/aaa/mod_access.c 2001/08/02 04:25:19 1.33
+++ modules/aaa/mod_access.c 2001/08/10 23:44:15
@@ -141,7 +141,7 @@
return "unknown order";
for (i = 0; i < METHODS; ++i)
- if (cmd->limited & (1 << i))
+ if (cmd->limited & (AP_METHOD_BIT << i))
d->order[i] = o;
return NULL;
@@ -239,7 +239,7 @@
{
allowdeny *ap = (allowdeny *) a->elts;
- apr_int64_t mmask = (1 << method);
+ apr_int64_t mmask = (AP_METHOD_BIT << method);
int i;
int gothost = 0;
const char *remotehost = NULL;
Index: modules/aaa/mod_auth.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/aaa/mod_auth.c,v
retrieving revision 1.33
diff -u -r1.33 mod_auth.c
--- modules/aaa/mod_auth.c 2001/02/25 00:51:30 1.33
+++ modules/aaa/mod_auth.c 2001/08/10 23:44:15
@@ -268,7 +268,7 @@
for (x = 0; x < reqs_arr->nelts; x++) {
- if (!(reqs[x].method_mask & (1 << m)))
+ if (!(reqs[x].method_mask & (AP_METHOD_BIT << m)))
continue;
method_restricted = 1;
Index: modules/aaa/mod_auth_db.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/aaa/mod_auth_db.c,v
retrieving revision 1.29
diff -u -r1.29 mod_auth_db.c
--- modules/aaa/mod_auth_db.c 2001/05/30 10:22:18 1.29
+++ modules/aaa/mod_auth_db.c 2001/08/10 23:44:15
@@ -360,7 +360,7 @@
for (x = 0; x < reqs_arr->nelts; x++) {
- if (!(reqs[x].method_mask & (1 << m)))
+ if (!(reqs[x].method_mask & (AP_METHOD_BIT << m)))
continue;
t = reqs[x].requirement;
Index: modules/aaa/mod_auth_dbm.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/aaa/mod_auth_dbm.c,v
retrieving revision 1.34
diff -u -r1.34 mod_auth_dbm.c
--- modules/aaa/mod_auth_dbm.c 2001/05/30 10:22:19 1.34
+++ modules/aaa/mod_auth_dbm.c 2001/08/10 23:44:15
@@ -299,7 +299,7 @@
for (x = 0; x < reqs_arr->nelts; x++) {
- if (!(reqs[x].method_mask & (1 << m)))
+ if (!(reqs[x].method_mask & (AP_METHOD_BIT << m)))
continue;
t = reqs[x].requirement;
Index: modules/aaa/mod_auth_digest.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/aaa/mod_auth_digest.c,v
retrieving revision 1.48
diff -u -r1.48 mod_auth_digest.c
--- modules/aaa/mod_auth_digest.c 2001/05/22 01:31:03 1.48
+++ modules/aaa/mod_auth_digest.c 2001/08/10 23:44:15
@@ -1851,7 +1851,7 @@
for (x = 0; x < reqs_arr->nelts; x++) {
- if (!(reqs[x].method_mask & (1 << m)))
+ if (!(reqs[x].method_mask & (AP_METHOD_BIT << m)))
continue;
method_restricted = 1;
Index: modules/cache/mod_file_cache.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/cache/mod_file_cache.c,v
retrieving revision 1.61
diff -u -r1.61 mod_file_cache.c
--- modules/cache/mod_file_cache.c 2001/08/02 00:17:45 1.61
+++ modules/cache/mod_file_cache.c 2001/08/10 23:44:16
@@ -387,7 +387,7 @@
}
/* note that we would handle GET on this resource */
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
/* This handler has no use for a request body (yet), but we still
* need to read and discard it if the client sent one.
Index: modules/dav/main/mod_dav.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/dav/main/mod_dav.c,v
retrieving revision 1.58
diff -u -r1.58 mod_dav.c
--- modules/dav/main/mod_dav.c 2001/07/31 17:01:34 1.58
+++ modules/dav/main/mod_dav.c 2001/08/10 23:44:18
@@ -4466,28 +4466,28 @@
* These are the HTTP-defined methods that we handle directly.
*/
r->allowed = 0
- | (1 << M_GET)
- | (1 << M_PUT)
- | (1 << M_DELETE)
- | (1 << M_OPTIONS)
- | (1 << M_INVALID);
+ | (AP_METHOD_BIT << M_GET)
+ | (AP_METHOD_BIT << M_PUT)
+ | (AP_METHOD_BIT << M_DELETE)
+ | (AP_METHOD_BIT << M_OPTIONS)
+ | (AP_METHOD_BIT << M_INVALID);
/*
* These are the DAV methods we handle.
*/
r->allowed |= 0
- | (1 << M_COPY)
- | (1 << M_LOCK)
- | (1 << M_UNLOCK)
- | (1 << M_MKCOL)
- | (1 << M_MOVE)
- | (1 << M_PROPFIND)
- | (1 << M_PROPPATCH);
+ | (AP_METHOD_BIT << M_COPY)
+ | (AP_METHOD_BIT << M_LOCK)
+ | (AP_METHOD_BIT << M_UNLOCK)
+ | (AP_METHOD_BIT << M_MKCOL)
+ | (AP_METHOD_BIT << M_MOVE)
+ | (AP_METHOD_BIT << M_PROPFIND)
+ | (AP_METHOD_BIT << M_PROPPATCH);
/*
* These are methods that we don't handle directly, but let the
* server's default handler do for us as our agent.
*/
r->allowed |= 0
- | (1 << M_POST);
+ | (AP_METHOD_BIT << M_POST);
/* ### hrm. if we return HTTP_METHOD_NOT_ALLOWED, then an Allow header
* ### is sent; it will need the other allowed states; since the default
Index: modules/filters/mod_include.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/filters/mod_include.c,v
retrieving revision 1.120
diff -u -r1.120 mod_include.c
--- modules/filters/mod_include.c 2001/08/07 08:02:42 1.120
+++ modules/filters/mod_include.c 2001/08/10 23:44:21
@@ -2680,7 +2680,7 @@
if (!(ap_allow_options(r) & OPT_INCLUDES)) {
return ap_pass_brigade(f->next, b);
}
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET) {
return ap_pass_brigade(f->next, b);
}
Index: modules/generators/mod_asis.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_asis.c,v
retrieving revision 1.39
diff -u -r1.39 mod_asis.c
--- modules/generators/mod_asis.c 2001/07/27 19:58:15 1.39
+++ modules/generators/mod_asis.c 2001/08/10 23:44:21
@@ -79,7 +79,7 @@
if(strcmp(r->handler,ASIS_MAGIC_TYPE) && strcmp(r->handler,"send-as-is"))
return DECLINED;
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET)
return DECLINED;
if (r->finfo.filetype == 0) {
Index: modules/generators/mod_autoindex.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_autoindex.c,v
retrieving revision 1.82
diff -u -r1.82 mod_autoindex.c
--- modules/generators/mod_autoindex.c 2001/08/07 15:15:53 1.82
+++ modules/generators/mod_autoindex.c 2001/08/10 23:44:21
@@ -1994,7 +1994,7 @@
d = (autoindex_config_rec *) ap_get_module_config(r->per_dir_config,
&autoindex_module);
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET) {
return DECLINED;
}
Index: modules/generators/mod_cgi.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_cgi.c,v
retrieving revision 1.98
diff -u -r1.98 mod_cgi.c
--- modules/generators/mod_cgi.c 2001/08/06 18:41:31 1.98
+++ modules/generators/mod_cgi.c 2001/08/10 23:44:21
@@ -586,8 +586,8 @@
if (r->method_number == M_OPTIONS) {
/* 99 out of 100 CGI scripts, this is all they support */
- r->allowed |= (1 << M_GET);
- r->allowed |= (1 << M_POST);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_POST);
return DECLINED;
}
Index: modules/generators/mod_cgid.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_cgid.c,v
retrieving revision 1.91
diff -u -r1.91 mod_cgid.c
--- modules/generators/mod_cgid.c 2001/08/09 15:10:58 1.91
+++ modules/generators/mod_cgid.c 2001/08/10 23:44:21
@@ -857,8 +857,8 @@
if (r->method_number == M_OPTIONS) {
/* 99 out of 100 cgid scripts, this is all they support */
- r->allowed |= (1 << M_GET);
- r->allowed |= (1 << M_POST);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_POST);
return DECLINED;
}
Index: modules/generators/mod_info.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_info.c,v
retrieving revision 1.39
diff -u -r1.39 mod_info.c
--- modules/generators/mod_info.c 2001/07/28 00:46:49 1.39
+++ modules/generators/mod_info.c 2001/08/10 23:44:22
@@ -373,7 +373,7 @@
if (strcmp(r->handler, "server-info"))
return DECLINED;
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET)
return DECLINED;
Index: modules/generators/mod_status.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/generators/mod_status.c,v
retrieving revision 1.45
diff -u -r1.45 mod_status.c
--- modules/generators/mod_status.c 2001/07/31 06:22:32 1.45
+++ modules/generators/mod_status.c 2001/08/10 23:44:22
@@ -270,7 +270,7 @@
"Server status unavailable in inetd mode");
return HTTP_INTERNAL_SERVER_ERROR;
}
- r->allowed = (1 << M_GET);
+ r->allowed = (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET)
return DECLINED;
Index: modules/http/http_protocol.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/http/http_protocol.c,v
retrieving revision 1.352
diff -u -r1.352 http_protocol.c
--- modules/http/http_protocol.c 2001/08/10 18:35:08 1.352
+++ modules/http/http_protocol.c 2001/08/10 23:44:22
@@ -328,7 +328,7 @@
apr_pool_cleanup_null);
}
-AP_DECLARE(int) ap_method_register(apr_pool_t *p, char *methname)
+AP_DECLARE(int) ap_method_register(apr_pool_t *p, const char *methname)
{
int *newmethnum;
@@ -985,23 +985,23 @@
mask = r->allowed_methods->method_mask;
list = apr_pstrcat(r->pool,
- (mask & (1 << M_GET)) ? ", GET, HEAD" : "",
- (mask & (1 << M_POST)) ? ", POST" : "",
- (mask & (1 << M_PUT)) ? ", PUT" : "",
- (mask & (1 << M_DELETE)) ? ", DELETE" : "",
- (mask & (1 << M_CONNECT)) ? ", CONNECT" : "",
- (mask & (1 << M_OPTIONS)) ? ", OPTIONS" : "",
- (mask & (1 << M_PATCH)) ? ", PATCH" : "",
- (mask & (1 << M_PROPFIND)) ? ", PROPFIND" : "",
- (mask & (1 << M_PROPPATCH)) ? ", PROPPATCH" : "",
- (mask & (1 << M_MKCOL)) ? ", MKCOL" : "",
- (mask & (1 << M_COPY)) ? ", COPY" : "",
- (mask & (1 << M_MOVE)) ? ", MOVE" : "",
- (mask & (1 << M_LOCK)) ? ", LOCK" : "",
- (mask & (1 << M_UNLOCK)) ? ", UNLOCK" : "",
+ (mask & (AP_METHOD_BIT << M_GET)) ? ", GET, HEAD" : "",
+ (mask & (AP_METHOD_BIT << M_POST)) ? ", POST" : "",
+ (mask & (AP_METHOD_BIT << M_PUT)) ? ", PUT" : "",
+ (mask & (AP_METHOD_BIT << M_DELETE)) ? ", DELETE" : "",
+ (mask & (AP_METHOD_BIT << M_CONNECT)) ? ", CONNECT" : "",
+ (mask & (AP_METHOD_BIT << M_OPTIONS)) ? ", OPTIONS" : "",
+ (mask & (AP_METHOD_BIT << M_PATCH)) ? ", PATCH" : "",
+ (mask & (AP_METHOD_BIT << M_PROPFIND)) ? ", PROPFIND" : "",
+ (mask & (AP_METHOD_BIT << M_PROPPATCH)) ? ", PROPPATCH" : "",
+ (mask & (AP_METHOD_BIT << M_MKCOL)) ? ", MKCOL" : "",
+ (mask & (AP_METHOD_BIT << M_COPY)) ? ", COPY" : "",
+ (mask & (AP_METHOD_BIT << M_MOVE)) ? ", MOVE" : "",
+ (mask & (AP_METHOD_BIT << M_LOCK)) ? ", LOCK" : "",
+ (mask & (AP_METHOD_BIT << M_UNLOCK)) ? ", UNLOCK" : "",
", TRACE",
NULL);
- if ((mask & (1 << M_INVALID))
+ if ((mask & (AP_METHOD_BIT << M_INVALID))
&& (r->allowed_methods->method_list != NULL)
&& (r->allowed_methods->method_list->nelts != 0)) {
int i;
@@ -2089,7 +2089,7 @@
*/
methnum = ap_method_number_of(method);
if (methnum != M_INVALID) {
- return !!(l->method_mask & (1 << methnum));
+ return !!(l->method_mask & (AP_METHOD_BIT << methnum));
}
/*
* Otherwise, see if the method name is in the array or string names
@@ -2121,7 +2121,7 @@
* bitmask.
*/
methnum = ap_method_number_of(method);
- l->method_mask |= (1 << methnum);
+ l->method_mask |= (AP_METHOD_BIT << methnum);
if (methnum != M_INVALID) {
return;
}
@@ -2154,7 +2154,7 @@
* by a module, use the bitmask.
*/
methnum = ap_method_number_of(method);
- l->method_mask |= ~(1 << methnum);
+ l->method_mask |= ~(AP_METHOD_BIT << methnum);
if (methnum != M_INVALID) {
return;
}
Index: modules/mappers/mod_actions.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/mappers/mod_actions.c,v
retrieving revision 1.23
diff -u -r1.23 mod_actions.c
--- modules/mappers/mod_actions.c 2001/02/16 13:38:28 1.23
+++ modules/mappers/mod_actions.c 2001/08/10 23:44:23
@@ -172,7 +172,7 @@
/* Set allowed stuff */
for (i = 0; i < METHODS; ++i) {
if (conf->scripted[i])
- r->allowed |= (1 << i);
+ r->allowed |= (AP_METHOD_BIT << i);
}
/* First, check for the method-handling scripts */
Index: modules/test/mod_autoindex.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/test/mod_autoindex.c,v
retrieving revision 1.12
diff -u -r1.12 mod_autoindex.c
--- modules/test/mod_autoindex.c 2001/07/25 21:34:15 1.12
+++ modules/test/mod_autoindex.c 2001/08/10 23:44:31
@@ -1670,7 +1670,7 @@
d = (autoindex_config_rec *) ap_get_module_config(r->per_dir_config,
&autoindex_module);
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET) {
return DECLINED;
}
Index: modules/test/mod_rndchunk.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/test/mod_rndchunk.c,v
retrieving revision 1.7
diff -u -r1.7 mod_rndchunk.c
--- modules/test/mod_rndchunk.c 2001/02/28 15:24:08 1.7
+++ modules/test/mod_rndchunk.c 2001/08/10 23:44:31
@@ -100,7 +100,7 @@
char buf[MAX_SEGMENT + 1];
unsigned int len;
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET)
return DECLINED;
Index: modules/test/mod_test_util_uri.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/modules/test/mod_test_util_uri.c,v
retrieving revision 1.11
diff -u -r1.11 mod_test_util_uri.c
--- modules/test/mod_test_util_uri.c 2001/08/02 05:25:53 1.11
+++ modules/test/mod_test_util_uri.c 2001/08/10 23:44:31
@@ -265,7 +265,7 @@
unsigned total_failures;
int i;
- r->allowed |= (1 << M_GET);
+ r->allowed |= (AP_METHOD_BIT << M_GET);
if (r->method_number != M_GET)
return DECLINED;
Index: server/config.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/config.c,v
retrieving revision 1.132
diff -u -r1.132 config.c
--- server/config.c 2001/08/03 00:59:01 1.132
+++ server/config.c 2001/08/10 23:44:31
@@ -362,7 +362,7 @@
* added by a module and registered.
*/
if (methnum != M_INVALID) {
- return !!(cmd->limited & (1<<methnum));
+ return !!(cmd->limited & (AP_METHOD_BIT << methnum));
}
return 0; /* not found */
Index: server/core.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/core.c,v
retrieving revision 1.34
diff -u -r1.34 core.c
--- server/core.c 2001/08/07 16:19:03 1.34
+++ server/core.c 2001/08/10 23:44:32
@@ -1490,7 +1490,7 @@
*/
methnum = ap_method_register(cmd->pool, method);
}
- limited |= (1 << methnum);
+ limited |= (AP_METHOD_BIT << methnum);
}
/* Killing two features with one function,
Index: server/request.c
===================================================================
RCS file: /home/cvspublic/httpd-2.0/server/request.c,v
retrieving revision 1.22
diff -u -r1.22 request.c
--- server/request.c 2001/08/07 02:34:42 1.22
+++ server/request.c 2001/08/10 23:44:33
@@ -1280,7 +1280,7 @@
reqs = (require_line *) reqs_arr->elts;
for (i = 0; i < reqs_arr->nelts; ++i)
- if (reqs[i].method_mask & (1 << r->method_number))
+ if (reqs[i].method_mask & (AP_METHOD_BIT << r->method_number))
return 1;
return 0;