Accepting request 652353 from Base:System
- Update to man-db 2.8.4 * Major changes since man-db 2.8.3: + Rely on decompressors reading from their standard input rather than redundantly passing them the input file on their command line. This works better with downstream AppArmor confinement of decompressors. + Fix invalid syntax in tmpfiles.d/man-db.conf when configured with --disable-cache-owner. + Make seccomp sandbox allow sched_getaffinity, sometimes used by xz. + Check for mandb_nfmt and mandb_tfmt in the manual page hierarchy as documented, not in the current directory. This was broken by the working-directory-handling changes in 2.8.3. Note that this change means that "man -l" will never use an external formatter (which was never documented behaviour and was surely a bad idea). + Make seccomp sandbox allow some shared memory operations across the board rather than just when ESET File Security is in use; the Astrill VPN seems to require something similar, and there are doubtless other such preload hacks. + Some versions of ESET File Security call msgget and msgsnd; if this program is in use, then allow those. * Major changes since man-db 2.8.2: + Make seccomp sandbox allow madvise, since that's used by lbzip2. + Make seccomp sandbox allow kill and tgkill outright, since groff uses kill to pass on signals to its child processes. + Make seccomp sandbox allow sibling architectures on x86/x86_64/x32, since people sometimes mix and match architectures there for performance reasons. + Fix version check in locale macro loading to tolerate groff release candidates. OBS-URL: https://build.opensuse.org/request/show/652353 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/man?expand=0&rev=72
This commit is contained in:
commit
e9fedeb6bd
@ -3,8 +3,8 @@
|
|||||||
1 file changed, 178 insertions(+), 2 deletions(-)
|
1 file changed, 178 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
--- src/man.c
|
--- src/man.c
|
||||||
+++ src/man.c 2016-12-15 14:08:57.993676527 +0000
|
+++ src/man.c 2018-11-23 13:56:09.131098574 +0000
|
||||||
@@ -3514,12 +3514,141 @@ static int locate_page (const char *manp
|
@@ -3573,12 +3573,141 @@ static int locate_page (const char *manp
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -146,7 +146,7 @@
|
|||||||
global_manpath = is_global_mandir (candp->path);
|
global_manpath = is_global_mandir (candp->path);
|
||||||
if (!global_manpath)
|
if (!global_manpath)
|
||||||
drop_effective_privs ();
|
drop_effective_privs ();
|
||||||
@@ -3541,9 +3670,56 @@ static int display_pages (struct candida
|
@@ -3600,9 +3729,56 @@ static int display_pages (struct candida
|
||||||
regain_effective_privs ();
|
regain_effective_privs ();
|
||||||
|
|
||||||
if (found && !findall)
|
if (found && !findall)
|
||||||
|
@ -1,6 +1,14 @@
|
|||||||
|
---
|
||||||
|
man/de/man1/man.1 | 3 +++
|
||||||
|
man/es/man1/man.1 | 3 +++
|
||||||
|
man/it/man1/man.1 | 3 +++
|
||||||
|
man/ja/man1/man.1 | 3 +++
|
||||||
|
man/man1/man.1 | 3 +++
|
||||||
|
5 files changed, 15 insertions(+)
|
||||||
|
|
||||||
--- man/de/man1/man.1
|
--- man/de/man1/man.1
|
||||||
+++ man/de/man1/man.1
|
+++ man/de/man1/man.1 2018-11-23 14:23:22.531297359 +0000
|
||||||
@@ -79,6 +79,9 @@ und den Typ der dort zu findenden Seiten
|
@@ -83,6 +83,9 @@ und den Typ der dort zu findenden Seiten
|
||||||
.TS
|
.TS
|
||||||
tab (@);
|
tab (@);
|
||||||
l lx.
|
l lx.
|
||||||
@ -11,8 +19,8 @@
|
|||||||
Ausführbare Programme oder Shell\-Befehle
|
Ausführbare Programme oder Shell\-Befehle
|
||||||
T}
|
T}
|
||||||
--- man/es/man1/man.1
|
--- man/es/man1/man.1
|
||||||
+++ man/es/man1/man.1
|
+++ man/es/man1/man.1 2018-11-23 14:23:22.531297359 +0000
|
||||||
@@ -101,6 +101,9 @@ del manual y los tipos de páginas que c
|
@@ -80,6 +80,9 @@ seguidos por el tipo de página que cont
|
||||||
.TS
|
.TS
|
||||||
tab (@);
|
tab (@);
|
||||||
l lx.
|
l lx.
|
||||||
@ -20,10 +28,10 @@
|
|||||||
+Ficheros (se encuentran generalmente en \fI/usr/include\fR)
|
+Ficheros (se encuentran generalmente en \fI/usr/include\fR)
|
||||||
+T}
|
+T}
|
||||||
1@T{
|
1@T{
|
||||||
Programas ejecutables y guiones del intérprete de órdenes
|
Programa ejecutable o mandatos del shell
|
||||||
T}
|
T}
|
||||||
--- man/it/man1/man.1
|
--- man/it/man1/man.1
|
||||||
+++ man/it/man1/man.1
|
+++ man/it/man1/man.1 2018-11-23 14:23:22.531297359 +0000
|
||||||
@@ -124,6 +124,9 @@ del manuale seguiti dai tipi di pagine c
|
@@ -124,6 +124,9 @@ del manuale seguiti dai tipi di pagine c
|
||||||
.TS
|
.TS
|
||||||
tab (@);
|
tab (@);
|
||||||
@ -35,8 +43,8 @@
|
|||||||
Programmi eseguibili e comandi della shell
|
Programmi eseguibili e comandi della shell
|
||||||
T}
|
T}
|
||||||
--- man/ja/man1/man.1
|
--- man/ja/man1/man.1
|
||||||
+++ man/ja/man1/man.1
|
+++ man/ja/man1/man.1 2018-11-23 14:23:22.531297359 +0000
|
||||||
@@ -73,6 +73,9 @@ man \- オンラインマニュアルの
|
@@ -78,6 +78,9 @@ default, unless overridden by the \fBSEC
|
||||||
.TS
|
.TS
|
||||||
tab (@);
|
tab (@);
|
||||||
l lx.
|
l lx.
|
||||||
@ -47,8 +55,8 @@
|
|||||||
実行プログラムまたはシェルコマンド
|
実行プログラムまたはシェルコマンド
|
||||||
T}
|
T}
|
||||||
--- man/man1/man.1
|
--- man/man1/man.1
|
||||||
+++ man/man1/man.1
|
+++ man/man1/man.1 2018-11-23 14:23:22.531297359 +0000
|
||||||
@@ -179,6 +179,9 @@ numbers of the manual followed by the ty
|
@@ -186,6 +186,9 @@ numbers of the manual followed by the ty
|
||||||
.TS
|
.TS
|
||||||
tab (@);
|
tab (@);
|
||||||
l lx.
|
l lx.
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
--- src/man.c
|
--- src/man.c
|
||||||
+++ src/man.c 2016-12-15 13:49:52.184819971 +0000
|
+++ src/man.c 2018-11-23 12:42:32.280720195 +0000
|
||||||
@@ -961,7 +961,7 @@ static const char *is_section (const cha
|
@@ -978,7 +978,7 @@ static const char *is_section (const cha
|
||||||
{
|
{
|
||||||
const char **vs;
|
const char **vs;
|
||||||
|
|
||||||
@ -13,7 +13,7 @@
|
|||||||
if (STREQ (*vs, name))
|
if (STREQ (*vs, name))
|
||||||
return name;
|
return name;
|
||||||
/* allow e.g. 3perl but disallow 8139too and libfoo */
|
/* allow e.g. 3perl but disallow 8139too and libfoo */
|
||||||
@@ -2714,7 +2714,7 @@ static int compare_candidates (const str
|
@@ -2776,7 +2776,7 @@ static int compare_candidates (const str
|
||||||
/* Find out whether lsource->ext is ahead of rsource->ext in
|
/* Find out whether lsource->ext is ahead of rsource->ext in
|
||||||
* section_list.
|
* section_list.
|
||||||
*/
|
*/
|
||||||
@ -22,7 +22,7 @@
|
|||||||
if (!*(*sp + 1)) {
|
if (!*(*sp + 1)) {
|
||||||
/* No extension */
|
/* No extension */
|
||||||
if (!sec_left && **sp == *(lsource->ext))
|
if (!sec_left && **sp == *(lsource->ext))
|
||||||
@@ -3679,7 +3679,7 @@ static int do_global_apropos (const char
|
@@ -3738,7 +3738,7 @@ static int do_global_apropos (const char
|
||||||
} else
|
} else
|
||||||
my_section_list = section_list;
|
my_section_list = section_list;
|
||||||
|
|
||||||
@ -31,7 +31,7 @@
|
|||||||
for (mp = manpathlist; *mp; mp++)
|
for (mp = manpathlist; *mp; mp++)
|
||||||
*found += do_global_apropos_section (*mp, *sp, name);
|
*found += do_global_apropos_section (*mp, *sp, name);
|
||||||
|
|
||||||
@@ -3879,7 +3879,7 @@ static int man (const char *name, int *f
|
@@ -3927,7 +3927,7 @@ static int man (const char *name, int *f
|
||||||
else {
|
else {
|
||||||
const char **sp;
|
const char **sp;
|
||||||
|
|
||||||
|
@ -1,47 +1,17 @@
|
|||||||
---
|
---
|
||||||
src/man.c | 22 ++++++++++++----------
|
src/man.c | 4 +++-
|
||||||
1 file changed, 12 insertions(+), 10 deletions(-)
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
--- src/man.c
|
--- src/man.c
|
||||||
+++ src/man.c 2016-12-15 14:02:44.261219082 +0000
|
+++ src/man.c 2018-11-23 13:08:52.119497206 +0000
|
||||||
@@ -1949,16 +1949,6 @@ static void format_display (pipeline *de
|
@@ -2020,7 +2020,9 @@ static void format_display (pipeline *de
|
||||||
if (!disp_status)
|
error (CHILD_FAIL, 0,
|
||||||
break;
|
"no browser configured, so cannot show "
|
||||||
}
|
"HTML output");
|
||||||
- if (!candidate) {
|
|
||||||
- if (html_pager && *html_pager)
|
|
||||||
- error (CHILD_FAIL, 0,
|
|
||||||
- "couldn't execute any browser from %s",
|
|
||||||
- html_pager);
|
|
||||||
- else
|
|
||||||
- error (CHILD_FAIL, 0,
|
|
||||||
- "no browser configured, so cannot show "
|
|
||||||
- "HTML output");
|
|
||||||
- }
|
- }
|
||||||
|
+ } else if (!disp_status)
|
||||||
|
+ sleep (5); /* firefox runs into background to fast */
|
||||||
|
+
|
||||||
free (browser_list);
|
free (browser_list);
|
||||||
if (have_old_cwd && restore_cwd (&old_cwd) < 0) {
|
|
||||||
error (0, errno,
|
|
||||||
@@ -1967,11 +1957,23 @@ static void format_display (pipeline *de
|
|
||||||
if (chdir ("/")) { /* ignore errors */ }
|
|
||||||
}
|
|
||||||
free_cwd (&old_cwd);
|
|
||||||
+ if (!disp_status)
|
|
||||||
+ sleep (5); /* firefox runs into background to fast */
|
|
||||||
if (remove_directory (htmldir, 0) == -1)
|
if (remove_directory (htmldir, 0) == -1)
|
||||||
error (0, errno, _("can't remove directory %s"),
|
error (0, errno, _("can't remove directory %s"),
|
||||||
htmldir);
|
|
||||||
free (htmlfile);
|
|
||||||
free (htmldir);
|
|
||||||
+ if (!candidate) {
|
|
||||||
+ if (html_pager && *html_pager)
|
|
||||||
+ error (CHILD_FAIL, 0,
|
|
||||||
+ "couldn't execute any browser from %s",
|
|
||||||
+ html_pager);
|
|
||||||
+ else
|
|
||||||
+ error (CHILD_FAIL, 0,
|
|
||||||
+ "no browser configured, so cannot show "
|
|
||||||
+ "HTML output");
|
|
||||||
+ }
|
|
||||||
} else
|
|
||||||
#endif /* TROFF_IS_GROFF */
|
|
||||||
{
|
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
1 file changed, 11 insertions(+), 1 deletion(-)
|
1 file changed, 11 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
--- src/mandb.c
|
--- src/mandb.c
|
||||||
+++ src/mandb.c 2016-12-16 07:14:50.995017235 +0000
|
+++ src/mandb.c 2018-11-23 12:50:40.139688661 +0000
|
||||||
@@ -439,17 +439,26 @@ static int mandb (struct dbpaths *dbpath
|
@@ -442,18 +442,27 @@ static int mandb (struct dbpaths *dbpath
|
||||||
int ret, amount;
|
int ret, amount;
|
||||||
char *dbname;
|
char *dbname;
|
||||||
int should_create;
|
int should_create;
|
||||||
@ -27,15 +27,16 @@
|
|||||||
if (!STREQ (catpath, manpath)) {
|
if (!STREQ (catpath, manpath)) {
|
||||||
char *cachedir_tag;
|
char *cachedir_tag;
|
||||||
- int fd;
|
- int fd;
|
||||||
|
int cachedir_tag_exists = 0;
|
||||||
|
|
||||||
+ drop_effective_privs ();
|
+ drop_effective_privs ();
|
||||||
cachedir_tag = xasprintf ("%s/CACHEDIR.TAG", catpath);
|
cachedir_tag = xasprintf ("%s/CACHEDIR.TAG", catpath);
|
||||||
fd = open (cachedir_tag, O_RDONLY);
|
fd = open (cachedir_tag, O_RDONLY);
|
||||||
if (fd < 0) {
|
if (fd < 0) {
|
||||||
@@ -467,6 +476,7 @@ static int mandb (struct dbpaths *dbpath
|
@@ -476,6 +485,7 @@ static int mandb (struct dbpaths *dbpath
|
||||||
if (global_manpath)
|
chown_if_possible (cachedir_tag);
|
||||||
chown_if_possible (cachedir_tag);
|
check_chmod (cachedir_tag, DBMODE);
|
||||||
check_chmod (cachedir_tag, DBMODE);
|
}
|
||||||
+ regain_effective_privs ();
|
+ regain_effective_privs ();
|
||||||
free (cachedir_tag);
|
free (cachedir_tag);
|
||||||
}
|
}
|
||||||
|
@ -5,20 +5,20 @@
|
|||||||
3 files changed, 120 insertions(+)
|
3 files changed, 120 insertions(+)
|
||||||
|
|
||||||
--- config.h.in
|
--- config.h.in
|
||||||
+++ config.h.in 2016-12-15 14:07:41.579217715 +0000
|
+++ config.h.in 2018-11-23 13:11:12.684900437 +0000
|
||||||
@@ -740,6 +740,9 @@
|
@@ -896,6 +896,9 @@
|
||||||
/* Define to 1 if you have the `z' library (-lz). */
|
/* Define to 1 if you have the `z' library (-lz). */
|
||||||
#undef HAVE_LIBZ
|
#undef HAVE_LIBZ
|
||||||
|
|
||||||
+/* Define to 1 if you have libzio for opening compressed manuals */
|
+/* Define to 1 if you have libzio for opening compressed manuals */
|
||||||
+#undef HAVE_ZIO
|
+#undef HAVE_ZIO
|
||||||
+
|
+
|
||||||
/* Define to 1 if you have the <linewrap.h> header file. */
|
/* Define to 1 if you have the <limits.h> header file. */
|
||||||
#undef HAVE_LINEWRAP_H
|
#undef HAVE_LIMITS_H
|
||||||
|
|
||||||
--- configure.ac
|
--- configure.ac
|
||||||
+++ configure.ac 2016-12-15 14:07:41.579217715 +0000
|
+++ configure.ac 2018-11-23 13:09:58.982262008 +0000
|
||||||
@@ -32,6 +32,18 @@ MAN_ARG_DEVICE
|
@@ -34,6 +34,18 @@ MAN_ARG_DEVICE
|
||||||
MAN_ARG_DB
|
MAN_ARG_DB
|
||||||
MAN_ARG_CONFIG_FILE
|
MAN_ARG_CONFIG_FILE
|
||||||
MAN_ARG_SECTIONS
|
MAN_ARG_SECTIONS
|
||||||
@ -37,7 +37,7 @@
|
|||||||
MAN_ARG_AUTOMATIC_CREATE
|
MAN_ARG_AUTOMATIC_CREATE
|
||||||
MAN_ARG_AUTOMATIC_UPDATE
|
MAN_ARG_AUTOMATIC_UPDATE
|
||||||
MAN_ARG_CATS
|
MAN_ARG_CATS
|
||||||
@@ -321,6 +333,46 @@ AC_SUBST([unlzma])
|
@@ -325,6 +337,46 @@ AC_SUBST([unlzma])
|
||||||
AC_SUBST([unxz])
|
AC_SUBST([unxz])
|
||||||
AC_SUBST([unlzip])
|
AC_SUBST([unlzip])
|
||||||
MAN_COMPRESS_LIB([z], [gzopen])
|
MAN_COMPRESS_LIB([z], [gzopen])
|
||||||
@ -85,7 +85,7 @@
|
|||||||
|
|
||||||
# Check for various header files and associated libraries.
|
# Check for various header files and associated libraries.
|
||||||
--- lib/decompress.c
|
--- lib/decompress.c
|
||||||
+++ lib/decompress.c 2016-12-15 14:07:41.579217715 +0000
|
+++ lib/decompress.c 2018-11-23 13:12:59.714923151 +0000
|
||||||
@@ -38,6 +38,10 @@
|
@@ -38,6 +38,10 @@
|
||||||
|
|
||||||
#include "xvasprintf.h"
|
#include "xvasprintf.h"
|
||||||
@ -97,7 +97,7 @@
|
|||||||
#include "manconfig.h"
|
#include "manconfig.h"
|
||||||
#include "comp_src.h"
|
#include "comp_src.h"
|
||||||
#include "pipeline.h"
|
#include "pipeline.h"
|
||||||
@@ -68,6 +72,32 @@ static void decompress_zlib (void *data
|
@@ -69,6 +73,32 @@ static void decompress_zlib (void *data
|
||||||
|
|
||||||
#endif /* HAVE_LIBZ */
|
#endif /* HAVE_LIBZ */
|
||||||
|
|
||||||
@ -121,16 +121,16 @@
|
|||||||
+ break;
|
+ break;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ fclose(file);
|
+ fclose(file);
|
||||||
+ return;
|
+ return;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+#endif /* HAVE_ZIO */
|
+#endif /* HAVE_ZIO */
|
||||||
+
|
+
|
||||||
|
extern man_sandbox *sandbox;
|
||||||
|
|
||||||
pipeline *decompress_open (const char *filename)
|
pipeline *decompress_open (const char *filename)
|
||||||
{
|
@@ -85,6 +115,37 @@ pipeline *decompress_open (const char *f
|
||||||
pipecmd *cmd;
|
|
||||||
@@ -82,6 +112,37 @@ pipeline *decompress_open (const char *f
|
|
||||||
if (stat (filename, &st) < 0 || S_ISDIR (st.st_mode))
|
if (stat (filename, &st) < 0 || S_ISDIR (st.st_mode))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
@ -168,7 +168,7 @@
|
|||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
filename_len = strlen (filename);
|
filename_len = strlen (filename);
|
||||||
if (filename_len > 3 && STREQ (filename + filename_len - 3, ".gz")) {
|
if (filename_len > 3 && STREQ (filename + filename_len - 3, ".gz")) {
|
||||||
@@ -95,7 +156,11 @@ pipeline *decompress_open (const char *f
|
@@ -96,7 +157,11 @@ pipeline *decompress_open (const char *f
|
||||||
}
|
}
|
||||||
#endif /* HAVE_LIBZ */
|
#endif /* HAVE_LIBZ */
|
||||||
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:c68cffa6b93f6362beb1d1259f9ad5b65af2aee9a7d9910086082ea4b75f5da2
|
|
||||||
size 1541288
|
|
@ -9,18 +9,18 @@
|
|||||||
src/Makefile.am | 11 ---
|
src/Makefile.am | 11 ---
|
||||||
src/check_mandirs.c | 33 +++++++----
|
src/check_mandirs.c | 33 +++++++----
|
||||||
src/lexgrog.l | 121 ++++++++++++++++++++++++++++-------------
|
src/lexgrog.l | 121 ++++++++++++++++++++++++++++-------------
|
||||||
src/man.c | 109 ++++++++++++++++++++++++++-----------
|
src/man.c | 101 ++++++++++++++++++++--------------
|
||||||
src/man_db.conf.in | 145 +++++++++++++++++++++++++++++++++++++++++++++++---
|
src/man_db.conf.in | 145 +++++++++++++++++++++++++++++++++++++++++++++++---
|
||||||
src/mandb.c | 18 +++++-
|
src/mandb.c | 18 +++++-
|
||||||
src/manp.c | 2
|
src/manp.c | 2
|
||||||
src/straycats.c | 19 ++++--
|
src/straycats.c | 22 +++++--
|
||||||
src/ult_src.c | 9 ++-
|
src/ult_src.c | 9 ++-
|
||||||
src/ult_src.h | 7 +-
|
src/ult_src.h | 7 +-
|
||||||
17 files changed, 443 insertions(+), 118 deletions(-)
|
17 files changed, 428 insertions(+), 128 deletions(-)
|
||||||
|
|
||||||
--- configure.ac
|
--- configure.ac
|
||||||
+++ configure.ac 2016-12-16 08:41:31.950958393 +0000
|
+++ configure.ac 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -244,6 +244,14 @@ then
|
@@ -248,6 +248,14 @@ then
|
||||||
fi
|
fi
|
||||||
|
|
||||||
MAN_CHECK_PROGS([eqn], [EQN], [use EQN to preprocess equations], [eqn geqn])
|
MAN_CHECK_PROGS([eqn], [EQN], [use EQN to preprocess equations], [eqn geqn])
|
||||||
@ -35,7 +35,7 @@
|
|||||||
MAN_CHECK_PROGS([neqn], [NEQN], [use NEQN to preprocess equations for character devices], [neqn gneqn])
|
MAN_CHECK_PROGS([neqn], [NEQN], [use NEQN to preprocess equations for character devices], [neqn gneqn])
|
||||||
# If we fail to find an neqn, use eqn and try to force it to output for an
|
# If we fail to find an neqn, use eqn and try to force it to output for an
|
||||||
# ascii device. As this is only relevant for equations (?), not using latin1
|
# ascii device. As this is only relevant for equations (?), not using latin1
|
||||||
@@ -287,9 +295,15 @@ then
|
@@ -291,9 +299,15 @@ then
|
||||||
compress_ext="gz"
|
compress_ext="gz"
|
||||||
fi
|
fi
|
||||||
MAN_CHECK_PROGS([compress], [COMPRESS], [use COMPRESS as UNIX compression utility], [compress])
|
MAN_CHECK_PROGS([compress], [COMPRESS], [use COMPRESS as UNIX compression utility], [compress])
|
||||||
@ -54,7 +54,7 @@
|
|||||||
then
|
then
|
||||||
compressor="$compress -c"
|
compressor="$compress -c"
|
||||||
--- include/comp_src.h.in
|
--- include/comp_src.h.in
|
||||||
+++ include/comp_src.h.in 2016-12-16 08:41:31.950958393 +0000
|
+++ include/comp_src.h.in 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -53,7 +53,7 @@ struct compression comp_list[] = {
|
@@ -53,7 +53,7 @@ struct compression comp_list[] = {
|
||||||
#endif /* HAVE_GZIP */
|
#endif /* HAVE_GZIP */
|
||||||
|
|
||||||
@ -65,8 +65,8 @@
|
|||||||
/* Else if we have gzip, incorporate the following */
|
/* Else if we have gzip, incorporate the following */
|
||||||
#elif defined (HAVE_GZIP)
|
#elif defined (HAVE_GZIP)
|
||||||
--- lib/security.c
|
--- lib/security.c
|
||||||
+++ lib/security.c 2016-12-16 08:41:31.950958393 +0000
|
+++ lib/security.c 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -77,6 +77,11 @@ static void gripe_set_euid (void)
|
@@ -78,6 +78,11 @@ static void gripe_set_euid (void)
|
||||||
error (FATAL, errno, _("can't set effective uid"));
|
error (FATAL, errno, _("can't set effective uid"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,10 +75,10 @@
|
|||||||
+ error (FATAL, errno, _("can't set effective gid"));
|
+ error (FATAL, errno, _("can't set effective gid"));
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
#endif /* MAN_OWNER */
|
||||||
|
|
||||||
void init_security (void)
|
void init_security (void)
|
||||||
{
|
@@ -164,6 +169,31 @@ void regain_effective_privs (void)
|
||||||
ruid = getuid ();
|
|
||||||
@@ -155,6 +160,31 @@ void regain_effective_privs (void)
|
|
||||||
uid = euid;
|
uid = euid;
|
||||||
gid = egid;
|
gid = egid;
|
||||||
}
|
}
|
||||||
@ -107,11 +107,11 @@
|
|||||||
+
|
+
|
||||||
+ gid = egid;
|
+ gid = egid;
|
||||||
+ }
|
+ }
|
||||||
#endif /* SECURE_MAN_UID */
|
#endif /* MAN_OWNER */
|
||||||
}
|
}
|
||||||
|
|
||||||
--- lib/util.c
|
--- lib/util.c
|
||||||
+++ lib/util.c 2016-12-16 08:41:31.950958393 +0000
|
+++ lib/util.c 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -50,6 +50,9 @@
|
@@ -50,6 +50,9 @@
|
||||||
|
|
||||||
#include "gettext.h"
|
#include "gettext.h"
|
||||||
@ -123,7 +123,7 @@
|
|||||||
|
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
--- libdb/mydbm.h
|
--- libdb/mydbm.h
|
||||||
+++ libdb/mydbm.h 2016-12-16 08:41:31.950958393 +0000
|
+++ libdb/mydbm.h 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -154,7 +154,7 @@ extern void btree_set_time(DB *db, const
|
@@ -154,7 +154,7 @@ extern void btree_set_time(DB *db, const
|
||||||
# define MYDBM_SET_DPTR(d, value) ((d).data = (char *) (value))
|
# define MYDBM_SET_DPTR(d, value) ((d).data = (char *) (value))
|
||||||
# define MYDBM_DSIZE(d) ((d).size)
|
# define MYDBM_DSIZE(d) ((d).size)
|
||||||
@ -134,8 +134,8 @@
|
|||||||
# define MYDBM_RDOPEN(file) btree_flopen(file, O_RDONLY, DBMODE)
|
# define MYDBM_RDOPEN(file) btree_flopen(file, O_RDONLY, DBMODE)
|
||||||
# define MYDBM_INSERT(db, key, cont) btree_insert(db, key, cont)
|
# define MYDBM_INSERT(db, key, cont) btree_insert(db, key, cont)
|
||||||
--- man/po4a/po/ru.po
|
--- man/po4a/po/ru.po
|
||||||
+++ man/po4a/po/ru.po 2016-12-16 08:41:31.950958393 +0000
|
+++ man/po4a/po/ru.po 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -3942,7 +3942,7 @@ msgstr ""
|
@@ -3890,7 +3890,7 @@ msgstr ""
|
||||||
#~ msgstr "255"
|
#~ msgstr "255"
|
||||||
|
|
||||||
#~ msgid "\\*[softhyphen]"
|
#~ msgid "\\*[softhyphen]"
|
||||||
@ -145,7 +145,7 @@
|
|||||||
#~ msgid "-\n"
|
#~ msgid "-\n"
|
||||||
#~ msgstr "-\n"
|
#~ msgstr "-\n"
|
||||||
--- mk_catdirs
|
--- mk_catdirs
|
||||||
+++ mk_catdirs 2016-12-16 08:41:31.950958393 +0000
|
+++ mk_catdirs 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -0,0 +1,30 @@
|
@@ -0,0 +1,30 @@
|
||||||
+#!/bin/sh
|
+#!/bin/sh
|
||||||
+
|
+
|
||||||
@ -178,7 +178,7 @@
|
|||||||
+
|
+
|
||||||
+test "$(id -u)" -ne 0 || chown man:man -R ${CACHE}
|
+test "$(id -u)" -ne 0 || chown man:man -R ${CACHE}
|
||||||
--- src/Makefile.am
|
--- src/Makefile.am
|
||||||
+++ src/Makefile.am 2016-12-16 09:15:35.265937979 +0000
|
+++ src/Makefile.am 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -173,16 +173,7 @@ apropos$(EXEEXT): whatis$(EXEEXT)
|
@@ -173,16 +173,7 @@ apropos$(EXEEXT): whatis$(EXEEXT)
|
||||||
all-am: apropos$(EXEEXT)
|
all-am: apropos$(EXEEXT)
|
||||||
|
|
||||||
@ -198,9 +198,9 @@
|
|||||||
install-data-hook:
|
install-data-hook:
|
||||||
@if test -f $(DESTDIR)$(config_file); then \
|
@if test -f $(DESTDIR)$(config_file); then \
|
||||||
--- src/check_mandirs.c
|
--- src/check_mandirs.c
|
||||||
+++ src/check_mandirs.c 2016-12-16 08:41:31.950958393 +0000
|
+++ src/check_mandirs.c 2018-11-23 13:56:33.730644942 +0000
|
||||||
@@ -394,7 +394,7 @@ void chown_if_possible (const char *path
|
@@ -393,7 +393,7 @@ void chown_if_possible (const char *path
|
||||||
#endif /* SECURE_MAN_UID */
|
#endif /* MAN_OWNER */
|
||||||
|
|
||||||
/* create the catman hierarchy if it doesn't exist */
|
/* create the catman hierarchy if it doesn't exist */
|
||||||
-static void mkcatdirs (const char *mandir, const char *catdir)
|
-static void mkcatdirs (const char *mandir, const char *catdir)
|
||||||
@ -208,7 +208,7 @@
|
|||||||
{
|
{
|
||||||
char *manname, *catname;
|
char *manname, *catname;
|
||||||
|
|
||||||
@@ -422,9 +422,14 @@ static void mkcatdirs (const char *mandi
|
@@ -421,9 +421,14 @@ static void mkcatdirs (const char *mandi
|
||||||
int j;
|
int j;
|
||||||
regain_effective_privs ();
|
regain_effective_privs ();
|
||||||
debug ("creating catdir hierarchy %s ", catdir);
|
debug ("creating catdir hierarchy %s ", catdir);
|
||||||
@ -226,7 +226,7 @@
|
|||||||
if ((is_directory (manname) == 1)
|
if ((is_directory (manname) == 1)
|
||||||
&& (is_directory (catname) != 1)) {
|
&& (is_directory (catname) != 1)) {
|
||||||
if (mkdir (catname, 0755) < 0) {
|
if (mkdir (catname, 0755) < 0) {
|
||||||
@@ -432,7 +437,7 @@ static void mkcatdirs (const char *mandi
|
@@ -431,7 +436,7 @@ static void mkcatdirs (const char *mandi
|
||||||
error (0, 0, _("warning: cannot create catdir %s"), catname);
|
error (0, 0, _("warning: cannot create catdir %s"), catname);
|
||||||
debug ("warning: cannot create catdir %s\n", catname);
|
debug ("warning: cannot create catdir %s\n", catname);
|
||||||
} else
|
} else
|
||||||
@ -235,7 +235,7 @@
|
|||||||
chown_if_possible (catname);
|
chown_if_possible (catname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -579,15 +584,10 @@ static int testmandirs (const char *path
|
@@ -578,15 +583,10 @@ static int testmandirs (const char *path
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!quiet) {
|
if (!quiet) {
|
||||||
@ -252,7 +252,7 @@
|
|||||||
}
|
}
|
||||||
add_dir_entries (dbf, path, mandir->d_name);
|
add_dir_entries (dbf, path, mandir->d_name);
|
||||||
MYDBM_CLOSE (dbf);
|
MYDBM_CLOSE (dbf);
|
||||||
@@ -694,7 +694,7 @@ int update_db (const char *manpath, cons
|
@@ -693,7 +693,7 @@ int update_db (const char *manpath, cons
|
||||||
dbf = NULL;
|
dbf = NULL;
|
||||||
}
|
}
|
||||||
if (!dbf) {
|
if (!dbf) {
|
||||||
@ -261,7 +261,7 @@
|
|||||||
return EOF;
|
return EOF;
|
||||||
}
|
}
|
||||||
mtime = MYDBM_GET_TIME (dbf);
|
mtime = MYDBM_GET_TIME (dbf);
|
||||||
@@ -897,6 +897,7 @@ static int purge_whatis (MYDBM_FILE dbf,
|
@@ -896,6 +896,7 @@ static int purge_whatis (MYDBM_FILE dbf,
|
||||||
"would delete\n", name, info->ext);
|
"would delete\n", name, info->ext);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -269,7 +269,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check that multi keys are correctly constructed. */
|
/* Check that multi keys are correctly constructed. */
|
||||||
@@ -994,6 +995,14 @@ int purge_missing (const char *manpath,
|
@@ -993,6 +994,14 @@ int purge_missing (const char *manpath,
|
||||||
nextkey = MYDBM_NEXTKEY (dbf, key);
|
nextkey = MYDBM_NEXTKEY (dbf, key);
|
||||||
MYDBM_FREE_DPTR (key);
|
MYDBM_FREE_DPTR (key);
|
||||||
key = nextkey;
|
key = nextkey;
|
||||||
@ -285,8 +285,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
--- src/lexgrog.l
|
--- src/lexgrog.l
|
||||||
+++ src/lexgrog.l 2016-12-16 08:41:31.954958312 +0000
|
+++ src/lexgrog.l 2018-11-23 13:56:33.734644867 +0000
|
||||||
@@ -54,7 +54,7 @@
|
@@ -55,7 +55,7 @@
|
||||||
|
|
||||||
#include "manconv_client.h"
|
#include "manconv_client.h"
|
||||||
|
|
||||||
@ -295,7 +295,7 @@
|
|||||||
#define MAX_NAME 8192
|
#define MAX_NAME 8192
|
||||||
|
|
||||||
#define ARRAY_SIZE(array) (sizeof (array) / sizeof ((array)[0]))
|
#define ARRAY_SIZE(array) (sizeof (array) / sizeof ((array)[0]))
|
||||||
@@ -200,15 +200,15 @@ static const struct macro perldocs[] = {
|
@@ -203,15 +203,15 @@ static const struct macro perldocs[] = {
|
||||||
{ "R\"", "\"" }
|
{ "R\"", "\"" }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -320,7 +320,7 @@
|
|||||||
|
|
||||||
static char newname[MAX_NAME];
|
static char newname[MAX_NAME];
|
||||||
static char *p_name;
|
static char *p_name;
|
||||||
@@ -217,6 +217,7 @@ static char filters[MAX_FILTERS];
|
@@ -220,6 +220,7 @@ static char filters[MAX_FILTERS];
|
||||||
|
|
||||||
static int fill_mode;
|
static int fill_mode;
|
||||||
static int waiting_for_quote;
|
static int waiting_for_quote;
|
||||||
@ -328,7 +328,7 @@
|
|||||||
|
|
||||||
static pipeline *decomp;
|
static pipeline *decomp;
|
||||||
|
|
||||||
@@ -234,7 +235,7 @@ static pipeline *decomp;
|
@@ -237,7 +238,7 @@ static pipeline *decomp;
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%option ecs meta-ecs
|
%option ecs meta-ecs
|
||||||
@ -337,7 +337,7 @@
|
|||||||
%option nostdinit
|
%option nostdinit
|
||||||
%option warn
|
%option warn
|
||||||
%option noyywrap nounput
|
%option noyywrap nounput
|
||||||
@@ -272,8 +273,9 @@ font_change \\f([[:upper:]1-4]|\({upper}
|
@@ -275,8 +276,9 @@ font_change \\f([[:upper:]1-4]|\({upper}
|
||||||
size_change \\s[+-]?{digit}
|
size_change \\s[+-]?{digit}
|
||||||
style_change ({font_change}{size_change}?|{size_change}{font_change}?)
|
style_change ({font_change}{size_change}?|{size_change}{font_change}?)
|
||||||
typeface \.(B[IR]?|I[BR]?|R[BI]|S[BM])
|
typeface \.(B[IR]?|I[BR]?|R[BI]|S[BM])
|
||||||
@ -348,7 +348,7 @@
|
|||||||
|
|
||||||
/* Please add to this list if you know how. */
|
/* Please add to this list if you know how. */
|
||||||
/* Note that, since flex only supports UTF-8 by accident, character classes
|
/* Note that, since flex only supports UTF-8 by accident, character classes
|
||||||
@@ -308,7 +310,26 @@ vi_name TÊN
|
@@ -311,7 +313,26 @@ vi_name TÊN
|
||||||
zh_CN_name 名{blank}?(称|字){blank}?.*
|
zh_CN_name 名{blank}?(称|字){blank}?.*
|
||||||
zh_TW_name (名{blank}?(稱|字)|命令名){blank}?.*
|
zh_TW_name (名{blank}?(稱|字)|命令名){blank}?.*
|
||||||
name ({bg_name}|{cs_name}|{da_name}|{de_name}|{en_name}|{es_name}|{fi_name}|{fr_name}|{hu_name}|{id_name}|{it_name}|{ja_name}|{ko_name}|{latin_name}|{lt_name}|{nl_name}|{pl_name}|{ru_name}|{sk_name}|{sr_name}|{srlatin_name}|{sv_name}|{tr_name}|{vi_name}|{zh_CN_name}|{zh_TW_name})
|
name ({bg_name}|{cs_name}|{da_name}|{de_name}|{en_name}|{es_name}|{fi_name}|{fr_name}|{hu_name}|{id_name}|{it_name}|{ja_name}|{ko_name}|{latin_name}|{lt_name}|{nl_name}|{pl_name}|{ru_name}|{sk_name}|{sr_name}|{srlatin_name}|{sv_name}|{tr_name}|{vi_name}|{zh_CN_name}|{zh_TW_name})
|
||||||
@ -376,7 +376,7 @@
|
|||||||
|
|
||||||
/* eptgrv : eqn, pic, tbl, grap, refer, vgrind */
|
/* eptgrv : eqn, pic, tbl, grap, refer, vgrind */
|
||||||
tbl_request \.TS
|
tbl_request \.TS
|
||||||
@@ -322,8 +343,13 @@ vgrind_request \.vS
|
@@ -325,8 +346,13 @@ vgrind_request \.vS
|
||||||
%%
|
%%
|
||||||
|
|
||||||
/* begin NAME section processing */
|
/* begin NAME section processing */
|
||||||
@ -392,7 +392,7 @@
|
|||||||
|
|
||||||
/* general text matching */
|
/* general text matching */
|
||||||
<MAN_FILE>\.[^Ss\r\n].* |
|
<MAN_FILE>\.[^Ss\r\n].* |
|
||||||
@@ -391,6 +417,7 @@ vgrind_request \.vS
|
@@ -394,6 +420,7 @@ vgrind_request \.vS
|
||||||
<MAN_NAME>{bol}\.sp{blank}* | /* vertical spacing */
|
<MAN_NAME>{bol}\.sp{blank}* | /* vertical spacing */
|
||||||
<MAN_NAME>{bol}\.ig{blank}* | /* block comment */
|
<MAN_NAME>{bol}\.ig{blank}* | /* block comment */
|
||||||
<MAN_NAME>{bol}\.de[1i]?{blank}* | /* macro definition */
|
<MAN_NAME>{bol}\.de[1i]?{blank}* | /* macro definition */
|
||||||
@ -400,14 +400,14 @@
|
|||||||
<MAN_NAME>{bol}\.i[ef]{blank}* | /* conditional */
|
<MAN_NAME>{bol}\.i[ef]{blank}* | /* conditional */
|
||||||
<MAN_NAME>{empty}{bol}.+ |
|
<MAN_NAME>{empty}{bol}.+ |
|
||||||
<MAN_NAME><<EOF>> { /* terminate the string */
|
<MAN_NAME><<EOF>> { /* terminate the string */
|
||||||
@@ -428,21 +455,24 @@ vgrind_request \.vS
|
@@ -431,21 +458,24 @@ vgrind_request \.vS
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No-op requests */
|
/* No-op requests */
|
||||||
-<MAN_NAME>{bol}\.{blank}*$ newline_found ();
|
-<MAN_NAME>{bol}\.{blank}*$ newline_found ();
|
||||||
-<MAN_NAME>{bol}\.\.$ newline_found ();
|
-<MAN_NAME>{bol}\.\.$ newline_found ();
|
||||||
+<MAN_NAME>{bol}\.{blank}*/{eol} newline_found ();
|
+<MAN_NAME>{bol}\.{blank}*/{eol} newline_found ();
|
||||||
+<MAN_NAME>{bol}\.\./{eol} newline_found ();
|
+<MAN_NAME>{bol}\.\./{eol} newline_found ();
|
||||||
|
|
||||||
/* Toggle fill mode */
|
/* Toggle fill mode */
|
||||||
-<MAN_NAME>{bol}\.nf.* fill_mode = 0;
|
-<MAN_NAME>{bol}\.nf.* fill_mode = 0;
|
||||||
@ -418,7 +418,7 @@
|
|||||||
<CAT_NAME>-{eol}{blank_eol}* /* strip continuations */
|
<CAT_NAME>-{eol}{blank_eol}* /* strip continuations */
|
||||||
|
|
||||||
/* convert to DASH */
|
/* convert to DASH */
|
||||||
<MAN_NAME>{next}{blank}*\\\((mi|hy|em){blank}* |
|
<MAN_NAME>{next}{blank}*\\\((mi|hy|em|en){blank}* |
|
||||||
+<MAN_NAME>{bol}\.sp{bol}{blank}+\\-{blank}* | /* strange spacing in NAME section *
|
+<MAN_NAME>{bol}\.sp{bol}{blank}+\\-{blank}* | /* strange spacing in NAME section *
|
||||||
+<MAN_NAME>{blank}+[-\\]?-{bol} | /* dash at end of line */
|
+<MAN_NAME>{blank}+[-\\]?-{bol} | /* dash at end of line */
|
||||||
+<MAN_NAME>{next}{blank_eol}+(\\?-){2}{blank}+ | /* some man pages use -- as dash */
|
+<MAN_NAME>{next}{blank_eol}+(\\?-){2}{blank}+ | /* some man pages use -- as dash */
|
||||||
@ -430,7 +430,7 @@
|
|||||||
|
|
||||||
/* escape sequences and special characters */
|
/* escape sequences and special characters */
|
||||||
<MAN_NAME>{
|
<MAN_NAME>{
|
||||||
@@ -458,6 +488,7 @@ vgrind_request \.vS
|
@@ -461,6 +491,7 @@ vgrind_request \.vS
|
||||||
{next}\\[|^&!%acdpruz{}\r\n] /* various useless control chars */
|
{next}\\[|^&!%acdpruz{}\r\n] /* various useless control chars */
|
||||||
{next}\\[bhlLvx]{blank}*'[^']+' /* various inline functions */
|
{next}\\[bhlLvx]{blank}*'[^']+' /* various inline functions */
|
||||||
|
|
||||||
@ -438,7 +438,7 @@
|
|||||||
{next}\\\$[1-9] /* interpolate arg */
|
{next}\\\$[1-9] /* interpolate arg */
|
||||||
|
|
||||||
/* roff named glyphs */
|
/* roff named glyphs */
|
||||||
@@ -620,11 +651,8 @@ vgrind_request \.vS
|
@@ -623,11 +654,8 @@ vgrind_request \.vS
|
||||||
for later processing */
|
for later processing */
|
||||||
<MAN_NAME>{
|
<MAN_NAME>{
|
||||||
{bol}\.br{blank}* |
|
{bol}\.br{blank}* |
|
||||||
@ -451,7 +451,7 @@
|
|||||||
{bol}\.RS{blank}.* |
|
{bol}\.RS{blank}.* |
|
||||||
{bol}\.RE{blank}.* add_char_to_whatis ((char) 0x11);
|
{bol}\.RE{blank}.* add_char_to_whatis ((char) 0x11);
|
||||||
}
|
}
|
||||||
@@ -639,7 +667,7 @@ vgrind_request \.vS
|
@@ -642,7 +670,7 @@ vgrind_request \.vS
|
||||||
<MAN_NAME>[[:alnum:]]* add_str_to_whatis (yytext, yyleng);
|
<MAN_NAME>[[:alnum:]]* add_str_to_whatis (yytext, yyleng);
|
||||||
|
|
||||||
/* normalise the period (,) separators */
|
/* normalise the period (,) separators */
|
||||||
@ -460,7 +460,7 @@
|
|||||||
<MAN_NAME>{blank}*,{blank}* add_str_to_whatis (", ", 2);
|
<MAN_NAME>{blank}*,{blank}* add_str_to_whatis (", ", 2);
|
||||||
|
|
||||||
<CAT_NAME,MAN_NAME>{bol}. {
|
<CAT_NAME,MAN_NAME>{bol}. {
|
||||||
@@ -655,7 +683,7 @@ vgrind_request \.vS
|
@@ -658,7 +686,7 @@ vgrind_request \.vS
|
||||||
%%
|
%%
|
||||||
|
|
||||||
/* print warning and force scanner to terminate */
|
/* print warning and force scanner to terminate */
|
||||||
@ -469,7 +469,7 @@
|
|||||||
{
|
{
|
||||||
/* Even though MAX_NAME is a macro expanding to a constant, we
|
/* Even though MAX_NAME is a macro expanding to a constant, we
|
||||||
* translate it using ngettext anyway because that will make it
|
* translate it using ngettext anyway because that will make it
|
||||||
@@ -672,7 +700,7 @@ static void too_big (void)
|
@@ -675,7 +703,7 @@ static void too_big (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* append a string to newname if enough room */
|
/* append a string to newname if enough room */
|
||||||
@ -478,7 +478,7 @@
|
|||||||
{
|
{
|
||||||
if (p_name - newname + length >= MAX_NAME)
|
if (p_name - newname + length >= MAX_NAME)
|
||||||
too_big ();
|
too_big ();
|
||||||
@@ -683,8 +711,10 @@ static void add_str_to_whatis (const cha
|
@@ -686,8 +714,10 @@ static void add_str_to_whatis (const cha
|
||||||
}
|
}
|
||||||
|
|
||||||
/* append a char to newname if enough room */
|
/* append a char to newname if enough room */
|
||||||
@ -490,7 +490,7 @@
|
|||||||
if (p_name - newname + 1 >= MAX_NAME)
|
if (p_name - newname + 1 >= MAX_NAME)
|
||||||
too_big ();
|
too_big ();
|
||||||
else if (waiting_for_quote && c == '"')
|
else if (waiting_for_quote && c == '"')
|
||||||
@@ -696,8 +726,24 @@ static void add_char_to_whatis (unsigned
|
@@ -699,8 +729,24 @@ static void add_char_to_whatis (unsigned
|
||||||
/* append the " - " separator to newname, trimming the first space if one's
|
/* append the " - " separator to newname, trimming the first space if one's
|
||||||
* already there
|
* already there
|
||||||
*/
|
*/
|
||||||
@ -516,7 +516,7 @@
|
|||||||
if (p_name != newname && *(p_name - 1) != ' ')
|
if (p_name != newname && *(p_name - 1) != ' ')
|
||||||
add_char_to_whatis (' ');
|
add_char_to_whatis (' ');
|
||||||
add_str_to_whatis ("- ", 2);
|
add_str_to_whatis ("- ", 2);
|
||||||
@@ -705,7 +751,7 @@ static void add_separator_to_whatis (voi
|
@@ -708,7 +754,7 @@ static void add_separator_to_whatis (voi
|
||||||
|
|
||||||
/* append a word to newname if enough room, ensuring only necessary
|
/* append a word to newname if enough room, ensuring only necessary
|
||||||
surrounding space */
|
surrounding space */
|
||||||
@ -525,7 +525,7 @@
|
|||||||
{
|
{
|
||||||
if (p_name != newname && *(p_name - 1) != ' ')
|
if (p_name != newname && *(p_name - 1) != ' ')
|
||||||
add_char_to_whatis (' ');
|
add_char_to_whatis (' ');
|
||||||
@@ -715,7 +761,7 @@ static void add_wordn_to_whatis (const c
|
@@ -718,7 +764,7 @@ static void add_wordn_to_whatis (const c
|
||||||
add_str_to_whatis (string, length);
|
add_str_to_whatis (string, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,7 +534,7 @@
|
|||||||
{
|
{
|
||||||
add_wordn_to_whatis (string, strlen (string));
|
add_wordn_to_whatis (string, strlen (string));
|
||||||
}
|
}
|
||||||
@@ -725,7 +771,7 @@ struct compare_macro_key {
|
@@ -728,7 +774,7 @@ struct compare_macro_key {
|
||||||
size_t length;
|
size_t length;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -543,7 +543,7 @@
|
|||||||
{
|
{
|
||||||
const struct compare_macro_key *key = left;
|
const struct compare_macro_key *key = left;
|
||||||
const struct macro *value = right;
|
const struct macro *value = right;
|
||||||
@@ -743,7 +789,7 @@ static int compare_macro (const void *le
|
@@ -746,7 +792,7 @@ static int compare_macro (const void *le
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -552,7 +552,7 @@
|
|||||||
const char *string, size_t length)
|
const char *string, size_t length)
|
||||||
{
|
{
|
||||||
struct compare_macro_key key;
|
struct compare_macro_key key;
|
||||||
@@ -757,23 +803,23 @@ static void add_macro_to_whatis (const s
|
@@ -760,23 +806,23 @@ static void add_macro_to_whatis (const s
|
||||||
add_str_to_whatis (macro->value, strlen (macro->value));
|
add_str_to_whatis (macro->value, strlen (macro->value));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -580,7 +580,7 @@
|
|||||||
{
|
{
|
||||||
/* If we are mid p_name and the last added char was not a space,
|
/* If we are mid p_name and the last added char was not a space,
|
||||||
* best add one.
|
* best add one.
|
||||||
@@ -851,6 +897,7 @@ int find_name_decompressed (pipeline *p,
|
@@ -859,6 +905,7 @@ int find_name_decompressed (pipeline *p,
|
||||||
|
|
||||||
fill_mode = 1;
|
fill_mode = 1;
|
||||||
waiting_for_quote = 0;
|
waiting_for_quote = 0;
|
||||||
@ -589,8 +589,8 @@
|
|||||||
if (p_lg->type)
|
if (p_lg->type)
|
||||||
BEGIN (CAT_FILE);
|
BEGIN (CAT_FILE);
|
||||||
--- src/man.c
|
--- src/man.c
|
||||||
+++ src/man.c 2016-12-16 08:41:31.954958312 +0000
|
+++ src/man.c 2018-11-26 10:36:45.654147759 +0000
|
||||||
@@ -68,6 +68,7 @@ int have_cwd;
|
@@ -65,6 +65,7 @@
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -598,27 +598,28 @@
|
|||||||
|
|
||||||
#include "argp.h"
|
#include "argp.h"
|
||||||
#include "dirname.h"
|
#include "dirname.h"
|
||||||
@@ -111,6 +112,8 @@ int have_cwd;
|
@@ -109,6 +110,8 @@
|
||||||
#ifdef SECURE_MAN_UID
|
#ifdef MAN_OWNER
|
||||||
extern uid_t ruid;
|
extern uid_t ruid;
|
||||||
extern uid_t euid;
|
extern uid_t euid;
|
||||||
+extern gid_t rgid;
|
+extern gid_t rgid;
|
||||||
+extern gid_t egid;
|
+extern gid_t egid;
|
||||||
#endif /* SECURE_MAN_UID */
|
#endif /* MAN_OWNER */
|
||||||
|
|
||||||
/* the default preprocessor sequence */
|
/* the default preprocessor sequence */
|
||||||
@@ -141,6 +144,10 @@ char *lang;
|
@@ -139,6 +142,11 @@ char *lang;
|
||||||
|
|
||||||
static int global_manpath = -1; /* global or user manual page hierarchy? */
|
static int global_manpath = -1; /* global or user manual page hierarchy? */
|
||||||
static int skip; /* page exists but has been skipped */
|
static int skip; /* page exists but has been skipped */
|
||||||
+static struct termios tms; /* To save terminal settings in */
|
+static struct termios tms; /* To save terminal settings in */
|
||||||
+static int tms_set = 0; /* Do we have saved terminal settings? */
|
+static int tms_set = 0; /* Do we have saved terminal settings? */
|
||||||
|
+static pid_t tms_pid = 0;
|
||||||
+
|
+
|
||||||
+static void set_term(void) { if (tms_set) tcsetattr(fileno(stdin), TCSANOW, &tms); }
|
+static void set_term(void) { if (tms_set && getpid () == tms_pid) tcsetattr(fileno(stdin), TCSANOW, &tms); }
|
||||||
|
|
||||||
#if defined _AIX || defined __sgi
|
#if defined _AIX || defined __sgi
|
||||||
char **global_argv;
|
char **global_argv;
|
||||||
@@ -244,10 +251,10 @@ static int found_a_stray; /* found a st
|
@@ -242,10 +250,10 @@ static int found_a_stray; /* found a st
|
||||||
#ifdef MAN_CATS
|
#ifdef MAN_CATS
|
||||||
static char *tmp_cat_file; /* for open_cat_stream(), close_cat_stream() */
|
static char *tmp_cat_file; /* for open_cat_stream(), close_cat_stream() */
|
||||||
static int created_tmp_cat; /* dto. */
|
static int created_tmp_cat; /* dto. */
|
||||||
@ -630,16 +631,17 @@
|
|||||||
|
|
||||||
# ifdef TROFF_IS_GROFF
|
# ifdef TROFF_IS_GROFF
|
||||||
static int ditroff;
|
static int ditroff;
|
||||||
@@ -654,25 +661,6 @@ static void check_standard_fds (void)
|
@@ -660,36 +668,6 @@ static void check_standard_fds (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-static struct termios tms;
|
-static struct termios tms;
|
||||||
-static int tms_set = 0;
|
-static int tms_set = 0;
|
||||||
|
-static pid_t tms_pid = 0;
|
||||||
-
|
-
|
||||||
-static void set_term (void)
|
-static void set_term (void)
|
||||||
-{
|
-{
|
||||||
- if (tms_set)
|
- if (tms_set && getpid () == tms_pid)
|
||||||
- tcsetattr (STDIN_FILENO, TCSANOW, &tms);
|
- tcsetattr (STDIN_FILENO, TCSANOW, &tms);
|
||||||
-}
|
-}
|
||||||
-
|
-
|
||||||
@ -648,15 +650,25 @@
|
|||||||
- if (isatty (STDOUT_FILENO)) {
|
- if (isatty (STDOUT_FILENO)) {
|
||||||
- debug ("is a tty\n");
|
- debug ("is a tty\n");
|
||||||
- tcgetattr (STDIN_FILENO, &tms);
|
- tcgetattr (STDIN_FILENO, &tms);
|
||||||
- if (!tms_set++)
|
- if (!tms_set++) {
|
||||||
|
- /* Work around pipecmd_exec calling exit(3) rather
|
||||||
|
- * than _exit(2), which means our atexit-registered
|
||||||
|
- * functions are called at the end of each child
|
||||||
|
- * process created using pipecmd_new_function and
|
||||||
|
- * friends. It would probably be good to fix this
|
||||||
|
- * in libpipeline at some point, but it would
|
||||||
|
- * require care to avoid breaking compatibility.
|
||||||
|
- */
|
||||||
|
- tms_pid = getpid ();
|
||||||
- atexit (set_term);
|
- atexit (set_term);
|
||||||
|
- }
|
||||||
- }
|
- }
|
||||||
-}
|
-}
|
||||||
-
|
-
|
||||||
#if defined(TROFF_IS_GROFF) || defined(HEIRLOOM_NROFF)
|
#if defined(TROFF_IS_GROFF) || defined(HEIRLOOM_NROFF)
|
||||||
static int get_roff_line_length (void)
|
static int get_roff_line_length (void)
|
||||||
{
|
{
|
||||||
@@ -1498,6 +1486,18 @@ static void setenv_less (pipecmd *cmd, c
|
@@ -1562,6 +1540,18 @@ static void setenv_less (pipecmd *cmd, c
|
||||||
free (less_opts);
|
free (less_opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -675,16 +687,16 @@
|
|||||||
static void add_output_iconv (pipeline *p,
|
static void add_output_iconv (pipeline *p,
|
||||||
const char *source, const char *target)
|
const char *source, const char *target)
|
||||||
{
|
{
|
||||||
@@ -1613,6 +1613,8 @@ static pipeline *make_display_command (c
|
@@ -1679,6 +1669,8 @@ static pipeline *make_display_command (c
|
||||||
pipecmd_chdir (pager_cmd, cwd.name);
|
|
||||||
}
|
if (pager_cmd) {
|
||||||
setenv_less (pager_cmd, title);
|
setenv_less (pager_cmd, title);
|
||||||
+ if (!htmlout)
|
+ if (!htmlout)
|
||||||
+ disable_x();
|
+ disable_x();
|
||||||
pipeline_command (p, pager_cmd);
|
pipeline_command (p, pager_cmd);
|
||||||
}
|
}
|
||||||
pipeline_ignore_signals (p, 1);
|
pipeline_ignore_signals (p, 1);
|
||||||
@@ -1623,7 +1625,7 @@ static pipeline *make_display_command (c
|
@@ -1689,7 +1681,7 @@ static pipeline *make_display_command (c
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -693,7 +705,7 @@
|
|||||||
/* return a (malloced) temporary name in cat_file's directory */
|
/* return a (malloced) temporary name in cat_file's directory */
|
||||||
static char *tmp_cat_filename (const char *cat_file)
|
static char *tmp_cat_filename (const char *cat_file)
|
||||||
{
|
{
|
||||||
@@ -1651,7 +1653,6 @@ static char *tmp_cat_filename (const cha
|
@@ -1717,7 +1709,6 @@ static char *tmp_cat_filename (const cha
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -701,7 +713,7 @@
|
|||||||
/* If delete unlink tmp_cat, else commit tmp_cat to cat_file.
|
/* If delete unlink tmp_cat, else commit tmp_cat to cat_file.
|
||||||
Return non-zero on error.
|
Return non-zero on error.
|
||||||
*/
|
*/
|
||||||
@@ -1724,6 +1725,7 @@ static int commit_tmp_cat (const char *c
|
@@ -1790,6 +1781,7 @@ static int commit_tmp_cat (const char *c
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@ -709,7 +721,7 @@
|
|||||||
|
|
||||||
/* TODO: This should all be refactored after work on the decompression
|
/* TODO: This should all be refactored after work on the decompression
|
||||||
* library is complete.
|
* library is complete.
|
||||||
@@ -1744,7 +1746,6 @@ static void maybe_discard_stderr (pipeli
|
@@ -1818,7 +1810,6 @@ static void chdir_commands (pipeline *p,
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef MAN_CATS
|
#ifdef MAN_CATS
|
||||||
@ -717,7 +729,7 @@
|
|||||||
/* Return pipeline to write formatted manual page to for saving as cat file. */
|
/* Return pipeline to write formatted manual page to for saving as cat file. */
|
||||||
static pipeline *open_cat_stream (const char *cat_file, const char *encoding)
|
static pipeline *open_cat_stream (const char *cat_file, const char *encoding)
|
||||||
{
|
{
|
||||||
@@ -1986,6 +1987,7 @@ static void format_display (pipeline *de
|
@@ -2041,6 +2032,7 @@ static void format_display (pipeline *de
|
||||||
regain_effective_privs ();
|
regain_effective_privs ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -725,7 +737,7 @@
|
|||||||
/* "Display" a page in catman mode, which amounts to saving it. */
|
/* "Display" a page in catman mode, which amounts to saving it. */
|
||||||
/* TODO: merge with format_display_and_save? */
|
/* TODO: merge with format_display_and_save? */
|
||||||
static void display_catman (const char *cat_file, pipeline *decomp,
|
static void display_catman (const char *cat_file, pipeline *decomp,
|
||||||
@@ -2025,6 +2027,7 @@ static void display_catman (const char *
|
@@ -2084,6 +2076,7 @@ static void display_catman (const char *
|
||||||
pop_cleanup ((cleanup_fun) unlink, tmpcat);
|
pop_cleanup ((cleanup_fun) unlink, tmpcat);
|
||||||
free (tmpcat);
|
free (tmpcat);
|
||||||
}
|
}
|
||||||
@ -733,7 +745,7 @@
|
|||||||
|
|
||||||
static void disable_hyphenation (void *data ATTRIBUTE_UNUSED)
|
static void disable_hyphenation (void *data ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
@@ -2222,7 +2225,7 @@ static int display (const char *dir, con
|
@@ -2283,7 +2276,7 @@ static int display (const char *dir, con
|
||||||
format_cmd = NULL;
|
format_cmd = NULL;
|
||||||
decomp_errno = errno;
|
decomp_errno = errno;
|
||||||
}
|
}
|
||||||
@ -742,7 +754,7 @@
|
|||||||
/* Get modification time, for commit_tmp_cat(). */
|
/* Get modification time, for commit_tmp_cat(). */
|
||||||
if (man_file && *man_file) {
|
if (man_file && *man_file) {
|
||||||
struct stat stb;
|
struct stat stb;
|
||||||
@@ -2232,7 +2235,7 @@ static int display (const char *dir, con
|
@@ -2293,7 +2286,7 @@ static int display (const char *dir, con
|
||||||
} else
|
} else
|
||||||
man_modtime = get_stat_mtime (&stb);
|
man_modtime = get_stat_mtime (&stb);
|
||||||
}
|
}
|
||||||
@ -751,7 +763,7 @@
|
|||||||
display_to_stdout = troff;
|
display_to_stdout = troff;
|
||||||
#ifdef TROFF_IS_GROFF
|
#ifdef TROFF_IS_GROFF
|
||||||
if (htmlout)
|
if (htmlout)
|
||||||
@@ -2368,6 +2371,7 @@ static int display (const char *dir, con
|
@@ -2430,6 +2423,7 @@ static int display (const char *dir, con
|
||||||
}
|
}
|
||||||
if (printed)
|
if (printed)
|
||||||
putchar ('\n');
|
putchar ('\n');
|
||||||
@ -759,7 +771,7 @@
|
|||||||
} else if (catman) {
|
} else if (catman) {
|
||||||
if (format) {
|
if (format) {
|
||||||
if (!save_cat)
|
if (!save_cat)
|
||||||
@@ -2380,6 +2384,7 @@ static int display (const char *dir, con
|
@@ -2442,6 +2436,7 @@ static int display (const char *dir, con
|
||||||
format_cmd,
|
format_cmd,
|
||||||
formatted_encoding);
|
formatted_encoding);
|
||||||
}
|
}
|
||||||
@ -767,7 +779,7 @@
|
|||||||
} else if (format) {
|
} else if (format) {
|
||||||
/* no cat or out of date */
|
/* no cat or out of date */
|
||||||
pipeline *disp_cmd;
|
pipeline *disp_cmd;
|
||||||
@@ -2441,8 +2446,10 @@ static int display (const char *dir, con
|
@@ -2503,8 +2498,10 @@ static int display (const char *dir, con
|
||||||
|
|
||||||
free (formatted_encoding);
|
free (formatted_encoding);
|
||||||
|
|
||||||
@ -780,7 +792,7 @@
|
|||||||
|
|
||||||
if (!prompt)
|
if (!prompt)
|
||||||
prompt = found;
|
prompt = found;
|
||||||
@@ -3277,7 +3284,7 @@ static int display_database_check (struc
|
@@ -3336,7 +3333,7 @@ static int display_database_check (struc
|
||||||
#ifdef MAN_DB_UPDATES
|
#ifdef MAN_DB_UPDATES
|
||||||
if (!exists && !skip) {
|
if (!exists && !skip) {
|
||||||
debug ("dbdelete_wrapper (%s, %p)\n",
|
debug ("dbdelete_wrapper (%s, %p)\n",
|
||||||
@ -789,38 +801,9 @@
|
|||||||
dbdelete_wrapper (candp->req_name, candp->source);
|
dbdelete_wrapper (candp->req_name, candp->source);
|
||||||
}
|
}
|
||||||
#endif /* MAN_DB_UPDATES */
|
#endif /* MAN_DB_UPDATES */
|
||||||
@@ -3882,6 +3889,8 @@ static int local_man_loop (const char *a
|
@@ -3945,17 +3942,20 @@ static int local_man_loop (const char *a
|
||||||
display (NULL, "", NULL, "(stdin)", NULL);
|
|
||||||
else {
|
|
||||||
struct stat st;
|
|
||||||
+ char *file = base_name((char*)argv);
|
|
||||||
+ char *pwd = NULL;
|
|
||||||
|
|
||||||
if (have_cwd) {
|
|
||||||
debug ("restore_cwd: %d %s\n", cwd.desc, cwd.name);
|
|
||||||
@@ -3893,21 +3902,39 @@ static int local_man_loop (const char *a
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ if (strcmp(argv, file)) {
|
|
||||||
+ char *dlm;
|
|
||||||
+ pwd = strdupa(argv);
|
|
||||||
+
|
|
||||||
+ if ((dlm = strrchr(pwd, '/')))
|
|
||||||
+ *dlm = '\0';
|
|
||||||
+ }
|
|
||||||
+ if (pwd && pwd[0]) {
|
|
||||||
+ debug ("chdir %s\n", pwd);
|
|
||||||
+ if (chdir (pwd)) {
|
|
||||||
+ error (0, errno, _("can't chdir to %s"), pwd);
|
|
||||||
+ regain_effective_privs ();
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* Check that the file exists and isn't e.g. a directory */
|
/* Check that the file exists and isn't e.g. a directory */
|
||||||
- if (stat (argv, &st)) {
|
if (stat (argv, &st)) {
|
||||||
+ if (stat (file, &st)) {
|
|
||||||
error (0, errno, "%s", argv);
|
error (0, errno, "%s", argv);
|
||||||
+ regain_effective_privs ();
|
+ regain_effective_privs ();
|
||||||
return NOT_FOUND;
|
return NOT_FOUND;
|
||||||
@ -839,7 +822,7 @@
|
|||||||
return NOT_FOUND;
|
return NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3974,8 +4001,13 @@ executable_out:
|
@@ -4022,6 +4022,11 @@ executable_out:
|
||||||
argv_abs = xstrdup (argv);
|
argv_abs = xstrdup (argv);
|
||||||
}
|
}
|
||||||
lang = lang_dir (argv_abs);
|
lang = lang_dir (argv_abs);
|
||||||
@ -849,12 +832,9 @@
|
|||||||
+ lang = xstrdup(internal_locale);
|
+ lang = xstrdup(internal_locale);
|
||||||
+ }
|
+ }
|
||||||
free (argv_abs);
|
free (argv_abs);
|
||||||
- if (!display (NULL, argv, NULL, argv_base, NULL)) {
|
if (!display (NULL, argv, NULL, argv_base, NULL)) {
|
||||||
+ if (!display (NULL, file, NULL, argv_base, NULL)) {
|
|
||||||
if (local_mf)
|
if (local_mf)
|
||||||
error (0, errno, "%s", argv);
|
@@ -4259,7 +4264,16 @@ int main (int argc, char *argv[])
|
||||||
exit_status = NOT_FOUND;
|
|
||||||
@@ -4142,7 +4174,16 @@ int main (int argc, char *argv[])
|
|
||||||
umask (022);
|
umask (022);
|
||||||
init_locale ();
|
init_locale ();
|
||||||
|
|
||||||
@ -872,23 +852,24 @@
|
|||||||
/* Use LANGUAGE only when LC_MESSAGES locale category is
|
/* Use LANGUAGE only when LC_MESSAGES locale category is
|
||||||
* neither "C" nor "POSIX". */
|
* neither "C" nor "POSIX". */
|
||||||
if (internal_locale && strcmp (internal_locale, "C") &&
|
if (internal_locale && strcmp (internal_locale, "C") &&
|
||||||
@@ -4192,9 +4233,13 @@ int main (int argc, char *argv[])
|
@@ -4298,9 +4312,14 @@ int main (int argc, char *argv[])
|
||||||
if (external)
|
if (external)
|
||||||
do_extern (argc, argv);
|
do_extern (argc, argv);
|
||||||
|
|
||||||
- get_term (); /* stores terminal settings */
|
- get_term (); /* stores terminal settings */
|
||||||
#ifdef SECURE_MAN_UID
|
#ifdef MAN_OWNER
|
||||||
debug ("real user = %d; effective user = %d\n", ruid, euid);
|
debug ("real user = %d; effective user = %d\n", ruid, euid);
|
||||||
+ if (isatty(fileno(stdin)) && isatty(fileno(stdout))) {
|
+ if (isatty(fileno(stdin)) && isatty(fileno(stdout))) {
|
||||||
+ tcgetattr(fileno(stdin), &tms);
|
+ tcgetattr(fileno(stdin), &tms);
|
||||||
|
+ tms_pid = getpid ();
|
||||||
+ if (!tms_set++)
|
+ if (!tms_set++)
|
||||||
+ atexit(set_term);
|
+ atexit(set_term);
|
||||||
+ }
|
+ }
|
||||||
#endif /* SECURE_MAN_UID */
|
#endif /* MAN_OWNER */
|
||||||
|
|
||||||
/* close this locale and reinitialise if a new locale was
|
/* close this locale and reinitialise if a new locale was
|
||||||
--- src/man_db.conf.in
|
--- src/man_db.conf.in
|
||||||
+++ src/man_db.conf.in 2016-12-16 08:41:31.954958312 +0000
|
+++ src/man_db.conf.in 2018-11-23 13:56:33.734644867 +0000
|
||||||
@@ -20,6 +20,14 @@
|
@@ -20,6 +20,14 @@
|
||||||
MANDATORY_MANPATH /usr/man
|
MANDATORY_MANPATH /usr/man
|
||||||
MANDATORY_MANPATH /usr/share/man
|
MANDATORY_MANPATH /usr/share/man
|
||||||
@ -1057,17 +1038,17 @@
|
|||||||
#---------------------------------------------------------
|
#---------------------------------------------------------
|
||||||
# Program definitions. These are commented out by default as the value
|
# Program definitions. These are commented out by default as the value
|
||||||
--- src/mandb.c
|
--- src/mandb.c
|
||||||
+++ src/mandb.c 2016-12-16 08:41:31.954958312 +0000
|
+++ src/mandb.c 2018-11-23 13:56:33.734644867 +0000
|
||||||
@@ -197,6 +197,8 @@ struct dbpaths {
|
@@ -200,6 +200,8 @@ struct dbpaths {
|
||||||
#ifdef SECURE_MAN_UID
|
#ifdef MAN_OWNER
|
||||||
extern uid_t ruid;
|
extern uid_t ruid;
|
||||||
extern uid_t euid;
|
extern uid_t euid;
|
||||||
+extern gid_t rgid;
|
+extern gid_t rgid;
|
||||||
+extern gid_t egid;
|
+extern gid_t egid;
|
||||||
#endif /* SECURE_MAN_UID */
|
#endif /* MAN_OWNER */
|
||||||
|
|
||||||
static char *manpathlist[MAXDIRS];
|
static char *manpathlist[MAXDIRS];
|
||||||
@@ -552,6 +554,8 @@ static int mandb (struct dbpaths *dbpath
|
@@ -561,6 +563,8 @@ static int mandb (struct dbpaths *dbpath
|
||||||
return amount;
|
return amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1076,7 +1057,7 @@
|
|||||||
static int process_manpath (const char *manpath, int global_manpath,
|
static int process_manpath (const char *manpath, int global_manpath,
|
||||||
struct hashtable *tried_catdirs)
|
struct hashtable *tried_catdirs)
|
||||||
{
|
{
|
||||||
@@ -599,6 +603,8 @@ static int process_manpath (const char *
|
@@ -608,6 +612,8 @@ static int process_manpath (const char *
|
||||||
database = NULL;
|
database = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1085,19 +1066,19 @@
|
|||||||
dbpaths = XZALLOC (struct dbpaths);
|
dbpaths = XZALLOC (struct dbpaths);
|
||||||
push_cleanup (cleanup, dbpaths, 0);
|
push_cleanup (cleanup, dbpaths, 0);
|
||||||
push_cleanup (cleanup_sigsafe, dbpaths, 1);
|
push_cleanup (cleanup_sigsafe, dbpaths, 1);
|
||||||
@@ -614,7 +620,7 @@ static int process_manpath (const char *
|
@@ -623,7 +629,7 @@ static int process_manpath (const char *
|
||||||
if (!opt_test && amount)
|
if (!opt_test && amount)
|
||||||
finish_up (dbpaths);
|
finish_up (dbpaths);
|
||||||
#ifdef SECURE_MAN_UID
|
#ifdef MAN_OWNER
|
||||||
- if (global_manpath)
|
- if (global_manpath)
|
||||||
+ if (global_manpath && (euid == 0 || ruid == 0))
|
+ if (global_manpath && (euid == 0 || ruid == 0))
|
||||||
do_chown (dbpaths);
|
do_chown (dbpaths);
|
||||||
#endif /* SECURE_MAN_UID */
|
#endif /* MAN_OWNER */
|
||||||
|
|
||||||
@@ -824,8 +830,14 @@ int main (int argc, char *argv[])
|
@@ -828,8 +834,14 @@ int main (int argc, char *argv[])
|
||||||
error (FAIL, 0,
|
|
||||||
_("the setuid man user \"%s\" does not exist"),
|
#ifdef MAN_OWNER
|
||||||
MAN_OWNER);
|
man_owner = get_man_owner ();
|
||||||
- if (!user && euid != 0 && euid != man_owner->pw_uid)
|
- if (!user && euid != 0 && euid != man_owner->pw_uid)
|
||||||
- user = 1;
|
- user = 1;
|
||||||
+ if (!user) {
|
+ if (!user) {
|
||||||
@ -1108,12 +1089,12 @@
|
|||||||
+ if (euid != man_owner->pw_uid)
|
+ if (euid != man_owner->pw_uid)
|
||||||
+ user = 1;
|
+ user = 1;
|
||||||
+ }
|
+ }
|
||||||
#endif /* SECURE_MAN_UID */
|
#endif /* MAN_OWNER */
|
||||||
|
|
||||||
read_config_file (user);
|
read_config_file (user);
|
||||||
--- src/manp.c
|
--- src/manp.c
|
||||||
+++ src/manp.c 2016-12-16 08:41:31.954958312 +0000
|
+++ src/manp.c 2018-11-23 13:56:33.734644867 +0000
|
||||||
@@ -925,7 +925,7 @@ static char *def_path (int flag)
|
@@ -919,7 +919,7 @@ static char *def_path (int flag)
|
||||||
|
|
||||||
/* If we have complete config file failure... */
|
/* If we have complete config file failure... */
|
||||||
if (!manpath)
|
if (!manpath)
|
||||||
@ -1123,7 +1104,7 @@
|
|||||||
return manpath;
|
return manpath;
|
||||||
}
|
}
|
||||||
--- src/straycats.c
|
--- src/straycats.c
|
||||||
+++ src/straycats.c 2016-12-16 08:41:31.954958312 +0000
|
+++ src/straycats.c 2018-11-23 13:56:33.734644867 +0000
|
||||||
@@ -36,6 +36,7 @@
|
@@ -36,6 +36,7 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@ -1132,11 +1113,14 @@
|
|||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
|
||||||
#include "canonicalize.h"
|
#include "canonicalize.h"
|
||||||
@@ -284,17 +285,23 @@ static int check_for_stray (MYDBM_FILE d
|
@@ -287,18 +288,25 @@ static int check_for_stray (MYDBM_FILE d
|
||||||
|
free (catdir_base);
|
||||||
|
}
|
||||||
|
|
||||||
if (lg.whatis)
|
- free (lg.whatis);
|
||||||
free (lg.whatis);
|
|
||||||
- pipeline_free (decomp);
|
- pipeline_free (decomp);
|
||||||
|
+ if (lg.whatis)
|
||||||
|
+ free (lg.whatis);
|
||||||
+ if (decomp)
|
+ if (decomp)
|
||||||
+ pipeline_free (decomp);
|
+ pipeline_free (decomp);
|
||||||
next_exists:
|
next_exists:
|
||||||
@ -1163,8 +1147,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
--- src/ult_src.c
|
--- src/ult_src.c
|
||||||
+++ src/ult_src.c 2016-12-16 08:41:31.954958312 +0000
|
+++ src/ult_src.c 2018-11-23 13:56:33.734644867 +0000
|
||||||
@@ -363,10 +363,15 @@ const char *ult_src (const char *name, c
|
@@ -362,10 +362,15 @@ const char *ult_src (const char *name, c
|
||||||
}
|
}
|
||||||
pipeline_start (decomp);
|
pipeline_start (decomp);
|
||||||
|
|
||||||
@ -1183,7 +1167,7 @@
|
|||||||
include = test_for_include (buffer);
|
include = test_for_include (buffer);
|
||||||
if (include) {
|
if (include) {
|
||||||
--- src/ult_src.h
|
--- src/ult_src.h
|
||||||
+++ src/ult_src.h 2016-12-16 08:41:31.954958312 +0000
|
+++ src/ult_src.h 2018-11-23 13:56:33.734644867 +0000
|
||||||
@@ -22,9 +22,10 @@
|
@@ -22,9 +22,10 @@
|
||||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
3
man-db-2.8.4.tar.xz
Normal file
3
man-db-2.8.4.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:103c185f9d8269b9ee3b8a4cb27912b3aa393e952731ef96fedc880723472bc3
|
||||||
|
size 1779488
|
@ -1,2 +1,7 @@
|
|||||||
addFilter(".*W:.*patch-not-applied.*Patch1:.*man-db-2.6.3-man0.dif.*")
|
addFilter(".*W:.*patch-not-applied.*Patch1:.*man-db-2.6.3-man0.dif.*")
|
||||||
addFilter(".*W:.*tmpfile-not-in-filelist.*/var/cache/man.*")
|
addFilter(".*W:.*tmpfile-not-in-filelist.*/var/cache/man.*")
|
||||||
|
addFilter(".*W:.*name-repeated-in-summary.*C.*man.*")
|
||||||
|
addFilter(".*W:.*no-version-in-last-changelog.*")
|
||||||
|
addFilter(".*W:.*permissions-incorrect-owner.*/var/cache/man/.*")
|
||||||
|
addFilter(".*W:.*shared-lib-calls-exit.*/usr/lib.*/libman-2\.8\.4\.so.*")
|
||||||
|
addFilter(".*W:.*suse-missing-rclink.*")
|
||||||
|
99
man.changes
99
man.changes
@ -1,3 +1,102 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Nov 26 11:37:32 UTC 2018 - Dr. Werner Fink <werner@suse.de>
|
||||||
|
|
||||||
|
- Update to man-db 2.8.4
|
||||||
|
* Major changes since man-db 2.8.3:
|
||||||
|
+ Rely on decompressors reading from their standard input rather
|
||||||
|
than redundantly passing them the input file on their command
|
||||||
|
line. This works better with downstream AppArmor confinement of
|
||||||
|
decompressors.
|
||||||
|
+ Fix invalid syntax in tmpfiles.d/man-db.conf when configured with
|
||||||
|
--disable-cache-owner.
|
||||||
|
+ Make seccomp sandbox allow sched_getaffinity, sometimes used by
|
||||||
|
xz.
|
||||||
|
+ Check for mandb_nfmt and mandb_tfmt in the manual page hierarchy
|
||||||
|
as documented, not in the current directory. This was broken by
|
||||||
|
the working-directory-handling changes in 2.8.3. Note that this
|
||||||
|
change means that "man -l" will never use an external formatter
|
||||||
|
(which was never documented behaviour and was surely a bad idea).
|
||||||
|
+ Make seccomp sandbox allow some shared memory operations across
|
||||||
|
the board rather than just when ESET File Security is in use; the
|
||||||
|
Astrill VPN seems to require something similar, and there are
|
||||||
|
doubtless other such preload hacks.
|
||||||
|
+ Some versions of ESET File Security call msgget and msgsnd; if
|
||||||
|
this program is in use, then allow those.
|
||||||
|
* Major changes since man-db 2.8.2:
|
||||||
|
+ Make seccomp sandbox allow madvise, since that's used by lbzip2.
|
||||||
|
+ Make seccomp sandbox allow kill and tgkill outright, since groff
|
||||||
|
uses kill to pass on signals to its child processes.
|
||||||
|
+ Make seccomp sandbox allow sibling architectures on
|
||||||
|
x86/x86_64/x32, since people sometimes mix and match architectures
|
||||||
|
there for performance reasons.
|
||||||
|
+ Fix version check in locale macro loading to tolerate groff
|
||||||
|
release candidates.
|
||||||
|
+ man now only changes working directory in child processes, so
|
||||||
|
never fails due to being unable to change back to its original
|
||||||
|
working directory.
|
||||||
|
+ accessdb, apropos, and lexgrog no longer emit spurious gettext
|
||||||
|
headers in their --help output when localised.
|
||||||
|
* Major changes since man-db 2.8.1:
|
||||||
|
+ Make seccomp sandbox allow kill and tgkill when the signal is
|
||||||
|
directed at the current process or one of its threads; this is
|
||||||
|
needed by xz.
|
||||||
|
+ Make seccomp sandbox allow ioctl(fd, TIOCGWINSZ), since that's used
|
||||||
|
by musl.
|
||||||
|
+ Work around the proprietary "ESET File Security" antivirus program in
|
||||||
|
seccomp sandbox: if this is in use then we need to allow some
|
||||||
|
socket-related system calls.
|
||||||
|
+ Work around the "snoopy" execve() wrapper and logger in seccomp
|
||||||
|
sandbox: if this is in use then we need to allow some
|
||||||
|
socket-related system calls.
|
||||||
|
+ Interpret EFAULT from seccomp_load as meaning that seccomp is
|
||||||
|
unavailable, since this can be returned by some versions of
|
||||||
|
qemu-user.
|
||||||
|
* Major changes since man-db 2.8.0:
|
||||||
|
+ Fix seccomp sandbox build on Linux/POWER.
|
||||||
|
+ Fix manconv execution under seccomp when man is installed setuid.
|
||||||
|
+ Make seccomp sandbox allow mremap (used by iconv, for example).
|
||||||
|
+ configure now has a --without-libseccomp option to disable the use
|
||||||
|
of seccomp even if the library is available.
|
||||||
|
* Major changes since man-db 2.7.6.1:
|
||||||
|
+ Fix locale macro loading for Chinese to load the macro file
|
||||||
|
corresponding to just the language part of the user's locale.
|
||||||
|
+ Honour --enable-cache-owner in generated systemd tmpfiles snippet
|
||||||
|
rather than hardcoding "man".
|
||||||
|
+ If man adds prefixes to a page to handle such things as disabling
|
||||||
|
hyphenation, then take account of those when looking for a
|
||||||
|
preprocessor line at the start of the page.
|
||||||
|
+ Fix a segfault in 'man -D --help'.
|
||||||
|
+ Treat "\(en" as another synonym for "\-" in NAME sections.
|
||||||
|
+ Confine most subprocesses that handle untrusted data using
|
||||||
|
seccomp. This mainly deals with subprocesses that perform
|
||||||
|
encoding conversions, (de)compressors, groff programs, and a few
|
||||||
|
other odds and ends. groff programs use a slightly more
|
||||||
|
permissive filter since they need to create temporary files, so
|
||||||
|
additional path-based confinement (e.g. using AppArmor) is still
|
||||||
|
useful.
|
||||||
|
If this goes wrong, then MAN_DISABLE_SECCOMP=1 can be set in the
|
||||||
|
environment to disable it, but please report any such problem as a
|
||||||
|
bug.
|
||||||
|
+ man now falls back to cat if the compile-time default pager is not
|
||||||
|
executable.
|
||||||
|
* Major changes since man-db 2.7.6:
|
||||||
|
+ Don't chmod CACHEDIR.TAG if it doesn't exist.
|
||||||
|
+ Correct installation of Swedish manual pages.
|
||||||
|
- Modify the patches
|
||||||
|
*man-db-2.6.3-listall.dif
|
||||||
|
* man-db-2.6.3-man0.dif
|
||||||
|
* man-db-2.6.3-section.dif
|
||||||
|
* man-db-2.7.1-firefox.dif
|
||||||
|
* man-db-2.7.1-security4.dif
|
||||||
|
* man-db-2.7.1-zio.dif
|
||||||
|
- Rename patch man-db-2.7.6.dif which is now man-db-2.8.4.dif
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Nov 9 13:37:43 UTC 2018 - Dr. Werner Fink <werner@suse.de>
|
||||||
|
|
||||||
|
- Add systemd timer service and its timer unit to refresh man
|
||||||
|
data base daily without using cron (bsc#1115406)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Apr 16 14:25:43 UTC 2018 - werner@suse.de
|
Mon Apr 16 14:25:43 UTC 2018 - werner@suse.de
|
||||||
|
|
||||||
|
66
man.spec
66
man.spec
@ -32,22 +32,24 @@ BuildRequires: gettext-tools
|
|||||||
BuildRequires: groff
|
BuildRequires: groff
|
||||||
BuildRequires: less
|
BuildRequires: less
|
||||||
BuildRequires: libbz2-devel
|
BuildRequires: libbz2-devel
|
||||||
BuildRequires: libpipeline-devel
|
BuildRequires: libpipeline-devel >= 1.5.0
|
||||||
BuildRequires: libzio-devel
|
BuildRequires: libzio-devel
|
||||||
BuildRequires: man-pages
|
BuildRequires: man-pages
|
||||||
BuildRequires: pkg-config
|
BuildRequires: pkg-config
|
||||||
BuildRequires: po4a
|
BuildRequires: po4a
|
||||||
BuildRequires: xz-devel
|
BuildRequires: xz-devel
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
Version: 2.7.6
|
Version: 2.8.4
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: A Program for Displaying man Pages
|
Summary: A Program for Displaying man Pages
|
||||||
License: GPL-2.0+
|
License: GPL-2.0-or-later
|
||||||
Group: System/Base
|
Group: System/Base
|
||||||
Url: https://savannah.nongnu.org/projects/man-db
|
Url: https://savannah.nongnu.org/projects/man-db
|
||||||
PreReq: coreutils fillup
|
PreReq: coreutils fillup
|
||||||
Provides: man_db
|
Provides: man_db
|
||||||
|
%if 0%{suse_version} < 1500
|
||||||
Requires: cron
|
Requires: cron
|
||||||
|
%endif
|
||||||
Requires: glibc-locale
|
Requires: glibc-locale
|
||||||
%if 0%{suse_version} > 1300
|
%if 0%{suse_version} > 1300
|
||||||
Recommends: groff-full
|
Recommends: groff-full
|
||||||
@ -63,8 +65,10 @@ Source4: mancoding
|
|||||||
Source5: wrapper.c
|
Source5: wrapper.c
|
||||||
Source6: man-rpmlintrc
|
Source6: man-rpmlintrc
|
||||||
Source7: man-db-create.service
|
Source7: man-db-create.service
|
||||||
Patch0: man-db-2.7.6.dif
|
Source8: mandb.timer
|
||||||
Patch1: man-db-2.6.3-man0.dif
|
Source9: mandb.service
|
||||||
|
Source10: man-db-2.6.3-man0.dif
|
||||||
|
Patch0: man-db-2.8.4.dif
|
||||||
Patch2: man-db-2.3.19deb4.0-groff.dif
|
Patch2: man-db-2.3.19deb4.0-groff.dif
|
||||||
Patch4: man-db-2.6.3-section.dif
|
Patch4: man-db-2.6.3-section.dif
|
||||||
Patch5: man-db-2.7.1-security4.dif
|
Patch5: man-db-2.7.1-security4.dif
|
||||||
@ -93,7 +97,7 @@ Authors:
|
|||||||
Colin Watson <cjwatson@debian.org>
|
Colin Watson <cjwatson@debian.org>
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -n man-db-%{version}
|
%setup -q -n man-db-%{version}
|
||||||
%patch2 -p0 -b .groff
|
%patch2 -p0 -b .groff
|
||||||
%patch4 -p0 -b .sect
|
%patch4 -p0 -b .sect
|
||||||
%patch5 -p0 -b .secu4
|
%patch5 -p0 -b .secu4
|
||||||
@ -143,8 +147,8 @@ Authors:
|
|||||||
LINGUAS="${LINGUAS:+$LINGUAS }$d"
|
LINGUAS="${LINGUAS:+$LINGUAS }$d"
|
||||||
done
|
done
|
||||||
export CFLAGS LDFLAGS LIBS LINGUAS
|
export CFLAGS LDFLAGS LIBS LINGUAS
|
||||||
aclocal -I ${PWD} -I ${PWD}/m4 -I ${PWD}/gnulib/m4
|
aclocal -I ${PWD} -I ${PWD}/m4 -I ${PWD}/gl/m4
|
||||||
autoconf -B ${PWD} -B ${PWD}/m4 -B ${PWD}/gnulib/m4
|
autoconf -B ${PWD} -B ${PWD}/m4 -B ${PWD}/gl/m4
|
||||||
automake --add-missing
|
automake --add-missing
|
||||||
find -name 'Makefile.*' | xargs \
|
find -name 'Makefile.*' | xargs \
|
||||||
sed -ri -e '/^pkglibdir/{ s@^(pkglibdir[[:blank:]]+=[[:blank:]]+\$\(libdir\)).*@\1@p }'
|
sed -ri -e '/^pkglibdir/{ s@^(pkglibdir[[:blank:]]+=[[:blank:]]+\$\(libdir\)).*@\1@p }'
|
||||||
@ -181,9 +185,9 @@ Authors:
|
|||||||
" $man
|
" $man
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
patch -p0 < %{P:1}
|
patch --backup --suffix=.s10 ${FUZZ+"--fuzz=$FUZZ"} -p0 < %{S:10}
|
||||||
gcc $CFLAGS -I gnulib/lib/ -I include/ --include config.h --include configmake.h \
|
gcc $CFLAGS -I gl/lib/ -I include/ --include config.h -D LOCALEDIR="\"%{_datarootdir}/locale\"" \
|
||||||
-o wrapper %{S:5} -L gnulib/lib/.libs/ -lgnu
|
-o wrapper %{S:5} -L gl/lib/.libs/ -lgnu
|
||||||
|
|
||||||
%check
|
%check
|
||||||
if ! make check; then
|
if ! make check; then
|
||||||
@ -236,30 +240,53 @@ fi
|
|||||||
install -m 0644 groff/tmac.andb %{buildroot}%{_datadir}/groff/site-tmac/
|
install -m 0644 groff/tmac.andb %{buildroot}%{_datadir}/groff/site-tmac/
|
||||||
install -m 0644 groff/tmac.andocdb %{buildroot}%{_datadir}/groff/site-tmac/
|
install -m 0644 groff/tmac.andocdb %{buildroot}%{_datadir}/groff/site-tmac/
|
||||||
mkdir -p %{buildroot}%{_fillupdir}
|
mkdir -p %{buildroot}%{_fillupdir}
|
||||||
mkdir -p %{buildroot}/etc/cron.daily
|
|
||||||
install -m 0644 %{SOURCE1} %{buildroot}%{_fillupdir}
|
|
||||||
install -m 0744 %{SOURCE2} %{buildroot}/etc/cron.daily/suse-do_mandb
|
|
||||||
mkdir -p %{buildroot}%{_unitdir}/
|
mkdir -p %{buildroot}%{_unitdir}/
|
||||||
|
%if 0%{suse_version} < 1500
|
||||||
|
mkdir -p %{buildroot}/etc/cron.daily
|
||||||
|
%endif
|
||||||
|
install -m 0644 %{SOURCE1} %{buildroot}%{_fillupdir}
|
||||||
|
%if 0%{suse_version} < 1500
|
||||||
|
install -m 0744 %{SOURCE2} %{buildroot}/etc/cron.daily/suse-do_mandb
|
||||||
|
%else
|
||||||
|
install -m 0744 %{SOURCE2} %{buildroot}/%{_libexecdir}/man-db/do_mandb
|
||||||
|
%endif
|
||||||
install -m 0644 %{SOURCE7} %{buildroot}%{_unitdir}/
|
install -m 0644 %{SOURCE7} %{buildroot}%{_unitdir}/
|
||||||
|
%if 0%{suse_version} >= 1500
|
||||||
|
install -m 0644 %{SOURCE8} %{buildroot}%{_unitdir}/
|
||||||
|
install -m 0644 %{SOURCE9} %{buildroot}%{_unitdir}/
|
||||||
|
%endif
|
||||||
|
|
||||||
%find_lang man-db --all-name --with-man
|
%find_lang man-db --all-name --with-man
|
||||||
|
|
||||||
%pre
|
%pre
|
||||||
test -d var/catman/ && rm -rf var/catman/ || true
|
test -d var/catman/ && rm -rf var/catman/ || true
|
||||||
|
%if 0%{suse_version} >= 1500
|
||||||
|
%service_add_pre man-db-create.service mandb.service mandb.timer
|
||||||
|
%else
|
||||||
%service_add_pre man-db-create.service
|
%service_add_pre man-db-create.service
|
||||||
|
%endif
|
||||||
|
|
||||||
%post
|
%post
|
||||||
%{?tmpfiles_create:%tmpfiles_create %{_libexecdir}/tmpfiles.d/man-db.conf}
|
%{?tmpfiles_create:%tmpfiles_create %{_libexecdir}/tmpfiles.d/man-db.conf}
|
||||||
%{fillup_only -an cron}
|
%{fillup_only -an cron}
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
%service_add_post man-db-create.service
|
%service_add_post man-db-create.service
|
||||||
|
%if 0%{suse_version} >= 1500
|
||||||
|
%service_add_post mandb.service mandb.timer
|
||||||
|
%endif
|
||||||
|
|
||||||
%preun
|
%preun
|
||||||
%service_del_preun man-db-create.service
|
%service_del_preun man-db-create.service
|
||||||
|
%if 0%{suse_version} >= 1500
|
||||||
|
%service_del_preun mandb.service mandb.timer
|
||||||
|
%endif
|
||||||
|
|
||||||
%postun
|
%postun
|
||||||
/sbin/ldconfig
|
/sbin/ldconfig
|
||||||
%service_del_postun man-db-create.service
|
%service_del_postun man-db-create.service
|
||||||
|
%if 0%{suse_version} >= 1500
|
||||||
|
%service_del_postun mandb.service mandb.timer
|
||||||
|
%endif
|
||||||
|
|
||||||
%posttrans
|
%posttrans
|
||||||
test -d /var/cache/man && mandb --quiet --create ||:
|
test -d /var/cache/man && mandb --quiet --create ||:
|
||||||
@ -270,7 +297,9 @@ test -d /var/cache/man && mandb --quiet --create ||:
|
|||||||
%doc ChangeLog
|
%doc ChangeLog
|
||||||
%doc %{_datadir}/doc/packages/man/man-db-manual.*
|
%doc %{_datadir}/doc/packages/man/man-db-manual.*
|
||||||
%config /etc/manpath.config
|
%config /etc/manpath.config
|
||||||
|
%if 0%{suse_version} < 1500
|
||||||
%attr(0744,root,root) /etc/cron.daily/suse-do_mandb
|
%attr(0744,root,root) /etc/cron.daily/suse-do_mandb
|
||||||
|
%endif
|
||||||
%{_bindir}/apropos
|
%{_bindir}/apropos
|
||||||
%{_bindir}/catman
|
%{_bindir}/catman
|
||||||
%{_bindir}/lexgrog
|
%{_bindir}/lexgrog
|
||||||
@ -285,6 +314,9 @@ test -d /var/cache/man && mandb --quiet --create ||:
|
|||||||
%attr(0755,root,root) %{_libexecdir}/man-db/mandb
|
%attr(0755,root,root) %{_libexecdir}/man-db/mandb
|
||||||
%attr(0755,man,man) %{_libexecdir}/man-db/manconv
|
%attr(0755,man,man) %{_libexecdir}/man-db/manconv
|
||||||
%attr(0755,man,man) %{_libexecdir}/man-db/globbing
|
%attr(0755,man,man) %{_libexecdir}/man-db/globbing
|
||||||
|
%if 0%{suse_version} >= 1500
|
||||||
|
%attr(0744,man,man) %{_libexecdir}/man-db/do_mandb
|
||||||
|
%endif
|
||||||
%{_sbindir}/accessdb
|
%{_sbindir}/accessdb
|
||||||
%{_libdir}/libman*.so
|
%{_libdir}/libman*.so
|
||||||
%{_libexecdir}/man-db/zsoelim
|
%{_libexecdir}/man-db/zsoelim
|
||||||
@ -293,6 +325,10 @@ test -d /var/cache/man && mandb --quiet --create ||:
|
|||||||
%endif
|
%endif
|
||||||
%{_libexecdir}/tmpfiles.d/man-db.conf
|
%{_libexecdir}/tmpfiles.d/man-db.conf
|
||||||
%{_unitdir}/man-db-create.service
|
%{_unitdir}/man-db-create.service
|
||||||
|
%if 0%{suse_version} >= 1500
|
||||||
|
%{_unitdir}/mandb.service
|
||||||
|
%{_unitdir}/mandb.timer
|
||||||
|
%endif
|
||||||
%dir %{_datadir}/groff/site-tmac
|
%dir %{_datadir}/groff/site-tmac
|
||||||
%{_datadir}/groff/site-tmac/tmac.andb
|
%{_datadir}/groff/site-tmac/tmac.andb
|
||||||
%{_datadir}/groff/site-tmac/tmac.andocdb
|
%{_datadir}/groff/site-tmac/tmac.andocdb
|
||||||
@ -300,6 +336,8 @@ test -d /var/cache/man && mandb --quiet --create ||:
|
|||||||
%doc %{_mandir}/man5/*.5.gz
|
%doc %{_mandir}/man5/*.5.gz
|
||||||
%doc %{_mandir}/man8/*.8.gz
|
%doc %{_mandir}/man8/*.8.gz
|
||||||
%dir %{_mandir}/id
|
%dir %{_mandir}/id
|
||||||
|
%dir %{_mandir}/sr
|
||||||
|
%dir %{_mandir}/tr
|
||||||
%{_fillupdir}/sysconfig.cron-man
|
%{_fillupdir}/sysconfig.cron-man
|
||||||
%defattr(-,man,man)
|
%defattr(-,man,man)
|
||||||
%ghost %{_localstatedir}/cache/man
|
%ghost %{_localstatedir}/cache/man
|
||||||
|
10
mandb.service
Normal file
10
mandb.service
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Do daily mandb update
|
||||||
|
Documentation=man:mandb(8) man:catman(8)
|
||||||
|
ConditionACPower=true
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=oneshot
|
||||||
|
Nice=5
|
||||||
|
IOSchedulingClass=idle
|
||||||
|
ExecStart=/usr/lib/man-db/do_mandb
|
11
mandb.timer
Normal file
11
mandb.timer
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=Do daily mandb update
|
||||||
|
Documentation=man:mandb(8) man:catman(8)
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=daily
|
||||||
|
AccuracySec=12h
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
@ -6,18 +6,3 @@
|
|||||||
# Should mandb and whatis be recreated by cron.daily ("yes" or "no")
|
# Should mandb and whatis be recreated by cron.daily ("yes" or "no")
|
||||||
#
|
#
|
||||||
REINIT_MANDB=yes
|
REINIT_MANDB=yes
|
||||||
|
|
||||||
## Type: yesno
|
|
||||||
## Default: yes
|
|
||||||
#
|
|
||||||
# Should old preformatted man pages (in /var/cache/man) be deleted? (yes/no)
|
|
||||||
#
|
|
||||||
DELETE_OLD_CATMAN=yes
|
|
||||||
|
|
||||||
## Type: integer
|
|
||||||
## Default: 7
|
|
||||||
#
|
|
||||||
# How long should old preformatted man pages be kept before deletion? (days)
|
|
||||||
#
|
|
||||||
CATMAN_ATIME=7
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user