man_db-2.3.20 (7 September 2001)
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.