forked from aniani/gmnisrv
Fork 0
Commit Graph

107 Commits

Author SHA1 Message Date
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:

baz/  foo/




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:
  error: ‘__builtin___strncat_chk’ specified bound 4097 equals destination size

Signed-off-by: William Casarin <>
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 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 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 2020-09-24 11:11:48 -04:00
Drew DeVault b85c64b441 Generalize logging 2020-09-23 14:32:52 -04:00