aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mandocdb.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2021-08-07 13:02:10 +0000
committerIngo Schwarze <schwarze@openbsd.org>2021-08-07 13:02:10 +0000
commitae3479c0b3b054123f6cd2e229271f9435c958de (patch)
tree5ef1b6ffc6c6d69d73bd3a98f92fa8bf50eee136 /mandocdb.c
parent7b94adabd443dc8d33b11c14f66e46f48100de1c (diff)
downloadmandoc-ae3479c0b3b054123f6cd2e229271f9435c958de.tar.gz
mandoc-ae3479c0b3b054123f6cd2e229271f9435c958de.tar.zst
mandoc-ae3479c0b3b054123f6cd2e229271f9435c958de.zip
Rename the compile-time configuration variable $HOMEBREWDIR to
$READ_ALLOWED_PATH, allow it to contain more than one directory, and explain how to use it for NixOS and for GNU Guix Linux. Feature improvement based on observations, input, and earlier patches from Lukas Epple <sternenseemann at systemli dot org>, and final patch also tested by Lukas.
Diffstat (limited to 'mandocdb.c')
-rw-r--r--mandocdb.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/mandocdb.c b/mandocdb.c
index 6a4e72c9..0ef661b2 100644
--- a/mandocdb.c
+++ b/mandocdb.c
@@ -1,4 +1,4 @@
-/* $Id: mandocdb.c,v 1.267 2020/04/03 11:35:01 schwarze Exp $ */
+/* $Id: mandocdb.c,v 1.268 2021/08/07 13:02:10 schwarze Exp $ */
/*
* Copyright (c) 2011-2020 Ingo Schwarze <schwarze@openbsd.org>
* Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -165,6 +165,9 @@ static void putkey(const struct mpage *, char *, uint64_t);
static void putkeys(const struct mpage *, char *, size_t, uint64_t);
static void putmdockey(const struct mpage *,
const struct roff_node *, uint64_t, int);
+#ifdef READ_ALLOWED_PATH
+static int read_allowed(const char *);
+#endif
static int render_string(char **, size_t *);
static void say(const char *, const char *, ...)
__attribute__((__format__ (__printf__, 2, 3)));
@@ -612,8 +615,8 @@ treescan(void)
continue;
}
if (strncmp(buf, basedir, basedir_len) != 0
-#ifdef HOMEBREWDIR
- && strncmp(buf, HOMEBREWDIR, strlen(HOMEBREWDIR))
+#ifdef READ_ALLOWED_PATH
+ && !read_allowed(buf)
#endif
) {
if (warnings) say("",
@@ -823,8 +826,8 @@ filescan(const char *infile)
start = usefile;
else if (strncmp(usefile, basedir, basedir_len) == 0)
start = usefile + basedir_len;
-#ifdef HOMEBREWDIR
- else if (strncmp(usefile, HOMEBREWDIR, strlen(HOMEBREWDIR)) == 0)
+#ifdef READ_ALLOWED_PATH
+ else if (read_allowed(usefile))
start = usefile;
#endif
else {
@@ -2381,6 +2384,25 @@ set_basedir(const char *targetdir, int report_baddir)
return 1;
}
+#ifdef READ_ALLOWED_PATH
+static int
+read_allowed(const char *candidate)
+{
+ const char *cp;
+ size_t len;
+
+ for (cp = READ_ALLOWED_PATH;; cp += len) {
+ while (*cp == ':')
+ cp++;
+ if (*cp == '\0')
+ return 0;
+ len = strcspn(cp, ":");
+ if (strncmp(candidate, cp, len) == 0)
+ return 1;
+ }
+}
+#endif
+
static void
say(const char *file, const char *format, ...)
{