summaryrefslogtreecommitdiffstats
path: root/NEWS.md
blob: 4547a5d268389f75980549a73a289e2c4dbcb1f9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
man-db 2.11.2 (8 January 2023)
==============================

Fixes:

 * Fix compile and test failures when `troff` is not `groff`.
 * Fix segfault in typical uses of `man` when `nroff` is not installed.
 * Fix crash in `mandb` when processing stray cats.

Improvements:

 * Check for stray cats even if no manual pages in a given manpath were
   changed.

man-db 2.11.1 (15 November 2022)
================================

Build:

 * Transfer Git repository to https://gitlab.com/man-db/man-db.

Fixes:

 * SECURITY: Replace `$` characters in page names with `?` when constructing
   `less` prompts.
 * Silence error message when processing an empty manual page hierarchy with
   a nonexistent cache directory.
 * `man(1)` now sorts whatis references below real pages, even if the whatis
   references are from a section with higher priority.

Improvements:

 * Add section `3type` to the default section list just after `2`.  This is
   used by the Linux man-pages package.
 * Recognize more Hungarian translations of the `NAME` section.

man-db 2.11.0 (15 October 2022)
===============================

Fixes:

 * `mandb` now correctly records filters in the database if it uses cached
   whatis information.
 * Upgrade Gnulib, fixing syntax error on glibc systems with GCC 11.
 * The `CATWIDTH` configuration file directive now overrides `MINCATWIDTH`
   and `MAXCATWIDTH`.
 * Database entries for links were often incorrectly stored as if they were
   entries for the ultimate source of the page.  They are now stored with
   the correct type.
 * Store links in the database using the section and extension of the link
   rather than of the ultimate source file.
 * Consider pages for adding to the database even if they seem to already
   exist; this performance optimization is no longer needed due to caching,
   and it produced inconsistent results in some unusual cases.
 * `man` now runs any required preprocessors in the same order that `groff`
   does, rather than trusting the order of filters in a page's preprocessor
   string.
 * Fix building on MinGW.  (I haven't been able to test this; help from
   MinGW experts would be welcome.)

Improvements:

 * Add more recognized case variants for localized versions of the `NAME`
   section.
 * Maintain multi keys in sorted order, improving database reproducibility.
 * Pick a more consistent name for the target of a whatis entry in the
   database.
 * Extend rules for when to replace one database entry with another,
   producing more stable behaviour.
 * Fully reorganize databases after writing them, allowing the reproduction
   of bitwise-identical databases regardless of scan order (at least with
   GDBM).

man-db 2.10.2 (17 March 2022)
=============================

Build:

 * Regenerating man-db's build system now explicitly requires Automake >=
   1.14.  (This was already the case since at least man-db 2.10.0, but was
   previously undocumented.)

Fixes:

 * Make `man -H` sleep for a few seconds after starting the browser, since
   it may background itself before loading files (Dr. Werner Fink).
 * If an override directory is configured using `--with-override-dir`, it is
   now applied more consistently when building the manpath, and whether a
   page was found in an override directory is considered when sorting
   candidates for display (Mihail Konev).

Improvements:

 * Make the man-db manual build reproducible.
 * Add some hardening options to the `systemd` service.
 * `configure` now has a `--with-snapdir` option, for use on systems where
   `snapd` is configured to use a directory other than `/snap`.

man-db 2.10.1 (10 February 2022)
================================

Fixes:

 * Fix occasional `mandb-symlink-target-timestamp` test failure.
 * Fix inadvertent reliance on a GCC extension that caused build failures
   with Clang.
 * Fix building without `iconv`.
 * Fix building on Cygwin.

man-db 2.10.0 (4 February 2022)
===============================

