Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

   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
*** Notes specific to am-utils version 6.2

    - Removed license advertising clause
    - Removed expn program

*** Notes specific to am-utils version 6.2-rc1

Filesystem Support:
    - Add support for NFSv4
    - Add support for Lustre
    - Add support for ext{2,3,4}
    - Add support for linux autofs version 5
    - Add support for TMPFS and UDF
New features:
    - Add amq -i (prints information about maps)
    - Add synchronous unmount code for amq -uu
    - Allow a comma-separated list of LDAP servers for failover
Changes in behavior:
    - Empty variable assignments, now unset the variable value.
    - Share LDAP connections between different maps to save resources
Portability fixes:
    - Changes to work with Linux-2.6.x, Linux-3.x and NetBSD-5.x, NetBSD-6.x,
      FreeBSD 7.x, Solaris
Bug fixes:
    - Many bug fixes, see ChangeLog

*** Notes specific to am-utils version 6.2a3

- minor new ports:
	i386-apple-darwin8.8.1
	i386-pc-linux-centos4.4 (RHEL4 clone)
	i386-pc-linux-fc6 (Fedora Core 6)
	i386-pc-solaris2.11-nexentaos (GNU/OpenSolaris)
	ia64-hp-hpux11.23 (gcc and cc)
	powerpc-apple-darwin8.7.0

- Bugs fixed:
	* reduce annoying warnings from xstrlcpy when expanding options.
	* translate '*' Sun maps correctly with "${key}"

*** Notes specific to am-utils version 6.2a2

New amd.conf global parameter: nfs_allow_any_interface.  By default it is
set to 'no' which means that Amd accepts local NFS packets only from
127.0.0.1.  If set to 'yes' then Amd will accept local NFS packets from any
local interface; this is useful on hosts that may have multiple interfaces
where the system is forced to send all outgoing packets (even those bound to
the same host) via an address other than 127.0.0.1.

Add support for specifying the host to match in the mount selectors netgrp
and netgrpd.  Now one can use either netgrp(<group-name>) or
netgrp(<group-name>,<host-name>).

Support new mount options for type:=pcfs mounts: longname, nowin95,
shortname, user=N, group=N, mask=N, and dirmask=N.

Two new amd.conf [global] parameters: nfs_retry_interval_toplvl and
nfs_retransmit_counter_toplvl.  They are similar to nfs_retry_interval and
nfs_retransmit_counter, and allow you to set the "timeo" and "retrans" NFS
mount parameters, respectively, but ONLY for Amd's top-level mounts (which
are NFSv2/UDP currently).  This is useful because on some systems you may
wish to set these parameters differently than the OS default, so as to
better tune Amd's responsiveness under heavy scheduler loads.

- minor new ports:
	i386-pc-linux-fc5 (Fedora Core 5)
	i386-pc-linux-suse10.1 (beta 8)
	i386-unknown-freebsd6.0 (RELEASE)
	i386-unknown-freebsd6.1 (RELEASE)
	i386-unknown-netbsdelf2.1
	i386-unknown-netbsdelf3.0 (RELEASE)
	i386-unknown-openbsd3.8
	i386-unknown-openbsd3.9
	powerpc-apple-darwin8.5.0
	powerpc-apple-darwin8.6.0

- Bugs fixed:
	* one serious memory leak in amfs_generic (caught by Coverity)
	* assorted potential (but rare) NULL pointer dereferences (Coverity)
	* correctly print nfs_args->addr info (sin_family/port/addr)
	* pawd should resolve path repeatedly until no more to do
	* handle old-style filehandles correctly (for mount points longer
	  than 28 chars)
	* use-after-free bug in amfs_lookup_mntfs (Coverity)
	* don't turn off attribute cache for regular NFS mounts (improves
	  performance)
	* detect G/DBM support via gdbm_compat library (Debian)
	* detect NDBM support in libc (FreeBSD 6)

*** Notes specific to am-utils version 6.2a1

MAJOR BUG FIXES: Synchronize Amd's view of its file systems with the
kernel's NFS client-side DNLC/dcache.  Amd changes its view when it reloads
maps (automatically or via "amq -f") because new map entries could be added,
old one removed, or existing ones changed.  Amd also changes its view when a
simple entry has expired and was flushed, or was forced out via "amq -u".
Amd was not updating the mtime of its parent directory (often the amd
automount point): this resulted in the kernel re-using cached entries, which
are now possibly stale.  Many users had seen this problem in the form of
occasional ESTALE errors, or dangling/broken automounted symlinks,
especially on systems under heavy use.  To tell the kernel to ignore (flush)
its old entries for an directory, the mtime of the directory must be updated
(monotonically incremented).  Amd was indeed doing so in several places, but
unfortunately it was using time(2) which only provides a one-second
resolution clock: this was fine a decade ago, but not good enough on today's
fast systems; using only a one-second resolution clock meant that on busy
systems that invoke Amd many times a second, some rapidly changing entries
do not get flushed from the kernel, and the kernel thus uses stale entries.
The solution to all of these was to rework the whole clock timer updates to
use gettimeofday(), using a micro-second resolution timer, and to use that
time whenever Amd needs to update an mtime/atime/ctime of any node.
Finally, we now update the mtime in places that were never updated before
(when a whole map is flushed or a single entry times out).

Warning: some OSs, we discovered, are incapable of turning off their
NFS attribute cache entirely.  This means that Amd cannot work fully
reliability on these systems, not under heavy load.  This is documented in
detail in the README.attrcache file included with this distribution.

Include test-attrcache script to test the NFS attribute cache behavior using
Amd.

Tell syslog not to log automatically to /dev/console; it's unfriendly.  If
user really wants to, they can set it in /etc/syslog.conf.

Moved pawd's path-matching functionality into Amd, where it can be done a
lot more efficiently (we no longer need to construct and send the whole
mounted tree, only to match small parts of it).  This will lessen the CPU
and network load on systems that use pawd heavily, and also minimize the
chance that we exceed default or hard-coded UDP/TCP RPC packet sizes.

Changed slightly how Amd behaves when you try to change log_options after
Amd started (options can be turned on/off via "amq -x ARG").  It used to be
that Amd won't let you turn off options which were on when Amd started.
That limited users' ability to reduce Amd's logging levels to a minimum.
Now, Amd will allow you to turn on/off any option, other than the two
options "fatal" and "error."  Both are on by default and considered
mandatory.  These two don't produce a lot of log messages, so your logs will
remain small, but they are important to keep on, so Amd can report serious
problems (including errors relating to incorrectly setting other log
options).

Amd now understands a new log_option called "defaults" which is synonymous
with "fatal,error,user,warning,info" (and is also what logging happens by
default).

Amd now understands a new debug_option called "defaults" which is synonymous
with "all,nohrtime,nomtab,noxdrtrace".

Changed the misleading inverted logic of certain debug_options:

1. "xdrtrace" is included in "all" because "all" (as the name implies),
   should be *all* options, not just a subset.  If you want the old behavior
   of "all" then use "defaults" (all only adds "xdrtrace" which can be
   chatty on some systems).

2. Certain debug options are hereby declared immutable: they may not be
   changed by "amq -D" after Amd starts, because it doesn't make much sense
   to change them after Amd starts, and it could really mess up Amd.  These
   immutable flags are currently "daemon," "fork," "amq," and "mtab."

3. the debug option "daemon" *will* cause Amd to daemonize.  Before, it was
   causing Amd NOT to daemonize.  This was greatly confusing, especially
   since the code, documentation, and comments often conflicted with each
   other.  If you don't want Amd to daemonize, which is useful for debugging
   it, then use the debug option "nodaemon" -- it makes a lot more sense.

