man-db 2.6.3 (17 September 2012) ================================ Major changes since man-db 2.6.2: Fixes: ------ o Build fixes for glibc 2.16 and Automake 1.12. man-db 2.6.2 (18 June 2012) =========================== Major changes since man-db 2.6.1: Fixes: ------ o apropos prints an error message and returns non-zero when it finds no matches. (Regression introduced in 2.5.1.) o 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. Improvements: ------------- o apropos is much faster when run with many arguments. o 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. man-db 2.6.1 (14 February 2012) =============================== Major changes since man-db 2.6.0.2: Fixes: ------ o --with-db=db* and --with-db=ndbm compile again. o Translated manual pages are no longer displayed starting with a spurious blank line. o straycats tries to ensure that col is invoked with LC_CTYPE set to a UTF-8 locale. o Fix double-free in mandb when encountering a symlink outside the manual hierarchy, thanks to Peter Schiffer. Improvements: ------------- o mandb creates a cache directory tag, per http://www.brynosaurus.com/cachedir/ ("Cache Directory Tagging Standard"). o Add support for Lzip-compressed manual pages, thanks to Matias A. Fonzo. o 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. man-db 2.6.0.2 (13 April 2011) ============================== Major changes since man-db 2.6.0.1: Fixes: ------ o Fix a segfault when scanning links to empty pages. o 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. man-db 2.6.0.1 (10 April 2011) ============================== Major changes since man-db 2.6.0: Fixes: ------ o Ensure that the target of a symlink or .so chain is always recorded as a real page. o Read a user-specified configuration file even if HOME is unset. man-db 2.6.0 (9 April 2011) =========================== Major changes since man-db 2.5.9: Fixes: ------ o Fix build with versions of GNU ld that default to --no-copy-dt-needed-entries. o Fix failure to display manual pages in some encodings when installed setuid. o Wrap long table cells in man(1), fixing test failures with groff 1.21. o 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. o Fix a segfault when 'man -K' tries to display certain pages. o Fix a segfault in some situations when processes are killed by SIGHUP, SIGINT, or SIGTERM. Improvements: ------------- o 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. o 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'. o lexgrog handles roff named glyphs and perldoc strings in NAME sections. o man no longer starts a pager if standard output is not a tty. o The -s option to whatis and apropos now takes a colon- or comma-separated list of sections, similar to 'man -S'. o mandb error output is neater when stderr is not a terminal. o 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. o mandb removes cat* and NLS subdirectories of cat directories whose corresponding man directories no longer exist. o 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. o SECTION entries in a user configuration file now override those in the system configuration file, rather than appending to them. o The default less prompt now includes "(press h for help or q to quit)" to help novices find their way around. o man-db may now be built to use Berkeley DB version 5 (--with-db=db5). man-db 2.5.9 (17 November 2010) =============================== Major changes since man-db 2.5.8: Fixes: ------ o Fix test failures on some systems. A change made in 2.5.8 was overly sensitive to directory ordering. o Configuring with --disable-nls works again. man-db 2.5.8 (15 November 2010) =============================== Major changes since man-db 2.5.7: Fixes: ------ o Fix assertion failure on 'man -l' with an uncompressed page and any of --no-hyphenation, --no-justification, or a non-English page. o 2.5.7 introduced a regression when running catman in some locales, most notably in the C locale: while converting the output to UTF-8, iconv was run after the compressor rather than before it. This release fixes that. Improvements: ------------- o Add support for XZ-compressed manual pages, thanks to Darren Salt. o Try underscore-separated subpages as well as hyphen-separated ones, thanks to Tanguy Ortolo. o Build libman and libmandb as shared libraries, reducing installed footprint by about 200K (at least on GNU/Linux). o libintl is no longer shipped with man-db. If your system does not already have GNU libintl installed and you want man-db's messages to be translated, then please install GNU libintl separately (http://www.gnu.org/software/gettext/). o 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. o 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. o mandb should no longer repeatedly rescan manual page hierarchies when a whatis entry turns into a broken link. man-db 2.5.7 (16 February 2010) =============================== Major changes since man-db 2.5.6: Fixes: ------ o 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. o 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. o Don't run tests if cross-compiling. o Fix possible mandb crash when MAN_MUST_CREATE is unset. Improvements: ------------- o man can now tell nroff to disable justification if the --no-justification option is used. o 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. o In the GNU manual hierarchy layout, search man directories as well as just man (e.g. /usr/share/man/man3p as well as /usr/share/man/man3). o By request, man now prefers getting a page from the best manual section over getting a page in the correct language. o 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. o man-db now builds with heirloom-doctools, thanks to Diego Pettenò of Gentoo. o Add support for emulating pipe() with socketpair(), which is faster on some systems; thanks to Werner Fink of SUSE. o 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. man-db 2.5.6 (26 August 2009) ============================= Major changes since man-db 2.5.5: Fixes: ------ o 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. o 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. o 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. o Plugged two substantial memory leaks in the pipeline library. o whatis and apropos only display any given manual page, or pointers to it, once. o man now sets less(1)'s environment up correctly for manual pages encoded in CP1251. o 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". Improvements: ------------- o The default configuration file now includes section 0, used on some systems to document C library header files. o 'make check' now passes in the presence of a UTF-8-aware col, such as that in util-linux-ng. o 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. o Database directories are now only created when there are corresponding manual page directories, not just because they're mentioned in the configuration file. o 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. o 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. o 'make install' now installs the manual. o manconv understands a wider range of Emacs-style coding tags. o 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. man-db 2.5.5 (14 March 2009) ============================ Major changes since man-db 2.5.4: Fixes: ------ o Pages that declare a non-default encoding in their preprocessor lines are now handled correctly. o Fix an uninitialised variable when sorting manual page candidates that could lead to excessive memory allocation and possible crashes. Improvements: ------------- o 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. man-db 2.5.4 (24 February 2009) =============================== Major changes since man-db 2.5.3: Fixes: ------ o Build fixes for systems without GNU Make, and for systems without gettext; this successfully covers at least FreeBSD. o The distclean target now works if po4a isn't installed. o Exit as soon as possible if database writes return ENOSPC. o lexgrog now stops on any unrecognised roff request, rather than continuing and often littering the database with garbage. o 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. o 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. Improvements: ------------- o The MAN_KEEP_STDERR environment variable can now be used to override man's default of discarding stderr when stdout is a terminal. o Handling of terminal widths for cat pages is now configurable, using the MINCATWIDTH, MAXCATWIDTH, and CATWIDTH configuration file directives. o 'man -a' now detects duplicate manual page candidates more reliably, and sorts them better. o Belarusian, Estonian, Greek, Latvian, Lithuanian, Macedonian, Romanian, Slovenian, and Ukrainian pages are now supported. o 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. o man can now tell nroff to disable hyphenation if the --no-hyphenation option is used. o man-db already searched for manual pages in ../man and man directories relative to each $PATH component; it now searches in ../share/man and share/man directories too. o Groff 1.20 was recently released, including the 'preconv' preprocessor. Although man-db has supported preconv to some extent since 2.4.4, man-db's configure now detects its presence and infers that groff supports Unicode input using it; man also now takes slightly better advantage of preconv than before. o Per-locale groff macros are now loaded if possible, allowing us to take advantage of such things as localised versions of predefined strings and language-aware hyphenation. This only works with Groff 1.20.2 or better (not yet released), since earlier versions did not allow us to suppress warnings in the event that the appropriate macro file is not available. man-db 2.5.3 (17 November 2008) =============================== Major changes since man-db 2.5.2: Fixes: ------ o Cleaned up a number of possible crashes, memory leaks, and missing error checks found by the Coverity Scan project. o Fix build if MAN_CATS is undefined. o If the LINGUAS environment variable is set while running configure, it now controls building and installation of localised manual pages as well as program translations. o The LANGUAGE environment variable is now tokenised properly, rather than only taking the first two characters of each element. o Fix build if --disable-nls is used or iconv is not available. o man now correctly propagates the exit code of whatis or apropos when called with the -f or -k option respectively. Improvements: ------------- o A number of inconsistencies and readability problems with man-db's own manual pages have been cleaned up, thanks mainly to Yuri Kozlov. o Reduce the number of warnings emitted when using an unrecognised locale. o manconv and zsoelim are now called internally rather than by executing external programs, to improve performance. o man-db now uses GDBM (--with-db=gdbm) in preference to Berkeley DB (--with-db=db or --with-db=dbN where N is 1, 2, 3, or 4) by default, since hardware improvements have rendered Berkeley DB's speed advantages negligible for our purposes and the relatively frequent SONAME and on-disk format changes are not worth the hassle. Distributors should note that if they follow this change then they will need to arrange for databases to be rebuilt on upgrade to this version. o Manual pages may now be compressed with LZMA (although this is probably only worth it for very large pages). o Duplicate manual page hierarchies due to symlinks (e.g. /usr/man -> /usr/share/man) are detected and removed from the search order. o A locale modifier (e.g. @latin) in a directory name must now match the locale if the former is set, in addition to the language and territory. o Bare .so includes (e.g. ".so foo.1" rather than ".so man1/foo.1") now work, although only within the same manual page hierarchy for now. man-db 2.5.2 (5 May 2008) ========================= Major changes since man-db 2.5.1: Fixes: ------ o 'man -H' (without a browser argument) was completely broken in 2.5.1 and is now fixed. o man no longer breaks in Japanese locales when using less as a pager. Improvements: ------------- o The --encoding option to man can now take a true character encoding rather than a *roff device; the latter was an unreliable, inflexible, and awkward way to select an output encoding. The old semantics are still supported for backward compatibility. o Whatis parsing stops at .ie or .if conditionals. o CJK locale specifications where the codeset component is equivalent to but not stringwise-identical to UTF-8 (e.g. zh_CN.utf8) are handled better. o man(1)'s OPTIONS section is ordered more comprehensibly. o apropos, lexgrog, man, mandb, and whatis ignore encoding conversion errors for the last possible encoding of the source page. This helps, for example, with pages including misencoded non-ASCII names of authors; it usually seems better to allow these pages to pass with small errors than to break them entirely. man-db 2.5.1 (28 January 2008) ============================== Major changes since man-db 2.5.0: Fixes: ------ o The manual is now built automatically, avoiding some ordering problems on 'make distclean'. o Manual pages are converted to the proper input encoding for troff output as well as nroff output. o The -t, -T, -X, and -Z options to man work again; in 2.5.0, they read input from stdin rather than from the manual page. o apropos and whatis no longer segfault when given an explicit locale using -L. o man now understands that groff's ascii device takes ASCII input, not ISO-8859-1. o man no longer discards stderr when writing to a file or a pipe; this was broken by an overenthusiastic change in 2.5.0. o manconv now falls back to the next encoding in its list if any characters in an entire 64KB block fail to decode using the current encoding, as was originally intended. o manconv is more careful about extracting coding: directives from manual pages. o Ctrl-C and Ctrl-\ now work again at the prompt issued by 'man -a'. Improvements: ------------- o There is a new --with-sections configure option to change the default value of SECTION in the configuration file. o Automake is now used to generate Makefiles. Among other things, this fixes VPATH builds and some bugs in dependency generation, and should allow building with non-GNU versions of make. o man-db now uses the Gnulib portability library, allowing the removal of earlier haphazard portability code. While this results in a somewhat larger source distribution, it makes man-db easier to maintain and should make it easier to build on systems to which the maintainer does not have access. o In the process of switching to Gnulib, the last vestiges of pre-C89 support have been removed; they were documented to be broken anyway. o If the MANROFFOPT environment variable is set, man now appends its value to the *roff command line. o man now accepts a --recode option to output a source manual page converted to a specified encoding. o For compatibility with System V, man accepts -s as an alias for -S, and permits sections to be comma-separated as well as colon-separated. o All programs, except the obsolete 'wrapper', now accept a --debug option. (accessdb, lexgrog, and zsoelim were lacking it.) o man now accepts a --warnings option to enable groff warnings. man-db 2.5.0 (7 October 2007) ============================= Major changes since man-db 2.4.4: Fixes: ------ o mandb --quiet now suppresses several more warnings. o The output of apropos no longer includes duplicates when multiple search terms are used. Improvements: ------------- o Databases are now created for non-English manual hierarchies. All database entries should be encoded in UTF-8; man-db converts from the character set of the manual hierarchy and to the character set specified in the user's locale as necessary. o Per-locale directory handling has been improved. Directories such as "fr.UTF-8" may be used for occasions when it is appropriate to specify the character set but not the country, and so a full locale name is inconvenient. o There is a new "manconv" program which can try multiple possible encodings for a file, thus allowing UTF-8 manual pages to be installed in any directory even without an explicit encoding declaration. o A decompression library is now in place. This allows man-db to use zlib to decompress gzipped files, and allows most of its uses of temporary files to be removed. The only remaining exceptions are cat file creation (which uses a temporary file in the cat tree rather than in /tmp) and viewing HTML manual pages (which uses a temporary directory). Otherwise, man-db should now work fine even with a read-only /tmp during system recovery. o Cat pages are now saved in the background while the pager is active, so man will only need to block afterwards if the pager is exited very quickly. o --with-* options are now available at configure time for most of the auxiliary program locations that you might want to override. o man now supports the MANPAGER environment variable, overriding PAGER. o apropos/whatis output is now truncated to the terminal width by default. As with man, this may be overridden using the MANWIDTH environment variable. o lexgrog now ignores alleged manual page names containing spaces, as these usually indicate parsing errors or ill-formed NAME sections and they clutter up apropos output badly. I'm only aware of one legitimate counterexample, the Intercal compiler "oo, ick", which no longer appears to be known by that name anyway; let me know if there are any others. o man now discards stderr from formatting subprocesses when outputting to a pager, to avoid visual corruption from any error messages. o If the MAN_KEEP_FORMATTING environment variable is set to any non-empty value, then man will preserve formatting characters in its output even when standard output is not a terminal. This may be useful for programs such as pinfo that call man and can interpret its formatted output. o Setting NOCACHE in the configuration file now prevents man from ever creating cat pages automatically. o apropos now accepts the --and option to display only items that match all the supplied keywords. man-db 2.4.4 (12 February 2007) =============================== Major changes since man-db 2.4.3: man-db is now revision-controlled using bzr (http://bazaar-vcs.org/). See docs/HACKING for the location of the archive (including all CVS history, imported by Canonical). Fixes: ------ o SECURITY: Fix a buffer overrun if using -H and the designated web browser (argument to -H or $BROWSER) contains multiple %s expansions. This is CVE-2006-4250. o Ignore SIGINT and SIGQUIT while running subprocesses, so that typing Ctrl-C doesn't kill less (broken in 2.4.3). o Similarly, ignore SIGPIPE in subprocesses. o Various fixes to SIGCHLD handling in pipeline library, preventing "waitpid failed: No child processes" errors. o Skip "exec" in configuration file commands (perhaps left over from old installations), which the pipeline execution library cannot handle directly. Improvements: ------------- o Add support for Chinese in the --enable-mb-groff case. o lexgrog now handles pages with multiple descriptions more usefully, by displaying one description per output line. man-db 2.4.3 (3 July 2005) ========================== Major changes since man-db 2.4.2: Fixes: ------ o Avoid problems creating databases on systems with badly broken clocks set before the Unix epoch. o Fix detection of decompression programs, so that man doesn't attempt to execute man pages when it doesn't have a corresponding decompression program. Improvements: ------------- o apropos and whatis now accept a --section option to restrict their search to a particular manual section. o The pipeline execution library is now used for most calls to external programs, avoiding use of the shell. o When stdout is not a terminal, man pages will be formatted in plain text without the use of backspace or ANSI formatting characters. o When invoking apropos (man -k) or whatis (man -f) as external programs, man now only passes through command-line options understood by the respective programs. o Improve handling of locales with versions and/or modifiers. o Add support for Croatian, Galician, Indonesian, Slovak, and Turkish pages. o man-db may now be built to use Berkeley DB version 4 (--with-db=db4). Compatibility notes: -------------------- o Setting the line length of manual pages now requires groff 1.18 or later. man-db 2.4.2 (20 September 2003) ================================ Major changes since man-db 2.4.1: Fixes: ------ o SECURITY: Fix a number of buffer overruns in configuration file handling, ultimate source location, and MANPATH processing. This is CVE CAN-2003-0620. o SECURITY: Restrict the use of the DEFINE directive in ~/.manpath to code running with dropped privilege. Previously, the 'compressor' variable could be used to run arbitrary code with raised privilege. This is CVE CAN-2003-0645. o Make sure to initialize mandata structures to zero. The uses of uninitialized memory resulting from this had been leading to random segfaults. o Drop privileges in order to be able to read pages in non-world-readable user manpaths while setuid. o man can be built with --disable-setuid again. o man's locale support has been revamped. The encoding of source manual pages is no longer related to the encoding of the input passed to *roff or to *roff's terminal output device. These frequently differ, especially in UTF-8 locales but in other circumstances as well, and a "just send 8-bit data" approach is no longer adequate. If you are using a version of groff with the Debian multibyte patch applied, pass the --enable-mb-groff option to configure. o When using GDBM, accessdb and apropos did not return database entries in sorted order, since GDBM's key traversal interface is not lexicographically ordered. The database layer has been corrected to cope with this. o Directories found in strange places in manual hierarchies don't crash mandb. Improvements: ------------- o man now calls mandb to update databases rather than doing it itself. This leaves cat pages as the sole remaining reason for man to be setuid. o The "undocumented" message is only displayed if a corresponding executable is found on the $PATH. o All programs that read ~/.manpath now take a -C option to cause them to read a different user configuration file instead. o The --enable-debug option to configure has been removed. man-db's Makefiles now always calculate full dependencies for C files. o mandb caches the contents of directories, significantly speeding up the purging of obsolete entries. o mandb now knows how to purge database entries corresponding to removed stray cat pages. In addition, a pipeline execution library has been written, which will make it possible to eliminate all or almost all use of the shell in a future release. Unfortunately, time pressures due to the security issues above meant that the pipeline library was not well enough tested for use in this release, so it is present but unused. That will be the first item for 2.4.3. man-db 2.4.1 (22 December 2002) =============================== Major changes since man-db 2.4.0: The man-db CVS repository has moved from sourceforge.net to savannah.nongnu.org. Fixes: ------ o Don't enter an infinite loop when the SYSTEM environment variable is set. o man doesn't segfault when trying to follow a broken symlink. o mandb no longer corrupts databases when deleting entries that are part of multi keys. o Prevent a possible buffer overflow when encountering large multi keys. o Man page names are escaped when globbing, so [(1) can now be found even if the database is not up to date. o Correct an access() check that led to 'man -X -l -' producing no output. o lexgrog can now cope with man pages containing only a .so link. o Manual hierarchies with a specific encoding are put into the search path in the correct order. A bug in $LANGUAGE handling had formerly meant that 'de' would take precedence over 'de_DE.UTF-8'. Improvements: ------------- o man's behaviour when searching for page names that begin with a digit has been made more intuitive, as has its treatment of section names that are extensions of ones mentioned in the configuration file but are not themselves explicitly named as sections. o The default line length for pages formatted for terminal output has been increased (reducing margin size) to match the default in groff 1.18. o Proofread the manual. o The -w flag to man has been changed to display the name of only the source nroff file. A -W flag has been introduced which displays the name of the cat file as well. If both flags are given to man, it will behave as before. o If bzip2 is installed, pages compressed with bzip2 can now be displayed. o Add support for displaying an additional message when no man page is found, which can be used to direct users to a generic "undocumented" page. o The manual hierarchy layout will now be guessed where possible if an explicit --enable-mandirs argument is not passed to configure. man-db 2.4.0 (26 June 2002) =========================== Major changes since man_db-2.3.20: I have changed the package name to man-db, as the underscore was awkward. Upgrading from version 2.3.x: ----------------------------- The database format has changed slightly, so you will need to run 'mandb --create' after installing the new version to rebuild your databases from scratch. (Distribution packages should do this automatically for system databases.) Fixes: ------ o The GNU nroff test in configure now works when /bin/sh is ash. o When scanning pages for NAME sections, lexgrog and mandb no longer accidentally eat the line after each occurrence of the no-op request '.'. o 'man --local' drops privileges throughout to avoid problems with non-world-readable home directories. o Newly created cat directories are chowned to the man user when running as root. o 'man --html' no longer creates its temporary file with raised privileges, so that it now works with a setuid man. o man detects preprocessors correctly when setuid. o Various segfault fixes: explicitly null-terminate data returned by the Berkeley DB library to avoid some rare crashes; don't reuse a freed pointer in some cases of pages with multiple names; handle MANPATHs containing '::' more safely. o Correctly parse manual pages using DOS line-ending conventions. o Work around a misfeature in Berkeley DB: it pauses for several seconds if asked to read a zero-length database, on the assumption that somebody is still writing the metadata page. man is generally better off just ignoring the database in this case. o Work around corrupted databases in the case where the nextkey pointer chain contains a loop. Improvements: ------------- o man looks in the filesystem followed by the database, rather than the other way round. Unix filesystems are quite good databases for this purpose, and the man database is only superior when looking up names that don't have associated links in the filesystem. o 'apropos --wildcard --exact' makes sure wildcards match an entire description or page name, unlike 'apropos --wildcard' which may match on word boundaries too. o man's page-searching code has been substantially rearranged, and now only starts displaying pages when it has finished searching for candidates. This allows pages to be sorted more sensibly. o Manual pages are formatted in UTF-8 if that is the current locale's character set. The -E option is now available to force a particular encoding. Note that some versions of (e.g.) less have problems displaying UTF-8 in conjunction with backspace characters; groff 1.18 should alleviate this by using ANSI colour escapes instead. o The less prompt string sets -PM as well as -Pm. o Invoking man from within less now sets the correct page title in the inner less. o Unless the --match-case option is used, man will search for pages case-insensitively. o Update the mechanism for setting the line length so that it also works with groff 1.18. o The -R switch is added to the less prompt string, which is needed to display the ANSI colour escapes generated by groff 1.18 correctly. o The $MANLESS environment variable may be used to override the normal creation of the less prompt string. o Translation updates for French, German, and Spanish, and a new Catalan translation. See man/THANKS. man_db-2.3.20 (7 September 2001) ================================ Major changes since man_db-2.3.19: Fixes: ------ o A typo in 2.3.19 caused character sets for many languages to be detected incorrectly. This especially affected multibyte languages. o Long options in the environment variable LESS are handled correctly. o When checking if cat pages need to be updated, check for different timestamps rather than whether the cat page is newer, as otherwise we were confused by tools like tar that preserve timestamps in their archives. Each cat page is now set to have the same mtime as its corresponding man page. o Look up the correct character set each time a page is displayed rather than just the first time, in case pages in several different character sets are viewed in a single session. o groff requests are no longer assumed to be case-insensitive when scanning for preprocessors, so for example mdoc's .Eq request isn't mistaken for the .EQ which introduces eqn commands. o Escape arguments passed to the shell that might contain dangerous characters. o Avoid an infinite loop if the LANGUAGE environment variable is set but empty. o The --create option to mandb now implies --no-purge. o Temporary files are handled with more secure permissions. Improvements: ------------- o Use a variant of mkstemp() rather than tempnam(), to avoid classic race conditions. (I don't believe the races were usefully exploitable.) o Tolerate whatis entries in a database that point to themselves. o Detect more translations of the NAME section. o Add examples of man pages written in POD and SGML. o lexgrog is now installed in /usr/bin by default, with proper argument parsing, an improved output format, and a man page. It is expected to be used by programs that need to validate man pages. o The -H (--html) option to man is now compiled in by default, and supports the BROWSER specification (as documented at http://www.tuxedo.org/~esr/BROWSER/ and amended at http://www.dwheeler.com/browse/secure_browser.html). man_db-2.3.19 (5 July 2001) =========================== Major changes since man_db-2.3.18: Fixes: ------ o The user configuration file ~/.manpath is no longer trusted when deciding whether to drop privileges. In the process, user cat directory handling has been improved. o Commands of the form 'man -S "" foo' formerly emptied the list of acceptable sections and then searched the database anyway, and commands of the form 'man -S ::: foo' segfaulted. Both now use the standard list of sections. o The HUP and TERM signals are now handled better. o straycats processing invokes 'col -bx' rather than 'col-bx'. o The root user is now correctly allowed to update databases in system manpaths. o apropos and whatis no longer enter infinite recursion if a database contains an entry pointing to itself. Improvements: ------------- o When compiled with --enable-setuid, man and mandb can be installed non-setuid. In this mode, they will be unable to write cat pages in system directories or to modify system databases, but will otherwise operate correctly. This allows a single binary package to support setuid and non-setuid modes of operation. o The ordering of manual sections is read from SECTION directives in the configuration file rather than being hard-coded. o The MANDB_MAP configuration file directive is documented more clearly. o Multiple whatis entries separated by commas, break requests, and/or paragraph requests are handled more intelligently. o Fill control requests (.nf and .fi) cause lexgrog to assume a break at each newline. o Duplicate manpath entries (often generated in the course of national language support) are removed, so that 'man -a' works better. o man_db's binaries are installed unstripped by default. o Since supporting certain layouts of manual page hierarchies causes problems for others, the layout is now selectable via configure. The default is to try all layouts. o man only does an on-the-fly update of the database caches when the --update option is given. o Manual pages are displayed with a line length appropriate to the current terminal. If a non-standard line length is used (i.e. the terminal is not between 66 and 80 characters wide) then cat pages will not be saved. o mandb tries to purge obsolete entries from its databases. Using the --create flag should now usually only be necessary in cases of database corruption. man_db-2.3.18 (14 May 2001) =========================== Major changes since man_db-2.3.11: man_db-2.3.18 is an interim release under new maintenance by Colin Watson, merging much of the work done by former maintainers (Graeme Wilford and Fabrizio Polacco). It incorporates several years of changes made in the Debian GNU/Linux distribution's package of man_db. Here are a few highlights, with the names of the maintainers responsible for them. As I am documenting after the fact of other people's changes of a few years ago, I have undoubtedly missed a number of fixes and improvements; I promise to keep track of these as I go along in future. Fixes: ------ o Multiple security fixes, including better handling of temporary files, a format string vulnerability fix, and more careful dropping of privileges when running setuid. [Fabrizio, Colin] o Databases no longer disappear temporarily while they are being regenerated. [Fabrizio] o Corrected handling of locale environment variables. Setting several colon-separated locales in $LANGUAGE also works now. [Colin] o whatis and apropos are more careful about the possibility of a corrupted database. [Fabrizio, Colin] Improvements: ------------- o If root has private manual hierarchies, cat pages generated from them are no longer chowned to a less-privileged user. [Wilf] o Rewrote configuration file handling, adding DEFINE directives to set paths to external programs. The configuration file is now called man_db.conf. [Wilf] o Support FHS paths (/usr/share/man and /var/cache/man) in preference to FSSTND paths (/usr/man and /var/catman). [Fabrizio] o Converted from catgets to GNU gettext for national language support. [Fabrizio, Colin] o Several new and improved localized message catalogues and translated man pages. [Fabrizio, Colin, other contributors] o Added accessdb utility, which displays the contents of a manual page database. [Fabrizio] o Added user configuration file ~/.manpath, with the same syntax as the global configuration file. [Fabrizio] o Leading or trailing colons in the MANPATH environment variable cause the manpath derived from configuration files to be prepended or appended respectively. A double colon in the middle of the environment variable causes the configuration file manpath to be inserted between the colons. [Fabrizio] o Added experimental -H and -Thtml options to take advantage of groff's new HTML driver. [Fabrizio] o lexgrog now scans manual pages to guess which preprocessors are needed. [Fabrizio] o Create cat directories on the fly if necessary. [Fabrizio] o Supply a wrapper which explicitly drops privileges to uid man if man or mandb is run as root. In the future, splitting out setuid functions into a separate helper process may remove the need for this paranoia. [Fabrizio] o Add --test option to mandb, which merely reports errors in manual page hierarchies rather than actually creating or updating a database. [Fabrizio, Colin] o Manual pages may now be symlinks outside the mantree. This should pose no significant security concerns, and utilities such as GNU stow create such symlinks. [Colin] o Deprecate whatis references for man, and display a warning if displaying a page relies on going through a whatis reference. They often lead to confusingly non-obviously-deterministic behaviour, and guaranteeing that man will honour them even when the database is out of date causes performance problems. [Colin] man_db-2.3.11 (21 September 1995) ================================= Major changes since man_db-2.3.10: o The man_db manual is bundled in source form. o Components of $PATH not in the config file were checked for `man' subdirectories. Now they are also checked for `../man'. o Untarring a new manual page (with a timestamp older than the relative cat file) over the original did *not* cause man/catman to reformat the replacement. This is changed. As a side effect, untarring an unchanged man file over the original will also cause a reformat. man_db-2.3.10 (13 July 1995) ============================ Major changes since man_db-2.3.5: Fixes: ------ o Global databases were not owned by setuid owner (if applicable). As a consequence only mandb could update the databases unless man was run by superuser. Stupid bug. o The keyword passed to apropos _never_ matched the first word of any whatis line. o FAVOUR_STRAYCATS code (if enabled), did not work properly. o zsoelim did not work as advertised. Improvements: ------------- o Man removes its temporary files upon abnormal termination. o apropos does proper word matching rather than the fuzzy matching of 2.3.5. eg. supplying any of the keywords: `ld.so', `a.out', `dynamic', `linker' or `loader' will match the following entry: ld.so (8) - a.out dynamic linker/loader whereas `a.out' and `loader' used to fail. o man/whatis/apropos return with exit code 16 if manual page/file or keyword is not matched. Previously exit code 0 was used making it difficult for callers to know if the lookup was successful. o addition of German message catalogue. o `apropos' and `man -k' do POSIX specified regex matching rather than keyword searches if the environment variable POSIXLY_CORRECT is defined. o added glob-only support of native system manual hierarchies on HP-UX, OSF and Solaris operating systems. Improved the whatis parsing code to cope with majority of HP-UX manual pages. o ported to NeXTstep. man_db-2.3.5 (21 April 1995) ============================ Major changes since man_db-2.2.1: Added support for... -------------------- o Non-standard section names i.e. multi-character o Compressed manual pages. A new utility `zsoelim' is included to correctly handle nroff .so requests that point to a file which has been compressed. o Compressed stray cats. By definition, stray cats are not re-creatable as they have no relative source manual page. As they may have non-default compression extensions and may reside on read-only media, stray cats have the same compression support as manual pages. o FSSTND proposed `extension' support. Specific package manual pages may be installed in the standard sections but with a package-unique extension appended as in exit(3tcl) - ../man/man3/exit.3tcl. Using the command `man -e tcl exit' would then display an exit manual page with a tcl extension, if available. Of course, `man 3tcl exit' works as always. o FSSTND proposed NLS man subdirectories. Of the form .../man//man/ o NLS message catalogue hooks. Provision has been made for the programs to emit their messages in a language dependent form. o `whatis' referred manual pages. Some manual pages contain relevant information for commands or programs that would not otherwise reference the page. The `whatis' part of the manual page is used to create virtual links to these pages by all of the names mentioned within it. Examples include names such as `.' and `:' referencing the local shell manual page. o Catman utility. Used to pre-format the manual pages into cat pages. o Operating systems other than Linux. man_db has been reported to compile on the following platforms: Linux, SunOS, Solaris, Ultrix, OSF, HP-UX, AIX, IRIX (although portability does not extend to support of native manual tree structures on some of these systems, eg. HP-UX) o Berkeley DB library routines. This compliments the support of both gdbm and ndbm which already existed. DB databases may be shared across platforms. o $MANOPTS environment variable. The environment variable MANOPTS may be set to any string in command line option/argument format. It is parsed by man(1) prior to its actual command line. o Per manual hierarchy cat directory locations. It is possible to redirect your cat pages to other directories or even other file systems. o Per manual hierarchy nroff/[tg]roff format scripts. Ability to create custom formatter scripts that are called by man(1) to enable format/display of non-standard manual pages or manual pages requiring a special macro package. o Extension of `man -l'. Arguments following -l are interpreted as local files requiring format and display. Extensions are: `man -l -' formats and displays stdin. `man -l foo.1.gz' decompresses, formats and displays foo.1.gz. o Latin1 manual pages/choice of nroff output device. o Viewing of ASCII manual pages formatted for a latin1 output device on a 7 bit ASCII terminal (-7). o Whatis and apropos utilities support regex and wildcard matching. o checkman. Shell script utility that will find and display duplicated manual pages found across manual page hierarchies. o mkcatdirs. Shell script utility to create appropriate cat directories after installation and setup. Conceptual improvements ----------------------- o Replacement of single database with multiple modular db's. Easier integration of additional information into the databases in the future. o Both user and global databases share the same name: `index.' where could be `bt', `db' or `pag' and `dir'. o Databases contain `whatis' text. Makewhatis and text whatis databases are redundant, although whatis and apropos will use the text whatis database for information if they cannot read from a relevant index database. o straycats handled without need for `placeholders'. o Friendly less(1) prompt. If man(1) uses less(1) as its pager (dependent on both static and dynamic factors), the prompt is modified to suit the manual page being displayed. The modification performed is also changeable by the user. o man_db manual. man_db has a manual that covers the setup, maintenance and use of a generic online manual page system. o Modes of operation. The man_db utilities can be compiled with various modes of operation in mind. Eg. man can be stopped from updating databases and/or creating cat files in situations where security is extremely important. See the man_db manual for details. Speed improvements ------------------ o Background compression/saving of cat files. Cat files are compressed and saved in the background, whilst the user is able to browse the formatted page directly. o Merge of straycats and makewhatis into mandb. While mandb has slowed, it now incorporates makewhatis and straycats functionality and is much faster as a whole. 2.0a2 used grep/awk, 2.2 used C regex and 2.3 now uses lex sourced C to strip out the whatis information from the raw man or cat files. o Berkeley DB support. Provides lower database initialisation overhead as compared with gdbm. o Extremely fast whatis(1) searches. whatis(1) uses keyed database lookups to retrieve whatis strings for standard (non regex/wildcard) searches. Fixes ----- o Correct handling of $MANSECT. The environment variable MANSECT is no longer ignored. o Acknowledgement of $MANPATH order. manpath elements are searched in the order specified.