Commit Graph

2062 Commits

Author SHA1 Message Date
Alejandro Colomar 3422e81ab6 Added missing inline keyword. 2022-07-18 19:09:30 +02:00
Alejandro Colomar 14857442c6 Added missing inline keyword. 2022-07-18 19:09:30 +02:00
Alejandro Colomar 6ba39ccf9b Fixed incorrect code.
The #endif was misplaced by accident during a refactor:
<https://github.com/nginx/unit/commit/029942f4eb7196c2cff0d0e26bc6ff274138f7d8>.

clang(1)'s -Wunreachable-code-break (implied by -Weverything) catches
that, but it is only produced for code compiled without support
for Unix sockets, which is probably the reason it was undetected:
no-one seems to be compiling Unit without Unix sockets support (at
least with clang(1)).
2022-07-18 19:09:30 +02:00
Alejandro Colomar 5015b05fc4 Replaced Linux syscall macros by libc macros.
User-space programs should use the SYS_*form, as documented in
syscall(2).  That also adds compatibility to non-Linux systems.
2022-07-18 19:09:30 +02:00
Alejandro Colomar 0d15cbd5b6 Removed unnecessary include.
Some OSes, as Linux, provide FIONBIO in <sys/ioctl.h>.  Others,
such as the BSDs and Illumos, provide it in <sys/filio.h>, but
they all include that header from <sys/ioctl.h>, so for this test,
we can simplify and just include <sys/ioctl.h>.
2022-07-18 19:09:30 +02:00
Alejandro Colomar c8d9106a0d Removed code used when NXT_HAVE_POSIX_SPAWN is false.
posix_spawn(3POSIX) was introduced by POSIX.1d
(IEEE Std 1003.1d-1999), and was later consolidated in
POSIX.1-2001, requiring it in all POSIX-compliant systems.
It's safe to assume it's always available, more than 20 years
after its standardization.

Link: <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/spawn.h.html>
2022-07-18 19:09:30 +02:00
Alejandro Colomar 26a5af8591 Removed duplicate handling of './configure --help'.
That is already handled in auto/options.  It is better suited
there, since it's an option, and not a module, and also because it
makes use of variables declared there.
2022-07-18 18:33:59 +02:00
Zhidao HONG 8c5e2d5ce5 HTTP: added more variables.
This commit adds the following variables:
$remote_addr, $time_local, $request_line, $status,
$body_bytes_sent, $header_referer, $header_user_agent.
2022-07-14 04:34:05 +08:00
Andrei Zeliankou d358b1d448 Tests: added tests for dynamic variables. 2022-07-14 11:50:41 +01:00
Zhidao HONG 45b89e3257 Var: dynamic variables support.
This commit adds the variables $arg_NAME, $header_NAME, and $cookie_NAME.
2022-07-14 04:32:49 +08:00
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