Commit Graph

1897 Commits

Author SHA1 Message Date
Joris Vink 73be741bfd Allow authenticators on filemaps.
This commit introduces the ability to add authenticators to filemaps.
Just like in normal routes, the authenticators will be resolved first
before allowing access to the filemap entries.

Configuration wise, the authenticator is an optional value after the
filemap config directive:

	filemap / webroot myauth

In the Python API you can now pass the authenticator for a filemap entry
but turning the value of the filemap into a tuple with the first entry
being the path and the second being the auth dict:

	AUTH AUTH={
	    "type": "cookie",
	    "value": "cookiename",
	    "redirect": "/auth/",
	    "verify": verify_cookie
	}

	domain.filemaps({
	    "/css/": "webroot/css",
	    "/secret/": ("webroot/secret", AUTH)
	})
2022-08-10 10:13:01 +02:00
Joris Vink 8a0aad31fe Update README with new text 2022-08-08 12:49:55 +02:00
Joris Vink e2fcedfaec Differentiate between normal shutdown and fatal.
The parent process never differentiated between a worker process
asking for a shutdown or a worker process calling fatalx() when
it came to its exit code.

I made some changes here so the parent process will exit with
an exit code 1 if anything worker related went wrong (fatalx/death policy).
2022-08-08 11:02:27 +02:00
Joris Vink 7316f372d1 If no result was available, use Py_None. 2022-08-04 13:19:02 +02:00
Joris Vink fd94fba3c7 Python 3.10 improvements.
The coroutines results are now relayed back via PyIter_Send() and
no longer obtainable via _PyGen_FetchStopIterationValue().

This means that our kore.gather() would not be able to return any
values from any of the coroutines it governed.

Fix this by saving the object returned in PyIter_Send() and using it
later in pygather_reap_coro().
2022-08-04 09:56:41 +02:00
Joris Vink 30c8652534 More Python 3.10.x changes.
Handle PYGEN_RETURN in case our prerequest handlers return actual
values instead of None.

Mimic PySendResult for older versions for now.
2022-07-14 11:48:32 +02:00
Joris Vink f6c54042c5 Improve Python 3.10.x support.
Python 3.10.x its PyIter_Send() will return PYGEN_ERROR if the
generator returned (as opposed to yielding) if the result returned
is Py_None and no argument was given to PyIter_Send(). Which is counter
intuitive since it seems it should give us a PYGEN_RETURN as per its
documentation.

It also no longer sets PyExc_StopIteration in this case so we cannot depend
on that anymore to figure out if a coroutine has finished.

This caused Kore to respond with a 500 immediately after coroutines
ran to completion as it was looking for the PyExc_StopIteration exception.

Fix this by simply doing another check if an exception happened before
we enter the code path where Kore would spew the 500.
2022-07-14 10:56:27 +02:00
Joris Vink f7a76f7e96 Improvements for kore.recvmsg() in Python.
The cmsghdr contains a length (cmsg_len) which indicates the length
of the data in combination with the cmsghdr length itself.

Remove the length of the cmsghdr before passing it back up to callers
so they don't need to bother with it.

This also fixes a mistake where we ended up copying extra data
from the ancdata buffer that was unintended.
2022-04-22 17:01:06 +02:00
Joris Vink 5e47218ccd bump for newer release 2022-04-20 12:02:00 +02:00
Joris Vink b0a5257f93 rename RELEASE to RELEASE.md 2022-04-20 11:37:58 +02:00
Joris Vink 3516d50be3 adjust log messages 2022-04-20 11:10:01 +02:00
Joris Vink dcdfce5763 Unbreak x509dict.
I accidentally swapped issuer and subject while constructing it.
2022-04-20 11:06:10 +02:00
Joris Vink 8969c14575 Add a quick and dirty release procedure.
Mostly for myself so I remember the goodies.
2022-03-21 14:22:46 +01:00
Joris Vink 48ae94eb47 Pull in stddef.h in seccomp.h.
offsetof() on Linux is defined in it.
2022-03-21 12:51:22 +01:00
Joris Vink f072e4d5e4 update README with correct versions 2022-03-21 12:44:01 +01:00
Joris Vink 38d7a5f88d Fix handling kore_tls_connection_accept() return codes.
When this code was moved from src/connection.c into src/tls_openssl.c
a return wouldn't break us out from kore_connection_handle() as
previously expected.

This ment that Kore would move the connection into established state
immediately even if SSL_accept() needed to read more.

