summary refs log tree commit diff
diff options
context:
space:
mode:
authorKlemens Nanni <klemens@posteo.de>2021-06-19 14:57:00 +0000
committerJune McEnroe <june@causal.agency>2021-06-20 20:21:00 -0400
commit3a38e36717ff24a3c028c1c7cfe477d9fec95498 (patch)
treea22ab9715396e65e95c332de4e2c58814ad9ab4e
parentHandle "\1ACTION\1" empty actions (diff)
downloadcatgirl-3a38e36717ff24a3c028c1c7cfe477d9fec95498.tar.gz
catgirl-3a38e36717ff24a3c028c1c7cfe477d9fec95498.zip
OpenBSD: Only unveil used directories
dataMkdir() already picked the appropiate directory so make it
return that such that unveilData() can go as only that one directory
needs unveiling.
Diffstat (limited to '')
-rw-r--r--chat.c15
-rw-r--r--chat.h2
-rw-r--r--xdg.c3
3 files changed, 6 insertions, 14 deletions
diff --git a/chat.c b/chat.c
index 8816068..479ec94 100644
--- a/chat.c
+++ b/chat.c
@@ -127,16 +127,6 @@ static void parseHash(char *str) {
 	if (*str) hashBound = strtoul(&str[1], NULL, 0);
 }
 
-#ifdef __OpenBSD__
-static void unveilData(const char *name) {
-	const char *dirs = NULL;
-	for (const char *path; NULL != (path = dataPath(&dirs, name));) {
-		int error = unveil(path, "wc");
-		if (error && errno != ENOENT) err(EX_CANTCREAT, "%s", path);
-	}
-}
-#endif
-
 static volatile sig_atomic_t signals[NSIG];
 static void signalHandler(int signal) {
 	signals[signal] = 1;
@@ -287,8 +277,9 @@ int main(int argc, char *argv[]) {
 
 #ifdef __OpenBSD__
 	if (self.restricted && logEnable) {
-		dataMkdir("");
-		unveilData("");
+		const char *logdir = dataMkdir("");
+		int error = unveil(logdir, "wc");
+		if (error) err(EX_OSERR, "unveil");
 	}
 
 	char promises[64] = "stdio tty";
diff --git a/chat.h b/chat.h
index c4499a8..74c4abf 100644
--- a/chat.h
+++ b/chat.h
@@ -403,7 +403,7 @@ const char *configPath(const char **dirs, const char *path);
 const char *dataPath(const char **dirs, const char *path);
 FILE *configOpen(const char *path, const char *mode);
 FILE *dataOpen(const char *path, const char *mode);
-void dataMkdir(const char *path);
+const char *dataMkdir(const char *path);
 
 int getopt_config(
 	int argc, char *const *argv,
diff --git a/xdg.c b/xdg.c
index e4b252d..6afeb35 100644
--- a/xdg.c
+++ b/xdg.c
@@ -114,11 +114,12 @@ FILE *configOpen(const char *path, const char *mode) {
 	return NULL;
 }
 
-void dataMkdir(const char *path) {
+const char *dataMkdir(const char *path) {
 	const char *dirs = NULL;
 	path = dataPath(&dirs, path);
 	int error = mkdir(path, S_IRWXU);
 	if (error && errno != EEXIST) err(EX_CANTCREAT, "%s", path);
+	return path;
 }
 
 FILE *dataOpen(const char *path, const char *mode) {