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.