Introduction
Introduction Statistics Contact Development Disclaimer Help
improve the example and prepare libseccomp in the example - libgcgi - REST libr…
git clone git://bitreich.org/libgcgi git://hg6vgqziawt5s4dj.onion/libgcgi
Log
Files
Refs
Tags
README
LICENSE
---
commit 39674c36f9dbf2a2f4be5fa2f8df9894c1ed75be
parent fd61b070718453c8d57daa40f620d89e75cb2d78
Author: Josuah Demangeon <[email protected]>
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(-)
---
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 -…
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}
diff --git a/db/vars b/db/vars
@@ -1 +1 @@
-name: world
+mail: [email protected]
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 …
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);
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.