From a1926e67ef860210c033401e1a44a6e4c37bd5fd Mon Sep 17 00:00:00 2001 From: Jim Jagielski Date: Thu, 21 Dec 2017 18:50:38 +0000 Subject: [PATCH] Merge r1814968 from trunk: 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. Submitted by: elukey Reviewed by: elukey, jim, niq git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1818964 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES | 3 +++ docs/manual/mod/core.xml | 11 ++++++----- server/config.c | 15 +++++++++++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/CHANGES b/CHANGES index 3a0f27bafd..95a7dda78e 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,9 @@ Changes with Apache 2.4.30 the workers when the latter fails to add a connection to the pollset. [Yann Ylavic] + *) core: silently ignore a not existent file path when IncludeOptional + is used. PR 57585. [Alberto Murillo Silva , Luca Toscano] + *) mod_macro: fix usability of globally defined macros in .htaccess files. PR 57525. [Jose Kahan , Yann Ylavic] diff --git a/docs/manual/mod/core.xml b/docs/manual/mod/core.xml index a1c10e7718..24401d6ef4 100644 --- a/docs/manual/mod/core.xml +++ b/docs/manual/mod/core.xml @@ -2404,15 +2404,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 983c7dfae3..30bd6d66bd 100644 --- a/server/config.c +++ b/server/config.c @@ -1951,6 +1951,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); } @@ -2001,6 +2010,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); } -- 2.50.1