Hello community,

here is the log from the commit of package man for openSUSE:Factory checked in 
at 2012-10-07 19:52:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/man (Old)
 and      /work/SRC/openSUSE:Factory/.man.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "man", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/man/man.changes  2012-09-14 12:30:53.000000000 
+0200
+++ /work/SRC/openSUSE:Factory/.man.new/man.changes     2012-10-07 
19:53:35.000000000 +0200
@@ -1,0 +2,271 @@
+Thu Oct  4 09:16:16 UTC 2012 - [email protected]
+
+- Update to version 2.6.3
+  * Build fixes for glibc 2.16 and Automake 1.12.
+  * apropos prints an error message and returns non-zero when it finds
+    no matches.  (Regression introduced in 2.5.1.)
+  * The presence of a 64-bit GDBM database on the manpath no longer
+    causes a 32-bit man process to exit with a fatal error.
+  * apropos is much faster when run with many arguments.
+  * whatis may be given the full path to an executable as an argument,
+    in which case it will look up the base name of that executable in
+    the appropriate parts of the manpath.
+  * Translated manual pages are no longer displayed starting with a
+    spurious blank line.
+  * Fix double-free in mandb when encountering a symlink outside the
+    manual hierarchy, thanks to Peter Schiffer.
+  * Running 'man -w' (with a new --path alias) without a name now
+    prints the manpath, for compatibility with other man
+    implementations.  The vim viewdoc plugin makes use of this.
+  * Fix a segfault when scanning links to empty pages.
+  * Once we've seen at least one record in a page's NAME section,
+    ignore any further records that don't include a whatis
+    description, as they tend to be noise.
+  * Ensure that the target of a symlink or .so chain is always recorded
+    as a real page.
+  * Read a user-specified configuration file even if HOME is unset.
+  * Fix failure to display manual pages in some encodings when
+    installed setuid.
+  * Wrap long table cells in man(1), fixing test failures with groff
+    1.21.
+  * If an explicit section is passed to man, then pages that match
+    that section exactly will be preferred over pages that only have
+    that section as a prefix.
+  * Fix a segfault when 'man -K' tries to display certain pages.
+  * Fix a segfault in some situations when processes are killed by
+    SIGHUP, SIGINT, or SIGTERM.
+  * As promised in the release notes for man-db 2.5.8, man-db no
+    longer ships its own copy of libpipeline
+    (http://libpipeline.nongnu.org/).  You must build and install that
+    library separately.
+  * Search the full manpath when expanding .so directives in manual
+    pages.  As part of this, '.so name.1' should now work as well as
+    '.so man1/name.1'.
+  * lexgrog handles roff named glyphs and perldoc strings in NAME
+    sections.
+  * man no longer starts a pager if standard output is not a tty.
+  * The -s option to whatis and apropos now takes a colon- or
+    comma-separated list of sections, similar to 'man -S'.
+  * mandb error output is neater when stderr is not a terminal.
+  * Add basic support for the implementation of nroff/troff in the
+    Heirloom Documentation Tools.  Title lengths are not properly set
+    as yet, and many features are untested.
+  * mandb removes cat* and NLS subdirectories of cat directories whose
+    corresponding man directories no longer exist.
+  * mandb forces SIGPIPE back to its default disposition on startup,
+    to avoid noisy output in case it was started in a context where
+    SIGPIPE was ignored.
+  * SECTION entries in a user configuration file now override those in
+    the system configuration file, rather than appending to them.
+  * The default less prompt now includes "(press h for help or q to
+    quit)" to help novices find their way around.
+  * man-db may now be built to use Berkeley DB version 5
+    (--with-db=db5).
+  * Fix assertion failure on 'man -l' with an uncompressed page and
+    any of --no-hyphenation, --no-justification, or a non-English
+    page.
+  * Try underscore-separated subpages as well as hyphen-separated
+    ones, thanks to Tanguy Ortolo.
+  * Build libman and libmandb as shared libraries, reducing installed
+    footprint by about 200K (at least on GNU/Linux).
+  * Warnings about unrecognised locales are now suppressed if the
+    DPKG_RUNNING_VERSION environment variable is set (i.e. man-db is
+    running within a Debian package's maintainer script), since the
+    system locales are often out of sync with the C library in that
+    context.  Thanks to the Debian Perl maintainers for the idea.
+  * Allow building with an external libpipeline
+    (http://libpipeline.nongnu.org/), which has been split out from
+    man-db.  This is a transitional measure: a future version of
+    man-db will stop shipping its own copy of libpipeline.
+  * mandb should no longer repeatedly rescan manual page hierarchies
+    when a whatis entry turns into a broken link.
+  * If a subprocess exits before man manages to read all the output
+    from it, it now drains the output file descriptor rather than
+    immediately discarding it.
+  * If /usr/share/i18n/SUPPORTED is available, man attempts to use it
+    to ensure that LC_CTYPE is set to an appropriate locale for the
+    selected character set when invoking col. This fixes 'LANG=C man
+    -E UTF-8', as used by lintian.
+  * Fix possible mandb crash when MAN_MUST_CREATE is unset.
+  * man can now tell nroff to disable justification if the
+    --no-justification option is used.
+  * If the full path to an executable is given as an argument, man
+    will try looking up the corresponding manual page in the
+    appropriate part of the manpath, rather than just trying to format
+    the text of the executable as a manual page.
+  * In the GNU manual hierarchy layout, search man<sec><ext>
+    directories as well as just man<sec> (e.g. /usr/share/man/man3p as
+    well as /usr/share/man/man3).
+  * By request, man now prefers getting a page from the best manual
+    section over getting a page in the correct language.
+  * All programs now support a MAN_DEBUG environment variable which
+    can be used in place of the -d/--debug option. This is useful in
+    some situations where a program is being called deep in a process
+    tree.
+  * Add support for emulating pipe() with socketpair(), which is
+    faster on some systems; thanks to Werner Fink of SUSE.
+  * Cat pages are now always saved in UTF-8, and converted to the
+    proper encoding at display time, which means that cat pages can
+    now be saved regardless of locale. Note that a consequence of this
+    is that cat pages now include formatting information (e.g.
+    overstriking) and need to be run through col(1) before display.
+  * Exact-section database lookups were incorrectly returning all
+    database entries whose section names were prefixes of the
+    requested section name. In some cases this could confuse mandb
+    into never believing that the database was up to date.
+  * Fix handling of pages with comma-separated names ("foo, bar,
+    baz") in their NAME sections, broken by a change in 2.5.0 (!)
+    to ignore manual page names containing spaces.
+  * Fixed a buffer overflow in the pipeline library's line-reading
+    functions. I don't believe this to be exploitable: at worst we
+    might believe that there's some garbage at the end of manual pages
+    (whose contents are untrusted anyway) and this bug typically
+    resulted in a failed assertion the next time anything tried to
+    read a line.
+  * Plugged two substantial memory leaks in the pipeline library.
+  * whatis and apropos only display any given manual page, or pointers
+    to it, once.
+  * man now sets less(1)'s environment up correctly for manual pages
+    encoded in CP1251.
+  * manconv no longer confuses situations such as "this UTF-8
+    character is not representable in the target encoding" with "this
+    text is not in UTF-8".
+  * The default configuration file now includes section 0, used on
+    some systems to document C library header files.
+  * 'make check' now passes in the presence of a UTF-8-aware col, such
+    as that in util-linux-ng.
+  * The 'man -K' option is now supported to search the full text of
+    all manual pages. This was inspired by a similar option in the
+    other man package (currently at version 1.6f) currently maintained
+    by Federico Lucifredi and formerly by Andries Brouwer, but I took
+    advantage of man-db's pipeline library to implement it entirely
+    in-process, without having to start a separate grep process for
+    every manual page. In my tests with fairly typical searches across
+    variously all manual pages or just one section, man-db's
+    implementation ran between 3 and 10 times faster.
+  * Database directories are now only created when there are
+    corresponding manual page directories, not just because they're
+    mentioned in the configuration file.
+  * By default, man will now try to interpret pairs of manual page
+    names given on the command line as equivalent to a single manual
+    page name containing a hyphen (e.g. 'man foo bar' => foo-bar(1)).
+    This supports the common pattern of programs that implement a
+    number of subcommands, allowing them to provide manual pages for
+    each that can be accessed using similar syntax as would be used to
+    invoke the subcommands themselves. Suggested by H. Peter Anvin,
+    Federico Lucifredi, and others on the git mailing list.
+  * The build process is now quieter by default. Use './configure
+    --disable-silent-rules' or 'make V=0' if you don't like this or
+    your make(1) doesn't support the non-standard extension required.
+  * manconv understands a wider range of Emacs-style coding tags.
+  * Recommendations to change MAN_DB_CREATES, MAN_DB_UPDATES, and
+    MAN_CATS #define options in manconfig.h have been replaced by new
+    configure options --enable-automatic-create,
+    --disable-automatic-update, and --disable-cats respectively. Note
+    that automatic user database creation is now off by default, as it
+    is often too slow for the usefulness it adds; use
+    --enable-automatic-create to enable it.
+  * Pages that declare a non-default encoding in their preprocessor
+    lines are now handled correctly.
+  * man-db's 'make check' now tests that all its own manual pages
+    format without errors or warnings from groff, to ensure a
+    better-quality release.
+  * lexgrog now stops on any unrecognised roff request, rather than
+    continuing and often littering the database with garbage.
+  * man no longer requires both standard input and standard output to
+    be terminals in order to use the terminal line length. The line
+    length from standard output is preferred if available.
+  * The manpath was built completely wrongly when multiple entries
+    were present in LANGUAGE: duplicates were handled strangely, and
+    languages were effectively iterated in reverse order. It should be
+    rather more sensible now.
+  * The MAN_KEEP_STDERR environment variable can now be used to
+    override man's default of discarding stderr when stdout is a
+    terminal.
+  * Handling of terminal widths for cat pages is now configurable,
+    using the MINCATWIDTH, MAXCATWIDTH, and CATWIDTH configuration
+    file directives.
+  * 'man -a' now detects duplicate manual page candidates more
+    reliably, and sorts them better.
+  * Belarusian, Estonian, Greek, Latvian, Lithuanian, Macedonian,
+    Romanian, Slovenian, and Ukrainian pages are now supported.
+  * man can now search for pages using regular expressions (with
+    --regex) or shell wildcards (with --wildcard). By default this
+    searches both page names and descriptions, like apropos, but if
+    the --names-only option is used then it searches page names only,
+    like whatis.
+  * man can now tell nroff to disable hyphenation if the
++++ 74 more lines (skipped)
++++ between /work/SRC/openSUSE:Factory/man/man.changes
++++ and /work/SRC/openSUSE:Factory/.man.new/man.changes

Old:
----
  automake-1.12.patch
  man-db-2.4.3-firefox.dif
  man-db-2.4.3-section.dif
  man-db-2.5.1-globbing.dif
  man-db-2.5.1-listall.dif
  man-db-2.5.1-security4.dif
  man-db-2.5.1-zio.dif
  man-db-2.5.2-catp.dif
  man-db-2.5.2-chinese.dif
  man-db-2.5.2-fastpipe.dif
  man-db-2.5.2-fhs.dif
  man-db-2.5.2.dif
  man-db-2.5.2.tar.bz2
  man-db_2.5.2-2.diff.bz2

New:
----
  man-db-2.6.3-chinese.dif
  man-db-2.6.3-firefox.dif
  man-db-2.6.3-listall.dif
  man-db-2.6.3-man0.dif
  man-db-2.6.3-section.dif
  man-db-2.6.3-security4.dif
  man-db-2.6.3-zio.dif
  man-db-2.6.3.dif
  man-db-2.6.3.tar.xz
  wrapper.c

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ man.spec ++++++
--- /var/tmp/diff_new_pack.cusoTG/_old  2012-10-07 19:53:38.000000000 +0200
+++ /var/tmp/diff_new_pack.cusoTG/_new  2012-10-07 19:53:38.000000000 +0200
@@ -25,9 +25,13 @@
 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 @@
 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
+Patch1:         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 @@
 
 %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,32 @@
         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 \
+    find -name 'Makefile.*' | xargs \
+       sed -ri -e '/^pkglibdir/{ 
s@^(pkglibdir[[:blank:]]+=[[:blank:]]+\$\(libdir\)).*@\1@p }'
+    %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 \
@@ -151,7 +140,7 @@
        --without-included-gettext \
        --with-sections="${SEC}"
     make %{?_smp_mflags} nls=all
-    for man in $(find man/ -type f -a -name '*.man[0-9]'); do
+    for man in $(find man/ -type f -a -name '*.[0-9]'); do
        pp="$(head -n 1 $man)"
        case "$pp" in
        \'\\\"*\ -\*-\ coding:\ *\ -\*-)
@@ -166,22 +155,32 @@
                "  $man
        esac
     done
+    patch -p0 < %{P:1}
+    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
+    rm -vf   %{buildroot}%{_libdir}/*.la
+    mv      %{buildroot}%{_datadir}/doc/man-db/man-db-manual.* \
+            %{buildroot}%{_datadir}/doc/packages/man/
+    # wrapper which drops roots privileges if root executes man or mandb
+    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/
@@ -212,6 +211,9 @@
 
 %files -f man-db.lang
 %defattr(-,root,root)
+%doc docs/COPYING
+%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
@@ -228,25 +230,19 @@
 %{_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

++++++ man-db-2.5.2-chinese.dif -> man-db-2.6.3-chinese.dif ++++++
--- /work/SRC/openSUSE:Factory/man/man-db-2.5.2-chinese.dif     2011-09-23 
02:12:37.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.man.new/man-db-2.6.3-chinese.dif        
2012-10-07 19:53:35.000000000 +0200
@@ -1,37 +1,25 @@
---- 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
+--- 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"        },
- #endif /* MULTIBYTE_GROFF */
- 
-@@ -281,6 +287,7 @@ static struct less_charset_entry less_ch
-       { "UTF-8",              "utf-8",        NULL            },
+ # 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            },
- #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
+       /* 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
@@ -42,7 +30,7 @@
   */
  const char *get_source_encoding (const char *lang)
  {
-@@ -545,7 +559,7 @@ static int compatible_encodings (const c
+@@ -654,7 +663,7 @@ static int compatible_encodings (const c
         */
        if ((STREQ (input, "BIG5") || STREQ (input, "BIG5HKSCS") ||
             STREQ (input, "EUC-JP") ||
@@ -51,7 +39,7 @@
             STREQ (input, "EUC-KR") ||
             STREQ (input, "EUC-TW")) &&
            STREQ (output, "UTF-8"))
-@@ -639,7 +653,7 @@ const char *get_roff_encoding (const cha
+@@ -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))

++++++ man-db-2.4.3-firefox.dif -> man-db-2.6.3-firefox.dif ++++++
--- /work/SRC/openSUSE:Factory/man/man-db-2.4.3-firefox.dif     2011-09-23 
02:12:37.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.man.new/man-db-2.6.3-firefox.dif        
2012-10-07 19:53:35.000000000 +0200
@@ -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);

++++++ man-db-2.5.1-listall.dif -> man-db-2.6.3-listall.dif ++++++
--- /work/SRC/openSUSE:Factory/man/man-db-2.5.1-listall.dif     2011-09-23 
02:12:37.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.man.new/man-db-2.6.3-listall.dif        
2012-10-07 19:53:35.000000000 +0200
@@ -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)

++++++ man-db-2.6.3-man0.dif ++++++
--- man/de/man1/man.1
+++ man/de/man1/man.1
@@ -79,6 +79,9 @@ und den Typ der dort zu findenden Seiten
 .TS
 tab (@);
 l lx.
+0@T{
+Dateiheader (gewöhnlich in \fI/usr/include\fR)
+T}
 1@T{
 Ausführbare Programme oder Shell\-Befehle
 T}
--- man/es/man1/man.1
+++ man/es/man1/man.1
@@ -101,6 +101,9 @@ del manual y los tipos de páginas que c
 .TS
 tab (@);
 l lx.
+0@T{
+Ficheros (se encuentran generalmente en \fI/usr/include\fR)
+T}
 1@T{
 Programas ejecutables y guiones del intérprete de órdenes
 T}
--- man/it/man1/man.1
+++ man/it/man1/man.1
@@ -124,6 +124,9 @@ del manuale seguiti dai tipi di pagine c
 .TS
 tab (@);
 l lx.
+0@T{
+File (di solito trovabili in \fI/usr/include\fR)
+T}
 1@T{
 Programmi eseguibili e comandi della shell
 T}
--- man/ja/man1/man.1
+++ man/ja/man1/man.1
@@ -73,6 +73,9 @@ man \- オンラインマニュアルの
 .TS
 tab (@);
 l lx.
+0@T{
+(\fIusr/include\fP)
+T}
 1@T{
 実行プログラムまたはシェルコマンド
 T}
--- man/man1/man.1
+++ man/man1/man.1
@@ -179,6 +179,9 @@ numbers of the manual followed by the ty
 .TS
 tab (@);
 l lx.
+0@T{
+Header files (usually found in \fI/usr/include\fR)
+T}
 1@T{
 Executable programs or shell commands
 T}
++++++ man-db-2.4.3-section.dif -> man-db-2.6.3-section.dif ++++++
--- /work/SRC/openSUSE:Factory/man/man-db-2.4.3-section.dif     2011-09-23 
02:12:37.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.man.new/man-db-2.6.3-section.dif        
2012-10-07 19:53:35.000000000 +0200
@@ -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;
  

++++++ man-db-2.5.1-security4.dif -> man-db-2.6.3-security4.dif ++++++
--- /work/SRC/openSUSE:Factory/man/man-db-2.5.1-security4.dif   2011-09-23 
02:12:37.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.man.new/man-db-2.6.3-security4.dif      
2012-10-07 19:53:35.000000000 +0200
@@ -1,17 +1,17 @@
 --- src/mandb.c
-+++ src/mandb.c        2008-04-21 13:06:01.440910914 +0200
-@@ -36,6 +36,7 @@
++++ 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>
- 
-@@ -414,11 +415,20 @@ static short mandb (const char *catpath,
-       char pid[23];
-       short amount;
+ #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);
@@ -29,4 +29,20 @@
 +
        if (!quiet) 
                printf (_("Processing manual pages under %s...\n"), manpath);
- #ifdef NDBM
+ 
+@@ -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);
+ 

++++++ man-db-2.5.1-zio.dif -> man-db-2.6.3-zio.dif ++++++
--- /work/SRC/openSUSE:Factory/man/man-db-2.5.1-zio.dif 2011-09-23 
02:12:37.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.man.new/man-db-2.6.3-zio.dif    2012-10-07 
19:53:35.000000000 +0200
@@ -1,23 +1,22 @@
 --- config.h.in
-+++ config.h.in        2007-12-07 15:50:23.000000000 +0100
-@@ -454,6 +454,9 @@
++++ 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 <limits.h> header file. */
- #undef HAVE_LIMITS_H
+ /* Define to 1 if you have the <linewrap.h> header file. */
+ #undef HAVE_LINEWRAP_H
  
 --- configure.ac
-+++ configure.ac       2008-04-21 13:18:38.854059561 +0200
-@@ -94,7 +94,18 @@ AC_ARG_WITH(sections,
++++ 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,
++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
@@ -28,13 +27,13 @@
 +       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)
++      [: ${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,46 @@ 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.
@@ -44,26 +43,43 @@
 +   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])
++       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(lzmadec.h, [
++       for lib in lzma lzmadec
++       do
++       AC_CHECK_LIB($lib, lzmadec_open,       [LIBS="$LIBS -Wl,--no-as-needed 
-l$lib"; break])
++       done
++     ])
++     AC_CHECK_HEADER(lzma.h, [
++       for lib in lzma
++       do
++       AC_CHECK_LIB($lib, lzma_easy_encoder,  [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   2008-04-23 10:48:04.431353342 +0000
++++ lib/decompress.c   2012-10-02 09:05:43.787007258 +0000
 @@ -36,6 +36,10 @@
  #  include "zlib.h"
  #endif /* HAVE_LIBZ */
@@ -75,7 +91,7 @@
  #include "manconfig.h"
  #include "comp_src.h"
  #include "pipeline.h"
-@@ -66,6 +70,32 @@ static void decompress_zlib (void *data 
+@@ -66,6 +70,32 @@ static void decompress_zlib (void *data
  
  #endif /* HAVE_LIBZ */
  
@@ -107,55 +123,38 @@
 +
  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))
+       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 && 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")) {
++      ext = strrchr (filename, '.');
++      if (ext) {
++              const char *opt;
++              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 */
-+              char *name = appendstr (NULL, "zcat < ", filename, NULL);
-+              cmd = command_new_function (name, &decompress_zio, "Z");
++              name = appendstr (NULL, "libzio < ", filename, NULL);
++              cmd = pipecmd_new_function (name, &decompress_zio, NULL,
++                                          opt);
 +              free (name);
 +              p = pipeline_new_commands (cmd, NULL);
-+              if (strcmp(program_name, "mandb") == 0)
-+                      p->libzio = 1;
 +              goto got_pipeline;
 +      }
 +#endif /* HAVE_ZIO */
@@ -163,143 +162,15 @@
  #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);
+@@ -93,7 +154,11 @@ pipeline *decompress_open (const char *f
        }
+ #endif /* HAVE_LIBZ */
  
 +#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 */
++nozio:
++#else
+       ext = strrchr (filename, '.');
++#endif /* HAVE_LIBZ */
+       if (ext) {
+               ++ext;
  
-+#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

++++++ man-db-2.4.3-firefox.dif -> man-db-2.6.3.dif ++++++
++++ 1274 lines (skipped)
++++ between /work/SRC/openSUSE:Factory/man/man-db-2.4.3-firefox.dif
++++ and /work/SRC/openSUSE:Factory/.man.new/man-db-2.6.3.dif

++++++ wrapper.c ++++++
/*
 * wrapper.c - wrapper program around man and mandb
 *
 * Copyright (C) 2000 Fabrizio Polacco <[email protected]>
 * 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;
}
-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to