Commit a17ce7dd authored by Jim Jagielski's avatar Jim Jagielski
Browse files

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
parent d5406fe6
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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 <powerbsd yahoo.com>, Luca Toscano]

  *) mod_macro: fix usability of globally defined macros in .htaccess files.
     PR 57525.  [Jose Kahan <jose w3.org>, Yann Ylavic]

+6 −5
Original line number Diff line number Diff line
@@ -2404,15 +2404,16 @@ the server configuration files</description>
<contextlist><context>server config</context><context>virtual host</context>
<context>directory</context>
</contextlist>
<compatibility>Available in 2.3.6 and later</compatibility>
<compatibility>Available in 2.3.6 and later. Not existent file paths without wildcards
               do not cause SyntaxError after 2.4.30</compatibility>

<usage>
    <p>This directive allows inclusion of other configuration files
    from within the server configuration files. It works identically to the
    <directive module="core">Include</directive> directive, with the
    exception that if wildcards do not match any file or directory, the
    <directive module="core">IncludeOptional</directive> directive will be
    silently ignored instead of causing an error.</p>
    <directive module="core">Include</directive> 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.</p>
</usage>

<seealso><directive module="core">Include</directive></seealso>
+15 −0
Original line number Diff line number Diff line
@@ -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);
    }