Build:

 * Move Git repository to GitLab (https://gitlab.com/cjwatson/man-db).
 * Building man-db now requires a C99 compiler.
 * Building man-db now requires Autoconf >= 2.64.

Fixes:

 * Manpath deduplication no longer mishandles the case where another entry
   in the manpath is a suffix of a candidate path to append.
 * Fix potential crash in path searching if `getcwd` fails for reasons other
   than running out of memory.
 * Fix crash in `globbing` test tool if run with no non-option arguments.
 * `lexgrog` now produces output in the user's locale.
 * Downgrade "malformed .lf request" warning to a debug message and rephrase
   it somewhat, since `.lf` requests can use `*roff` arithmetic expressions
   and we can't reasonably parse those.
 * Avoid modifying the database without changing its mtime, which had been
   possible since 2.7.0 if `mandb`'s purge phase found work to do but the
   main phase didn't, and which confused some backup systems into reporting
   possible filesystem corruption.
 * `man` no longer inadvertently modifies the `MANSECT` environment variable
   before passing it on to its subprocesses.
 * `mandb` now stores the mtime of link targets as the mtime of their
   corresponding database entries, rather than sometimes storing the mtime
   of the link instead.
 * Since man-db 2.4.2, `man` has behaved as if the `-l` option was given if
   a manual page argument contains a slash.  Since man-db 2.5.6, this has
   interacted slightly poorly with the subpage feature, emitting spurious
   error messages if given multiple manual page arguments some of which
   include a slash.  `man` no longer emits spurious error messages in this
   case.

Improvements:

 * Reduce overhead of `MAN_DISABLE_SECCOMP=1` compared to building without
   `libseccomp`.
 * Document `MAN_DISABLE_SECCOMP` and `PIPELINE_DEBUG` environment variables
   in `man(1)`.
 * Add `man-pages(7)` reference to `man(1)`.
 * Recognize Arabic and Persian translations of the `NAME` section.
 * Delay the `systemd` timer using `RandomizedDelaySec`, so that multiple
   containers/VMs on the same host are less prone to running `mandb` all at
   the same time.
 * Significantly improve `mandb(8)` and `man -K` performance in the common
   case where pages are of moderate size and compressed using `zlib`: `mandb
   -c` goes from 344 seconds to 10 seconds on a test system.

man-db 2.9.4 (8 February 2021)
==============================

Improvements:

 * Recognise Romanian translations of the NAME section.
 * Treat `\[en]` (etc.) as another synonym for `\-` in NAME sections,
   alongside the existing `\(en` (etc.).

Fixes:

 * Make the `seccomp` sandbox work better with libcs such as `musl` (S.
   Gilles).
 * Make the `seccomp` sandbox allow `clock_gettime64` as well as
   `clock_gettime` (S. Gilles).

man-db 2.9.3 (22 June 2020)
===========================

Fixes:

 * Fix manual page translation infrastructure to compare `po4a` versions
   with more than two components correctly.
 * Avoid incorrect markup in `man(1)` with `po4a >= 0.58`.

man-db 2.9.2 (1 June 2020)
==========================

Fixes:

 * Fix `man -X75-12` and `man -X100-12` to set the document font size (using
   `-rS12`) as well as the device (using `-TX75-12` or `-TX100-12`).
 * Fix incompatibility of `man -X` and friends with the `seccomp` sandbox.

Improvements:

 * Add a bug tracker link to man-db's own manual pages.
 * Add support for `zstd`-compressed manual pages, thanks to Bernhard
   Rosenkränzer.

man-db 2.9.1 (25 February 2020)
===============================

Improvements:

 * Drop `fdutimens` patch for GNU/Hurd; the bug it was working around was
   fixed in glibc 2.28.
 * Add `MANDB_MAP` entry mapping `/snap/man` to `/var/cache/man/snap`.

man-db 2.9.0 (23 October 2019)
==============================

Fixes:

 * `man --recode` and `manconv` now adjust encoding declarations on the
   first line of their input to refer to the new encoding.
 * Fix comparison of candidate manual pages to correctly handle the case
   where the language elements are the same and match the locale, but the
   territory elements differ.

Improvements:

 * Many typographical improvements to man-db's own manual pages, largely
   thanks to Bjarni Ingi Gislason.
 * Rewrite parts of `man(1)` to make it a more accessible introduction.
 * If run with no arguments or only a section, `man` now suggests running
   `man man`.
 * `man` now understands the `<page>(<section>)` form on its command line,
   so for example `man 'chmod(2)'` is now the same as `man 2 chmod`.  While
   this requires more quoting, it may also be more convenient when copying
   and pasting cross-references to manual pages.
 * `manconv` now guesses the input encoding based on the file name if it is
   not explicitly specified.
 * There is a new `man-recode` program.  It fulfils a purpose similar to
   `man --recode`, but has an interface designed for bulk conversion and so
   can be much faster when used on a large number of pages.

Compatibility notes:

 * Remove the ability to undefine `COMP_SRC` at build-time to disable
   reading compressed manual pages.  This was always only a
   micro-optimisation, and it wasn't worth the extra code complexity.  You
   can still configure without any compressors (either by not having them
   available at build time, or by configuring with `--with-gzip=` etc.) to
   achieve much the same practical effect, although the test suite still
   requires at least `gunzip`.

man-db 2.8.7 (26 August 2019)
=============================

Fixes:

 * Further workarounds for ESET File Security: allow `sendmsg` when it is in
   use.
 * The `seccomp` sandbox now causes disallowed system calls to return
   `EPERM` rather than raising `SIGSYS`, in the hope of being less
   disruptive to preload hacks.
 * Make `seccomp` sandbox allow `getrandom`, used by Hardened Malloc.
 * `man` no longer saves cat pages if `--no-hyphenation` or
   `--no-justification` is used.
 * Move decompression code out of `libman`.  This should really fix a link
   failure using the Darwin linker (unsuccessfully attempted in 2.8.6), and
   possibly on other platforms too.
 * Pass the database file name around in function parameters, rather than
   storing it in a global variable with an unresolved symbol from
   `libmandb`.  Like the previous item, this fixes a link failure using the
   Darwin linker, and possibly on other platforms too.
 * Return database entries in sorted order when using NDBM.  (This is based
   on a similar fix to the GDBM backend in man-db 2.4.2.)

Improvements:

 * Recognise Esperanto, Tamil, and Ukrainian translations of the `NAME`
   section.

man-db 2.8.6.1 (5 August 2019)
==============================

Fixes:

 * Fix missing memory copies in `ult_src` that caused segfaults in `mandb`.

man-db 2.8.6 (3 August 2019)
============================

Fixes:

 * If more than one of `../man`, `man`, `../share/man`, and `share/man`
   exist relative to a directory on `$PATH`, then all of them are now added
   to the automatically-determined manpath; previously, only the first was
   considered.
 * Remove arbitrary limit on manpath size.
 * The `systemd` database maintenance service now runs `mandb` with the
   `--quiet` option, avoiding excess log messages.
 * Default to `--without-systemdsystemunitdir` and
   `--without-systemdtmpfilesdir` on non-Linux systems.
 * Fix failure to link `libman` using the Darwin linker.
 * `apropos -w` now works when given a non-lower-case pattern.

Improvements:

 * Convert most list and hash table code to Gnulib's container types: these
   are more flexible and normally more concise than home-grown equivalents.
 * There is a new configure option `--disable-manual`, which causes the
   man-db manual not to be built or installed.

man-db 2.8.5 (5 January 2019)
=============================

Build:

 * Building man-db now requires Autoconf >= 2.63 and Automake >= 1.11.2.

Fixes:

 * Fix build with Berkeley DB.
 * Fail to configure if `flex` is needed but missing.
 * Fix the comment in the first line of the configuration file in the case
   where `configure` was not given a `--with-config-file` option.
 * Fix several resource and memory leaks.
 * Fix handling of `\-` in the right-hand side of a `NAME` section.
 * Work around Microsoft's proprietary "System Center Endpoint Protection"
   antivirus program in the seccomp sandbox.

Improvements:

 * Ship a `systemd` timer to perform daily database maintenance.
 * Allow disabling the installation of the `systemd` `tmpfiles` snippet and
   the `systemd` timer by configuring with `--with-systemdtmpfilesdir=no`
   and `--with-systemdsystemunitdir=no` respectively.

man-db 2.8.4 (27 July 2018)
===========================

Fixes:

 * Rely on decompressors reading from their standard input rather than
   redundantly passing them the input file on their command line.  This
   works better with downstream AppArmor confinement of decompressors.
 * Fix invalid syntax in `tmpfiles.d/man-db.conf` when configured with
   `--disable-cache-owner`.
 * Make `seccomp` sandbox allow `sched_getaffinity`, sometimes used by `xz`.
 * Check for `mandb_nfmt` and `mandb_tfmt` in the manual page hierarchy as
   documented, not in the current directory.  This was broken by the
   working-directory-handling changes in 2.8.3.  Note that this change means
   that `man -l` will never use an external formatter (which was never
   documented behaviour and was surely a bad idea).
 * Make `seccomp` sandbox allow some shared memory operations across the
   board rather than just when ESET File Security is in use; the Astrill VPN
   seems to require something similar, and there are doubtless other such
   preload hacks.
 * Some versions of ESET File Security call `msgget` and `msgsnd`; if this
   program is in use, then allow those.

man-db 2.8.3 (5 April 2018)
===========================

Fixes:

 * Make `seccomp` sandbox allow `madvise`, since that's used by `lbzip2`.
 * Make `seccomp` sandbox allow `kill` and `tgkill` outright, since `groff`
   uses `kill` to pass on signals to its child processes.
 * Make `seccomp` sandbox allow sibling architectures on
   `x86`/`x86_64`/`x32`, since people sometimes mix and match architectures
   there for performance reasons.
 * Fix version check in locale macro loading to tolerate `groff` release
   candidates.
 * `man` now only changes working directory in child processes, so never
   fails due to being unable to change back to its original working
   directory.
 * `accessdb`, `apropos`, and `lexgrog` no longer emit spurious `gettext`
   headers in their `--help` output when localised.

man-db 2.8.2 (28 February 2018)
===============================

Fixes:

 * Make `seccomp` sandbox allow `kill` and `tgkill` when the signal is
   directed at the current process or one of its threads; this is needed by
   `xz`.
 * Make `seccomp` sandbox allow `ioctl(fd, TIOCGWINSZ)`, since that's used
   by `musl`.
 * Work around the proprietary "ESET File Security" antivirus program in
   `seccomp` sandbox: if this is in use then we need to allow some
   socket-related system calls.
 * Work around the `snoopy` `execve()` wrapper and logger in `seccomp`
   sandbox: if this is in use then we need to allow some socket-related
   system calls.
 * Interpret `EFAULT` from `seccomp_load` as meaning that `seccomp` is
   unavailable, since this can be returned by some versions of `qemu-user`.

man-db 2.8.1 (9 February 2018)
==============================

Fixes:

 * Fix `seccomp` sandbox build on Linux/POWER.
 * Fix `manconv` execution under `seccomp` when `man` is installed setuid.
 * Make `seccomp` sandbox allow `mremap` (used by `iconv`, for example).

Improvements:

 * `configure` now has a `--without-libseccomp` option to disable the use of
   `seccomp` even if the library is available.

man-db 2.8.0 (4 February 2018)
==============================

Fixes:

 * Fix locale macro loading for Chinese to load the macro file corresponding
   to just the language part of the user's locale.
 * Honour `--enable-cache-owner` in generated `systemd` `tmpfiles` snippet
   rather than hardcoding `man`.
 * If `man` adds prefixes to a page to handle such things as disabling
   hyphenation, then take account of those when looking for a preprocessor
   line at the start of the page.
 * Fix a segfault in `man -D --help`.

Improvements:

 * Treat `\(en` as another synonym for `\-` in NAME sections.
 * Confine most subprocesses that handle untrusted data using `seccomp`.
   This mainly deals with subprocesses that perform encoding conversions,
   (de)compressors, `groff` programs, and a few other odds and ends.
   `groff` programs use a slightly more permissive filter since they need to
   create temporary files, so additional path-based confinement (e.g. using
   AppArmor) is still useful.

   If this goes wrong, then `MAN_DISABLE_SECCOMP=1` can be set in the
   environment to disable it, but please report any such problem as a bug.

 * `man` now falls back to `cat` if the compile-time default pager is not
   executable.

man-db 2.7.6.1 (12 December 2016)
=================================

Fixes:

 * Don't `chmod` `CACHEDIR.TAG` if it doesn't exist.
 * Correct installation of Swedish manual pages.

man-db 2.7.6 (11 December 2016)
===============================

Fixes:

 * Fix build warnings with Perl 5.22.
 * Document that `man -K` searches page source, not rendered text.
 * Fix a long-standing bug in man-db's internal cleanup stack mechanism: if
   a cleanup function was pushed unexpectedly between a push/pop pair, then
   popping the stack would remove the wrong cleanup function and chaos could
   ensue.  Avoid this by being more precise about which cleanup function
   should be popped.
 * SECURITY: Eliminate dangerous setgid-root directories.  In the default
   configuration, cache files and directories are now owned by `man:man`
   rather than `man:root`; `man` and `mandb` are now setgid `man` as well as
   setuid `man` (except in the `--disable-setuid` case).  This is a much
   simpler and safer solution to the original problem that caused my
   predecessor to make directories setgid `root`, and doesn't introduce any
   interesting new privilege since the `man` group's only real purpose is to
   be the `man` user's primary group and nothing in cache directories is
   group-writeable.

   Maintainers of distribution packages should take care to review their
   installation rules in light of this change.

   As far as I know this has no CVE ID, but it is described
   [here](https://www.halfdog.net/Security/2015/SetgidDirectoryPrivilegeEscalation/).

 * Fix manual page translation infrastructure to render tables correctly
   with `po4a` 0.47.

Improvements:

 * `man` now understands the `<page>.<section>` form on its command line, so
   for example `man chmod.2` is now the same as `man 2 chmod`.  (Contributed
   by Mihail Konev.)
 * The owner of cache files is now configured separately from whether `man`
   and `mandb` are installed setuid, using the `--enable-cache-owner[=USER]`
   option.

man-db 2.7.5 (6 November 2015)
==============================

Fixes:

 * Adjust line number when inserting extra roff input.
 * Disable roff input insertion with `--recode`.
 * Build text manual with `LC_ALL=C`, to help reproducible builds.

man-db 2.7.4 (8 October 2015)
=============================

Fixes:

 * Fix crash when eliminating manpath duplicates if canonicalising a manpath
   entry fails.
 * Fix a build system bug that sometimes caused substitutions in manual
   pages to be left unexpanded.
 * `man` exits with status 3 rather than 0 if its formatting command exits
   non-zero, even if its display command exits zero.
 * `man` honours `MANWIDTH` in conjunction with the `-Z` option, to make it
   easier to diagnose warnings in manual pages.

man-db 2.7.3 (9 September 2015)
===============================

Fixes:

 * Tools that consider the terminal line length now try the `TIOCGWINSZ`
   ioctl on `/dev/tty` as well as standard input/output.
 * `mandb` does a better job of coping with index files having incorrect
   ownership.
 * Squeeze blank lines internally rather than relying on the pager
   supporting the `-s` option.
 * Fix use-after-free in `ult_src`.
 * Fix crash when running from a missing and unreadable current directory,
   such as an orphaned subdirectory of `/proc`.
 * Restore the ability to use `man -a` noninteractively.

man-db 2.7.2 (16 August 2015)
=============================

Fixes:

 * `man -k` and `man -f` now pass any provided `-l` option through to the
   underlying `apropos`/`whatis` programs.
 * `apropos` and `whatis` no longer truncate names if long output was
   requested.
 * The database handle is no longer stored in a global variable, fixing a
   class of possible double-close bugs.

man-db 2.7.1 (7 November 2014)
==============================

Fixes:

 * Various portability fixes for Solaris, contributed by Peter Bray.
 * `man` now runs correctly when its current working directory has been
   deleted.  (As a result of this fix, man-db now requires `libpipeline >=
   1.4.0`.)
 * `man -a` sends its prompts to `/dev/tty` rather than to `stderr`, and
   likewise reads replies from `/dev/tty` rather than from `stdin`.

man-db 2.7.0.2 (28 September 2014)
==================================

Fixes:

 * Be more careful to avoid using or double-closing closed database handles.
   Fixes test suite failures on some systems.
 * Patch the `fdutimens` function imported from Gnulib to work around a
   libc bug in GNU/Hurd.

man-db 2.7.0.1 (24 September 2014)
==================================

Fixes:

 * Fix test suite in the case where the system supports high-precision
   timestamps but the file system containing the build directory does not.

man-db 2.7.0 (22 September 2014)
================================

Upgrading from previous versions:

 * For the first time since version 2.4.0, 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:

 * `lexgrog` now filters terminal escape sequences out of cat pages before
   trying to parse them.
 * Tools that consider the terminal line length now prioritise the `COLUMNS`
   environment variable above the `TIOCGWINSZ` ioctl.
 * Manpath elements are no longer canonicalised before being inserted into
   the search path; this caused the use of incorrect catpaths in some cases.
   This was broken by the `LANGUAGE`-handling fixes in 2.5.4.

Improvements:

 * Ship a `systemd` `tmpfiles` snippet to clean up old cat files after a
   week.
 * The modification time of manual databases is now simply stored in the
   mtime of the database files themselves, rather than using a special row.
   This makes databases reproducible between otherwise-identical
   installations, as long as the underlying database has predictable
   behaviour.  As a bonus, man-db now uses high-precision timestamps to
   determine whether it needs to update databases.
 * Timestamps of manual pages are also now stored in the database with high
   precision and compared accordingly.
 * Files are now ordered by first physical extent before reading them, for
   substantial performance improvements in operations such as `mandb` and
   `man -K`.
 * `man -H` shows a better error message if no browser is configured.
 * `zsoelim` is now installed in `$pkglibexecdir`, to avoid clashes with
   other packages.

man-db 2.6.7.1 (10 April 2014)
==============================

Fixes:

 * Remove test suite dependency on `realpath(1)`.

man-db 2.6.7 (10 April 2014)
============================

Fixes:

 * Fix a test failure when configured with `--enable-undoc`.
 * Run the pager in `man`'s original working directory rather than in the
   manual hierarchy.  (As a result of this fix, man-db now requires
   libpipeline >= 1.3.0.)
 * `mandb` only creates a cache directory tag if the catpath is different
   from the manpath, since it should only be created in directories that
   consist entirely of cached information.

man-db 2.6.6 (23 January 2014)
==============================

man-db is now revision-controlled using git (https://git-scm.com/).  See
`docs/HACKING` for the location of the repository.

Fixes:

 * `apropos`'s `--and` option now works again; it was broken by the
   optimisations in 2.6.2.
 * Restore compatibility with Automake 1.10.
 * Improve support for translation of common elements of help messages.
 * Don't issue error messages when the database refers to a page that no
   longer exists.
 * Pass macro and hyphenation language tags to `groff` again (broken in
   2.6.5).

Improvements:

 * `./configure --with-override-dir=OVERRIDE` arranges to look for manual
   pages in `DIR/OVERRIDE` before each path element `DIR`.

man-db 2.6.5 (27 June 2013)
===========================

Fixes:

 * `man`'s `--warnings` option works again on systems with versions of
   `groff` that support it (broken in 2.6.4).
 * `man` automatically falls back to `C.UTF-8` and then `en_US.UTF-8` if
   trying to find a UTF-8 locale on a system without
   `/usr/share/i18n/SUPPORTED`.

man-db 2.6.4 (23 June 2013)
===========================

Fixes:

 * `man(1)` and `catman(8)` now document the default section list set at
   configure time.
 * Build fixes for Automake 1.13.
 * man-db 2.6.0 arranged to search the full manpath when expanding `.so`
   directives in manual pages (so that `.so name.1` works as well as `.so
   man1/name.1`), but this incorrectly did not take effect for manual pages
   that consist only of a `.so` directive.  This is now fixed.

Improvements:

 * The `MANLESS` environment variable is now treated as if it were a default
   value for the `-r` option to `man`: occurrences of the text `$MAN_PN` are
   expanded, and explicitly using the `-r` option overrides the default.
 * The (unfortunately still hardcoded) maximum length for paths to manual
   page hierarchies in the configuration file is now 511 characters rather
   than 49.
 * `MANPATH` entries now undergo `glob(7)`-style wildcard expansion,
   allowing entries such as `/opt/*/man`.

man-db 2.6.3 (17 September 2012)
================================

Fixes:

 * Build fixes for glibc 2.16 and Automake 1.12.

man-db 2.6.2 (18 June 2012)
===========================

Fixes:

 * `apropos` prints an error message and returns non-zero when it finds no
   matches.  (Regression introduced in 2.5.1.)
 * The presence of a 64-bit GDBM database on the manpath no longer causes a
   32-bit `man` process to exit with a fatal error.

Improvements:

 * `apropos` is much faster when run with many arguments.
 * `whatis` may be given the full path to an executable as an argument, in
   which case it will look up the base name of that executable in the
   appropriate parts of the manpath.

man-db 2.6.1 (14 February 2012)
===============================

Fixes:

 * `--with-db=db*` and `--with-db=ndbm` compile again.
 * Translated manual pages are no longer displayed starting with a spurious
   blank line.
 * `straycats` tries to ensure that `col` is invoked with `LC_CTYPE` set to
   a UTF-8 locale.
 * Fix double-free in `mandb` when encountering a symlink outside the manual
   hierarchy, thanks to Peter Schiffer.

Improvements:

 * `mandb` creates a cache directory tag, per the [Cache Directory Tagging
   Standard](http://www.brynosaurus.com/cachedir/).
 * Add support for Lzip-compressed manual pages, thanks to Matias A. Fonzo.
 * 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)
==============================

Fixes:

 * Fix a segfault when scanning links to empty pages.
 * Once we've seen at least one record in a page's `NAME` section, ignore
   any further records that don't include a `whatis` description, as they
   tend to be noise.

man-db 2.6.0.1 (10 April 2011)
==============================

Fixes:

 * Ensure that the target of a symlink or `.so` chain is always recorded as
   a real page.
 * Read a user-specified configuration file even if `HOME` is unset.

man-db 2.6.0 (9 April 2011)
===========================

Fixes:

 * Fix build with versions of GNU `ld` that default to
   `--no-copy-dt-needed-entries`.
 * Fix failure to display manual pages in some encodings when installed
   setuid.
 * Wrap long table cells in `man(1)`, fixing test failures with `groff`
   1.21.
 * If an explicit section is passed to `man`, then pages that match that
   section exactly will be preferred over pages that only have that section
   as a prefix.
 * Fix a segfault when `man -K` tries to display certain pages.
 * Fix a segfault in some situations when processes are killed by `SIGHUP`,
   `SIGINT`, or `SIGTERM`.

Improvements:

 * As promised in the release notes for man-db 2.5.8, man-db no longer ships
   its own copy of [libpipeline](https://nongnu.org/libpipeline/).  You must
   build and install that library separately.
 * Search the full manpath when expanding `.so` directives in manual pages.
   As part of this, `.so name.1` should now work as well as `.so
   man1/name.1`.
 * `lexgrog` handles roff named glyphs and `perldoc` strings in `NAME`
   sections.
 * `man` no longer starts a pager if standard output is not a tty.
 * The `-s` option to `whatis` and `apropos` now takes a colon- or
   comma-separated list of sections, similar to `man -S`.
 * `mandb` error output is neater when `stderr` is not a terminal.
 * Add basic support for the implementation of `nroff`/`troff` in the
   Heirloom Documentation Tools.  Title lengths are not properly set as yet,
   and many features are untested.
 * `mandb` removes `cat*` and NLS subdirectories of `cat` directories whose
   corresponding `man` directories no longer exist.
 * `mandb` forces `SIGPIPE` back to its default disposition on startup, to
   avoid noisy output in case it was started in a context where `SIGPIPE`
   was ignored.
 * `SECTION` entries in a user configuration file now override those in the
   system configuration file, rather than appending to them.
 * The default `less` prompt now includes "(press h for help or q to quit)"
   to help novices find their way around.
 * man-db may now be built to use Berkeley DB version 5 (`--with-db=db5`).

man-db 2.5.9 (17 November 2010)
===============================

Fixes:

 * Fix test failures on some systems.  A change made in 2.5.8 was overly
   sensitive to directory ordering.
 * Configuring with `--disable-nls` works again.

man-db 2.5.8 (15 November 2010)
===============================

Fixes:

 * Fix assertion failure on `man -l` with an uncompressed page and any of
   `--no-hyphenation`, `--no-justification`, or a non-English page.
 * 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:

 * Add support for XZ-compressed manual pages, thanks to Darren Salt.
 * Try underscore-separated subpages as well as hyphen-separated ones,
   thanks to Tanguy Ortolo.
 * Build `libman` and `libmandb` as shared libraries, reducing installed
   footprint by about 200K (at least on GNU/Linux).
 * `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](https://www.gnu.org/software/gettext/) separately.
 * Warnings about unrecognised locales are now suppressed if the
   `DPKG_RUNNING_VERSION` environment variable is set (i.e. man-db is
   running within a Debian package's maintainer script), since the system
   locales are often out of sync with the C library in that context.  Thanks
   to the Debian Perl maintainers for the idea.
 * Allow building with an external
   [libpipeline](https://nongnu.org/libpipeline/), which has been split out
   from man-db.  This is a transitional measure: a future version of man-db
   will stop shipping its own copy of `libpipeline`.
 * `mandb` should no longer repeatedly rescan manual page hierarchies when a
   `whatis` entry turns into a broken link.

man-db 2.5.7 (16 February 2010)
===============================

Fixes:

 * If a subprocess exits before `man` manages to read all the output from
   it, it now drains the output file descriptor rather than immediately
   discarding it.
 * If `/usr/share/i18n/SUPPORTED` is available, `man` attempts to use it to
   ensure that `LC_CTYPE` is set to an appropriate locale for the selected
   character set when invoking `col`.  This fixes `LANG=C man -E UTF-8`, as
   used by lintian.
 * Don't run tests if cross-compiling.
 * Fix possible `mandb` crash when `MAN_MUST_CREATE` is unset.

Improvements:

 * `man` can now tell `nroff` to disable justification if the
   `--no-justification` option is used.
 * If the full path to an executable is given as an argument, `man` will try
   looking up the corresponding manual page in the appropriate part of the
   manpath, rather than just trying to format the text of the executable as
   a manual page.
 * In the GNU manual hierarchy layout, search `man<sec><ext>` directories as
   well as just `man<sec>` (e.g. `/usr/share/man/man3p` as well as
   `/usr/share/man/man3`).
 * By request, `man` now prefers getting a page from the best manual section
   over getting a page in the correct language.
 * All programs now support a `MAN_DEBUG` environment variable which can be
   used in place of the `-d`/`--debug` option.  This is useful in some
   situations where a program is being called deep in a process tree.
 * man-db now builds with heirloom-doctools, thanks to Diego Pettenò of
   Gentoo.
 * Add support for emulating `pipe()` with `socketpair()`, which is faster
   on some systems; thanks to Werner Fink of SUSE.
 * Cat pages are now always saved in UTF-8, and converted to the proper
   encoding at display time, which means that cat pages can now be saved
   regardless of locale. Note that a consequence of this is that cat pages
   now include formatting information (e.g.  overstriking) and need to be
   run through `col(1)` before display.

man-db 2.5.6 (26 August 2009)
=============================

Fixes:

 * Exact-section database lookups were incorrectly returning all database
   entries whose section names were prefixes of the requested section name.
   In some cases this could confuse `mandb` into never believing that the
   database was up to date.
 * Fix handling of pages with comma-separated names ("foo, bar, baz") in
   their `NAME` sections, broken by a change in 2.5.0 (!) to ignore manual
   page names containing spaces.
 * Fixed a buffer overflow in the pipeline library's line-reading functions.
   I don't believe this to be exploitable: at worst we might believe that
   there's some garbage at the end of manual pages (whose contents are
   untrusted anyway) and this bug typically resulted in a failed assertion
   the next time anything tried to read a line.
 * Plugged two substantial memory leaks in the pipeline library.
 * `whatis` and `apropos` only display any given manual page, or pointers to
   it, once.
 * `man` now sets `less(1)`'s environment up correctly for manual pages
   encoded in CP1251.
 * `manconv` no longer confuses situations such as "this UTF-8 character is
   not representable in the target encoding" with "this text is not in
   UTF-8".

Improvements:

 * The default configuration file now includes section 0, used on some
   systems to document C library header files.
 * `make check` now passes in the presence of a UTF-8-aware `col`, such as
   that in util-linux-ng.
 * The `man -K` option is now supported to search the full text of all
   manual pages.  This was inspired by a similar option in the other `man`
   package (currently at version 1.6f) currently maintained by Federico
   Lucifredi and formerly by Andries Brouwer, but I took advantage of
   man-db's pipeline library to implement it entirely in-process, without
   having to start a separate `grep` process for every manual page.  In my
   tests with fairly typical searches across variously all manual pages or
   just one section, man-db's implementation ran between 3 and 10 times
   faster.
 * Database directories are now only created when there are corresponding
   manual page directories, not just because they're mentioned in the
   configuration file.
 * By default, `man` will now try to interpret pairs of manual page names
   given on the command line as equivalent to a single manual page name
   containing a hyphen (e.g. `man foo bar` => `foo-bar(1)`).  This supports
   the common pattern of programs that implement a number of subcommands,
   allowing them to provide manual pages for each that can be accessed using
   similar syntax as would be used to invoke the subcommands themselves.
   Suggested by H. Peter Anvin, Federico Lucifredi, and others on the git
   mailing list.
 * The build process is now quieter by default.  Use `./configure
   --disable-silent-rules` or `make V=0` if you don't like this or your
   `make(1)` doesn't support the non-standard extension required.
 * `make install` now installs the manual.
 * `manconv` understands a wider range of Emacs-style coding tags.
 * Recommendations to change `MAN_DB_CREATES`, `MAN_DB_UPDATES`, and
   `MAN_CATS` `#define` options in `manconfig.h` have been replaced by new
   `configure` options `--enable-automatic-create`,
   `--disable-automatic-update`, and `--disable-cats` respectively.  Note
   that automatic user database creation is now off by default, as it is
   often too slow for the usefulness it adds; use
   `--enable-automatic-create` to enable it.

man-db 2.5.5 (14 March 2009)
============================

Fixes:

 * Pages that declare a non-default encoding in their preprocessor lines are
   now handled correctly.
 * Fix an uninitialised variable when sorting manual page candidates that
   could lead to excessive memory allocation and possible crashes.

Improvements:

 * 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)
===============================

Fixes:

 * Build fixes for systems without GNU Make, and for systems without
   `gettext`; this successfully covers at least FreeBSD.
 * The `distclean` target now works if `po4a` isn't installed.
 * Exit as soon as possible if database writes return `ENOSPC`.
 * `lexgrog` now stops on any unrecognised roff request, rather than
   continuing and often littering the database with garbage.
 * `man` no longer requires both standard input and standard output to be
   terminals in order to use the terminal line length.  The line length from
   standard output is preferred if available.
 * The manpath was built completely wrongly when multiple entries were
   present in `LANGUAGE`: duplicates were handled strangely, and languages
   were effectively iterated in reverse order.  It should be rather more
   sensible now.

Improvements:

 * The `MAN_KEEP_STDERR` environment variable can now be used to override
   `man`'s default of discarding `stderr` when `stdout` is a terminal.
 * Handling of terminal widths for cat pages is now configurable, using the
   `MINCATWIDTH`, `MAXCATWIDTH`, and `CATWIDTH` configuration file
   directives.
 * `man -a` now detects duplicate manual page candidates more reliably, and
   sorts them better.
 * Belarusian, Estonian, Greek, Latvian, Lithuanian, Macedonian, Romanian,
   Slovenian, and Ukrainian pages are now supported.
 * `man` can now search for pages using regular expressions (with `--regex`)
   or shell wildcards (with `--wildcard`).  By default this searches both
   page names and descriptions, like `apropos`, but if the `--names-only`
   option is used then it searches page names only, like `whatis`.
 * `man` can now tell `nroff` to disable hyphenation if the
   `--no-hyphenation` option is used.
 * 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.
 * 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.
 * 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)
===============================

Fixes:

 * Cleaned up a number of possible crashes, memory leaks, and missing error
   checks found by the Coverity Scan project.
 * Fix build if `MAN_CATS` is undefined.
 * 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.
 * The `LANGUAGE` environment variable is now tokenised properly, rather
   than only taking the first two characters of each element.
 * Fix build if `--disable-nls` is used or `iconv` is not available.
 * `man` now correctly propagates the exit code of `whatis` or `apropos`
   when called with the `-f` or `-k` option respectively.

Improvements:

 * A number of inconsistencies and readability problems with man-db's own
   manual pages have been cleaned up, thanks mainly to Yuri Kozlov.
 * Reduce the number of warnings emitted when using an unrecognised locale.
 * `manconv` and `zsoelim` are now called internally rather than by
   executing external programs, to improve performance.
 * 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.
 * Manual pages may now be compressed with LZMA (although this is probably
   only worth it for very large pages).
 * Duplicate manual page hierarchies due to symlinks (e.g. `/usr/man` ->
   `/usr/share/man`) are detected and removed from the search order.
 * 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.
 * 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)
=========================

Fixes:

 * `man -H` (without a browser argument) was completely broken in 2.5.1 and
   is now fixed.
 * `man` no longer breaks in Japanese locales when using `less` as a pager.

Improvements:

 * 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.
 * Whatis parsing stops at `.ie` or `.if` conditionals.
 * 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.
 * `man(1)`'s `OPTIONS` section is ordered more comprehensibly.
 * `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)
==============================

Fixes:

 * The manual is now built automatically, avoiding some ordering problems on
   `make distclean`.
 * Manual pages are converted to the proper input encoding for `troff`
   output as well as `nroff` output.
 * 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.
 * `apropos` and `whatis` no longer segfault when given an explicit locale
   using `-L`.
 * `man` now understands that `groff`'s `ascii` device takes ASCII input,
   not ISO-8859-1.
 * `man` no longer discards `stderr` when writing to a file or a pipe; this
   was broken by an overenthusiastic change in 2.5.0.
 * `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.
 * `manconv` is more careful about extracting `coding:` directives from
   manual pages.
 * Ctrl-C and Ctrl-\ now work again at the prompt issued by `man -a`.

Improvements:

 * There is a new `--with-sections` `configure` option to change the default
   value of `SECTION` in the configuration file.
 * 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.
 * 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.
 * In the process of switching to Gnulib, the last vestiges of pre-C89
   support have been removed; they were documented to be broken anyway.
 * If the `MANROFFOPT` environment variable is set, `man` now appends its
   value to the `*roff` command line.
 * `man` now accepts a `--recode` option to output a source manual page
   converted to a specified encoding.
 * 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.
 * All programs, except the obsolete `wrapper`, now accept a `--debug`
   option.  (`accessdb`, `lexgrog`, and `zsoelim` were lacking it.)
 * `man` now accepts a `--warnings` option to enable `groff` warnings.

man-db 2.5.0 (7 October 2007)
=============================

Fixes:

 * `mandb --quiet` now suppresses several more warnings.
 * The output of `apropos` no longer includes duplicates when multiple
   search terms are used.

Improvements:

 * 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.
 * 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.
 * 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.
 * 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.
 * 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.
 * `--with-*` options are now available at `configure` time for most of the
   auxiliary program locations that you might want to override.
 * `man` now supports the `MANPAGER` environment variable, overriding
   `PAGER`.
 * `apropos`/`whatis` output is now truncated to the terminal width by
   default.  As with `man`, this may be overridden using the `MANWIDTH`
   environment variable.
 * `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.
 * `man` now discards `stderr` from formatting subprocesses when outputting
   to a pager, to avoid visual corruption from any error messages.
 * 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.
 * Setting `NOCACHE` in the configuration file now prevents `man` from ever
   creating cat pages automatically.
 * `apropos` now accepts the `--and` option to display only items that match
   all the supplied keywords.

man-db 2.4.4 (12 February 2007)
===============================

man-db is now revision-controlled using
[bzr](https://bazaar.canonical.com/).  See `docs/HACKING` for the location
of the archive (including all CVS history, imported by Canonical).

Fixes:

 * 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.
 * Ignore `SIGINT` and `SIGQUIT` while running subprocesses, so that typing
   Ctrl-C doesn't kill `less` (broken in 2.4.3).
 * Similarly, ignore `SIGPIPE` in subprocesses.
 * Various fixes to `SIGCHLD` handling in pipeline library, preventing
   "waitpid failed: No child processes" errors.
 * Skip `exec` in configuration file commands (perhaps left over from old
   installations), which the pipeline execution library cannot handle
   directly.

Improvements:

 * Add support for Chinese in the `--enable-mb-groff` case.
 * `lexgrog` now handles pages with multiple descriptions more usefully, by
   displaying one description per output line.

man-db 2.4.3 (3 July 2005)
==========================

Fixes:

 * Avoid problems creating databases on systems with badly broken clocks set
   before the Unix epoch.
 * 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:

 * `apropos` and `whatis` now accept a `--section` option to restrict their
   search to a particular manual section.
 * The pipeline execution library is now used for most calls to external
   programs, avoiding use of the shell.
 * When `stdout` is not a terminal, man pages will be formatted in plain
   text without the use of backspace or ANSI formatting characters.
 * 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.
 * Improve handling of locales with versions and/or modifiers.
 * Add support for Croatian, Galician, Indonesian, Slovak, and Turkish
   pages.
 * man-db may now be built to use Berkeley DB version 4 (`--with-db=db4`).

Compatibility notes:

 * Setting the line length of manual pages now requires `groff` 1.18 or
   later.

man-db 2.4.2 (20 September 2003)
================================

Fixes:

 * SECURITY: Fix a number of buffer overruns in configuration file handling,
   ultimate source location, and `MANPATH` processing.  This is CVE
   CAN-2003-0620.
 * 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.
 * Make sure to initialize `mandata` structures to zero.  The uses of
   uninitialized memory resulting from this had been leading to random
   segfaults.
 * Drop privileges in order to be able to read pages in non-world-readable
   user manpaths while setuid.
 * `man` can be built with `--disable-setuid` again.
 * `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.
 * 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.
 * Directories found in strange places in manual hierarchies don't crash
   `mandb`.

Improvements:

 * `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.
 * The "undocumented" message is only displayed if a corresponding
   executable is found on the `$PATH`.
 * All programs that read `~/.manpath` now take a `-C` option to cause them
   to read a different user configuration file instead.
 * The `--enable-debug` option to `configure` has been removed.  man-db's
   `Makefile`s now always calculate full dependencies for C files.
 * `mandb` caches the contents of directories, significantly speeding up the
   purging of obsolete entries.
 * `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)
