Commit Graph

2202 Commits

Author SHA1 Message Date
Zhidao HONG
7b80186f09 Var: optimization to get rid of nxt_var_cache_find().
No functional changes.
2022-07-14 04:31:36 +08:00
Timo Stark
f83aef1aab Increased readtimeout for configuration endpoint.
Closes: <https://github.com/nginx/unit/issues/676>
2022-07-02 14:44:05 +02:00
Andrei Zeliankou
a3699557a3 Tests: minor improvements.
Added "go" availability check before trying to build an application.

update_action() method used were possible and fixed bug with
the relative path determination in test_static_chroot.py.

Templates optimization and style fixes.
2022-06-30 14:40:17 +01:00
Andrew Clayton
63667e2f9c Unit: removed a useless assignment.
As was pointed out by the cppcheck[0] static code analysis utility there
was a useless assignment in nxt_unit_request_read(). The size parameter
is passed in by value and was being modified without being used again.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:53:53 +02:00
Andrew Clayton
39819143ea Unit: avoided needlessly setting lib in nxt_unit_shm_open().
As was pointed out by the cppcheck[0] static code analysis utility, lib
was being set in nxt_unit_shm_open() regardless of platform when in fact
it's only used when (NXT_HAVE_MEMFD_CREATE || NXT_HAVE_SHM_OPEN).

Move the variable declaration & definition to be within the

  #if (NXT_HAVE_MEMFD_CREATE || NXT_HAVE_SHM_OPEN)

block.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:30:44 +02:00
Andrew Clayton
7a286ec079 Socket: removed useless port < 1 check.
In src/nxt_sockaddr.c::nxt_job_sockaddr_inet_parse() there is a check
that port > 0 then there is a check that port < 1 || port > 65535, well
we _know_ it can't be less than 1.
2022-06-22 00:30:44 +02:00
Andrew Clayton
29c7208526 Marked a couple of variables 'const'.
As was pointed out by the cppcheck[0] static code analysis utility we
can mark a couple of variables as 'const'. This acts as a hint to the
compiler about our intentions and the compiler will tell us when we
deviate from them.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:30:44 +02:00
Andrew Clayton
4418f99cd4 Constified numerous function parameters.
As was pointed out by the cppcheck[0] static code analysis utility we
can mark numerous function parameters as 'const'. This acts as a hint to
the compiler about our intentions and the compiler will tell us when we
deviate from them.

[0]: https://cppcheck.sourceforge.io/
2022-06-22 00:30:44 +02:00
Konstantin Pavlov
637a2006a6 Packages: cleanup targets that are not supported anymore. 2022-06-20 18:20:11 +04:00
Alejandro Colomar
c3e40ae932 Static: Fixed finding the file extension.
The code for finding the extension made a few assumptions that are
no longer true.  It didn't account for pathnames that didn't
contain '/', including the empty string, or the NULL string.  That
code was used with "share", which always had a '/', but now it's
also used with "index", which should not have a '/' in it.

This fix works by limiting the search to the beginning of the
string, so that if no '/' is found in it, it doesn't continue
searching before the beginning of the string.

This also happens to work for NULL.  It is technically Undefined
Behavior, as we rely on `NULL + 0 == NULL` and `NULL - NULL == 0`.
But that is the only sane behavior for an implementation, and all
existing POSIX implementations will Just Work for this code.

Relying on this UB is useful, because we don't need to add an
explicit check for NULL, and therefore we have faster code.
Although the current code can't have a NULL, I expect that when we
add support for variables in the index, it will be NULL in some
cases.

Link: <https://stackoverflow.com/q/67291052/6872717>

The same code seems to be defined behavior in C++, which normally
will share implementation in the compiler for these cases, and
therefore it is really unlikely to be in trouble.

Link: <https://stackoverflow.com/q/59409034/6872717>
2022-06-21 12:47:01 +02:00
Konstantin Pavlov
d220eb2996 Packages: dropped /etc/unit directory.
It's never used.
2022-06-20 10:53:24 +04:00
Konstantin Pavlov
e42c52cff6 Switched changelogs to packaging alias instead of personal emails. 2022-06-20 18:21:43 +04:00
Zhidao HONG
045c05e468 Tests: forwarded header replacement tests. 2022-06-20 17:19:35 +08:00
Zhidao HONG
9d2672a701 Router: forwared header replacement. 2022-06-20 13:22:13 +08:00
Zhidao HONG
14dfa439ee Router: introduced nxt_http_forward_t.
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-20 13:16:25 +08:00
Zhidao HONG
fd38e69c3d Router: refactored nxt_router_conf_create().
No functional changes.
2022-06-20 13:11:34 +08:00
Zhidao HONG
6da74019a0 Tests: reworked client IP tests. 2022-06-20 13:58:04 +08:00
Andrei Zeliankou
7e64971cbe Version bump. 2022-06-17 09:46:30 +01:00
Zhidao HONG
6a8081d71e Var: relocated nxt_var_is_const() and nxt_var_raw().
No functional changes.
2022-06-15 14:27:50 +08:00
Andrei Zeliankou
862f51bcd8 Specified date of 1.27.0 release in changes.xml. 2022-06-08 13:12:51 +01:00
Max Romanov
b4540f0960 Removing unused tracking fields and functions.
The message tracking is unused since 1d84b9e4b459 commit.

