return strcmp(f1->fname,f2->fname);
}
-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;
-
- fname = ap_server_root_relative(p, fname);
-
- if (stat(fname, &finfo) == -1)
- return;
-
- /*
- * here we want to check if the candidate file is really a
- * directory, and most definitely NOT a symlink (to prevent
- * horrible loops). If so, let's recurse and toss it back into
- * the function.
- */
- if (ap_is_rdirectory(fname)) {
- DIR *dirp;
- struct DIR_TYPE *dir_entry;
- int current;
- array_header *candidates = NULL;
- fnames *fnew;
-
- /*
- * first course of business is to grok all the directory
- * entries here and store 'em away. Recall we need full pathnames
- * for this.
- */
- fprintf(stderr, "Processing config directory: %s\n", fname);
- dirp = ap_popendir(p, fname);
- if (dirp == NULL) {
- perror("fopen");
- fprintf(stderr, "%s: could not open config directory %s\n",
- ap_server_argv0, fname);
-#ifdef NETWARE
- clean_parent_exit(1);
-#else
- exit(1);
-#endif
- }
- candidates = ap_make_array(p, 1, sizeof(fnames));
- while ((dir_entry = readdir(dirp)) != NULL) {
- /* strip out '.' and '..' */
- if (strcmp(dir_entry->d_name, ".") &&
- strcmp(dir_entry->d_name, "..")) {
- fnew = (fnames *) ap_push_array(candidates);
- fnew->fname = ap_make_full_path(p, fname, dir_entry->d_name);
- }
- }
- ap_pclosedir(p, dirp);
- if (candidates->nelts != 0) {
- qsort((void *) candidates->elts, candidates->nelts,
- sizeof(fnames), fname_alphasort);
- /*
- * Now recurse these... we handle errors and subdirectories
- * via the recursion, which is nice
- */
- for (current = 0; current < candidates->nelts; ++current) {
- fnew = &((fnames *) candidates->elts)[current];
- fprintf(stderr, " Processing config file: %s\n", fnew->fname);
- ap_process_resource_config(s, fnew->fname, p, ptemp);
- }
- }
- return;
- }
-
- if (!(parms->config_file = ap_pcfg_openfile(p,fname))) {
- perror("fopen");
- fprintf(stderr, "%s: could not open document config file %s\n",
- ap_server_argv0, fname);
-#ifdef NETWARE
- clean_parent_exit(1);
-#else
- exit(1);
-#endif
- }
-
- errmsg = ap_srm_command_loop(parms, s->lookup_defaults);
-
- if (errmsg) {
- fprintf(stderr, "Syntax error on line %d of %s:\n",
- parms->config_file->line_number, parms->config_file->name);
- fprintf(stderr, "%s\n", errmsg);
-#ifdef NETWARE
- clean_parent_exit(1);
-#else
- exit(1);
-#endif
- }
-
- ap_cfg_closefile(parms->config_file);
-}
-
-
CORE_EXPORT(void) ap_process_resource_config(server_rec *s, char *fname, pool *p, pool *ptemp)
{
const char *errmsg;