.
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 2007-07-18 12:45:24.091833039 +0000
|
||||
@@ -2031,21 +2031,23 @@ static void format_display (pipeline *de
|
||||
+++ src/man.c 2012-10-01 14:34:29.003506558 +0000
|
||||
@@ -2312,21 +2312,23 @@ static void format_display (pipeline *de
|
||||
if (!status)
|
||||
break;
|
||||
}
|
||||
@ -16,7 +16,7 @@
|
||||
}
|
||||
+ if (!status)
|
||||
+ 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"),
|
||||
htmldir);
|
||||
free (htmlfile);
|
@ -1,6 +1,6 @@
|
||||
--- src/man.c
|
||||
+++ src/man.c 2008-11-28 13:12:22.171541000 +0100
|
||||
@@ -3223,12 +3223,132 @@ static int locate_page (const char *manp
|
||||
+++ src/man.c 2008-11-28 12:12:22.000000000 +0000
|
||||
@@ -3712,12 +3712,132 @@ static int locate_page (const char *manp
|
||||
return found;
|
||||
}
|
||||
|
||||
@ -133,7 +133,7 @@
|
||||
global_manpath = is_global_mandir (candp->path);
|
||||
if (!global_manpath)
|
||||
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 ();
|
||||
|
||||
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 2006-06-13 14:01:19.000000000 +0000
|
||||
@@ -1142,7 +1142,7 @@ static inline const char *is_section (co
|
||||
+++ src/man.c 2012-10-01 14:24:23.251006952 +0000
|
||||
@@ -1368,7 +1368,7 @@ static inline const char *is_section (co
|
||||
{
|
||||
const char **vs;
|
||||
|
||||
@ -9,17 +9,16 @@
|
||||
if (STREQ (*vs, name))
|
||||
return name;
|
||||
/* 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.
|
||||
*/
|
||||
const char **sp;
|
||||
- for (sp = section_list; *sp; ++sp) {
|
||||
+
|
||||
+ for (sp = section_list; sp && *sp; ++sp) {
|
||||
if (!*(*sp + 1)) {
|
||||
/* No extension */
|
||||
if (!sec_left && **sp == *(left->ext))
|
||||
@@ -3209,7 +3210,7 @@ static int man (const char *name, int *f
|
||||
if (!sec_left && **sp == *(lsource->ext))
|
||||
@@ -3918,7 +3918,7 @@ static int man (const char *name, int *f
|
||||
} else {
|
||||
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: less
|
||||
BuildRequires: libbz2-devel
|
||||
BuildRequires: libpipeline-devel
|
||||
BuildRequires: libzio-devel
|
||||
BuildRequires: pkg-config
|
||||
BuildRequires: po4a
|
||||
BuildRequires: xz-devel
|
||||
BuildRequires: zlib-devel
|
||||
Version: 2.5.2
|
||||
Version: 2.6.3
|
||||
Release: 0
|
||||
Summary: A Program for Displaying man Pages
|
||||
License: GPL-2.0+
|
||||
@ -38,25 +42,21 @@ Provides: man_db
|
||||
Requires: glibc-locale
|
||||
Requires: groff >= 1.18
|
||||
Requires: less
|
||||
Source: man-db-%{version}.tar.bz2
|
||||
Source: man-db-%{version}.tar.xz
|
||||
Source1: sysconfig.cron-man
|
||||
Source2: cron.daily.do_mandb
|
||||
Source3: cron.daily.clean_catman
|
||||
Source4: mancoding
|
||||
Source5: wrapper.c
|
||||
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
|
||||
Patch4: man-db-2.4.3-section.dif
|
||||
Patch5: man-db-2.5.1-security4.dif
|
||||
Patch6: man-db-2.4.3-firefox.dif
|
||||
Patch7: man-db-%{version}-chinese.dif
|
||||
Patch8: man-db-2.5.1-globbing.dif
|
||||
Patch9: man-db-2.5.1-zio.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
|
||||
Patch4: man-db-2.6.3-section.dif
|
||||
Patch5: man-db-2.6.3-security4.dif
|
||||
Patch6: man-db-2.6.3-firefox.dif
|
||||
Patch7: man-db-2.6.3-chinese.dif
|
||||
Patch9: man-db-2.6.3-zio.dif
|
||||
Patch10: man-db-2.6.3-listall.dif
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||
%global _sysconfdir /etc
|
||||
|
||||
@ -74,22 +74,14 @@ Authors:
|
||||
|
||||
%prep
|
||||
%setup -n man-db-%{version}
|
||||
%patch1 -p1 -b .debian
|
||||
%patch2 -p0 -b .groff
|
||||
%patch4 -p0 -b .sect
|
||||
%patch5 -p0 -b .secu4
|
||||
%patch6 -p0 -b .firefox
|
||||
%patch7 -p0 -b .chinese
|
||||
%patch8 -p0 -b .globbing
|
||||
%patch9 -p0 -b .zio
|
||||
%patch10 -p0 -b .listall
|
||||
%patch11 -p0 -b .catp
|
||||
%patch12 -p0 -b .fp
|
||||
%patch13 -p0 -b .fhs
|
||||
%patch0 -p0
|
||||
%if 0%{?suse_version} > 1210
|
||||
%patch14 -p1
|
||||
%endif
|
||||
|
||||
%build
|
||||
gettextize --force --copy --no-changelog
|
||||
@ -115,35 +107,30 @@ Authors:
|
||||
Cg g s m)
|
||||
SEC="${SEC[@]}"
|
||||
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=
|
||||
LIBS=
|
||||
export CFLAGS LDFLAGS LIBS
|
||||
%if %suse_version > 1030
|
||||
aclocal -I ${PWD}/m4 -I ${PWD}/gnulib/m4
|
||||
autoconf -B ${PWD}/m4 -B ${PWD}/gnulib/m4
|
||||
LINGUAS=
|
||||
for d in $(cat man/LINGUAS*) ; do
|
||||
test -d %{_datadir}/locale/$d || continue
|
||||
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
|
||||
%else
|
||||
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 \
|
||||
%configure \
|
||||
--enable-dups \
|
||||
--enable-setuid=man \
|
||||
--with-device=utf8 \
|
||||
--prefix=%{_prefix} \
|
||||
--mandir=%{_mandir} \
|
||||
--localstatedir=%{_localstatedir} \
|
||||
--libexecdir=%{_prefix}/lib \
|
||||
--with-zio \
|
||||
--with-gnu-ld \
|
||||
--disable-rpath \
|
||||
--disable-automatic-create \
|
||||
--enable-automatic-update \
|
||||
--disable-cats \
|
||||
--enable-threads=posix \
|
||||
--enable-mb-groff \
|
||||
--with-db=gdbm \
|
||||
--enable-nls \
|
||||
@ -166,22 +153,33 @@ Authors:
|
||||
" $man
|
||||
esac
|
||||
done
|
||||
gcc $CFLAGS -I gnulib/lib/ -I include/ --include config.h --include configmake.h \
|
||||
-o wrapper %{S:5} -L gnulib/lib/.libs/ -lgnu
|
||||
|
||||
%install
|
||||
%if %suse_version <= 1030
|
||||
export MKDIR_P="mkdir -p"
|
||||
%endif
|
||||
rm -rf %{buildroot}%{_localstatedir}/cache/man
|
||||
mkdir -p %{buildroot}%{_datadir}/doc/packages/man
|
||||
mkdir -p %{buildroot}%{_prefix}/lib/man-db
|
||||
mkdir -p %{buildroot}%{_bindir}
|
||||
mkdir -p %{buildroot}/etc
|
||||
make nls=all install DESTDIR=%{buildroot}
|
||||
if test -x %{buildroot}%{_bindir}/wrapper ; then
|
||||
rm -f %{buildroot}%{_bindir}/mandb
|
||||
rm -f %{buildroot}%{_bindir}/man
|
||||
mv %{buildroot}%{_bindir}/wrapper %{buildroot}%{_bindir}/mandb
|
||||
ln -sf mandb %{buildroot}%{_bindir}/man
|
||||
mv %{buildroot}%{_libdir}/man-db/libman*%{version}.so \
|
||||
%{buildroot}%{_libdir}/
|
||||
rm -rfv %{buildroot}%{_libdir}/man-db/
|
||||
mv %{buildroot}%{_datadir}/doc/man-db/man-db-manual.* \
|
||||
%{buildroot}%{_datadir}/doc/packages/man/
|
||||
# wrapper
|
||||
if test -x %{buildroot}%{_bindir}/mandb ; then
|
||||
mv %{buildroot}%{_bindir}/mandb %{buildroot}%{_prefix}/lib/man-db/
|
||||
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}
|
||||
pushd %{buildroot}%{_mandir}/
|
||||
rm -rf *.ascii/
|
||||
@ -213,7 +211,8 @@ test -d var/catman/ && rm -rf var/catman/ || true
|
||||
%files -f man-db.lang
|
||||
%defattr(-,root,root)
|
||||
%doc docs/COPYING
|
||||
%doc docs/ChangeLog
|
||||
%doc ChangeLog
|
||||
%doc %{_datadir}/doc/packages/man/man-db-manual.*
|
||||
%config /etc/manpath.config
|
||||
%attr(0744,root,root) /etc/cron.daily/suse-clean_catman
|
||||
%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}/whatis
|
||||
%{_bindir}/zsoelim
|
||||
%if %suse_version > 1030
|
||||
%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/mandb
|
||||
%attr(0755,man,man) %{_prefix}/lib/man-db/manconv
|
||||
%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
|
||||
%{_libdir}/libman*.so
|
||||
%{_datadir}/groff/site-tmac/tmac.andb
|
||||
%{_datadir}/groff/site-tmac/tmac.andocdb
|
||||
%doc %{_mandir}/man1/*.1.gz
|
||||
%doc %{_mandir}/man5/*.5.gz
|
||||
%doc %{_mandir}/man8/*.8.gz
|
||||
%dir %{_mandir}/id
|
||||
%defattr(-,man,man)
|
||||
%{_localstatedir}/cache/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