Commit Graph

1439 Commits

Author SHA1 Message Date
Joris Vink 6fbb6d188e swap macos to dynamic_lookup for undefined. 2024-03-25 19:09:48 -04:00
Joris Vink 1451e0fb43 style nits 2024-01-25 18:32:17 +01:00
Joris Vink 2179c5e5d3 Get rid of X509V3_EXT_add_alias().
The code shuffling to avoid using this is a bit more complex but
in the end perhaps a more sane approach.

diff from tb@ with minor cleanups from me
2024-01-25 18:23:43 +01:00
Joris Vink 16e283e932 Tabs are ok when decoding post data. 2024-01-14 13:01:23 +01:00
Joris Vink 3d88ea442e double acme timeout.
helps when having large installations of certs renewing at the same time.
2023-12-08 07:47:15 +01:00
Joris Vink f47f8d3f5e Missing options for HTTP method restrictions.
While Kore supports the OPTIONS method, it was not possible
to specify this in the route methods configuration.

Pointed out via discord.
2023-12-01 00:33:18 +01:00
Joris Vink 4df120704d Add stat64() to keymgr seccomp whitelist. 2023-11-28 09:23:08 +01:00
Joris Vink ff5a3982ce Add unlink and rename system calls to whitelist.
The keymgr uses these when handling entropy files.
2023-11-28 09:22:05 +01:00
Joris Vink dad6cc7bfe remove const from kore_runtime_count().
via some github PR, please don't make me interact with github too much.
2023-11-03 12:25:39 +01:00
Joris Vink 92e1ffcc10 remove -f from the cli, it is default. 2023-04-15 10:03:31 +02:00
Joris Vink e2dbda88b6 More seccomp work. 2023-04-06 10:16:06 +02:00
Joris Vink 208b0e868f add more syscalls to seccomp whitelists. 2023-04-06 09:33:48 +02:00
Joris Vink b1a3f2b0f8 fix single binary builds using PYTHON flavor. 2023-04-02 18:54:36 +02:00
Joris Vink 5dd2e922b3 Minor style nits from previous patches. 2023-04-02 18:51:10 +02:00
Alibek Omarov 54f6234e4f kodev: add support for generating Clang compilation database
* generated sources for assets are skipped through filepath check
  it's fine for now, but probably should be redone
* despite Kore supports JSON manipulation, kodev doesn't share this code
  so for now JSON file is being regenerated each build
* tested in Qt Creator, works OK
2023-04-02 18:51:03 +02:00
Alibek Omarov b3802d186d kodev: split generating compiler commandline to separate function
args array is supposed to hold 34 + CFLAGS_MAX pointers and like the original
function lacks any checks
2023-04-02 18:51:03 +02:00
Alibek Omarov f9e64ea5f0 kodev: small improvement, fix argv offset, making that argv[0] current command name
* so potential getopt users are happy now
* and no more very specific check for "create" command in main()
2023-04-02 18:51:03 +02:00
Joris Vink 15071f5a14 Change http_argument_urldecode().
Takes a new parameter now `qs`, if set to 1 it'll urldecode
according to how its always done it before.

If not set to 0 (for posts for example), the decoder will allow
\n and \r in addition to the other ones.
2023-03-12 23:35:18 +01:00
Joris Vink 21839aeaa2 demote sched_setaffinity log message to a notice. 2023-03-08 20:30:34 +01:00
Joris Vink d49d65dfa0 Reshuffle call to kore_platform_worker_setcpu().
Its better to place this inside of kore_worker_privsep(), this
way it'll be called for each process still and we can do it
before we sandbox the processes completely.
2023-03-08 20:28:49 +01:00
Joris Vink 21f466c8b6 Move CPU pinning to kore_worker_started().
When trying to pin a worker to a certain CPU, Kore will log
if it fails but still continue.

The problem is that it tried to do it a bit early and the logging
facilities were not yet setup, causing it to be unable to continue
if kore_log() was called too early.

By moving it to kore_worker_started() we are certain all facilities
are up and running correctly.
2023-03-08 20:11:49 +01:00
Joris Vink 66e893f1d4 Python API domain improvement.
Add redirect() method to add a redirect on a domain much like
in the Kore configuration file.

eg:

domain.redirect("^/account/(.*)$", 301, "https://site/account/$1")
2023-03-04 23:15:49 +01:00
Joris Vink 4e38d8a323 Allow clock_gettime64() if defined. 2023-03-01 17:11:27 +01:00
Joris Vink ecbc373433 revert some labbing in kore_realloc() 2023-03-01 16:41:33 +01:00
Joris Vink 13f9921679 cleanup 2023-03-01 16:35:11 +01:00
Joris Vink 3e944e106b Change kore_realloc() behaviour a bit.
If kore_realloc() decides that a new block must be allocated it will
explicitly call the new kore_free_zero() function to erase the
contents of the old block once the move is done.
2023-03-01 16:29:06 +01:00
Daniel Melani a5342a0120 Remove libressl log message.
The feature has been removed.
2023-02-22 19:15:42 +01:00
Joris Vink 83d1ff1013 Get rid of the openssl libcrypto allocation hooks.
In practice this rarely works anyway as other libs can end up
allocating things before we even reach main() as demonstrated
on the discord channel earlier.
2023-01-25 08:00:45 +01:00
Joris Vink 9fec810ce8 add lua to built-ins log 2023-01-23 21:56:49 +01:00
Joris Vink 4718bae098 Initial lua runtime.
Works enough so one can do basic configuration and handle HTTP.
2023-01-21 23:41:35 +01:00
Joris Vink 2f5d274059 Rework runtime init a little bit.
It was hardcoded that if KORE_USE_PYTHON was defined we would
look at the passed argument on the command-line as the python
script or module to be run.