===============================

The man-db CVS repository has moved from sourceforge.net to
savannah.nongnu.org.

Fixes:

 * Don't enter an infinite loop when the `SYSTEM` environment variable is
   set.
 * `man` doesn't segfault when trying to follow a broken symlink.
 * `mandb` no longer corrupts databases when deleting entries that are part
   of multi keys.
 * Prevent a possible buffer overflow when encountering large multi keys.
 * Man page names are escaped when globbing, so `[(1)` can now be found even
   if the database is not up to date.
 * Correct an `access()` check that led to `man -X -l -` producing no
   output.
 * `lexgrog` can now cope with man pages containing only a `.so` link.
 * 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:

 * `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.
 * The default line length for pages formatted for terminal output has been
   increased (reducing margin size) to match the default in `groff` 1.18.
 * Proofread the manual.
 * 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.
 * If `bzip2` is installed, pages compressed with `bzip2` can now be
   displayed.
 * 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.
 * 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)
===========================

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:

 * The GNU `nroff` test in `configure` now works when `/bin/sh` is `ash`.
 * When scanning pages for `NAME` sections, `lexgrog` and `mandb` no longer
   accidentally eat the line after each occurrence of the no-op request `.`.
 * `man --local` drops privileges throughout to avoid problems with
   non-world-readable home directories.
 * Newly created cat directories are `chown`ed to the `man` user when
   running as root.
 * `man --html` no longer creates its temporary file with raised privileges,
   so that it now works with a setuid `man`.
 * `man` detects preprocessors correctly when setuid.
 * 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 `MANPATH`s
   containing `::` more safely.
 * Correctly parse manual pages using DOS line-ending conventions.
 * 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.
 * Work around corrupted databases in the case where the `nextkey` pointer
   chain contains a loop.

Improvements:

 * `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.
 * `apropos --wildcard --exact` makes sure wildcards match an entire
   description or page name, unlike `apropos --wildcard` which may match on
   word boundaries too.
 * `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.
 * 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.
 * The `less` prompt string sets `-PM` as well as `-Pm`.
 * Invoking `man` from within `less` now sets the correct page title in the
   inner `less`.
 * Unless the `--match-case` option is used, `man` will search for pages
   case-insensitively.
 * Update the mechanism for setting the line length so that it also works
   with `groff` 1.18.
 * 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.
 * The `$MANLESS` environment variable may be used to override the normal
   creation of the `less` prompt string.
 * Translation updates for French, German, and Spanish, and a new Catalan
   translation.  See `man/THANKS`.

man\_db-2.3.20 (7 September 2001)
=================================

Fixes:

 * A typo in 2.3.19 caused character sets for many languages to be detected
   incorrectly.  This especially affected multibyte languages.
 * Long options in the environment variable `LESS` are handled correctly.
 * 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.
 * 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.
 * `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.
 * Escape arguments passed to the shell that might contain dangerous
   characters.
 * Avoid an infinite loop if the `LANGUAGE` environment variable is set but
   empty.
 * The `--create` option to `mandb` now implies `--no-purge`.
 * Temporary files are handled with more secure permissions.

