diff --git a/CHANGES b/CHANGES index ff28410f54e22cb830fcc5196e02a3ee9123c514..daf96b42515db7d706bb8ec5fbdb3c6700b9b9eb 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,9 @@ Changes with Apache 2.4.17 *) mod_h2: added donated http/2 implementation to build system. Similar configuration options to mod_ssl. [Stefan Eissing] + *) mod_autoindex: Allow autoindexes when neither mod_dir nor mod_mime are + loaded. [Eric Covener] + *) mod_rewrite: Allow cookies set by mod_rewrite to contain ':' by accepting ';' as an alternate separator. PR47241. [<bugzilla schermesser com>, Eric Covener] diff --git a/STATUS b/STATUS index b003ce813a64c0b50a6f36a9b85f7f00e510e73f..07b1ecf7524213c0395b99f4189d4b9fa6f457b7 100644 --- a/STATUS +++ b/STATUS @@ -110,7 +110,6 @@ PATCHES ACCEPTED TO BACKPORT FROM TRUNK: [ start all new proposals below, under PATCHES PROPOSED. ] - PATCHES PROPOSED TO BACKPORT FROM TRUNK: [ New proposals should be added at the end of the list ] @@ -233,7 +232,7 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK: PR 57785 trunk: http://svn.apache.org/viewvc?view=revision&revision=1677702 2.4.x: trunk patch applies. - +1: niq + +1: niq, jim *) core/mod_ssl: add Protocols/ProtocolsHonorOrder directives and new protocols hooks to control Upgrade: and ALPN protocol switching. @@ -270,16 +269,20 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK: +1: icing, jim - *) mod_rewrite: Fix an harmless error spotted by sparse. - trunk: http://svn.apache.org/r1701545 - 2.4.x: http://people.apache.org/~jailletc36/backport_2.4_r1701545.diff - +1: jailletc36, ylavic - - - *) mod_autoindex: Allow autoindexes to work without mod_dir or mod_mime - trunk: http://svn.apache.org/r1701436 - 2.4.x: trunk works - +1: covener + *) mod_slotmem_shm: Fix slots/SHM files names on restart for systems that + can't create new (clear) slots while previous children gracefully stopping + still use the old ones (e.g. Windows, OS2). PR 58024. + trunk patch: http://svn.apache.org/r1702450 + http://svn.apache.org/r1702473 + http://svn.apache.org/r1702501 + http://svn.apache.org/r1702955 + http://svn.apache.org/r1703149 + http://svn.apache.org/r1703157 + http://svn.apache.org/r1703169 + http://svn.apache.org/r1703200 + 2.4.x patch: trunk works (module CHANGES) + merge patch: http://people.apache.org/~ylavic/httpd-2.4.x-mod_slotmem_shm-generation.patch + +1: ylavic, jim PATCHES/ISSUES THAT ARE BEING WORKED diff --git a/modules/dav/main/mod_dav.c b/modules/dav/main/mod_dav.c index 2319549a42932b8c80668415d43eea98a737004c..cd45ef940d73117b56dc9371e0c3cf16742768c8 100644 --- a/modules/dav/main/mod_dav.c +++ b/modules/dav/main/mod_dav.c @@ -254,7 +254,7 @@ static const char *dav_cmd_dav(cmd_parms *cmd, void *config, const char *arg1) conf->provider = NULL; } else { - conf->provider_name = apr_pstrdup(cmd->pool, arg1); + conf->provider_name = arg1; } if (conf->provider_name != NULL) { diff --git a/modules/dav/main/util.c b/modules/dav/main/util.c index 3d4b1ec3d85b7c0b1fb684c5085b313d8ff0bd50..8d4f64a2bd33b07e63427e5af2965e7f9ff54216 100644 --- a/modules/dav/main/util.c +++ b/modules/dav/main/util.c @@ -1823,10 +1823,11 @@ DAV_DECLARE(void) dav_add_vary_header(request_rec *in_req, * so only do this check if there is a versioning provider */ if (vsn_hooks != NULL) { const char *target = apr_table_get(in_req->headers_in, DAV_LABEL_HDR); - const char *vary = apr_table_get(out_req->headers_out, "Vary"); /* If Target-Selector specified, add it to the Vary header */ if (target != NULL) { + const char *vary = apr_table_get(out_req->headers_out, "Vary"); + if (vary == NULL) vary = DAV_LABEL_HDR; else diff --git a/modules/filters/mod_deflate.c b/modules/filters/mod_deflate.c index 0b38e9a3f14967b88d30c2a51806f0d69baf5b60..60a136c0ac9dab41d575e5eb035b96f5b0ab94fc 100644 --- a/modules/filters/mod_deflate.c +++ b/modules/filters/mod_deflate.c @@ -62,9 +62,9 @@ typedef struct deflate_filter_config_t int memlevel; int compressionlevel; apr_size_t bufferSize; - char *note_ratio_name; - char *note_input_name; - char *note_output_name; + const char *note_ratio_name; + const char *note_input_name; + const char *note_output_name; } deflate_filter_config; typedef struct deflate_dirconf_t { @@ -261,16 +261,16 @@ static const char *deflate_set_note(cmd_parms *cmd, void *dummy, &deflate_module); if (arg2 == NULL) { - c->note_ratio_name = apr_pstrdup(cmd->pool, arg1); + c->note_ratio_name = arg1; } else if (!strcasecmp(arg1, "ratio")) { - c->note_ratio_name = apr_pstrdup(cmd->pool, arg2); + c->note_ratio_name = arg2; } else if (!strcasecmp(arg1, "input")) { - c->note_input_name = apr_pstrdup(cmd->pool, arg2); + c->note_input_name = arg2; } else if (!strcasecmp(arg1, "output")) { - c->note_output_name = apr_pstrdup(cmd->pool, arg2); + c->note_output_name = arg2; } else { return apr_psprintf(cmd->pool, "Unknown note type %s", arg1); diff --git a/modules/generators/mod_autoindex.c b/modules/generators/mod_autoindex.c index 043a7af7367fb571c9ae512ac441c320ded33375..8f8cc8e2e66b8a8a77df8971ca76ab170fdfca05 100644 --- a/modules/generators/mod_autoindex.c +++ b/modules/generators/mod_autoindex.c @@ -2274,7 +2274,10 @@ static int handle_autoindex(request_rec *r) autoindex_config_rec *d; int allow_opts; - if(strcmp(r->handler,DIR_MAGIC_TYPE)) { + if (strcmp(r->handler,DIR_MAGIC_TYPE) && !AP_IS_DEFAULT_HANDLER_NAME(r->handler)) { + return DECLINED; + } + if (r->finfo.filetype != APR_DIR) { return DECLINED; } diff --git a/modules/lua/config.m4 b/modules/lua/config.m4 index c9567ef0472512d2a4cc46ab01e65e213f96586a..4c7dd2329aa4818c4843774769ca5660f353ab88 100644 --- a/modules/lua/config.m4 +++ b/modules/lua/config.m4 @@ -1,7 +1,7 @@ APACHE_MODPATH_INIT(lua) -dnl Check for Lua 5.1 Libraries +dnl Check for Lua 5.1/5.2 Libraries dnl CHECK_LUA(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) dnl Sets: dnl LUA_CFLAGS @@ -48,6 +48,26 @@ for x in $test_paths ; do break ]) else + AC_MSG_CHECKING([for lua.h in ${x}/include/lua-5.1]) + if test -f ${x}/include/lua-5.1/lua.h; then + AC_MSG_RESULT([yes]) + save_CFLAGS=$CFLAGS + save_LDFLAGS=$LDFLAGS + CFLAGS="$CFLAGS" + LDFLAGS="-L$x/lib/lua-5.1 $LDFLAGS $lib_m" + AC_CHECK_LIB(lua-5.1, luaL_newstate, [ + LUA_LIBS="-L$x/lib/lua-5.1 -llua-5.1 $lib_m" + if test "x$ap_platform_runtime_link_flag" != "x"; then + APR_ADDTO(LUA_LIBS, [$ap_platform_runtime_link_flag$x/lib/lua-5.1]) + fi + LUA_CFLAGS="-I$x/include/lua-5.1" + ]) + CFLAGS=$save_CFLAGS + LDFLAGS=$save_LDFLAGS + break + else + AC_MSG_RESULT([no]) + fi AC_MSG_CHECKING([for lua.h in ${x}/include/lua5.1]) if test -f ${x}/include/lua5.1/lua.h; then AC_MSG_RESULT([yes]) @@ -88,6 +108,29 @@ for x in $test_paths ; do else AC_MSG_RESULT([no]) fi +# +# Shouldn't we look for 5.2 first?? +# + AC_MSG_CHECKING([for lua.h in ${x}/include/lua-5.2]) + if test -f ${x}/include/lua-5.2/lua.h; then + AC_MSG_RESULT([yes]) + save_CFLAGS=$CFLAGS + save_LDFLAGS=$LDFLAGS + CFLAGS="$CFLAGS" + LDFLAGS="-L$x/lib/lua-5.2 $LDFLAGS $lib_m" + AC_CHECK_LIB(lua-5.2, luaL_newstate, [ + LUA_LIBS="-L$x/lib/lua-5.2 -llua-5.2 $lib_m" + if test "x$ap_platform_runtime_link_flag" != "x"; then + APR_ADDTO(LUA_LIBS, [$ap_platform_runtime_link_flag$x/lib/lua-5.2]) + fi + LUA_CFLAGS="-I$x/include/lua-5.2" + ]) + CFLAGS=$save_CFLAGS + LDFLAGS=$save_LDFLAGS + break + else + AC_MSG_RESULT([no]) + fi AC_MSG_CHECKING([for lua.h in ${x}/include/lua5.2]) if test -f ${x}/include/lua5.2/lua.h; then AC_MSG_RESULT([yes]) @@ -155,13 +198,13 @@ AC_SUBST(LUA_LIBS) AC_SUBST(LUA_CFLAGS) if test -z "${LUA_LIBS}"; then - AC_MSG_WARN([*** Lua 5.1 library not found.]) + AC_MSG_WARN([*** Lua 5.1 or 5.2 library not found.]) ifelse([$2], , enable_lua="no" if test -z "${lua_path}"; then - AC_MSG_WARN([Lua 5.1 library is required]) + AC_MSG_WARN([Lua 5.1 or 5.2 library is required]) else - AC_MSG_ERROR([Lua 5.1 library is required]) + AC_MSG_ERROR([Lua 5.1 or 5.2 library is required]) fi, $2) else diff --git a/modules/mappers/mod_negotiation.c b/modules/mappers/mod_negotiation.c index 2ef3838708df5e426443fbe84df1ac7c1266a2e6..77f27cc6bd8960836cf9b65af4b92af98e5788fa 100644 --- a/modules/mappers/mod_negotiation.c +++ b/modules/mappers/mod_negotiation.c @@ -828,33 +828,27 @@ static apr_off_t get_body(char *buffer, apr_size_t *len, const char *tag, apr_file_t *map) { char *endbody; - int bodylen; - int taglen; + apr_size_t bodylen; apr_off_t pos; - taglen = strlen(tag); - *len -= taglen; /* We are at the first character following a body:tag\n entry * Suck in the body, then backspace to the first char after the * closing tag entry. If we fail to read, find the tag or back * up then we have a hosed file, so give up already */ + --*len; /* Reserve space for '\0' */ if (apr_file_read(map, buffer, len) != APR_SUCCESS) { return -1; } + buffer[*len] = '\0'; - /* put a copy of the tag *after* the data read from the file - * so that strstr() will find something with no reliance on - * terminating '\0' - */ - memcpy(buffer + *len, tag, taglen); - endbody = strstr(buffer, tag); - if (endbody == buffer + *len) { + endbody = ap_strstr(buffer, tag); + if (!endbody) { return -1; } bodylen = endbody - buffer; - endbody += taglen; + endbody += strlen(tag); /* Skip all the trailing cruft after the end tag to the next line */ while (*endbody) { if (*endbody == '\n') { diff --git a/modules/mappers/mod_rewrite.c b/modules/mappers/mod_rewrite.c index a73263cbad5d9de6d44df5cf59411d463c9bbaca..8156a7d769158f2e07d40fb9a83c11e8d346347a 100644 --- a/modules/mappers/mod_rewrite.c +++ b/modules/mappers/mod_rewrite.c @@ -142,60 +142,60 @@ static const char* really_last_key = "rewrite_really_last"; #define REDIRECT_ENVVAR_SCRIPT_URL "REDIRECT_" ENVVAR_SCRIPT_URL #define ENVVAR_SCRIPT_URI "SCRIPT_URI" -#define CONDFLAG_NONE 1<<0 -#define CONDFLAG_NOCASE 1<<1 -#define CONDFLAG_NOTMATCH 1<<2 -#define CONDFLAG_ORNEXT 1<<3 -#define CONDFLAG_NOVARY 1<<4 - -#define RULEFLAG_NONE 1<<0 -#define RULEFLAG_FORCEREDIRECT 1<<1 -#define RULEFLAG_LASTRULE 1<<2 -#define RULEFLAG_NEWROUND 1<<3 -#define RULEFLAG_CHAIN 1<<4 -#define RULEFLAG_IGNOREONSUBREQ 1<<5 -#define RULEFLAG_NOTMATCH 1<<6 -#define RULEFLAG_PROXY 1<<7 -#define RULEFLAG_PASSTHROUGH 1<<8 -#define RULEFLAG_QSAPPEND 1<<9 -#define RULEFLAG_NOCASE 1<<10 -#define RULEFLAG_NOESCAPE 1<<11 -#define RULEFLAG_NOSUB 1<<12 -#define RULEFLAG_STATUS 1<<13 -#define RULEFLAG_ESCAPEBACKREF 1<<14 -#define RULEFLAG_DISCARDPATHINFO 1<<15 -#define RULEFLAG_QSDISCARD 1<<16 -#define RULEFLAG_END 1<<17 +#define CONDFLAG_NONE (1<<0) +#define CONDFLAG_NOCASE (1<<1) +#define CONDFLAG_NOTMATCH (1<<2) +#define CONDFLAG_ORNEXT (1<<3) +#define CONDFLAG_NOVARY (1<<4) + +#define RULEFLAG_NONE (1<<0) +#define RULEFLAG_FORCEREDIRECT (1<<1) +#define RULEFLAG_LASTRULE (1<<2) +#define RULEFLAG_NEWROUND (1<<3) +#define RULEFLAG_CHAIN (1<<4) +#define RULEFLAG_IGNOREONSUBREQ (1<<5) +#define RULEFLAG_NOTMATCH (1<<6) +#define RULEFLAG_PROXY (1<<7) +#define RULEFLAG_PASSTHROUGH (1<<8) +#define RULEFLAG_QSAPPEND (1<<9) +#define RULEFLAG_NOCASE (1<<10) +#define RULEFLAG_NOESCAPE (1<<11) +#define RULEFLAG_NOSUB (1<<12) +#define RULEFLAG_STATUS (1<<13) +#define RULEFLAG_ESCAPEBACKREF (1<<14) +#define RULEFLAG_DISCARDPATHINFO (1<<15) +#define RULEFLAG_QSDISCARD (1<<16) +#define RULEFLAG_END (1<<17) /* return code of the rewrite rule * the result may be escaped - or not */ -#define ACTION_NORMAL 1<<0 -#define ACTION_NOESCAPE 1<<1 -#define ACTION_STATUS 1<<2 - - -#define MAPTYPE_TXT 1<<0 -#define MAPTYPE_DBM 1<<1 -#define MAPTYPE_PRG 1<<2 -#define MAPTYPE_INT 1<<3 -#define MAPTYPE_RND 1<<4 -#define MAPTYPE_DBD 1<<5 -#define MAPTYPE_DBD_CACHE 1<<6 - -#define ENGINE_DISABLED 1<<0 -#define ENGINE_ENABLED 1<<1 - -#define OPTION_NONE 1<<0 -#define OPTION_INHERIT 1<<1 -#define OPTION_INHERIT_BEFORE 1<<2 -#define OPTION_NOSLASH 1<<3 -#define OPTION_ANYURI 1<<4 -#define OPTION_MERGEBASE 1<<5 -#define OPTION_INHERIT_DOWN 1<<6 -#define OPTION_INHERIT_DOWN_BEFORE 1<<7 -#define OPTION_IGNORE_INHERIT 1<<8 -#define OPTION_IGNORE_CONTEXT_INFO 1<<9 +#define ACTION_NORMAL (1<<0) +#define ACTION_NOESCAPE (1<<1) +#define ACTION_STATUS (1<<2) + + +#define MAPTYPE_TXT (1<<0) +#define MAPTYPE_DBM (1<<1) +#define MAPTYPE_PRG (1<<2) +#define MAPTYPE_INT (1<<3) +#define MAPTYPE_RND (1<<4) +#define MAPTYPE_DBD (1<<5) +#define MAPTYPE_DBD_CACHE (1<<6) + +#define ENGINE_DISABLED (1<<0) +#define ENGINE_ENABLED (1<<1) + +#define OPTION_NONE (1<<0) +#define OPTION_INHERIT (1<<1) +#define OPTION_INHERIT_BEFORE (1<<2) +#define OPTION_NOSLASH (1<<3) +#define OPTION_ANYURI (1<<4) +#define OPTION_MERGEBASE (1<<5) +#define OPTION_INHERIT_DOWN (1<<6) +#define OPTION_INHERIT_DOWN_BEFORE (1<<7) +#define OPTION_IGNORE_INHERIT (1<<8) +#define OPTION_IGNORE_CONTEXT_INFO (1<<9) #ifndef RAND_MAX #define RAND_MAX 32767 diff --git a/modules/proxy/mod_proxy_http.c b/modules/proxy/mod_proxy_http.c index ddb8a12e676a897cbd80ed52334e15f0a52e03d7..5e95ea2fa0e5192ad3d2f296034244781169588b 100644 --- a/modules/proxy/mod_proxy_http.c +++ b/modules/proxy/mod_proxy_http.c @@ -951,7 +951,7 @@ skip_body: break; default: /* shouldn't be possible */ - rv = HTTP_INTERNAL_SERVER_ERROR ; + rv = HTTP_INTERNAL_SERVER_ERROR; break; } @@ -1117,7 +1117,7 @@ static void ap_proxy_read_headers(request_rec *r, request_rec *rr, if (psc->badopt == bad_error) { /* Nope, it wasn't even an extra HTTP header. Give up. */ r->headers_out = NULL; - return ; + return; } else if (psc->badopt == bad_body) { /* if we've already started loading headers_out, then @@ -1131,12 +1131,12 @@ static void ap_proxy_read_headers(request_rec *r, request_rec *rr, "in headers returned by %s (%s)", r->uri, r->method); *pread_len = len; - return ; + return; } else { ap_log_rerror(APLOG_MARK, APLOG_WARNING, 0, r, APLOGNO(01099) "No HTTP headers returned by %s (%s)", r->uri, r->method); - return ; + return; } } } @@ -1156,15 +1156,14 @@ static void ap_proxy_read_headers(request_rec *r, request_rec *rr, ++value; /* Skip to start of value */ /* should strip trailing whitespace as well */ - for (end = &value[strlen(value)-1]; end > value && apr_isspace(*end); -- -end) + for (end = &value[strlen(value)-1]; end > value && apr_isspace(*end); --end) *end = '\0'; /* make sure we add so as not to destroy duplicated headers * Modify headers requiring canonicalisation and/or affected * by ProxyPassReverse and family with process_proxy_header */ - process_proxy_header(r, dconf, buffer, value) ; + process_proxy_header(r, dconf, buffer, value); saw_headers = 1; /* the header was too long; at the least we should skip extra data */ diff --git a/server/core.c b/server/core.c index ad777fadea0395888efa4584528e477521f0d125..de54dc5a42cd508b7b3bc44dc24841343df8e86e 100644 --- a/server/core.c +++ b/server/core.c @@ -1240,8 +1240,8 @@ AP_DECLARE(const char *) ap_resolve_env(apr_pool_t *p, const char * word) } if (*s == '$') { - if (s[1] == '{' && (e = ap_strchr_c(s, '}'))) { - char *name = apr_pstrndup(p, s+2, e-s-2); + if (s[1] == '{' && (e = ap_strchr_c(s+2, '}'))) { + char *name = apr_pstrmemdup(p, s+2, e-s-2); word = NULL; if (server_config_defined_vars) word = apr_table_get(server_config_defined_vars, name); @@ -2094,7 +2094,7 @@ AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd, return unclosed_directive(cmd); } - limited_methods = apr_pstrndup(cmd->temp_pool, arg, endp - arg); + limited_methods = apr_pstrmemdup(cmd->temp_pool, arg, endp - arg); if (!limited_methods[0]) { return missing_container_arg(cmd); @@ -2111,7 +2111,7 @@ AP_CORE_DECLARE_NONSTD(const char *) ap_limit_section(cmd_parms *cmd, return "TRACE cannot be controlled by <Limit>, see TraceEnable"; } else if (methnum == M_INVALID) { - /* method has not been registered yet, but resorce restriction + /* method has not been registered yet, but resource restriction * is always checked before method handling, so register it. */ methnum = ap_method_register(cmd->pool, diff --git a/server/core_filters.c b/server/core_filters.c index 61dc2f0ac43d820ce55f6508efe0ac17da5ba24a..958055ba3d84e49ec99bd5f1699e0de0f571f093 100644 --- a/server/core_filters.c +++ b/server/core_filters.c @@ -48,7 +48,6 @@ #include "mpm_common.h" #include "scoreboard.h" #include "mod_core.h" -#include "mod_proxy.h" #include "ap_listen.h" #include "mod_so.h" /* for ap_find_loaded_module_symbol */