iImplement handler for letsencrypt ACME challenges. - bitreich-httpd - Bitreich HTTPD service Err bitreich.org 70 hgit clone git://bitreich.org/bitreich-httpd git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/bitreich-httpd URL:git://bitreich.org/bitreich-httpd git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/bitreich-httpd bitreich.org 70 1Log /scm/bitreich-httpd/log.gph bitreich.org 70 1Files /scm/bitreich-httpd/files.gph bitreich.org 70 1Refs /scm/bitreich-httpd/refs.gph bitreich.org 70 1Tags /scm/bitreich-httpd/tag bitreich.org 70 1README /scm/bitreich-httpd/file/README.md.gph bitreich.org 70 1LICENSE /scm/bitreich-httpd/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit d0062f038d181b8d5eb150003ea7b50bcb5330f3 /scm/bitreich-httpd/commit/d0062f038d181b8d5eb150003ea7b50bcb5330f3.gph bitreich.org 70 1parent a0590477c4c74d7111a031a4cb1c9e5d61ff3044 /scm/bitreich-httpd/commit/a0590477c4c74d7111a031a4cb1c9e5d61ff3044.gph bitreich.org 70 hAuthor: parazyd URL:mailto:parazyd@dyne.org bitreich.org 70 iDate: Fri, 28 Oct 2022 15:07:04 +0200 Err bitreich.org 70 i Err bitreich.org 70 iImplement handler for letsencrypt ACME challenges. Err bitreich.org 70 i Err bitreich.org 70 iSigned-off-by: Christoph Lohmann <20h@r-36.net> Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M bitreich-httpd.c | 18 ++++++++++++++++-- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 16 insertions(+), 2 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/bitreich-httpd.c b/bitreich-httpd.c /scm/bitreich-httpd/file/bitreich-httpd.c.gph bitreich.org 70 i@@ -105,8 +105,8 @@ servefile(char *path, char *ctype, int sock) Err bitreich.org 70 i int Err bitreich.org 70 i main(int argc, char *argv[]) Err bitreich.org 70 i { Err bitreich.org 70 i- char *wwwbase, *wwwindex, request[512], *ctype, *path, Err bitreich.org 70 i- clienth[NI_MAXHOST], clientp[NI_MAXSERV], *zuccbase; Err bitreich.org 70 i+ char *wwwbase, *wwwindex, request[512], *ctype, *path, *le_file, Err bitreich.org 70 i+ *le_base, clienth[NI_MAXHOST], clientp[NI_MAXSERV], *zuccbase; Err bitreich.org 70 i int rlen; Err bitreich.org 70 i struct sockaddr_storage clt; Err bitreich.org 70 i socklen_t cltlen = sizeof(clt); Err bitreich.org 70 i@@ -115,6 +115,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i wwwbase = "/bitreich/www"; Err bitreich.org 70 i wwwindex = "index.html"; Err bitreich.org 70 i Err bitreich.org 70 i+ le_base = "/br/www/uacme"; Err bitreich.org 70 i zuccbase = "/br/www/zuccless"; Err bitreich.org 70 i Err bitreich.org 70 i if (!getpeername(0, (struct sockaddr *)&clt, &cltlen)) { Err bitreich.org 70 i@@ -166,6 +167,19 @@ main(int argc, char *argv[]) Err bitreich.org 70 i sleep(1); Err bitreich.org 70 i asprintf(&path, "%s/s/yolo-css.css", wwwbase); Err bitreich.org 70 i ctype = "text/css"; Err bitreich.org 70 i+ } else if ((le_file = strstr(request, ".well-known/acme-challenge/"))) { Err bitreich.org 70 i+ /* Setup for Letsencrypt */ Err bitreich.org 70 i+ le_file += strlen(".well-known/acme-challenge/"); Err bitreich.org 70 i+ char *requested = strtok(le_file, " "); Err bitreich.org 70 i+ if (strchr(requested, '/') != NULL) { Err bitreich.org 70 i+ /* Get Zucced, no path exploitation. */ Err bitreich.org 70 i+ asprintf(&path, "%s/zucc-job.webm", zuccbase); Err bitreich.org 70 i+ ctype = "video/webm"; Err bitreich.org 70 i+ } else { Err bitreich.org 70 i+ /* Seems legit. */ Err bitreich.org 70 i+ asprintf(&path, "%s/%s", le_base, requested); Err bitreich.org 70 i+ ctype = "text/plain"; Err bitreich.org 70 i+ } Err bitreich.org 70 i } else { Err bitreich.org 70 i if (strstr(request, "zuccless.org")) { Err bitreich.org 70 i tim = time(NULL); Err bitreich.org 70 .