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