From: Luca Toscano
Date: Sat, 11 Nov 2017 19:20:01 +0000 (+0000)
Subject: core: silently ignore a not existent file path when IncludeOptional
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e36e2ce21d17127fbbc7f83ec0c1b60a492cc20b;p=apache
core: silently ignore a not existent file path when IncludeOptional
is used.
In https://bz.apache.org/bugzilla/show_bug.cgi?id=57585 some use cases
were reported in which IncludeOptional seems to be too strict in its
sanity checks.
This change is a proposal to relax IncludeOptional checks to silently
fail when a file path is not existent rather than returning SyntaxError.
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1814968 13f79535-47bb-0310-9956-ffa450edef68
---
diff --git a/CHANGES b/CHANGES
index 04b22ba73b..657d4ce107 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,9 @@
-*- coding: utf-8 -*-
Changes with Apache 2.5.1
+ *) core: silently ignore a not existent file path when IncludeOptional
+ is used. PR 57585. [Alberto Murillo Silva , Luca Toscano]
+
*) mod_noloris: complete build setup. [Rainer Jung]
*) mod_md: fix static compilation. [Rainer Jung]
diff --git a/docs/manual/mod/core.xml b/docs/manual/mod/core.xml
index cb64b285a6..75b2bb5ce6 100644
--- a/docs/manual/mod/core.xml
+++ b/docs/manual/mod/core.xml
@@ -2580,15 +2580,16 @@ the server configuration files
server configvirtual host
directory
-Available in 2.3.6 and later
+Available in 2.3.6 and later. Not existent file paths without wildcards
+ do not cause SyntaxError after 2.4.30
This directive allows inclusion of other configuration files
from within the server configuration files. It works identically to the
- Include directive, with the
- exception that if wildcards do not match any file or directory, the
- IncludeOptional directive will be
- silently ignored instead of causing an error.
+ Include directive, but it will be
+ silently ignored (instead of causing an error) if wildcards are used and
+ they do not match any file or directory or if a file path does not exist
+ on the file system.
Include
diff --git a/server/config.c b/server/config.c
index 8e30341a6d..27881edd85 100644
--- a/server/config.c
+++ b/server/config.c
@@ -1971,6 +1971,15 @@ static const char *process_resource_config_nofnmatch(server_rec *s,
return NULL;
}
+ else if (optional) {
+ /* If the optinal flag is set (like for IncludeOptional) we can
+ * tolerate that no file or directory is present and bail out.
+ */
+ apr_finfo_t finfo;
+ if (apr_stat(&finfo, fname, APR_FINFO_TYPE, ptemp) != APR_SUCCESS
+ || finfo.filetype == APR_NOFILE)
+ return NULL;
+ }
return ap_process_resource_config(s, fname, conftree, p, ptemp);
}
@@ -2021,6 +2030,12 @@ static const char *process_resource_config_fnmatch(server_rec *s,
*/
rv = apr_dir_open(&dirp, path, ptemp);
if (rv != APR_SUCCESS) {
+ /* If the directory doesn't exist and the optional flag is set
+ * there is no need to return an error.
+ */
+ if (rv == APR_ENOENT && optional) {
+ return NULL;
+ }
return apr_psprintf(p, "Could not open config directory %s: %pm",
path, &rv);
}