Improvements:

 * Use a variant of `mkstemp()` rather than `tempnam()`, to avoid classic
   race conditions.  (I don't believe the races were usefully exploitable.)
 * Tolerate `whatis` entries in a database that point to themselves.
 * Detect more translations of the `NAME` section.
 * Add examples of man pages written in POD and SGML.
 * `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.
 * The `-H` (`--html`) option to `man` is now compiled in by default, and
   supports the BROWSER specification (as
   [documented](http://www.tuxedo.org/~esr/BROWSER/) and
   [amended](https://www.dwheeler.com/browse/secure_browser.html)).

man\_db-2.3.19 (5 July 2001)
============================

Fixes:

 * 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.
 * 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.
 * The `HUP` and `TERM` signals are now handled better.
 * `straycats` processing invokes `col -bx` rather than `col-bx`.
 * The `root` user is now correctly allowed to update databases in system
   manpaths.
 * `apropos` and `whatis` no longer enter infinite recursion if a database
   contains an entry pointing to itself.

Improvements:

 * 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.
 * The ordering of manual sections is read from `SECTION` directives in the
   configuration file rather than being hard-coded.
 * The `MANDB_MAP` configuration file directive is documented more clearly.
 * Multiple `whatis` entries separated by commas, break requests, and/or
   paragraph requests are handled more intelligently.
 * Fill control requests (`.nf` and `.fi`) cause `lexgrog` to assume a break
   at each newline.
 * Duplicate manpath entries (often generated in the course of national
   language support) are removed, so that `man -a` works better.
 * man\_db's binaries are installed unstripped by default.
 * 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.
 * `man` only does an on-the-fly update of the database caches when the
   `--update` option is given.
 * 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.
 * `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)
