iindex.c - libgcgi - REST library for Gopher Err bitreich.org 70 hgit clone git://bitreich.org/libgcgi/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/libgcgi/ URL:git://bitreich.org/libgcgi/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.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 iindex.c (1602B) Err bitreich.org 70 i--- Err bitreich.org 70 i 1 #include Err bitreich.org 70 i 2 #include Err bitreich.org 70 i 3 #include Err bitreich.org 70 i 4 #include Err bitreich.org 70 i 5 #include Err bitreich.org 70 i 6 Err bitreich.org 70 i 7 #ifdef __linux__ Err bitreich.org 70 i 8 #include Err bitreich.org 70 i 9 #endif Err bitreich.org 70 i 10 Err bitreich.org 70 i 11 #include "libgcgi.h" Err bitreich.org 70 i 12 Err bitreich.org 70 i 13 static void Err bitreich.org 70 i 14 page_not_found(char **matches) Err bitreich.org 70 i 15 { Err bitreich.org 70 i 16 struct gcgi_var_list vars = {0}; Err bitreich.org 70 i 17 Err bitreich.org 70 i 18 gcgi_read_var_list(&vars, "db/vars"); Err bitreich.org 70 i 19 gcgi_set_var(&vars, "page", matches[0]); Err bitreich.org 70 i 20 gcgi_template("gph/page_not_found.gph", &vars); Err bitreich.org 70 i 21 } Err bitreich.org 70 i 22 Err bitreich.org 70 i 23 static struct gcgi_handler handlers[] = { Err bitreich.org 70 i 24 { "*", page_not_found }, Err bitreich.org 70 i 25 { NULL, NULL }, Err bitreich.org 70 i 26 }; Err bitreich.org 70 i 27 Err bitreich.org 70 i 28 int Err bitreich.org 70 i 29 main(int argc, char **argv) Err bitreich.org 70 i 30 { Err bitreich.org 70 i 31 Err bitreich.org 70 i 32 #if defined(__OpenBSD__) Err bitreich.org 70 i 33 if (unveil("gph", "r") == -1 || unveil("db", "rwc") == -1) Err bitreich.org 70 i 34 gcgi_fatal("unveil failed: %s", strerror(errno)); Err bitreich.org 70 i 35 if (pledge("stdio rpath wpath cpath", NULL) == -1) Err bitreich.org 70 i 36 gcgi_fatal("pledge failed: %s", strerror(errno)); Err bitreich.org 70 i 37 #elif defined(__linux__) Err bitreich.org 70 i 38 scmp_filter_ctx ctx; Err bitreich.org 70 i 39 if (chroot(".") == -1) Err bitreich.org 70 i 40 gcgi_fatal("chroot failed"); Err bitreich.org 70 i 41 if ((ctx = seccomp_init(SCMP_ACT_KILL)) == NULL) Err bitreich.org 70 i 42 gcgi_fatal("seccomp_init failed: %s", strerror(errno)); Err bitreich.org 70 i 43 if (seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 0) < 0 Err bitreich.org 70 i 44 || seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit), 0) < 0 Err bitreich.org 70 i 45 || seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0) < 0 Err bitreich.org 70 i 46 || seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0) < 0 Err bitreich.org 70 i 47 || seccomp_rule_add(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 1, Err bitreich.org 70 i 48 SCMP_A0(SCMP_CMP_EQ, 0)) < 0) Err bitreich.org 70 i 49 gcgi_fatal("seccomp_rule_add failed"); Err bitreich.org 70 i 50 if (seccomp_load(ctx) < 0) Err bitreich.org 70 i 51 gcgi_fatal("seccomp_load failed: %s", strerror(errno)); Err bitreich.org 70 i 52 #else Err bitreich.org 70 i 53 #warning "no syscall restriction enabled" Err bitreich.org 70 i 54 #endif Err bitreich.org 70 i 55 Err bitreich.org 70 i 56 /* handle the request with the handlers */ Err bitreich.org 70 i 57 gcgi_handle_request(handlers, argv, argc); Err bitreich.org 70 i 58 return 0; Err bitreich.org 70 i 59 } Err bitreich.org 70 .