Drew DeVault
7e8a953794
Initial pass on regex routing support
...
All this does is parse the regexes out of the config file.
I've vendored libregexp from Bellard's quickjs project, because it's
reasonably small and self-contained, and POSIX regexes don't support
captures. We're eventually going to want captures for URL rewrites, so
this'll do for now.
2020-10-29 22:47:56 -04:00
Drew DeVault
a26573251b
Fail gracefully if mime database is not present
2020-10-28 12:49:47 -04:00
Drew DeVault
077b96d3cc
config: free more routing information on finish
2020-10-28 12:43:05 -04:00
Drew DeVault
becc4460b6
Implement MIME database support
2020-10-28 12:38:32 -04:00
Drew DeVault
ac6145ed6a
server: handle write errors
2020-10-28 12:36:05 -04:00
Drew DeVault
da6f7e9f05
CGI: Fix SCRIPT_NAME variable
2020-10-26 18:16:05 -04:00
Drew DeVault
5d725ff4ee
CGI: set PATH_INFO
2020-10-25 23:55:42 -04:00
Drew DeVault
cc1bd152e3
Initial support for CGI scripts
2020-10-25 23:16:50 -04:00
Drew DeVault
8baeb5a51c
Initial implementation of a routing table
2020-10-25 21:46:01 -04:00
Drew DeVault
1fe107875b
Overhaul network I/O to be async for real
...
Had to totally cut off OpenSSL from the network fd because obviously
OpenSSL is just going to wreck our shit
2020-10-25 14:50:07 -04:00
io mintz
a22bec5149
add a missing "/" to autoindex paths
...
With the following directory structure:
/srv/gmni:
baz/ foo/
/srv/gmni/baz:
a
/srv/gmni/foo:
bar/
/srv/gmni/foo/bar:
b
trying to access gemini://somesite/ with autoindex=on works,
but accessing /foo fails because it tries to stat /srv/gmni/foobar
instead of /srv/gmni/foo/bar. This commit fixes that by adding a trailing slash.
2020-10-15 15:44:45 -04:00
William Casarin
e77f354ca3
serve: fix gcc-9.3.0 error in serve_autoindex
...
gcc 9.3.0 catches an off-by-one error with strncat in serve_autoindex
where it might not write a 0 byte:
In function ‘strncat’,
inlined from ‘serve_autoindex’ at src/serve.c:60:3:
/nix/store/...glibc-2.31-dev/include/bits/string_fortified.h:136:10:
error: ‘__builtin___strncat_chk’ specified bound 4097 equals destination size
[-Werror=stringop-overflow=]
Signed-off-by: William Casarin <jb55@jb55.com>
2020-10-15 12:06:19 -04:00
Chris Vittal
9d17ce46b0
return false on request_validate errors
...
This will report proper errors to clients rather than continuing on with
request processing.
2020-10-12 21:25:45 -04:00
Kevin Sangeelee
cff1f71f1a
Change assert to 2-param version to comply with C11.
2020-09-29 18:04:12 -04:00
Drew DeVault
477bf5db81
Bubble up client disconnect state
...
This will fix the segfaults but won't fix slowlorris
2020-09-27 13:54:19 -04:00
Drew DeVault
a9ee61418f
Break after processing polled client
...
Otherwise we might not grok it, ya jive
2020-09-27 12:11:11 -04:00
Drew DeVault
7fed84898b
Only handle one client per poll iteration
...
This is a bit of a hack but it avoids some problems with invalid reads
when a client gets disconnected
2020-09-27 10:18:52 -04:00
Drew DeVault
1f229ba123
mime: add .xml -> text/xml
2020-09-27 00:46:38 -04:00
Drew DeVault
71bbd1b315
server.c: re-locate definitions to appropriate scope
2020-09-26 18:54:32 -04:00
Drew DeVault
f3075e4bbd
README.md: update example config
2020-09-26 18:51:24 -04:00
Drew DeVault
57893ff09c
Set SO_REUSEADDR
2020-09-26 18:24:32 -04:00
Drew DeVault
f6602ddd08
server.c: appease GCC's magic pixie bullshit
2020-09-26 18:13:11 -04:00
Drew DeVault
6d866ba3df
server.c: import netinet/in.h
2020-09-26 17:54:40 -04:00
Drew DeVault
53bf5bc54f
config.ini: change suggested root directory
2020-09-26 17:46:56 -04:00
Drew DeVault
534efe8e34
Fix size of in{,6}_addr
2020-09-26 17:33:13 -04:00
Drew DeVault
814a6e7657
Document (and tweak) log format
2020-09-26 17:02:06 -04:00
Drew DeVault
c601583f7d
README.md: formatting
2020-09-26 16:46:07 -04:00
Drew DeVault
a35a910c63
Add dependency list
2020-09-26 16:45:43 -04:00
Drew DeVault
0933880b2b
Documentation
2020-09-26 16:45:06 -04:00
Drew DeVault
fc036335eb
Remove [:tls] email directive
2020-09-26 16:41:11 -04:00
Drew DeVault
50d21c03f5
Free up resources throughout
2020-09-26 16:10:10 -04:00
Drew DeVault
e9641dbf1e
disconnect_client: free more client resources
2020-09-26 15:53:37 -04:00
Drew DeVault
6bc9c4deb9
Implement autoindex option
2020-09-26 15:51:28 -04:00
Drew DeVault
165e3c02fc
Rehome some logic from server.c -> serve.c
2020-09-26 15:08:25 -04:00
Drew DeVault
61bc033740
Okay, time to quit fucking around with BUFSIZ
2020-09-26 15:00:40 -04:00
Drew DeVault
d4d8ea646c
Turns out BUFSIZ is small sometimes
2020-09-26 14:56:18 -04:00
Drew DeVault
48f75abcfd
Bump client buffer size to BUFSIZ
2020-09-26 14:45:39 -04:00
Drew DeVault
9bed26b8d9
Log response body size in bytes
2020-09-26 14:41:17 -04:00
Drew DeVault
dfab99ace5
Serve files from root
2020-09-26 14:36:52 -04:00
Drew DeVault
0d6eca2c79
disconnect_client: clean up bios
2020-09-26 13:58:51 -04:00
Drew DeVault
264c3b4602
Always log server messages to stderr
...
So that you can just direct stdout to a file to get the request log.
2020-09-26 13:40:20 -04:00
Drew DeVault
ce467cebd3
Parse requests and serve simple responses
2020-09-26 13:39:37 -04:00
Drew DeVault
5388725d41
Use O_NONBLOCK for client file descriptors
2020-09-26 10:53:22 -04:00
Drew DeVault
fa69887e52
Implement TLS exchange with clients
...
This probably leaves a bit to be desired tbh
2020-09-24 19:58:41 -04:00
Drew DeVault
7af04ea471
tls: move cert/key into host structure
...
We'll later want to set these on the SSL object (rather than SSL_CTX),
so move these into the host struct for later access.
We'll prefer to set it on the SSL object so that we can automatically
use an up-to-date certificate, per ~sircmpwn/gmni#26.
2020-09-24 17:55:10 -04:00
Drew DeVault
0d1137f987
Implement TLS store
...
Includes hands-free certificate generation and loading
2020-09-24 17:51:29 -04:00
Eyal Sawady
e15aca171d
configure: add --libdir
2020-09-24 14:43:16 -04:00
Drew DeVault
85a85b37f8
Log bind addresses on startup
2020-09-24 11:16:51 -04:00
Drew DeVault
b14e33c349
Add README.md
2020-09-24 11:11:48 -04:00
Drew DeVault
b85c64b441
Generalize logging
2020-09-23 14:32:52 -04:00