--- httpd/server/core.c 2016-06-14 01:08:08.000000000 +0200 +++ httpd/server/core.c 2016-08-02 14:18:51.295988751 +0200 @@ -1975,9 +1975,28 @@ } if ( (cmd->override_opts & opt) != opt ) { - return apr_pstrcat(cmd->pool, "Option ", w, " not allowed here", NULL); + if (cmd->override & NONFATAL_OVERRIDE) { + ap_log_error(APLOG_MARK, APLOG_WARNING, 0, cmd->server, "Option %s not allowed in line %d of %s.", + w, cmd->directive->line_num, cmd->directive->filename); + + /* special case for Options All, we might want to enable every possible (and allowed) parameter */ + if (opt != OPT_ALL) { + first = 0; + continue; + } else { + /* OPT_ALL doesnt include OPT_SYM_OWNER so its important to take this into account too */ + if (cmd->override & OPT_SYM_OWNER) { + opt = OPT_ALL & cmd->override; + } else { + opt = (OPT_ALL | OPT_SYM_OWNER) & cmd->override; + } + } + } else { + return apr_pstrcat(cmd->pool, "Option ", w, " not allowed here", NULL); + } } - else if (action == '-') { + + if (action == '-') { /* we ensure the invariant (d->opts_add & d->opts_remove) == 0 */ d->opts_remove |= opt; d->opts_add &= ~opt;