diff -ur httpd-2.2.0.org/server/config.c httpd-2.2.0/server/config.c --- httpd-2.2.0.org/server/config.c 2005-11-17 14:39:15.000000000 +0100 +++ httpd-2.2.0/server/config.c 2005-12-21 16:04:35.970963000 +0100 @@ -1537,6 +1537,7 @@ apr_dir_t *dirp; apr_finfo_t dirent; int current; + size_t slen; apr_array_header_t *candidates = NULL; fnames *fnew; char *path = apr_pstrdup(p, fname); @@ -1562,8 +1563,13 @@ candidates = apr_array_make(p, 1, sizeof(fnames)); while (apr_dir_read(&dirent, APR_FINFO_DIRENT, dirp) == APR_SUCCESS) { + slen = strlen(dirent.name); /* strip out '.' and '..' */ - if (strcmp(dirent.name, ".") + if (strcmp(dirent.name, ".") && (dirent.name)[slen-1] != '~' + && (dirent.name)[0] != '.' + && (slen < 8 || strcmp((dirent.name + slen - 7), ".rpmnew")) + && (slen < 9 || ( strcmp((dirent.name + slen - 8), ".rpmorig") + && strcmp((dirent.name + slen - 8), ".rpmsave"))) && strcmp(dirent.name, "..")) { fnew = (fnames *) apr_array_push(candidates); fnew->fname = ap_make_full_path(p, path, dirent.name);