]> git.kaiwu.me - nginx.git/log
nginx.git
12 years agoSPDY: fixed request hang with the auth request module.
Valentin Bartenev [Mon, 11 Nov 2013 14:49:35 +0000 (18:49 +0400)]
SPDY: fixed request hang with the auth request module.

We should just call post_handler() when subrequest wants to read body, like
it happens for HTTP since rev. f458156fd46a.  An attempt to init request body
for subrequests results in hang if the body was not already read.

12 years agoConfigure: call "make distclean" for libatomic.
Piotr Sikora [Mon, 11 Nov 2013 09:59:47 +0000 (01:59 -0800)]
Configure: call "make distclean" for libatomic.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoConfigure: call "make clean" for OpenSSL only if Makefile exists.
Piotr Sikora [Tue, 5 Nov 2013 01:00:25 +0000 (17:00 -0800)]
Configure: call "make clean" for OpenSSL only if Makefile exists.

This change allows to build nginx against git checkout of OpenSSL.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoWin32: plugged memory leak.
Maxim Dounin [Thu, 31 Oct 2013 14:23:49 +0000 (18:23 +0400)]
Win32: plugged memory leak.

12 years agoGunzip: proper error handling on gunzipping an empty response.
Maxim Dounin [Thu, 31 Oct 2013 00:16:20 +0000 (04:16 +0400)]
Gunzip: proper error handling on gunzipping an empty response.

With previous code, an empty (malformed) response resulted in a request
finalized without sending anything to a client.

12 years agoGunzip: "error" logging level on inflate() errors.
Maxim Dounin [Thu, 31 Oct 2013 00:12:53 +0000 (04:12 +0400)]
Gunzip: "error" logging level on inflate() errors.

Errors can easily happen due to broken upstream responses, there is no
need to log them at "alert" level.

12 years agoRemoved extra allocation for $sent_http_last_modified.
Maxim Dounin [Thu, 31 Oct 2013 00:02:59 +0000 (04:02 +0400)]
Removed extra allocation for $sent_http_last_modified.

There is no need to allocate memory for "Last-Modified: " string,
the variable only contains date itself.

12 years agoAuth basic: "info" logging level on no user/password.
Maxim Dounin [Thu, 31 Oct 2013 00:02:21 +0000 (04:02 +0400)]
Auth basic: "info" logging level on no user/password.

This isn't an exceptional condition and normally happens on
first request from a client.

12 years agoGzip, gunzip: flush pending data when incoming chain is NULL.
Yichun Zhang [Mon, 28 Oct 2013 22:01:36 +0000 (15:01 -0700)]
Gzip, gunzip: flush pending data when incoming chain is NULL.

12 years agoCore: handling of getsockopt(TCP_DEFER_ACCEPT) failures.
Maxim Dounin [Thu, 31 Oct 2013 00:00:37 +0000 (04:00 +0400)]
Core: handling of getsockopt(TCP_DEFER_ACCEPT) failures.

Recent Linux versions started to return EOPNOTSUPP to getsockopt() calls
on unix sockets, resulting in log pollution on binary upgrade.  Such errors
are silently ignored now.

12 years agoCore: apply missed options to sockets added during binary upgrade.
Piotr Sikora [Thu, 24 Oct 2013 21:18:37 +0000 (14:18 -0700)]
Core: apply missed options to sockets added during binary upgrade.

The accept_filter and deferred options were not applied to sockets
that were added to configuration during binary upgrade cycle.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoUpstream: optimize loops in ngx_http_upstream_init_round_robin().
Xiaochen Wang [Mon, 21 Oct 2013 10:20:32 +0000 (18:20 +0800)]
Upstream: optimize loops in ngx_http_upstream_init_round_robin().

