Commit bb287806 authored by Nick Kew's avatar Nick Kew
Browse files

Core configuration: add AllowOverride option to treat syntax

errors in .htaccess as non-fatal.
PR 52439



git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1229021 13f79535-47bb-0310-9956-ffa450edef68
parent b97e12e0
Loading
Loading
Loading
Loading
+3 −0
Changes for CHANGES: 3 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -13,6 +13,9 @@ Changes with Apache 2.5.0

  *) error log hook: Pass ap_errorlog_info struct.  [Stefan Fritsch]

  *) Core configuration: add AllowOverride option to treat syntax
     errors in .htaccess as non-fatal.  PR 52439 [Nick Kew]

  [Apache 2.5.0-dev includes those bug fixes and changes with the
   Apache 2.4.xx tree as documented below, except as noted.]

+3 −2
Changes for include/ap_mmn.h: 3 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -383,14 +383,15 @@
 *                         ap_proxy_strmatch_path, ap_proxy_strmatch_domain,
 *                         ap_proxy_table_unmerge(), proxy_lb_workers.
 * 20111203.1 (2.5.0-dev)  Add ap_list_provider_groups()
 * 20120109.0 (2.5.0-dev)  Changes sizeof(overrides_t) in core config.
 */

#define MODULE_MAGIC_COOKIE 0x41503234UL /* "AP24" */

#ifndef MODULE_MAGIC_NUMBER_MAJOR
#define MODULE_MAGIC_NUMBER_MAJOR 20111203
#define MODULE_MAGIC_NUMBER_MAJOR 20120109
#endif
#define MODULE_MAGIC_NUMBER_MINOR 1                   /* 0...n */
#define MODULE_MAGIC_NUMBER_MINOR 0                   /* 0...n */

/**
 * Determine if the server's current MODULE_MAGIC_NUMBER is at least a
+7 −0
Changes for include/http_config.h: 7 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -242,6 +242,13 @@ struct command_struct {
#define EXEC_ON_READ 256     /**< force directive to execute a command
                which would modify the configuration (like including another
                file, or IFModule */
/* Flags to determine whether syntax errors in .htaccess should be
 * treated as nonfatal (log and ignore errors)
 */
#define NONFATAL_OVERRIDE 512    /* Violation of AllowOverride rule */
#define NONFATAL_UNKNOWN 1024    /* Unrecognised directive */
#define NONFATAL_ALL (NONFATAL_OVERRIDE|NONFATAL_UNKNOWN)

/** this directive can be placed anywhere */
#define OR_ALL (OR_LIMIT|OR_OPTIONS|OR_FILEINFO|OR_AUTHCFG|OR_INDEXES)

+1 −1
Changes for include/http_core.h: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -446,7 +446,7 @@ AP_DECLARE(void **) ap_get_request_note(request_rec *r, apr_size_t note_num);


typedef unsigned char allow_options_t;
typedef unsigned char overrides_t;
typedef unsigned int overrides_t;

/*
 * Bits of info that go into making an ETag for a file
+22 −2
Changes for server/config.c: 22 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -848,8 +848,19 @@ static const char *invoke_cmd(const command_rec *cmd, cmd_parms *parms,
         if(apr_table_get(parms->override_list, cmd->name) != NULL)
              override_list_ok = 1;

    if ((parms->override & cmd->req_override) == 0 && !override_list_ok)
        return apr_pstrcat(parms->pool, cmd->name, " not allowed here", NULL);
    if ((parms->override & cmd->req_override) == 0 && !override_list_ok) {
        if (parms->override & NONFATAL_OVERRIDE) {
            ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, parms->temp_pool,
                          APLOGNO(02295)
                          "%s in .htaccess forbidden by AllowOverride",
                          cmd->name);
            return NULL;
        }
        else {
            return apr_pstrcat(parms->pool, cmd->name,
                               " not allowed here", NULL);
        }
    }

    parms->info = cmd->cmd_data;
    parms->cmd = cmd;
@@ -1251,12 +1262,21 @@ static const char *ap_walk_config_sub(const ap_directive_t *current,

    if (ml == NULL) {
        parms->err_directive = current;
        if (parms->override & NONFATAL_UNKNOWN) {
            ap_log_perror(APLOG_MARK, APLOG_WARNING, 0, parms->temp_pool,
                          APLOGNO(02296) "Unknown directive %s "
                          "perhaps misspelled or defined by a module "
                          "not included in the server configuration", dir);
            return NULL;
        }
        else {
            return apr_pstrcat(parms->pool, "Invalid command '",
                               current->directive,
                               "', perhaps misspelled or defined by a module "
                               "not included in the server configuration",
                               NULL);
        }
    }

    for ( ; ml != NULL; ml = ml->next) {
        void *dir_config = ap_set_config_vectors(parms->server,
Loading