From edee68f398f5b190f4be0127338956c0a2500662 Mon Sep 17 00:00:00 2001 From: Hiltjo Posthuma Date: Sun, 1 Dec 2019 18:31:07 +0100 Subject: [PATCH] add OpenBSD unveil support The unveil() system call first appeared in OpenBSD 6.4. For stagit it has the following properties now: - stagit-index: only read-access to the file-system for the specified directories/repositories. - stagit: read-access to the specified directory/repository. read-write and creation access to the current directory for the output files. read-write and creation access to the specified cache file. --- stagit-index.c | 3 +++ stagit.c | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/stagit-index.c b/stagit-index.c index cc70e4d..9a1f902 100644 --- a/stagit-index.c +++ b/stagit-index.c @@ -159,6 +159,9 @@ main(int argc, char *argv[]) git_libgit2_init(); #ifdef __OpenBSD__ + for (i = 1; i < argc; i++) + if (unveil(argv[i], "r") == -1) + err(1, "unveil: %s", argv[i]); if (pledge("stdio rpath", NULL) == -1) err(1, "pledge"); #endif diff --git a/stagit.c b/stagit.c index a6cfebc..dcac016 100644 --- a/stagit.c +++ b/stagit.c @@ -1095,6 +1095,13 @@ main(int argc, char *argv[]) git_libgit2_init(); #ifdef __OpenBSD__ + if (unveil(repodir, "r") == -1) + err(1, "unveil: %s", repodir); + if (unveil(".", "rwc") == -1) + err(1, "unveil: ."); + if (cachefile && unveil(cachefile, "rwc") == -1) + err(1, "unveil: %s", cachefile); + if (cachefile) { if (pledge("stdio rpath wpath cpath fattr", NULL) == -1) err(1, "pledge"); -- libgit2 1.1.1