aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/mandocdb.c
diff options
context:
space:
mode:
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, ...)
{