Age | Commit message (Collapse) | Author | Files | Lines |
|
|
|
|
|
|
|
Closes: https://github.com/nginx/unit/issues/915
Closes: https://github.com/nginx/unit/issues/1178
|
|
This is a temporary support for chunked request bodies by converting
to Content-Length. This allows for processing of such requests until
a more permanent solution is developed.
A new configuration option "chunked_transform" has been added to enable
this feature. The option can be set as follows:
{
"settings": {
"chunked_transform": true
}
}
By default, this option is set to false, which retains the current
behaviour of rejecting chunked requests with a '411 Length Required'
status code.
Please note that this is an experimental implementation.
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
|
|
It's prepared for the subsequent patch.
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
|
|
Previously, Unit didn't move the buffer pointer when parsing chunked
data because the buffer was not used after sent. It's used for upstream
response. With the new requirement to support request chunked body,
the buffer might be used for pipeline request, so it's necessary to move
the pos pointer while parsing.
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
|
|
* new subcommand for "export" in CLI
* new cmd submodule for exporting config tarballs
* logic to also output to stdout
* README additions
* limitations documented
Signed-off-by: Ava Hahn <a.hahn@f5.com>
|
|
* application subcommand UI schema
* application subcommand handler
* additions to unit-client-rs to expose application API
* elaborate on OpenAPI error handling
* adds wasm and wasi app schemas to OpenAPI Schema
* updates tools/unitctl OpenAPI library
* many linter fixes
* README.md updates
Signed-off-by: Ava Hahn <a.hahn@f5.com>
|
|
They are more readable.
And we had a mix of both styles; there wasn't really a consistent style.
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
This directory should exist already in the system, and if not, it should
(and will) be created at run time, not at install time.
It triggered a warning in Alpine Linux's packaging system:
ERROR: unit*: Packages must not put anything under /var/run
Fixes: 5a37171f733f ("Added default values for pathnames.")
Fixes: 57fc9201cb91 ("Socket: Created control socket & pid file directories.")
Closes: <https://github.com/nginx/unit/issues/742>
Reported-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Cc: Liam Crilly <liam@nginx.com>
Cc: Konstantin Pavlov <thresh@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
Build systems should not attempt to create $runstatedir (or anything
under it). Doing so causes warnings in packaging systems, such as in
Alpine Linux, as reported by Andy.
But unitd(8) can be configured to be installed under /opt, or other
trees, where no directories exist before hand. Expecting that the user
creates the entire directory trees that unit will need is a bit
unreasonable. Instead, let's just create any directories that we need,
with all their parents, at run time.
Fixes: 57fc9201cb91 ("Socket: Created control socket & pid file directories.")
Link: <https://github.com/nginx/unit/issues/742>
Reported-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Acked-by: Konstantin Pavlov <thresh@nginx.com>
Cc: Liam Crilly <liam@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
The previous code attempted to mkdir(""), that is an empty string.
Since "/" necessarily exists, just goto out_free.
Fixes: 57fc9201cb91 ("Socket: Created control socket & pid file directories.")
Link: <https://github.com/nginx/unit/issues/742>
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Cc: Liam Crilly <liam@nginx.com>
Cc: Konstantin Pavlov <thresh@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
This refactor isn't very appealing alone, but it prepares the code for
the following commits.
Link: <https://github.com/nginx/unit/issues/742>
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Cc: Liam Crilly <liam@nginx.com>
Cc: Konstantin Pavlov <thresh@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
That is, accept "/", or relative path names of a single byte.
Fixes: e2b53e16c60b ("Added "rootfs" feature.")
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
This avoids breaking a long line.
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
That branch was to avoid an infinite loop on the slash. However, we can
achieve the same by using a +1 to make sure we advance at least 1 byte
in each iteration.
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
"all" is too generic of an attribute to be meaningful. In the context
of mkdir(), "parents" is used for this meaning, as in mkdir -p, so it
should be more straightforward to readers.
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
"dirname" is the usual way to refer to the directory part of a path
name. See for example dirname(1), or the dirname builtin in several
languages. Also, in the context of mkdir(), "parents" is used to refer
to mkdir -p, which is too similar to "parent", so it can lead to
confusion.
Tested-by: Andy Postnikov <apostnikov@gmail.com>
Tested-by: Andrew Clayton <a.clayton@nginx.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
|
|
* add body and text to github release for unitctl
Signed-off-by: Ava Hahn <a.hahn@f5.com>
|
|
While at it, follow the njs move to github to fetch sources.
|
|
|
|
The 'Group' and 'BuildRoot' tags have been declared as deprecated by the
Fedora project.
Also, to quote the Fedora Packaging Guidelines
The contents of the buildroot SHOULD NOT be removed in the first line
of %install.
The %defattr directive in the %files list SHOULD ONLY be used when
setting a non-default value, or to reset to the default value after
having set a non-default value.
Link: <https://fedoraproject.org/wiki/RPMGroups>
Link: <https://fedoraproject.org/wiki/Phase_out_buildroot_tag_(draft)>
Link: <https://fedoraproject.org/wiki/Archive:PackagingDrafts/BuildRoot>
Link: <https://docs.fedoraproject.org/en-US/packaging-guidelines/#_tags_and_sections>
[ Tweaked subject & added commit message - Andrew ]
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
[ Tweaked subject prefix - Andrew ]
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
The various .bin files are in DOS format with trailing ^Ms (CRs) and
should be ignored for whitespace issues.
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
Signed-off-by: Arjun <pkillarjun@protonmail.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
[ Some small edits - Andrew ]
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
Signed-off-by: Arjun <pkillarjun@protonmail.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
Signed-off-by: Arjun <pkillarjun@protonmail.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
Signed-off-by: Arjun <pkillarjun@protonmail.com>
Reviewed-by: Andrew Clayton <a.clayton@nginx.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
This was found via MSan.
In nxt_http_fields_hash() we setup a nxt_lvlhsh_query_t structure and
initialise a couple of its members.
At some point we call
lhq->proto->alloc(lhq->pool, nxt_lvlhsh_bucket_size(lhq->proto));
Which in this case is
void *
nxt_lvlhsh_alloc(void *data, size_t size)
{
return nxt_memalign(size, size);
}
So even though lhq.ppol wasn't previously initialised we don't actually
use it in that particular function.
However MSan triggers on the fact that we are passing an uninitialised
value into that function.
Indeed, compilers will generally complain about such things, e.g
/* u.c */
struct t {
void *p;
int len;
};
static void test(void *p __attribute__((unused)), int len)
{
(void)len;
}
int main(void)
{
struct t t;
t.len = 42;
test(t.p, t.len);
return 0;
}
GCC and Clang will produce a -Wuninitialized warning.
But they won't catch the following...
/* u2.c */
struct t {
void *p;
int len;
};
static void _test(void *p __attribute__((unused)), int len)
{
(void)len;
}
static void test(struct t *t)
{
_test(t->p, t->len);
}
int main(void)
{
struct t t;
t.len = 42;
test(&t);
return 0;
}
Which is why we don't get a compiler warning about lhq.pool.
In this case initialising lhg.pool even though we don't use it here
seems like the right thing to do and maybe compilers will start being
able to catch these in the future.
Actually GCC with -fanalyzer does catch the above
$ gcc -Wall -Wextra -O0 -fanalyzer u2.c
u2.c: In function ‘test’:
u2.c:15:9: warning: use of uninitialized value ‘*t.p’ [CWE-457] [-Wanalyzer-use-of-uninitialized-value]
15 | _test(t->p, t->len);
| ^~~~~~~~~~~~~~~~~~~
‘main’: events 1-3
|
| 18 | int main(void)
| | ^~~~
| | |
| | (1) entry to ‘main’
| 19 | {
| 20 | struct t t;
| | ~
| | |
| | (2) region created on stack here
|......
| 23 | test(&t);
| | ~~~~~~~~
| | |
| | (3) calling ‘test’ from ‘main’
|
+--> ‘test’: events 4-5
|
| 13 | static void test(struct t *t)
| | ^~~~
| | |
| | (4) entry to ‘test’
| 14 | {
| 15 | _test(t->p, t->len);
| | ~~~~~~~~~~~~~~~~~~~
| | |
| | (5) use of uninitialized value ‘*t.p’ here
|
Signed-off-by: Arjun <pkillarjun@protonmail.com>
Link: <https://clang.llvm.org/docs/MemorySanitizer.html>
[ Commit message - Andrew ]
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
Commit 4fc50258b ("ci: Be more specific when to run the main Unit
checks") limited when the checks for the main ci run, on pushes to
master.
It should have done the same for pull-requests.
Fixes: 4fc50258b ("ci: Be more specific when to run the main Unit checks")
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
This patch does a number of things to help when failing to apply a new
configuration.
* The error body from the Unit control API is displayed which can have
useful troubleshooting information (when the version of curl supports it).
* When using the EDIT option, the temporary file with unapplied changes is
preserved so that the user can edit it again without losing their work.
* Editing JavaScript modules no longer requires that module to have been
enabled.
* Failure to apply edited JavaScript modules now rolls-back to the previous
configuration instead of deleting the module.
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
- With NGINX green (hex code 009639)
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
|
|
Otherwise string will be printed as:
"Could not unmount filesystems in tmpdir ({temporary_dir})"
|
|
ci-dev-distro-compiler.yaml already limits itself to running only when
relevant things are updated.
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
This allows you to then define strings like
static const nxt_str_t my_str = nxt_string("string");
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
The lists of files being unpacked are mostly useless but take a
significant amount of lines and bytes in e.g. CI jobs. E.g. in rhel9
packaging job, it's 39680 lines just for the unpacking of
wasmtime-v11.0.1-src, as compared to total 48945 lines of output.
|
|
dpkg-query -W will show information about the package if any other
package references it, even when the queried package is not installed.
The fix is to query for an actual status of a needed build dependency.
|
|
Forgotten in bf3d5759e and 260494626.
|
|
|
|
Closes #1254
Matching to the `unitd` command is a far more
reliable way to filtering docker instances that
are running Unit.
|
|
|
|
This adds a workflow for building Unit under Fedora Rawhide and Alpine
Edge with both GCC and Clang.
These are the development branches from which releases are cut.
This usually consists of the latest versions of software and will
hopefully catch new compiler issues and API breakages in the various
languages we support.
With Alpine and Clang that also gives us musl libc + clang coverage.
On Alpine we don't build the wasm and wasm-wasi-component modules,
mainly as this would require messing around with all the rust stuff and
building wasmtime from source (as there's no musl libc based packages)
and the wasm module is pretty small, any new compiler issues would
hopefully show up in the rest.
We _do_ build the wasm module with gcc and clang on Fedora. But not
wasm-wasi-component in the interests of time. Can be added at a later
date if deemed necessary.
We don't build the Perl language module on Fedora with clang due to the
Fedora (and probably Red Hat) Perl CFLAGS having incompatible with clang
flags.
We probably could work around it if we really wanted to, but not sure
it's worth it and on Red Hat/Fedora, GCC _is_ the system compiler.
On Alpine we also don't build the nodejs and go language modules as
there's nothing that actually gets compiled there and the _main_ reason
for building on Alpine is to get musl libc + clang coverage.
We're also not bothering with njs for now... can be revisited at a
later date.
Also no pytests, these should be well covered via other workflows for
example by running on latest Alpine releases.
Closes: https://github.com/nginx/unit/issues/949
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
You can always see the original names/addresses used by passing
--no-mailmap to the various git commands.
See gitmailmap(5)
Reviewed-by: Ava Hahn <a.hahn@f5.com>
Signed-off-by: Andrew Clayton <a.clayton@nginx.com>
|
|
* fix a few misspellings in unitctl CI workflow
* add unit testing job
* exclude unitd integration test from unit tests
* add workflow dispatch trigger
* add calls to get workflow dispatch version
Signed-off-by: Ava Hahn <a.hahn@f5.com>
|
|
Signed-off-by: Ava Hahn <a.hahn@f5.com>
|
|
Adds a GitHub Actions workflow that builds and releases unitctl binaries
when a tag prefixed with `unitctl/` is pushed.
Binaries are built on pull-requests that change any files within
`tools/unitctl`, on `master` branch pushes and when `unitctl/` prefixed
tags are pushed.
|