4. Similarly, the "fork" option *will* cause Hlfsd to fork.  Use "nofork" if
   you don't want Hlfsd to fork.  This option is only applicable to Hlfsd.

5. Similarly, the "amq" option, which is now on by default, will cause Amd
   to register itself with the RPC portmapper (for Amq), as is done
   normally.  If you don't want Amd to register with the portmapper, use
   "noamq" -- this naming convention makes more sense.  This was also
   confusingly documented and coded in places.

   Note: unfortunately, these changes to the "daemon," "fork," and "amq"
   debug options may be incompatible with people's previous use of Amd.
   Some of you may have to update your amd.conf slightly or your startup
   options (if they're hard-coded in your amd startup script).  Sorry, but
   we have to fix those old problems sooner or later.  However, if you never
   set any debug_options, or you used to "all," then you won't be affected
   by the change in meaning of these three flags.

- minor new ports:
	i386-pc-linux-deb3.1
	i386-unknown-netbsdelf3.0 (BETA)
	powerpc-apple-darwin8.2.0

- Bugs fixed:
	* abort with an error if yacc/lex programs not found
	* properly turn off the attrcache in freebsd and openbsd
	* can turn off attrcache on netbsd, but need kernel patch, see
	  README.attrcache
	* pawd goes into an infinite loop on type:=auto
	* consistent search for file system mnttab/mount names
	* convert all sprintf to safer xsnprintf
	* convert all strcat to safer xstrlcat
	* convert all strcpy to safer xstrlcpy
	* fix three buffer overruns in expand_op (amd/opts.c)
	* pawd was trying UDP only, now try TCP if UDP failed

*** Notes specific to am-utils version 6.1.1

New amd.conf global parameter: forced_unmounts (default to "no").  If set to
"yes," and the client OS supports forced or lazy unmounts, then Amd will
attempt to use them if it gets any of three serious error conditions when
trying to unmount an existing mount point or mount on top of one: EIO,
ESTALE, or EBUSY.  This could be useful to recover from serious conditions
such as hardware failure of mounted disks, or NFS servers which are down
permanently, were migrated, or changed their IP address.  Only
"type:=toplvl" mounts hung with EBUSY are forcibly unmounted using this
option: this is useful to ensure that a new Amd can mount itself even if a
previous Amd died and left its mount points hung, or to force Amd to
shutdown cleanly, even if some processes (i.e., user shells) have their CWD
on Amd's own mount point.  This functionality is available for Linux, BSD44
systems, Solaris, OSF/1, and partially for AIX.

New amd.conf global parameter: truncate_log (default to "no").  If set to
"yes", then Amd will truncate the log file (if it's a regular file) on
startup.  This could be useful when conducting extensive testing on Amd maps
(or Amd itself) and you don't want to see log data from a previous run in
the same file.

- minor new ports:
	i386-pc-linux-fc4
	i386-pc-linux-suse9.3
	i386-pc-linuxoldld-deb3.1

- bugs fixed:
	* safer mtab handling for Linux (locks + handles /proc/mounts)
	* small compile problems on Solaris 6 (rpcvers_t)
	* small compile problems on HPUX 10 (h_errno)
	* possibly missing definition of INADDR_NONE in wire.c
	* extern for sleep(3) may be missing on older gcc systems
	* updated nfs_args structure on aix4.
	* possible running off end of exported_ap[] array.
	* buffer overflow in pawd.
	* aix4 clean build.
	* use strlcat/snprintf in a few places for safety.
	* recover from IP address change of a down NFS server
	* don't discard restarted mntfs that was used.

*** Notes specific to am-utils version 6.1

- bugs fixed:
	* set timeo/retrans for type:=nfs only if user asked

Also, if you want to know what's new in 6.1 compared to 6.0.x, it's
EVERYTHING below this line, up to "6.0.4."  Yes, that's a lot of stuff.

*** Notes specific to am-utils version 6.1-rc7

Remove alloca from am-utils, and rewrite code that used it.

Assorted minor code cleanups.

- minor new ports:
	alpha-unknown-linux-gentoo1.4.16
	alphaev56-dec-osf4.0f (using both cc and gcc)
	mips-sgi-irix6.5 (using both cc and gcc)
	mips-unknown-linux-gentoo1.4.16
	sparc64-unknown-linux-gentoo1.4.16

- bugs fixed:
	* getwire() detects networks correctly on OSF/1

*** Notes specific to am-utils version 6.1-rc6

- minor new ports:
	i386-pc-linux-deb3.0
	i386-pc-linux-gentoo1.4.16
	i386-pc-linux-suse9.2
	i386-unknown-freebsd5.4
	i386-unknown-netbsdelf2.0.2
	i386-unknown-openbsd3.7
	powerpc-unknown-linux-yellowdog2.3

- bugs fixed:
	* minor compile error of nfs_subr.c on some systems.
	* AIX 5.2/5.3 PPC compile fixes.

*** Notes specific to am-utils version 6.1-rc5

For NetBSD systems, $os used to say "netbsdelf1" or "netbsdelf2."  Now it
just says "netbsd."

- minor new ports:
	powerpc-apple-darwin7.9.0

- bugs fixed:
	* silly (but nasty) null pointer dereferencing
	* improved fix for '-opts' syntax for resetting map options

*** Notes specific to am-utils version 6.1-rc4

- bugs fixed:
	* check for "macosx" in M4 macros properly
	* minor memory leaks (thanks to Valgrind)

*** Notes specific to am-utils version 6.1-rc3

Minor fix to configure.in.  Reran bootstrap to get a working configure
script that indeed checks for certain Linux nfs/autofs headers.

*** Notes specific to am-utils version 6.1-rc2

New amd.conf global parameter: normalize_slashes (default to "yes").  If set
to "no," then Amd will not condense repeated slashes or remove trailing ones
from strings representing pathnames.  This is sometimes useful with SMB
mounts, which often require multiple slash characters in pathnames.

Using a custom version of strlcpy instead of strncpy (but only where it
makes sense), to minimize string overflow changes.  Audited all use of
strncpy/strlcpy to ensure safety.

On Apple machines, use "powerpc" for $arch, instead of "Power Macintosh".
Also, use sw_vers to find out more appropriate OS name (macosx) and OS
version (10.3.x) than uname(3) reports.

- minor new ports:
	powerpc64-unknown-linux-rhel4
	powerpc64-unknown-linux-sles9

- bugs fixed:
	* pawd handles all file systems
	* fix double-free in type:=nfsx
	* timeo and retrans shouldn't be set for type:=toplvl
	* fix inconsistency in handling filehandle generation number
	* document proper use of hosts.allow (don't spawn)
	* single dash '-' map entry now resets the defaults

*** Notes specific to am-utils version 6.1-rc1

- minor new ports:
	i386-pc-linux-fc2 (Fedora Core 2).
	i386-pc-linux-fc3 (Fedora Core 3).
	i386-pc-linux-rhel3
	i386-pc-linux-rhel4
	i386-pc-linux-suse8.2
	i386-pc-linux-suse9.1
	i386-pc-solaris2.10
	i386-unknown-freebsd4.8
	i386-unknown-freebsd4.9
	i386-unknown-freebsd4.10
	i386-unknown-freebsd4.11
	i386-unknown-freebsd5.1 (5.1-RELEASE)
	i386-unknown-freebsd5.2 (5.2-RELEASE)
	i386-unknown-freebsd5.2.1 (5.2.1-RELEASE)
	i386-unknown-freebsd5.3 (5.3-RELEASE)
	i386-unknown-freebsd6.0 (6.0-CURRENT-SNAP001)
	i386-unknown-netbsdelf1.6.1
	i386-unknown-netbsdelf2.0
	i386-unknown-openbsd3.6
	ia64-hp-hpux11.20
	ia64-unknown-linux-rhel4
	mipsel-unknown-linux-rhPS2 (Linux on Sony PlayStation 2)
	powerpc-apple-darwin7.6.0
	powerpc-apple-darwin7.7.0
	powerpc-apple-darwin7.8.0
	powerpc-ibm-aix5.2.0.0
	powerpc-ibm-aix5.3.0.0
	sparc-sun-solaris2.10
	sparc64-unknown-linux-deb3.0
	x86_64-unknown-linux-rh2.9.5AS

- support for executable maps ala Sun automounter.  Set map_type=exec in
  amd.conf, and map_name to a program/script that takes a key as argv[1],
  and returns key-value pair on stdout.  See also exec_map_timeout [global]
  parameter which defines how many seconds (default 10 sec) Amd will wait
  for an executable map program to return output before timing out.  See
  am-utils manual for full details.

- new amd.conf parameter "nfs_allow_insecure_port".  Used to work around
  bugs in certain kernels, which cause them to try and talk to amd from
  unprivileged ports.

- new amd.conf parameter: localhost_address.  Used to override the localhost
  (often 127.0.0.1) address Amd uses to connect to for the local NFS server
  and RPC server.

- new amd.conf [global] parameter: domain_strip (default "yes").  If set to
  "no," Amd won't strip domain names from host names, which is useful if
  your Amd maps are served by multiple domains and you want to tell from the
  logs which exact host did what.

- new amd.conf [global] parameter: auto_attrcache (default to 0).  Sets
  Amd's own NFS attribute-cache timeout in seconds.  A value of 0 turns off
  attribute caching, meaning that Amd will be consulted via a kernel-RPC
  each time someone stat's the mount point (which could be abused as a
  denial-of-service attack).  If you're concerned, set this to something
  greater than zero (a value of 1 second is currently recommended).
  Warning: if you set this option to any non-zero value, especially a large
  value, and you get ESTALE errors on your particular OS, then set this
  value back to 0 seconds.

- four new amd.conf [global] parameters, similar to nfs_retry_interval and
  nfs_retransmit_counter, which allow you to set the "timeo" and "retrans"
  NFS mount parameters, respectively.  Now you can set those parameters
  globally and separately for UDP vs. TCP, using any of these:
  nfs_retry_interval_udp, nfs_retransmit_counter_udp nfs_retry_interval_tcp,
  and nfs_retransmit_counter_tcp.

- new amd.conf [global] parameter: preferred_amq_port.  Allows you to select
  the UDP+TCP port that Amd's amq service will use with the RPC portmapper.
  Useful with firewalls and NAT'ed environments.

- new amd.conf option "debug_mtab_file".  Allows user to define the mtab
  file during debug-mtab mode.  The default path is "/tmp/mtab".

- new function selector xhost(ARG) which will match ARG against the current
  host name.  This works even if ARG is a CNAME (unlike the host==ARG
  selector).

- support restarting the automounter's own mount points (only over NFS,
  for now).

- fully support WebNFS as per RFC 2054.  It now tries v3/TCP first, falling
  back to v2/UDP if this doesn't work.  The "webnfs" pseudo-mount options
  has been renamed (again) to "public" to match Solaris 2.

- restructured the restarting of already-mounted filesystems, in the process
  also fixing a problem with restarting nfsx components.

- support escaped slashes, needed for SMB mounts.  Use '\\\/\\\/' in a
  string to get a double slash.

- amd -v now prints domain, host, and hostd values: foo, example.com, and
  foo.example.com, respectively.

- On Linux, if umount(2) failed with EIO or ESTALE, try the new umount2(2)
  system call with MNT_FORCE+MNT_DETACH.  This could be quite helpful to
  unmounting hung mount points that otherwise cannot be fixed without a
  reboot.

- The ping=N mount option now works.  N defaults to 30 seconds for all NFS
  servers.  It can now be set to any value for each server separately.
  Setting it to a large value can reduce the amount of NFS_NULL chatter on
  your network considerably, especially in large sites.  Setting this to -1
  will turn off pings for that server (useful in NFS-HA setups).  Setting N
  to 0 will pick the default ping value in Amd (currently 30 seconds).  Note
  that if you have multiple Amd entries using the same file server, and each
  entry sets a different value of N, then each time Amd mounts a new entry,
  the ping value will be re-evaluated (and updated, turned off, or turned
  back on as needed).  Note that NFS_NULL pings are sent for both UDP and
  TCP mounts, because even a hung TCP mount can cause user processes to
  hang.

- file system inheritance code restructured, so it's no longer a pseudo file
  system, but actually integrated into Amd (as it should have been).

- for type:=program, the "umount" program doesn't have to be defined; it'll
  default to "unmount ${fs}".

- "amd -v" now prints the distribution name if it's known (e.g., rh9, fc3,
  suse8, etc.).

