martin 98/02/20 02:51:36
Modified: . STATUS
src CHANGES
src/include http_config.h
src/main http_core.c
Log:
The check_cmd_context() function is now globally usable (Ken's suggestion)
Revision Changes Path
1.159 +0 -4 apache-1.3/STATUS
Index: STATUS
===================================================================
RCS file: /home/cvs/apache-1.3/STATUS,v
retrieving revision 1.158
retrieving revision 1.159
diff -u -u -r1.158 -r1.159
--- STATUS 1998/02/18 22:41:49 1.158
+++ STATUS 1998/02/20 10:51:29 1.159
@@ -153,10 +153,6 @@
appropriate environment. Marc and Alexei don't see any
big deal. Martin says that not every "env" has a -u flag.
- * Ken suggests that new check_cmd_context() and related defines
- should be non-static and in util_* so modules can use 'em. (He
- didn't notice this flaw during the review.)
-
* 206 vs. 200 issue on Content-Length
See <[EMAIL PROTECTED]>
Roy says current behavior is correct, but Alexei disagrees.
1.642 +3 -0 apache-1.3/src/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apache-1.3/src/CHANGES,v
retrieving revision 1.641
retrieving revision 1.642
diff -u -u -r1.641 -r1.642
--- CHANGES 1998/02/20 10:44:32 1.641
+++ CHANGES 1998/02/20 10:51:30 1.642
@@ -1,5 +1,8 @@
Changes with Apache 1.3b6
+ *) As Ken suggested the check_cmd_context() function and related defines
+ are non-static now so modules can use 'em. [Martin Kraemer]
+
*) mod_info would occasionally produce an unpaired <tt> in its
output. Fixed. [Martin Kraemer]
1.68 +13 -0 apache-1.3/src/include/http_config.h
Index: http_config.h
===================================================================
RCS file: /home/cvs/apache-1.3/src/include/http_config.h,v
retrieving revision 1.67
retrieving revision 1.68
diff -u -u -r1.67 -r1.68
--- http_config.h 1998/02/18 10:01:10 1.67
+++ http_config.h 1998/02/20 10:51:33 1.68
@@ -328,6 +328,19 @@
server_rec *main_server, server_rec **);
void process_resource_config(server_rec *s, char *fname, pool *p, pool
*ptemp);
+/* check_cmd_context() definitions: */
+extern const char *check_cmd_context(cmd_parms *cmd, unsigned forbidden);
+
+/* check_cmd_context(): Forbidden in: */
+#define NOT_IN_VIRTUALHOST 0x01 /* <Virtualhost> */
+#define NOT_IN_LIMIT 0x02 /* <Limit> */
+#define NOT_IN_DIRECTORY 0x04 /* <Directory> */
+#define NOT_IN_LOCATION 0x08 /* <Location> */
+#define NOT_IN_FILES 0x10 /* <Files> */
+#define NOT_IN_DIR_LOC_FILE
(NOT_IN_DIRECTORY|NOT_IN_LOCATION|NOT_IN_FILES) /*
<Directory>/<Location>/<Files>*/
+#define GLOBAL_ONLY
(NOT_IN_VIRTUALHOST|NOT_IN_LIMIT|NOT_IN_DIR_LOC_FILE)
+
+
/* Module-method dispatchers, also for http_request.c */
int translate_name(request_rec *);
1.161 +17 -13 apache-1.3/src/main/http_core.c
Index: http_core.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/main/http_core.c,v
retrieving revision 1.160
retrieving revision 1.161
diff -u -u -r1.160 -r1.161
--- http_core.c 1998/02/20 07:15:46 1.160
+++ http_core.c 1998/02/20 10:51:34 1.161
@@ -652,15 +652,8 @@
static const char end_virtualhost_section[] = "</VirtualHost>";
static const char end_ifmodule_section[] = "</IfModule>";
-/* check_cmd_context(): Forbidden in: */
-#define NOT_IN_VIRTUALHOST 0x01U /* <Virtualhost> */
-#define NOT_IN_LIMIT 0x02U /* <Limit> */
-#define NOT_IN_DIR_LOC_FILE 0x04U /* <Directory>/<Location>/<Files>*/
-#define NOT_IN_LOC 0x08U /* <Location> */
-#define GLOBAL_ONLY
(NOT_IN_VIRTUALHOST|NOT_IN_LIMIT|NOT_IN_DIR_LOC_FILE)
-
-static const char *check_cmd_context(cmd_parms *cmd, unsigned forbidden)
+const char *check_cmd_context(cmd_parms *cmd, unsigned forbidden)
{
const char *gt = (cmd->cmd->name[0] == '<'
&& cmd->cmd->name[strlen(cmd->cmd->name)-1] != '>') ? ">" :
"";
@@ -673,14 +666,20 @@
return pstrcat(cmd->pool, cmd->cmd->name, gt,
" cannot occur within <Limit> section", NULL);
- if ((forbidden & NOT_IN_DIR_LOC_FILE) && cmd->path != NULL)
+ if ((forbidden & NOT_IN_DIR_LOC_FILE) == NOT_IN_DIR_LOC_FILE &&
cmd->path != NULL)
return pstrcat(cmd->pool, cmd->cmd->name, gt,
" cannot occur within <Directory/Location/Files>
section", NULL);
- if ((forbidden & NOT_IN_LOC) && (cmd->end_token == end_location_section
- || cmd->end_token == end_locationmatch_section))
+ if (((forbidden & NOT_IN_DIRECTORY) && (cmd->end_token ==
end_directory_section
+ || cmd->end_token == end_directorymatch_section)) ||
+ ((forbidden & NOT_IN_LOCATION) && (cmd->end_token ==
end_location_section
+ || cmd->end_token == end_locationmatch_section)) ||
+ ((forbidden & NOT_IN_FILES) && (cmd->end_token == end_files_section
+ || cmd->end_token == end_filesmatch_section)))
+
return pstrcat(cmd->pool, cmd->cmd->name, gt,
- " cannot occur within <Location> section", NULL);
+ " cannot occur within <", cmd->end_token+2,
+ " section", NULL);
return NULL;
}
@@ -1085,7 +1084,7 @@
void *new_file_conf = create_per_dir_config (cmd->pool);
- const char *err = check_cmd_context(cmd, NOT_IN_LIMIT | NOT_IN_LOC);
+ const char *err = check_cmd_context(cmd, NOT_IN_LIMIT | NOT_IN_LOCATION);
if (err != NULL) return err;
if (endp) *endp = '\0';
@@ -1134,6 +1133,11 @@
return NULL;
}
+/* XXX: NB: Currently, we have no way of checking
+ * whether <IfModule> sections are closed properly.
+ * Extra (redundant, unpaired) </IfModule> directives are
+ * simply silently ignored.
+ */
const char *end_ifmod (cmd_parms *cmd, void *dummy) {
return NULL;
}