============================

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:

 * 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]
 * Databases no longer disappear temporarily while they are being
   regenerated.  [Fabrizio]
 * Corrected handling of locale environment variables.  Setting several
   colon-separated locales in `$LANGUAGE` also works now.  [Colin]
 * `whatis` and `apropos` are more careful about the possibility of a
   corrupted database.  [Fabrizio, Colin]

Improvements:

 * If `root` has private manual hierarchies, cat pages generated from them
   are no longer chowned to a less-privileged user.  [Wilf]
 * Rewrote configuration file handling, adding `DEFINE` directives to set
   paths to external programs.  The configuration file is now called
   `man_db.conf`.  [Wilf]
 * Support FHS paths (`/usr/share/man` and `/var/cache/man`) in preference
   to FSSTND paths (`/usr/man` and `/var/catman`).  [Fabrizio]
 * Converted from `catgets` to GNU `gettext` for national language support.
   [Fabrizio, Colin]
 * Several new and improved localized message catalogues and translated man
   pages.  [Fabrizio, Colin, other contributors]
 * Added `accessdb` utility, which displays the contents of a manual page
   database.  [Fabrizio]
 * Added user configuration file `~/.manpath`, with the same syntax as the
   global configuration file.  [Fabrizio]
 * 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]
 * Added experimental `-H` and `-Thtml` options to take advantage of
   `groff`'s new HTML driver.  [Fabrizio]
 * `lexgrog` now scans manual pages to guess which preprocessors are needed.
   [Fabrizio]
 * Create cat directories on the fly if necessary.  [Fabrizio]
 * 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]
 * Add `--test` option to `mandb`, which merely reports errors in manual
   page hierarchies rather than actually creating or updating a database.
   [Fabrizio, Colin]
 * 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]
 * 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)
