From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 2642 invoked from network); 7 Aug 2021 13:02:43 -0000 Received: from bsd.lv (HELO mandoc.bsd.lv) (66.111.2.12) by inbox.vuxu.org with ESMTPUTF8; 7 Aug 2021 13:02:43 -0000 Received: from fantadrom.bsd.lv (localhost [127.0.0.1]) by mandoc.bsd.lv (OpenSMTPD) with ESMTP id 3b764af7 for ; Sat, 7 Aug 2021 08:02:41 -0500 (EST) Received: from localhost (mandoc.bsd.lv [local]) by mandoc.bsd.lv (OpenSMTPD) with ESMTPA id 74d1032e for ; Sat, 7 Aug 2021 08:02:41 -0500 (EST) Date: Sat, 7 Aug 2021 08:02:41 -0500 (EST) X-Mailinglist: mandoc-source Reply-To: source@mandoc.bsd.lv MIME-Version: 1.0 From: schwarze@mandoc.bsd.lv To: source@mandoc.bsd.lv Subject: mandoc: Rename the compile-time configuration variable $HOMEBREWDIR to X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Message-ID: Log Message: ----------- 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 , and final patch also tested by Lukas. Modified Files: -------------- mandoc: configure configure.local.example mandocdb.c Revision Data ------------- Index: configure =================================================================== RCS file: /home/cvs/mandoc/mandoc/configure,v retrieving revision 1.77 retrieving revision 1.78 diff -Lconfigure -Lconfigure -u -p -r1.77 -r1.78 --- configure +++ configure @@ -107,7 +107,7 @@ BIN_FROM_SBIN= INCLUDEDIR= LIBDIR= MANDIR= -HOMEBREWDIR= +READ_ALLOWED_PATH= WWWPREFIX="/var/www" HTDOCDIR= @@ -461,7 +461,8 @@ echo "#define MANPATH_DEFAULT \"${MANPAT echo "#define OSENUM ${OSENUM}" [ -n "${OSNAME}" ] && echo "#define OSNAME \"${OSNAME}\"" [ -n "${UTF8_LOCALE}" ] && echo "#define UTF8_LOCALE \"${UTF8_LOCALE}\"" -[ -n "${HOMEBREWDIR}" ] && echo "#define HOMEBREWDIR \"${HOMEBREWDIR}\"" +[ -n "${READ_ALLOWED_PATH}" ] \ + && echo "#define READ_ALLOWED_PATH \"${READ_ALLOWED_PATH}\"" [ ${HAVE_ATTRIBUTE} -eq 0 ] && echo "#define __attribute__(x)" [ ${HAVE_EFTYPE} -eq 0 ] && echo "#define EFTYPE EINVAL" [ ${HAVE_O_DIRECTORY} -eq 0 ] && echo "#define O_DIRECTORY 0" Index: mandocdb.c =================================================================== RCS file: /home/cvs/mandoc/mandoc/mandocdb.c,v retrieving revision 1.267 retrieving revision 1.268 diff -Lmandocdb.c -Lmandocdb.c -u -p -r1.267 -r1.268 --- mandocdb.c +++ mandocdb.c @@ -165,6 +165,9 @@ static void putkey(const struct mpage * 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 { @@ -2380,6 +2383,25 @@ set_basedir(const char *targetdir, int r } 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, ...) Index: configure.local.example =================================================================== RCS file: /home/cvs/mandoc/mandoc/configure.local.example,v retrieving revision 1.39 retrieving revision 1.40 diff -Lconfigure.local.example -Lconfigure.local.example -u -p -r1.39 -r1.40 --- configure.local.example +++ configure.local.example @@ -209,14 +209,28 @@ INSTALL_LIB="${INSTALL} -m 0444" INSTALL_MAN="${INSTALL} -m 0444" INSTALL_DATA="${INSTALL} -m 0444" -# When using the "homebrew" package manager on Mac OS X, the actual -# manuals are located in a so-called "cellar" and only symlinked -# into the manual trees. To allow mandoc to follow such symlinks, -# you have to specify the physical location of the cellar as returned -# by realpath(3), for example: +# By default, makewhatis(8) can only read from the paths passed on the +# command line or configured in man.conf(5). +# But some package managers on some operating systems store manual pages +# in separate "cellar" or "store" directories and only symlink them +# into the manual trees. +# To support one or more such package managers, give makewhatis(8) +# read access to the cellars and stores on your system, in the form +# of a colon-separated path: +# Homebrow package manager on Mac OS X: PREFIX="/usr/local" -HOMEBREWDIR="${PREFIX}/Cellar" +READ_ALLOWED_PATH="${PREFIX}/Cellar" + +# Nix package manager and/or NixOS Linux distribution: +READ_ALLOWED_PATH="/nix/store" + +# GNU Guix package manager and/or GNU Guix Linux distribution: +READ_ALLOWED_PATH="/gnu/store" + +# If multiple package managers are used concurrently: +PREFIX="/usr/local" +READ_ALLOWED_PATH="/nix/store:${PREFIX}/Cellar" # --- user settings for the mandoc(3) library -------------------------- -- To unsubscribe send an email to source+unsubscribe@mandoc.bsd.lv