]> git.kaiwu.me - nginx.git/log
nginx.git
12 years agoSSL: guard use of SSL_OP_MSIE_SSLV2_RSA_PADDING.
Piotr Sikora [Mon, 16 Sep 2013 21:24:38 +0000 (14:24 -0700)]
SSL: guard use of SSL_OP_MSIE_SSLV2_RSA_PADDING.

This option had no effect since 0.9.7h / 0.9.8b and it was removed
in recent OpenSSL.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoImproved check for duplicate path names in ngx_add_path().
Valentin Bartenev [Mon, 16 Sep 2013 14:49:23 +0000 (18:49 +0400)]
Improved check for duplicate path names in ngx_add_path().

The same path names with different "data" context should not be allowed.

In particular it rejects configurations like this:

    proxy_cache_path /var/cache/ keys_zone=one:10m max_size=1g inactive=5m;
    proxy_cache_path /var/cache/ keys_zone=two:20m max_size=4m inactive=30s;

12 years agoRemoved surplus initializations from ngx_conf_set_path_slot().
Valentin Bartenev [Mon, 16 Sep 2013 14:49:22 +0000 (18:49 +0400)]
Removed surplus initializations from ngx_conf_set_path_slot().

An instance of ngx_path_t is already zeroed by ngx_pcalloc().

12 years agoUse ngx_pcalloc() in ngx_conf_merge_path_value().
Valentin Bartenev [Mon, 16 Sep 2013 14:49:10 +0000 (18:49 +0400)]
Use ngx_pcalloc() in ngx_conf_merge_path_value().

It initializes the "data" pointer of ngx_path_t that will be checked after
subsequent changes.

12 years agoUse EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev [Mon, 16 Sep 2013 14:33:39 +0000 (18:33 +0400)]
Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).

This allows to detect client connection close with pending data when
the ngx_http_test_reading() request event handler is set.