12 years agoFixed "satisfy any" if 403 is returned after 401 (ticket #285).
Maxim Dounin [Fri, 18 Oct 2013 14:13:49 +0000 (18:13 +0400)]
Fixed "satisfy any" if 403 is returned after 401 (ticket #285).

The 403 (Forbidden) should not overwrite 401 (Unauthorized) as the
latter should be returned with the WWW-Authenticate header to request
authentication by a client.

The problem could be triggered with 3rd party modules and the "deny"
directive, or with auth_basic and auth_request which returns 403
(in 1.5.4+).

Patch by Jan Marc Hoffmann.

12 years agoHeaders filter: empty Cache-Control is no longer added.
Maxim Dounin [Fri, 18 Oct 2013 14:13:44 +0000 (18:13 +0400)]
Headers filter: empty Cache-Control is no longer added.

Much like with other headers, "add_header Cache-Control $value;" no longer
results in anything added to response headers if $value evaluates to an
empty string.

12 years agoStyle.
Maxim Dounin [Fri, 18 Oct 2013 14:13:35 +0000 (18:13 +0400)]
Style.

12 years agoSSL: added ability to set keys used for Session Tickets (RFC5077).
Piotr Sikora [Fri, 11 Oct 2013 23:05:24 +0000 (16:05 -0700)]
SSL: added ability to set keys used for Session Tickets (RFC5077).

In order to support key rollover, ssl_session_ticket_key can be defined
multiple times. The first key will be used to issue and resume Session
Tickets, while the rest will be used only to resume them.

    ssl_session_ticket_key  session_tickets/current.key;
    ssl_session_ticket_key  session_tickets/prev-1h.key;
    ssl_session_ticket_key  session_tickets/prev-2h.key;

Please note that nginx supports Session Tickets even without explicit
configuration of the keys and this feature should be only used in setups
where SSL traffic is distributed across multiple nginx servers.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoSSL: SSL_CTX_set_timeout() now always called.
Maxim Dounin [Mon, 14 Oct 2013 09:59:35 +0000 (13:59 +0400)]
SSL: SSL_CTX_set_timeout() now always called.

The timeout set is used by OpenSSL as a hint for clients in TLS Session
Tickets.  Previous code resulted in a default timeout (5m) used for TLS
Sessions Tickets if there was no session cache configured.

Prodded by Piotr Sikora.

12 years agoSSL: fixed build with OpenSSL 0.9.7.
Maxim Dounin [Mon, 14 Oct 2013 09:44:09 +0000 (13:44 +0400)]
SSL: fixed build with OpenSSL 0.9.7.

SSL_get_rbio() and SSL_get_wbio() functions used to get non-const pointer
in OpenSSL 0.9.7, hence an explicit cast added to drop const qualifier.

12 years agoLimit req: fixed "nodelay" parsing.
Maxim Dounin [Wed, 2 Oct 2013 11:07:17 +0000 (15:07 +0400)]
Limit req: fixed "nodelay" parsing.

Previously arguments starting with "nodelay" were considered valid,
e.g. "limit_req ... nodelayFOO;".

12 years agoUpstream: fixed "down" and "backup" parsing.
Maxim Dounin [Wed, 2 Oct 2013 11:07:15 +0000 (15:07 +0400)]
Upstream: fixed "down" and "backup" parsing.

Previously arguments starting with "down" or "backup" were considered
valid, e.g. "server ... downFOO;".

12 years agoUnused macro and variable removed.
Sergey Kandaurov [Wed, 2 Oct 2013 07:51:04 +0000 (11:51 +0400)]
Unused macro and variable removed.

The macro NGX_HTTP_DAV_COPY_BLOCK is not used since 8101d9101ed8 (0.8.9).
The variable ngx_accept_mutex_lock_file was never used.

12 years agoVersion bump.
Sergey Kandaurov [Wed, 2 Oct 2013 07:50:56 +0000 (11:50 +0400)]
Version bump.

12 years agorelease-1.5.6 tag
Maxim Dounin [Tue, 1 Oct 2013 13:44:51 +0000 (17:44 +0400)]
release-1.5.6 tag

12 years agonginx-1.5.6-RELEASE release-1.5.6
Maxim Dounin [Tue, 1 Oct 2013 13:44:51 +0000 (17:44 +0400)]
nginx-1.5.6-RELEASE

12 years agoSPDY: ignore priority when queuing blocked frames.
Valentin Bartenev [Mon, 30 Sep 2013 20:14:37 +0000 (00:14 +0400)]
SPDY: ignore priority when queuing blocked frames.

With this change all such frames will be added in front of the output queue, and
will be sent first.  It prevents HOL blocking when response with higher priority
is blocked by response with lower priority in the middle of the queue because
the order of their SYN_REPLY frames cannot be changed.

Proposed by Yury Kirpichev.

12 years agoSPDY: set empty write handler during connection finalization.
Valentin Bartenev [Mon, 30 Sep 2013 20:12:30 +0000 (00:12 +0400)]
SPDY: set empty write handler during connection finalization.

While ngx_http_spdy_write_handler() should not make any harm with current code,
calling it during finalization of SPDY connection was not intended.

12 years agoSPDY: fixed connection leak while waiting for request headers.
Valentin Bartenev [Mon, 30 Sep 2013 20:04:00 +0000 (00:04 +0400)]
SPDY: fixed connection leak while waiting for request headers.

If an error occurs in a SPDY connection, the c->error flag is set on every fake
request connection, and its read or write event handler is called, in order to
finalize it.  But while waiting for request headers, it was a no-op since the
read event handler had been set to ngx_http_empty_handler().

12 years agoSPDY: fixed connection leak while waiting for request body.
Valentin Bartenev [Mon, 30 Sep 2013 20:00:57 +0000 (00:00 +0400)]
SPDY: fixed connection leak while waiting for request body.

If an error occurs in a SPDY connection, the c->error flag is set on every fake
request connection, and its read or write event handler is called, in order to
finalize it.  But while waiting for a request body, it was a no-op since the
read event handler ngx_http_request_handler() calls r->read_event_handler that
had been set to ngx_http_block_reading().

12 years agoMail: fixed segfault with ssl/starttls at mail{} level and no cert.
Maxim Dounin [Mon, 30 Sep 2013 18:10:13 +0000 (22:10 +0400)]
Mail: fixed segfault with ssl/starttls at mail{} level and no cert.

A configuration like "mail { starttls on; server {}}" triggered NULL
pointer dereference in ngx_mail_ssl_merge_conf() as conf->file was not set.

12 years agoMail: fixed overrun of allocated memory (ticket #411).
Maxim Dounin [Mon, 30 Sep 2013 18:10:08 +0000 (22:10 +0400)]
Mail: fixed overrun of allocated memory (ticket #411).

Reported by Markus Linnala.

12 years agoMail: handle smtp multiline replies.
Maxim Dounin [Mon, 30 Sep 2013 18:10:03 +0000 (22:10 +0400)]
Mail: handle smtp multiline replies.

See here for details:

http://nginx.org/pipermail/nginx/2010-August/021713.html
http://nginx.org/pipermail/nginx/2010-August/021784.html
http://nginx.org/pipermail/nginx/2010-August/021785.html

12 years agoMail: smtp pipelining support.
Maxim Dounin [Mon, 30 Sep 2013 18:09:57 +0000 (22:09 +0400)]
Mail: smtp pipelining support.

Basically, this does the following two changes (and corresponding
modifications of related code):

1. Does not reset session buffer unless it's reached it's end, and always
wait for LF to terminate command (even if we detected invalid command).

2. Record command name to make it available for handlers (since now we
can't assume that command starts from s->buffer->start).

12 years agoMail: mail dependencies are now honored while building addons.
Maxim Dounin [Mon, 30 Sep 2013 18:09:54 +0000 (22:09 +0400)]
Mail: mail dependencies are now honored while building addons.

12 years agoMail: added session close on smtp_greeting_delay violation.
Maxim Dounin [Mon, 30 Sep 2013 18:09:50 +0000 (22:09 +0400)]
Mail: added session close on smtp_greeting_delay violation.

A server MUST send greeting before other replies, while before this
change in case of smtp_greeting_delay violation the 220 greeting was
sent after several 503 replies to commands received before greeting,
resulting in protocol synchronization loss.  Moreover, further commands
were accepted after the greeting.

While closing a connection isn't strictly RFC compliant (RFC 5321
requires servers to wait for a QUIT before closing a connection), it's
probably good enough for practial uses.

12 years agoSSL: adjust buffer used by OpenSSL during handshake (ticket #413).
Maxim Dounin [Fri, 27 Sep 2013 15:39:33 +0000 (19:39 +0400)]
SSL: adjust buffer used by OpenSSL during handshake (ticket #413).

12 years agoFastCGI: non-buffered mode support.
Maxim Dounin [Fri, 27 Sep 2013 12:50:40 +0000 (16:50 +0400)]
FastCGI: non-buffered mode support.

12 years agoUpstream: subrequest_in_memory support for SCGI and uwsgi enabled.
Maxim Dounin [Fri, 27 Sep 2013 12:50:34 +0000 (16:50 +0400)]
Upstream: subrequest_in_memory support for SCGI and uwsgi enabled.

This was missed in 9d59a8eda373 when non-buffered support was added to SCGI
and uwsgi.

12 years agoUpstream: subrequest_in_memory fix.
Maxim Dounin [Fri, 27 Sep 2013 12:50:26 +0000 (16:50 +0400)]
Upstream: subrequest_in_memory fix.

With previous code only part of u->buffer might be emptied in case
of special responses, resulting in partial responses seen by SSI set
in case of simple protocols, or spurious errors like "upstream sent
invalid chunked response" in case of complex ones.

12 years agoUpstream: proxy_no_cache, fastcgi_no_cache warnings removed.
Maxim Dounin [Fri, 27 Sep 2013 12:50:13 +0000 (16:50 +0400)]
Upstream: proxy_no_cache, fastcgi_no_cache warnings removed.

12 years agoProxy: added the "proxy_ssl_ciphers" directive.
Piotr Sikora [Mon, 23 Sep 2013 22:58:28 +0000 (15:58 -0700)]
Proxy: added the "proxy_ssl_ciphers" directive.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoAdded ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin [Mon, 23 Sep 2013 15:37:13 +0000 (19:37 +0400)]
Added ngx_filename_cmp() with "/" sorted to the left.

This patch fixes incorrect handling of auto redirect in configurations
like:

    location /0  { }
    location /a- { }
    location /a/ { proxy_pass ... }

With previously used sorting, this resulted in the following locations
tree (as "-" is less than "/"):

        "/a-"
    "/0"    "/a/"

and a request to "/a" didn't match "/a/" with auto_redirect, as it
didn't traverse relevant tree node during lookup (it tested "/a-",
then "/0", and then falled back to null location).

To preserve locale use for non-ASCII characters on case-insensetive
systems, libc's tolower() used.

12 years agoCaseless location tree construction (ticket #90).
Maxim Dounin [Mon, 23 Sep 2013 15:37:06 +0000 (19:37 +0400)]
Caseless location tree construction (ticket #90).

Location tree was always constructed using case-sensitive comparison, even
on case-insensitive systems.  This resulted in incorrect operation if
uppercase letters were used in location directives.  Notably, the
following config:

    location /a { ... }
    location /B { ... }

failed to properly map requests to "/B" into "location /B".

12 years agoSSL: stop loading configs with invalid "ssl_ciphers" values.
Piotr Sikora [Mon, 23 Sep 2013 05:36:11 +0000 (22:36 -0700)]
SSL: stop loading configs with invalid "ssl_ciphers" values.

While there, remove unnecessary check in ngx_mail_ssl_module.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoCore: fix misallocation at ngx_crypt_apr1 (ticket #412).
Markus Linnala [Fri, 20 Sep 2013 14:57:21 +0000 (17:57 +0300)]
Core: fix misallocation at ngx_crypt_apr1 (ticket #412).

Found by using auth_basic.t from mdounin nginx-tests under valgrind.

==10470== Invalid write of size 1
==10470==    at 0x43603D: ngx_crypt_to64 (ngx_crypt.c:168)
==10470==    by 0x43648E: ngx_crypt (ngx_crypt.c:153)
==10470==    by 0x489D8B: ngx_http_auth_basic_crypt_handler (ngx_http_auth_basic_module.c:297)
==10470==    by 0x48A24A: ngx_http_auth_basic_handler (ngx_http_auth_basic_module.c:240)
==10470==    by 0x44EAB9: ngx_http_core_access_phase (ngx_http_core_module.c:1121)
==10470==    by 0x44A822: ngx_http_core_run_phases (ngx_http_core_module.c:895)
==10470==    by 0x44A932: ngx_http_handler (ngx_http_core_module.c:878)
==10470==    by 0x455EEF: ngx_http_process_request (ngx_http_request.c:1852)
==10470==    by 0x456527: ngx_http_process_request_headers (ngx_http_request.c:1283)
==10470==    by 0x456A91: ngx_http_process_request_line (ngx_http_request.c:964)
==10470==    by 0x457097: ngx_http_wait_request_handler (ngx_http_request.c:486)
==10470==    by 0x4411EE: ngx_epoll_process_events (ngx_epoll_module.c:691)
==10470==  Address 0x5866fab is 0 bytes after a block of size 27 alloc'd
==10470==    at 0x4A074CD: malloc (vg_replace_malloc.c:236)
==10470==    by 0x43B251: ngx_alloc (ngx_alloc.c:22)
==10470==    by 0x421B0D: ngx_malloc (ngx_palloc.c:119)
==10470==    by 0x421B65: ngx_pnalloc (ngx_palloc.c:147)
==10470==    by 0x436368: ngx_crypt (ngx_crypt.c:140)
==10470==    by 0x489D8B: ngx_http_auth_basic_crypt_handler (ngx_http_auth_basic_module.c:297)
==10470==    by 0x48A24A: ngx_http_auth_basic_handler (ngx_http_auth_basic_module.c:240)
==10470==    by 0x44EAB9: ngx_http_core_access_phase (ngx_http_core_module.c:1121)
==10470==    by 0x44A822: ngx_http_core_run_phases (ngx_http_core_module.c:895)
==10470==    by 0x44A932: ngx_http_handler (ngx_http_core_module.c:878)
==10470==    by 0x455EEF: ngx_http_process_request (ngx_http_request.c:1852)
==10470==    by 0x456527: ngx_http_process_request_headers (ngx_http_request.c:1283)
==10470==

12 years agoProxy: added the "proxy_ssl_protocols" directive.
Andrei Belov [Thu, 19 Sep 2013 14:30:33 +0000 (18:30 +0400)]
Proxy: added the "proxy_ssl_protocols" directive.

12 years agoSSL: fixed possible memory and file descriptor leak on HUP signal.
Piotr Sikora [Wed, 18 Sep 2013 23:51:30 +0000 (16:51 -0700)]
SSL: fixed possible memory and file descriptor leak on HUP signal.

The problem appeared in 386a06a22c40 (1.3.7).

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoMIME: added application/json MIME type.
Piotr Sikora [Wed, 18 Sep 2013 19:59:47 +0000 (12:59 -0700)]
MIME: added application/json MIME type.

Signed-off-by: Piotr Sikora <piotr@cloudflare.com>
12 years agoFixed response line formatting with empty reason phrase.
Sergey Kandaurov [Wed, 18 Sep 2013 14:53:26 +0000 (18:53 +0400)]
Fixed response line formatting with empty reason phrase.

As per RFC 2616 sec 6.1 the response status code is always followed by SP.

12 years agoVersion bump.
Sergey Kandaurov [Wed, 18 Sep 2013 14:53:24 +0000 (18:53 +0400)]
Version bump.

12 years agorelease-1.5.5 tag
Maxim Dounin [Tue, 17 Sep 2013 13:31:00 +0000 (17:31 +0400)]
release-1.5.5 tag

12 years agonginx-1.5.5-RELEASE release-1.5.5
Maxim Dounin [Tue, 17 Sep 2013 13:31:00 +0000 (17:31 +0400)]
nginx-1.5.5-RELEASE

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.