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