12 years agoUpstream: use EPOLLRDHUP to check broken connections (ticket #320).
Valentin Bartenev [Mon, 16 Sep 2013 14:33:39 +0000 (18:33 +0400)]
Upstream: use EPOLLRDHUP to check broken connections (ticket #320).

This allows to detect client connection close with pending data on Linux
while processing upstream.

12 years agoEvents: support for EPOLLRDHUP (ticket #320).
Valentin Bartenev [Fri, 12 Jul 2013 10:51:07 +0000 (14:51 +0400)]
Events: support for EPOLLRDHUP (ticket #320).

Since Linux 2.6.17, epoll is able to report about peer half-closed connection
using special EPOLLRDHUP flag on a read event.

12 years agoEvents: removed unused flags from the ngx_event_s structure.
Valentin Bartenev [Thu, 5 Sep 2013 12:53:02 +0000 (16:53 +0400)]
Events: removed unused flags from the ngx_event_s structure.

They are not used since 708f8bb772ec (pre 0.0.1).

12 years agoFixed handling of the ready flag with kqueue.
Valentin Bartenev [Thu, 5 Sep 2013 12:53:02 +0000 (16:53 +0400)]
Fixed handling of the ready flag with kqueue.

There is nothing to do more when recv() has returned 0,
so we should drop the flag.

12 years agoReturn reason phrase for 414.
Valentin Bartenev [Tue, 3 Sep 2013 17:07:19 +0000 (21:07 +0400)]
Return reason phrase for 414.

After 62be77b0608f nginx can return this code.

12 years agoUpstream: fixed $upstream_response_time format specifiers.
Maxim Dounin [Wed, 4 Sep 2013 17:30:09 +0000 (21:30 +0400)]
Upstream: fixed $upstream_response_time format specifiers.

12 years agoConfigure: TCP_KEEPIDLE test name simplified.
Maxim Dounin [Wed, 4 Sep 2013 17:17:05 +0000 (21:17 +0400)]
Configure: TCP_KEEPIDLE test name simplified.

12 years agoConfigure: fixed building with Sun C if CFLAGS set (ticket #65).
Maxim Dounin [Wed, 4 Sep 2013 17:17:03 +0000 (21:17 +0400)]
Configure: fixed building with Sun C if CFLAGS set (ticket #65).

12 years agoSSL: clear error queue after SSL_CTX_load_verify_locations().
Maxim Dounin [Wed, 4 Sep 2013 17:17:02 +0000 (21:17 +0400)]
SSL: clear error queue after SSL_CTX_load_verify_locations().

The SSL_CTX_load_verify_locations() may leave errors in the error queue
while returning success (e.g. if there are duplicate certificates in the file
specified), resulting in "ignoring stale global SSL error" alerts later
at runtime.

12 years agoFixed incorrect response line on "return 203".
Maxim Dounin [Wed, 4 Sep 2013 17:17:01 +0000 (21:17 +0400)]
Fixed incorrect response line on "return 203".

Reported by Weibin Yao,
http://mailman.nginx.org/pipermail/nginx-devel/2013-April/003607.html.

12 years agoRequest cleanup code unified, no functional changes.
Maxim Dounin [Wed, 4 Sep 2013 17:17:00 +0000 (21:17 +0400)]
Request cleanup code unified, no functional changes.

Additionally, detaching a cleanup chain from a request is a bit more resilent
to various bugs if any.

12 years agoHandling of ngx_int_t != intptr_t case.
Maxim Dounin [Wed, 4 Sep 2013 17:16:59 +0000 (21:16 +0400)]
Handling of ngx_int_t != intptr_t case.

Casts between pointers and integers produce warnings on size mismatch.  To
silence them, cast to (u)intptr_t should be used.  Prevoiusly, casts to
ngx_(u)int_t were used in some cases, and several ngx_int_t expressions had
no casts.

As of now it's mostly style as ngx_int_t is defined as intptr_t.

12 years agoWin32: $request_time fixed.
Maxim Dounin [Wed, 4 Sep 2013 16:48:30 +0000 (20:48 +0400)]
Win32: $request_time fixed.

On win32, time_t is 64 bits wide by default, and passing an ngx_msec_int_t
argument for %T format specifier doesn't work.  This doesn't manifest itself
on other platforms as time_t and ngx_msec_int_t are usually of the same size.

12 years agoWin32: MinGW GCC compatibility.
Maxim Dounin [Wed, 4 Sep 2013 16:48:28 +0000 (20:48 +0400)]
Win32: MinGW GCC compatibility.

Several warnings silenced, notably (ngx_socket_t) -1 is now checked
on socket operations instead of -1, as ngx_socket_t is unsigned on win32
and gcc complains on comparison.

With this patch, it's now possible to compile nginx using mingw gcc,
with options we normally compile on win32.

12 years agoWin32: Borland C compatibility fixes.
Maxim Dounin [Wed, 4 Sep 2013 16:48:23 +0000 (20:48 +0400)]
Win32: Borland C compatibility fixes.

Several false positive warnings silenced, notably W8012 "Comparing
signed and unsigned" (due to u_short values promoted to int), and
W8072 "Suspicious pointer arithmetic" (due to large type values added
to pointers).

With this patch, it's now again possible to compile nginx using bcc32,
with options we normally compile on win32 minus ipv6 and ssl.

12 years agoWin32: Open Watcom C compatibility fixes.
Maxim Dounin [Wed, 4 Sep 2013 16:48:22 +0000 (20:48 +0400)]
Win32: Open Watcom C compatibility fixes.

Precompiled headers are disabled as they lead to internal compiler errors
with long configure lines.  Couple of false positive warnings silenced.
Various win32 typedefs are adjusted to work with Open Watcom C 1.9 headers.

With this patch, it's now again possible to compile nginx using owc386,
with options we normally compile on win32 minus ipv6 and ssl.

12 years agoDisable symlinks: removed recursive call of ngx_file_o_path_info().
Valentin Bartenev [Mon, 2 Sep 2013 16:06:03 +0000 (20:06 +0400)]
Disable symlinks: removed recursive call of ngx_file_o_path_info().

It is surplus.

12 years agoDisable symlinks: use O_PATH to open path components.
Valentin Bartenev [Mon, 2 Sep 2013 04:07:59 +0000 (08:07 +0400)]
Disable symlinks: use O_PATH to open path components.

It was introduced in Linux 2.6.39, glibc 2.14 and allows to obtain
file descriptors without actually opening files.  Thus made it possible
to traverse path with openat() syscalls without the need to have read
permissions for path components.  It is effectively emulates O_SEARCH
which is missing on Linux.

O_PATH is used in combination with O_RDONLY.  The last one is ignored
if O_PATH is used, but it allows nginx to not fail when it was built on
modern system (i.e. glibc 2.14+) and run with a kernel older than 2.6.39.
Then O_PATH is unknown to the kernel and ignored, while O_RDONLY is used.

Sadly, fstat() is not working with O_PATH descriptors till Linux 3.6.
As a workaround we fallback to fstatat() with the AT_EMPTY_PATH flag
that was introduced at the same time as O_PATH.

12 years agoAdded the NGX_EBADF define.
Valentin Bartenev [Mon, 2 Sep 2013 04:07:44 +0000 (08:07 +0400)]
Added the NGX_EBADF define.

12 years agoAssume the HTTP/1.0 version by default.
Valentin Bartenev [Sun, 1 Sep 2013 23:45:14 +0000 (03:45 +0400)]
Assume the HTTP/1.0 version by default.

It is believed to be better than fallback to HTTP/0.9, because most of
the clients at present time support HTTP/1.0.  It allows nginx to return
error response code for them in cases when it fail to parse request line,
and therefore fail to detect client protocol version.

Even if the client does not support HTTP/1.0, this assumption should not
cause any harm, since from the HTTP/0.9 point of view it still a valid
response.

12 years agoUpstream: setting u->header_sent before ngx_http_upstream_upgrade().
Maxim Dounin [Fri, 30 Aug 2013 17:44:16 +0000 (21:44 +0400)]
Upstream: setting u->header_sent before ngx_http_upstream_upgrade().

Without u->header_sent set a special response might be generated following
an upgraded connection.  The problem appeared in 1ccdda1f37f3 (1.5.3).
Catched by "header already sent" alerts in 1.5.4 after upstream timeouts.

12 years agoReferer: fixed hostname buffer overflow check.
Valentin Bartenev [Thu, 29 Aug 2013 18:35:54 +0000 (22:35 +0400)]
Referer: fixed hostname buffer overflow check.

Because of premature check the effective buffer size was 255 symbols
while the buffer is able to handle 256.

12 years agoReferer: "server_names" parsing deferred to merge phase.
Sergey Kandaurov [Thu, 29 Aug 2013 18:35:27 +0000 (22:35 +0400)]
Referer: "server_names" parsing deferred to merge phase.

This allows to approach "server_name" values specified below the
"valid_referers" directive when used within the "server_names" parameter, e.g.:

    server_name  example.org;
    valid_referers server_names;
    server_name  example.com;

As a bonus, this fixes bogus error with "server_names" specified several times.

12 years agoReferer: fixed server_name regex matching.
Sergey Kandaurov [Thu, 29 Aug 2013 18:35:26 +0000 (22:35 +0400)]
Referer: fixed server_name regex matching.

The server_name regexes are normally compiled for case-sensitive matching.
This violates case-insensitive obligations in the referer module.  To fix
this, the host string is converted to lower case before matching.

Previously server_name regex was executed against the whole referer string
after dropping the scheme part.  This could led to an improper matching, e.g.:

    server_name ~^localhost$;
    valid_referers server_names;

    Referer: http://localhost/index.html

It was changed to look only at the hostname part.

The server_name regexes are separated into another array to not clash with
regular regexes.

12 years agoReferer: fixed error type usage inconsistency for ngx_http_add*().
Sergey Kandaurov [Thu, 29 Aug 2013 18:35:26 +0000 (22:35 +0400)]
Referer: fixed error type usage inconsistency for ngx_http_add*().

12 years agoImage filter: large image handling.
Lanshun Zhou [Tue, 27 Aug 2013 16:19:07 +0000 (00:19 +0800)]
Image filter: large image handling.

If Content-Length header is not set, and the image size is larger than the
buffer size, client will hang until a timeout occurs.

Now NGX_HTTP_UNSUPPORTED_MEDIA_TYPE is returned immediately.

diff -r d1403de41631 -r 4fae04f332b4
src/http/modules/ngx_http_image_filter_module.c

12 years agoTypo fixed.
Maxim Dounin [Tue, 27 Aug 2013 22:34:30 +0000 (02:34 +0400)]
Typo fixed.

12 years agoVersion bump.
Maxim Dounin [Tue, 27 Aug 2013 22:34:21 +0000 (02:34 +0400)]
Version bump.

12 years agorelease-1.5.4 tag
Maxim Dounin [Tue, 27 Aug 2013 13:37:15 +0000 (17:37 +0400)]
release-1.5.4 tag

12 years agonginx-1.5.4-RELEASE release-1.5.4
Maxim Dounin [Tue, 27 Aug 2013 13:37:15 +0000 (17:37 +0400)]
nginx-1.5.4-RELEASE

12 years agoUpdated PCRE used for win32 builds.
Maxim Dounin [Fri, 23 Aug 2013 18:54:08 +0000 (22:54 +0400)]
Updated PCRE used for win32 builds.

As of PCRE 8.33, config.h.generic no longer contains boolean macros.  Two
of them (SUPPORT_PCRE8 and HAVE_MEMMOVE) were added to appropriate makefiles.
This allows PCRE 8.33 to compile and don't change anything for previous
versions.

12 years agoConfigure: pcre.lib dependencies fix.
Maxim Dounin [Fri, 23 Aug 2013 18:53:54 +0000 (22:53 +0400)]
Configure: pcre.lib dependencies fix.

Previously, an attempt to build pcre.lib on win32 before anything else
failed due to no pcre.h.

12 years agoCache: lock timeouts are now logged at info level.
Maxim Dounin [Fri, 23 Aug 2013 18:18:54 +0000 (22:18 +0400)]
Cache: lock timeouts are now logged at info level.

12 years agoUpstream: posted requests handling after ssl handshake errors.
Maxim Dounin [Fri, 23 Aug 2013 18:18:46 +0000 (22:18 +0400)]
Upstream: posted requests handling after ssl handshake errors.

Missing call to ngx_http_run_posted_request() resulted in a main request hang
if subrequest's ssl handshake with an upstream server failed for some reason.

Reported by Aviram Cohen.

12 years agoFixed try_files with empty argument (ticket #390).
Maxim Dounin [Fri, 23 Aug 2013 18:18:39 +0000 (22:18 +0400)]
Fixed try_files with empty argument (ticket #390).

12 years agoMIME: eot MIME type updated to follow IANA (ticket #306).
Sergey Kandaurov [Fri, 23 Aug 2013 12:24:24 +0000 (16:24 +0400)]
MIME: eot MIME type updated to follow IANA (ticket #306).

12 years agoMIME: added the most common OOXML MIME types (ticket #243).
Sergey Kandaurov [Fri, 23 Aug 2013 12:24:24 +0000 (16:24 +0400)]
MIME: added the most common OOXML MIME types (ticket #243).

12 years agoMIME: added application/font-woff MIME type (ticket #292).
Sergey Kandaurov [Fri, 23 Aug 2013 12:24:23 +0000 (16:24 +0400)]
MIME: added application/font-woff MIME type (ticket #292).

12 years agoAdded auth request to win32 builds.
Maxim Dounin [Wed, 21 Aug 2013 16:46:10 +0000 (20:46 +0400)]
Added auth request to win32 builds.

12 years agoAdded safety belt for the case of sending header twice.
Sergey Kandaurov [Tue, 30 Jul 2013 11:04:46 +0000 (15:04 +0400)]
Added safety belt for the case of sending header twice.

The aforementioned situation is abnormal per se and as such it now forces
request termination with appropriate error message.

12 years agoAutoindex: improved ngx_de_info() error handling.
Sergey Kandaurov [Tue, 30 Jul 2013 07:43:21 +0000 (11:43 +0400)]
Autoindex: improved ngx_de_info() error handling.

This allows to build a directory listing whenever a loop exists in symbolic
link resolution of the path argument.

12 years agoAutoindex: return NGX_ERROR on error if headers were sent.
Sergey Kandaurov [Tue, 30 Jul 2013 07:43:21 +0000 (11:43 +0400)]
Autoindex: return NGX_ERROR on error if headers were sent.

This prevents ngx_http_finalize_request() from issuing
ngx_http_special_response_handler() on a freed context.

12 years agoStyle improved after 12dd27b74117.
Maxim Dounin [Tue, 20 Aug 2013 17:33:43 +0000 (21:33 +0400)]
Style improved after 12dd27b74117.

12 years agoBacked out f1a91825730a and 7094bd12c1ff.
Maxim Dounin [Tue, 20 Aug 2013 17:11:19 +0000 (21:11 +0400)]
Backed out f1a91825730a and 7094bd12c1ff.

While ngx_get_full_name() might have a bit more descriptive arguments,
the ngx_conf_full_name() is generally easier to use when parsing
configuration and limits exposure of cycle->prefix / cycle->conf_prefix
details.

12 years agoAuth request module import.
Maxim Dounin [Wed, 21 Aug 2013 15:19:47 +0000 (19:19 +0400)]
Auth request module import.

12 years agoMinor ngx_http_parse_request_line() optimization.
Maxim Dounin [Wed, 21 Aug 2013 08:51:31 +0000 (12:51 +0400)]
Minor ngx_http_parse_request_line() optimization.

Noted by Nils Kuhnhenn.

12 years agoFormat specifier fixes in error logging.
Sergey Kandaurov [Tue, 20 Aug 2013 16:47:16 +0000 (20:47 +0400)]
Format specifier fixes in error logging.

12 years agoWhitespace fix.
Maxim Dounin [Sat, 17 Aug 2013 12:54:55 +0000 (16:54 +0400)]
Whitespace fix.

12 years agoSPDY: alert about activated fake events instead of deleting them.
Valentin Bartenev [Thu, 15 Aug 2013 15:16:12 +0000 (19:16 +0400)]
SPDY: alert about activated fake events instead of deleting them.

They refer to the same socket descriptor as our real connection, and
deleting them will stop processing of the connection.

Events of fake connections must not be activated, and if it happened there
is nothing we can do.  The whole processing should be terminated as soon as
possible, but it is not obvious how to do this safely.

12 years agoSPDY: do not reject headers with empty value (ticket #396).
Valentin Bartenev [Thu, 15 Aug 2013 15:16:09 +0000 (19:16 +0400)]
SPDY: do not reject headers with empty value (ticket #396).

A quote from SPDY draft 2 specification: "The length of each name and
value must be greater than zero.  A receiver of a zero-length name or
value must send a RST_STREAM with code PROTOCOL error."

But it appears that Chrome browser allows sending requests over SPDY/2
connection using JavaScript that contain headers with empty values.

For better compatibility across SPDY clients and to be compliant with
HTTP, such headers are no longer rejected.

Also, it is worth noting that in SPDY draft 3 the statement has been
changed so that it permits empty values for headers.

12 years agoSPDY: fixed corruption of headers with names longer than 255.
Valentin Bartenev [Thu, 15 Aug 2013 15:14:58 +0000 (19:14 +0400)]
SPDY: fixed corruption of headers with names longer than 255.

It is a bad idea to put zero byte in position where the length of
the next header name can be stored before it was parsed.

12 years agoUnbreak building on Linux without sendfile64() support.
Valentin Bartenev [Thu, 15 Aug 2013 15:14:33 +0000 (19:14 +0400)]
Unbreak building on Linux without sendfile64() support.

It was broken in 8e446a2daf48 when the NGX_SENDFILE_LIMIT constant was added
to ngx_linux_sendfile_chain.c having the same name as already defined one in
ngx_linux_config.h.

The newer is needed to overcome a bug in old Linux kernels by limiting the
number of bytes to send per sendfile() syscall.  The older is used with
sendfile() on ancient kernels that works with 32-bit offsets only.

One of these renamed to NGX_SENDFILE_MAXSIZE.

12 years agoReferer module: fixed regex matching against HTTPS referers.
Sergey Kandaurov [Tue, 13 Aug 2013 13:47:04 +0000 (17:47 +0400)]
Referer module: fixed regex matching against HTTPS referers.

When matching a compiled regex against value in the "Referer" header field,
the length was calculated incorrectly for strings that start from "https://".
This might cause matching to fail for regexes with end-of-line anchors.

Patch by Liangbin Li.

12 years agoDon't lose pointer to first nonempty buf in ngx_*_sendfile_chain().
Gleb Smirnoff [Thu, 8 Aug 2013 11:06:39 +0000 (15:06 +0400)]
Don't lose pointer to first nonempty buf in ngx_*_sendfile_chain().

In ngx_*_sendfile_chain() when calculating pointer to a first
non-zero sized buf, use "in" as iterator.  This fixes processing
of zero sized buf(s) after EINTR.  Otherwise function can return
zero sized buf to caller, and later ngx_http_write_filter()
logs warning.

12 years agoFixed misleading example SSL config.
Sergey Budnevitch [Wed, 7 Aug 2013 16:01:43 +0000 (20:01 +0400)]
Fixed misleading example SSL config.

a) ssl as listen parameter is preferable.
b) ssl_protocols defaults are better because they do not forbid TLS versions
   1.1 and 1.2.
c) ssl_session_timeout has sense only with SSL cache.

12 years agoAPI change: removed the ngx_conf_full_name() function.
Valentin Bartenev [Tue, 6 Aug 2013 15:58:40 +0000 (19:58 +0400)]
API change: removed the ngx_conf_full_name() function.

The ngx_get_full_name() should be used instead.

12 years agoReplaced ngx_conf_full_name() with ngx_get_full_name().
Valentin Bartenev [Tue, 6 Aug 2013 15:58:40 +0000 (19:58 +0400)]
Replaced ngx_conf_full_name() with ngx_get_full_name().

The ngx_get_full_name() function takes more readable arguments list.

12 years agoFixed memory leaks in the root and auth_basic_user_file directives.
Valentin Bartenev [Tue, 6 Aug 2013 15:58:40 +0000 (19:58 +0400)]
Fixed memory leaks in the root and auth_basic_user_file directives.

If a relative path is set by variables, then the ngx_conf_full_name()
function was called while processing requests, which causes allocations
from the cycle pool.

A new function that takes pool as an argument was introduced.

12 years agoImage filter: use "application/json" MIME type for JSON output.
Valentin Bartenev [Mon, 5 Aug 2013 10:30:03 +0000 (14:30 +0400)]
Image filter: use "application/json" MIME type for JSON output.

As it is defined by RFC 4627, and allows for various browser tools like
JSONView to display JSON well-formatted.

12 years agoCore: guard use of AI_ADDRCONFIG.
Ruslan Ermilov [Mon, 5 Aug 2013 09:44:56 +0000 (13:44 +0400)]
Core: guard use of AI_ADDRCONFIG.

Some systems (notably NetBSD and OpenBSD) lack AI_ADDRCONFIG support.

Reported by Piotr Sikora.

12 years agoFixed build with signed socklen_t and unix sockets.
Maxim Dounin [Mon, 5 Aug 2013 07:40:33 +0000 (11:40 +0400)]
Fixed build with signed socklen_t and unix sockets.

This seems to be the case at least under Cygwin, where build was broken
by 05ba5bce31e0 (1.5.3).

Reported by Kevin Worthington,
http://mailman.nginx.org/pipermail/nginx/2013-August/040028.html.

12 years agoCore: only resolve address families configured on the local system.
Ruslan Ermilov [Mon, 5 Aug 2013 06:55:59 +0000 (10:55 +0400)]
Core: only resolve address families configured on the local system.

This is done by passing AI_ADDRCONFIG to getaddrinfo().

On Linux, setting net.ipv6.conf.all.disable_ipv6 to 1 will now be
respected.

On FreeBSD, AI_ADDRCONFIG filtering is currently implemented by
attempting to create a datagram socket for the corresponding family,
which succeeds even if the system doesn't in fact have any addresses
of that family configured.  That is, if the system with IPv6 support
in the kernel doesn't have IPv6 addresses configured, AI_ADDRCONFIG
will filter out IPv6 only inside a jail without IPv6 addresses or
with IPv6 disabled.

12 years agoMIME: use "application/javascript" for .js files.
Valentin Bartenev [Wed, 31 Jul 2013 19:40:46 +0000 (23:40 +0400)]
MIME: use "application/javascript" for .js files.

Though there are several MIME types commonly used for JavaScript nowadays,
the most common being "text/javascript", "application/javascript", and
currently used by nginx "application/x-javascript", RFC 4329 prefers
"application/javascript".

The "charset_types" directive's default value was adjusted accordingly.

12 years agoVersion bump.
Sergey Kandaurov [Wed, 31 Jul 2013 14:35:57 +0000 (18:35 +0400)]
Version bump.

12 years agoConfigure: fixed autotest cleanup commands.
Sergey Kandaurov [Wed, 31 Jul 2013 14:16:40 +0000 (18:16 +0400)]
Configure: fixed autotest cleanup commands.

Previously, if configured with --with-cc="clang -g", the autotest.dSYM
directories were left unremoved.

12 years agorelease-1.5.3 tag
Maxim Dounin [Tue, 30 Jul 2013 13:27:55 +0000 (17:27 +0400)]
release-1.5.3 tag

12 years agonginx-1.5.3-RELEASE release-1.5.3
Maxim Dounin [Tue, 30 Jul 2013 13:27:55 +0000 (17:27 +0400)]
nginx-1.5.3-RELEASE

12 years agoPerl: fixed syntax usage for C preprocessor directives.
Sergey Kandaurov [Mon, 29 Jul 2013 13:30:01 +0000 (17:30 +0400)]
Perl: fixed syntax usage for C preprocessor directives.

As per perlxs, C preprocessor directives should be at the first
non-whitespace of a line to avoid interpreting them as comments.

#if and #endif are moved so that there are no blank lines before them
to retain them as part of the function body.

12 years agoUpstream: reliably detect connection failures with SSL peers.
Ruslan Ermilov [Mon, 29 Jul 2013 09:23:16 +0000 (13:23 +0400)]
Upstream: reliably detect connection failures with SSL peers.

12 years agoUpstream: no last buffer on errors.
Maxim Dounin [Thu, 25 Jul 2013 11:00:41 +0000 (15:00 +0400)]
Upstream: no last buffer on errors.

Previously, after sending a header we always sent a last buffer and
finalized a request with code 0, even in case of errors.  In some cases
this resulted in a loss of ability to detect the response wasn't complete
(e.g. if Content-Length was removed from a response by gzip filter).

This change tries to propogate to a client information that a response
isn't complete in such cases.  In particular, with this change we no longer
pretend a returned response is complete if we wasn't able to create
a temporary file.

If an error code suggests the error wasn't fatal, we flush buffered data
and disable keepalive, then finalize request normally.  This allows to to
propogate information about a problem to a client, while still sending all
the data we've got from an upstream.

12 years agoUpstream: request finalization rework.
Maxim Dounin [Thu, 25 Jul 2013 11:00:29 +0000 (15:00 +0400)]
Upstream: request finalization rework.

No semantic changes expected, though some checks are done differently.
In particular, the r->cached flag is no longer explicitly checked.  Instead,
we relay on u->header_sent not being set if a response is sent from
a cache.

12 years agoUpstream: NGX_HTTP_CLIENT_CLOSED_REQUEST no longer reset to 0.
Maxim Dounin [Thu, 25 Jul 2013 11:00:25 +0000 (15:00 +0400)]
Upstream: NGX_HTTP_CLIENT_CLOSED_REQUEST no longer reset to 0.

The NGX_HTTP_CLIENT_CLOSED_REQUEST code is allowed to happen after we
started sending a response (much like NGX_HTTP_REQUEST_TIME_OUT), so there
is no need to reset response code to 0 in this case.

12 years agoUpstream: added check if a response is complete.
Maxim Dounin [Thu, 25 Jul 2013 11:00:12 +0000 (15:00 +0400)]
Upstream: added check if a response is complete.

Checks were added to both buffered and unbuffered code paths to detect
and complain if a response is incomplete.  Appropriate error codes are
now passed to ngx_http_upstream_finalize_request().

With this change in unbuffered mode we now use u->length set to -1 as an
indicator that EOF is allowed per protocol and used to indicate response
end (much like its with p->length in buffered mode).  Proxy module was
changed to set u->length to 1 (instead of previously used -1) in case of
chunked transfer encoding used to comply with the above.

12 years agoUpstream: u->length now defaults to -1 (API change).
Maxim Dounin [Thu, 25 Jul 2013 10:58:11 +0000 (14:58 +0400)]
Upstream: u->length now defaults to -1 (API change).

That is, by default we assume that response end is signalled by
a connection close.  This seems to be better default, and in line
with u->pipe->length behaviour.

Memcached module was modified accordingly.

12 years agoUpstream: fixed store/cache of unfinished responses.
Maxim Dounin [Thu, 25 Jul 2013 10:56:59 +0000 (14:56 +0400)]
Upstream: fixed store/cache of unfinished responses.

In case of upstream eof, only responses with u->pipe->length == -1
are now cached/stored.  This ensures that unfinished chunked responses
are not cached.

Note well - previously used checks for u->headers_in.content_length_n are
preserved.  This provides an additional level of protection if protol data
disagree with Content-Length header provided (e.g., a FastCGI response
is sent with wrong Content-Length, or an incomple SCGI or uwsgi response),
as well as protects from storing of responses to HEAD requests.  This should
be reconsidered if we'll consider caching of responses to HEAD requests.

12 years agoUpstream: replaced u->pipe->temp_file with p->temp_file.
Maxim Dounin [Thu, 25 Jul 2013 10:56:49 +0000 (14:56 +0400)]
Upstream: replaced u->pipe->temp_file with p->temp_file.

While here, redundant parentheses removed.  No functional changes.

12 years agoUpstream: NGX_ERROR after pipe errors.
Maxim Dounin [Thu, 25 Jul 2013 10:56:41 +0000 (14:56 +0400)]
Upstream: NGX_ERROR after pipe errors.

12 years agoUpstream: NGX_HTTP_GATEWAY_TIME_OUT after upstream timeouts.
Maxim Dounin [Thu, 25 Jul 2013 10:56:20 +0000 (14:56 +0400)]
Upstream: NGX_HTTP_GATEWAY_TIME_OUT after upstream timeouts.

There is no real difference from previously used 0 as NGX_HTTP_* will
become 0 in ngx_http_upstream_finalize_request(), but the change
preserves information about a timeout a bit longer.  Previous use of
ETIMEDOUT in one place was just wrong.

Note well that with cacheable responses there will be a difference
(code in ngx_http_upstream_finalize_request() will store the error
in cache), though this change doesn't touch cacheable case.

12 years agoUpstream: ngx_http_upstream_finalize_request(NGX_ERROR) on errors.
Maxim Dounin [Thu, 25 Jul 2013 10:56:13 +0000 (14:56 +0400)]
Upstream: ngx_http_upstream_finalize_request(NGX_ERROR) on errors.

Previously, ngx_http_upstream_finalize_request(0) was used in most
cases after errors.  While with current code there is no difference,
use of NGX_ERROR allows to pass a bit more information into
ngx_http_upstream_finalize_request().

12 years agoUpstream: consistent error handling after u->input_filter_init().
Maxim Dounin [Thu, 25 Jul 2013 10:56:00 +0000 (14:56 +0400)]
Upstream: consistent error handling after u->input_filter_init().

In all cases ngx_http_upstream_finalize_request() with NGX_ERROR now used.
Previously used NGX_HTTP_INTERNAL_SERVER_ERROR in the subrequest in memory
case don't cause any harm, but inconsistent with other uses.

12 years agoUpstream: busy lock remnants removed.
Maxim Dounin [Thu, 25 Jul 2013 10:55:59 +0000 (14:55 +0400)]
Upstream: busy lock remnants removed.

12 years agoUpstream: stale comments removed.
Maxim Dounin [Thu, 13 Jun 2013 15:52:31 +0000 (19:52 +0400)]
Upstream: stale comments removed.

12 years agoGzip: clearing of c->buffered if all data are flushed.
Maxim Dounin [Thu, 25 Jul 2013 10:55:32 +0000 (14:55 +0400)]
Gzip: clearing of c->buffered if all data are flushed.

This allows to finalize unfinished responses while still sending as
much data as available.

12 years agoEvent pipe: fixed writing cache header to a temp file.
Maxim Dounin [Thu, 25 Jul 2013 10:55:09 +0000 (14:55 +0400)]
Event pipe: fixed writing cache header to a temp file.

With previous code the p->temp_file->offset wasn't adjusted if a temp
file was written by the code in ngx_event_pipe_write_to_downstream()
after an EOF, resulting in cache not being used with empty scgi and uwsgi
responses with Content-Length set to 0.

Fix it to call ngx_event_pipe_write_chain_to_temp_file() there instead
of calling ngx_write_chain_to_temp_file() directly.

12 years agoFixed ngx_http_test_reading() to finalize request properly.
Maxim Dounin [Fri, 14 Jun 2013 16:56:07 +0000 (20:56 +0400)]
Fixed ngx_http_test_reading() to finalize request properly.

Previous code called ngx_http_finalize_request() with rc = 0.  This is
ok if a response status was already set, but resulted in "000" being
logged if it wasn't.  In particular this happened with limit_req
if a connection was prematurely closed during limit_req delay.

12 years agoSub filter: fixed matching after a partial match.
Maxim Dounin [Thu, 25 Jul 2013 10:54:53 +0000 (14:54 +0400)]
Sub filter: fixed matching after a partial match.

After a failed partial match we now check if there is another partial
match in previously matched substring to fix cases like "aab" in "aaab".

The ctx->saved string is now always sent if it's present on return
from the ngx_http_sub_parse() function (and reset accordingly).  This
allows to release parts of previously matched data.

12 years agoSub filter: fixed incomplete last buffer on partial match.
Maxim Dounin [Thu, 25 Jul 2013 10:54:48 +0000 (14:54 +0400)]
Sub filter: fixed incomplete last buffer on partial match.

If a pattern was partially matched at a response end, partially matched
string wasn't send.  E.g., a response "fo" was truncated to an empty response
if partially mathed by a pattern "foo".

12 years agoSub filter: flush buffers handling.
Maxim Dounin [Thu, 25 Jul 2013 10:54:47 +0000 (14:54 +0400)]
Sub filter: flush buffers handling.

12 years agoSub filter: switched to ngx_chain_get_free_buf().
Maxim Dounin [Thu, 25 Jul 2013 10:54:45 +0000 (14:54 +0400)]
Sub filter: switched to ngx_chain_get_free_buf().

No functional changes.

12 years agoSub filter: stale comments removed.
Maxim Dounin [Thu, 25 Jul 2013 10:54:43 +0000 (14:54 +0400)]
Sub filter: stale comments removed.

12 years agoOn DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.
Ruslan Ermilov [Thu, 25 Jul 2013 08:46:03 +0000 (12:46 +0400)]
On DragonFlyBSD, TCP_KEEPIDLE and TCP_KEEPINTVL are in msecs.

Based on a patch by Sepherosa Ziehau.

12 years agoStyle: reuse one int variable in ngx_configure_listening_sockets().
Ruslan Ermilov [Thu, 25 Jul 2013 08:46:02 +0000 (12:46 +0400)]
Style: reuse one int variable in ngx_configure_listening_sockets().

No functional changes.

12 years agoSPDY: fixed segfault with "client_body_in_file_only" enabled.
Valentin Bartenev [Wed, 24 Jul 2013 18:24:25 +0000 (22:24 +0400)]
SPDY: fixed segfault with "client_body_in_file_only" enabled.

It is possible to send FLAG_FIN in additional empty data frame, even if it is
known from the content-length header that request body is empty.  And Firefox
actually behaves like this (see ticket #357).

To simplify code we sacrificed our microoptimization that did not work right
due to missing check in the ngx_http_spdy_state_data() function for rb->buf
set to NULL.

12 years agoXslt: exsltRegisterAll() moved to preconfiguration.
Maxim Dounin [Fri, 19 Jul 2013 11:59:50 +0000 (15:59 +0400)]
Xslt: exsltRegisterAll() moved to preconfiguration.

The exsltRegisterAll() needs to be called before XSLT stylesheets
are compiled, else stylesheet compilation hooks will not work.  This
change fixes EXSLT Functions extension.

12 years agoEvents: honor NGX_USE_GREEDY_EVENT when kqueue support is enabled.
Valentin Bartenev [Fri, 12 Jul 2013 23:24:30 +0000 (03:24 +0400)]
Events: honor NGX_USE_GREEDY_EVENT when kqueue support is enabled.

Currently this flag is needed for epoll and rtsig, and though these methods
usually present on different platforms than kqueue, nginx can be compiled to
support all of them.