improve the example and prepare libseccomp in the example - libgcgi - REST library for Gopher
 (HTM) git clone git://bitreich.org/libgcgi git://hg6vgqziawt5s4dj.onion/libgcgi
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Tags
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 39674c36f9dbf2a2f4be5fa2f8df9894c1ed75be
 (DIR) parent fd61b070718453c8d57daa40f620d89e75cb2d78
 (HTM) Author: Josuah Demangeon <me@josuah.net>
       Date:   Wed,  3 Aug 2022 18:39:18 +0200
       
       improve the example and prepare libseccomp in the example
       
       Diffstat:
         M Makefile                            |       7 ++++---
         M db/vars                             |       2 +-
         M gph/page_not_found.gph              |       3 ++-
         M index.c                             |      37 ++++++++++++++-----------------
       
       4 files changed, 24 insertions(+), 25 deletions(-)
       ---
 (DIR) diff --git a/Makefile b/Makefile
       @@ -1,5 +1,6 @@
       -LDFLAGS = -static
       -CFLAGS = -D_POSIX_C_SOURCE=200809L -g -pedantic -std=c99 -Wall -Wextra
       +LDFLAGS =
       +#LIBS = -lseccomp #<- uncomment on Linux
       +CFLAGS = -D_POSIX_C_SOURCE=200809L -D_GNU_SOURCE -g -pedantic -std=c99 -Wall -Wextra
        
        all: index.cgi
        
       @@ -10,4 +11,4 @@ README: libgcgi.3
                mandoc -Tutf8 libgcgi.3 | col -b | sed '1h; $$g' >$@
        
        index.cgi: index.c libgcgi.c libgcgi.h
       -        ${CC} ${LDFLAGS} ${CFLAGS} -o $@ index.c libgcgi.c
       +        ${CC} ${LDFLAGS} ${CFLAGS} -o $@ index.c libgcgi.c ${LIBS}
 (DIR) diff --git a/db/vars b/db/vars
       @@ -1 +1 @@
       -name: world
       +mail: gopher@example.com
 (DIR) diff --git a/gph/page_not_found.gph b/gph/page_not_found.gph
       @@ -1 +1,2 @@
       -Hello {{name}}!
       +Sorry, I could not find {{page}}.
       +If it looks like an error, you can let us know that "{{page}}" is not working by sending us an email at {{mail}}.
 (DIR) diff --git a/index.c b/index.c
       @@ -1,31 +1,27 @@
       +#include <errno.h>
        #include <stddef.h>
       -#include <unistd.h>
        #include <stdio.h>
       +#include <string.h>
       +#include <unistd.h>
        
       -#include "libgcgi.h"
       -
       -#ifndef __OpenBSD__
       -#define pledge(p1,p2) 0
       -#define unveil(p1,p2) 0
       +#ifdef __linux__
       +#include <seccomp.h>
        #endif
        
       +#include "libgcgi.h"
       +
        static void
       -error_page_not_found(char **matches)
       +page_not_found(char **matches)
        {
                struct gcgi_var_list vars = {0};
       -        char *var;
        
                gcgi_read_var_list(&vars, "db/vars");
       -
       -        printf("sorry, I could not find %s\n", matches[0]);
       -        if ((var = gcgi_get_var(&gcgi_gopher_query, "var")) != NULL)
       -                printf("I got the $var though! -> '%s'\n", var);
       -
       -        gcgi_template("gph/error_page_not_found.gph", &vars);
       +        gcgi_set_var(&vars, "page", matches[0]);
       +        gcgi_template("gph/page_not_found.gph", &vars);
        }
        
        static struct gcgi_handler handlers[] = {
       -        { "*",                error_page_not_found },
       +        { "*",                page_not_found },
                { NULL,                NULL },
        };
        
       @@ -33,13 +29,14 @@ int
        main(int argc, char **argv)
        {
        
       -        /* restrict allowed paths */
       +#if defined(__OpenBSD__)
                if (unveil("gph", "r") == -1 || unveil("db", "rwc") == -1)
       -                gcgi_fatal("unveil failed");
       -
       -        /* restrict allowed system calls */
       +                gcgi_fatal("unveil failed: %s", strerror(errno));
                if (pledge("stdio rpath wpath cpath", NULL) == -1)
       -                gcgi_fatal("pledge failed");
       +                gcgi_fatal("pledge failed: %s", strerror(errno));
       +#else
       +#warning "no syscall restriction enabled"
       +#endif
        
                /* handle the request with the handlers */
                gcgi_handle_request(handlers, argv, argc);