On Mon, May 08, 2006 at 10:12:58AM -0400, Jim Jagielski wrote:
> That is an unexpected and unwelcome regression.
Yep, my bad, I never had such a block in my testing largely because I
didn't even know 1.3.x had that feature, *sigh*, it's not even
documented and I can't see it in a changelog and it didn't have that
functionality when I first wrote that patch.
> If I had known about it I would have vetoed the patch. I'd be willing
> to actually release a 1.3.36 simply to address that.
Patch attached, courtesy of Matthijs van der Klip. Or simply revert the
whole change.
--
Colm MacCárthaigh Public Key: [EMAIL PROTECTED]
diff -Bru apache_1.3.35/src/main/http_config.c
apache_1.3.35-include/src/main/http_config.c
--- apache_1.3.35/src/main/http_config.c 2006-05-05 12:00:14.000000000
+0200
+++ apache_1.3.35-include/src/main/http_config.c 2006-05-05
12:00:39.000000000 +0200
@@ -1214,16 +1214,19 @@
return strcmp(f1->fname,f2->fname);
}
-CORE_EXPORT(void) ap_process_include_config(server_rec *s, char *fname, pool
*p, pool *ptemp,
+CORE_EXPORT(void) ap_process_include_config(server_rec *s, char *fname, pool
*p, pool *ptemp,
cmd_parms *parms)
{
const char *errmsg;
struct stat finfo;
-
+ int ispatt;
fname = ap_server_root_relative(p, fname);
- if (stat(fname, &finfo) == -1)
+ if (!(strcmp(fname, ap_server_root_relative(p, RESOURCE_CONFIG_FILE))) ||
+ !(strcmp(fname, ap_server_root_relative(p, ACCESS_CONFIG_FILE)))) {
+ if (stat(fname, &finfo) == -1)
return;
+ }
/*
* here we want to check if the candidate file is really a
@@ -1231,12 +1234,36 @@
* horrible loops). If so, let's recurse and toss it back into
* the function.
*/
- if (ap_is_rdirectory(fname)) {
+ ispatt = ap_is_fnmatch(fname);
+ if (ispatt || ap_is_rdirectory(fname)) {
DIR *dirp;
struct DIR_TYPE *dir_entry;
int current;
array_header *candidates = NULL;
fnames *fnew;
+ char *path = ap_pstrdup(p,fname);
+ char *pattern = NULL;
+
+ if(ispatt && (pattern = strrchr(path, '/')) != NULL) {
+ *pattern++ = '\0';
+ if (ap_is_fnmatch(path)) {
+ fprintf(stderr, "%s: wildcard patterns not allowed in Include "
+ "%s\n", ap_server_argv0, fname);
+ exit(1);
+ }
+
+ if (!ap_is_rdirectory(path)){
+ fprintf(stderr, "%s: Include directory '%s' not found",
+ ap_server_argv0, path);
+ exit(1);
+ }
+ if (!ap_is_fnmatch(pattern)) {
+ fprintf(stderr, "%s: must include a wildcard pattern "
+ "for Include %s\n", ap_server_argv0, fname);
+ exit(1);
+ }
+ }
+
/*
* first course of business is to grok all the directory
@@ -1244,11 +1271,15 @@
* for this.
*/
fprintf(stderr, "Processing config directory: %s\n", fname);
+#ifdef NETWARE
dirp = ap_popendir(p, fname);
+#else
+ dirp = ap_popendir(p, path);
+#endif
if (dirp == NULL) {
perror("fopen");
fprintf(stderr, "%s: could not open config directory %s\n",
- ap_server_argv0, fname);
+ ap_server_argv0, path);
#ifdef NETWARE
clean_parent_exit(1);
#else
@@ -1259,9 +1290,11 @@
while ((dir_entry = readdir(dirp)) != NULL) {
/* strip out '.' and '..' */
if (strcmp(dir_entry->d_name, ".") &&
- strcmp(dir_entry->d_name, "..")) {
+ strcmp(dir_entry->d_name, "..") &&
+ (!ispatt ||
+ !ap_fnmatch(pattern,dir_entry->d_name, FNM_PERIOD)) ) {
fnew = (fnames *) ap_push_array(candidates);
- fnew->fname = ap_make_full_path(p, fname, dir_entry->d_name);
+ fnew->fname = ap_make_full_path(p, path, dir_entry->d_name);
}
}
ap_pclosedir(p, dirp);