.
OBS-URL: https://build.opensuse.org/package/show/Base:System/man?expand=0&rev=34
This commit is contained in:
parent
85696dd54c
commit
f9d228b03d
@ -1,86 +0,0 @@
|
|||||||
Index: man-db-2.5.2/configure.ac
|
|
||||||
===================================================================
|
|
||||||
--- man-db-2.5.2.orig/configure.ac
|
|
||||||
+++ man-db-2.5.2/configure.ac
|
|
||||||
@@ -20,6 +20,8 @@ dnl
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_CPP
|
|
||||||
AC_GNU_SOURCE
|
|
||||||
+AM_PROG_AR
|
|
||||||
+AM_PROG_CC_C_O
|
|
||||||
dnl
|
|
||||||
dnl check for system defaults
|
|
||||||
dnl
|
|
||||||
diff -urN man-db-2.5.2.orig/aclocal.m4 man-db-2.5.2/aclocal.m4
|
|
||||||
--- man-db-2.5.2.orig/aclocal.m4 2012-07-02 05:51:00.699476202 +0800
|
|
||||||
+++ man-db-2.5.2/aclocal.m4 2012-07-02 05:51:15.795287476 +0800
|
|
||||||
@@ -449,7 +449,7 @@
|
|
||||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
|
||||||
AM_PROG_INSTALL_SH
|
|
||||||
AM_PROG_INSTALL_STRIP
|
|
||||||
-AC_REQUIRE([AM_PROG_MKDIR_P])dnl
|
|
||||||
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
|
|
||||||
# We need awk for the "check" target. The system "awk" is bad on
|
|
||||||
# some platforms.
|
|
||||||
AC_REQUIRE([AC_PROG_AWK])dnl
|
|
||||||
@@ -625,10 +625,10 @@
|
|
||||||
# gives unlimited permission to copy and/or distribute it,
|
|
||||||
# with or without modifications, as long as this notice is preserved.
|
|
||||||
|
|
||||||
-# AM_PROG_MKDIR_P
|
|
||||||
+# AC_PROG_MKDIR_P
|
|
||||||
# ---------------
|
|
||||||
# Check for `mkdir -p'.
|
|
||||||
-AC_DEFUN([AM_PROG_MKDIR_P],
|
|
||||||
+AC_DEFUN([AC_PROG_MKDIR_P],
|
|
||||||
[AC_PREREQ([2.60])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_MKDIR_P])dnl
|
|
||||||
dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P,
|
|
||||||
diff -urN man-db-2.5.2.orig/configure.ac man-db-2.5.2/configure.ac
|
|
||||||
--- man-db-2.5.2.orig/configure.ac 2012-07-02 05:51:00.679476451 +0800
|
|
||||||
+++ man-db-2.5.2/configure.ac 2012-07-02 06:39:30.342100663 +0800
|
|
||||||
@@ -4,7 +4,7 @@
|
|
||||||
# Initialise and check we're in the correct directory.
|
|
||||||
AC_INIT([man-db], [2.5.2], [cjwatson@debian.org])
|
|
||||||
AC_CONFIG_AUX_DIR(tools)
|
|
||||||
-AM_INIT_AUTOMAKE([1.10 -Wall -Werror foreign])
|
|
||||||
+AM_INIT_AUTOMAKE([1.10 -Wall foreign])
|
|
||||||
AC_PREREQ([2.59])
|
|
||||||
AC_CONFIG_SRCDIR(src/man.c)
|
|
||||||
|
|
||||||
diff -urN man-db-2.5.2.orig/gnulib/m4/gnulib-common.m4 man-db-2.5.2/gnulib/m4/gnulib-common.m4
|
|
||||||
--- man-db-2.5.2.orig/gnulib/m4/gnulib-common.m4 2012-07-02 05:51:00.657476726 +0800
|
|
||||||
+++ man-db-2.5.2/gnulib/m4/gnulib-common.m4 2012-07-02 05:51:15.795287476 +0800
|
|
||||||
@@ -36,7 +36,7 @@
|
|
||||||
# Remove this macro when we can assume autoconf >= 2.60.
|
|
||||||
m4_ifdef([AC_PROG_MKDIR_P], [], [
|
|
||||||
AC_DEFUN([AC_PROG_MKDIR_P],
|
|
||||||
- [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
|
|
||||||
+ [AC_REQUIRE([AC_PROG_MKDIR_P])dnl defined by automake
|
|
||||||
MKDIR_P='$(mkdir_p)'
|
|
||||||
AC_SUBST([MKDIR_P])])])
|
|
||||||
|
|
||||||
diff -urN man-db-2.5.2.orig/m4/intl.m4 man-db-2.5.2/m4/intl.m4
|
|
||||||
--- man-db-2.5.2.orig/m4/intl.m4 2012-07-02 05:51:00.681476426 +0800
|
|
||||||
+++ man-db-2.5.2/m4/intl.m4 2012-07-02 05:51:15.796287464 +0800
|
|
||||||
@@ -25,7 +25,7 @@
|
|
||||||
AC_DEFUN([AM_INTL_SUBDIR],
|
|
||||||
[
|
|
||||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
|
||||||
- AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
|
|
||||||
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl defined by automake
|
|
||||||
AC_REQUIRE([AC_PROG_CC])dnl
|
|
||||||
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
|
||||||
AC_REQUIRE([gt_GLIBC2])dnl
|
|
||||||
diff -urN man-db-2.5.2.orig/m4/po.m4 man-db-2.5.2/m4/po.m4
|
|
||||||
--- man-db-2.5.2.orig/m4/po.m4 2012-07-02 05:51:00.681476426 +0800
|
|
||||||
+++ man-db-2.5.2/m4/po.m4 2012-07-02 05:51:15.796287464 +0800
|
|
||||||
@@ -24,7 +24,7 @@
|
|
||||||
[
|
|
||||||
AC_REQUIRE([AC_PROG_MAKE_SET])dnl
|
|
||||||
AC_REQUIRE([AC_PROG_INSTALL])dnl
|
|
||||||
- AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
|
|
||||||
+ AC_REQUIRE([AC_PROG_MKDIR_P])dnl defined by automake
|
|
||||||
AC_REQUIRE([AM_NLS])dnl
|
|
||||||
|
|
||||||
dnl Release version of the gettext macros. This is used to ensure that
|
|
@ -1,31 +0,0 @@
|
|||||||
--- src/globbing.c
|
|
||||||
+++ src/globbing.c 2007-09-19 13:35:04.128822519 +0200
|
|
||||||
@@ -340,13 +340,22 @@ char **look_for_file (const char *unesc_
|
|
||||||
/* allow lookups like "3x foo" to match "../man3/foo.3x" */
|
|
||||||
|
|
||||||
if ((layout & LAYOUT_GNU) && CTYPE (isdigit, *sec) && sec[1] != '\0') {
|
|
||||||
- path = appendstr (path, hier, cat ? "/cat" : "/man", "\t",
|
|
||||||
- NULL);
|
|
||||||
- *strrchr (path, '\t') = *sec;
|
|
||||||
- pattern = end_pattern (appendstr (pattern, name, NULL), sec);
|
|
||||||
+ off_t nptr, nsec;
|
|
||||||
|
|
||||||
- status = match_in_directory (path, pattern, !match_case,
|
|
||||||
- &gbuf);
|
|
||||||
+ path = appendstr (path, hier, cat ? "/cat" : "/man", NULL);
|
|
||||||
+ nptr = strlen(path);
|
|
||||||
+ path = appendstr (path, sec, NULL);
|
|
||||||
+ nsec = nptr + strlen(sec);
|
|
||||||
+
|
|
||||||
+ while (nsec > nptr) {
|
|
||||||
+ *(path + nsec--) = '\0';
|
|
||||||
+ if (pattern)
|
|
||||||
+ *pattern = '\0';
|
|
||||||
+ pattern = end_pattern (appendstr (pattern, name, NULL), sec);
|
|
||||||
+ status = match_in_directory (path, pattern, !match_case, &gbuf);
|
|
||||||
+ if ((status == 0) && (gbuf.gl_pathc != 0))
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* AIX glob.h doesn't define GLOB_NOMATCH and the manpage is vague
|
|
@ -1,32 +0,0 @@
|
|||||||
--- src/mandb.c
|
|
||||||
+++ src/mandb.c 2008-04-21 13:06:01.440910914 +0200
|
|
||||||
@@ -36,6 +36,7 @@
|
|
||||||
#include <errno.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h> /* for chmod() */
|
|
||||||
+#include <fcntl.h> /* for open () */
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
@@ -414,11 +415,20 @@ static short mandb (const char *catpath,
|
|
||||||
char pid[23];
|
|
||||||
short amount;
|
|
||||||
char *dbname;
|
|
||||||
+ int fd;
|
|
||||||
|
|
||||||
dbname = mkdbname (catpath);
|
|
||||||
sprintf (pid, "%d", getpid ());
|
|
||||||
database = appendstr (NULL, catpath, "/", pid, NULL);
|
|
||||||
-
|
|
||||||
+
|
|
||||||
+ /* Just for the case that catpath isn't a system catpath */
|
|
||||||
+ drop_effective_privs ();
|
|
||||||
+ fd = open (database, O_WRONLY | O_CREAT | O_EXCL, 0644);
|
|
||||||
+ regain_effective_privs ();
|
|
||||||
+ if (fd < 0)
|
|
||||||
+ error (FATAL, errno, _("can't create a temporary filename"));
|
|
||||||
+ close(fd);
|
|
||||||
+
|
|
||||||
if (!quiet)
|
|
||||||
printf (_("Processing manual pages under %s...\n"), manpath);
|
|
||||||
#ifdef NDBM
|
|
@ -1,305 +0,0 @@
|
|||||||
--- config.h.in
|
|
||||||
+++ config.h.in 2007-12-07 15:50:23.000000000 +0100
|
|
||||||
@@ -454,6 +454,9 @@
|
|
||||||
/* Define to 1 if you have the `z' library (-lz). */
|
|
||||||
#undef HAVE_LIBZ
|
|
||||||
|
|
||||||
+/* Define to 1 if you have libzio for opening compressed manuals */
|
|
||||||
+#undef HAVE_ZIO
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the <limits.h> header file. */
|
|
||||||
#undef HAVE_LIMITS_H
|
|
||||||
|
|
||||||
--- configure.ac
|
|
||||||
+++ configure.ac 2008-04-21 13:18:38.854059561 +0200
|
|
||||||
@@ -94,7 +94,18 @@ AC_ARG_WITH(sections,
|
|
||||||
sections="$withval"
|
|
||||||
fi],
|
|
||||||
[: ${sections=1 n l 8 3 2 5 4 9 6 7}])
|
|
||||||
-
|
|
||||||
+AC_ARG_WITH(zio,
|
|
||||||
+[AS_HELP_STRING([--with-zio=LIBRARY], [use zlib/libbz2 wrapper library LIBRARY (libzio)])],
|
|
||||||
+ [if test -z "$withval" -o "$withval" = "yes"
|
|
||||||
+ then
|
|
||||||
+ zio=libzio
|
|
||||||
+ elif test "$withval" = "no"
|
|
||||||
+ then
|
|
||||||
+ AC_MSG_ERROR(--with-zio requires an argument)
|
|
||||||
+ else
|
|
||||||
+ zio=$withval
|
|
||||||
+ fi],
|
|
||||||
+ : ${zio=no})
|
|
||||||
# Finish the argument parsing.
|
|
||||||
AC_SUBST(man_owner)dnl
|
|
||||||
AC_SUBST(man_mode)dnl
|
|
||||||
@@ -294,6 +305,29 @@ AC_SUBST(gunzip)
|
|
||||||
AC_SUBST(uncompress)
|
|
||||||
AC_SUBST(bunzip2)
|
|
||||||
MAN_COMPRESS_LIB([z], [gzopen])
|
|
||||||
+dnl Check for zlib and libbz2 libraries to use this together
|
|
||||||
+dnl with SuSE's libzio to open compressed info files.
|
|
||||||
+dnl
|
|
||||||
+if test "$zio" = "no" || test -n "$zio"
|
|
||||||
+then
|
|
||||||
+ AC_CHECK_HEADER(zio.h,[
|
|
||||||
+ for lib in ${zio#lib} zio
|
|
||||||
+ do
|
|
||||||
+ AC_CHECK_LIB($lib, fzopen, [LIBS="-l$lib $LIBS"
|
|
||||||
+ AC_DEFINE([COMP_SRC],[],[Define if you have compressors and want to support compressed cat files.])
|
|
||||||
+ AC_DEFINE([HAVE_ZIO],[],[Define to 1 if you have libzio for opening compressed manuals])])
|
|
||||||
+ done])
|
|
||||||
+ AC_CHECK_HEADER(zlib.h,[
|
|
||||||
+ for lib in z gz
|
|
||||||
+ do
|
|
||||||
+ AC_CHECK_LIB($lib, gzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib" ; break])
|
|
||||||
+ done])
|
|
||||||
+ AC_CHECK_HEADER(bzlib.h,[
|
|
||||||
+ for lib in bz2 bzip2
|
|
||||||
+ do
|
|
||||||
+ AC_CHECK_LIB($lib, BZ2_bzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib" ; break])
|
|
||||||
+ done])
|
|
||||||
+fi
|
|
||||||
dnl To add more decompressors just follow the scheme above.
|
|
||||||
|
|
||||||
# Work out which manual page hierarchy scheme might be in use.
|
|
||||||
--- lib/decompress.c
|
|
||||||
+++ lib/decompress.c 2008-04-23 10:48:04.431353342 +0000
|
|
||||||
@@ -36,6 +36,10 @@
|
|
||||||
# include "zlib.h"
|
|
||||||
#endif /* HAVE_LIBZ */
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+# include "zio.h"
|
|
||||||
+#endif /* HAVE_ZIO */
|
|
||||||
+
|
|
||||||
#include "manconfig.h"
|
|
||||||
#include "comp_src.h"
|
|
||||||
#include "pipeline.h"
|
|
||||||
@@ -66,6 +70,32 @@ static void decompress_zlib (void *data
|
|
||||||
|
|
||||||
#endif /* HAVE_LIBZ */
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+
|
|
||||||
+static void decompress_zio (void *data)
|
|
||||||
+{
|
|
||||||
+ const char *what = (const char*)data;
|
|
||||||
+ FILE *file;
|
|
||||||
+
|
|
||||||
+ file = fdzopen(dup (fileno (stdin)), "r", what);
|
|
||||||
+ if (!file)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ for (;;) {
|
|
||||||
+ char buffer[4096];
|
|
||||||
+ int r = fread(buffer, sizeof(char), sizeof(buffer), file);
|
|
||||||
+ if (r <= 0)
|
|
||||||
+ break;
|
|
||||||
+ if (fwrite (buffer, 1, (size_t) r, stdout) < (size_t) r)
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ fclose(file);
|
|
||||||
+ return;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#endif /* HAVE_ZIO */
|
|
||||||
+
|
|
||||||
pipeline *decompress_open (const char *filename)
|
|
||||||
{
|
|
||||||
command *cmd;
|
|
||||||
@@ -77,9 +107,53 @@ pipeline *decompress_open (const char *f
|
|
||||||
char *ext;
|
|
||||||
struct compression *comp;
|
|
||||||
|
|
||||||
- if (stat (filename, &st) < 0 && !S_ISDIR (st.st_mode))
|
|
||||||
+ if (stat (filename, &st) < 0 || S_ISDIR (st.st_mode))
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ ext = strrchr(filename, '.');
|
|
||||||
+ if (ext && STREQ (ext, ".gz")) {
|
|
||||||
+ /* informational only; no shell quoting concerns */
|
|
||||||
+ char *name = appendstr (NULL, "zcat < ", filename, NULL);
|
|
||||||
+ cmd = command_new_function (name, &decompress_zio, "g");
|
|
||||||
+ free (name);
|
|
||||||
+ p = pipeline_new_commands (cmd, NULL);
|
|
||||||
+ if (strcmp(program_name, "mandb") == 0)
|
|
||||||
+ p->libzio = 1;
|
|
||||||
+ goto got_pipeline;
|
|
||||||
+ }
|
|
||||||
+ if (ext && STREQ (ext, ".z")) {
|
|
||||||
+ /* informational only; no shell quoting concerns */
|
|
||||||
+ char *name = appendstr (NULL, "zcat < ", filename, NULL);
|
|
||||||
+ cmd = command_new_function (name, &decompress_zio, "z");
|
|
||||||
+ free (name);
|
|
||||||
+ p = pipeline_new_commands (cmd, NULL);
|
|
||||||
+ if (strcmp(program_name, "mandb") == 0)
|
|
||||||
+ p->libzio = 1;
|
|
||||||
+ goto got_pipeline;
|
|
||||||
+ }
|
|
||||||
+ if (ext && STREQ (ext, ".bz2")) {
|
|
||||||
+ /* informational only; no shell quoting concerns */
|
|
||||||
+ char *name = appendstr (NULL, "bzcat < ", filename, NULL);
|
|
||||||
+ cmd = command_new_function (name, &decompress_zio, "b");
|
|
||||||
+ free (name);
|
|
||||||
+ p = pipeline_new_commands (cmd, NULL);
|
|
||||||
+ if (strcmp(program_name, "mandb") == 0)
|
|
||||||
+ p->libzio = 1;
|
|
||||||
+ goto got_pipeline;
|
|
||||||
+ }
|
|
||||||
+ if (ext && STREQ (ext, ".Z")) {
|
|
||||||
+ /* informational only; no shell quoting concerns */
|
|
||||||
+ char *name = appendstr (NULL, "zcat < ", filename, NULL);
|
|
||||||
+ cmd = command_new_function (name, &decompress_zio, "Z");
|
|
||||||
+ free (name);
|
|
||||||
+ p = pipeline_new_commands (cmd, NULL);
|
|
||||||
+ if (strcmp(program_name, "mandb") == 0)
|
|
||||||
+ p->libzio = 1;
|
|
||||||
+ goto got_pipeline;
|
|
||||||
+ }
|
|
||||||
+#endif /* HAVE_ZIO */
|
|
||||||
+
|
|
||||||
#ifdef HAVE_LIBZ
|
|
||||||
filename_len = strlen (filename);
|
|
||||||
if (filename_len > 3 && STREQ (filename + filename_len - 3, ".gz")) {
|
|
||||||
--- lib/pipeline.c
|
|
||||||
+++ lib/pipeline.c 2008-04-23 10:52:16.655715088 +0000
|
|
||||||
@@ -50,6 +50,10 @@
|
|
||||||
#include "error.h"
|
|
||||||
#include "pipeline.h"
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+# include "zio.h"
|
|
||||||
+#endif /* HAVE_ZIO */
|
|
||||||
+
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* Functions to build individual commands. */
|
|
||||||
@@ -441,6 +445,9 @@ pipeline *pipeline_new (void)
|
|
||||||
p->commands = xnmalloc (p->commands_max, sizeof *p->commands);
|
|
||||||
p->pids = NULL;
|
|
||||||
p->statuses = NULL;
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ p->libzio = 0;
|
|
||||||
+#endif
|
|
||||||
p->want_in = p->want_out = 0;
|
|
||||||
p->want_infile = p->want_outfile = NULL;
|
|
||||||
p->infd = p->outfd = -1;
|
|
||||||
@@ -479,6 +486,9 @@ pipeline *pipeline_join (pipeline *p1, p
|
|
||||||
pipeline *p = XMALLOC (pipeline);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ assert (p->libzio);
|
|
||||||
+#endif
|
|
||||||
assert (!p1->pids);
|
|
||||||
assert (!p2->pids);
|
|
||||||
assert (!p1->statuses);
|
|
||||||
@@ -614,6 +624,9 @@ void pipeline_commands (pipeline *p, ...
|
|
||||||
|
|
||||||
FILE *pipeline_get_infile (pipeline *p)
|
|
||||||
{
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ assert (!p->libzio);
|
|
||||||
+#endif
|
|
||||||
assert (p->pids); /* pipeline started */
|
|
||||||
assert (p->statuses);
|
|
||||||
if (p->infile)
|
|
||||||
@@ -627,6 +640,12 @@ FILE *pipeline_get_infile (pipeline *p)
|
|
||||||
|
|
||||||
FILE *pipeline_get_outfile (pipeline *p)
|
|
||||||
{
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ if (p->libzio) {
|
|
||||||
+ assert (p->outfile != (FILE*)0);
|
|
||||||
+ return p->outfile;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
assert (p->pids); /* pipeline started */
|
|
||||||
assert (p->statuses);
|
|
||||||
if (p->outfile)
|
|
||||||
@@ -707,6 +726,24 @@ void pipeline_start (pipeline *p)
|
|
||||||
int infd[2];
|
|
||||||
sigset_t set, oset;
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ if (p->ncommands != 1) /* A pipe to the following commands required */
|
|
||||||
+ p->libzio = 0;
|
|
||||||
+
|
|
||||||
+ if (p->libzio) {
|
|
||||||
+ struct command_function *cmdf;
|
|
||||||
+
|
|
||||||
+ assert (p->ncommands == 1);
|
|
||||||
+ assert (p->commands[0]->tag == COMMAND_FUNCTION);
|
|
||||||
+ assert (p->want_infile != NULL);
|
|
||||||
+
|
|
||||||
+ cmdf = &p->commands[0]->u.function;
|
|
||||||
+
|
|
||||||
+ p->outfile = fzopen(p->want_infile, "r");
|
|
||||||
+
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
/* Flush all pending output so that subprocesses don't inherit it. */
|
|
||||||
fflush (NULL);
|
|
||||||
|
|
||||||
@@ -1009,6 +1046,19 @@ int pipeline_wait (pipeline *p)
|
|
||||||
pipeline_dump (p, stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ if (p->libzio) {
|
|
||||||
+ assert (p->outfile != (FILE*)0);
|
|
||||||
+ if (fclose (p->outfile)) {
|
|
||||||
+ error (0, errno, _("closing pipeline output stream failed"));
|
|
||||||
+ ret = 1;
|
|
||||||
+ }
|
|
||||||
+ p->outfile = (FILE*)0;
|
|
||||||
+ p->outfd = -1;
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
assert (p->pids); /* pipeline started */
|
|
||||||
assert (p->statuses);
|
|
||||||
|
|
||||||
@@ -1549,11 +1599,20 @@ static const char *get_block (pipeline *
|
|
||||||
|
|
||||||
if (!peek)
|
|
||||||
p->peek_offset = 0;
|
|
||||||
-
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ if (p->libzio) {
|
|
||||||
+ assert (p->outfile != (FILE*)0);
|
|
||||||
+ r = fread (p->buffer + readstart, sizeof(char), toread, p->outfile);
|
|
||||||
+ goto out;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
assert (p->outfd != -1);
|
|
||||||
r = read (p->outfd, p->buffer + readstart, toread);
|
|
||||||
if (r == -1)
|
|
||||||
return NULL;
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+out:
|
|
||||||
+#endif
|
|
||||||
p->buflen = readstart + r;
|
|
||||||
if (peek)
|
|
||||||
p->peek_offset += r;
|
|
||||||
--- lib/pipeline.h
|
|
||||||
+++ lib/pipeline.h 2008-04-22 13:52:44.846881571 +0000
|
|
||||||
@@ -60,6 +60,14 @@ typedef struct pipeline {
|
|
||||||
pid_t *pids;
|
|
||||||
int *statuses; /* -1 until command exits */
|
|
||||||
|
|
||||||
+#ifdef HAVE_ZIO
|
|
||||||
+ /*
|
|
||||||
+ * Uses for e.g. simple decompression the help of libzio.
|
|
||||||
+ * Do not fork in this case but open the compressed files.
|
|
||||||
+ */
|
|
||||||
+ int libzio;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* To be set by the caller. If positive, these contain
|
|
||||||
* caller-supplied file descriptors for the input and output of the
|
|
||||||
* whole pipeline. If negative, pipeline_start() will create pipes
|
|
@ -1,168 +0,0 @@
|
|||||||
--- include/manconfig.h.in
|
|
||||||
+++ include/manconfig.h.in 2008-04-21 13:32:56.000000000 +0200
|
|
||||||
@@ -375,8 +375,10 @@ extern char *program_name; /* the basena
|
|
||||||
#define NOT_FOUND 16 /* No action was taken */
|
|
||||||
|
|
||||||
/* System or user catpaths? Allow bitwise disjunctions of these. */
|
|
||||||
-#define SYSTEM_CAT 1
|
|
||||||
-#define USER_CAT 2
|
|
||||||
+#define SYSTEM_CATP 1
|
|
||||||
+#define USER_CATP 2
|
|
||||||
+#define FILE_CATP 4
|
|
||||||
+#define WHATIS_CATP 8
|
|
||||||
|
|
||||||
/* string macros */
|
|
||||||
#define STREQ(a,b) (strcmp(a,b) == 0)
|
|
||||||
--- src/catman.c
|
|
||||||
+++ src/catman.c 2008-01-30 12:02:21.000000000 +0100
|
|
||||||
@@ -450,7 +450,7 @@ int main (int argc, char *argv[])
|
|
||||||
char *catpath;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
- catpath = get_catpath (*mp, SYSTEM_CAT | USER_CAT);
|
|
||||||
+ catpath = get_catpath (*mp, SYSTEM_CATP|USER_CATP);
|
|
||||||
|
|
||||||
if (catpath) {
|
|
||||||
if (is_directory (catpath) != 1) {
|
|
||||||
--- src/man.c
|
|
||||||
+++ src/man.c 2008-04-21 17:53:02.000000000 +0200
|
|
||||||
@@ -1249,8 +1304,7 @@ static pipeline *make_roff_command (cons
|
|
||||||
#ifdef ALT_EXT_FORMAT
|
|
||||||
/* Check both external formatter locations */
|
|
||||||
if (dir && !recode) {
|
|
||||||
- char *catpath = get_catpath
|
|
||||||
- (dir, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
||||||
+ char *catpath = get_catpath (dir, global_manpath ? SYSTEM_CATP : USER_CATP);
|
|
||||||
|
|
||||||
/* If we have an alternate catpath */
|
|
||||||
if (catpath) {
|
|
||||||
@@ -2366,8 +2450,7 @@ static char *find_cat_file (const char *
|
|
||||||
*/
|
|
||||||
if (!STREQ (man_file, original)) {
|
|
||||||
global_manpath = is_global_mandir (man_file);
|
|
||||||
- cat_path = get_catpath
|
|
||||||
- (man_file, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
||||||
+ cat_path = get_catpath (man_file, (global_manpath ? SYSTEM_CATP : USER_CATP)|FILE_CATP);
|
|
||||||
|
|
||||||
if (cat_path) {
|
|
||||||
cat_file = convert_name (cat_path, 0);
|
|
||||||
@@ -2394,8 +2477,7 @@ static char *find_cat_file (const char *
|
|
||||||
}
|
|
||||||
|
|
||||||
global_manpath = is_global_mandir (original);
|
|
||||||
- cat_path = get_catpath
|
|
||||||
- (original, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
||||||
+ cat_path = get_catpath (original, (global_manpath ? SYSTEM_CATP : USER_CATP)|FILE_CATP);
|
|
||||||
|
|
||||||
if (cat_path) {
|
|
||||||
cat_file = convert_name (cat_path, 0);
|
|
||||||
@@ -2884,9 +2966,7 @@ static int display_database (struct cand
|
|
||||||
|
|
||||||
if (access (file, R_OK) != 0) {
|
|
||||||
char *catpath;
|
|
||||||
- catpath = get_catpath (candp->path,
|
|
||||||
- global_manpath ? SYSTEM_CAT
|
|
||||||
- : USER_CAT);
|
|
||||||
+ catpath = get_catpath (candp->path, global_manpath ? SYSTEM_CATP : USER_CATP);
|
|
||||||
|
|
||||||
if (catpath && strcmp (catpath, candp->path) != 0) {
|
|
||||||
file = make_filename (catpath, name,
|
|
||||||
@@ -3001,7 +3081,7 @@ static int try_db (const char *manpath,
|
|
||||||
|
|
||||||
/* find out where our db for this manpath should be */
|
|
||||||
|
|
||||||
- catpath = get_catpath (manpath, global_manpath ? SYSTEM_CAT : USER_CAT);
|
|
||||||
+ catpath = get_catpath (manpath, (global_manpath ? SYSTEM_CATP : USER_CATP)|FILE_CATP);
|
|
||||||
if (catpath) {
|
|
||||||
database = mkdbname (catpath);
|
|
||||||
free (catpath);
|
|
||||||
--- src/mandb.c
|
|
||||||
+++ src/mandb.c 2008-01-30 12:01:40.000000000 +0100
|
|
||||||
@@ -484,10 +486,13 @@ static short process_manpath (const char
|
|
||||||
short amount = 0;
|
|
||||||
|
|
||||||
if (global_manpath) { /* system db */
|
|
||||||
- catpath = get_catpath (manpath, SYSTEM_CAT);
|
|
||||||
- assert (catpath);
|
|
||||||
+ catpath = get_catpath (manpath, SYSTEM_CATP);
|
|
||||||
+ if (!catpath) {
|
|
||||||
+ error (0, 0, _("warning: no system cat path for man path %s"), manpath);
|
|
||||||
+ return amount;
|
|
||||||
+ }
|
|
||||||
} else { /* user db */
|
|
||||||
- catpath = get_catpath (manpath, USER_CAT);
|
|
||||||
+ catpath = get_catpath (manpath, USER_CATP);
|
|
||||||
if (!catpath)
|
|
||||||
catpath = xstrdup (manpath);
|
|
||||||
}
|
|
||||||
--- src/manp.c
|
|
||||||
+++ src/manp.c 2008-01-30 12:01:03.000000000 +0100
|
|
||||||
@@ -1134,8 +1145,8 @@ char *get_catpath (const char *name, int
|
|
||||||
struct list *list;
|
|
||||||
|
|
||||||
for (list = namestore; list; list = list->next)
|
|
||||||
- if (((cattype & SYSTEM_CAT) && list->flag == MANDB_MAP) ||
|
|
||||||
- ((cattype & USER_CAT) && list->flag == MANDB_MAP_USER)) {
|
|
||||||
+ if (((cattype & SYSTEM_CATP) && list->flag == MANDB_MAP) ||
|
|
||||||
+ ((cattype & USER_CATP) && list->flag == MANDB_MAP_USER)) {
|
|
||||||
size_t manlen = strlen (list->key);
|
|
||||||
if (STRNEQ (name, list->key, manlen)) {
|
|
||||||
const char *suffix = name + manlen;
|
|
||||||
@@ -1143,16 +1154,30 @@ char *get_catpath (const char *name, int
|
|
||||||
|
|
||||||
if (*suffix == '/') {
|
|
||||||
++suffix;
|
|
||||||
- catpath = appendstr (catpath, "/",
|
|
||||||
- NULL);
|
|
||||||
+ catpath = appendstr (catpath, "/", NULL);
|
|
||||||
}
|
|
||||||
if (STRNEQ (suffix, "man", 3)) {
|
|
||||||
suffix += 3;
|
|
||||||
- catpath = appendstr (catpath, "cat",
|
|
||||||
- NULL);
|
|
||||||
+ catpath = appendstr (catpath, "cat", NULL);
|
|
||||||
}
|
|
||||||
catpath = appendstr (catpath, suffix, NULL);
|
|
||||||
- return catpath;
|
|
||||||
+ if (cattype & FILE_CATP)
|
|
||||||
+ return catpath;
|
|
||||||
+ if (is_directory (catpath) == 1)
|
|
||||||
+ return catpath;
|
|
||||||
+ if ((cattype & WHATIS_CATP) == 0) {
|
|
||||||
+ const char locale_delims[] = "_@,.";
|
|
||||||
+ const char *delim;
|
|
||||||
+ for (delim = locale_delims; *delim != '\0'; ++delim) {
|
|
||||||
+ char * tmp = strrchr (catpath, *delim);
|
|
||||||
+ if (!tmp)
|
|
||||||
+ continue;
|
|
||||||
+ *tmp = '\0';
|
|
||||||
+ if (is_directory (catpath) == 1)
|
|
||||||
+ return catpath;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ free (catpath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
--- src/whatis.c
|
|
||||||
+++ src/whatis.c 2008-04-21 13:21:57.000000000 +0200
|
|
||||||
@@ -651,7 +651,7 @@ static int search (char *page)
|
|
||||||
debug ("lower(%s) = \"%s\"\n", page, lowpage);
|
|
||||||
|
|
||||||
for (mp = manpathlist; *mp; mp++) {
|
|
||||||
- catpath = get_catpath (*mp, SYSTEM_CAT | USER_CAT);
|
|
||||||
+ catpath = get_catpath (*mp, SYSTEM_CATP|USER_CATP|WHATIS_CATP);
|
|
||||||
|
|
||||||
if (catpath) {
|
|
||||||
database = mkdbname (catpath);
|
|
||||||
--- src/straycats.c
|
|
||||||
+++ src/straycats.c 2008-04-21 15:47:04.000000000 +0200
|
|
||||||
@@ -338,7 +343,7 @@ int straycats (const char *manpath)
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- catpath = get_catpath (manpath, SYSTEM_CAT | USER_CAT);
|
|
||||||
+ catpath = get_catpath (manpath, SYSTEM_CATP|USER_CATP);
|
|
||||||
|
|
||||||
/* look in the usual catpath location */
|
|
||||||
mandir = xstrdup (manpath);
|
|
@ -1,62 +0,0 @@
|
|||||||
--- src/encodings.c
|
|
||||||
+++ src/encodings.c 2008-08-12 15:26:22.959763175 +0200
|
|
||||||
@@ -106,6 +106,11 @@ static struct directory_entry directory_
|
|
||||||
{ "cs", "ISO-8859-2", "ISO-8859-2" }, /* Czech */
|
|
||||||
{ "hr", "ISO-8859-2", "ISO-8859-2" }, /* Croatian */
|
|
||||||
{ "hu", "ISO-8859-2", "ISO-8859-2" }, /* Hungarian */
|
|
||||||
+ { "zh_TW", "BIG5", "BIG5" }, /* Traditional Chinese */
|
|
||||||
+ { "zh_HK", "BIG5HKSCS", "BIG5HKSCS" }, /* Traditional Chinese */
|
|
||||||
+ { "zh_CN", "GB18030", "GB18030" }, /* Simplified Chinese */
|
|
||||||
+ { "zh_SG", "GB18030", "GB18030" }, /* Simplified Chinese */
|
|
||||||
+ { "zh", "GB18030", "GB18030" }, /* Simplified Chinese */
|
|
||||||
{ "ja", "EUC-JP", "EUC-JP" }, /* Japanese */
|
|
||||||
{ "ko", "EUC-KR", "EUC-KR" }, /* Korean */
|
|
||||||
{ "pl", "ISO-8859-2", "ISO-8859-2" }, /* Polish */
|
|
||||||
@@ -208,6 +213,7 @@ static struct charset_entry charset_tabl
|
|
||||||
{ "EUC-CN", "nippon" },
|
|
||||||
{ "EUC-JP", "nippon" },
|
|
||||||
{ "EUC-TW", "nippon" },
|
|
||||||
+ { "GB18030", "nippon" },
|
|
||||||
{ "GBK", "nippon" },
|
|
||||||
#endif /* MULTIBYTE_GROFF */
|
|
||||||
|
|
||||||
@@ -281,6 +287,7 @@ static struct less_charset_entry less_ch
|
|
||||||
{ "UTF-8", "utf-8", NULL },
|
|
||||||
|
|
||||||
#ifdef MULTIBYTE_GROFF
|
|
||||||
+ { "GB18030", "zh", NULL },
|
|
||||||
{ "EUC-JP", "iso8859", "japanese-ujis" },
|
|
||||||
{ "KOI8-R", "koi8-r", NULL },
|
|
||||||
#endif /* MULTIBYTE_GROFF */
|
|
||||||
@@ -405,6 +412,13 @@ char *get_page_encoding (const char *lan
|
|
||||||
* roff encoding = UTF-8
|
|
||||||
* output encoding = UTF-8
|
|
||||||
* EUC-JP -> iconv -> UTF-8 -> groff -Tutf8 -> UTF-8
|
|
||||||
+ *
|
|
||||||
+ * /usr/share/man/zh_CN.GB18030, locale zh_CN.UTF-8
|
|
||||||
+ * page encoding = GB18030
|
|
||||||
+ * source encoding = GB18030
|
|
||||||
+ * roff encoding = UTF-8
|
|
||||||
+ * output encoding = UTF-8
|
|
||||||
+ * GB18030 -> iconv -> UTF-8 -> groff -Tutf8 -> UTF-8
|
|
||||||
*/
|
|
||||||
const char *get_source_encoding (const char *lang)
|
|
||||||
{
|
|
||||||
@@ -545,7 +559,7 @@ static int compatible_encodings (const c
|
|
||||||
*/
|
|
||||||
if ((STREQ (input, "BIG5") || STREQ (input, "BIG5HKSCS") ||
|
|
||||||
STREQ (input, "EUC-JP") ||
|
|
||||||
- STREQ (input, "EUC-CN") || STREQ (input, "GBK") ||
|
|
||||||
+ STREQ (input, "EUC-CN") || STREQ (input, "GB18030") || STREQ (input, "GBK") ||
|
|
||||||
STREQ (input, "EUC-KR") ||
|
|
||||||
STREQ (input, "EUC-TW")) &&
|
|
||||||
STREQ (output, "UTF-8"))
|
|
||||||
@@ -639,7 +653,7 @@ const char *get_roff_encoding (const cha
|
|
||||||
STRNEQ (ctype, "zh_HK", 5) ||
|
|
||||||
STRNEQ (ctype, "zh_SG", 5) ||
|
|
||||||
STRNEQ (ctype, "zh_TW", 5))
|
|
||||||
- roff_encoding = "UTF-8";
|
|
||||||
+ roff_encoding = source_encoding; /* "UTF-8"; */
|
|
||||||
}
|
|
||||||
#endif /* MULTIBYTE_GROFF */
|
|
||||||
|
|
@ -1,23 +0,0 @@
|
|||||||
--- lib/pipeline.c
|
|
||||||
+++ lib/pipeline.c 2008-11-21 10:53:20.554776039 +0000
|
|
||||||
@@ -54,6 +54,20 @@
|
|
||||||
# include "zio.h"
|
|
||||||
#endif /* HAVE_ZIO */
|
|
||||||
|
|
||||||
+#ifdef __linux__
|
|
||||||
+# include <sys/socket.h>
|
|
||||||
+# include <netdb.h>
|
|
||||||
+# include <netinet/in.h>
|
|
||||||
+# ifndef SHUT_RD
|
|
||||||
+# define SHUT_RD 0
|
|
||||||
+# endif
|
|
||||||
+# ifndef SHUT_WR
|
|
||||||
+# define SHUT_WR 1
|
|
||||||
+# endif
|
|
||||||
+# define pipe(v) (((socketpair(AF_UNIX,SOCK_STREAM,0,v) < 0) || \
|
|
||||||
+ (shutdown((v)[1],SHUT_RD) < 0) || (shutdown((v)[0],SHUT_WR) < 0)) ? -1 : 0)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
/* ---------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
/* Functions to build individual commands. */
|
|
@ -1,108 +0,0 @@
|
|||||||
--- manual/files.me
|
|
||||||
+++ manual/files.me 2009-01-15 01:02:11.000000000 +0100
|
|
||||||
@@ -135,9 +135,11 @@ manpath.
|
|
||||||
However, if the element is not mentioned in the config file, a man directory
|
|
||||||
relative to it will be sought.
|
|
||||||
The subdirectories
|
|
||||||
-.i ../man
|
|
||||||
+.i ../man ,
|
|
||||||
+.i man ,
|
|
||||||
+.i ../share/man ,
|
|
||||||
or
|
|
||||||
-.i man
|
|
||||||
+.i share/man
|
|
||||||
relative to the path component are appended to the internal manpath if they
|
|
||||||
exist.
|
|
||||||
Finally, the internal manpath is stripped of duplicate paths before
|
|
||||||
--- src/manp.c
|
|
||||||
+++ src/manp.c 2009-01-15 01:02:11.000000000 +0100
|
|
||||||
@@ -58,6 +58,7 @@
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "xgetcwd.h"
|
|
||||||
+#include "xvasprintf.h"
|
|
||||||
|
|
||||||
#include "gettext.h"
|
|
||||||
#define _(String) gettext (String)
|
|
||||||
@@ -886,7 +887,8 @@ static char *def_path (int flag)
|
|
||||||
* directories listed in the man_db.config file. If so, and it is
|
|
||||||
* not already in the manpath, add it. If the directory is not listed
|
|
||||||
* in the man_db.config file, see if there is a subdirectory `../man' or
|
|
||||||
- * `man'. If so, and it is not already in the manpath, add it.
|
|
||||||
+ * `man', or, for FHS-compliance, `../share/man' or `share/man'. If so,
|
|
||||||
+ * and it is not already in the manpath, add it.
|
|
||||||
* Example: user has $HOME/bin in his path and the directory
|
|
||||||
* $HOME/man exists -- the directory $HOME/man will be added
|
|
||||||
* to the manpath.
|
|
||||||
@@ -941,13 +943,15 @@ static inline char *get_manpath_from_pat
|
|
||||||
|
|
||||||
t = has_mandir (p);
|
|
||||||
if (t) {
|
|
||||||
- debug ("but does have a ../man or man "
|
|
||||||
+ debug ("but does have a ../man, man, "
|
|
||||||
+ "../share/man, or share/man "
|
|
||||||
"subdirectory\n");
|
|
||||||
|
|
||||||
add_dir_to_list (tmplist, t);
|
|
||||||
free (t);
|
|
||||||
} else
|
|
||||||
- debug ("and doesn't have ../man or man "
|
|
||||||
+ debug ("and doesn't have ../man, man, "
|
|
||||||
+ "../share/man, or share/man "
|
|
||||||
"subdirectories\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1022,34 +1026,41 @@ static void add_dir_to_list (char **lp,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* path does not exist in config file: check to see if path/../man or
|
|
||||||
- path/man exist. If so return it, if not return NULL. */
|
|
||||||
+/* path does not exist in config file: check to see if path/../man,
|
|
||||||
+ path/man, path/../share/man, or path/share/man exist. If so return
|
|
||||||
+ it, if not return NULL. */
|
|
||||||
static inline char *has_mandir (const char *path)
|
|
||||||
{
|
|
||||||
- char *newpath = NULL;
|
|
||||||
+ char *newpath;
|
|
||||||
|
|
||||||
/* don't assume anything about path, especially that it ends in
|
|
||||||
"bin" or even has a '/' in it! */
|
|
||||||
|
|
||||||
char *subdir = strrchr (path, '/');
|
|
||||||
if (subdir) {
|
|
||||||
- const int prefix_len = subdir + 1 - path;
|
|
||||||
- newpath = xmalloc (prefix_len + sizeof ("man") + 1);
|
|
||||||
- strncpy (newpath, path, prefix_len);
|
|
||||||
- strcpy (newpath + prefix_len, "man");
|
|
||||||
-
|
|
||||||
+ newpath = xasprintf ("%.*s/man", subdir - path, path);
|
|
||||||
if (is_directory (newpath) == 1)
|
|
||||||
return newpath;
|
|
||||||
- else
|
|
||||||
- *newpath = '\0';
|
|
||||||
+ free (newpath);
|
|
||||||
}
|
|
||||||
|
|
||||||
- newpath = appendstr (newpath, path, "/man", NULL);
|
|
||||||
-
|
|
||||||
+ newpath = appendstr (NULL, path, "/man", NULL);
|
|
||||||
if (is_directory (newpath) == 1)
|
|
||||||
return newpath;
|
|
||||||
+ free (newpath);
|
|
||||||
+
|
|
||||||
+ if (subdir) {
|
|
||||||
+ newpath = xasprintf ("%.*s/share/man", subdir - path, path);
|
|
||||||
+ if (is_directory (newpath) == 1)
|
|
||||||
+ return newpath;
|
|
||||||
+ free (newpath);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
+ newpath = appendstr (NULL, path, "/share/man", NULL);
|
|
||||||
+ if (is_directory (newpath) == 1)
|
|
||||||
+ return newpath;
|
|
||||||
free (newpath);
|
|
||||||
+
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:3da6a5983a3dd1233b45d66cfcc44e787f8cd6cfc77d5b97cb154414ea70a4ca
|
|
||||||
size 1315763
|
|
50
man-db-2.6.3-chinese.dif
Normal file
50
man-db-2.6.3-chinese.dif
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
--- lib/encodings.c
|
||||||
|
+++ lib/encodings.c 2012-10-01 14:42:07.895867558 +0000
|
||||||
|
@@ -224,6 +224,7 @@ static struct charset_entry charset_tabl
|
||||||
|
{ "EUC-CN", "nippon" },
|
||||||
|
{ "EUC-JP", "nippon" },
|
||||||
|
{ "EUC-TW", "nippon" },
|
||||||
|
+ { "GB18030", "nippon" },
|
||||||
|
{ "GBK", "nippon" },
|
||||||
|
# else /* !MULTIBYTE_GROFF */
|
||||||
|
/* If we have a smarter version of groff, this is better dealt with
|
||||||
|
@@ -311,6 +312,7 @@ static struct less_charset_entry less_ch
|
||||||
|
|
||||||
|
#ifdef MULTIBYTE_GROFF
|
||||||
|
{ "CP1251", "windows", NULL },
|
||||||
|
+ { "GB18030", "zh", NULL },
|
||||||
|
{ "EUC-JP", "iso8859", "japanese-ujis" },
|
||||||
|
{ "KOI8-R", "koi8-r", NULL },
|
||||||
|
/* close enough? */
|
||||||
|
@@ -502,6 +504,13 @@ char *get_page_encoding (const char *lan
|
||||||
|
* roff encoding = ISO-8859-15
|
||||||
|
* output encoding = ISO-8859-15
|
||||||
|
* ISO-8859-15 -> groff -Tascii8 -> ISO-8859-15 -> iconv -> UTF-8
|
||||||
|
+ *
|
||||||
|
+ * /usr/share/man/zh_CN.GB18030, locale zh_CN.UTF-8
|
||||||
|
+ * page encoding = GB18030
|
||||||
|
+ * source encoding = GB18030
|
||||||
|
+ * roff encoding = UTF-8
|
||||||
|
+ * output encoding = UTF-8
|
||||||
|
+ * GB18030 -> iconv -> UTF-8 -> groff -Tutf8 -> UTF-8
|
||||||
|
*/
|
||||||
|
const char *get_source_encoding (const char *lang)
|
||||||
|
{
|
||||||
|
@@ -654,7 +663,7 @@ static int compatible_encodings (const c
|
||||||
|
*/
|
||||||
|
if ((STREQ (input, "BIG5") || STREQ (input, "BIG5HKSCS") ||
|
||||||
|
STREQ (input, "EUC-JP") ||
|
||||||
|
- STREQ (input, "EUC-CN") || STREQ (input, "GBK") ||
|
||||||
|
+ STREQ (input, "EUC-CN") || STREQ (input, "GB18030") || STREQ (input, "GBK") ||
|
||||||
|
STREQ (input, "EUC-KR") ||
|
||||||
|
STREQ (input, "EUC-TW")) &&
|
||||||
|
STREQ (output, "UTF-8"))
|
||||||
|
@@ -758,7 +767,7 @@ const char *get_roff_encoding (const cha
|
||||||
|
STRNEQ (ctype, "zh_HK", 5) ||
|
||||||
|
STRNEQ (ctype, "zh_SG", 5) ||
|
||||||
|
STRNEQ (ctype, "zh_TW", 5))
|
||||||
|
- roff_encoding = "UTF-8";
|
||||||
|
+ roff_encoding = source_encoding; /* "UTF-8"; */
|
||||||
|
}
|
||||||
|
#endif /* MULTIBYTE_GROFF */
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
--- src/man.c
|
--- src/man.c
|
||||||
+++ src/man.c 2007-07-18 12:45:24.091833039 +0000
|
+++ src/man.c 2012-10-01 14:34:29.003506558 +0000
|
||||||
@@ -2031,21 +2031,23 @@ static void format_display (pipeline *de
|
@@ -2312,21 +2312,23 @@ static void format_display (pipeline *de
|
||||||
if (!status)
|
if (!status)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -16,7 +16,7 @@
|
|||||||
}
|
}
|
||||||
+ if (!status)
|
+ if (!status)
|
||||||
+ sleep(5); /* firefox runs into background to fast */
|
+ sleep(5); /* firefox runs into background to fast */
|
||||||
if (remove_directory (htmldir) == -1)
|
if (remove_directory (htmldir, 0) == -1)
|
||||||
error (0, errno, _("can't remove directory %s"),
|
error (0, errno, _("can't remove directory %s"),
|
||||||
htmldir);
|
htmldir);
|
||||||
free (htmlfile);
|
free (htmlfile);
|
@ -1,6 +1,6 @@
|
|||||||
--- src/man.c
|
--- src/man.c
|
||||||
+++ src/man.c 2008-11-28 13:12:22.171541000 +0100
|
+++ src/man.c 2008-11-28 12:12:22.000000000 +0000
|
||||||
@@ -3223,12 +3223,132 @@ static int locate_page (const char *manp
|
@@ -3712,12 +3712,132 @@ static int locate_page (const char *manp
|
||||||
return found;
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,7 +133,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 ();
|
||||||
@@ -3250,9 +3370,51 @@ static int display_pages (struct candida
|
@@ -3739,9 +3859,51 @@ static int display_pages (struct candida
|
||||||
regain_effective_privs ();
|
regain_effective_privs ();
|
||||||
|
|
||||||
if (found && !findall)
|
if (found && !findall)
|
50
man-db-2.6.3-man0.dif
Normal file
50
man-db-2.6.3-man0.dif
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
--- man/de/man1/man.man1
|
||||||
|
+++ man/de/man1/man.man1 2008-04-21 13:41:49.000000000 +0200
|
||||||
|
@@ -97,6 +97,7 @@ der Manualseiten gefolgt vom Typ der dor
|
||||||
|
.TS
|
||||||
|
tab (@);
|
||||||
|
l l.
|
||||||
|
+0@Dateiheader (gewöhnlich in \fI/usr/include\fR)
|
||||||
|
1@Ausführbare Programme oder Shellbefehle
|
||||||
|
2@Systemaufrufe (Kernelfunktionen)
|
||||||
|
3@Bibliotheksaufrufe (Funktionen in System-Bibliotheken)
|
||||||
|
--- man/es/man1/man.man1
|
||||||
|
+++ man/es/man1/man.man1 2008-04-21 13:41:57.000000000 +0200
|
||||||
|
@@ -101,6 +101,7 @@ del manual y los tipos de páginas que c
|
||||||
|
.TS
|
||||||
|
tab (@);
|
||||||
|
l l.
|
||||||
|
+0@Ficheros (se encuentran generalmente en \fI/usr/include\fR)
|
||||||
|
1@Programas ejecutables y guiones del intérprete de
|
||||||
|
@órdenes
|
||||||
|
2@Llamadas del sistema (funciones servidas por el núcleo)
|
||||||
|
--- man/it/man1/man.man1
|
||||||
|
+++ man/it/man1/man.man1 2008-04-21 13:42:02.000000000 +0200
|
||||||
|
@@ -124,6 +124,7 @@ del manuale seguiti dai tipi di pagine c
|
||||||
|
.TS
|
||||||
|
tab (@);
|
||||||
|
l l.
|
||||||
|
+0@File (di solito trovabili in \fI/usr/include\fR)
|
||||||
|
1@Programmi eseguibili e comandi della shell
|
||||||
|
2@Chiamate al sistema (funzioni fornite dal kernel)
|
||||||
|
3@Chiamate alle librerie (funzioni all'interno delle
|
||||||
|
--- man/ja/man1/man.man1
|
||||||
|
+++ man/ja/man1/man.man1 2008-04-21 13:42:05.000000000 +0200
|
||||||
|
@@ -104,6 +104,7 @@
|
||||||
|
.TS
|
||||||
|
tab (@);
|
||||||
|
l l.
|
||||||
|
+0@
|
||||||
|
1@実行プログラムまたはシェルのコマンド
|
||||||
|
2@システムコール (カーネルが提供する関数)
|
||||||
|
3@ライブラリコール (システムライブラリに含まれる関数)
|
||||||
|
--- man/man1/man.man1
|
||||||
|
+++ man/man1/man.man1 2007-12-10 12:53:31.000000000 +0100
|
||||||
|
@@ -119,6 +119,7 @@ numbers of the manual followed by the ty
|
||||||
|
.TS
|
||||||
|
tab (@);
|
||||||
|
l l.
|
||||||
|
+0@Header files (usually found in \fI/usr/include\fR)
|
||||||
|
1@Executable programs or shell commands
|
||||||
|
2@System calls (functions provided by the kernel)
|
||||||
|
3@Library calls (functions within program libraries)
|
@ -1,6 +1,6 @@
|
|||||||
--- src/man.c
|
--- src/man.c
|
||||||
+++ src/man.c 2006-06-13 14:01:19.000000000 +0000
|
+++ src/man.c 2012-10-01 14:24:23.251006952 +0000
|
||||||
@@ -1142,7 +1142,7 @@ static inline const char *is_section (co
|
@@ -1368,7 +1368,7 @@ static inline const char *is_section (co
|
||||||
{
|
{
|
||||||
const char **vs;
|
const char **vs;
|
||||||
|
|
||||||
@ -9,17 +9,16 @@
|
|||||||
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 */
|
||||||
@@ -2565,7 +2565,8 @@ static int compare_candidates (const str
|
@@ -2943,7 +2943,7 @@ static int compare_candidates (const str
|
||||||
|
/* Find out whether lsource->ext is ahead of rsource->ext in
|
||||||
* section_list.
|
* section_list.
|
||||||
*/
|
*/
|
||||||
const char **sp;
|
|
||||||
- for (sp = section_list; *sp; ++sp) {
|
- for (sp = section_list; *sp; ++sp) {
|
||||||
+
|
|
||||||
+ for (sp = section_list; sp && *sp; ++sp) {
|
+ for (sp = section_list; sp && *sp; ++sp) {
|
||||||
if (!*(*sp + 1)) {
|
if (!*(*sp + 1)) {
|
||||||
/* No extension */
|
/* No extension */
|
||||||
if (!sec_left && **sp == *(left->ext))
|
if (!sec_left && **sp == *(lsource->ext))
|
||||||
@@ -3209,7 +3210,7 @@ static int man (const char *name, int *f
|
@@ -3918,7 +3918,7 @@ static int man (const char *name, int *f
|
||||||
} else {
|
} else {
|
||||||
const char **sp;
|
const char **sp;
|
||||||
|
|
48
man-db-2.6.3-security4.dif
Normal file
48
man-db-2.6.3-security4.dif
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
--- src/mandb.c
|
||||||
|
+++ src/mandb.c 2012-10-01 14:30:11.619507260 +0000
|
||||||
|
@@ -37,6 +37,7 @@
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h> /* for chmod() */
|
||||||
|
+#include <fcntl.h> /* for open () */
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <signal.h>
|
||||||
|
@@ -420,11 +421,20 @@ static int mandb (const char *catpath, c
|
||||||
|
char *dbname;
|
||||||
|
char *cachedir_tag;
|
||||||
|
struct stat st;
|
||||||
|
+ int fd;
|
||||||
|
|
||||||
|
dbname = mkdbname (catpath);
|
||||||
|
sprintf (pid, "%d", getpid ());
|
||||||
|
database = appendstr (NULL, catpath, "/", pid, NULL);
|
||||||
|
-
|
||||||
|
+
|
||||||
|
+ /* Just for the case that catpath isn't a system catpath */
|
||||||
|
+ drop_effective_privs ();
|
||||||
|
+ fd = open (database, O_WRONLY | O_CREAT | O_EXCL, 0644);
|
||||||
|
+ regain_effective_privs ();
|
||||||
|
+ if (fd < 0)
|
||||||
|
+ error (FATAL, errno, _("can't create a temporary filename"));
|
||||||
|
+ close(fd);
|
||||||
|
+
|
||||||
|
if (!quiet)
|
||||||
|
printf (_("Processing manual pages under %s...\n"), manpath);
|
||||||
|
|
||||||
|
@@ -432,6 +442,7 @@ static int mandb (const char *catpath, c
|
||||||
|
if (stat (cachedir_tag, &st) == -1 && errno == ENOENT) {
|
||||||
|
FILE *cachedir_tag_file;
|
||||||
|
|
||||||
|
+ drop_effective_privs ();
|
||||||
|
cachedir_tag_file = fopen (cachedir_tag, "w");
|
||||||
|
if (cachedir_tag_file) {
|
||||||
|
fputs ("Signature: 8a477f597d28d172789f06886806bc55\n"
|
||||||
|
@@ -443,6 +454,7 @@ static int mandb (const char *catpath, c
|
||||||
|
cachedir_tag_file);
|
||||||
|
fclose (cachedir_tag_file);
|
||||||
|
}
|
||||||
|
+ regain_effective_privs ();
|
||||||
|
}
|
||||||
|
free (cachedir_tag);
|
||||||
|
|
170
man-db-2.6.3-zio.dif
Normal file
170
man-db-2.6.3-zio.dif
Normal file
@ -0,0 +1,170 @@
|
|||||||
|
--- config.h.in
|
||||||
|
+++ config.h.in 2012-10-02 09:06:48.591006953 +0000
|
||||||
|
@@ -674,6 +674,9 @@
|
||||||
|
/* Define to 1 if you have the `z' library (-lz). */
|
||||||
|
#undef HAVE_LIBZ
|
||||||
|
|
||||||
|
+/* Define to 1 if you have libzio for opening compressed manuals */
|
||||||
|
+#undef HAVE_ZIO
|
||||||
|
+
|
||||||
|
/* Define to 1 if you have the <linewrap.h> header file. */
|
||||||
|
#undef HAVE_LINEWRAP_H
|
||||||
|
|
||||||
|
--- configure.ac
|
||||||
|
+++ configure.ac 2012-10-02 09:55:06.783914808 +0000
|
||||||
|
@@ -98,6 +98,18 @@ AC_ARG_WITH([sections],
|
||||||
|
sections="$withval"
|
||||||
|
fi],
|
||||||
|
[: ${sections=1 n l 8 3 2 5 4 9 6 7}])
|
||||||
|
+AC_ARG_WITH([zio],
|
||||||
|
+[AS_HELP_STRING([--with-zio=LIBRARY], [use zlib/libbz2 wrapper library LIBRARY (libzio)])],
|
||||||
|
+ [if test -z "$withval" -o "$withval" = "yes"
|
||||||
|
+ then
|
||||||
|
+ zio=libzio
|
||||||
|
+ elif test "$withval" = "no"
|
||||||
|
+ then
|
||||||
|
+ AC_MSG_ERROR(--with-zio requires an argument)
|
||||||
|
+ else
|
||||||
|
+ zio=$withval
|
||||||
|
+ fi],
|
||||||
|
+ [: ${zio=no}])
|
||||||
|
AC_ARG_ENABLE([automatic-create],
|
||||||
|
[AS_HELP_STRING([--enable-automatic-create], [allow man to create user databases on the fly])],
|
||||||
|
[if test "$enableval" = "yes"
|
||||||
|
@@ -375,6 +387,40 @@ AC_SUBST([unlzma])
|
||||||
|
AC_SUBST([unxz])
|
||||||
|
AC_SUBST([unlzip])
|
||||||
|
MAN_COMPRESS_LIB([z], [gzopen])
|
||||||
|
+dnl Check for zlib and libbz2 libraries to use this together
|
||||||
|
+dnl with SuSE's libzio to open compressed info files.
|
||||||
|
+dnl
|
||||||
|
+if test "$zio" = "no" || test -n "$zio"
|
||||||
|
+then
|
||||||
|
+ AC_CHECK_HEADER(zio.h,[
|
||||||
|
+ for lib in ${zio#lib} zio
|
||||||
|
+ do
|
||||||
|
+ AC_CHECK_LIB($lib, fzopen, [LIBS="-l$lib $LIBS"; am_cv_libzio=yes])
|
||||||
|
+ done
|
||||||
|
+ ])
|
||||||
|
+ if test "$am_cv_libzio" = yes; then
|
||||||
|
+ AC_DEFINE([COMP_SRC],[],[Define if you have compressors and want to support compressed cat files.])
|
||||||
|
+ AC_DEFINE([HAVE_ZIO],[],[Define to 1 if you have libzio for opening compressed manuals])
|
||||||
|
+ AC_CHECK_HEADER(zlib.h,[
|
||||||
|
+ for lib in z gz
|
||||||
|
+ do
|
||||||
|
+ AC_CHECK_LIB($lib, gzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break])
|
||||||
|
+ done
|
||||||
|
+ ])
|
||||||
|
+ AC_CHECK_HEADER(bzlib.h,[
|
||||||
|
+ for lib in bz2 bzip2
|
||||||
|
+ do
|
||||||
|
+ AC_CHECK_LIB($lib, BZ2_bzopen, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break])
|
||||||
|
+ done
|
||||||
|
+ ])
|
||||||
|
+ AC_CHECK_HEADER(lzma.h, [
|
||||||
|
+ for lib in lzma lzmadec
|
||||||
|
+ do
|
||||||
|
+ AC_CHECK_LIB($lib, lzmadec_open, [LIBS="$LIBS -Wl,--no-as-needed -l$lib"; break])
|
||||||
|
+ done
|
||||||
|
+ ])
|
||||||
|
+ fi
|
||||||
|
+fi
|
||||||
|
dnl To add more decompressors just follow the scheme above.
|
||||||
|
|
||||||
|
# Work out which manual page hierarchy scheme might be in use.
|
||||||
|
--- lib/decompress.c
|
||||||
|
+++ lib/decompress.c 2012-10-02 09:05:43.787007258 +0000
|
||||||
|
@@ -36,6 +36,10 @@
|
||||||
|
# include "zlib.h"
|
||||||
|
#endif /* HAVE_LIBZ */
|
||||||
|
|
||||||
|
+#ifdef HAVE_ZIO
|
||||||
|
+# include "zio.h"
|
||||||
|
+#endif /* HAVE_ZIO */
|
||||||
|
+
|
||||||
|
#include "manconfig.h"
|
||||||
|
#include "comp_src.h"
|
||||||
|
#include "pipeline.h"
|
||||||
|
@@ -66,6 +70,32 @@ static void decompress_zlib (void *data
|
||||||
|
|
||||||
|
#endif /* HAVE_LIBZ */
|
||||||
|
|
||||||
|
+#ifdef HAVE_ZIO
|
||||||
|
+
|
||||||
|
+static void decompress_zio (void *data)
|
||||||
|
+{
|
||||||
|
+ const char *what = (const char*)data;
|
||||||
|
+ FILE *file;
|
||||||
|
+
|
||||||
|
+ file = fdzopen(dup (fileno (stdin)), "r", what);
|
||||||
|
+ if (!file)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ for (;;) {
|
||||||
|
+ char buffer[4096];
|
||||||
|
+ int r = fread(buffer, sizeof(char), sizeof(buffer), file);
|
||||||
|
+ if (r <= 0)
|
||||||
|
+ break;
|
||||||
|
+ if (fwrite (buffer, 1, (size_t) r, stdout) < (size_t) r)
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fclose(file);
|
||||||
|
+ return;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#endif /* HAVE_ZIO */
|
||||||
|
+
|
||||||
|
pipeline *decompress_open (const char *filename)
|
||||||
|
{
|
||||||
|
pipecmd *cmd;
|
||||||
|
@@ -80,6 +110,37 @@ pipeline *decompress_open (const char *f
|
||||||
|
if (stat (filename, &st) < 0 || S_ISDIR (st.st_mode))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
+#ifdef HAVE_ZIO
|
||||||
|
+ ext = strrchr (filename, '.');
|
||||||
|
+ if (ext) {
|
||||||
|
+ char opt[2] = {'\0', '\0'};
|
||||||
|
+ char *name;
|
||||||
|
+
|
||||||
|
+ if (STREQ (ext, ".gz"))
|
||||||
|
+ *opt = 'g';
|
||||||
|
+ else if (STREQ (ext, ".z"))
|
||||||
|
+ *opt = 'z';
|
||||||
|
+ else if (STREQ (ext, ".bz2"))
|
||||||
|
+ *opt = 'b';
|
||||||
|
+ else if (STREQ (ext, ".xz"))
|
||||||
|
+ *opt = 'x';
|
||||||
|
+ else if (STREQ (ext, ".lzma"))
|
||||||
|
+ *opt = 'l';
|
||||||
|
+ else if (STREQ (ext, ".Z"))
|
||||||
|
+ *opt = 'Z';
|
||||||
|
+ else
|
||||||
|
+ goto nozio;
|
||||||
|
+
|
||||||
|
+ /* informational only; no shell quoting concerns */
|
||||||
|
+ name = appendstr (NULL, "libzio < ", filename, NULL);
|
||||||
|
+ cmd = pipecmd_new_function (name, &decompress_zio, NULL,
|
||||||
|
+ opt);
|
||||||
|
+ free (name);
|
||||||
|
+ p = pipeline_new_commands (cmd, NULL);
|
||||||
|
+ goto got_pipeline;
|
||||||
|
+ }
|
||||||
|
+#endif /* HAVE_ZIO */
|
||||||
|
+
|
||||||
|
#ifdef HAVE_LIBZ
|
||||||
|
filename_len = strlen (filename);
|
||||||
|
if (filename_len > 3 && STREQ (filename + filename_len - 3, ".gz")) {
|
||||||
|
@@ -93,7 +154,11 @@ pipeline *decompress_open (const char *f
|
||||||
|
}
|
||||||
|
#endif /* HAVE_LIBZ */
|
||||||
|
|
||||||
|
+#ifdef HAVE_ZIO
|
||||||
|
+nozio:
|
||||||
|
+#else
|
||||||
|
ext = strrchr (filename, '.');
|
||||||
|
+#endif /* HAVE_LIBZ */
|
||||||
|
if (ext) {
|
||||||
|
++ext;
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
3
man-db-2.6.3.tar.xz
Normal file
3
man-db-2.6.3.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:51db85cbbdcb99927865bad4c653a8b18991831e751cc501098a772924e26b47
|
||||||
|
size 1388944
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:67a9fbffb34c693617f7d43cee527acad9610bd30be437069519c326a442724d
|
|
||||||
size 313
|
|
105
man.spec
105
man.spec
@ -25,9 +25,13 @@ BuildRequires: gettext-tools
|
|||||||
BuildRequires: groff
|
BuildRequires: groff
|
||||||
BuildRequires: less
|
BuildRequires: less
|
||||||
BuildRequires: libbz2-devel
|
BuildRequires: libbz2-devel
|
||||||
|
BuildRequires: libpipeline-devel
|
||||||
BuildRequires: libzio-devel
|
BuildRequires: libzio-devel
|
||||||
|
BuildRequires: pkg-config
|
||||||
|
BuildRequires: po4a
|
||||||
|
BuildRequires: xz-devel
|
||||||
BuildRequires: zlib-devel
|
BuildRequires: zlib-devel
|
||||||
Version: 2.5.2
|
Version: 2.6.3
|
||||||
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+
|
||||||
@ -38,25 +42,21 @@ Provides: man_db
|
|||||||
Requires: glibc-locale
|
Requires: glibc-locale
|
||||||
Requires: groff >= 1.18
|
Requires: groff >= 1.18
|
||||||
Requires: less
|
Requires: less
|
||||||
Source: man-db-%{version}.tar.bz2
|
Source: man-db-%{version}.tar.xz
|
||||||
Source1: sysconfig.cron-man
|
Source1: sysconfig.cron-man
|
||||||
Source2: cron.daily.do_mandb
|
Source2: cron.daily.do_mandb
|
||||||
Source3: cron.daily.clean_catman
|
Source3: cron.daily.clean_catman
|
||||||
Source4: mancoding
|
Source4: mancoding
|
||||||
|
Source5: wrapper.c
|
||||||
Patch0: man-db-%{version}.dif
|
Patch0: man-db-%{version}.dif
|
||||||
Patch1: man-db_%{version}-2.diff.bz2
|
Source6: man-db-2.6.3-man0.dif
|
||||||
Patch2: man-db-2.3.19deb4.0-groff.dif
|
Patch2: man-db-2.3.19deb4.0-groff.dif
|
||||||
Patch4: man-db-2.4.3-section.dif
|
Patch4: man-db-2.6.3-section.dif
|
||||||
Patch5: man-db-2.5.1-security4.dif
|
Patch5: man-db-2.6.3-security4.dif
|
||||||
Patch6: man-db-2.4.3-firefox.dif
|
Patch6: man-db-2.6.3-firefox.dif
|
||||||
Patch7: man-db-%{version}-chinese.dif
|
Patch7: man-db-2.6.3-chinese.dif
|
||||||
Patch8: man-db-2.5.1-globbing.dif
|
Patch9: man-db-2.6.3-zio.dif
|
||||||
Patch9: man-db-2.5.1-zio.dif
|
Patch10: man-db-2.6.3-listall.dif
|
||||||
Patch10: man-db-2.5.1-listall.dif
|
|
||||||
Patch11: man-db-%{version}-catp.dif
|
|
||||||
Patch12: man-db-2.5.2-fastpipe.dif
|
|
||||||
Patch13: man-db-2.5.2-fhs.dif
|
|
||||||
Patch14: automake-1.12.patch
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
%global _sysconfdir /etc
|
%global _sysconfdir /etc
|
||||||
|
|
||||||
@ -74,22 +74,14 @@ Authors:
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -n man-db-%{version}
|
%setup -n man-db-%{version}
|
||||||
%patch1 -p1 -b .debian
|
|
||||||
%patch2 -p0 -b .groff
|
%patch2 -p0 -b .groff
|
||||||
%patch4 -p0 -b .sect
|
%patch4 -p0 -b .sect
|
||||||
%patch5 -p0 -b .secu4
|
%patch5 -p0 -b .secu4
|
||||||
%patch6 -p0 -b .firefox
|
%patch6 -p0 -b .firefox
|
||||||
%patch7 -p0 -b .chinese
|
%patch7 -p0 -b .chinese
|
||||||
%patch8 -p0 -b .globbing
|
|
||||||
%patch9 -p0 -b .zio
|
%patch9 -p0 -b .zio
|
||||||
%patch10 -p0 -b .listall
|
%patch10 -p0 -b .listall
|
||||||
%patch11 -p0 -b .catp
|
|
||||||
%patch12 -p0 -b .fp
|
|
||||||
%patch13 -p0 -b .fhs
|
|
||||||
%patch0 -p0
|
%patch0 -p0
|
||||||
%if 0%{?suse_version} > 1210
|
|
||||||
%patch14 -p1
|
|
||||||
%endif
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
gettextize --force --copy --no-changelog
|
gettextize --force --copy --no-changelog
|
||||||
@ -115,35 +107,30 @@ Authors:
|
|||||||
Cg g s m)
|
Cg g s m)
|
||||||
SEC="${SEC[@]}"
|
SEC="${SEC[@]}"
|
||||||
rm -f configure
|
rm -f configure
|
||||||
CFLAGS="${RPM_OPT_FLAGS} -funroll-loops -pipe -D_GNU_SOURCE -D_SVID_SOURCE -Wall"
|
%global optflags %{optflags} -funroll-loops -pipe -D_GNU_SOURCE -D_SVID_SOURCE -Wall
|
||||||
|
CFLAGS="%{optflags}"
|
||||||
LDFLAGS=
|
LDFLAGS=
|
||||||
LIBS=
|
LIBS=
|
||||||
export CFLAGS LDFLAGS LIBS
|
LINGUAS=
|
||||||
%if %suse_version > 1030
|
for d in $(cat man/LINGUAS*) ; do
|
||||||
aclocal -I ${PWD}/m4 -I ${PWD}/gnulib/m4
|
test -d %{_datadir}/locale/$d || continue
|
||||||
autoconf -B ${PWD}/m4 -B ${PWD}/gnulib/m4
|
LINGUAS="${LINGUAS:+$LINGUAS }$d"
|
||||||
|
done
|
||||||
|
export CFLAGS LDFLAGS LIBS LINGUAS
|
||||||
|
aclocal -I ${PWD} -I ${PWD}/m4 -I ${PWD}/gnulib/m4
|
||||||
|
autoconf -B ${PWD} -B ${PWD}/m4 -B ${PWD}/gnulib/m4
|
||||||
automake --add-missing
|
automake --add-missing
|
||||||
%else
|
%configure \
|
||||||
sed -ri 's/(m4_PACKAGE_VERSION,[[:blank:]]*\[)2.61(\])/\12.60\2/' aclocal.m4
|
|
||||||
sed -ri 's/(AM_INIT_AUTOMAKE\(\[)1.10/\11.9.6/' configure.ac
|
|
||||||
sed -ri 's/intl//' Makefile.am
|
|
||||||
aclocal -I ${PWD}/m4 -I ${PWD}/gnulib/m4
|
|
||||||
autoconf -B ${PWD}/m4 -B ${PWD}/gnulib/m4
|
|
||||||
mkdir -p tools
|
|
||||||
touch tools/compile
|
|
||||||
export MKDIR_P="mkdir -p"
|
|
||||||
%endif
|
|
||||||
./configure \
|
|
||||||
--enable-dups \
|
--enable-dups \
|
||||||
--enable-setuid=man \
|
--enable-setuid=man \
|
||||||
--with-device=utf8 \
|
--with-device=utf8 \
|
||||||
--prefix=%{_prefix} \
|
|
||||||
--mandir=%{_mandir} \
|
|
||||||
--localstatedir=%{_localstatedir} \
|
|
||||||
--libexecdir=%{_prefix}/lib \
|
|
||||||
--with-zio \
|
--with-zio \
|
||||||
--with-gnu-ld \
|
--with-gnu-ld \
|
||||||
--disable-rpath \
|
--disable-rpath \
|
||||||
|
--disable-automatic-create \
|
||||||
|
--enable-automatic-update \
|
||||||
|
--disable-cats \
|
||||||
|
--enable-threads=posix \
|
||||||
--enable-mb-groff \
|
--enable-mb-groff \
|
||||||
--with-db=gdbm \
|
--with-db=gdbm \
|
||||||
--enable-nls \
|
--enable-nls \
|
||||||
@ -166,22 +153,33 @@ Authors:
|
|||||||
" $man
|
" $man
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
gcc $CFLAGS -I gnulib/lib/ -I include/ --include config.h --include configmake.h \
|
||||||
|
-o wrapper %{S:5} -L gnulib/lib/.libs/ -lgnu
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%if %suse_version <= 1030
|
%if %suse_version <= 1030
|
||||||
export MKDIR_P="mkdir -p"
|
export MKDIR_P="mkdir -p"
|
||||||
%endif
|
%endif
|
||||||
rm -rf %{buildroot}%{_localstatedir}/cache/man
|
rm -rf %{buildroot}%{_localstatedir}/cache/man
|
||||||
|
mkdir -p %{buildroot}%{_datadir}/doc/packages/man
|
||||||
mkdir -p %{buildroot}%{_prefix}/lib/man-db
|
mkdir -p %{buildroot}%{_prefix}/lib/man-db
|
||||||
mkdir -p %{buildroot}%{_bindir}
|
mkdir -p %{buildroot}%{_bindir}
|
||||||
mkdir -p %{buildroot}/etc
|
mkdir -p %{buildroot}/etc
|
||||||
make nls=all install DESTDIR=%{buildroot}
|
make nls=all install DESTDIR=%{buildroot}
|
||||||
if test -x %{buildroot}%{_bindir}/wrapper ; then
|
mv %{buildroot}%{_libdir}/man-db/libman*%{version}.so \
|
||||||
rm -f %{buildroot}%{_bindir}/mandb
|
%{buildroot}%{_libdir}/
|
||||||
rm -f %{buildroot}%{_bindir}/man
|
rm -rfv %{buildroot}%{_libdir}/man-db/
|
||||||
mv %{buildroot}%{_bindir}/wrapper %{buildroot}%{_bindir}/mandb
|
mv %{buildroot}%{_datadir}/doc/man-db/man-db-manual.* \
|
||||||
ln -sf mandb %{buildroot}%{_bindir}/man
|
%{buildroot}%{_datadir}/doc/packages/man/
|
||||||
|
# wrapper
|
||||||
|
if test -x %{buildroot}%{_bindir}/mandb ; then
|
||||||
|
mv %{buildroot}%{_bindir}/mandb %{buildroot}%{_prefix}/lib/man-db/
|
||||||
fi
|
fi
|
||||||
|
if test -x %{buildroot}%{_bindir}/man ; then
|
||||||
|
mv %{buildroot}%{_bindir}/man %{buildroot}%{_prefix}/lib/man-db/
|
||||||
|
fi
|
||||||
|
install wrapper %{buildroot}%{_bindir}/mandb
|
||||||
|
ln -sf mandb %{buildroot}%{_bindir}/man
|
||||||
mkdir -p %{buildroot}%{_mandir}
|
mkdir -p %{buildroot}%{_mandir}
|
||||||
pushd %{buildroot}%{_mandir}/
|
pushd %{buildroot}%{_mandir}/
|
||||||
rm -rf *.ascii/
|
rm -rf *.ascii/
|
||||||
@ -213,7 +211,8 @@ test -d var/catman/ && rm -rf var/catman/ || true
|
|||||||
%files -f man-db.lang
|
%files -f man-db.lang
|
||||||
%defattr(-,root,root)
|
%defattr(-,root,root)
|
||||||
%doc docs/COPYING
|
%doc docs/COPYING
|
||||||
%doc docs/ChangeLog
|
%doc ChangeLog
|
||||||
|
%doc %{_datadir}/doc/packages/man/man-db-manual.*
|
||||||
%config /etc/manpath.config
|
%config /etc/manpath.config
|
||||||
%attr(0744,root,root) /etc/cron.daily/suse-clean_catman
|
%attr(0744,root,root) /etc/cron.daily/suse-clean_catman
|
||||||
%attr(0744,root,root) /etc/cron.daily/suse-do_mandb
|
%attr(0744,root,root) /etc/cron.daily/suse-do_mandb
|
||||||
@ -230,25 +229,19 @@ test -d var/catman/ && rm -rf var/catman/ || true
|
|||||||
%{_bindir}/manpath
|
%{_bindir}/manpath
|
||||||
%{_bindir}/whatis
|
%{_bindir}/whatis
|
||||||
%{_bindir}/zsoelim
|
%{_bindir}/zsoelim
|
||||||
%if %suse_version > 1030
|
|
||||||
%dir %attr(0755,root,root) %{_prefix}/lib/man-db
|
%dir %attr(0755,root,root) %{_prefix}/lib/man-db
|
||||||
%attr(0755,root,root) %{_prefix}/lib/man-db/man
|
%attr(0755,root,root) %{_prefix}/lib/man-db/man
|
||||||
%attr(0755,root,root) %{_prefix}/lib/man-db/mandb
|
%attr(0755,root,root) %{_prefix}/lib/man-db/mandb
|
||||||
%attr(0755,man,man) %{_prefix}/lib/man-db/manconv
|
%attr(0755,man,man) %{_prefix}/lib/man-db/manconv
|
||||||
%attr(0755,man,man) %{_prefix}/lib/man-db/globbing
|
%attr(0755,man,man) %{_prefix}/lib/man-db/globbing
|
||||||
%else
|
|
||||||
%dir %attr(0711,root,root) %{_prefix}/lib/man-db
|
|
||||||
%attr(0711,root,root) %{_prefix}/lib/man-db/man
|
|
||||||
%attr(0711,root,root) %{_prefix}/lib/man-db/mandb
|
|
||||||
%attr(0711,man,man) %{_prefix}/lib/man-db/manconv
|
|
||||||
%attr(0711,man,man) %{_prefix}/lib/man-db/globbing
|
|
||||||
%endif
|
|
||||||
%{_sbindir}/accessdb
|
%{_sbindir}/accessdb
|
||||||
|
%{_libdir}/libman*.so
|
||||||
%{_datadir}/groff/site-tmac/tmac.andb
|
%{_datadir}/groff/site-tmac/tmac.andb
|
||||||
%{_datadir}/groff/site-tmac/tmac.andocdb
|
%{_datadir}/groff/site-tmac/tmac.andocdb
|
||||||
%doc %{_mandir}/man1/*.1.gz
|
%doc %{_mandir}/man1/*.1.gz
|
||||||
%doc %{_mandir}/man5/*.5.gz
|
%doc %{_mandir}/man5/*.5.gz
|
||||||
%doc %{_mandir}/man8/*.8.gz
|
%doc %{_mandir}/man8/*.8.gz
|
||||||
|
%dir %{_mandir}/id
|
||||||
%defattr(-,man,man)
|
%defattr(-,man,man)
|
||||||
%{_localstatedir}/cache/man/*
|
%{_localstatedir}/cache/man/*
|
||||||
%{_localstatedir}/adm/fillup-templates/sysconfig.cron-man
|
%{_localstatedir}/adm/fillup-templates/sysconfig.cron-man
|
||||||
|
138
wrapper.c
Normal file
138
wrapper.c
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
/*
|
||||||
|
* wrapper.c - wrapper program around man and mandb
|
||||||
|
*
|
||||||
|
* Copyright (C) 2000 Fabrizio Polacco <fpolacco@debian.org>
|
||||||
|
* Copyright (C) 2001, 2002 Colin Watson.
|
||||||
|
*
|
||||||
|
* This file is part of man-db.
|
||||||
|
*
|
||||||
|
* man-db is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* man-db is distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with man-db; if not, write to the Free Software Foundation,
|
||||||
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
# include "config.h"
|
||||||
|
#endif /* HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <grp.h>
|
||||||
|
#include <pwd.h>
|
||||||
|
#include <grp.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "dirname.h"
|
||||||
|
|
||||||
|
#include "gettext.h"
|
||||||
|
#include <locale.h>
|
||||||
|
#define _(Text) gettext (Text)
|
||||||
|
|
||||||
|
#include "manconfig.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* this list is used to authenticate the program running.
|
||||||
|
* it is fixed at compile time to avoid a full class of
|
||||||
|
* dangers ...
|
||||||
|
*/
|
||||||
|
static struct {
|
||||||
|
const char *prog;
|
||||||
|
const char *run;
|
||||||
|
const char *user;
|
||||||
|
} *wlp, wrapped_list[] =
|
||||||
|
{ /* prog run user */
|
||||||
|
#ifdef DEBUG
|
||||||
|
{ "_man", "src/man", "man" },
|
||||||
|
{ "_mandb", "src/mandb", "man" },
|
||||||
|
#endif
|
||||||
|
{ "man", "/usr/lib/man-db/man", "man" },
|
||||||
|
{ "mandb", "/usr/lib/man-db/mandb", "man" },
|
||||||
|
{ 0, 0, 0, }};
|
||||||
|
|
||||||
|
char *program_name;
|
||||||
|
|
||||||
|
int main (int argc, char **argv, char *envp[])
|
||||||
|
{
|
||||||
|
uid_t ruid, euid;
|
||||||
|
gid_t rgid;
|
||||||
|
struct passwd *pwd;
|
||||||
|
|
||||||
|
argc = argc; /* not used */
|
||||||
|
|
||||||
|
/* We don't warn about this setlocale() call failing, as the program
|
||||||
|
* we call will do that.
|
||||||
|
*/
|
||||||
|
setlocale (LC_ALL, "");
|
||||||
|
bindtextdomain (PACKAGE, LOCALEDIR);
|
||||||
|
bindtextdomain (PACKAGE "-gnulib", LOCALEDIR);
|
||||||
|
textdomain (PACKAGE);
|
||||||
|
|
||||||
|
/* this wrapper can be run as "man" or as "mandb" */
|
||||||
|
program_name = base_name (argv[0]);
|
||||||
|
|
||||||
|
ruid = getuid ();
|
||||||
|
euid = geteuid();
|
||||||
|
rgid = getgid ();
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("%s:\n", program_name);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
for (wlp = wrapped_list; wlp->prog && strcmp (program_name, wlp->prog); ++wlp)
|
||||||
|
/* __asm__ __volatile__("": : :"memory") */;
|
||||||
|
if (!wlp->prog) {
|
||||||
|
fprintf (stderr, _("Don't know which program should I run being >%s<\n"),
|
||||||
|
program_name);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
printf ("%s\n", wlp->run);
|
||||||
|
#endif
|
||||||
|
if (ruid == 0 || euid == 0) {
|
||||||
|
pwd = getpwnam (wlp->user);
|
||||||
|
if (!pwd) {
|
||||||
|
fprintf (stderr, _("%s: Failed su to user %s\n"), wlp->prog, wlp->user);
|
||||||
|
return -EACCES;
|
||||||
|
}
|
||||||
|
if (ruid == 0) {
|
||||||
|
ruid = pwd->pw_uid;
|
||||||
|
rgid = pwd->pw_gid;
|
||||||
|
} else {
|
||||||
|
#ifndef MAN_CATS
|
||||||
|
/* No permissions required to create files
|
||||||
|
* under the sub directories of /var/cache/man */
|
||||||
|
pwd->pw_uid = ruid;
|
||||||
|
pwd->pw_gid = rgid;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (setregid (rgid, pwd->pw_gid)) {
|
||||||
|
fprintf (stderr, _("%s: Failed su to user %s\n"), wlp->prog, wlp->user);
|
||||||
|
return -EACCES;
|
||||||
|
}
|
||||||
|
if (initgroups (wlp->user, rgid)) {
|
||||||
|
fprintf (stderr, _("%s: Failed su to user %s\n"), wlp->prog, wlp->user);
|
||||||
|
return -EACCES;
|
||||||
|
}
|
||||||
|
if (setreuid (ruid, pwd->pw_uid)) {
|
||||||
|
fprintf (stderr, _("%s: Failed su to user %s\n"), wlp->prog, wlp->user);
|
||||||
|
return -EACCES;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
execve (wlp->run, argv, envp);
|
||||||
|
perror ("execve");
|
||||||
|
return -errno;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user