This won't work when adding more runtimes.

So instead call a kore_runtime_resolve() function that in
turn calls each available runtime its resolve function.

That resolve function will check if its a script / module
that it can load, and if so will load it.

This way we can remove all those KORE_USE_PYTHON blocks in the
Kore startup path and we pave the way for lua.
2023-01-16 21:00:01 +01:00
Joris Vink d21c0aab5f Call kore_tls_init() earlier at startup. 2023-01-06 10:54:07 +01:00
Joris Vink a421e7a9cd Add memory protection with KORE_MEM_GUARD.
When KORE_MEM_GUARD is set in the environment when Kore is started
it will enable a few memory protection techniques for all kore pools:

1) The metadata is placed away from the actual user pointer returned.

2) Each entry in a pool is placed in such a way that it is followed
   immediately by a guard page which has PROT_NONE. Accessing a guard
   page will cause an immediate crash.

3) Each entry is marked with PROT_NONE until it is allocated. Once it
   is returned to a pool it becomes PROT_NONE again, protecting against
   use after frees.

This commit also removes the magic goo from the mem facitilies such
as kore_malloc and friends and moves these as canaries into the kore
pool facilities instead.

Note that using this will increase memory pressure and decrease performance.

It is recommended to enable this during development to catch bugs.
2023-01-05 22:47:29 +01:00
Joris Vink 922ce7fefb Force OpenSSL to use Kore allocators.
LibreSSL does not support this, which is fair as its designed
for OpenBSD which has malloc and friends that do nice things.
2023-01-05 19:23:24 +01:00
Joris Vink 4ecd6d5603 Add kore_platform_random_uint32(). 2023-01-04 11:48:19 +01:00
Joris Vink 7b48959c32 Python HTTP API improvement: add req.headers()
Calling req.headers() will return all the request headers in
a dictionary to the caller.
2022-12-29 12:58:43 +01:00
Joris Vink 7a6753ca33 Force lowercase on internal HTTP header names. 2022-12-29 12:58:21 +01:00
Joris Vink 46af5aa11b more workarounds for curl 7.87 2022-12-28 16:05:14 +01:00
Joris Vink 7f27677904 work around curl 7.87 curl_easy_setopt() being broken. 2022-12-28 16:04:18 +01:00
Joris Vink f59ee8e29e constify another RSA pointer. 2022-12-28 15:55:19 +01:00
Joris Vink f82e4fe967 kill debug 2022-12-28 15:49:42 +01:00
Joris Vink 8b701a9f0e Change how we handle EVP_PKEY for privsep.
We used to just call EVP_PKEY_get1_RSA() and set the domain
and RSA_METHOD on that.

But with OpenSSL 3, the EVP_PKEY_get1_RSA() function returns a cached
copy of the internal provider struct and any changes we make are not
reflected back. So we can't use it to set the domain and custom method.

Instead just create our own EVP_PKEY from scratch, coupled with an
RSA key that contains just n and e from the public key.

Works with both 1.1.x and 3.0.x.
2022-12-28 15:43:56 +01:00
Joris Vink 17b6f3bbc6 Disable deprecated warnings for OpenSSL 3.
Until the replacement is done, make sure Kore builds against OpenSSL 3
so it can be used as most distros made the move towards it.
2022-12-28 11:09:15 +01:00
Joris Vink 369fc4fa01 Add newfstatat in common Kore seccomp whitelist. 2022-11-02 22:13:10 +01:00
Joris Vink dd93790d80 Improve kore.proc in the Python API.
Allow passing of an env keyword, allowing you to set environment variables
that may be required by the subprocess.

The env keyword must be a list with correctly formed environment variables.

eg:

proc = kore.proc("/bin/myproc",
    env=[
        "LD_LIBRARY_PATH=/my/path"
    ]
)
2022-10-19 08:04:16 +02:00
Joris Vink eab8dcd9ac Constify in parameter for kore_strip_chars() 2022-10-19 07:34:14 +02:00
Joris Vink f34d21caa7 Hack around some hidden Python symbols.
The _PyInterpreterFrame_GetLine() is hidden in dynamic libs so
roll our own variant of it.

Shuffle the old code so we always end up calling python_resolve_frame_line()
no matter the Python version.
2022-09-26 08:48:29 +02:00
Joris Vink d7cef82362 Python improvements: Rework corotracing for 3.11.
In the upcoming Python 3.11 release the PyCoroObject no longer
has a full PyFrameObject, but instead their internal frame
struct _PyInterpreterFrame. Use that when we are building
against 3.11 or higher so we can still provide useful tracing
functionality (and so that it builds).
2022-09-25 00:29:08 +02:00
Joris Vink 783cc6cd4c Send a 413 if header_recv buffer is full.
Kore used to just stall the connection until the timeout kicked
in, but if no proper headers were received by the time the header
buffer is full we should just error out.

While here, use s_off for the inital length check.
2022-09-07 12:41:38 +02:00
Joris Vink 80db912c34 Improve CRL reloading.
When a CRL is reloaded, disconnect any TLS clients that authenticated
with a certificate that is now in the CRL.

Improve log messages while here.
2022-09-05 10:59:28 +02:00