- bugs fixed:
	* various memory management problems (leaks, etc)
	* fixed nfsx support
	* fixed a race involving late replies to network queries which
	  arrive after the file system has already been mounted
	* recognize pcfs_args_t fields in FreeBSD 5
	* recognize other mount types in pawd: host, linkx, and nfsx
	* allow exactly one of umount and unmount in type:=program
	* race condition between calls to mntctl() on AIX
	* plock/mlockall wasn't inherited by fork(); moved after
	  daemonizing.
	* fix inconsistency between Socket and TLI RPC timeouts.
	* don't warn when couldn't rmdir a dir with a readonly ancestor.
	* avoid hangs of amd in ctl-amd (must chdir to /)
	* workaround occasional daemonizing problems (parent won't die)
	* don't hang on exit if debug_options=mtab was used
	* utimeout=N mount option works with non-nfs types (ufs, pcfs, etc.)
	* SEGV (null pointer deref) in type:=program and type:=cachefs
	* unmount_on_exit of type:=program caused amd to hang
	* match amd2ldif output with ldap.schema

*** Notes specific to am-utils version 6.1b4

- minor new ports:
	i686-apple-darwin6.6

- speed up the recovery of inherited (restarted) filesystems by using the
  proper waiting channels

- added support for mounting webnfs filesystems, see entry below. It doesn't
  do any probing currently, so it will default to v2/UDP unless another
  version and/or protocol are explicitly specified.

- pseudo-mount option "ignore_portmapper" renamed to "webnfs"

- bugs fixed:
	* properly time out autofs filesystems on Linux
	* link mounts with relative targets weren't working on autofs
	* the link side of the nfsl file system wasn't working on autofs
	* umount code was accidentally turning all symlinks into directories
	  during attempted umounts, causing stale filehandles
	* various minor build fixes for "impossible" configurations
	* prevent ldap code from dereferencing a null pointer

*** Notes specific to am-utils version 6.1b3

- new amd.conf option autofs_use_lofs, set by default to "yes".  "yes" means
  using in-place mounts (lofs, bind mounts, etc.), thus utilizing one of
  Autofs's main advantages.  "no" means using symlinks instead, which has
  the "/bin/pwd" problem and certain efficiency issues on Solaris 2.6+ and
  is also not supported on Solaris Autofs v1 and derivatives; however, the
  autofs code that uses symlinks is simpler and more thoroughly tested.

- new amd.conf option map_default (can be used in [global] and overwritten
  in the per-map section).  This will overwrite the /defaults entry of the
  map itself, to allow people to set defaults in amd.conf (useful when you
  cannot control your amd maps, or you'd rather not modify them globally).

- for type:=program, you can use either unmount:=XXX or umount:=XXX (but not
  both).  This new 'unmount' name is an alias for convenience.

- fixed the "multiple matching sub-entries in a map entry" semantics to try
  mounting those sub-entries one by one, until either one succeeds or all
  fail.  The old semantics of trying to mount everything in parallel and use
  the one that mounted fastest hasn't worked in a long time; in fact, 6.0
  currently simply ignores all but the first matching sub-entry.

- made amd fail much faster (instantly, in fact) if the remote server
  doesn't have a functional portmapper or NFS service.  Also reduced the
  total timeout to 3 seconds for a completely downed server.

- new pseudo-mount option "ignore_portmapper"; not very useful currently,
  will make more sense when we also accept hard-coded ports for mountd and
  nfsd.

- amd will no longer query the portmapper for all possible NFS versions and
  protocols if the user requested to use specific ones.

- increased the major number for the library, so that 6.0 and 6.1 can't
  share libraries anymore.

- support tcpd/libwrap tcpwrappers.  If your system supports libwrap, then
  you can use /etc/hosts.allow and /etc/hosts.deny to control remote Amq
  access to Amd.  The new amd.conf parameter use_tcpwrappers is set to "yes"
  by default.

- support NULL entries in Hesiod maps, if they start with a ".".

- code reorganization

- documentation cleanup, corrections, and general updates.  Better
  references to all man pages.  Support newer texi2html.  Proper building of
  DVI and PSI files.  Allow building of am-utils manual in one long Web
  page.

- minor new ports:

	ia64-unknown-linux-rh2.1AS (Red Hat Itanium Advanced Server)
	i386-unknown-freebsd5.0 (5.0-RELEASE)
	sparc64-unknown-linux-suse7.3
	i386-unknown-netbsdelf1.6.1
	i386-unknown-openbsd3.3
	i386-pc-solaris2.9

- bugs fixed:

	* autofs mode on Linux was segfaulting on a silly error (and noone
	  complained, which proves that I'm probably the only one testing
	  these beta releases, tsk tsk).
	* fixed handling of host entries over autofs.
	* fixed handling of nfsl entries over autofs.
	* the matching in find_mntfs() was causing problems for inherited
	  filesystems, so make an exception for them. Tighten the
	  matching even more, to take into account the f/s type as well.
	* recognize xlatecookie mnttab option on netbsd
	* document Solaris lex bug (use flex)
	* document AIX 5.x NFS bug (need patch)
	* document Solaris 8 autofs version change (need to fix system
	  header file)
	* ensure lex doesn't run out of output slots
	* support GNU flex-2.5.31+
	* force version.texi to be rebuilt unconditionally
	* mk-amd-map open db file exclusively (security)
	* turn off maintainer-only rules in distros
	* don't core dump if log_file is NULL (Solaris)
	* don't include malloc.h if stdlib.h exists
	* recognize file system failures (EIO) upon reading file maps

*** Notes specific to am-utils version 6.1b2

- new mount flag "softlookup", which determines how amd will respond to
  lookups of NFS shares already mounted (return a valid symlink or return
  EIO). The default, if "softlookup" is not specified, depends on whether the
  mount is "soft" or "hard".

- return EIO instead of ENOENT if amd thinks the server is down; this allows
  well-written applications to sleep and retry the operation.

- minor new ports:

	i386-apple-darwin6.0
	i386-pc-linux-rh8.0
	ia64-unknown-linux-rh2.1AW
	sparc-sun-solaris2.9

- automatic support for loop mounts on Linux (deprecates the "loop" mount
  option)

- new amd.conf parameter ldap_proto_version (default 2) for setting the LDAP
  protocol version to use.

- bugs fixed:

	* redundancy mode (multiple servers for the same share) wasn't working
	* non-autofs mode had some rather nasty hangs on downed file servers
	* double-free'ing problem in assign_error_mntfs and free_continuation
	* free'ing non-malloc'ed memory in amfs_auto_mount
	* late server ping replies were not ignored
	* amfs_auto_lookup_mntfs wasn't propagating errors up to callers
	* autofs-v4 on Solaris 9 works
	* handle std{in,out,err} correctly when releasing controlling tty
	  (for real this time)
	* don't cast pointers between enum_t and u_long, it doesn't work on
	  64-bit big-endian platforms
	* fix compile problem with mlockall() on Darwin

*** Notes specific to am-utils version 6.1b1

- Major Autofs work
	Partial support for Sun Autofs v1
	Documented known problems with Sun Autofs v1 (possible deadlocks)
	Fixes for Sun Autofs v2/v3
	Preliminary support for Sun Autofs v4 (Solaris 9)
	Kernel-based expirations for Linux Autofs

- Minor new ports:
	powerpc-ibm-aix5.1.0.0
	i386-unknown-netbsd1.6A

- Work around IBM's NFSv3 ABI change in aix4.3

- trivial regression test suite started: run "make check" on a built
  am-utils to execute tests.  Currently only one test which checks to see if
  "amd -v" executes correctly.

- new command line option "amd -A arch" to overwrite the value of $arch.

- bugs fixed:

	* Linux loop mounts of ISO images
	* assorted LDAP fixes
	* strerror not found on some systems
	* small fixes for hpux9 and aix43
	* exclude ldap/hesiod support unless both libraries+headers exist
	* fully support "xlatecookie" mount option
	* security: if -D noamq option, don't listen on socket.

*** Notes specific to am-utils version 6.1a5:

- browsable_dirs support for Solaris autofs, *without* mount storms!

- new amd.conf global parameter: map_reload_interval (default 1 hour).
  Determines how often Amd checks to see if maps have changed at the source
  (and then reloading only those that have changed).

- "amd -v" now lists bug-reporting address.

- assorted code cleanups and porting to use latest versions of GNU
  Autotools.

- opts:=loop works for type:=cdfs, for mounting ISO-9660 files on Linux.

- bugs fixed:

	* fixed sublink support in Linux autofs (broken in a4)
	* hlfsd takes uid 0's home from root's passwd entry instead of
	  defaulting to '/'
	* (not really our bug) Linux ignores the microseconds field in
	  mtime, so hlfsd and amd need to increment the seconds field all
	  the time to prevent symlink caching
	* generic map parsing bug which was rejecting a numerical mount
	  option if it was the last option in the string.
	* file descriptor leak in Linux autofs.
	* "nolock" is an NFS mount option, not a generic one.
	* use mlockall(2) on systems that have it, for plock=yes.  Now
	  pinning Amd's pages in memory works on Linux.
	* ctl-amd/ctl-hlfsd correctly refer to @sysconfdir@ for alternate
	  location of configuration files.

*** Notes specific to am-utils version 6.1a4:

- full autofs support for Solaris 2.[67], including symlinks, sublinks and
  direct mounts

- fixed mount/umount deadlock in Linux autofs

- fixed sublinks in Linux autofs

- support for network/netmask pairs in the in_network() selector

- support disabling LDAP and Hesiod support using configure

- forward-ported all the fixes from the stable branch (MacOS X support,
  minor Linux fixes)

- bind-mount support for type==link and type==lofs with Linux 2.4+

- FiST lofs support under Linux (also in 6.0.6s2)

*** Notes specific to am-utils version 6.1a3:

- various things from the 6.0 branch:
	compile fixes for Linux 2.4-ac and 2.2.19pre+
	Darwin/Rhapsody/OS X support
	much reduced configure script (works around a bug in Darwin's cpp)

*** Notes specific to am-utils version 6.1a2:

- working autofs support for Solaris 2.[67], but incomplete

- forward-ported all the changes up to 6.0.5s2

- removed support for amq -M

- known bugs
	nfsx support is broken
	linux NFS codes fixes
	NFS cache aliasing fixes
	lots of stuff ported from 6.0 branch

*** Notes specific to am-utils version 6.1a1:

- working autofs (v3 and v4) support for Linux!

- forward-ported all the changes in 6.0.4s4

- bugs fixed
	client-side fail-over to NFSv2/UDP

- known bugs
	autofs v3 will probably break with host maps

*** Notes specific to am-utils version 6.0.4:

- NFSv3 support for Linux and HPUX-11

- new amd.conf [global] options:
	nfs_vers: force all NFS mounts to version 2 or 3
	nfs_proto: force all NFS mounts to udp or tcp

- new debug_options (amd -D):
	hrtime: turns on high-resolution timer if available
	readdir: traces browsable_dirs code
	xdrtrace: traces XDR routines
	(trace: only traces NFS and RPC)

- new amq options:
	-H: shows usage
	-w: translate getpwd() into an Amd path

- new map syntax:
	${dollar}: to include a literal '$' in assignments

- new "opts:=" options:
	ver3: turns on NFS version 3 on some systems (linux)

- updated or minor new ports:
	alpha-dec-osf4.0f
	alphaev6-dec-osf5.0
	i386-pc-linux-rh6.2
	i386-unknown-freebsd3.4

- bugs fixed:
	symlink mtime fixes to avoid u/mount race conditions
	update amq -s failed umounts count correctly
	linux compiles even if efs is available
	linux works with mount(2) option "intr"
	linux works with pcfs and cdfs
	handle std{in,out,err} correctly when releasing controlling tty
	browsable_readdir works on 64-bit kernel architectures
	irs/wire routines compile for bsdi{2,3,4}

*** Notes specific to am-utils version 6.0.3:

- updated or minor new ports:
	hppa1.0-hp-hpux11.00
	i386-pc-bsdi4.1
	i386-unknown-netbsd1.4.1
	sparc-sun-solaris2.8
	i*86-pc-linux-gnu-rh6.1
	(some preparations for Compaq Tru64)

- new variables ${uid} and ${gid}, return the numeric UID/GID of the user
  (not root) who invokes an amd pathname.  Similar to what hlfsd does.

- automake now uses automatic dependency tracking

- new mount options: optionstr, noexec, nomnttab

- maps of type:=auto are now browsable (using map option "browsable")

- ctl-amd has "status" argument (same as RedHat)

- bugs fixed:
	document buggy AIX 4.3 plock() behavior
	fixes to stale file handle on symlinks
	reduce race conditions upon rapid umount/mount sequences
	use vsnprintf, more secure than vsprintf
	more assorted and smaller bugs

*** Notes specific to am-utils version 6.0.2:

- safe map reloads: when a map needs to be reloaded, it is reloaded into a
  temporary copy first.  Only if the reload was completely successful, Amd
  discards the old map and uses the new one.  Otherwise Amd continues to use
  the old maps.  This should help a lot with transient NIS problems.

- amq -f now also forces a (safe) map reload, but only if the timestamp on
  the maps was updated.

- two new selector variables: ${vendor} and ${full_os}, which are the same
  as the output seen in "amd -v".

- documentation fixes and updates

- updated or minor new ports:
	i386-unknown-freebsdelf3.3

- support 'ignore' flags (automntfs) in bsdi-4.1

- bugs fixed:
	expn.pl uses correct sockaddr_in() not, pack()
	make sure configure --enable-*args take an argument
	don't busy-loop trying to rebind to ldap servers
	use vsnprintf, not vsprintf (security)

*** Notes specific to am-utils version 6.0.1:

- updated or minor new ports:
	i386-pc-bsdi4.0.1
	i386-unknown-freebsdelf3.0
	i386-unknown-freebsdelf3.1
	i386-unknown-freebsdelf3.2
	i386-unknown-freebsdelf4.0
	i386-unknown-netbsd1.4
	i386-unknown-openbsd2.5
	powerpc-unknown-linux-gnu

- automount2amd added, a new script to convert Sun automount maps to Amd maps

- new map function netgrpd(ARG), same as netgrp() but matches FQHN

- 'ignore' is a generic mount option

- hesiod info service isup() function to check if service is up

- more Y2K fixes (see README.y2k for the full story)

- using alloca.c on systems that don't have it (hpux9 with /bin/cc)

- configure script reduced in size by using M4/sh loops instead of repeated
  entries

- documentation updates

- too many bugs fixed to list here:
	'addopts' option works with 'remopts' as well as 'opts'
	AIX can perform NFS V.3 mounts explicitly
	NIS is_up fixed, especially for NIS+ running in compatibility mode
	amd -v incorrectly listing file systems that don't really work
	amd's own mounts use reserved ports if possible
	browsable directories works for Linux 2.3 (NFS cookies)
	bsd44 systems check for isofs flags
	bsd44 systems check for new options: norrio, gens, and extatt
	buildall works better on Ultrix's /bin/sh
	compile and build on Linux kernels 2.2 and newer
	compile and build on RedHat Linux 6.0 (glibc 2.1)
	compile and build on Solaris 7 (with or without vendor LDAP)
	completely eliminate all of amd's amq -M code, when not enabled
	correctly interpret failure code of unmount of type:=program
	don't create autofs listener service unless used
	don't list or process amq's -M option unless feature was turned on
	don't turn on/off noconn option if it was already in that state
	ldap info service: don't strcmp null strings
	lostaltmail correctly sets struct sockaddr_in
	make sure Linux systems have configured kernel headers
	test for bsize/namlen fields in nfs_args (linux mount versions 2/3)
	turn off broken NFS V.3 support for HPUX
	use getifaddrs() on bsd44 systems makes wire.c more reliable
	use matching NFS rsize/wsize on Linux 2.0 and 2.[123] kernels.
	verify that RPC requests come from reserved, privileged local ports
	warn when Linux kernel headers mismatch with running kernel
	pawd works for type:=nfsl too

*** Notes specific to am-utils version 6.0:

- updated or minor new ports:
	hppa2.0w-hp-hpux11.00,
	i386-pc-bsdi4.0
	i386-unknown-freebsd2.2.8
	i386-unknown-netbsd1.3.3
	i386-unknown-openbsd2.4
	mips-sgi-irix6.5
	powerpc-ibm-aix4.3.1.0
	i386-unknown-freebsd3.0 now supports nfs v.3

- ctl-amd and ctl-hlfsd now compatible with RedHat's chkconfig utility

- ctl-amd stop will now wait until amd is down

- libamu.so completely self contained --- does not export any symbols which
  must be defined by the process linking with it.  This is so shared
  libraries could be supported on systems that have restrictive shared
  libraries.

- use latest autoconf, automake, and libtool (off of cygnus' CVS server) to
  support shared libraries on many more platforms.

- posix code cleanups

- bugs fixed:
	case insensitive host match in type:=nfsl
	correct swapped args to kill(2)
	try to avoid a race condition b/t mounting and unmounting
	yp_all support is found in libnsl in RH-5.1 systems

*** Notes specific to am-utils version 6.0b1:

- updated or minor new ports:
	- *-pc-linux-gnu (glibc2 systems such as RedHat 5.1)
	- sparc-sun-solaris2.7
	- i386-pc-solaris2.7
	- i386-unknown-freebsd3.0 (official release, post 4.4lite port)
	- sparc64-unknown-linux-gnu (RH 5.1 on Sun Sparc Ultra)

- bugs fixed:
	- major memory leak in processing of /defaults
	- core dump if map_type given in amd.conf doesn't exist
	- memory leak in replacement yp_all
	- don't access uninitialized memory in DU 4.0
	- other smaller bugs, see ChangeLog

*** Notes specific to am-utils version 6.0a16:

- new ports:
	hppa1.0-hp-hpux11.00 (works, not NFS V.3 due to missing headers)
	mips-dec-ultrix4.3 (working, unverified)

- new minor ports:
	i386-pc-bsdi3.1
	i386-unknown-netbsd1.3.1
	alpha-dec-osf2.1

- new options addopt:=ARG will "smartly" add and override options specified
in opts:=

- new amd.conf options:
	pid_file: specifies the file to store the PID
	hesiod_base: specifies the base for the Hesiod service
	unmount_on_exit: if 'yes' will attempt to unmount all file systems
		when amd exits.

- amd.conf file is parsed after all other command line options.  If no
options specified at all, then use /etc/amd.conf by default.

- some variables' values are now compared case-insensitive as per specs,
such as host names, domain names, and more.

- NIS service uses a new isup() function to detect if the service is up
before using it.  Used to ensure amd doesn't clear the existing maps before
reloading them, unless the remote info service is working.

- new cdfs mount options: rrip, noversion, defperm, nodefperm (OSF)

- support efs/xfs separately on irix

- new -D info trace option to turn on info specific debugging, such as
RES_DEBUG for hesiod services.

- document updates and fixes

- new file MIRRORS lists official mirror sites (also in am-utils home page)

- new file BUGS lists known amd/OS bugs

- source restructuring: rename all Amd file-systems' sources to amfs_ARG.c
such that it matches the type:=ARG as well.  Free names afs/dfs for Andrew
F/S and Distributed F/S.

- checkpoint config.guess several times during the long configure, so that
if it is aborted midway, the bulk of the features discovered will be re-read
from the config.cache file.

- more systems support shared libraries (libtool 1.2)

- using automake 1.3 + more fixes

- bugs fixed:
	use dynamic buffer for list of interfaces, not fixed size
	output of amd -H duplicated if >2 interfaces
	-D mem for hlfsd not on by default (so it will daemonize)
	linux looks for ext2fs before ufs
	CDFS looks for 'isofs' mount type as well
	compile on Solaris 2.6 with /opt/SUNWspro/bin/cc
	various additional fixes which gcc 2.8.x reported
	print syslog help string based on what's supported
	correctly ignore loopback interface on SunOS 3.x
	don't use -lucb for strcasecmp
	hlfsd's dump file securely written in /usr/tmp/hlfsd.dump.XXXXXX
	inherit NFS V.3 mounts correctly
	write pid file securely

*** Notes specific to am-utils version 6.0a15:

- new ports:
	alpha-unknown-linux-gnu: works
	i386-unknown-netbsd1.3: fully working
	*-sun-sunos3: compiles, not tested

- updated ports:
	m68k-next-nextstep3: cleaner compile, works.

- new file system type nfsl (NFS Link).  Uses nfs if file system is remote,
and link if it is local (based on if $rhost equals the host name).

- support for Solaris cachefs.  Requires setting fs, rfs, and a new variable
cachedir.  See documentation for explanation, examples, and caveats.

- support negated selector functions such as !exists(/foo/bar)

- wire, network, netnumber, in_network() selectors now match against all
locally attached networks (by either name or number), not just the first two
interfaces.

- new program pawd (and man page for it) --- Print Automounter Working
Directory, to print the proper pathname of the cwd or any other pathname,
adjusted for automounter paths, while avoiding mount points.

- two new switches to amq: -U will force using UDP only; -T will force using
only TCP to communicate with amd.  If neither (or both) are specified, amq
will try TCP first, and if that failed, will try UDP.

- support syslog facilities, using "amd -l syslog:facility".  Old behavior
when using only -l syslog is to use the LOG_DAEMON facility.

- you may specify browsable_dirs=full, to get a listing of all entries
(other than /default), including those with '*' wildcard and '/'
characters.

- amd -D trace now also includes as much of struct nfs_args as can be
displayed.  Useful in figuring out what the kernel really gets during a
mount(2), as opposed to what the /etc/mnttab file says.  -D trace also
traces the xdr_* functions.

- support for versions of shared libamu version.  upped version from 0.0.0
to 1.0.0.  each am-utils release that will change the library will also
update its version.

- amd/ops_TEMPLATE.c: a new template file for those brave enough to try and
implement a new amd file system.  Includes comments and other info useful
for developers.

- if localconfig.h exists in the current directory during the run of
configure, it is included in all am-utils sources.  This allows courageous
developers to make certain modifications during compilations, and especially
turn off undesired features (not very recommended).

- documentation types and updates for all new features, ports, etc.

- bugs fixed:
	support NFS mount options grpid and maxgrps
	nextstep: set NFS success code to 0 (NFS_OK), not 1 (EPERM)
	bsdi2: set NFS success code to 0 (NFS_OK), not 1 (EPERM)
	set NFS V.3 mount table names to "nfs" if vers/proto exist
	use mkstemp() if possible (more secure)
	ctl-amd looks for amd.conf in ${prefix}/etc after /etc
	hpux: use "ignore" mount table type
	openbsd2.2: turn off "noconn" mount option, so only connected used
	fixed memory leak in hlfsd (don't setpwent after endpwent)
	all NFS3 systems should have proto/vers mount/amd options
	DEBUG_MEM compiles and prints something more useful
	uninit_mntfs(): free() mf_private *after* it is used
	browsable_readdir: fewer bytes sent back to kernel for each chunk
	mount_toplvl: don't free() an automatic variable!
	amd should chdir() to / before daemonzing (for core dumps etc)
	cdfs should be called 'cdfs' not whatever the mnttab type is
	amd -v: don't print "FS:" list twice when >=2 net interfaces

*** Notes specific to am-utils version 6.0a14:

- updated ports:
	powerpc-ibm-aix4.2.1.0: NFS V.3 works

- minor new ports:
	sparc-sun-sunos4.1.3C
	m68k-sun-sunos4.1.1 (sun3)
	mips-sgi-irix5.2

- new option to amd, -O ARG, will override the operating systems *name* with
ARG.  Corrected documentation for amd -o ARG --- it overrides the operating
system *version* and not the name as the docs incorrectly stated.

- logging now behave more like syslog: will not print repeated strings, but
rather a count such as "last message repeated N times".  (N will not exceed
100.)

- restructured the code which deals with the numerous possible fields and
flags that are set in struct nfs_args.  That code was moved to libamu as
the functions compute_nfs_args() and compute_automounter_nfs_args().

- bugs fixed:
	mnttab name ufs/cdfs/pcfs/etc filesystems corrected
	use pmap_ping for amq (a must for secure portmappers, bsdi2/3)
	test for xfs (irix) as a disk-based file system
	set correct nfs_prot headers for Solaris 2.5
	removed stale code from lostaltmail.in
	lostaltmail will look for conf file in multiple locations
	assorted documentation corrections
	amq does not print "get_secure_amd_client" if run as root

*** Notes specific to am-utils version 6.0a13:

- new in_network(ARG) nomadic selector, true if ARG is the name (or number)
of any of this host's network interfaces.

- removed variables primnetname, primnetnum, subsnetname, and subsnetnum.
(Kept "wire" and its alias "network", and "netnumber".)

- include am-utils.dvi and am-utils.ps in distribution.

- hlfsd supports new option -P ARG, for reading password map off of file
ARG.  Allows you to use the hlfs redirector using paths other than user's
home directories.

- use a replacement yp_all for some systems (irix) known to have a broken
one which leaks a file descriptor each time called.

- if remote NFS server is down or does not support portmap, downgrade
machine to NFS V.2 and retry again later.

- bugs:
	don't redefine yywrap on systems using a modified flex
	use correct "ignore" mnttab/mount option on hpux for df(1)
	use nfs_args' fsname field (hpux) to avoid syncer/mount(1) problems
	don't add ops_ufs.o twice to Makefile's $(OBJS)
	don't fail if autofs listener fails to initialize
	hlfsd should test if run as root after usage() and getopt

- minor code cleanups for netbsd

- html docs now in http://www.am-utils.org

- added README file in binaries ftp directory

*** Notes specific to am-utils version 6.0a12:

- minor or updated/broken ports fixed:
	hppa1.1-hp-hpux10.10:	compiles, untested (probably works).
	hppa1.1-hp-hpux9.05:	compiles, untested (probably works).
	hppa1.1-hp-hpux9.07:	compiles, untested (probably works).
	m68k-hp-hpux9.00:	compiles, untested (probably works).
	rs6000-ibm-aix4.1.4.0:	compiles, untested.
	sparc-sun-solaris2.6:	works w/ NFS V.3.
	sparc-sun-sunos4.1.4:	compiles, untested (probably works).

- new ports:
	powerpc-ibm-aix4.2.1.0:	compiles w/ NFS V.3, untested.

- wire-test also checks for combinations of NFS protocol/version from the
client to a remote (or local) host.

- conf/mtab/mtab_file.c: use flock() to lock the file, and fcntl() if
flock() is not available.  (Used to prefer fcntl() over flock().)

- bug fixes:
	tli get_nfs_version() gets into an infinite loop
	tli get_nfs_version() should time out faster
	sockets get_nfs_version() should work w/ secure portmappers
	ESTALE returned for NFS mounts for SunOS 4.x fixed
	do not exceed HOSTNAMESZ for nfs_args.hostname (get ENAMETOOLONG)
	properly initialize some mntent_t fields (fsck, freq, mnt_time)
	properly initialize some pcfs_args fields (mask, uid, gid)
	properly initialize some cdfs_args fields (ssector)

*** Notes specific to am-utils version 6.0a11:

- bug fixes:
	amd could not NFS mount v.2 servers from v.3 clients
	hlfsd will only use first occurrence of home dir for same uid

*** Notes specific to am-utils version 6.0a10:

- MAJOR DOCUMENTATION UPDATE! (first time in 6 years)

- new ports:
	m68k-next-nextstep3: configures, compiles, not tested.

- preliminary autofs support.  See README.autofs for details.

- new amd.conf [global] yes/no keywords:
	show_statfs_entries:	shows number of entries for df(1)
	fully_qualified_hosts:	use FQHN for NFS/RPC authentication

- detect down remote hosts faster

- log output of "amd -v" at startup

- removed $osver override for solaris: now it is 2.5.1, not 5.5.1

- buildall will use gmake first if available

- bugs fixed:
	amd core dumped when remote host was down
	allow up to 1024 entries back from readdir()
	amd.conf works even if only [global] option defined
	avoid using bad memcmp() implementations
	fixed meaning of plock [global] option (was reversed)
	hlfsd infinite loop unless compiled with --enable-debug
	NIS code works with NIS+ servers in NIS compatibility mode
	reset tag fields in amd.conf so they don't carry to other entries

*** Notes specific to am-utils version 6.0a9:

- new ports:
	sparc-sun-solaris2.4:
		 configures/compiles, and runs (no NFS V3)
	i386-unknown-openbsd2.1:
		configures/compiles, runs (NFS V3)

- updated ports:
	i486-ncr-sysv4.3.03: configures/compiles, not tested

- Multiple amd support: new amd.conf [global] key "portmap_program" can be
used to specify an alternate RPC program number for amd to un/register.
Allowed numbers range from 300019 to 300029.  A matching new option for amq:
-P prognum, will use an alternate program number to contact.

- man pages:
	amd.conf.5	new
	mk-amd-map.8	new
	amd.8		updated
	amq.8		updated
	(other man pages required minor updates)

- shared libraries support expanded.  Using GNU libtool-1.0.  You can build
a shared version of libamu, and link with it accordingly, by specifying
--enable-shared to configure.  Default is --enable-static --disable-shared,
and you can mix and match.  See "INSTALL" file for listing of systems on
which shared libraries seem to build and work fine.

- new option: amq -p, will return the PID of the running amd (local or
remote).  Uses a new RPC message.  Useful especially in "ctl-amd stop".

- new configure script options --enable-ldflags, for specifying -L flags.
The older --enable-libs is to be used only for -l options.

- two new LDAP map options for amd.conf: ldap_cache_seconds and
ldap_cache_maxmem.

- new script, am-eject from Debian linux's version of amd-upl102.

- additional passwd map support using var[0-3], from Debian folks.

- hesiod code cleanup.  works for hesiod 1.3 as well as 3.0.

- removed defunct -h option from amd.

- started using automake-1.2.  This fixed several bugs that caused some
versions of yacc/lex and non-GNU make to fail.

- bug fixes:
	amd/hlfsd mounts should be hidden from df(1)
	use "noconn" option for nfs mounts (multi-homed hosts)
	don't use connected sockets on linux before 1.3.10 (from Debian)
	better checks for [gn]dbm
	forbid excessive retries after timeouts (from Debian)
	readdir(): don't skip over map entries with prefix, and include it
	more assorted linux fixes from Debian folks
	lofs mount on svr4 was broken
	find default value of $karch from uname() not $arch
	hlfsd failed to mount itself on some little-endians


*** Notes specific to am-utils version 6.0a8:

- new ports:
	i386-unknown-netbsd1.2.1: configures/compiles (with NFS V.3), works,
				  but some OS stability problems exist.

- updated ports:
	hppa1.1-hp-hpux9.01:
			now tested and working
	rs6000-ibm-aix3.2 and rs6000-ibm-aix3.2.5:
			now tested and working

- fixed browsable directories (readdir) code.

- better methods to find amd/hlfsd pid to kill in ctl-{amd,hlfsd}

- "ignore/auto" mount types fixed for irix, sunos, and others, so "df" does not
show amd mounts by default (but GNU df -a does).

- each time amd is built, a new "build" version is incremented.  See amd -v.

- man page for fsinfo added

- empty fillers for new file (bsd44) systems: nullfs, unionfs, umapfs.

- when amd is not running, or portmapper is down, make amq timeout faster (5
sec) than system default, usually 4-5 minutes.

- bug fixes:
	hlfsd mount got "protocol not supported"
	first regular map in amd.conf didn't inherit global options
	make "bad" versions of lex still work with amd/conf_parse.l
	check for 'nodev' option, not 'nondev'
	typo in "ro" option, and fillers to ac{reg,dir}{min,max} and others
	amd.conf parsing done before switching default log/debug options
	allow doubly-quoted values in amd.conf
	hesiod-reload code cleanup

- assorted code cleanup


*** Notes specific to am-utils version 6.0a7:

- new ports:
	i386-unknown-freebsd3.0:
			fully functional with NFS V.3
	sparc-sun-solaris2.3:
			fully functional (should work for 2.4)
	sparc-unknown-netbsd1.2E:
			configures/compiles (with NFS V.3), untested

- updated ports:
	i386-pc-bsdi3.0:
			NFS V.3 works
			look for hesiod in libc
	mips-sgi-irix5.3:
			fully functional with NFS V.3

- LDAP support!  New [global] amd.conf options ldap_base and ldap_hostports.
Also includes a new script amd2ldif to convert amd maps into plain text LDAP
object files.

- the following amd.conf variables: browsable_dirs, map_options, map_type,
mount_type, and search_path --- can now be specified in [global] as well as
the map entry itself.  That way you can declare them only once in [global],
and override them as needed per map.

- option "cluster" added to [global] (HPUX clusters ala "amd -C").

- assorted info_hesiod map fixes and cleanup.  removed HESIOD_RELOAD code.

- added netgrp(name) function to amd map syntax to see if current host is in
the <name> netgroup.

- removed unused option "amd -m".

- filled in "tasks" file with todo items.

- filled "COPYING" file with legal stuff.

- cleanup: all global variables are now in one big structure (struct
amu_global_options) that's easy to identify and enhance.  Also migrated
several flags that used be an integer each into one unsigned integer that's
used as a bit-flag.

- big fixes:
	xdr_mountres3 should compile only if has NFS V3
	lex/yacc macros show full pathname (to tell if correct one runs)
	misc fixes/cleanup


*** Notes specific to am-utils version 6.0a6:

- amd configuration file!

See scripts/amd.conf-sample for help and some explanation.  This new conf
file allows for the following new features:

	default selectors can be turned on/off globally.
	browsable_dirs/readdir() support can be turned on per map.
	search paths for file type maps.
	can force the map type to file, nis, ndbm, etc. rather than default
		to looking at all of them.
	tag each map for "amd -T tag", useful for grouping maps.
	can override $os and others (so if you don't like "sunos5" default
		naming, set os=sos5 and it will work with your old maps).
	and more goodies...

- enable-default-selectors: No longer turned on by the configure script or
optionally compiled.  Code made dynamic and can be turned on or off from the
amd.conf file.  This code is off by default, and must be turned on by
amd.conf's [global] section.

- new ports:
	mips-sgi-irix5.3:	configure/compile, not tested
	i486-ncr-sysv4.3.03:	configure/compile, not tested

- updated ports:
	alpha-dec-osf4.0:	major code redone
	sparc-sun-sunos4.1.3:	fixed and working
	mips-sgi-irix6.2:	tested with gcc and "cc -32 -Wl,-woff,84"
	mips-sgi-irix6.4:	tested with gcc and "cc -32 -Wl,-woff,84"

- better NFS3 port, including more support for proto= and vers=, and
automatic determination of proto/vers combination.

- conf/nfs_prot/nfs_prot_*.h: all of the NFS protocol header files had to be
redone, because of the osf4 port.  OSF used very different names for these,
and they conflicted with am-utils'.  The only solution was to more or less
conform to OSF4's naming, and change all the others.

- ctl-amd script:
	improved to look for amd.conf in $prefix/etc and /etc
	better methods for finding the pid of amd to kill

- autoconf support for LDAP.  amd/info_ldap.c needs to be written.

- wire-test also reports the local IP address.  Some systems have multiple,
buggy version of get_myaddress(), esp. SunOS and Irix.  Note that Solaris
x86 has a buggy htonl().

- amd -H prints usage.

- bugs fixed:
	minor TLI problem in fwd_socket
	mount options properly comma delimited
	LIBS is set only to the right set of libraries to include
	selectors-on-default code ignored last selector ent in /defaults
	assorted code cleanups


*** Notes specific to am-utils version 6.0a5:

- NFS Version 3 support!!!

	Works on Solaris 2.5.1.
	Minimal testing done on Irix 6.
	Compiles cleanly on DU-4.0 but no tests performed.

Will fall back to V2 mounts when V3 is not available.  Will also use TCP if
possible, UDP otherwise.

- Ports to new platforms:

	alpha-dec-osf4.0		(not tested)
	i386-pc-bsdi3.0			(tested and working)
	i386-unknown-freebsd2.2.1	(tested and working)
	sparc-unknown-linux-gnu		(tested and working)

- New scripts added:

	amd2sun:	convert amd maps to Sun automount maps
	ctl-amd:	script to start/stop/restart amd
	ctl-hlfsd:	script to start/stop/restart hlfsd
	expn:		expand mail alias (used by hlfsd)
	lostaltmail:	redeliver "lost" mail redirected by hlfsd
	lostaltmail.conf-sample:	sample conf file for lostaltmail
	wait4amd:	run a command once amd is up on a host
	wait4amd2die:	wait for an amd process to die before returning

- "amd -v" now includes more info and "amq -v" lists all of it.

- new parser for linux specific mount options.

- Main bugs fixed:

	"new toplvl readdir" bug caused amd to dump core
	handler for SIGCHLD didn't check for all possible children
	hlfsd leaking file descriptors when home file system was full
	cdfs/pcfs mounts should not timeout by default
	hesiod domain names should be compared in case-insensitive manner
	several printfs in amq were missing \n


*** Notes specific to am-utils version 6.0a4:

- amd services both TCP and UDP amq requests.  This will help because of the
limited UDP message size.

- "amq -M" code is disabled by default because it is insecure.  It is
rarely used.  Users who wish to use it should run
"configure --enable-amq-mount".


*** Notes specific to am-utils version 6.0a3:

- New tested ports (configures, compiles, and runs):

	i386-unknown-freebsd2.2

- New ports (configures and compiles correctly, not tested):

	rs6000-ibm-aix3.2.5
	rs6000-ibm-aix4.1.5.0

- More am-utils programs ported to all existing platforms: hlfsd, fsinfo,
mk-amd-map, and fixmount.

- Shared libraries: a new configure option --enable-shared will build a
shared libamu.so, link applications with it, and use it.  Reduces binary
sizes by 20-30%.  This is the first step towards loadable modules, as many
changes had to be done to be able to compile and use PIC code.  This is code
that obviously needs to be generalized to be able to build shared libraries
on many other platforms.  It was only tested on Solaris 5.5.1.

- the file INSTALL contains the latest compatibility table of which
platforms am-utils configures, compiles and runs on.

- Trimmed down the size of the configure script.  Some tests that are not
used anywhere were removed.


*** Notes specific to am-utils version 6.0a2:

- New ports (configures and compiles correctly, not tested):

	i386-pc-bsdi2.1
	hppa1.1-hp-hpux9.01
	hppa1.1-hp-hpux10.20

- new configure options:

	--enable-cppflags[=ARG]
		configure/compile with ARG (-I) preprocessor flags
	--enable-libs[=ARG]
		configure/compile with ARG (-L/-l) library flags

- file system, mount table entries, and mount type tests can now look in
/lib/modules and /proc/filesystems for statically/dyadically loadable kernel
modules (linux)

- prefer vfat over msdos/pc/etc file system for PCFS.

- moved all fixed headers to include/am_defs.  Left only #define/#undef
entries in aux/acconfig.h.

- make more sense of systems that have full, partial, or no NFS protocol
headers.

- minor fixes for NetBSD (untested platform).

- hesiod map fixed.

- buildall -D: new option to run even stricter developer options.

- lots of other bugs fixed (see ChangeLog).


*** Notes specific to am-utils version 6.0a1:

I have it configure and build correctly for the following systems:

	i386-pc-solaris2.5.1
	i386-unknown-freebsd2.1.0
	mips-sgi-irix6.2
	sparc-sun-solaris2.5.1
	sparc-sun-sunos4.1.3

Amq, wire-test, and "amd -v" work on all of the above.  A real running amd
was only tested and confirmed working on

	i386-pc-solaris2.5.1
	sparc-sun-solaris2.5.1

Many things are still missing: options, features, etc.  But for now, let's
concentrate on getting the basic functionality working on the more popular
systems.