This broke TLS client authentication as Kore its belts and suspenders
kept throwing a 403 due to the code not properly obtaining the client
certificate when expected.
2022-03-21 12:23:38 +01:00
Joris Vink 5bfd61d136 Hide kore_pymodule behind !KORE_SINGLE_BINARY.
Unbreaks building single binaries with Python support.
2022-03-21 08:52:38 +01:00
Joris Vink f9c3fac6fa Add logfile to example configuration 2022-03-15 19:37:17 +01:00
Joris Vink 8689df70d9 adjust example configuration 2022-03-15 19:30:57 +01:00
Joris Vink 0d305ecf5a fix format specifier, previous commit touched a bit too much. 2022-03-15 13:47:35 +01:00
Joris Vink 5021eeb597 use correct format specifier for size_t 2022-03-15 13:39:01 +01:00
Joris Vink 78d667abc7 Set socklen to 0 by default in pysocket_async_recv(). 2022-02-20 21:30:17 +01:00
Joris Vink a65be853f0 Simplify python_push_integer().
We're not doing anything with ret, so kill it.
2022-02-20 21:27:35 +01:00
Joris Vink a7aa51d8d5 Fix unhappy path cleanup.
The whole while (cnt-- >= 0) idiom is busted since cnt started
at 0 and if the first call to PyUnicode_FromStringAndSize() fails
then we're attempting to access -1.
2022-02-20 21:25:18 +01:00
Joris Vink daca80f1cb execve() its envp shouldn't be NULL. 2022-02-20 21:20:14 +01:00
Joris Vink 96d1396df1 Change logic for http_version a bit. 2022-02-20 21:19:44 +01:00
Joris Vink 29eb5b1537 Explicitly cast integer args for JSON create apis 2022-02-20 20:32:39 +01:00
Joris Vink f3135d5e71 Mention TLS_BACKEND in README 2022-02-18 15:49:56 +01:00
Joris Vink 045beb8622 add kore_mem_zero().
use it in places explicit_bzero() used to be called.

The kore_mem_zero() is a best effort to try and let the compiler
not optimize the code away. Highly platform dependent.
2022-02-18 11:13:01 +01:00
Joris Vink 722a0eca21 Get rid of MAKE_CLONE macro 2022-02-18 11:08:13 +01:00
Joris Vink 576d7ba5e8 more whitespace fixes 2022-02-18 11:07:40 +01:00
Joris Vink 404ccf622f whitespace fixes 2022-02-18 11:06:35 +01:00
Joris Vink 7f74790da7 Define KORE_PRIVATE_KEY per TLS backend. 2022-02-18 10:50:17 +01:00
Joris Vink 80383024a3 For each TLS backend let us use correct types. 2022-02-18 10:47:05 +01:00
Joris Vink a9f7bd7faf rename ssl prefixed things to tls. 2022-02-18 10:20:28 +01:00
Joris Vink c93a8f3b40 disallow ACME with TLS_BACKEND != openssl 2022-02-18 09:18:13 +01:00
Joris Vink b20d26e839 Throw exception is TLS backend isnt supported. 2022-02-18 09:17:58 +01:00
Joris Vink feb90208ef Add kore_tls_x509_data().
Use it in the Python code, which requires it.
2022-02-18 09:14:30 +01:00
Joris Vink 169a4e7c5d wrap 2 more syscalls in ifdefs. 2022-02-17 14:46:33 +01:00
Joris Vink 3c3a93e5c5 Add missing header files for SHA1/SHA2. 2022-02-17 14:11:39 +01:00
Joris Vink d8505bab0d Always add -rdynamic to LDFLAGS. 2022-02-17 14:59:36 +02:00
Joris Vink 99a1581e19 Initial work splitting OpenSSL code away.
This work moves all TLS / crypto related code into a tls_openssl.c
file and adds a tls_none.c which contains just stubs.

Allows compilation of Kore with TLS_BACKEND=none to remove building
against OpenSSL.

Also adds code for SHA1/SHA2 taken from openssh-portable so we don't
depend on those being present anymore in libcrypto.
2022-02-17 13:45:28 +01:00
Joris Vink 6dc162e7ee Handle ECHILD when reaping workers on shutdown.
If the child process is already dead we must handle it accordingly
instead of getting stuck waiting on it.
2022-02-16 12:32:20 +01:00
Joris Vink 23d762d682 Allow parent to send msgs to workers via kore_msg.
It wasn't possible for the parent process to send messages
directly via kore_msg_send() to other worker processes.

This is now rectified to from the parent process one can call
kore_msg_send() with a worker destination and it'll work.
2022-02-01 10:36:07 +01:00
Joris Vink b3f54e290a Change parent behaviour when calling waitpid().
Wait for any process in our process group only instead of WAIT_ANY.

This allows the parent process to start subprocesses that end up
in different process groups which are handled in user code instead
completely (using signalfd for example).
2022-02-01 10:34:12 +01:00
Joris Vink 833ca646e7 i forgot, it's 2022. 2022-01-31 22:02:06 +01:00
Joris Vink a82cb168eb The python examples don't need building.
So they can be removed from the examples Makefile.
2022-01-31 20:55:46 +01:00
Joris Vink 23047d4c2f Rework generic example configuration.
This adjusts the configuration to contain updated routing configs.
2022-01-31 20:44:14 +01:00
Joris Vink a29700f26d Bring back page authentication via config.
Inside of the new route handlers the "authenticate" keyword can
be specified to let the route authenticate via a previously
configured authentication block.

The ability to do this went missing in a previous commit that overhauled
the routing structure of the configuration.
2022-01-31 15:13:34 +01:00
Joris Vink 41a4be384e Increase ACME signop timeout.
Just noticed the 5 seconds wasn't enough when renewing all
certificates in my own setup (i have about 30 ACME domains via Kore).

Bumped it to 30 seconds instead.
2022-01-29 08:55:50 +01:00