==================================

 * The man\_db manual is bundled in source form.
 * Components of `$PATH` not in the config file were checked for `man`
   subdirectories.  Now they are also checked for `../man`.
 * 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)
=============================

Fixes:

 * 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.
 * The keyword passed to `apropos` _never_ matched the first word of any
   whatis line.
 * `FAVOUR_STRAYCATS` code (if enabled), did not work properly.
 * `zsoelim` did not work as advertised.

Improvements:

 * `man` removes its temporary files upon abnormal termination.
 * `apropos` does proper word matching rather than the fuzzy matching of
   2.3.5.  E.g. 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.

 * `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.
 * Addition of German message catalogue.
 * `apropos` and `man -k` do POSIX specified regex matching rather than
   keyword searches if the environment variable `POSIXLY_CORRECT` is
   defined.
 * 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.
 * Ported to NeXTstep.

man\_db-2.3.5 (21 April 1995)
=============================

Added support for:

 * Non-standard section names i.e. multi-character

 * Compressed manual pages.

   A new utility `zsoelim` is included to correctly handle `nroff` `.so`
   requests that point to a file which has been compressed.

 * 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.

 * 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.

 * FSSTND proposed NLS man subdirectories of the form
   `.../man/<locale>/man<sec>/`.

 * NLS message catalogue hooks.

   Provision has been made for the programs to emit their messages in a
   language dependent form.

 * `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.

 * `catman` utility, used to pre-format the manual pages into cat pages.

 * 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, e.g. HP-UX).

 * Berkeley DB library routines.

   This complements the support of both `gdbm` and `ndbm` which already
   existed.  DB databases may be shared across platforms.

 * `$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.

 * Per manual hierarchy cat directory locations.

   It is possible to redirect your cat pages to other directories or even
   other file systems.

 * 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.

 * 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`.

 * Latin1 manual pages/choice of `nroff` output device.

 * Viewing of ASCII manual pages formatted for a latin1 output device on a 7
   bit ASCII terminal (`-7`).

 * `whatis` and `apropos` utilities support regex and wildcard matching.

 * `checkman`.

   Shell script utility that will find and display duplicated manual pages
   found across manual page hierarchies.

 * `mkcatdirs`.

   Shell script utility to create appropriate cat directories after
   installation and setup.

Conceptual improvements:

 * Replacement of single database with multiple modular databases.  Easier
   integration of additional information into the databases in the future.

 * Both user and global databases share the same name `index.<db-type>`,
   where `<db-type>` could be `bt`, `db`, or `pag` and `dir`.

 * 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.

 * Straycats handled without need for 'placeholders'.

 * 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.

 * man\_db manual.

   man\_db has a manual that covers the setup, maintenance and use of a
   generic online manual page system.

 * Modes of operation.

   The man\_db utilities can be compiled with various modes of operation in
   mind.  E.g. `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:

 * 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.

 * 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.

 * Berkeley DB support.

   Provides lower database initialisation overhead as compared with `gdbm`.

 * Extremely fast `whatis(1)` searches.

   `whatis(1)` uses keyed database lookups to retrieve whatis strings for
   standard (non regex/wildcard) searches.

Fixes:

 * Correct handling of `$MANSECT`.

   The environment variable `MANSECT` is no longer ignored.

 * Acknowledgement of `$MANPATH` order.

   manpath elements are searched in the order specified.