Blame


1 dafb57b8 2021-01-15 op #include "gmid.h"
2 dafb57b8 2021-01-15 op
3 dafb57b8 2021-01-15 op #if defined(__FreeBSD__)
4 dafb57b8 2021-01-15 op
5 dafb57b8 2021-01-15 op #include <sys/capsicum.h>
6 dafb57b8 2021-01-15 op #include <err.h>
7 dafb57b8 2021-01-15 op
8 dafb57b8 2021-01-15 op void
9 dafb57b8 2021-01-15 op sandbox()
10 dafb57b8 2021-01-15 op {
11 dafb57b8 2021-01-15 op struct vhost *h;
12 dafb57b8 2021-01-15 op int has_cgi = 0;
13 dafb57b8 2021-01-15 op
14 dafb57b8 2021-01-15 op for (h = hosts; h->domain != NULL; ++h)
15 dafb57b8 2021-01-15 op if (h->cgi != NULL)
16 dafb57b8 2021-01-15 op has_cgi = 1;
17 dafb57b8 2021-01-15 op
18 dafb57b8 2021-01-15 op if (has_cgi) {
19 dafb57b8 2021-01-15 op LOGW(NULL, "disabling sandbox because CGI scripts are enabled");
20 dafb57b8 2021-01-15 op return;
21 dafb57b8 2021-01-15 op }
22 dafb57b8 2021-01-15 op
23 dafb57b8 2021-01-15 op if (cap_enter() == -1)
24 dafb57b8 2021-01-15 op err(1, "cap_enter");
25 dafb57b8 2021-01-15 op }
26 dafb57b8 2021-01-15 op
27 dafb57b8 2021-01-15 op #elif defined(__linux__)
28 dafb57b8 2021-01-15 op
29 dafb57b8 2021-01-15 op void
30 dafb57b8 2021-01-15 op sandbox()
31 dafb57b8 2021-01-15 op {
32 dafb57b8 2021-01-15 op /* TODO: seccomp */
33 dafb57b8 2021-01-15 op }
34 dafb57b8 2021-01-15 op
35 dafb57b8 2021-01-15 op #elif defined(__OpenBSD__)
36 dafb57b8 2021-01-15 op
37 dafb57b8 2021-01-15 op #include <err.h>
38 dafb57b8 2021-01-15 op #include <unistd.h>
39 dafb57b8 2021-01-15 op
40 dafb57b8 2021-01-15 op void
41 dafb57b8 2021-01-15 op sandbox()
42 dafb57b8 2021-01-15 op {
43 dafb57b8 2021-01-15 op struct vhost *h;
44 dafb57b8 2021-01-15 op int has_cgi = 0;
45 dafb57b8 2021-01-15 op
46 dafb57b8 2021-01-15 op for (h = hosts; h->domain != NULL; ++h) {
47 dafb57b8 2021-01-15 op if (unveil(h->dir, "rx") == -1)
48 dafb57b8 2021-01-15 op err(1, "unveil %s for domain %s", h->dir, h->domain);
49 dafb57b8 2021-01-15 op
50 dafb57b8 2021-01-15 op if (h->cgi != NULL)
51 dafb57b8 2021-01-15 op has_cgi = 1;
52 dafb57b8 2021-01-15 op }
53 dafb57b8 2021-01-15 op
54 dafb57b8 2021-01-15 op if (pledge("stdio rpath inet proc exec", NULL) == -1)
55 dafb57b8 2021-01-15 op err(1, "pledge");
56 dafb57b8 2021-01-15 op
57 dafb57b8 2021-01-15 op /* drop proc and exec if cgi isn't enabled */
58 dafb57b8 2021-01-15 op if (!has_cgi)
59 dafb57b8 2021-01-15 op if (pledge("stdio rpath inet", NULL) == -1)
60 dafb57b8 2021-01-15 op err(1, "pledge");
61 dafb57b8 2021-01-15 op }
62 dafb57b8 2021-01-15 op
63 dafb57b8 2021-01-15 op #else
64 dafb57b8 2021-01-15 op
65 dafb57b8 2021-01-15 op void
66 dafb57b8 2021-01-15 op sandbox()
67 dafb57b8 2021-01-15 op {
68 dafb57b8 2021-01-15 op LOGN(NULL, "%s", "no sandbox method known for this OS");
69 dafb57b8 2021-01-15 op }
70 dafb57b8 2021-01-15 op
71 dafb57b8 2021-01-15 op #endif