martin 97/10/21 14:37:02
Modified: src/main http_core.c
Log:
When a <...> section (<Directory> / <Files> / <Location> / ... is not
closed properly when end-of-file is reached, an error message is returned
now.
Reviewed by: Martin +1, Brian +1, Dean +1
Revision Changes Path
1.127 +31 -2 apachen/src/main/http_core.c
Index: http_core.c
===================================================================
RCS file: /home/cvs/apachen/src/main/http_core.c,v
retrieving revision 1.126
retrieving revision 1.127
diff -u -r1.126 -r1.127
--- http_core.c 1997/10/21 21:33:08 1.126
+++ http_core.c 1997/10/21 21:37:01 1.127
@@ -310,7 +310,7 @@
return 1;
}
}
- /* Either their both special, or their both not special and have the
+ /* Either they're both special, or they're both not special and have the
* same number of components. In any event, we now have to compare
* the minor key. */
return a->orig_index - b->orig_index;
@@ -760,6 +760,24 @@
return NULL;
}
+/*
+ * When a section is not closed properly when end-of-file is reached,
+ * then an error message should be printed:
+ */
+static const char *missing_endsection (pool *p, const char *secname, int
nest)
+{
+ char rply[100];
+
+ if (nest < 2)
+ ap_snprintf(rply, sizeof rply, "Missing </%s> directive at end-of-file",
+ secname);
+ else
+ ap_snprintf(rply, sizeof rply, "%d missing </%s> directives at
end-of-file",
+ nest, secname);
+
+ return pstrdup(p, rply);
+}
+
/* We use this in <DirectoryMatch> and <FilesMatch>, to ensure that
* people don't get bitten by wrong-cased regex matches
*/
@@ -811,6 +829,9 @@
}
errmsg = srm_command_loop (cmd, new_dir_conf);
+ if (errmsg == NULL)
+ return missing_endsection(cmd->pool,
+ (cmd->info) ? "DirectoryMatch" : "Directory", 1);
if (errmsg != end_dir_magic) return errmsg;
conf = (core_dir_config *)get_module_config(new_dir_conf, &core_module);
@@ -862,6 +883,9 @@
}
errmsg = srm_command_loop (cmd, new_url_conf);
+ if (errmsg == NULL)
+ return missing_endsection(cmd->pool,
+ (cmd->info) ? "LocationMatch" : "Location", 1);
if (errmsg != end_url_magic) return errmsg;
conf = (core_dir_config *)get_module_config(new_url_conf, &core_module);
@@ -927,6 +951,9 @@
}
errmsg = srm_command_loop (cmd, new_file_conf);
+ if (errmsg == NULL)
+ return missing_endsection(cmd->pool,
+ (cmd->info) ? "FilesMatch" : "Files", 1);
if (errmsg != end_file_magic) return errmsg;
conf = (core_dir_config *)get_module_config(new_file_conf, &core_module);
@@ -973,7 +1000,7 @@
nest--;
}
- return NULL;
+ return (nest == 0) ? NULL : missing_endsection(cmd->pool, "IfModule",
nest);
}
/* httpd.conf commands... beginning with the <VirtualHost> business */
@@ -1019,6 +1046,8 @@
if (s->access_confname)
process_resource_config (s, s->access_confname, p, ptemp);
+ if (errmsg == NULL)
+ return missing_endsection(cmd->pool, "Virtualhost", 1);
if (errmsg == end_virthost_magic) return NULL;
return errmsg;
}