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/<locale>/man<sec>/
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.<db-type>'
where <db-type> 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.