This fixes the issue found by Coverity (CID 376263).
2022-06-07 13:59:45 +08:00
Zhidao HONG
df421e36b3 Router: removed unused code in nxt_router_conf_error().
No functional changes.
2022-06-07 13:43:38 +08:00
Zhidao HONG
0d2d40e231 Summary: Var: removing all async stuff.
No functional changes.
2022-06-02 09:36:35 +08:00
Zhidao HONG
4f16479482 HTTP: generalized uri encoding.
No functional changes.
2022-05-19 21:18:25 +08:00
Andrei Zeliankou
0d48fe73c4 Unit 1.27.0 release. 2022-06-02 13:37:14 +01:00
Andrei Zeliankou
3d1fa29f1d Generated Dockerfiles for Unit 1.27.0. 2022-06-02 12:31:55 +00:00
Andrei Zeliankou
cf9b5bdb35 Added version 1.27.0 CHANGES. 2022-06-02 13:30:52 +01:00
Andrei Zeliankou
bd80039e07 Node.js: fixed ES modules format in loader.mjs.
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-06-02 11:48:27 +01:00
Konstantin Pavlov
3d53bba5b3 Packaging: added support for RHEL 9. 2022-05-31 18:35:39 +04:00
Andrei Zeliankou
caa05887ff Logging a NULL pointer instead of passing it in the memcpy(). 2022-06-01 16:40:34 +01:00
Andrei Zeliankou
161230b955 Tests: improved test for $request_uri variable. 2022-06-01 16:40:27 +01:00
Artem Konev
0d5d81b271 Fixed minor issues in "changes.xml". 2022-06-01 14:54:13 +01:00
Andrei Zeliankou
880c8e51c3 Tests: removed deprecated ssl.PROTOCOL_TLSv1_2 constant. 2022-06-01 00:15:15 +01:00
Alejandro Colomar
aee8b9bfb2 Tests: Added tests for $request_uri. 2022-05-31 12:41:11 +02:00
Alejandro Colomar
9bf614cd08 Var: Added $request_uri (as in NGINX).
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-31 12:40:02 +02:00
Alejandro Colomar
8027e7ce0f Tests: added tests for "index" (string) option. 2022-05-30 12:42:18 +02:00
Alejandro Colomar
9af5f36951 Static: supporting new "index" option.
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-30 12:42:18 +02:00
Konstantin Pavlov
237ddbe177 Packaging: Go: use GO111MODULE=auto in build instructions. 2022-05-26 10:52:58 +04:00
Alejandro Colomar
02f50533c4 Static: returning 404 when "index" is a non-regular file.
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-26 19:31:08 +02:00
Alejandro Colomar
27ca67f0df Added const to remove unnecessary casts.
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-26 14:11:12 +02:00
Zhidao HONG
6271479610 HTTP: generalized argument and cookie parsing.
No functional changes.
2022-05-18 21:18:40 +08:00
Konstantin Pavlov
3e06ae3b34 Packages: ship README.md and CONTRIBUTING.md. 2022-05-16 17:22:40 +04:00
Alejandro Colomar
7662ec5f1b Wrapped debug code in '#if (NXT_DEBUG)'. 2022-05-17 12:41:18 +02:00
Alejandro Colomar
ba20fa3939 Fixed memcpy(dest, NULL, 0) Undefined Behavior.
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-17 12:39:41 +02:00
Konstantin Pavlov
b512eff4ac Packages: added Ubuntu 22.04 "jammy" support. 2022-05-05 13:25:52 +04:00
Alejandro Colomar
c60f678485 Tests: Added tests for empty "location". 2022-05-16 12:57:37 +02:00
Alejandro Colomar
7066acb2ce Supporting empty Location URIs.
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-16 12:57:37 +02:00
Artem Konev
bc639b50d1 Deleted extra line in README.md. 2022-05-16 11:16:08 +01:00
Alejandro Colomar
5302faace2 Renamed nxt_http_static_ctx_t field 'index' to 'share_idx'.
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-16 10:27:07 +02:00
Artem Konev
fa42d858a2 Adding GitHub-styled README and CONTRIBUTING files in Markdown. 2022-05-13 17:13:23 +01:00