From 2b67f33cdf2091dec26434a3720476fccba73da2 Mon Sep 17 00:00:00 2001 From: Doan Tran Cong Danh Date: Wed, 23 Oct 2019 08:18:33 +0700 Subject: [PATCH] man-db: add system account _man:_man man-db complains that: > mandb: the setuid man user "man" does not exist While we're at it, patch man-db to not use glibc iconv's extension on musl. --- srcpkgs/man-db/files/man-db.cron-daily | 9 ++- .../patches/guard-glibc-iconv-ext.patch | 59 +++++++++++++++++++ srcpkgs/man-db/template | 18 +++--- 3 files changed, 73 insertions(+), 13 deletions(-) create mode 100644 srcpkgs/man-db/patches/guard-glibc-iconv-ext.patch diff --git a/srcpkgs/man-db/files/man-db.cron-daily b/srcpkgs/man-db/files/man-db.cron-daily index 6953b76560f..a602972b400 100755 --- a/srcpkgs/man-db/files/man-db.cron-daily +++ b/srcpkgs/man-db/files/man-db.cron-daily @@ -4,11 +4,10 @@ # man-db cron daily set -e -if ! [ -d /var/cache/man ]; then - # Recover from deletion, per FHS. - mkdir -p /var/cache/man - chmod 755 /var/cache/man -fi +# Recover from deletion, per FHS. +mkdir -p /var/cache/man +chown _man:_man /var/cache/man +chmod 755 /var/cache/man # regenerate man database /usr/bin/mandb --quiet diff --git a/srcpkgs/man-db/patches/guard-glibc-iconv-ext.patch b/srcpkgs/man-db/patches/guard-glibc-iconv-ext.patch new file mode 100644 index 00000000000..bbf7b26ff11 --- /dev/null +++ b/srcpkgs/man-db/patches/guard-glibc-iconv-ext.patch @@ -0,0 +1,59 @@ + src/manconv.c | 7 ++++++- + src/manconv_client.c | 4 ++++ + src/whatis.c | 4 ++++ + 3 files changed, 14 insertions(+), 1 deletion(-) + +diff --git src/manconv.c src/manconv.c +index b9ac8d3a..8f5bdaee 100644 +--- src/manconv.c ++++ src/manconv.c +@@ -111,9 +111,14 @@ static int try_iconv (pipeline *p, const char *try_from_code, const char *to, + iconv_t cd_utf8, cd = NULL; + bool to_utf8 = STREQ (try_to_code, "UTF-8") || + STRNEQ (try_to_code, "UTF-8//", 7); +- const char *utf8_target = last ? "UTF-8//IGNORE" : "UTF-8"; + bool ignore_errors = (strstr (try_to_code, "//IGNORE") != NULL); + int ret = 0; ++#ifdef __GLIBC__ ++ const char *utf8_target = last ? "UTF-8//IGNORE" : "UTF-8"; ++#else /* __GLIBC__ */ ++ const char *utf8_target = "UTF-8"; ++ last = false; ++#endif /* ! __GLIBC__ */ + + debug ("trying encoding %s -> %s\n", try_from_code, try_to_code); + +diff --git src/manconv_client.c src/manconv_client.c +index 0c41bec6..2a7f1398 100644 +--- src/manconv_client.c ++++ src/manconv_client.c +@@ -102,7 +102,11 @@ void add_manconv (pipeline *p, const char *source, const char *target) + gl_list_add_last (codes->from, xstrdup (source)); + name = appendstr (name, "UTF-8:", source, (void *) 0); + } ++#ifdef __GLIBC__ + codes->to = xasprintf ("%s//IGNORE", target); ++#else /* __GLIBC__ */ ++ codes->to = xasprintf ("%s", target); ++#endif /* ! __GLIBC__ */ + /* informational only; no shell quoting concerns */ + name = appendstr (name, " -t ", codes->to, (void *) 0); + if (quiet >= 2) +diff --git src/whatis.c src/whatis.c +index d2559169..ec80c117 100644 +--- src/whatis.c ++++ src/whatis.c +@@ -945,9 +945,13 @@ int main (int argc, char *argv[]) + display_seen = new_string_set (GL_HASH_SET); + + #ifdef HAVE_ICONV ++#ifdef __GLIBC__ + locale_charset = xasprintf ("%s//IGNORE", get_locale_charset ()); + conv_to_locale = iconv_open (locale_charset, "UTF-8"); + free (locale_charset); ++#else /* __GLIBC__ */ ++ conv_to_locale = iconv_open(get_locale_charset (), "UTF-8"); ++#endif /* ! __GLIBC__ */ + #endif /* HAVE_ICONV */ + + if (regex_opt) { diff --git a/srcpkgs/man-db/template b/srcpkgs/man-db/template index dfc483c3ea8..c5071c0c6ec 100644 --- a/srcpkgs/man-db/template +++ b/srcpkgs/man-db/template @@ -1,13 +1,14 @@ # Template file for 'man-db' pkgname=man-db version=2.9.0 -revision=1 +revision=2 build_style=gnu-configure configure_args="--with-db=db --with-pager=less --with-gzip=/usr/bin/gzip --with-bzip2=/usr/bin/bzip2 --disable-rpath --enable-threads=posix --with-lzma=/usr/bin/lzma --with-xz=/usr/bin/xz --disable-setuid --without-included-regex --enable-automatic-create --with-libseccomp - --without-systemdsystemunitdir --without-systemdtmpfilesdir" + --without-systemdsystemunitdir --without-systemdtmpfilesdir + --enable-cache-owner=_man" hostmakedepends="groff pkg-config" makedepends="db-devel gettext-devel groff libpipeline-devel libseccomp-devel zlib-devel" @@ -21,6 +22,9 @@ distfiles="${NONGNU_SITE}/${pkgname}/${pkgname}-${version}.tar.xz" checksum=5d4aacd9e8876d6a3203a889860c3524c293c38f04111a3350deab8a6cd3e261 provides="man-0_1" lib32disabled=yes +system_accounts="_man" +_man_homedir="/var/cache/man" +make_dirs="/var/cache/man 0755 _man _man" alternatives=" man:man:/usr/bin/mandb-man @@ -30,12 +34,10 @@ alternatives=" man:whatis.1:/usr/share/man/man1/mandb-whatis.1 man:apropos.1:/usr/share/man/man1/mandb-apropos.1" -pre_configure() { - case "$XBPS_TARGET_MACHINE" in - *-musl) CFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/gettext" - LDFLAGS+=" -lintl";; - esac -} +case "$XBPS_TARGET_MACHINE" in + *-musl) CFLAGS+=" -I${XBPS_CROSS_BASE}/usr/include/gettext" + LDFLAGS+=" -lintl";; +esac post_install() { # Rename files for alternatives