summaryrefslogtreecommitdiffhomepage
path: root/src/http (follow)
AgeCommit message (Collapse)AuthorFilesLines
2012-11-26Gunzip: added missing ngx_http_clear_etag().Maxim Dounin1-0/+1
2012-11-26Request body: block write events while reading body.Maxim Dounin1-0/+2
If write events are not blocked, an extra write event might happen for various reasons (e.g. as a result of a http pipelining), resulting in incorrect body being passed to a post handler. The problem manifested itself with the dav module only, as this is the only module which reads the body from a content phase handler (in contrast to exclusive content handlers like proxy). Additionally, dav module used to dump core in such situations due to ticket #238. See reports here: http://mailman.nginx.org/pipermail/nginx-devel/2012-November/002981.html http://serverfault.com/questions/449195/nginx-webdav-server-with-auth-request
2012-11-26Request body: error checking fixes, negative rb->rest handling.Maxim Dounin1-2/+11
Negative rb->rest can't happen with current code, but it's good to have it handled anyway. Found by Coverity (CID 744846, 744847, 744848).
2012-11-26Request body: improved handling of incorrect chunked request body.Maxim Dounin2-5/+16
While discarding chunked request body in some cases after detecting request body corruption no error was returned, while it was possible to correctly return 400 Bad Request. If error is detected too late, make sure to properly close connection. Additionally, in ngx_http_special_response_handler() don't return body of 500 Internal Server Error to a client if ngx_http_discard_request_body() fails, but disable keepalive and continue.
2012-11-26Request body: fixed discard of chunked request body.Maxim Dounin1-1/+1
Even if there is no preread data, make sure to always call ngx_http_discard_request_body_filter() in case of chunked request body to initialize r->headers_in.content_length_n for later use.
2012-11-21Request body: unbreak build without debug.Maxim Dounin1-0/+2
2012-11-21Request body: chunked transfer encoding support.Maxim Dounin4-179/+548
2012-11-21Request body: recalculate size of a request body in scgi module.Maxim Dounin1-10/+16
This allows to handle requests with chunked body by scgi module, and also simplifies handling of various request body modifications.
2012-11-21Request body: $content_length variable to honor real body size.Maxim Dounin1-2/+37
This allows to handle requests with chunked body by fastcgi and uwsgi modules, and also simplifies handling of various request body modifications.
2012-11-21Request body: always use calculated size of a request body in proxy.Maxim Dounin1-16/+11
This allows to handle requests with chunked body, and also simplifies handling of various request body modifications.
2012-11-21Request body: adjust b->pos when chunked parsing done.Maxim Dounin1-0/+3
This is a nop for the current code, though will allow to correctly parse pipelined requests.
2012-11-21Request body: chunked parsing moved to ngx_http_parse.c from proxy.Maxim Dounin3-276/+277
No functional changes.
2012-11-21Request body: properly handle events while discarding body.Maxim Dounin1-7/+9
An attempt to call ngx_handle_read_event() before actually reading data from a socket might result in read event being disabled, which is wrong. Catched by body.t test on Solaris.
2012-11-21Request body: fixed socket leak on errors.Maxim Dounin1-10/+28
The r->main->count reference counter was always incremented in ngx_http_read_client_request_body(), while it is only needs to be incremented on positive returns.
2012-11-21Request body: code duplication reduced, no functional changes.Maxim Dounin1-25/+14
The r->request_body_in_file_only with empty body case is now handled in ngx_http_write_request_body().
2012-11-21Request body: $request_body variable generalization.Maxim Dounin1-5/+13
The $request_body variable was assuming there can't be more than two buffers. While this is currently true due to request body reading implementation details, this is not a good thing to depend on and may change in the future.
2012-11-21Request body: fixed "501 Not Implemented" error handling.Maxim Dounin2-3/+4
It is not about "Method" but a generic message, and is expected to be used e.g. if specified Transfer-Encoding is not supported. Fixed message to match RFC 2616. Additionally, disable keepalive on such errors as we won't be able to read request body correctly if we don't understand Transfer-Encoding used.
2012-11-21Dav: fixed segfault on PUT if body was already read (ticket #238).Maxim Dounin1-0/+5
If request body reading happens with different options it's possible that there will be no r->request_body->temp_file available (or even no r->request_body available if body was discarded). Return internal server error in this case instead of committing suicide by dereferencing a null pointer.
2012-11-17Trailing whitespace fix.Maxim Dounin1-1/+1
2012-11-16Upstream: better detection of connect() failures with kqueue.Maxim Dounin1-2/+9
Pending EOF might be reported on both read and write events, whichever comes first, so check both of them. Patch by Yichun Zhang (agentzh), slightly modified.
2012-11-16Upstream: honor the "down" flag for a single server.Ruslan Ermilov1-0/+4
If an upstream block was defined with the only server marked as "down", e.g. upstream u { server 127.0.0.1:8080 down; } an attempt was made to contact the server despite the "down" flag. It is believed that immediate 502 response is better in such a case, and it's also consistent with what is currently done in case of multiple servers all marked as "down".
2012-11-16Variables $request_time and $msec.Ruslan Ermilov1-0/+63
Log module counterparts are preserved for efficiency.
2012-11-16Version bump.Ruslan Ermilov1-1/+1
2012-10-30Event pipe: fixed handling of buf_to_file data.Maxim Dounin1-0/+1
Input filter might free a buffer if there is no data in it, and in case of first buffer (used for cache header and request header, aka p->buf_to_file) this resulted in cache corruption. Buffer memory was reused to read upstream response before headers were written to disk. Fix is to avoid moving pointers in ngx_event_pipe_add_free_buf() to a buffer start if we were asked to free a buffer used by p->buf_to_file. This fixes occasional cache file corruption, usually resulted in "cache file ... has md5 collision" alerts. Reported by Anatoli Marinov.
2012-10-29Variables $connection and $connection_requests.Maxim Dounin2-23/+53
Log module counterparts are removed as they aren't used often and there is no need to preserve them for efficiency.
2012-10-23ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory forValentin Bartenev1-0/+14
idle connections. This behaviour is consistent with the ngx_http_set_keepalive() function and it should decrease memory usage in some cases (especially if epoll/rtsig is used).
2012-10-18Gunzip: fixed r->gzip_ok check.Maxim Dounin1-1/+1
2012-10-05OCSP stapling: properly check if there is ssl.ctx.Maxim Dounin1-1/+1
This fixes segfault if stapling was enabled in a server without a certificate configured (and hence no ssl.ctx).
2012-10-03Variable $bytes_sent.Maxim Dounin1-0/+26
It replicates variable $bytes_sent as previously available in log module only. Patch by Benjamin Grössing (with minor changes).
2012-10-03Log: $apache_bytes_sent removed.Maxim Dounin1-8/+0
It was renamed to $body_bytes_sent in nginx 0.3.10 and the old name is deprecated since then.
2012-10-03SSL: the "ssl_verify_client" directive parameter "optional_no_ca".Maxim Dounin2-2/+5
This parameter allows to don't require certificate to be signed by a trusted CA, e.g. if CA certificate isn't known in advance, like in WebID protocol. Note that it doesn't add any security unless the certificate is actually checked to be trusted by some external means (e.g. by a backend). Patch by Mike Kazantsev, Eric O'Connor.
2012-10-03Version bump.Maxim Dounin1-1/+1
2012-10-01OCSP stapling: ssl_stapling_verify directive.Maxim Dounin2-2/+12
OCSP response verification is now switched off by default to simplify configuration, and the ssl_stapling_verify allows to switch it on. Note that for stapling OCSP response verification isn't something required as it will be done by a client anyway. But doing verification on a server allows to mitigate some attack vectors, most notably stop an attacker from presenting some specially crafted data to all site clients.
2012-10-01OCSP stapling: loading OCSP responses.Maxim Dounin2-5/+57
This includes the ssl_stapling_responder directive (defaults to OCSP responder set in certificate's AIA extension). OCSP response for a given certificate is requested once we get at least one connection with certificate_status extension in ClientHello, and certificate status won't be sent in the connection in question. This due to limitations in the OpenSSL API (certificate status callback is blocking). Note: SSL_CTX_use_certificate_chain_file() was reimplemented as it doesn't allow to access the certificate loaded via SSL_CTX.
2012-10-01OCSP stapling: ssl_stapling_file support.Maxim Dounin2-0/+27
Very basic version without any OCSP responder query code, assuming valid DER-encoded OCSP response is present in a ssl_stapling_file configured. Such file might be produced with openssl like this: openssl ocsp -issuer root.crt -cert domain.crt -respout domain.staple \ -url http://ocsp.example.com
2012-10-01OCSP stapling: ssl_trusted_certificate directive.Maxim Dounin2-3/+22
The directive allows to specify additional trusted Certificate Authority certificates to be used during certificate verification. In contrast to ssl_client_certificate DNs of these cerificates aren't sent to a client during handshake. Trusted certificates are loaded regardless of the fact whether client certificates verification is enabled as the same certificates will be used for OCSP stapling, during construction of an OCSP request and for verification of an OCSP response. The same applies to a CRL (which is now always loaded).
2012-09-26Version bump.Maxim Dounin1-1/+1
2012-09-11Gunzip: removed nginx.h leftover include.Maxim Dounin1-1/+0
2012-09-10Gunzip filter import.Maxim Dounin1-0/+677
2012-09-10Gzip static: "always" parameter in "gzip_static" directive.Maxim Dounin1-10/+32
With "always" gzip static returns gzipped content in all cases, without checking if client supports it. It is useful if there are no uncompressed files on disk anyway.
2012-09-10Memcached: memcached_gzip_flag directive.Maxim Dounin1-8/+56
This directive allows to test desired flag as returned by memcached and sets Content-Encoding to gzip if one found. This is reimplementation of patch by Tomash Brechko as available on http://openhack.ru/. It should be a bit more correct though (at least I think so). In particular, it doesn't try to detect if we are able to gunzip data, but instead just sets correct Content-Encoding.
2012-09-05Write filter: replaced unneeded loop with one to free chains.Maxim Dounin1-11/+7
Noted by Gabor Lekeny.
2012-09-03Limit req: fix of rbtree node insertion on hash collisions.Valentin Bartenev1-4/+4
The rbtree used in ngx_http_limit_req_module has two level of keys, the top is hash, and the next is the value string itself. However, when inserting a new node, only hash has been set, while the value string has been left empty. The bug was introduced in r4419 (1.1.14). Found by Charles Chen.
2012-08-30Fixed strict aliasing bugs when dealing with IPv4-mapped IPv6 addressesRuslan Ermilov3-3/+29
(closes #201).
2012-08-28Fixed the "include" directive.Ruslan Ermilov2-19/+4
The "include" directive should be able to include multiple files if given a filename mask. Fixed this to work for "include" directives inside the "map" or "types" blocks. The "include" directive inside the "geo" block is still not fixed.
2012-08-27Version bump.Ruslan Ermilov1-1/+1
2012-08-17Mark logically dead code with corresponding comment.Andrey Belov1-0/+1
Found by Coverity.
2012-08-17Mp4: removed restriction to avc1/mp4a formats (ticket #194).Maxim Dounin1-8/+0
2012-08-16Geo: fixed handling of ranges without default set.Maxim Dounin1-4/+4
The bug had appeared in 0.8.43 (r3653). Patch by Weibin Yao.
2012-08-16Map: fixed optimization of variables as values.Maxim Dounin1-8/+2
Previous code incorrectly used ctx->var_values as an array of pointers to ngx_http_variable_value_t, but the array contains structures, not pointers. Additionally, ctx->var_values inspection failed to properly set var on match.