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.
This commit is contained in:
Klemens Nanni 2021-06-19 14:57:00 +00:00 зафіксовано C. McEnroe
джерело e2bebca7dc
коміт 3a38e36717
3 змінених файлів з 6 додано та 14 видалено

15
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";

2
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,

3
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) {