summaryrefslogtreecommitdiffhomepage
AgeCommit message (Collapse)AuthorFilesLines
2022-06-20Router: forwared header replacement.Zhidao HONG8-75/+250
2022-06-20Router: introduced nxt_http_forward_t.Zhidao HONG4-40/+42
This makes the replacement of forwarded request header like client_ip and protocol more generic. It's a prerequirement for protocol replacement. No functional changes.
2022-06-20Router: refactored nxt_router_conf_create().Zhidao HONG1-30/+30
No functional changes.
2022-06-20Tests: reworked client IP tests.Zhidao HONG1-17/+38
2022-06-17Version bump.Andrei Zeliankou2-2/+31
2022-06-15Var: relocated nxt_var_is_const() and nxt_var_raw().Zhidao HONG2-18/+18
No functional changes.
2022-06-08Specified date of 1.27.0 release in changes.xml.Andrei Zeliankou1-2/+2
2022-06-07Removing unused tracking fields and functions.Max Romanov7-172/+0
The message tracking is unused since 1d84b9e4b459 commit. This fixes the issue found by Coverity (CID 376263).
2022-06-07Router: removed unused code in nxt_router_conf_error().Zhidao HONG1-6/+0
No functional changes.
2022-06-02Summary: Var: removing all async stuff.Zhidao HONG3-26/+14
No functional changes.
2022-05-19HTTP: generalized uri encoding.Zhidao HONG3-103/+126
No functional changes.
2022-06-02Unit 1.27.0 release.Andrei Zeliankou1-0/+1
2022-06-02Generated Dockerfiles for Unit 1.27.0.1.27.0Andrei Zeliankou8-8/+8
2022-06-02Added version 1.27.0 CHANGES.Andrei Zeliankou1-0/+36
2022-06-02Node.js: fixed ES modules format in loader.mjs.Andrei Zeliankou2-2/+8
Before Node.js v16.14.0 the "format" value in defaultResolve was ignored so error was hidden. For more information see: https://github.com/nodejs/node/pull/40980
2022-05-31Packaging: added support for RHEL 9.Konstantin Pavlov2-1/+13
2022-06-01Logging a NULL pointer instead of passing it in the memcpy().Andrei Zeliankou1-9/+19
2022-06-01Tests: improved test for $request_uri variable.Andrei Zeliankou1-2/+2
2022-06-01Fixed minor issues in "changes.xml".Artem Konev1-8/+9
2022-06-01Tests: removed deprecated ssl.PROTOCOL_TLSv1_2 constant.Andrei Zeliankou1-2/+5
2022-05-31Tests: Added tests for $request_uri.Alejandro Colomar1-0/+9
2022-05-31Var: Added $request_uri (as in NGINX).Alejandro Colomar2-0/+26
This supports a new variable $request_uri that contains the path and the query (See RFC 3986, section 3). Its contents are percent encoded. This is useful for example to redirect HTTP to HTTPS: { "return": "301", "location": "https://$host$request_uri" } When <http://example.com/foo%23bar?baz> is requested, the server redirects to <https://example.com/foo%23bar?baz>. === Testing: //diff --git a/src/nxt_http_return.c b/src/nxt_http_return.c //index 82c9156..adeb3a1 100644 //--- a/src/nxt_http_return.c //+++ b/src/nxt_http_return.c //@@ -196,6 +196,7 @@ nxt_http_return_send_ready(nxt_task_t *task, void *obj, void *data) // field->value = ctx->encoded.start; // field->value_length = ctx->encoded.length; // } //+ fprintf(stderr, "ALX: target[%1$i]: <%2$.*1$s>\n", (int)r->target.length, r->target.start); // // r->state = &nxt_http_return_send_state; // { "listeners": { "*:81": { "pass": "routes/ru" } }, "routes": { "ru": [{ "action": { "return": 301, "location": "$request_uri" } }] } } $ curl -i http://localhost:81/*foo%2Abar?baz#arg HTTP/1.1 301 Moved Permanently Location: /*foo%2Abar?baz Server: Unit/1.27.0 Date: Mon, 30 May 2022 16:04:30 GMT Content-Length: 0 $ sudo cat /usr/local/unit.log | grep ALX ALX: target[15]: </*foo%2Abar?baz>
2022-05-30Tests: added tests for "index" (string) option.Alejandro Colomar1-0/+28
2022-05-30Static: supporting new "index" option.Alejandro Colomar5-10/+39
This supports a new option "index" that configures a custom index file name to be served when a directory is requested. This initial support only allows a single fixed string. An example: { "share": "/www/data/static/$uri", "index": "lookatthis.htm" } When <example.com/foo/bar/> is requested, </www/data/static/foo/bar/lookatthis.html> is served. Default is "index.html". === nxt_conf_validator.c: Accept "index" as a member of "share", and make sure it's a string. === I tried this feature in my own computer, where I tried the following: - Setting "index" to "lookatthis.htm", and check that the correct file is being served (check both a different name and a different extension). - Not setting "index", and check that <index.html> is being served. - Settind "index" to an array of strings, and check that the configuration fails: { "error": "Invalid configuration.", "detail": "The \"index\" value must be a string, but not an array." }
2022-05-26Packaging: Go: use GO111MODULE=auto in build instructions.Konstantin Pavlov2-2/+2
2022-05-26Static: returning 404 when "index" is a non-regular file.Alejandro Colomar1-1/+3
Before this patch, if "index" was a file, but not a regular file nor a directory, so it may have been for example a FIFO, Unit returned 404. But if "index" was a directory, Unit returned 301. For consistency, this patch makes Unit return 404 for every non-regular file, including directories.
2022-05-26Added const to remove unnecessary casts.Alejandro Colomar1-5/+5
Casts are usually very dangerous, disabling most compiler warnings and basically removing type safety. This change adds 'const' to a pointer where we don't need to write, improving type safety, and that also allows removing some casts.
2022-05-18HTTP: generalized argument and cookie parsing.Zhidao HONG3-291/+291
No functional changes.
2022-05-16Packages: ship README.md and CONTRIBUTING.md.Konstantin Pavlov6-7/+13
2022-05-17Wrapped debug code in '#if (NXT_DEBUG)'.Alejandro Colomar1-1/+4
2022-05-17Fixed memcpy(dest, NULL, 0) Undefined Behavior.Alejandro Colomar1-1/+1
nxt_str_null() setted the loc.start pointer to NULL, which was being passed to memcpy(3) through nxt_debug(). That caused Undefined Behavior, so we now pass an empty string.
2022-05-05Packages: added Ubuntu 22.04 "jammy" support.Konstantin Pavlov1-0/+14
2022-05-16Tests: Added tests for empty "location".Alejandro Colomar1-0/+15
2022-05-16Supporting empty Location URIs.Alejandro Colomar4-30/+33
An empty string in Location was being handled specially by not sending a Location header. This may occur after variable resolution, so we need to consider this scenario. The obsolete RFC 2616 defined the Location header as consisting of an absolute URI <https://www.rfc-editor.org/rfc/rfc2616#section-14.30>, which cannot be an empty string. However, the current RFC 7231 allows the Location to be a relative URI <https://www.rfc-editor.org/rfc/rfc7231#section-7.1.2>, and a relative URI may be an empty string <https://stackoverflow.com/a/43338457>. Due to these considerations, this patch allows sending an empty Location header without handling this case specially. This behavior will probably be more straightforward to users, too. It also simplifies the code, which is now more readable, fast, and conformant to the current RFC. We're skipping an allocation at request time in a common case such as "action": {"return": 404}
2022-05-16Deleted extra line in README.md.Artem Konev1-1/+0
2022-05-16Renamed nxt_http_static_ctx_t field 'index' to 'share_idx'.Alejandro Colomar1-7/+7
Having a configurable index filename will require adding an index field to this structure. The most natural name for that field is 'index', so the current index field should be renamed to allow for that. A sensible name is 'share_idx', since it's the index of the shares array in 'nxt_http_static_conf_t'. Instead of 'share_index' I opted for the shorter 'share_idx'. Also, when 'index' allows an array of filenames in a following commit, another similar variable 'index_idx' should be created, and having a different prefix and suffix seems more readable than for example 'index_index'.
2022-05-13Adding GitHub-styled README and CONTRIBUTING files in Markdown.Artem Konev4-24/+274
2022-05-13Tests: added tests for Ruby stream IO.close().Andrei Zeliankou3-7/+8
2022-05-13Ruby: added stream IO "close" required by Rack specification.Zhidao HONG2-0/+16
This closes #654 issue on Github.
2022-05-11Regenerated Dockerfiles.Konstantin Pavlov8-10/+42
2022-05-11Docker: bumped language versions.Konstantin Pavlov1-2/+2
2022-05-12Using SSL_OP_IGNORE_UNEXPECTED_EOF.Sergey Kandaurov1-0/+5
A new behaviour was introduced in OpenSSL 1.1.1e, when a peer does not send close_notify before closing the connection. Previously, it was to return SSL_ERROR_SYSCALL with errno 0, known since at least OpenSSL 0.9.7, and is handled gracefully in unitd. Now it returns SSL_ERROR_SSL with a distinct reason SSL_R_UNEXPECTED_EOF_WHILE_READING ("unexpected eof while reading"). This leads to critical errors seen in nginx within various routines such as SSL_do_handshake(), SSL_read(), SSL_shutdown(). The behaviour was restored in OpenSSL 1.1.1f, but presents in OpenSSL 3.0 by default. Use of the SSL_OP_IGNORE_UNEXPECTED_EOF option added in OpenSSL 3.0 allows setting a compatible behaviour to return SSL_ERROR_ZERO_RETURN: https://git.openssl.org/?p=openssl.git;a=commitdiff;h=09b90e0 See for additional details: https://github.com/openssl/openssl/issues/11381
2022-05-12Using OPENSSL_SUPPRESS_DEPRECATED.Sergey Kandaurov1-0/+3
The macro is used to suppress deprecation warnings with OpenSSL 3.0. Unlike OPENSSL_API_COMPAT, it works well with OpenSSL built with no-deprecated. In particular, it doesn't unhide various macros in OpenSSL includes, which are meant to be hidden under OPENSSL_NO_DEPRECATED.
2022-05-10Tests: added test for "SCRIPT_NAME" variable in Ruby.Andrei Zeliankou2-0/+2
2022-03-09Ruby: added the Rack environment parameter "SCRIPT_NAME".Zhidao HONG3-4/+48
2022-05-09Tests: added more tests with reconfiguration.Andrei Zeliankou4-51/+155
2022-05-03Added .gitignore.Alejandro Colomar1-0/+4
2022-05-03Fixed #define style.Alejandro Colomar41-518/+259
We had a mix of styles for declaring function-like macros: Style A: #define \ foo() \ do { \ ... \ } while (0) Style B: #define foo() \ do { \ ... \ } while (0) We had a similar number of occurences of each style: $ grep -rnI '^\w*(.*\\' | wc -l 244 $ grep -rn 'define.*(.*)' | wc -l 239 (Those regexes aren't perfect, but a very decent approximation.) Real examples: $ find src -type f | xargs sed -n '/^nxt_double_is_zero/,/^$/p' nxt_double_is_zero(f) \ (fabs(f) <= FLT_EPSILON) $ find src -type f | xargs sed -n '/define nxt_http_field_set/,/^$/p' #define nxt_http_field_set(_field, _name, _value) \ do { \ (_field)->name_length = nxt_length(_name); \ (_field)->value_length = nxt_length(_value); \ (_field)->name = (u_char *) _name; \ (_field)->value = (u_char *) _value; \ } while (0) I'd like to standardize on a single style for them, and IMO, having the identifier in the same line as #define is a better option for the following reasons: - Programmers are used to `#define foo() ...` (readability). - One less line of code. - The program for finding them is really simple (see below). function grep_ngx_func() { if (($# != 1)); then >&2 echo "Usage: ${FUNCNAME[0]} <func>"; return 1; fi; find src -type f \ | grep '\.[ch]$' \ | xargs grep -l "$1" \ | sort \ | xargs pcregrep -Mn "(?s)^\$[\w\s*]+?^$1\(.*?^}"; find src -type f \ | grep '\.[ch]$' \ | xargs grep -l "$1" \ | sort \ | xargs pcregrep -Mn "(?s)define $1\(.*?^$" \ | sed -E '1s/^[^:]+:[0-9]+:/&\n\n/'; } $ grep_ngx_func Usage: grep_ngx_func <func> $ grep_ngx_func nxt_http_field_set src/nxt_http.h:98: #define nxt_http_field_set(_field, _name, _value) \ do { \ (_field)->name_length = nxt_length(_name); \ (_field)->value_length = nxt_length(_value); \ (_field)->name = (u_char *) _name; \ (_field)->value = (u_char *) _value; \ } while (0) $ grep_ngx_func nxt_sprintf src/nxt_sprintf.c:56: u_char * nxt_cdecl nxt_sprintf(u_char *buf, u_char *end, const char *fmt, ...) { u_char *p; va_list args; va_start(args, fmt); p = nxt_vsprintf(buf, end, fmt, args); va_end(args); return p; } ................ Scripted change: ................ $ find src -type f \ | grep '\.[ch]$' \ | xargs sed -i '/define *\\$/{N;s/ *\\\n/ /;s/ //}'
2022-04-28Tests: Added tests for variables in "location".Alejandro Colomar1-0/+19
2022-04-28Tests: Changed tests to accept variables in "location".Alejandro Colomar1-4/+4