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
Drew DeVault
da9db7bc46
Implement basic server event loop
2020-09-23 14:19:28 -04:00
Drew DeVault
f88d817dca
Generalize IPV6_V6ONLY usage
...
Some platforms other than Linux may implement this socket option.
2020-09-23 12:44:42 -04:00
Drew DeVault
65c2a56c6d
Initialize sockets
2020-09-23 12:43:05 -04:00
Drew DeVault
9adc6f34c7
config: parse listen directives
2020-09-23 11:33:05 -04:00
Drew DeVault
58500c8e53
Initial config parser
2020-09-23 11:24:23 -04:00
Drew DeVault
ccae8ffd28
Vendor in some support code
2020-09-23 10:40:14 -04:00
Drew DeVault
61b84a77c0
Initial commit
2020-09-23 10:21:44 -04:00