From: Sergey Matveev Date: Mon, 1 Nov 2021 10:02:18 +0000 (+0300) Subject: Use Capsicum if available X-Git-Tag: v0.1.0~47 X-Git-Url: http://www.git.stargrave.org/?p=tofuproxy.git;a=commitdiff_plain;h=44f2c8e3e96dfc6c076f9503a89967a502b5bad7 Use Capsicum if available --- diff --git a/cmd/zstd/capsicum.c.in b/cmd/zstd/capsicum.c.in new file mode 100644 index 0000000..a1ef0c7 --- /dev/null +++ b/cmd/zstd/capsicum.c.in @@ -0,0 +1,20 @@ +#include +#include +#include + +#include +#include + +static void +capsicum_start(void) +{ + if (caph_limit_stdio() != 0) { + errx(EX_OSERR, "can not caph_limit_stdio()"); + } + if (cap_enter() != 0) { + perror("Not using Capsicum"); + if (errno != ENOSYS) { + exit(EXIT_FAILURE); + } + } +} diff --git a/cmd/zstd/enzstd.c b/cmd/zstd/enzstd.c index 3655d79..c393f77 100644 --- a/cmd/zstd/enzstd.c +++ b/cmd/zstd/enzstd.c @@ -22,9 +22,16 @@ along with this program. If not, see . #include +#ifdef __FreeBSD__ +#include "capsicum.c.in" +#endif // __FreeBSD__ + int main(int argc, char **argv) { +#ifdef __FreeBSD__ + capsicum_start(); +#endif // __FreeBSD__ ZSTD_CCtx *ctx = ZSTD_createCCtx(); if (ctx == NULL) { fputs("can not initialize ZSTD_createCCtx\n", stderr); diff --git a/cmd/zstd/unzstd.c b/cmd/zstd/unzstd.c index ada11ea..caddee5 100644 --- a/cmd/zstd/unzstd.c +++ b/cmd/zstd/unzstd.c @@ -27,15 +27,29 @@ along with this program. If not, see . #include +#ifdef __FreeBSD__ +#include "capsicum.c.in" +#include +#include +#include +#endif // __FreeBSD__ + int main(int argc, char **argv) { + FILE *fdOff = fdopen(3, "wb"); +#ifdef __FreeBSD__ + if ((fdOff != NULL) && (caph_limit_stream(3, CAPH_WRITE)) != 0) { + errx(EX_OSERR, "can not caph_limit_stream(3)"); + }; + capsicum_start(); +#endif // __FreeBSD__ + ZSTD_DCtx *ctx = ZSTD_createDCtx(); if (ctx == NULL) { fputs("can not initialize ZSTD_DCtx\n", stderr); return 1; }; - FILE *fdOff = fdopen(3, "wb"); int rc = EXIT_FAILURE; uint8_t *bufIn = NULL; uint8_t *bufOut = NULL;