aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/boot/full-test.sh31
-rwxr-xr-xtools/boot/install-boot.sh23
-rwxr-xr-xtools/boot/rootgen.sh65
-rw-r--r--tools/bsdbox/Makefile5
-rw-r--r--tools/bsdbox/Makefile.base3
-rw-r--r--tools/bsdbox/Makefile.hostapd26
-rw-r--r--tools/bsdbox/Makefile.net1
-rw-r--r--tools/build/Makefile77
-rw-r--r--tools/build/cross-build/fflags.c62
-rw-r--r--tools/build/cross-build/include/common/exterr.h14
-rw-r--r--tools/build/cross-build/include/common/libutil.h2
-rw-r--r--tools/build/cross-build/include/common/sys/_types.h3
-rw-r--r--tools/build/cross-build/include/common/sys/exterrvar.h6
-rw-r--r--tools/build/cross-build/include/linux/libutil.h2
-rw-r--r--tools/build/cross-build/include/linux/sys/stat.h20
-rw-r--r--tools/build/cross-build/include/mac/endian.h7
-rw-r--r--tools/build/cross-build/include/mac/string.h7
-rwxr-xr-xtools/build/depend-cleanup.sh23
-rwxr-xr-xtools/build/make.py74
-rw-r--r--tools/build/mk/OptionalObsoleteFiles.inc3356
-rw-r--r--tools/build/options/WITHOUT_LLVM_TARGET_SPARC4
-rw-r--r--tools/build/options/WITHOUT_MALLOC_PRODUCTION7
-rw-r--r--tools/build/options/WITHOUT_MITKRB51
-rw-r--r--tools/build/options/WITH_CCACHE_BUILD7
-rw-r--r--tools/build/options/WITH_CLEAN1
-rw-r--r--tools/build/options/WITH_LLVM_TARGET_SPARC4
-rw-r--r--tools/build/options/WITH_MALLOC_PRODUCTION7
-rw-r--r--tools/build/options/WITH_MITKRB51
-rw-r--r--tools/build/options/WITH_RUN_TESTS1
-rw-r--r--tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT5
-rwxr-xr-xtools/build/options/makeman4
-rw-r--r--tools/build/options/makeman.lua791
-rw-r--r--tools/build/test-includes/Makefile3
-rw-r--r--tools/build/test-includes/badfiles.inc20
-rw-r--r--tools/diag/prtblknos/main.c7
-rw-r--r--tools/diag/prtblknos/prtblknos.c4
-rwxr-xr-xtools/ifnet/convert_ifapi.sh2
-rw-r--r--tools/regression/bpf/bpf_filter/Makefile2
-rw-r--r--tools/regression/tls/ttls3/Makefile2
-rw-r--r--tools/test/stress2/misc/all.exclude10
-rwxr-xr-xtools/test/stress2/misc/datamove6.sh50
-rwxr-xr-xtools/test/stress2/misc/exlock2.sh2
-rwxr-xr-xtools/test/stress2/misc/ftruncate3.sh96
-rwxr-xr-xtools/test/stress2/misc/fullpath2.sh2
-rwxr-xr-xtools/test/stress2/misc/growfs3.sh41
-rwxr-xr-xtools/test/stress2/misc/kcmp.sh67
-rwxr-xr-xtools/test/stress2/misc/marcus8.sh41
-rwxr-xr-xtools/test/stress2/misc/mmap43.sh9
-rwxr-xr-xtools/test/stress2/misc/mprotect3.sh70
-rwxr-xr-xtools/test/stress2/misc/mprotect4.sh109
-rwxr-xr-xtools/test/stress2/misc/mprotect5.sh118
-rwxr-xr-xtools/test/stress2/misc/mprotect6.sh146
-rwxr-xr-xtools/test/stress2/misc/msdos17.sh144
-rwxr-xr-xtools/test/stress2/misc/msdos20.sh87
-rwxr-xr-xtools/test/stress2/misc/msdos21.sh25
-rwxr-xr-xtools/test/stress2/misc/newfs8.sh69
-rwxr-xr-xtools/test/stress2/misc/nullfs31.sh75
-rwxr-xr-xtools/test/stress2/misc/nullfs32.sh43
-rwxr-xr-xtools/test/stress2/misc/pager_read_error.sh36
-rwxr-xr-xtools/test/stress2/misc/pthread10.sh106
-rwxr-xr-xtools/test/stress2/misc/rangelocks.sh194
-rwxr-xr-xtools/test/stress2/misc/rangelocks2.sh178
-rwxr-xr-xtools/test/stress2/misc/rename16.sh261
-rwxr-xr-xtools/test/stress2/misc/rmdir.sh119
-rwxr-xr-xtools/test/stress2/misc/rsync.sh49
-rwxr-xr-xtools/test/stress2/misc/rsync2.sh17
-rwxr-xr-xtools/test/stress2/misc/rsync3.sh43
-rwxr-xr-xtools/test/stress2/misc/seekhole2.sh65
-rwxr-xr-xtools/test/stress2/misc/syzkaller71.sh171
-rwxr-xr-xtools/test/stress2/misc/syzkaller72.sh70
-rwxr-xr-xtools/test/stress2/misc/syzkaller73.sh537
-rwxr-xr-xtools/test/stress2/misc/syzkaller74.sh469
-rwxr-xr-xtools/test/stress2/misc/syzkaller75.sh377
-rwxr-xr-xtools/test/stress2/misc/syzkaller76.sh235
-rwxr-xr-xtools/test/stress2/misc/syzkaller77.sh290
-rwxr-xr-xtools/test/stress2/misc/syzkaller78.sh282
-rwxr-xr-xtools/test/stress2/misc/syzkaller79.sh82
-rwxr-xr-xtools/test/stress2/misc/syzkaller80.sh320
-rwxr-xr-xtools/test/stress2/misc/syzkaller81.sh72
-rwxr-xr-xtools/test/stress2/misc/syzkaller82.sh122
-rwxr-xr-xtools/test/stress2/misc/syzkaller83.sh168
-rwxr-xr-xtools/test/stress2/misc/vfork.sh36
-rw-r--r--tools/tools/ath/athpoke/athpoke.c6
-rw-r--r--tools/tools/ath/common/ctrl.c2
-rw-r--r--tools/tools/git/ghpr/README5
-rw-r--r--tools/tools/git/ghpr/ghpr-init.sh29
-rw-r--r--tools/tools/git/ghpr/ghpr-push.sh51
-rw-r--r--tools/tools/git/ghpr/ghpr-stage.sh72
-rw-r--r--tools/tools/git/git-arc.12
-rw-r--r--tools/tools/git/git-arc.sh17
-rw-r--r--tools/tools/kgdb/tcplog.py267
-rwxr-xr-xtools/tools/nanobsd/defaults.sh11
-rw-r--r--tools/tools/nanobsd/pcengines/ALIX_DSK1
-rw-r--r--tools/tools/nanobsd/rescue/common34
-rw-r--r--tools/tools/net80211/w00t/Makefile.inc2
-rw-r--r--tools/tools/nvmf/nvmfd/Makefile14
-rw-r--r--tools/tools/nvmf/nvmfd/Makefile.depend20
-rw-r--r--tools/tools/nvmf/nvmfd/controller.c244
-rw-r--r--tools/tools/nvmf/nvmfd/ctl.c137
-rw-r--r--tools/tools/nvmf/nvmfd/devices.c386
-rw-r--r--tools/tools/nvmf/nvmfd/discovery.c342
-rw-r--r--tools/tools/nvmf/nvmfd/internal.h66
-rw-r--r--tools/tools/nvmf/nvmfd/io.c676
-rw-r--r--tools/tools/nvmf/nvmfd/nvmfd.8131
-rw-r--r--tools/tools/nvmf/nvmfd/nvmfd.c271
-rw-r--r--tools/tools/sysdoc/tunables.mdoc4
-rw-r--r--tools/tools/vhba/vhba.h2
-rw-r--r--tools/tools/vt/mkkfont/Makefile2
-rw-r--r--tools/uma/smrstress/smrstress.c3
109 files changed, 12658 insertions, 322 deletions
diff --git a/tools/boot/full-test.sh b/tools/boot/full-test.sh
index 370088f120bb..1160861316dc 100644
--- a/tools/boot/full-test.sh
+++ b/tools/boot/full-test.sh
@@ -51,9 +51,11 @@ case $(uname) in
else
die "Can't find the make wrapper"
fi
+ qemu_bin=/opt/homebrew/bin
;;
FreeBSD)
MAKE=make
+ qemu_bin=/usr/local/bin
;;
# linux) not yet
*)
@@ -71,12 +73,6 @@ MTREE=$(SHELL="which mtree" ${MAKE} ${DEFARCH} buildenv | tail -1) || die "No mt
# MAKE=$(SHELL="which make" ${MAKE} ${DEFARCH} buildenv | tail -1) || die "No make, try buildworld first"
-# hack -- I have extra junk in my qemu, but it's not needed to recreate things
-if [ $(whoami) = imp ]; then
- qemu_bin=/home/imp/git/qemu/00-build
-else
- qemu_bin=/usr/local/bin
-fi
# All the architectures under test
# Note: we can't yet do armv7 because we don't have a good iso for it and would
@@ -163,9 +159,8 @@ make_minimal_freebsd_tree()
# Pretend we don't have a separate /usr
ln -s . ${dir}/usr
# snag the binaries for my simple /etc/rc file
- tar -C ${dir} -xf ${CACHE}/$file sbin/reboot sbin/halt sbin/init bin/sh sbin/sysctl \
- lib/libncursesw.so.9 lib/libc.so.7 lib/libedit.so.8 libexec/ld-elf.so.1
-
+ tar -C ${dir} -xf ${CACHE}/$file sbin/fastboot sbin/reboot sbin/halt sbin/init bin/sh sbin/sysctl \
+ lib/libtinfow.so.9 lib/libncursesw.so.9 lib/libc.so.7 lib/libedit.so.8 libexec/ld-elf.so.1
# My simple etc/rc
cat > ${dir}/etc/rc <<EOF
#!/bin/sh
@@ -213,6 +208,10 @@ autoboot_delay=2
zfs_load="YES"
boot_verbose=yes
kern.cfg.order="acpi,fdt"
+boot_serial="YES"
+hw.uart.console="io:1016,br:115200"
+vfs.root.mountfrom="ufs:/dev/ufs/root"
+vfs.root.mountfrom.options="rw"
EOF
}
@@ -366,7 +365,7 @@ make_linuxboot_scripts()
if [ ${bios_code} -ot /usr/local/share/qemu/edk2-x86_64-code.fd ]; then
cp /usr/local/share/qemu/edk2-x86_64-code.fd ${bios_code}
# vars file works on both 32 and 64 bit x86
- cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
+# cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
fi
;;
aarch64)
@@ -448,7 +447,8 @@ EOF
make_freebsd_esps()
{
# At the moment, we have just three (armv7 could also be here too, but we're not doing that)
- for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+# for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+ for a in amd64:amd64 arm64:aarch64; do
m=${a%%:*}
ma=${a##*:}
ma_combo="${m}"
@@ -470,7 +470,8 @@ make_freebsd_images()
{
# ESP variant: In this variant, riscv, amd64 and arm64 are created more or
# less the same way. UEFI + ACPI implementations
- for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+# for a in amd64:amd64 arm64:aarch64 riscv:riscv64; do
+ for a in amd64:amd64 arm64:aarch64; do
m=${a%%:*}
ma=${a##*:}
ma_combo="${m}"
@@ -495,6 +496,7 @@ EOF
set -x
+if false; then
# BIOS i386
a=i386:i386
m=${a%%:*}
@@ -541,6 +543,7 @@ EOF
-p freebsd-boot:=${dir2}/boot/boot1.hfs \
-p freebsd-ufs:=${ufs} \
-o ${img}
+fi
set +x
}
@@ -562,7 +565,7 @@ make_freebsd_scripts()
if [ ${bios_code} -ot /usr/local/share/qemu/edk2-x86_64-code.fd ]; then
cp /usr/local/share/qemu/edk2-x86_64-code.fd ${bios_code}
# vars file works on both 32 and 64 bit x86
- cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
+# cp /usr/local/share/qemu/edk2-i386-vars.fd ${bios_vars}
fi
;;
aarch64)
@@ -609,6 +612,7 @@ EOF
esac
done
+if false; then
set -x
a=powerpc:powerpc
m=${a%%:*}
@@ -644,6 +648,7 @@ ${qemu_bin}/qemu-system-i386 -m 1g \\
-monitor telnet::4444,server,nowait \\
-serial stdio \$*
EOF
+fi
}
# The smallest FAT32 filesystem is 33292 KB
diff --git a/tools/boot/install-boot.sh b/tools/boot/install-boot.sh
index 217bf0ff1457..10e62dd32ba8 100755
--- a/tools/boot/install-boot.sh
+++ b/tools/boot/install-boot.sh
@@ -294,27 +294,9 @@ boot_nogeli_mbr_ufs_both() {
boot_nogeli_mbr_ufs_uefi $1 $2 $3
}
+# ZFS+MBR+BIOS is not a supported configuration
boot_nogeli_mbr_zfs_legacy() {
- dev=$1
- dst=$2
-
- # search to find the BSD slice
- s=$(find_part $dev "freebsd")
- if [ -z "$s" ] ; then
- die "No BSD slice found"
- fi
- idx=$(find_part ${dev}s${s} "freebsd-zfs")
- if [ -z "$idx" ] ; then
- die "No freebsd-zfs slice found"
- fi
- # search to find the freebsd-zfs partition within the slice
- # Or just assume it is 'a' because it has to be since it fails otherwise
- doit gpart bootcode -b ${dst}/boot/mbr ${dev}
- dd if=${dst}/boot/zfsboot of=/tmp/zfsboot1 count=1
- doit gpart bootcode -b /tmp/zfsboot1 ${dev}s${s} # Put boot1 into the start of part
- sysctl kern.geom.debugflags=0x10 # Put boot2 into ZFS boot slot
- doit dd if=${dst}/boot/zfsboot of=/dev/${dev}s${s}a skip=1 seek=1024
- sysctl kern.geom.debugflags=0x0
+ exit 1
}
boot_nogeli_mbr_zfs_uefi() {
@@ -322,7 +304,6 @@ boot_nogeli_mbr_zfs_uefi() {
}
boot_nogeli_mbr_zfs_both() {
- boot_nogeli_mbr_zfs_legacy $1 $2 $3
boot_nogeli_mbr_zfs_uefi $1 $2 $3
}
diff --git a/tools/boot/rootgen.sh b/tools/boot/rootgen.sh
index d87eb481e2c1..2cd65bdd180d 100755
--- a/tools/boot/rootgen.sh
+++ b/tools/boot/rootgen.sh
@@ -202,33 +202,6 @@ mk_nogeli_mbr_ufs_both() {
rm -f ${src}/etc/fstab
}
-mk_nogeli_mbr_zfs_legacy() {
- src=$1
- img=$2
- mntpt=$3
- geli=$4
- scheme=$5
- fs=$6
- bios=$7
- pool=nogeli-mbr-zfs-legacy
-
- zfs_extra $src $dst
- makefs -t zfs -s 200m \
- -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
- ${img}.s1a ${src} ${dst}
- # The old boot1/boot2 boot split is also used by zfs. We need to extract zfsboot1
- # from this image. Since there's no room in the mbr format for the rest of the loader,
- # it will load the zfsboot loader from the reserved for bootloader area of the ZFS volume
- # being booted, hence the need to dd it into the raw img later.
- # Please note: zfsboot only works with partition 'a' which must be the root
- # partition / zfs volume
- dd if=${src}/boot/zfsboot of=${dst}/zfsboot1 count=1
- mkimg -s bsd -b ${dst}zfsboot1 -p freebsd-zfs:=${img}.s1a -o ${img}.s1
- dd if=${src}/boot/zfsboot of=${img}.s1a skip=1 seek=1024
- mkimg -a 1 -s mbr -b ${src}/boot/mbr -p freebsd:=${img}.s1 -o ${img}
- rm -rf ${dst}
-}
-
mk_nogeli_mbr_zfs_uefi() {
src=$1
img=$2
@@ -244,38 +217,11 @@ mk_nogeli_mbr_zfs_uefi() {
makefs -t zfs -s 200m \
-o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
${img}.s2a ${src} ${dst}
- mkimg -s bsd -b ${dst}zfsboot1 -p freebsd-zfs:=${img}.s2a -o ${img}.s2
+ mkimg -s bsd -p freebsd-zfs:=${img}.s2a -o ${img}.s2
mkimg -a 1 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
rm -rf ${dst}
}
-mk_nogeli_mbr_zfs_both() {
- src=$1
- img=$2
- mntpt=$3
- geli=$4
- scheme=$5
- fs=$6
- bios=$7
- pool=nogeli-mbr-zfs-both
-
- zfs_extra $src $dst
- make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
- makefs -t zfs -s 200m \
- -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
- ${img}.s2a ${src} ${dst}
- # The old boot1/boot2 boot split is also used by zfs. We need to extract zfsboot1
- # from this image. Since there's no room in the mbr format for the rest of the loader,
- # it will load the zfsboot loader from the reserved for bootloader area of the ZFS volume
- # being booted, hence the need to dd it into the raw img later.
- # Please note: zfsboot only works with partition 'a' which must be the root
- # partition / zfs volume
- dd if=${src}/boot/zfsboot of=${dst}/zfsboot1 count=1
- mkimg -s bsd -b ${dst}zfsboot1 -p freebsd-zfs:=${img}.s2a -o ${img}.s2
- dd if=${src}/boot/zfsboot of=${img}.s1a skip=1 seek=1024
- mkimg -a 1 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
-}
-
mk_geli_gpt_ufs_legacy() {
src=$1
img=$2
@@ -728,6 +674,10 @@ for arch in amd64; do
for scheme in gpt mbr; do
for fs in ufs zfs; do
for bios in legacy uefi both; do
+ # ZFS+MBR+BIOS is not supported
+ if [ "$scheme" = "mbr" -a "$fs" = "zfs" -a "$bios" != "uefi" ]; then
+ continue
+ fi
make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
done
done
@@ -750,6 +700,11 @@ for arch in i386; do
for bios in legacy; do
# The legacy boot is shared with amd64 so those routines could
# likely be used here.
+
+ # ZFS+MBR+BIOS is not supported
+ if [ "$scheme" = "mbr" -a "$fs" = "zfs" -a "$bios" != "uefi" ]; then
+ continue
+ fi
make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
done
done
diff --git a/tools/bsdbox/Makefile b/tools/bsdbox/Makefile
index a164ddf54cbd..35e37b31ea2f 100644
--- a/tools/bsdbox/Makefile
+++ b/tools/bsdbox/Makefile
@@ -2,6 +2,7 @@ MAN=
.include <bsd.own.mk>
MK_SSP= no
+MK_PIE= no
PROG= bsdbox
BINDIR?=/sbin
@@ -52,7 +53,7 @@ CRUNCH_SRCDIRS+= bin
# setuid binaries - they use these libraries. PAM needs to be
# built dynamically or it tries to build _all_ of the modules
# statically - and that ends very badly.
-CRUNCH_SHLIBS+= -lc -lutil -lcrypt -lxo -lgpio
+CRUNCH_SHLIBS+= -lc -lsys -lutil -lcrypt -lxo -lgpio
CRUNCH_LIBS+= -lkvm -lmemstat -lnetgraph
CRUNCH_LIBS+= -lcrypt -ledit -ltermcapw
@@ -69,7 +70,7 @@ CRUNCH_SRCDIRS+= sbin
CRUNCH_LIBS+= -l80211 -lalias -lcam -lcursesw -ldevstat -lipsec
# Don't forget this - ifconfig, etc -adrian
-CRUNCH_LIBS+= ${LDADD_ifconfig}
+CRUNCH_LIBS+= ${OBJTOP}/lib/libifconfig/libifconfig.a
CRUNCH_LIBS+= -lgeom -lbsdxml -ljail -lkiconv -lmd -lsbuf -lufs
CRUNCH_BUILDOPTS+= CRUNCH_CFLAGS+=-I${OBJTOP}/lib/libifconfig
diff --git a/tools/bsdbox/Makefile.base b/tools/bsdbox/Makefile.base
index 49f31b421098..8dfc2c50c68c 100644
--- a/tools/bsdbox/Makefile.base
+++ b/tools/bsdbox/Makefile.base
@@ -9,6 +9,8 @@ CRUNCH_PROGS_bin+= ln rm kenv mv expr
CRUNCH_PROGS_usr.bin+= true false hexdump tail nc w head uname tset
CRUNCH_PROGS_usr.sbin+= gpioctl
CRUNCH_ALIAS_w= uptime
+
+CRUNCH_SRCDIR_tset= ${SRCTOP}/usr.bin/ncurses
CRUNCH_ALIAS_tset= reset
CRUNCH_PROGS_usr.bin+= vmstat
@@ -23,6 +25,7 @@ CRUNCH_LIBS+= -lprivatezstd -lthr
# Clear requires tput, and it's a shell script so it won't be crunched
CRUNCH_PROGS_usr.bin+= tput
+CRUNCH_SRCDIR_tput= ${SRCTOP}/usr.bin/ncurses
# sh
CRUNCH_PROGS_bin+= sh
diff --git a/tools/bsdbox/Makefile.hostapd b/tools/bsdbox/Makefile.hostapd
index 8c5d86d86704..4459de171242 100644
--- a/tools/bsdbox/Makefile.hostapd
+++ b/tools/bsdbox/Makefile.hostapd
@@ -3,13 +3,18 @@
#
#
.include <src.opts.mk>
+
+WPASRC?= ${SRCTOP}/usr.sbin/wpa
+
CRUNCH_PROGS_usr.sbin+= hostapd hostapd_cli
-CRUNCH_SRCDIR_hostapd= $(.CURDIR)/../../usr.sbin/wpa/hostapd
-CRUNCH_SRCDIR_hostapd_cli= $(.CURDIR)/../../usr.sbin/wpa/hostapd_cli
+CRUNCH_SRCDIR_hostapd= ${WPASRC}/hostapd
+CRUNCH_SRCDIR_hostapd_cli= ${WPASRC}/hostapd_cli
+
+CRUNCH_KEEP_hostapd+= wpa_driver_bsd_ops
-#CRUNCH_PROGS_usr.sbin+= wpa_supplicant wpa_cli
-#CRUNCH_SRCDIR_wpa_supplicant= $(.CURDIR)/../../usr.sbin/wpa/wpa_supplicant
-#CRUNCH_SRCDIR_wpa_cli= $(.CURDIR)/../../usr.sbin/wpa/wpa_cli
+CRUNCH_PROGS_usr.sbin+= wpa_supplicant wpa_cli
+CRUNCH_SRCDIR_wpa_supplicant= ${WPASRC}/wpa_supplicant
+CRUNCH_SRCDIR_wpa_cli= ${WPASRC}/wpa_cli
.if ${MK_OFED} != "no"
# libpcap dependencies if OFED is enabled
@@ -17,3 +22,14 @@ CRUNCH_LIBS+= -lmlx5 -libverbs
.endif
CRUNCH_LIBS+= -lpcap
+# hostapd
+wpalibs= drivers ap l2_packet eap_server
+wpalibs+= eapol_auth eap_common
+wpalibs+= radius tls wps common crypto utils
+
+# wpa_supplicant
+wpalibs+= eapol_supp eap_peer rsn_supp
+
+.for wpalib in ${wpalibs}
+CRUNCH_LIBS+= ${LIBWPA${wpalib:tu}}
+.endfor
diff --git a/tools/bsdbox/Makefile.net b/tools/bsdbox/Makefile.net
index 960bc8a25335..d0f7654c41d7 100644
--- a/tools/bsdbox/Makefile.net
+++ b/tools/bsdbox/Makefile.net
@@ -20,6 +20,7 @@ CRUNCH_LIBS+= -lmemstat -lnetgraph
# ifconfig
CRUNCH_PROGS_sbin+= ifconfig
+CRUNCH_LIBS_ifconfig+= ${LIBNV}
CRUNCH_SHLIBS+= -l80211
# wlan stuff
diff --git a/tools/build/Makefile b/tools/build/Makefile
index f4bb383693a8..83f589ce3864 100644
--- a/tools/build/Makefile
+++ b/tools/build/Makefile
@@ -1,9 +1,18 @@
.PATH: ${.CURDIR}/../../include
+# XXX We need to include this to avoid installing MIT KRB5 includes on
+# XXX Heimdal systems. Remove the following line when Heimdal is finally
+# XXX removed.
+.include <src.opts.mk>
+
LIB= egacy
SRC=
INCSGROUPS= INCS SYSINCS CASPERINC UFSINCS FFSINCS MSDOSFSINCS DISKINCS
INCSGROUPS+= MACHINESYSINCS RPCINCS
+.if ${MK_MITKRB5} != "no"
+INCSGROUPS+= EDITINC K5GSSRPCINC GSSAPIINC
+INCSGROUPS+= K5GSSAPIINC K52GSSAPIINC KRB5INC
+.endif
INCS=
SYSINCSDIR= ${INCLUDEDIR}/sys
@@ -15,6 +24,16 @@ MSDOSFSINCSDIR= ${INCLUDEDIR}/fs/msdosfs
DISKINCSDIR= ${INCLUDEDIR}/sys/disk
MACHINESYSINCSDIR= ${INCLUDEDIR}/machine
RPCINCSDIR= ${INCLUDEDIR}/rpc
+.if ${MK_MITKRB5} != "no"
+EDITINCDIR= ${INCLUDEDIR}/edit/readline
+K5GSSRPCINCDIR= ${INCLUDEDIR}/gssrpc
+GSSAPIINCDIR= ${INCLUDEDIR}/gssapi
+K5GSSAPIINCDIR= ${INCLUDEDIR}/gssapi_krb5
+K52GSSAPIINCDIR=${INCLUDEDIR}/gssapi_krb5/gssapi
+KRB5INCDIR= ${INCLUDEDIR}/krb5
+KDB5INCDIR= ${INCLUDEDIR}/kdb5
+KADM5INCDIR= ${INCLUDEDIR}/kadm5
+.endif
BOOTSTRAPPING?= 0
@@ -212,8 +231,11 @@ CFLAGS.closefrom.c+= -DSTDC_HEADERS -DHAVE_SYS_DIR_H -DHAVE_DIRENT_H \
-DHAVE_DIRFD -DHAVE_SYSCONF
# Provide getprogname/setprograme
SRCS+= progname.c
-# Stub implementations of fflagstostr/strtofflags
-SRCS+= fflags.c
+# Provide fflagstostr/strtofflags for mtree and makefs
+# On macOS we use the host's so conflate host and target flags, which ideally
+# we'd avoid, but in practice these align for many flags, including
+# SF_IMMUTABLE, the only flag we currently set during install.
+SRCS+= strtofflags.c
# macOS has a standalone cross-build implementation, but Linux can use the same
# ELF one as FreeBSD
@@ -248,11 +270,62 @@ subr_capability.c: ${SRCTOP}/sys/kern/subr_capability.c
cp ${.ALLSRC} ${.TARGET}
SRCS+= subr_capability.c
CLEANFILES+= subr_capability.c
+
+# Headers needed for msdosfs use in makefs
+SYSINCS+= ${SRCTOP}/sys/sys/_callout.h
+SYSINCS+= ${SRCTOP}/sys/sys/_lock.h
+SYSINCS+= ${SRCTOP}/sys/sys/_lockmgr.h
+SYSINCS+= ${SRCTOP}/sys/sys/_task.h
.endif # ${MAKE.OS} != "FreeBSD"
CASPERINC+= ${SRCTOP}/lib/libcasper/services/cap_fileargs/cap_fileargs.h
CASPERINC+= ${SRCTOP}/lib/libcasper/services/cap_net/cap_net.h
+.if ${MK_MITKRB5} != "no"
+EDITINC+= ${SRCTOP}/contrib/libedit/readline/readline.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth_gss.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth_gssapi.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/auth_unix.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/clnt.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/netdb.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/pmap_clnt.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/pmap_prot.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/pmap_rmt.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/rpc_msg.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/rpc.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/svc_auth.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/svc.h
+K5GSSRPCINC+= ${SRCTOP}/krb5/include/gssrpc/types.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/xdr.h
+K5GSSRPCINC+= ${SRCTOP}/crypto/krb5/src/include/gssrpc/xdr.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/krb5/gssapi_krb5.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/generic/gssapi_alloc.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/generic/gssapi_generic.h
+GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/lib/gssapi/generic/gssapi_ext.h
+K5GSSAPIINC+= ${SRCTOP}/crypto/krb5/src/include/gssapi.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/ccselect_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/certauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/clpreauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/hostrealm_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kadm5_auth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kadm5_hook_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kdcpolicy_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/kdcpreauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/localauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/locate_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/preauth_plugin.h
+KRB5INC+= ${SRCTOP}/crypto/krb5/src/include/krb5/pwqual_plugin.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/gssapi.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/kdb.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/krb5.h
+INCS+= ${SRCTOP}/crypto/krb5/src/include/krad.h
+INCS+= ${SRCTOP}/crypto/krb5/src/util/et/com_err.h
+INCS+= ${SRCTOP}/crypto/krb5/src/util/verto/verto-module.h
+INCS+= ${SRCTOP}/crypto/krb5/src/util/verto/verto.h
+.endif
+
.if empty(SRCS)
SRCS= dummy.c
.endif
diff --git a/tools/build/cross-build/fflags.c b/tools/build/cross-build/fflags.c
deleted file mode 100644
index f1d23c3637b6..000000000000
--- a/tools/build/cross-build/fflags.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause
- *
- * Copyright 2018-2020 Alex Richardson <arichardson@FreeBSD.org>
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory (Department of Computer Science and
- * Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
- * DARPA SSITH research programme.
- *
- * This software was developed by SRI International and the University of
- * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
- * ("CTSRD"), as part of the DARPA CRASH research programme.
- *
- * This work was supported by Innovate UK project 105694, "Digital Security by
- * Design (DSbD) Technology Platform Prototype".
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <string.h>
-#include <unistd.h>
-
-char *
-fflagstostr(u_long flags __unused)
-{
- return strdup("");
-}
-
-int
-strtofflags(char **stringp __unused, u_long *setp, u_long *clrp)
-{
- /* On linux just ignore the file flags for now */
- /*
- * XXX: this will prevent makefs from setting noschg on libc, etc.
- * so we should really find a way to support flags in disk images.
- */
- if (setp)
- *setp = 0;
- if (clrp)
- *clrp = 0;
- return (0); /* success */
-}
diff --git a/tools/build/cross-build/include/common/exterr.h b/tools/build/cross-build/include/common/exterr.h
new file mode 100644
index 000000000000..62482841c7b2
--- /dev/null
+++ b/tools/build/cross-build/include/common/exterr.h
@@ -0,0 +1,14 @@
+#ifndef _EXTERR_H_
+#define _EXTERR_H_
+
+#include <sys/types.h>
+
+static inline int
+uexterr_gettext(char *buf, size_t bufsz)
+{
+ if (bufsz > 0)
+ buf[0] = '\0';
+ return (0);
+}
+
+#endif
diff --git a/tools/build/cross-build/include/common/libutil.h b/tools/build/cross-build/include/common/libutil.h
index 15afd2fbca15..3cda32379965 100644
--- a/tools/build/cross-build/include/common/libutil.h
+++ b/tools/build/cross-build/include/common/libutil.h
@@ -39,4 +39,4 @@
#include_next <libutil.h>
#endif
-int expand_number(const char *_buf, uint64_t *_num);
+int expand_number(const char *_buf, int64_t *_num);
diff --git a/tools/build/cross-build/include/common/sys/_types.h b/tools/build/cross-build/include/common/sys/_types.h
index 408f0537d1e6..dc1b76f25063 100644
--- a/tools/build/cross-build/include/common/sys/_types.h
+++ b/tools/build/cross-build/include/common/sys/_types.h
@@ -48,3 +48,6 @@ typedef __builtin_va_list __va_list;
/* Needed for opensolaris compat. */
typedef __int64_t off64_t;
+
+/* Needed for sys/_callout.h */
+typedef __int64_t __sbintime_t;
diff --git a/tools/build/cross-build/include/common/sys/exterrvar.h b/tools/build/cross-build/include/common/sys/exterrvar.h
new file mode 100644
index 000000000000..0ba821aadef2
--- /dev/null
+++ b/tools/build/cross-build/include/common/sys/exterrvar.h
@@ -0,0 +1,6 @@
+#ifndef _SYS_EXTERRVAR_H_
+#define _SYS_EXTERRVAR_H_
+
+#define UEXTERROR_MAXLEN 256
+
+#endif
diff --git a/tools/build/cross-build/include/linux/libutil.h b/tools/build/cross-build/include/linux/libutil.h
index 8f9ca406edc1..a1d6508be82d 100644
--- a/tools/build/cross-build/include/linux/libutil.h
+++ b/tools/build/cross-build/include/linux/libutil.h
@@ -46,7 +46,7 @@ struct pidfh;
__BEGIN_DECLS
int humanize_number(char *buf, size_t len, int64_t bytes, const char *suffix,
int scale, int flags);
-int expand_number(const char *_buf, uint64_t *_num);
+int expand_number(const char *_buf, int64_t *_num);
int flopen(const char *_path, int _flags, ...);
int flopenat(int dirfd, const char *path, int flags, ...);
diff --git a/tools/build/cross-build/include/linux/sys/stat.h b/tools/build/cross-build/include/linux/sys/stat.h
index 5937920ce461..1a69e127c2e1 100644
--- a/tools/build/cross-build/include/linux/sys/stat.h
+++ b/tools/build/cross-build/include/linux/sys/stat.h
@@ -66,5 +66,25 @@
#define ALLPERMS (S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO)
#endif
+#define UF_SETTABLE 0x0000ffff
+#define UF_NODUMP 0x00000001
+#define UF_IMMUTABLE 0x00000002
+#define UF_APPEND 0x00000004
+#define UF_OPAQUE 0x00000008
+#define UF_NOUNLINK 0x00000010
+#define UF_SYSTEM 0x00000080
+#define UF_SPARSE 0x00000100
+#define UF_OFFLINE 0x00000200
+#define UF_REPARSE 0x00000400
+#define UF_ARCHIVE 0x00000800
+#define UF_READONLY 0x00001000
+#define UF_HIDDEN 0x00008000
+#define SF_SETTABLE 0xffff0000
+#define SF_ARCHIVED 0x00010000
+#define SF_IMMUTABLE 0x00020000
+#define SF_APPEND 0x00040000
+#define SF_NOUNLINK 0x00100000
+#define SF_SNAPSHOT 0x00200000
+
/* This include is needed for OpenZFS bootstrap */
#include <sys/mount.h>
diff --git a/tools/build/cross-build/include/mac/endian.h b/tools/build/cross-build/include/mac/endian.h
new file mode 100644
index 000000000000..11788044f05a
--- /dev/null
+++ b/tools/build/cross-build/include/mac/endian.h
@@ -0,0 +1,7 @@
+/*
+ * Copyright (c) 2025 John Baldwin <jhb@FreeBSD.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#include <sys/endian.h>
diff --git a/tools/build/cross-build/include/mac/string.h b/tools/build/cross-build/include/mac/string.h
index d7db0d3023a4..58464f1f9834 100644
--- a/tools/build/cross-build/include/mac/string.h
+++ b/tools/build/cross-build/include/mac/string.h
@@ -38,9 +38,12 @@
#include_next <string.h>
/*
- * strchrnul is not provided by macOS and the strchrnul.c implementation
- * can not be compiled on macOS so just provide it inline here
+ * strchrnul is provided by macOS 15.4 and later. However, there is
+ * no good way to detect the current host version at compile time, so
+ * provide an inline definition under an alternate name.
*/
+#define strchrnul(p, ch) __freebsd_strchrnul(p, ch)
+
static inline char *
strchrnul(const char *p, int ch)
{
diff --git a/tools/build/depend-cleanup.sh b/tools/build/depend-cleanup.sh
index eec073feca19..33ca8ecb709f 100755
--- a/tools/build/depend-cleanup.sh
+++ b/tools/build/depend-cleanup.sh
@@ -337,3 +337,26 @@ if [ $MACHINE_ARCH = aarch64 ]; then
# 20250110 3f224333af16 add timingsafe_memcmp() assembly implementation
ALL_libcompats= clean_dep lib/libc timingsafe_memcmp c
fi
+
+# 20250402 839d0755fea8 ctld converted to C++
+clean_dep usr.sbin/ctld ctld c
+clean_dep usr.sbin/ctld conf c
+clean_dep usr.sbin/ctld discovery c
+clean_dep usr.sbin/ctld isns c
+clean_dep usr.sbin/ctld kernel c
+clean_dep usr.sbin/ctld login c
+clean_dep usr.sbin/ctld uclparse c
+
+# 20250425 2e47f35be5dc libllvm, libclang and liblldb became shared libraries
+if [ -f "$OBJTOP"/lib/clang/libllvm/libllvm.a ]; then
+ echo "Removing old static libllvm library"
+ run rm -f "$OBJTOP"/lib/clang/libllvm/libllvm.a
+fi
+if [ -f "$OBJTOP"/lib/clang/libclang/libclang.a ]; then
+ echo "Removing old static libclang library"
+ run rm -f "$OBJTOP"/lib/clang/libclang/libclang.a
+fi
+if [ -f "$OBJTOP"/lib/clang/liblldb/liblldb.a ]; then
+ echo "Removing old static liblldb library"
+ run rm -f "$OBJTOP"/lib/clang/liblldb/liblldb.a
+fi
diff --git a/tools/build/make.py b/tools/build/make.py
index ec42cb70dd21..2f36a3e23e32 100755
--- a/tools/build/make.py
+++ b/tools/build/make.py
@@ -34,12 +34,24 @@
# On FreeBSD you can use it the same way as just calling make:
# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py buildworld -DWITH_FOO`
#
-# On Linux and MacOS you will either need to set XCC/XCXX/XLD/XCPP or pass
-# --cross-bindir to specify the path to the cross-compiler bindir:
-# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py
-# --cross-bindir=/path/to/cross/compiler buildworld -DWITH_FOO TARGET=foo
-# TARGET_ARCH=bar`
+# On Linux and MacOS you may need to explicitly indicate the cross toolchain
+# to use. You can do this by:
+# - setting XCC/XCXX/XLD/XCPP to the paths of each tool
+# - using --cross-bindir to specify the path to the cross-compiler bindir:
+# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py
+# --cross-bindir=/path/to/cross/compiler buildworld -DWITH_FOO TARGET=foo
+# TARGET_ARCH=bar`
+# - using --cross-toolchain to specify the package containing the cross-compiler
+# (MacOS only currently):
+# `MAKEOBJDIRPREFIX=~/obj ./tools/build/make.py
+# --cross-toolchain=llvm@NN buildworld -DWITH_FOO TARGET=foo
+# TARGET_ARCH=bar`
+#
+# On MacOS, this tool will search for an llvm toolchain installed via brew and
+# use it as the cross toolchain if an explicit toolchain is not specified.
+
import argparse
+import functools
import os
import shlex
import shutil
@@ -159,7 +171,8 @@ def check_required_make_env_var(varname, binary_name, bindir):
return
if not bindir:
sys.exit("Could not infer value for $" + varname + ". Either set $" +
- varname + " or pass --cross-bindir=/cross/compiler/dir/bin")
+ varname + " or pass --cross-bindir=/cross/compiler/dir/bin" +
+ " or --cross-toolchain=<package>")
# try to infer the path to the tool
guess = os.path.join(bindir, binary_name)
if not os.path.isfile(guess):
@@ -178,24 +191,45 @@ def check_xtool_make_env_var(varname, binary_name):
return
global parsed_args
if parsed_args.cross_bindir is None:
- parsed_args.cross_bindir = default_cross_toolchain()
+ cross_bindir = cross_toolchain_bindir(binary_name,
+ parsed_args.cross_toolchain)
+ else:
+ cross_bindir = parsed_args.cross_bindir
return check_required_make_env_var(varname, binary_name,
- parsed_args.cross_bindir)
+ cross_bindir)
+
+
+@functools.cache
+def brew_prefix(package: str) -> str:
+ path = subprocess.run(["brew", "--prefix", package], stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE).stdout.strip()
+ debug("Inferred", package, "dir as", path)
+ return path.decode("utf-8")
+def binary_path(bindir: str, binary_name: str) -> "Optional[str]":
+ try:
+ if bindir and Path(bindir, "bin", binary_name).exists():
+ return str(Path(bindir, "bin"))
+ except OSError:
+ pass
+ return None
-def default_cross_toolchain():
+def cross_toolchain_bindir(binary_name: str, package: "Optional[str]") -> str:
# default to homebrew-installed clang on MacOS if available
if sys.platform.startswith("darwin"):
if shutil.which("brew"):
- llvm_dir = subprocess.run([
- "brew", "--prefix", "llvm"],
- stdout=subprocess.PIPE, stderr=subprocess.PIPE).stdout.strip()
- debug("Inferred LLVM dir as", llvm_dir)
- try:
- if llvm_dir and Path(llvm_dir.decode("utf-8"), "bin").exists():
- return str(Path(llvm_dir.decode("utf-8"), "bin"))
- except OSError:
- return None
+ if not package:
+ package = "llvm"
+ bindir = binary_path(brew_prefix(package), binary_name)
+ if bindir:
+ return bindir
+
+ # brew installs lld as a separate package for LLVM 19 and later
+ if binary_name == "ld.lld":
+ lld_package = package.replace("llvm", "lld")
+ bindir = binary_path(brew_prefix(lld_package), binary_name)
+ if bindir:
+ return bindir
return None
@@ -215,6 +249,10 @@ if __name__ == "__main__":
help="Compiler type to find in --cross-bindir (only "
"needed if XCC/XCPP/XLD are not set)"
"Note: using CC is currently highly experimental")
+ parser.add_argument("--cross-toolchain", default=None,
+ help="Name of package containing cc/c++/cpp/ld to build "
+ "target binaries (only needed if XCC/XCPP/XLD "
+ "are not set)")
parser.add_argument("--host-compiler-type", choices=("cc", "clang", "gcc"),
default="cc",
help="Compiler type to find in --host-bindir (only "
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
index 864057692566..0781dc331e95 100644
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -55,10 +55,6 @@ OLD_FILES+=usr/share/man/man8/acpidump.8.gz
OLD_FILES+=usr/share/man/man8/iasl.8.gz
.endif
-.if ${MK_ACPI} == no && ${MK_APM} == no
-OLD_FILES+=etc/rc.d/powerd
-.endif
-
.if ${MK_APM} == no
OLD_FILES+=etc/rc.d/apm
OLD_FILES+=etc/rc.d/apmd
@@ -361,7 +357,6 @@ OLD_FILES+=boot/shortcuts.4th
OLD_FILES+=boot/support.4th
OLD_FILES+=boot/userboot.so
OLD_FILES+=boot/version.4th
-OLD_FILES+=boot/zfsboot
OLD_FILES+=boot/zfsloader
OLD_FILES+=usr/lib/kgzldr.o
OLD_FILES+=usr/share/man/man5/loader.conf.5.gz
@@ -378,7 +373,6 @@ OLD_FILES+=usr/share/man/man8/menu.4th.8.gz
OLD_FILES+=usr/share/man/man8/menusets.4th.8.gz
OLD_FILES+=usr/share/man/man8/pxeboot.8.gz
OLD_FILES+=usr/share/man/man8/version.4th.8.gz
-OLD_FILES+=usr/share/man/man8/zfsboot.8.gz
OLD_FILES+=usr/share/man/man8/zfsloader.8.gz
.endif
@@ -413,6 +407,8 @@ OLD_FILES+=usr/libexec/bsdinstall/distfetch
OLD_FILES+=usr/libexec/bsdinstall/docsinstall
OLD_FILES+=usr/libexec/bsdinstall/entropy
OLD_FILES+=usr/libexec/bsdinstall/fetchmissingdists
+OLD_FILES+=usr/libexec/bsdinstall/finalconfig
+OLD_FILES+=usr/libexec/bsdinstall/firmware
OLD_FILES+=usr/libexec/bsdinstall/hardening
OLD_FILES+=usr/libexec/bsdinstall/hostname
OLD_FILES+=usr/libexec/bsdinstall/jail
@@ -423,6 +419,7 @@ OLD_FILES+=usr/libexec/bsdinstall/netconfig
OLD_FILES+=usr/libexec/bsdinstall/netconfig_ipv4
OLD_FILES+=usr/libexec/bsdinstall/netconfig_ipv6
OLD_FILES+=usr/libexec/bsdinstall/partedit
+OLD_FILES+=usr/libexec/bsdinstall/pkgbase
OLD_FILES+=usr/libexec/bsdinstall/rootpass
OLD_FILES+=usr/libexec/bsdinstall/runconsoles
OLD_FILES+=usr/libexec/bsdinstall/script
@@ -462,7 +459,7 @@ OLD_FILES+=usr/include/bsnmp/snmpclient.h
OLD_FILES+=usr/include/bsnmp/snmpmod.h
OLD_FILES+=usr/lib/libbsnmp.a
OLD_FILES+=usr/lib/libbsnmp.so
-OLD_LIBS+=usr/lib/libbsnmp.so.6
+OLD_LIBS+=usr/lib/libbsnmp.so.7
OLD_FILES+=usr/lib/libbsnmp_p.a
OLD_FILES+=usr/lib/libbsnmptools.a
OLD_FILES+=usr/lib/libbsnmptools.so
@@ -875,6 +872,15 @@ OLD_FILES+=usr/share/man/man4/ccd.4.gz
OLD_FILES+=usr/share/man/man8/ccdconfig.8.gz
.endif
+.if ${MK_CLANG} == no && ${MK_CLANG_FORMAT} == no && ${MK_LLDB} == no
+OLD_LIBS+=usr/lib/libprivateclang.so.19
+.endif
+
+.if ${MK_CLANG_EXTRAS} == no && ${MK_CLANG} == no && ${MK_LLDB} == no && \
+ ${MK_LLD} == no && ${MK_LLVM_BINUTILS} == no && ${MK_LLVM_COV} == no
+OLD_LIBS+=usr/lib/libprivatellvm.so.19
+.endif
+
.if ${MK_CLANG} == no && ${MK_LLVM_BINUTILS} == no
OLD_FILES+=usr/bin/llvm-addr2line
OLD_FILES+=usr/bin/llvm-ar
@@ -1433,6 +1439,10 @@ OLD_LIBS+=${DEBUG_LIBS}
.endif
.endif
+.if ${MK_DETECT_TZ_CHANGES} == no
+OLD_FILES+=tests/lib/libc/stdtime/detect_tz_changes_test
+.endif
+
.if ${MK_DIALOG} == no
OLD_FILES+=usr/bin/dialog
OLD_FILES+=usr/bin/dpv
@@ -1461,12 +1471,12 @@ OLD_DIRS+=usr/share/dict
.endif
.if ${MK_DMAGENT} == no
+OLD_FILES+=etc/dma/auth.conf
OLD_FILES+=etc/dma/dma.conf
OLD_DIRS+=etc/dma
OLD_FILES+=usr/libexec/dma
OLD_FILES+=usr/libexec/dma-mbox-create
OLD_FILES+=usr/share/man/man8/dma.8.gz
-OLD_FILES+=usr/share/examples/dma/auth.conf
OLD_FILES+=usr/share/examples/dma/mailer.conf
OLD_DIRS+=usr/share/examples/dma
.endif
@@ -1629,6 +1639,7 @@ OLD_FILES+=usr/bin/ree
OLD_FILES+=usr/share/man/man1/edit.1.gz
OLD_FILES+=usr/share/man/man1/ee.1.gz
OLD_FILES+=usr/share/man/man1/ree.1.gz
+OLD_FILES+=usr/share/misc/init.ee
OLD_FILES+=usr/share/nls/C/ee.cat
OLD_FILES+=usr/share/nls/de_DE.ISO8859-1/ee.cat
OLD_FILES+=usr/share/nls/fr_FR.ISO8859-1/ee.cat
@@ -1675,9 +1686,6 @@ OLD_FILES+=usr/share/examples/diskless/README.BOOTP
OLD_FILES+=usr/share/examples/diskless/README.TEMPLATING
OLD_FILES+=usr/share/examples/diskless/clone_root
OLD_FILES+=usr/share/examples/dma/mailer.conf
-OLD_FILES+=usr/share/examples/drivers/README
-OLD_FILES+=usr/share/examples/drivers/make_device_driver.sh
-OLD_FILES+=usr/share/examples/drivers/make_pseudo_driver.sh
OLD_FILES+=usr/share/examples/dwatch/profile_template
OLD_FILES+=usr/share/examples/etc/README.examples
OLD_FILES+=usr/share/examples/etc/bsd-style-copyright
@@ -1904,7 +1912,6 @@ OLD_DIRS+=usr/share/examples/bsdconfig
OLD_DIRS+=usr/share/examples/csh
OLD_DIRS+=usr/share/examples/diskless
OLD_DIRS+=usr/share/examples/dma
-OLD_DIRS+=usr/share/examples/drivers
OLD_DIRS+=usr/share/examples/dwatch
OLD_DIRS+=usr/share/examples/etc
OLD_DIRS+=usr/share/examples/etc/defaults
@@ -1984,6 +1991,32 @@ OLD_FILES+=usr/share/man/man8/fdcontrol.8.gz
.endif
.if ${MK_FORTH} == no
+OLD_FILES+=boot/beastie.4th
+OLD_FILES+=boot/brand-fbsd.4th
+OLD_FILES+=boot/brand.4th
+OLD_FILES+=boot/check-password.4th
+OLD_FILES+=boot/color.4th
+OLD_FILES+=boot/delay.4th
+OLD_FILES+=boot/efi.4th
+OLD_FILES+=boot/frames.4th
+OLD_FILES+=boot/loader_4th
+OLD_FILES+=boot/loader_4th.efi
+OLD_FILES+=boot/loader_4th.efi.old
+OLD_FILES+=boot/loader_4th.old
+OLD_FILES+=boot/loader.4th
+OLD_FILES+=boot/logo-beastie.4th
+OLD_FILES+=boot/logo-beastiebw.4th
+OLD_FILES+=boot/logo-fbsdbw.4th
+OLD_FILES+=boot/logo-orb.4th
+OLD_FILES+=boot/logo-orbbw.4th
+OLD_FILES+=boot/menu-commands.4th
+OLD_FILES+=boot/menu.4th
+OLD_FILES+=boot/menusets.4th
+OLD_FILES+=boot/screen.4th
+OLD_FILES+=boot/shortcuts.4th
+OLD_FILES+=boot/support.4th
+OLD_LIBS+=boot/userboot_4th.so
+OLD_FILES+=boot/version.4th
OLD_FILES+=usr/share/man/man8/beastie.4th.8.gz
OLD_FILES+=usr/share/man/man8/brand.4th.8.gz
OLD_FILES+=usr/share/man/man8/check-password.4th.8.gz
@@ -2226,6 +2259,12 @@ OLD_FILES+=usr/share/man/man3/gpio_pin_tristate.3.gz
OLD_FILES+=usr/share/man/man8/gpioctl.8.gz
.endif
+.if ${MK_GSSAPI} == "no" || ${MK_KERBEROS_SUPPORT} == "no"
+OLD_FILES+=etc/rc.d/gssd
+OLD_FILES+=usr/sbin/gssd
+OLD_FILES+=usr/share/man/man8/gssd.8.gz
+.endif
+
.if ${MK_GSSAPI} == no
OLD_FILES+=usr/include/gssapi/gssapi.h
OLD_DIRS+=usr/include/gssapi
@@ -2237,7 +2276,6 @@ OLD_FILES+=usr/lib/libgssapi_p.a
OLD_FILES+=usr/lib/librpcsec_gss.a
OLD_FILES+=usr/lib/librpcsec_gss.so
OLD_LIBS+=usr/lib/librpcsec_gss.so.1
-OLD_FILES+=usr/sbin/gssd
OLD_FILES+=usr/share/man/man3/gss_accept_sec_context.3.gz
OLD_FILES+=usr/share/man/man3/gss_acquire_cred.3.gz
OLD_FILES+=usr/share/man/man3/gss_add_cred.3.gz
@@ -2296,7 +2334,6 @@ OLD_FILES+=usr/share/man/man3/rpc_gss_svc_max_data_length.3.gz
OLD_FILES+=usr/share/man/man3/rpcsec_gss.3.gz
OLD_FILES+=usr/share/man/man5/mech.5.gz
OLD_FILES+=usr/share/man/man5/qop.5.gz
-OLD_FILES+=usr/share/man/man8/gssd.8.gz
.endif
.if ${MK_HAST} == no
@@ -2654,6 +2691,7 @@ OLD_FILES+=usr/share/man/man8/ippool.8.gz
.if ${MK_IPFW} == no
OLD_FILES+=etc/rc.d/ipfw
+OLD_FILES+=etc/rc.d/natd
OLD_FILES+=etc/periodic/security/500.ipfwdenied
OLD_FILES+=etc/periodic/security/550.ipfwlimit
OLD_FILES+=sbin/ipfw
@@ -2696,6 +2734,8 @@ OLD_FILES+=usr/share/man/man1/truss.1.gz
.endif
.if ${MK_KERBEROS} == no
+.if ${MK_MITKRB5} == no
+# Remove Heimdal because we do not want Kerberos
OLD_FILES+=etc/rc.d/ipropd_master
OLD_FILES+=etc/rc.d/ipropd_slave
OLD_FILES+=usr/bin/asn1_compile
@@ -2720,12 +2760,16 @@ OLD_FILES+=usr/include/asn1-common.h
OLD_FILES+=usr/include/asn1_err.h
OLD_FILES+=usr/include/base64.h
OLD_FILES+=usr/include/cms_asn1.h
+OLD_FILES+=usr/include/common.h
OLD_FILES+=usr/include/crmf_asn1.h
OLD_FILES+=usr/include/der-private.h
OLD_FILES+=usr/include/der-protos.h
OLD_FILES+=usr/include/der.h
OLD_FILES+=usr/include/digest_asn1.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
OLD_FILES+=usr/include/getarg.h
+OLD_FILES+=usr/include/groups.h
OLD_FILES+=usr/include/gssapi/gssapi_krb5.h
OLD_FILES+=usr/include/hdb-protos.h
OLD_FILES+=usr/include/hdb.h
@@ -2742,6 +2786,7 @@ OLD_FILES+=usr/include/hx509-private.h
OLD_FILES+=usr/include/hx509-protos.h
OLD_FILES+=usr/include/hx509.h
OLD_FILES+=usr/include/hx509_err.h
+OLD_FILES+=usr/include/iana.h
OLD_FILES+=usr/include/k524_err.h
OLD_FILES+=usr/include/kadm5/admin.h
OLD_FILES+=usr/include/kadm5/kadm5-private.h
@@ -2780,6 +2825,8 @@ OLD_FILES+=usr/include/resolve.h
OLD_FILES+=usr/include/rfc2459_asn1.h
OLD_FILES+=usr/include/roken-common.h
OLD_FILES+=usr/include/rtbl.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
OLD_FILES+=usr/include/wind.h
OLD_FILES+=usr/include/wind_err.h
OLD_FILES+=usr/include/xdbm.h
@@ -2795,6 +2842,9 @@ OLD_FILES+=usr/lib/libgssapi_krb5.a
OLD_FILES+=usr/lib/libgssapi_krb5.so
OLD_LIBS+=usr/lib/libgssapi_krb5.so.10
OLD_FILES+=usr/lib/libgssapi_krb5_p.a
+OLD_FILES+=usr/lib/libgssapi_mech.a
+OLD_FILES+=usr/lib/libgssapi_mech.so
+OLD_LIBS+=usr/lib/libgssapi_mech.so.10
OLD_FILES+=usr/lib/libgssapi_ntlm.a
OLD_FILES+=usr/lib/libgssapi_ntlm.so
OLD_LIBS+=usr/lib/libgssapi_ntlm.so.10
@@ -2851,10 +2901,6 @@ OLD_FILES+=usr/lib/libwind.a
OLD_FILES+=usr/lib/libwind.so
OLD_LIBS+=usr/lib/libwind.so.11
OLD_FILES+=usr/lib/libwind_p.a
-OLD_FILES+=usr/lib/pam_krb5.so
-OLD_LIBS+=usr/lib/pam_krb5.so.6
-OLD_FILES+=usr/lib/pam_ksu.so
-OLD_LIBS+=usr/lib/pam_ksu.so.6
OLD_FILES+=usr/lib/libprivateheimipcc.a
OLD_FILES+=usr/lib/libprivateheimipcc.so
OLD_LIBS+=usr/lib/libprivateheimipcc.so.11
@@ -3590,13 +3636,3267 @@ OLD_FILES+=usr/share/man/man8/kimpersonate.8.gz
OLD_FILES+=usr/share/man/man8/kpasswdd.8.gz
OLD_FILES+=usr/share/man/man8/kstash.8.gz
OLD_FILES+=usr/share/man/man8/ktutil.8.gz
-OLD_FILES+=usr/share/man/man8/pam_krb5.8.gz
-OLD_FILES+=usr/share/man/man8/pam_ksu.8.gz
OLD_FILES+=usr/share/man/man8/string2key.8.gz
OLD_FILES+=usr/share/man/man8/verify_krb5_conf.8.gz
+.else
+# Remove MIT KRB5 because we do not want Kerberos
+OLD_FILES+=usr/bin/compile_et
+OLD_FILES+=usr/bin/gss-client
+OLD_FILES+=usr/bin/k5srvutil
+OLD_FILES+=usr/bin/kadmin
+OLD_FILES+=usr/bin/kdestroy
+OLD_FILES+=usr/bin/kinit
+OLD_FILES+=usr/bin/klist
+OLD_FILES+=usr/bin/kpasswd
+OLD_FILES+=usr/bin/krb5-config
+OLD_FILES+=usr/bin/ksu
+OLD_FILES+=usr/bin/kswitch
+OLD_FILES+=usr/bin/ktutil
+OLD_FILES+=usr/bin/kvno
+OLD_FILES+=usr/bin/sclient
+OLD_FILES+=usr/bin/sim_client
+OLD_FILES+=usr/bin/uuclient
+OLD_FILES+=etc/rc.d/kpropd
+OLD_FILES+=usr/include/com_err.h
+OLD_FILES+=usr/include/common.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
+OLD_FILES+=usr/include/groups.h
+OLD_FILES+=usr/include/gssapi.h
+OLD_FILES+=usr/include/gssapi/gssapi.h
+OLD_FILES+=usr/include/gssapi/gssapi_alloc.h
+OLD_FILES+=usr/include/gssapi/gssapi_ext.h
+OLD_FILES+=usr/include/gssapi/gssapi_generic.h
+OLD_FILES+=usr/include/gssapi/gssapi_krb5.h
+OLD_FILES+=usr/include/gssapi/mechglue.h
+OLD_FILES+=usr/include/gssrpc/auth.h
+OLD_FILES+=usr/include/gssrpc/auth_gss.h
+OLD_FILES+=usr/include/gssrpc/auth_gssapi.h
+OLD_FILES+=usr/include/gssrpc/auth_unix.h
+OLD_FILES+=usr/include/gssrpc/clnt.h
+OLD_FILES+=usr/include/gssrpc/netdb.h
+OLD_FILES+=usr/include/gssrpc/pmap_clnt.h
+OLD_FILES+=usr/include/gssrpc/pmap_prot.h
+OLD_FILES+=usr/include/gssrpc/pmap_rmt.h
+OLD_FILES+=usr/include/gssrpc/rename.h
+OLD_FILES+=usr/include/gssrpc/rpc.h
+OLD_FILES+=usr/include/gssrpc/rpc_msg.h
+OLD_FILES+=usr/include/gssrpc/svc.h
+OLD_FILES+=usr/include/gssrpc/svc_auth.h
+OLD_FILES+=usr/include/gssrpc/types.h
+OLD_FILES+=usr/include/gssrpc/xdr.h
+OLD_FILES+=usr/include/iana.h
+OLD_FILES+=usr/include/kadm5/admin.h
+OLD_FILES+=usr/include/kadm5/chpass_util_strings.h
+OLD_FILES+=usr/include/kadm5/kadm_err.h
+OLD_FILES+=usr/include/kdb.h
+OLD_FILES+=usr/include/krad.h
+OLD_FILES+=usr/include/krb5.h
+OLD_FILES+=usr/include/krb5/ccselect_plugin.h
+OLD_FILES+=usr/include/krb5/certauth_plugin.h
+OLD_FILES+=usr/include/krb5/clpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/hostrealm_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_auth_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_hook_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpolicy_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/krb5.h
+OLD_FILES+=usr/include/krb5/localauth_plugin.h
+OLD_FILES+=usr/include/krb5/locate_plugin.h
+OLD_FILES+=usr/include/krb5/plugin.h
+OLD_FILES+=usr/include/krb5/preauth_plugin.h
+OLD_FILES+=usr/include/krb5/pwqual_plugin.h
+OLD_FILES+=usr/include/profile.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
+OLD_FILES+=usr/include/verto-module.h
+OLD_FILES+=usr/include/verto.h
+OLD_FILES+=usr/lib/krb5/plugins/kdb/db2.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/otp.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/pkinit.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/spake.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/test.so
+OLD_FILES+=usr/lib/krb5/plugins/tls/k5tls.so
+OLD_FILES+=usr/lib/libcom_err.a
+OLD_LIBS+=usr/lib/libcom_err.so
+OLD_LIBS+=usr/lib/libcom_err.so.122
+OLD_FILES+=usr/lib/libgssapi_krb5.so
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.122
+OLD_FILES+=usr/lib/libgssrpc.so
+OLD_LIBS+=usr/lib/libgssrpc.so.122
+OLD_FILES+=usr/lib/libk5crypto.so
+OLD_LIBS+=usr/lib/libk5crypto.so.122
+OLD_FILES+=usr/lib/libkadm5clnt.so
+OLD_FILES+=usr/lib/libkadm5clnt_mit.so
+OLD_LIBS+=usr/lib/libkadm5clnt_mit.so.122
+OLD_FILES+=usr/lib/libkadm5srv.so
+OLD_FILES+=usr/lib/libkadm5srv_mit.so
+OLD_LIBS+=usr/lib/libkadm5srv_mit.so.122
+OLD_FILES+=usr/lib/libkdb5.so
+OLD_LIBS+=usr/lib/libkdb5.so.122
+OLD_FILES+=usr/lib/libkrad.so
+OLD_LIBS+=usr/lib/libkrad.so.122
+OLD_FILES+=usr/lib/libkrb5.so
+OLD_LIBS+=usr/lib/libkrb5.so.122
+OLD_FILES+=usr/lib/libkrb5profile.a
+OLD_FILES+=usr/lib/libkrb5profile.so
+OLD_LIBS+=usr/lib/libkrb5profile.so.122
+OLD_FILES+=usr/lib/libkrb5support.a
+OLD_FILES+=usr/lib/libkrb5support.so
+OLD_LIBS+=usr/lib/libkrb5support.so.122
+OLD_FILES+=usr/lib/libverto.so
+OLD_LIBS+=usr/lib/libverto.so.122
+OLD_FILES+=usr/libdata/pkgconfig/gssrpc.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-client.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-server.pc
+OLD_FILES+=usr/libdata/pkgconfig/kdb.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5.pc
+OLD_FILES+=usr/libexec/krb5kdc
+OLD_FILES+=usr/libexec/kadmind
+OLD_FILES+=usr/libexec/kprop
+OLD_FILES+=usr/libexec/kpropd
+OLD_FILES+=usr/sbin/gss-server
+OLD_FILES+=usr/sbin/kadmin.local
+OLD_FILES+=usr/sbin/kdb5_util
+OLD_FILES+=usr/sbin/kproplog
+OLD_FILES+=usr/sbin/krb5-send-pr
+OLD_FILES+=usr/sbin/sim_server
+OLD_FILES+=usr/sbin/sserver
+OLD_FILES+=usr/sbin/uuserver
+OLD_FILES+=usr/share/doc/krb5/doc/html/.buildinfo
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/agogo.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/basic.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgfooter.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgtop.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/doctools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/documentation_options.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/file.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/jquery.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/kerb.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/language_data.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/minus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/plus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/pygments.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/searchtools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/underscore.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/about.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/k5srvutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmin_local.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmind.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_ldap_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kprop.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kpropd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kproplog.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/krb5kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/ktutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/sserver.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/retiring-des.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/appl_servers.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/auth_indicator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/backup_host.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kadm5_acl.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kdc_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/krb5_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_ldap.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/database.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dbtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dictionary.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/env_variables.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/host_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/https.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_appl_srv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_clients.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/lockout.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/otp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/pkinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/princ_dns.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/realm_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/spake.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/troubleshoot.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/various_envs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/h5l_mit_apidiff.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/princ_handle.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_425_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_convert_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_order.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_allow_weak_crypto.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_aname_to_localname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_genaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_get_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getauthenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremoteseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremotesubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_initivector.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_req_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setports.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setuseruserkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_alloc_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_block_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_checksum_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_derive_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_enctype_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_free_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_fx_cf2_simple.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_init_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_coll_proof_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_keyed_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keyed_checksum_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keylengths.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_padding_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_add_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_make_octets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_os_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_seed.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key_with_params.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_calculate_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_cache_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_destroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_gen_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_full_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_initialize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_move.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_new_unique.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_next_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_remove_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_retrieve_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_select.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_store_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_support_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_next.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_change_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_check_clockskew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_checksum_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_chpw_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cksumtype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_clear_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_deltat_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_eblock_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_expand_hostname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_find_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cksumtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cred_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keytab_entry_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_unparsed_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_fwd_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_renew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_validate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_etype_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_fallback_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_skey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_alloc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_address_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_anonymous.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_etype_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_forwardable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pa.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pac_request.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_proxiable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_renew_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_responder.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_permitted_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_prompt_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_renewed_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_server_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_time_offsets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_validated_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_service.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_secure_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_config_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_referral_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_thread_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_create_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_free_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_reference_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_sign_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_verify_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_add_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_client_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_free_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_next_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_read_service_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_remove_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kuserok.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_make_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_marshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_merge_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_1cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_ncred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req_extended.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_os_localaddr.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_add_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_client_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_parse.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal2salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_any_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_process_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prompter_posix.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_read_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_realm_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth_version.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_list_questions.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_salttype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sendauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_server_decrypt_ticket_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_tgs_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_recv_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_send_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password_using_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_principal_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_real_time.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_filename.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_to_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_salttype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_sfstring.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unmarshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_us_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_use_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vprepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vset_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vwrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_wrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ADDRPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_CHAOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_DDP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET6.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IPPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ISO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IS_LOCAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_NETBIOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_XNS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_EXTERNAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_REGISTERED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SESSION_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_WIRE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CRC32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_DESCBC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_NIST_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_CRC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_MD5_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_NULL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RC2_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE_OK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_VALIDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_TKT_COMMON_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AND_OR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CYBERSAFE_SECUREID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_FAST_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CACHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_STORE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_USER_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_AUTHERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_HARDERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_MALFORMED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SOFTERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SUCCESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SMTP_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_HST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_INST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_XHST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_WELLKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_X500_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DELEGATION_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_LOGON_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_REQUESTOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AFS3_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FOR_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_FAST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PW_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REFERRAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_S4U_X509_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REALM_BRANCH_CHAR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REFERRAL_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_KTYPE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_NOTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_OPENCLOSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME_SIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MAX_KEYTAB_NAME_LEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_DIRBIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_VAL_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_AFS_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_NO_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/THREEPARAMOPEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_HW_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INVALID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_MAY_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PRE_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_INT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_UINT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_convert_creds_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_init_ets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_const.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_component.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_roundup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_x.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_xc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_address.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_addrtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_auth_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdatatype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cc_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cccol_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_crypto_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cryptotype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_kdc_rep_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_tkt_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_encrypt_block.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error_code.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_expire_callback_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_get_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_gic_opt_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_init_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int16.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyusage.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kt_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_last_req_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_magic.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_mk_req_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_msgtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_octet.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_pac_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_server_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_svr_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pac.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_post_recv_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pre_send_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_preauthtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompter_fct.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pwd_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_replay_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_tokeninfo.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_response.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_authent.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_transited.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_typed_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_verify_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/passwd_phrase_element.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/y2038.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/ccache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/date_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/keytab_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/rcache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/stash_file_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/directory_org.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/doing_build.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/options2configure.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/osconf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build_this.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/copyright.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/ccache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/cookie.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/freshness_token.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/keytab_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/rcache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-A.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-C.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-E.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-K.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-L.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-M.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-P.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-R.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-S.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-T.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-V.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-all.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5defaults.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5features.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5license.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/objects.inv
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/ccselect.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/certauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/clpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/general.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/hostrealm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/internal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_auth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpolicy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/localauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/locate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/pwqual.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/resources.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/searchindex.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/pwd_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/tkt_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kdestroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/klist.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kpasswd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/krb5-config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/ksu.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kswitch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/sclient.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5login.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/kerberos.html
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/GMakefile
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRcyr2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRlatin2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LatinRules.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkjarc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkrc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/make.bat
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/python.ist
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhighlight.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhowto.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexadmonitions.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexcontainers.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexgraphics.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexindbibtoc.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexlists.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexliterals.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexnumfig.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexobjects.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexshadowbox.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyleheadings.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstylepage.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyletext.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatextables.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmanual.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmessages.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionsgeometry.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionshyperref.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagecyrillic.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagefootnote.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.tex
+OLD_FILES+=usr/share/et/et_c.awk
+OLD_FILES+=usr/share/et/et_h.awk
+OLD_FILES+=usr/share/examples/krb5/kdc.conf
+OLD_FILES+=usr/share/examples/krb5/krb5.conf
+OLD_FILES+=usr/share/examples/krb5/services.append
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/LICENSE
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/MIT
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/catalog.mk
+OLD_FILES+=usr/share/locale/de/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/en_US/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/ka/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/man/man1/compile_et.1.gz
+OLD_FILES+=usr/share/man/man1/k5srvutil.1.gz
+OLD_FILES+=usr/share/man/man1/kadmin.1.gz
+OLD_FILES+=usr/share/man/man1/kdestroy.1.gz
+OLD_FILES+=usr/share/man/man1/kinit.1.gz
+OLD_FILES+=usr/share/man/man1/klist.1.gz
+OLD_FILES+=usr/share/man/man1/kpasswd.1.gz
+OLD_FILES+=usr/share/man/man1/krb5-config.1.gz
+OLD_FILES+=usr/share/man/man1/ksu.1.gz
+OLD_FILES+=usr/share/man/man1/kswitch.1.gz
+OLD_FILES+=usr/share/man/man1/ktutil.1.gz
+OLD_FILES+=usr/share/man/man1/kvno.1.gz
+OLD_FILES+=usr/share/man/man1/sclient.1.gz
+OLD_FILES+=usr/share/man/man5/.k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/.k5login.5.gz
+OLD_FILES+=usr/share/man/man5/k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/k5login.5.gz
+OLD_FILES+=usr/share/man/man5/kadm5.acl.5.gz
+OLD_FILES+=usr/share/man/man5/kdc.conf.5.gz
+OLD_FILES+=usr/share/man/man5/krb5.conf.5.gz
+OLD_FILES+=usr/share/man/man7/kerberos.7.gz
+OLD_FILES+=usr/share/man/man8/kadmin.local.8.gz
+OLD_FILES+=usr/share/man/man8/kadmind.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_ldap_util.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_util.8.gz
+OLD_FILES+=usr/share/man/man8/kprop.8.gz
+OLD_FILES+=usr/share/man/man8/kpropd.8.gz
+OLD_FILES+=usr/share/man/man8/kproplog.8.gz
+OLD_FILES+=usr/share/man/man8/krb5kdc.8.gz
+OLD_FILES+=usr/share/man/man8/sserver.8.gz
+.endif
+.else
+.if ${MK_MITKRB5} != "no"
+# Remove Heimdal because we want MIT KRB5 but not Heimdal
+OLD_FILES+=etc/gss/qop
+OLD_FILES+=etc/rc.d/ipropd_master
+OLD_FILES+=etc/rc.d/ipropd_slave
+OLD_FILES+=usr/bin/asn1_compile
+OLD_FILES+=usr/bin/hxtool
+OLD_FILES+=usr/bin/kcc
+OLD_FILES+=usr/bin/kf
+OLD_FILES+=usr/bin/kgetcred
+OLD_FILES+=usr/bin/make-roken
+OLD_FILES+=usr/bin/slc
+OLD_FILES+=usr/bin/string2key
+OLD_FILES+=usr/bin/verify_krb5_conf
+OLD_FILES+=usr/include/asn1-common.h
+OLD_FILES+=usr/include/asn1_err.h
+OLD_FILES+=usr/include/base64.h
+OLD_FILES+=usr/include/cms_asn1.h
+OLD_FILES+=usr/include/common.h
+OLD_FILES+=usr/include/crmf_asn1.h
+OLD_FILES+=usr/include/der-private.h
+OLD_FILES+=usr/include/der-protos.h
+OLD_FILES+=usr/include/der.h
+OLD_FILES+=usr/include/digest_asn1.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
+OLD_FILES+=usr/include/getarg.h
+OLD_FILES+=usr/include/groups.h
+OLD_FILES+=usr/include/hdb-protos.h
+OLD_FILES+=usr/include/hdb.h
+OLD_FILES+=usr/include/hdb_asn1.h
+OLD_FILES+=usr/include/hdb_err.h
+OLD_FILES+=usr/include/heim_asn1.h
+OLD_FILES+=usr/include/heim_err.h
+OLD_FILES+=usr/include/heim_threads.h
+OLD_FILES+=usr/include/heimbase.h
+OLD_FILES+=usr/include/heimntlm-protos.h
+OLD_FILES+=usr/include/heimntlm.h
+OLD_FILES+=usr/include/hex.h
+OLD_FILES+=usr/include/hx509-private.h
+OLD_FILES+=usr/include/hx509-protos.h
+OLD_FILES+=usr/include/hx509.h
+OLD_FILES+=usr/include/hx509_err.h
+OLD_FILES+=usr/include/iana.h
+OLD_FILES+=usr/include/k524_err.h
+OLD_FILES+=usr/include/kadm5/kadm5-private.h
+OLD_FILES+=usr/include/kadm5/kadm5-protos.h
+OLD_FILES+=usr/include/kadm5/kadm5-pwcheck.h
+OLD_FILES+=usr/include/kadm5/kadm5_err.h
+OLD_FILES+=usr/include/kadm5/private.h
+OLD_FILES+=usr/include/kafs.h
+OLD_FILES+=usr/include/kdc-protos.h
+OLD_FILES+=usr/include/kdc.h
+OLD_FILES+=usr/include/krb5-private.h
+OLD_FILES+=usr/include/krb5-protos.h
+OLD_FILES+=usr/include/krb5-types.h
+OLD_FILES+=usr/include/krb5/ccache_plugin.h
+OLD_FILES+=usr/include/krb5/send_to_kdc_plugin.h
+OLD_FILES+=usr/include/krb5/windc_plugin.h
+OLD_FILES+=usr/include/krb5_asn1.h
+OLD_FILES+=usr/include/krb5_ccapi.h
+OLD_FILES+=usr/include/krb5_err.h
+OLD_FILES+=usr/include/kx509_asn1.h
+OLD_FILES+=usr/include/ntlm_err.h
+OLD_FILES+=usr/include/ocsp_asn1.h
+OLD_FILES+=usr/include/parse_bytes.h
+OLD_FILES+=usr/include/parse_time.h
+OLD_FILES+=usr/include/parse_units.h
+OLD_FILES+=usr/include/pkcs10_asn1.h
+OLD_FILES+=usr/include/pkcs12_asn1.h
+OLD_FILES+=usr/include/pkcs8_asn1.h
+OLD_FILES+=usr/include/pkcs9_asn1.h
+OLD_FILES+=usr/include/pkinit_asn1.h
+OLD_FILES+=usr/include/resolve.h
+OLD_FILES+=usr/include/rfc2459_asn1.h
+OLD_FILES+=usr/include/roken-common.h
+OLD_FILES+=usr/include/rtbl.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
+OLD_FILES+=usr/include/wind.h
+OLD_FILES+=usr/include/wind_err.h
+OLD_FILES+=usr/include/xdbm.h
+OLD_FILES+=usr/lib/libasn1.a
+OLD_FILES+=usr/lib/libasn1.so
+OLD_LIBS+=usr/lib/libasn1.so.11
+OLD_FILES+=usr/lib/libasn1_p.a
+OLD_LIBS+=usr/lib/libcom_err.so.5
+OLD_FILES+=usr/lib/libcom_err_p.a
+OLD_LIBS+=usr/lib/libgssapi.a
+OLD_LIBS+=usr/lib/libgssapi.so.10
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.10
+OLD_FILES+=usr/lib/libgssapi_krb5_p.a
+OLD_FILES+=usr/lib/libgssapi_mech.a
+OLD_FILES+=usr/lib/libgssapi_mech.so
+OLD_LIBS+=usr/lib/libgssapi_mech.so.10
+OLD_FILES+=usr/lib/libgssapi_ntlm.a
+OLD_FILES+=usr/lib/libgssapi_ntlm.so
+OLD_LIBS+=usr/lib/libgssapi_ntlm.so.10
+OLD_FILES+=usr/lib/libgssapi_ntlm_p.a
+OLD_FILES+=usr/lib/libgssapi_spnego.a
+OLD_FILES+=usr/lib/libgssapi_spnego.so
+OLD_LIBS+=usr/lib/libgssapi_spnego.so.10
+OLD_FILES+=usr/lib/libgssapi_spnego_p.a
+OLD_FILES+=usr/lib/libhdb.a
+OLD_FILES+=usr/lib/libhdb.so
+OLD_LIBS+=usr/lib/libhdb.so.11
+OLD_FILES+=usr/lib/libhdb_p.a
+OLD_FILES+=usr/lib/libheimbase.a
+OLD_FILES+=usr/lib/libheimbase.so
+OLD_LIBS+=usr/lib/libheimbase.so.11
+OLD_FILES+=usr/lib/libheimbase_p.a
+OLD_FILES+=usr/lib/libheimntlm.a
+OLD_FILES+=usr/lib/libheimntlm.so
+OLD_LIBS+=usr/lib/libheimntlm.so.11
+OLD_FILES+=usr/lib/libheimntlm_p.a
+OLD_FILES+=usr/lib/libheimsqlite.a
+OLD_FILES+=usr/lib/libheimsqlite.so
+OLD_LIBS+=usr/lib/libheimsqlite.so.11
+OLD_FILES+=usr/lib/libheimsqlite_p.a
+OLD_FILES+=usr/lib/libhx509.a
+OLD_FILES+=usr/lib/libhx509.so
+OLD_LIBS+=usr/lib/libhx509.so.11
+OLD_FILES+=usr/lib/libhx509_p.a
+OLD_FILES+=usr/lib/libkadm5clnt.a
+OLD_LIBS+=usr/lib/libkadm5clnt.so.11
+OLD_FILES+=usr/lib/libkadm5clnt_p.a
+OLD_FILES+=usr/lib/libkadm5srv.a
+OLD_FILES+=usr/lib/libkadm5srv.so
+OLD_LIBS+=usr/lib/libkadm5srv.so.11
+OLD_FILES+=usr/lib/libkadm5srv_p.a
+OLD_FILES+=usr/lib/libkafs5.a
+OLD_FILES+=usr/lib/libkafs5.so
+OLD_LIBS+=usr/lib/libkafs5.so.11
+OLD_FILES+=usr/lib/libkafs5_p.a
+OLD_FILES+=usr/lib/libkdc.a
+OLD_FILES+=usr/lib/libkdc.so
+OLD_LIBS+=usr/lib/libkdc.so.11
+OLD_FILES+=usr/lib/libkdc_p.a
+OLD_LIBS+=usr/lib/libkrb5.so.11
+OLD_FILES+=usr/lib/libkrb5_p.a
+OLD_FILES+=usr/lib/libroken.a
+OLD_FILES+=usr/lib/libroken.so
+OLD_LIBS+=usr/lib/libroken.so.11
+OLD_FILES+=usr/lib/libroken_p.a
+OLD_FILES+=usr/lib/libwind.a
+OLD_FILES+=usr/lib/libwind.so
+OLD_LIBS+=usr/lib/libwind.so.11
+OLD_FILES+=usr/lib/libwind_p.a
+OLD_FILES+=usr/lib/libprivateheimipcc.a
+OLD_FILES+=usr/lib/libprivateheimipcc.so
+OLD_LIBS+=usr/lib/libprivateheimipcc.so.11
+OLD_FILES+=usr/lib/libprivateheimipcc_p.a
+OLD_FILES+=usr/lib/libprivateheimipcs.a
+OLD_FILES+=usr/lib/libprivateheimipcs.so
+OLD_LIBS+=usr/lib/libprivateheimipcs.so.11
+OLD_FILES+=usr/lib/libprivateheimipcs_p.a
+OLD_FILES+=usr/libexec/digest-service
+OLD_FILES+=usr/libexec/hprop
+OLD_FILES+=usr/libexec/hpropd
+OLD_FILES+=usr/libexec/ipropd-master
+OLD_FILES+=usr/libexec/ipropd-slave
+OLD_FILES+=usr/libexec/kcm
+OLD_FILES+=usr/libexec/kdc
+OLD_FILES+=usr/libexec/kdigest
+OLD_FILES+=usr/libexec/kfd
+OLD_FILES+=usr/libexec/kimpersonate
+OLD_FILES+=usr/libexec/kpasswdd
+OLD_FILES+=usr/sbin/kstash
+OLD_FILES+=usr/sbin/ktutil
+OLD_FILES+=usr/sbin/iprop-log
+OLD_FILES+=usr/share/man/man1/kf.1.gz
+OLD_FILES+=usr/share/man/man3/HDB.3.gz
+OLD_FILES+=usr/share/man/man3/hdb__del.3.gz
+OLD_FILES+=usr/share/man/man3/hdb__get.3.gz
+OLD_FILES+=usr/share/man/man3/hdb__put.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_auth_status.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_check_constrained_delegation.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_check_pkinit_ms_upn_match.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_check_s4u2self.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_close.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_entry_ex.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_fetch_kvno.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_firstkey.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_free.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_get_realms.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_lock.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_name.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_nextkey.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_open.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_password.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_remove.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_rename.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_store.3.gz
+OLD_FILES+=usr/share/man/man3/hdb_unlock.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_build_ntlm1_master.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_build_ntlm2_master.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_calculate_lm2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_calculate_ntlm1.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_calculate_ntlm2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_decode_targetinfo.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_targetinfo.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_type1.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_type2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_encode_type3.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_buf.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_targetinfo.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_type1.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_type2.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_free_type3.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_keyex_unwrap.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_nt_key.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_ntlmv2_key.3.gz
+OLD_FILES+=usr/share/man/man3/heim_ntlm_verify_ntlm2.3.gz
+OLD_FILES+=usr/share/man/man3/hx509.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_bitstring_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_sign.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_sign_self.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_crl_dp_uri.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_eku.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_jid.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_ms_upn.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_otherName.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_pkinit.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_add_san_rfc822name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_ca.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_domaincontroller.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_notAfter.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_notAfter_lifetime.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_notBefore.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_proxy.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_serialnumber.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_spki.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_subject.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_template.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_set_unique.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_subject_expand.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ca_tbs_template_units.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_binary.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_check_eku.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_find_subjectAltName_otherName.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_SPKI.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_SPKI_AlgorithmIdentifier.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_attribute.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_base_subject.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_issuer.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_issuer_unique_id.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_notAfter.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_notBefore.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_serialnumber.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_subject.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_get_subject_unique_id.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_init_data.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_keyusage_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_ref.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cert_set_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_add.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_append.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_end_seq.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_filter.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_find.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_info.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_iter_f.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_merge.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_next_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_start_seq.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_certs_store.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ci_print_names.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_clear_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_create_signed_1.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_envelope_1.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_unenvelope.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_unwrap_ContentInfo.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_verify_signed.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_cms_wrap_ContentInfo.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_context_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_context_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_context_set_missing_revoke.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_add_revoked_certs.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_lifetime.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crl_sign.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_crypto.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_add.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_add_binding.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_find.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_find_binding.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_env_lfind.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_err.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_error.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_free_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_free_octet_string_list.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_general_name_unparse.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_get_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_get_one_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_keyset.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_lock.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_misc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_binary.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_copy.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_expand.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_is_null_p.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_to_Name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_name_to_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ocsp_request.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_ocsp_verify.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_oid_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_oid_sprint.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_parse_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_add_cms_alg.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_set_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_peer_info_set_cms_algs.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_print_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_print_stdout.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_cmp_func.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_eku.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_issuer_serial.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_match_option.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_statistic_file.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_query_unparse_stats.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_add_crl.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_add_ocsp.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_ocsp_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_revoke_verify.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_set_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_set_error_stringv.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_unparse_der_name.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_cert.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_add_flags.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_free.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_init.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_validate_ctx_set_print.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_attach_anchors.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_attach_revoke.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_ctx_f_allow_default_trustanchors.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_destroy_ctx.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_init_ctx.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_path.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_max_depth.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_proxy_certificate.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_strict_rfc3280_verification.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_set_time.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_verify_signature.3.gz
+OLD_FILES+=usr/share/man/man3/hx509_xfree.3.gz
+OLD_FILES+=usr/share/man/man3/k_afs_cell_of_file.3.gz
+OLD_FILES+=usr/share/man/man3/k_hasafs.3.gz
+OLD_FILES+=usr/share/man/man3/k_pioctl.3.gz
+OLD_FILES+=usr/share/man/man3/k_setpag.3.gz
+OLD_FILES+=usr/share/man/man3/k_unlog.3.gz
+OLD_FILES+=usr/share/man/man3/kadm5_pwcheck.3.gz
+OLD_FILES+=usr/share/man/man3/kafs.3.gz
+OLD_FILES+=usr/share/man/man3/kafs5.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_set_verbose.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_settoken.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_settoken5.3.gz
+OLD_FILES+=usr/share/man/man3/kafs_settoken_rxkad.3.gz
+OLD_FILES+=usr/share/man/man3/krb5.3.gz
+OLD_FILES+=usr/share/man/man3/krb524_convert_creds_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb524_convert_creds_kdc_ccache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_425_conv_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_425_conv_principal_ext.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_524_conv_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_acc_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_acl_match_file.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_acl_match_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_add_et_list.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_add_extra_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_add_ignore_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_addlog_dest.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_addlog_func.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_addr2sockaddr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_order.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_prefixlen_boundary.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_address_search.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_afslog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_afslog_uid.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_allow_weak_crypto.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_aname_to_localname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_anyaddr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault_boolean.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_appdefault_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_append_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_genaddrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getaddrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getflags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getlocalsubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getrcache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getremotesubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_getuserkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_initivector.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setaddrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setaddrs_from_fd.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setflags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setivector.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setlocalsubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setrcache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setremotesubkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_con_setuserkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getauthenticator.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getcksumtype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getkeytype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getlocalseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_getremoteseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setcksumtype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setkeytype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setlocalseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_auth_setremoteseqnumber.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal_ext.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal_va.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_build_principal_va_ext.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_c_enctype_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_c_make_checksum.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_end_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_get_first.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_match.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_cache_next.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_clear_mcred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_close.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_copy_cache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_copy_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_copy_match_f.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_default_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_end_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_gen_new.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_config.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_full_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_kdc_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_lifetime.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_prefix_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_get_version.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_initialize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_last_change_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_move.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_new_unique.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_next_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_register.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_remove_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_resolve.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_retrieve_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_config.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_default_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_friendly_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_set_kdc_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_start_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_store_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_support_switch.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cc_switch.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ccache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ccache_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_cursor_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_cursor_new.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_cursor_next.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cccol_last_change_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_change_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_check_transited.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_checksum_is_collision_proof.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_checksum_is_keyed.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_checksumsize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_cksumtype_to_enctype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_clear_error_message.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_clear_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_closelog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_compare_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_file_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_free_strings.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_bool.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_bool_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_list.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_string_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_strings.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_get_time_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_parse_file_multi.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_parse_string_multi.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_bool.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_bool_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_list.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_string_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_strings.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_config_vget_time_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_creds_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_host_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_keyblock_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_copy_ticket.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_create_checksum.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_create_checksum_iov.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_credential.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_creds_get_ticket_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_fx_cf2.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getblocksize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getconfoundersize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getenctype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_getpadsize.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_crypto_iov.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_copy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_ct_cmp.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_realloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_data_zero.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_decrypt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_decrypt_EncryptedData.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_decrypt_iov_ivec.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_deprecated.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_digest.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_digest_probe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_eai_to_heim_errno.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_encrypt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_encrypt_EncryptedData.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_encrypt_iov_ivec.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctype_disable.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctype_enable.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctype_valid.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_enctypes_compatible_keys.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_expand_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_expand_hostname_realms.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_fcc_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_fileformats.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_find_padata.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_config_files.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_cred_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_creds_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_data_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_host_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_keyblock_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_krbhst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_ticket.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_free_unparsed_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_fwd_tgt_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_generate_random_block.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_generate_subkey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_generate_subkey_extended.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_all_client_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_all_server_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_cred_from_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_cred_from_kdc_opt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_credentials.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_config_files.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_in_tkt_etypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_default_realms.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_dns_canonicalize_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_extra_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_fcache_version.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_forwarded_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_host_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_ignore_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_cred.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_tkt_with_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_tkt_with_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_in_tkt_with_skey.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_get_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_opt_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_init_creds_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_kdc_sec_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krb524hst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krb_admin_hst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krb_changepw_hst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_krbhst.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_max_time_skew.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_use_admin_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_get_validated_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_getportbyname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_h_addr2addr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_h_addr2sockaddr.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_h_errno_to_heim_errno.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_context.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_get_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_set_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_set_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_set_service.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_creds_step.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_init_ets.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_initlog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_introduction.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_is_config_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_is_thread_safe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kerberos_enctypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keyblock_get_enctype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keyblock_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keyblock_zero.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytab_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytab_key_proc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytype_to_enctypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytype_to_enctypes_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_keytype_to_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_format_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_get_addrinfo.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_next.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_next_as_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_krbhst_reset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_add_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_close.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_copy_entry_contents.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_default_modify_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_default_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_destroy.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_end_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_free_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_full_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_get_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_have_content.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_next_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_read_service_key.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_register.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_remove_entry.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_resolve.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kt_start_seq_get.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_kuserok.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_log.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_log_msg.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_make_addrport.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_make_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_max_sockaddr_size.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_mcc_ops.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_mk_req.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_mk_safe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_openlog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_pac.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_pac_get_buffer.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_pac_verify.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_name_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_parse_nametype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_password_key_proc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_plugin_register.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_prepend_config_files_default.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_princ_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_princ_set_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_compare_any_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_comp_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_num_comp.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_get_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_intro.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_is_krbtgt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_match.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_set_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_principal_set_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_print_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_random_to_key.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rcache.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_error.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_ctx.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_in_ctx_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_in_set_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_in_set_pac_check.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_out_ctx_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_req_out_get_server.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_rd_safe.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_realm_compare.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_authdata.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_creds_tag.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_int16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_int32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_int8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_stringz.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_times.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_uint16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_uint32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ret_uint8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_config_files.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_default_in_tkt_etypes.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_default_realm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_dns_canonicalize_hostname.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_error_message.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_extra_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_fcache_version.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_home_dir_access.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_ignore_addresses.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_kdc_sec_offset.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_max_time_skew.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_password.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_real_time.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_set_use_admin_kdc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sname_to_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sock_to_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sockaddr2address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sockaddr2port.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_sockaddr_uninteresting.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_clear_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_emem.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_free.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_fd.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_mem.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_from_readonly_mem.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_get_byteorder.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_get_eof_code.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_is_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_read.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_seek.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_byteorder.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_eof_code.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_set_max_alloc.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_to_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_truncate.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_storage_write.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_address.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_addrs.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_authdata.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_creds_tag.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_data.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_int16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_int32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_int8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_keyblock.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_principal.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_stringz.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_times.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_uint16.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_uint32.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_store_uint8.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_string_to_key.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_string_to_keytype.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_support.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_authorization_data_type.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_client.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_endtime.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_ticket_get_server.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_timeofday.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_fixed.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_fixed_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_fixed_short.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_unparse_name_short.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_us_timeofday.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_v4compat.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_checksum.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_checksum_iov.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_init_creds.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_init.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_flags.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_keytab.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_secure.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_opt_set_service.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_user.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_user_lrealm.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_verify_user_opt.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vlog.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vlog_msg.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vset_error_string.3.gz
+OLD_FILES+=usr/share/man/man3/krb5_vwarn.3.gz
+OLD_FILES+=usr/share/man/man3/krb_afslog.3.gz
+OLD_FILES+=usr/share/man/man3/krb_afslog_uid.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_buf.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_core.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_type1.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_type2.3.gz
+OLD_FILES+=usr/share/man/man3/ntlm_type3.3.gz
+OLD_FILES+=usr/share/man/man8/hprop.8.gz
+OLD_FILES+=usr/share/man/man8/hpropd.8.gz
+OLD_FILES+=usr/share/man/man8/iprop-log.8.gz
+OLD_FILES+=usr/share/man/man8/iprop.8.gz
+OLD_FILES+=usr/share/man/man8/kadmin.8.gz
+OLD_FILES+=usr/share/man/man8/kcm.8.gz
+OLD_FILES+=usr/share/man/man8/kdc.8.gz
+OLD_FILES+=usr/share/man/man8/kdigest.8.gz
+OLD_FILES+=usr/share/man/man8/kerberos.8.gz
+OLD_FILES+=usr/share/man/man8/kimpersonate.8.gz
+OLD_FILES+=usr/share/man/man8/kpasswdd.8.gz
+OLD_FILES+=usr/share/man/man8/kstash.8.gz
+OLD_FILES+=usr/share/man/man8/ktutil.8.gz
+OLD_FILES+=usr/share/man/man8/string2key.8.gz
+OLD_FILES+=usr/share/man/man8/verify_krb5_conf.8.gz
+.else
+# Remove MIT KRB5 because we want Heimdal but not MIT
+OLD_FILES+=usr/bin/gss-client
+OLD_FILES+=usr/bin/k5srvutil
+OLD_FILES+=usr/bin/ktutil
+OLD_FILES+=usr/bin/kvno
+OLD_FILES+=usr/bin/sclient
+OLD_FILES+=usr/bin/sim_client
+OLD_FILES+=usr/bin/uuclient
+OLD_FILES+=etc/rc.d/kpropd
+OLD_FILES+=usr/include/common.h
+OLD_FILES+=usr/include/edwards25519_fiat.h
+OLD_FILES+=usr/include/edwards25519_tables.h
+OLD_FILES+=usr/include/groups.h
+OLD_FILES+=usr/include/gssapi/gssapi_ext.h
+OLD_FILES+=usr/include/gssapi/gssapi_oid.h
+OLD_FILES+=usr/include/gssapi/gssapi_alloc.h
+OLD_FILES+=usr/include/gssapi/gssapi_generic.h
+OLD_FILES+=usr/include/gssapi/gssapi_spnego.h
+OLD_FILES+=usr/include/gssapi/gssapi_asn1-priv.h
+OLD_FILES+=usr/include/gssapi/spnego_asn1-priv.h
+OLD_FILES+=usr/include/gssapi/gssapi_asn1.h
+OLD_FILES+=usr/include/gssapi/gssapi_ntlm.h
+OLD_FILES+=usr/include/gssapi/spnego_asn1.h
+OLD_FILES+=usr/include/gssrpc/auth.h
+OLD_FILES+=usr/include/gssrpc/auth_gss.h
+OLD_FILES+=usr/include/gssrpc/auth_gssapi.h
+OLD_FILES+=usr/include/gssrpc/auth_unix.h
+OLD_FILES+=usr/include/gssrpc/clnt.h
+OLD_FILES+=usr/include/gssrpc/netdb.h
+OLD_FILES+=usr/include/gssrpc/pmap_clnt.h
+OLD_FILES+=usr/include/gssrpc/pmap_prot.h
+OLD_FILES+=usr/include/gssrpc/pmap_rmt.h
+OLD_FILES+=usr/include/gssrpc/rename.h
+OLD_FILES+=usr/include/gssrpc/rpc.h
+OLD_FILES+=usr/include/gssrpc/rpc_msg.h
+OLD_FILES+=usr/include/gssrpc/svc.h
+OLD_FILES+=usr/include/gssrpc/svc_auth.h
+OLD_FILES+=usr/include/gssrpc/types.h
+OLD_FILES+=usr/include/gssrpc/xdr.h
+OLD_FILES+=usr/include/iana.h
+OLD_FILES+=usr/include/kadm5/chpass_util_strings.h
+OLD_FILES+=usr/include/kadm5/kadm_err.h
+OLD_FILES+=usr/include/kdb.h
+OLD_FILES+=usr/include/krad.h
+OLD_FILES+=usr/include/krb5/ccselect_plugin.h
+OLD_FILES+=usr/include/krb5/certauth_plugin.h
+OLD_FILES+=usr/include/krb5/clpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/hostrealm_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_auth_plugin.h
+OLD_FILES+=usr/include/krb5/kadm5_hook_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpolicy_plugin.h
+OLD_FILES+=usr/include/krb5/kdcpreauth_plugin.h
+OLD_FILES+=usr/include/krb5/localauth_plugin.h
+OLD_FILES+=usr/include/krb5/plugin.h
+OLD_FILES+=usr/include/krb5/preauth_plugin.h
+OLD_FILES+=usr/include/krb5/pwqual_plugin.h
+OLD_FILES+=usr/include/profile.h
+OLD_FILES+=usr/include/trace.h
+OLD_FILES+=usr/include/util.h
+OLD_FILES+=usr/include/verto-module.h
+OLD_FILES+=usr/include/verto.h
+OLD_FILES+=usr/lib/krb5/plugins/kdb/db2.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/otp.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/pkinit.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/spake.so
+OLD_FILES+=usr/lib/krb5/plugins/preauth/test.so
+OLD_FILES+=usr/lib/krb5/plugins/tls/k5tls.so
+OLD_LIBS+=usr/lib/libcom_err.so.122
+OLD_LIBS+=usr/lib/libgssapi_krb5.so.122
+OLD_FILES+=usr/lib/libgssrpc.a
+OLD_FILES+=usr/lib/libgssrpc.so
+OLD_LIBS+=usr/lib/libgssrpc.so.122
+OLD_FILES+=usr/lib/libk5crypto.a
+OLD_FILES+=usr/lib/libk5crypto.so
+OLD_LIBS+=usr/lib/libk5crypto.so.122
+OLD_FILES+=usr/lib/libkadm5clnt_mit.a
+OLD_FILES+=usr/lib/libkadm5clnt_mit.so
+OLD_LIBS+=usr/lib/libkadm5clnt_mit.so.122
+OLD_FILES+=usr/lib/libkadm5srv_mit.a
+OLD_FILES+=usr/lib/libkadm5srv_mit.so
+OLD_LIBS+=usr/lib/libkadm5srv_mit.so.122
+OLD_FILES+=usr/lib/libkdb5.a
+OLD_FILES+=usr/lib/libkdb5.so
+OLD_LIBS+=usr/lib/libkdb5.so.122
+OLD_FILES+=usr/lib/libkrad.so
+OLD_FILES+=usr/lib/libkrad.a
+OLD_LIBS+=usr/lib/libkrad.so.122
+OLD_LIBS+=usr/lib/libkrb5.so.122
+OLD_FILES+=usr/lib/libkrb5profile.a
+OLD_FILES+=usr/lib/libkrb5profile.so
+OLD_LIBS+=usr/lib/libkrb5profile.so.122
+OLD_FILES+=usr/lib/libkrb5support.a
+OLD_FILES+=usr/lib/libkrb5support.so
+OLD_LIBS+=usr/lib/libkrb5support.so.122
+OLD_FILES+=usr/lib/libverto.a
+OLD_FILES+=usr/lib/libverto.so
+OLD_LIBS+=usr/lib/libverto.so.122
+OLD_FILES+=usr/libdata/pkgconfig/gssrpc.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-client.pc
+OLD_FILES+=usr/libdata/pkgconfig/kadm-server.pc
+OLD_FILES+=usr/libdata/pkgconfig/kdb.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/krb5.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5-gssapi.pc
+OLD_FILES+=usr/libdata/pkgconfig/mit-krb5.pc
+OLD_FILES+=usr/sbin/gss-server
+OLD_FILES+=usr/sbin/kadmin.local
+OLD_FILES+=usr/sbin/kadmind
+OLD_FILES+=usr/sbin/kdb5_util
+OLD_FILES+=usr/sbin/kprop
+OLD_FILES+=usr/sbin/kpropd
+OLD_FILES+=usr/sbin/kproplog
+OLD_FILES+=usr/sbin/krb5-send-pr
+OLD_FILES+=usr/sbin/krb5kdc
+OLD_FILES+=usr/sbin/sim_server
+OLD_FILES+=usr/sbin/sserver
+OLD_FILES+=usr/sbin/uuserver
+OLD_FILES+=usr/share/doc/krb5/doc/html/.buildinfo
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/agogo.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/basic.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgfooter.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/bgtop.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/doctools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/documentation_options.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/file.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/jquery.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/kerb.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/language_data.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/minus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/plus.png
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/pygments.css
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/searchtools.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/_static/underscore.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/about.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/k5srvutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmin_local.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kadmind.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_ldap_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kdb5_util.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kprop.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kpropd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/kproplog.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/krb5kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/ktutil.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/admin_commands/sserver.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/advanced/retiring-des.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/appl_servers.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/auth_indicator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/backup_host.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kadm5_acl.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/kdc_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_files/krb5_conf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/conf_ldap.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/database.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dbtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/dictionary.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/env_variables.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/host_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/https.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_appl_srv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_clients.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/install_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/lockout.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/otp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/pkinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/princ_dns.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/realm_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/spake.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/troubleshoot.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/admin/various_envs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/h5l_mit_apidiff.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/princ_handle.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_425_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_conv_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_524_convert_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_order.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_address_search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_allow_weak_crypto.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_aname_to_localname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_anonymous_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_appdefault_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_genaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_get_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getauthenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getlocalsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremoteseqnumber.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getremotesubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_getsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_initivector.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_set_req_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setaddrs.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setflags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setports.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setrecvsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setsendsubkey_k.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_auth_con_setuseruserkey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_alloc_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_build_principal_va.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_block_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_checksum_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_crypto_length_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_derive_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_encrypt_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_enctype_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_free_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_fx_cf2_simple.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_init_state.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_coll_proof_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_is_keyed_cksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keyed_checksum_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_keylengths.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_make_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_padding_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prf_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_prfplus.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_add_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_make_octets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_os_entropy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_seed.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_random_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_string_to_key_with_params.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_valid_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_c_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_calculate_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_cache_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_destroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_gen_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_full_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_initialize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_move.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_new_unique.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_next_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_remove_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_retrieve_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_select.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_set_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_store_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_support_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cc_switch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_new.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_cursor_next.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cccol_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_change_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_check_clockskew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_checksum_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_chpw_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_cksumtype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_clear_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_copy_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decode_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_deltat_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_eblock_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encode_authdata_container.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_encrypt_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_enctype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_expand_hostname.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_find_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_finish_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_addresses.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_checksum_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cksumtypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_cred_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_data_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keyblock_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_keytab_entry_contents.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_free_unparsed_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_fwd_tgt_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_renew.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_credentials_validate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_etype_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_fallback_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_host_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_in_tkt_with_skey.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_alloc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_get_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_address_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_anonymous.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_canonicalize.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_change_password_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_etype_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_expire_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_ccache_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_fast_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_forwardable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_in_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_out_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pa.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_pac_request.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_preauth_list.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_proxiable.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_renew_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_responder.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_opt_set_tkt_life.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_init_creds_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_permitted_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_prompt_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_renewed_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_server_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_time_offsets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_get_validated_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_context_profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_set_service.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_init_secure_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_config_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_referral_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_is_thread_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_create_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_decrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_encrypt_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_free_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_key_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_make_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_prf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_reference_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_k_verify_checksum_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_sign_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kdc_verify_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_add_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_client_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_close.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_default_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_dup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_end_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_free_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_get_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_have_content.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_next_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_read_service_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_remove_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_resolve.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kt_start_seq_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_kuserok.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_make_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_marshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_merge_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_1cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_ncred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_req_extended.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_mk_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_os_localaddr.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_add_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_buffer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_client_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_get_types.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_parse.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_sign_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_pac_verify_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_parse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal2salt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_any_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_principal_compare_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_process_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_prompter_posix.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_random_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_priv.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_rep_dce.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_rd_safe.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_read_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_realm_compare.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_recvauth_version.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_list_questions.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_otp_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_challenge_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_get_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_pkinit_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_responder_set_answer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_salttype_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sendauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_server_decrypt_ticket_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_default_tgs_enctypes.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_recv_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_kdc_send_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_password_using_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_principal_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_real_time.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_set_trace_filename.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_match.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_sname_to_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_salttype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_string_to_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_sfstring.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_timestamp_to_string.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_free.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_get_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_tkt_creds_step.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unmarshal_credentials.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_unparse_name_flags_ext.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_us_timeofday.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_use_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_authdata_kdc_issued.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_init.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_verify_init_creds_opt_set_ap_req_nofail.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vprepend_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vset_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_vwrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/api/krb5_wrap_error_message.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ADDRPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_CHAOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_DDP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_INET6.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IPPORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_ISO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_IS_LOCAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_NETBIOS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ADDRTYPE_XNS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_EXTERNAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_FIELD_TYPE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_REGISTERED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AD_TYPE_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_MUTUAL_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_RESERVED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SESSION_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/AP_OPTS_WIRE_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CMAC_CAMELLIA256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_CRC32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_DESCBC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_MD5_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_96_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA1_DES3.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA256_128_AES128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_HMAC_SHA384_192_AES256.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_MD5_HMAC_ARCFOUR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_NIST_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD4_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_RSA_MD5_DES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/CKSUMTYPE_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES128_CTS_HMAC_SHA256_128.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA1_96.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_AES256_CTS_HMAC_SHA384_192.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_ARCFOUR_HMAC_EXP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA128_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_CAMELLIA256_CTS_CMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES3_CBC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_CRC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_MD5.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_CBC_RAW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DES_HMAC_SHA1.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_DSA_SHA1_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_MD5_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_NULL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RC2_CBC_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_RSA_ES_OAEP_ENV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_SHA1_RSA_CMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/ENCTYPE_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ALLOW_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_CNAME_IN_ADDL_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_DISABLE_TRANSITED_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_ENC_TKT_IN_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_RENEWABLE_OK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_REQUEST_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_OPT_VALIDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KDC_TKT_COMMON_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ALTAUTH_ATT_CHALLENGE_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_PRINCSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ANONYMOUS_REALMSTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AND_OR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AP_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_AUTH_INDICATOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_ETYPE_NEGOTIATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_FX_ARMOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_IF_RELEVANT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_INITIAL_VERIFIED_CAS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_KDC_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_MANDATORY_FOR_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_SIGNTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTHDATA_WIN2K_PAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_DO_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_PERMIT_ALL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_SEQUENCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_RET_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_AUTH_CONTEXT_USE_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_EMPTY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_HEADER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_PADDING.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_SIGN_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_STREAM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CRYPTO_TYPE_TRAILER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_CYBERSAFE_SECUREID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_DOMAIN_X500_COMPRESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ENCPADATA_REQ_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_FAST_REQUIRED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CACHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_CONSTRAINED_DELEGATION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_STORE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_NO_TRANSIT_CHECK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GC_USER_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ADDRESS_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CANONICALIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_CHG_PWD_PRMPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_ETYPE_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PREAUTH_LIST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_RENEW_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_GET_INIT_CREDS_OPT_TKT_LIFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CONTEXT_SECURE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INIT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT16_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MAX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_INT32_MIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_ITE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_KDCISSUED_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_MTE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AD_SIGNEDPATH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_APP_DATA_ENCRYPT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AP_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REP_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_AS_REQ_PA_ENC_TS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_CAMMAC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_CLIENT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_ENC_CHALLENGE_KDC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_ENC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_FAST_REQ_CHKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_MIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_INTEG.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_GSS_TOK_WRAP_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_IAKERB_FINISHED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KDC_REP_TICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_CRED_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_ERROR_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_PRIV_ENCPART.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_KRB_SAFE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REPLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_S4U_X509_USER_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_CHALLENGE_TRACKID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_PA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REP_ENCPART_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SESSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AD_SUBKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KEYUSAGE_TGS_REQ_AUTH_CKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_ACCESSDENIED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_AUTHERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_BAD_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_HARDERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_INITIAL_FLAG_NEEDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_MALFORMED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SOFTERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_KPASSWD_SUCCESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ALL_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_ACCT_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_RENEWAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_LAST_TGT_ISSUED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_LRQ_ONE_PW_EXPTIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENTERPRISE_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_ENT_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_MS_PRINCIPAL_AND_ID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SMTP_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_HST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_INST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_SRV_XHST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_UNKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_WELLKNOWN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_NT_X500_PRINCIPAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_ATTRIBUTES_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CLIENT_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_CREDENTIALS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DELEGATION_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_CLAIMS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_DEVICE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_FULL_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_LOGON_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_PRIVSVR_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_REQUESTOR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_SERVER_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_TICKET_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PAC_UPN_DNS_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AFS3_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AP_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_CHECKSUM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_AS_FRESHNESS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENCRYPTED_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_SANDIA_SECURID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_TIMESTAMP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ENC_UNIX_TIME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_ETYPE_INFO2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FOR_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_COOKIE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_ERROR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_FX_FAST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_GET_FROM_TYPED_DATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_NONE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OSF_DCE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_PIN_CHANGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_OTP_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_OPTIONS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PAC_REQUEST.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PKINIT_KX.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REP_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PK_AS_REQ_OLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_PW_SALT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_IDP_OAUTH2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REDHAT_PASSKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_REFERRAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_S4U_X509_USER.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_CHALLENGE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_REDIRECT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SAM_RESPONSE_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SESAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SPAKE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_SVR_REFERRAL_INFO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PADATA_USE_SPECIFIED_KVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_CASEFOLD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_COMPARE_UTF8.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_ENTERPRISE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_IGNORE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_DEF_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_PARSE_REQUIRE_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_DISPLAY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_NO_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRINCIPAL_UNPARSE_SHORT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PRIV.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_NEW_PASSWORD_AGAIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PROMPT_TYPE_PREAUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_PVNO.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REALM_BRANCH_CHAR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_BADAUTHVERS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RECVAUTH_SKIP_VERSION.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_REFERRAL_REALM.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_COLLECT_TOKEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_NEXTOTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FLAGS_SEPARATE_PIN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_ALPHANUMERIC.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_DECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_OTP_FORMAT_HEXADECIMAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_COUNT_LOW.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_FINAL_TRY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_PKINIT_FLAGS_TOKEN_USER_PIN_LOCKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_OTP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PASSWORD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_RESPONDER_QUESTION_PKINIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAFE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_MUST_PK_ENCRYPT_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_SEND_ENCRYPTED_SAD.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_SAM_USE_SAD_AS_KEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_2ND_TKT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_AUTHDATA.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_FLAGS_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_IS_SKEY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_KTYPE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_SRV_NAMEONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_MATCH_TIMES_EXACT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_NOTICKET.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_OPENCLOSE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TC_SUPPORTED_KTYPES.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_NAME_SIZE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TGS_REQ.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_TKT_CREDS_STEP_FLAG_CONTINUE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_VERIFY_INIT_CREDS_OPT_AP_REQ_NOFAIL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/KRB5_WELLKNOWN_NAMESTR.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_INTERPRETATION_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/LR_TYPE_THIS_SERVER_ONLY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MAX_KEYTAB_NAME_LEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_DIRBIT.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/MSEC_VAL_MASK.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_AFS_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/SALT_TYPE_NO_LENGTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/THREEPARAMOPEN.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ANONYMOUS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_ENC_PA_REP.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_FORWARDED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_HW_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INITIAL.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_INVALID.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_MAY_POSTDATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_OK_AS_DELEGATE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_POSTDATED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PRE_AUTH.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXIABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_PROXY.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_RENEWABLE.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/TKT_FLG_TRANSIT_POLICY_CHECKED.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_INT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/VALID_UINT_BITS.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_convert_creds_kdc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb524_init_ets.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_const.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_component.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_name.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_set_realm_length.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_size.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_princ_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_roundup.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_x.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/macros/krb5_xc.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_address.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_addrtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_rep_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ap_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_auth_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdata.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authdatatype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_authenticator.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_boolean.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cc_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ccache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cccol_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_checksum.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cksumtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_const_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_enc_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cred_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_creds.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_crypto_iov.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_cryptotype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_deltat.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_kdc_rep_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enc_tkt_part.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_encrypt_block.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_enctype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_error_code.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_expire_callback_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_flags.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_get_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_gic_opt_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_init_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int16.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_int32.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_rep.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kdc_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_key.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyblock.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keytab_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_keyusage.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kt_cursor.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_last_req_entry.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_magic.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_mk_req_checksum_func.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_msgtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_octet.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_pac_req.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_server_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pa_svr_referral_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pac.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pointer.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_post_recv_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pre_send_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_preauthtype.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_principal_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompt_type.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_prompter_fct.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_pwd_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_rcache.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_replay_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_fn.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_otp_tokeninfo.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_challenge.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_responder_pkinit_identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_response.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ticket_times.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_timestamp.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_authent.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_tkt_creds_context.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_callback.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_trace_info.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_transited.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_typed_data.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_2.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_ui_4.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/krb5_verify_init_creds_opt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/refs/types/passwd_phrase_element.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/appdev/y2038.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/ccache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/date_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/keytab_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/rcache_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/basic/stash_file_def.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/directory_org.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/doing_build.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/options2configure.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build/osconf.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/build_this.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/copyright.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/ccache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/cookie.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/freshness_token.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/keytab_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/formats/rcache_file_format.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-A.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-C.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-E.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-K.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-L.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-M.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-P.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-R.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-S.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-T.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-V.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex-all.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/genindex.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5defaults.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5features.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/mitK5license.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/objects.inv
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/ccselect.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/certauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/clpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/general.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/gssapi.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/hostrealm.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/internal.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_auth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kadm5_hook.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpolicy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/kdcpreauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/localauth.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/locate.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/profile.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/plugindev/pwqual.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/resources.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/search.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/searchindex.js
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/pwd_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/tkt_mgmt.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kdestroy.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kinit.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/klist.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kpasswd.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/krb5-config.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/ksu.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kswitch.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/kvno.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_commands/sclient.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/index.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5identity.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/k5login.html
+OLD_FILES+=usr/share/doc/krb5/doc/html/user/user_config/kerberos.html
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/GMakefile
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRcyr2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LICRlatin2utf8.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/LatinRules.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/admin.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/appdev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/basic.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/build.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkjarc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/latexmkrc
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/make.bat
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/plugindev.tex
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/python.ist
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinx.xdy
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhighlight.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxhowto.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexadmonitions.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexcontainers.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexgraphics.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexindbibtoc.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexlists.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexliterals.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexnumfig.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexobjects.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexshadowbox.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyleheadings.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstylepage.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatexstyletext.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxlatextables.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmanual.cls
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxmessages.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionsgeometry.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxoptionshyperref.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagecyrillic.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/sphinxpackagefootnote.sty
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.pdf
+OLD_FILES+=usr/share/doc/krb5/doc/pdf/user.tex
+OLD_FILES+=usr/share/et/et_c.awk
+OLD_FILES+=usr/share/et/et_h.awk
+OLD_FILES+=usr/share/examples/krb5/kdc.conf
+OLD_FILES+=usr/share/examples/krb5/krb5.conf
+OLD_FILES+=usr/share/examples/krb5/services.append
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/LICENSE
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/MIT
+OLD_FILES+=usr/share/licenses/krb5-1.21.3_1/catalog.mk
+OLD_FILES+=usr/share/locale/de/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/en_US/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/locale/ka/LC_MESSAGES/mit-krb5.mo
+OLD_FILES+=usr/share/man/man1/k5srvutil.1.gz
+OLD_FILES+=usr/share/man/man1/kadmin.1.gz
+OLD_FILES+=usr/share/man/man1/ktutil.1.gz
+OLD_FILES+=usr/share/man/man1/kvno.1.gz
+OLD_FILES+=usr/share/man/man1/sclient.1.gz
+OLD_FILES+=usr/share/man/man5/.k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/.k5login.5.gz
+OLD_FILES+=usr/share/man/man5/k5identity.5.gz
+OLD_FILES+=usr/share/man/man5/k5login.5.gz
+OLD_FILES+=usr/share/man/man5/kadm5.acl.5.gz
+OLD_FILES+=usr/share/man/man5/kdc.conf.5.gz
+OLD_FILES+=usr/share/man/man7/kerberos.7.gz
+OLD_FILES+=usr/share/man/man8/kadmin.local.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_ldap_util.8.gz
+OLD_FILES+=usr/share/man/man8/kdb5_util.8.gz
+OLD_FILES+=usr/share/man/man8/kprop.8.gz
+OLD_FILES+=usr/share/man/man8/kpropd.8.gz
+OLD_FILES+=usr/share/man/man8/kproplog.8.gz
+OLD_FILES+=usr/share/man/man8/krb5kdc.8.gz
+OLD_FILES+=usr/share/man/man8/sserver.8.gz
+.endif
.endif
.if ${MK_KERBEROS_SUPPORT} == no
+.if ${MK_MITKRB5} == no
OLD_FILES+=usr/bin/compile_et
OLD_FILES+=usr/include/com_err.h
OLD_FILES+=usr/include/com_right.h
@@ -3607,6 +6907,7 @@ OLD_FILES+=usr/lib/libcom_err_p.a
OLD_FILES+=usr/share/man/man1/compile_et.1.gz
OLD_FILES+=usr/share/man/man3/com_err.3.gz
.endif
+.endif
.if ${MK_LDNS} == no
OLD_FILES+=usr/lib/libprivateldns.a
@@ -3677,6 +6978,7 @@ OLD_FILES+=usr/bin/ld.lld
.if ${MK_LLDB} == no
OLD_FILES+=usr/bin/lldb
OLD_FILES+=usr/bin/lldb-server
+OLD_LIBS+=usr/lib/libprivatelldb.so.19
OLD_FILES+=usr/share/man/man1/lldb-server.1.gz
OLD_FILES+=usr/share/man/man1/lldb.1.gz
.endif
@@ -5566,12 +8868,12 @@ OLD_FILES+=usr/share/man/man1/genl.1.gz
.endif
.if ${MK_NIS} == no
+OLD_FILES+=etc/rc.d/nisdomain
OLD_FILES+=etc/rc.d/ypbind
OLD_FILES+=etc/rc.d/ypldap
OLD_FILES+=etc/rc.d/yppasswdd
OLD_FILES+=etc/rc.d/ypserv
OLD_FILES+=etc/rc.d/ypset
-OLD_FILES+=etc/rc.d/ypupdated
OLD_FILES+=etc/rc.d/ypxfrd
OLD_FILES+=usr/bin/ypcat
OLD_FILES+=usr/bin/ypchfn
@@ -5589,7 +8891,6 @@ OLD_FILES+=usr/libexec/mknetid
OLD_FILES+=usr/libexec/yppwupdate
OLD_FILES+=usr/libexec/ypxfr
OLD_FILES+=usr/sbin/rpc.yppasswdd
-OLD_FILES+=usr/sbin/rpc.ypupdated
OLD_FILES+=usr/sbin/rpc.ypxfrd
OLD_FILES+=usr/sbin/yp_mkdb
OLD_FILES+=usr/sbin/ypbind
@@ -6645,6 +9946,9 @@ OLD_FILES+=etc/newsyslog.conf.d/pf.conf
OLD_FILES+=etc/periodic/security/520.pfdenied
OLD_FILES+=etc/pf.os
OLD_FILES+=etc/rc.d/ftp-proxy
+OLD_FILES+=etc/rc.d/pf
+OLD_FILES+=etc/rc.d/pflog
+OLD_FILES+=etc/rc.d/pfsync
OLD_FILES+=sbin/pfctl
OLD_FILES+=sbin/pflogd
OLD_FILES+=usr/include/netpfil/pf/pf.h
@@ -6834,6 +10138,7 @@ OLD_FILES+=usr/share/man/man8/pmcstudy.8.gz
.if ${MK_PPP} == no
OLD_FILES+=etc/newsyslog.conf.d/ppp.conf
OLD_FILES+=etc/ppp/ppp.conf
+OLD_FILES+=etc/rc.d/ppp
OLD_FILES+=etc/syslog.d/ppp.conf
OLD_DIRS+=etc/ppp
OLD_FILES+=usr/sbin/ppp
@@ -8125,6 +11430,7 @@ OLD_FILES+=usr/bin/cc
OLD_FILES+=usr/bin/c88
OLD_FILES+=usr/bin/c++
OLD_FILES+=usr/bin/c++filt
+OLD_FILES+=usr/bin/elfcopy
OLD_FILES+=usr/bin/ld
OLD_FILES+=usr/bin/ld.bfd
OLD_FILES+=usr/bin/nm
@@ -8135,6 +11441,7 @@ OLD_FILES+=usr/bin/strip
OLD_FILES+=usr/bin/yacc
OLD_FILES+=usr/share/man/man1/addr2line.1.gz
OLD_FILES+=usr/share/man/man1/c++filt.1.gz
+OLD_FILES+=usr/share/man/man1/elfcopy.1.gz
OLD_FILES+=usr/share/man/man1/nm.1.gz
OLD_FILES+=usr/share/man/man1/readelf.1.gz
OLD_FILES+=usr/share/man/man1/size.1.gz
@@ -8980,12 +12287,14 @@ OLD_FILES+=usr/share/snmp/mibs/BEGEMOT-WIRELESS-MIB.txt
.if ${MK_ZFS} == no
OLD_FILES+=boot/gptzfsboot
-OLD_FILES+=boot/zfsboot
OLD_FILES+=boot/zfsloader
OLD_FILES+=etc/rc.d/zfs
OLD_FILES+=etc/rc.d/zfsbe
OLD_FILES+=etc/rc.d/zfsd
OLD_FILES+=etc/rc.d/zfskeys
+OLD_FILES+=etc/rc.d/zpool
+OLD_FILES+=etc/rc.d/zpoolreguid
+OLD_FILES+=etc/rc.d/zpoolupgrade
OLD_FILES+=etc/rc.d/zvol
OLD_FILES+=etc/devd/zfs.conf
OLD_FILES+=etc/periodic/daily/404.status-zfs
@@ -9080,7 +12389,6 @@ OLD_FILES+=usr/share/man/man8/gptzfsboot.8.gz
OLD_FILES+=usr/share/man/man8/zdb.8.gz
OLD_FILES+=usr/share/man/man8/zfs-program.8.gz
OLD_FILES+=usr/share/man/man8/zfs.8.gz
-OLD_FILES+=usr/share/man/man8/zfsboot.8.gz
OLD_FILES+=usr/share/man/man8/zfsbootcfg.8.gz
OLD_FILES+=usr/share/man/man8/zfsd.8.gz
OLD_FILES+=usr/share/man/man8/zfsloader.8.gz
diff --git a/tools/build/options/WITHOUT_LLVM_TARGET_SPARC b/tools/build/options/WITHOUT_LLVM_TARGET_SPARC
deleted file mode 100644
index 4da802ad0312..000000000000
--- a/tools/build/options/WITHOUT_LLVM_TARGET_SPARC
+++ /dev/null
@@ -1,4 +0,0 @@
-Do not build LLVM target support for SPARC.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
diff --git a/tools/build/options/WITHOUT_MALLOC_PRODUCTION b/tools/build/options/WITHOUT_MALLOC_PRODUCTION
index 57b8ab574f93..90efc200fd54 100644
--- a/tools/build/options/WITHOUT_MALLOC_PRODUCTION
+++ b/tools/build/options/WITHOUT_MALLOC_PRODUCTION
@@ -1,3 +1,8 @@
Enable assertions and statistics gathering in
.Xr malloc 3 .
-It also defaults the A and J runtime options to on.
+The run-time options
+.Dv opt.abort ,
+.Dv opt.abort_conf ,
+and
+.Dv opt.junk
+also default to true.
diff --git a/tools/build/options/WITHOUT_MITKRB5 b/tools/build/options/WITHOUT_MITKRB5
new file mode 100644
index 000000000000..14a9e5932ef2
--- /dev/null
+++ b/tools/build/options/WITHOUT_MITKRB5
@@ -0,0 +1 @@
+Set this to build KTH Heimdal instead of MIT Kerberos 5.
diff --git a/tools/build/options/WITH_CCACHE_BUILD b/tools/build/options/WITH_CCACHE_BUILD
index 9e53769287e5..9a5c2ce1cb80 100644
--- a/tools/build/options/WITH_CCACHE_BUILD
+++ b/tools/build/options/WITH_CCACHE_BUILD
@@ -3,11 +3,18 @@ Use
for the build.
No configuration is required except to install the
.Sy devel/ccache
+or
+.Sy devel/sccache
package.
When using with
.Xr distcc 1 ,
set
.Sy CCACHE_PREFIX=/usr/local/bin/distcc .
+When using with sccache
+set
+.Sy CCACHE_NAME=sccache
+in
+.Xr src.conf 5 .
The default cache directory of
.Pa $HOME/.ccache
will be used, which can be overridden by setting
diff --git a/tools/build/options/WITH_CLEAN b/tools/build/options/WITH_CLEAN
deleted file mode 100644
index d5962258bcc0..000000000000
--- a/tools/build/options/WITH_CLEAN
+++ /dev/null
@@ -1 +0,0 @@
-Clean before building world and/or kernel.
diff --git a/tools/build/options/WITH_LLVM_TARGET_SPARC b/tools/build/options/WITH_LLVM_TARGET_SPARC
deleted file mode 100644
index 0d67602688de..000000000000
--- a/tools/build/options/WITH_LLVM_TARGET_SPARC
+++ /dev/null
@@ -1,4 +0,0 @@
-Build LLVM target support for SPARC.
-The
-.Va LLVM_TARGET_ALL
-option should be used rather than this in most cases.
diff --git a/tools/build/options/WITH_MALLOC_PRODUCTION b/tools/build/options/WITH_MALLOC_PRODUCTION
index 1a214ff805be..ac267bdc48a6 100644
--- a/tools/build/options/WITH_MALLOC_PRODUCTION
+++ b/tools/build/options/WITH_MALLOC_PRODUCTION
@@ -1,3 +1,8 @@
Disable assertions and statistics gathering in
.Xr malloc 3 .
-It also defaults the A and J runtime options to off.
+The run-time options
+.Dv opt.abort ,
+.Dv opt.abort_conf ,
+and
+.Dv opt.junk
+also default to false.
diff --git a/tools/build/options/WITH_MITKRB5 b/tools/build/options/WITH_MITKRB5
new file mode 100644
index 000000000000..6e3683c351c5
--- /dev/null
+++ b/tools/build/options/WITH_MITKRB5
@@ -0,0 +1 @@
+Set this to build MIT Kerberos 5 instead of KTH Heimdal.
diff --git a/tools/build/options/WITH_RUN_TESTS b/tools/build/options/WITH_RUN_TESTS
new file mode 100644
index 000000000000..91b30522a3d3
--- /dev/null
+++ b/tools/build/options/WITH_RUN_TESTS
@@ -0,0 +1 @@
+Run tests as part of the build.
diff --git a/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT b/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
index f3d97df2fb89..32aadf6d46c9 100644
--- a/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
+++ b/tools/build/options/WITH_ZONEINFO_LEAPSECONDS_SUPPORT
@@ -1 +1,6 @@
Build leapsecond information in to the timezone database.
+This option violates
+.St -p1003.1
+and all other applicable standards, and is known to cause unexpected
+issues with date/time handling in many applications and programming
+languages.
diff --git a/tools/build/options/makeman b/tools/build/options/makeman
index e0980d3be607..ddd08443e61c 100755
--- a/tools/build/options/makeman
+++ b/tools/build/options/makeman
@@ -127,8 +127,8 @@ show()
exit 1
;;
esac
- requireds=`env -i ${make} -f ${srcdir}/share/mk/src.opts.mk \
- -V '${__REQUIRED_OPTIONS:ts,}'`
+ requireds=$(env -i ${make} -f ${srcdir}/share/mk/src.opts.mk \
+ -V 'REQUIRED_OPTIONS:ts,')
env -i ${make} .MAKE.MODE=normal "$@" showconfig __MAKE_CONF=/dev/null \
SRCCONF=/dev/null |
while read var _ val ; do
diff --git a/tools/build/options/makeman.lua b/tools/build/options/makeman.lua
new file mode 100644
index 000000000000..e96e6f50174b
--- /dev/null
+++ b/tools/build/options/makeman.lua
@@ -0,0 +1,791 @@
+--
+-- Copyright (c) 2023 Kyle Evans <kevans@FreeBSD.org>
+--
+-- SPDX-License-Identifier: BSD-2-Clause
+--
+
+local libgen = require('posix.libgen')
+local lfs = require('lfs')
+local stdlib = require('posix.stdlib')
+local unistd = require('posix.unistd')
+local sys_wait = require('posix.sys.wait')
+
+local curdate = os.date("%B %e, %Y")
+
+local output_head <const> = ".\\\" DO NOT EDIT-- this file is @" .. [[generated by tools/build/options/makeman.
+.Dd ]] .. curdate .. [[
+
+.Dt SRC.CONF 5
+.Os
+.Sh NAME
+.Nm src.conf
+.Nd "source build options"
+.Sh DESCRIPTION
+The
+.Nm
+file contains variables that control what components will be generated during
+the build process of the
+.Fx
+source tree; see
+.Xr build 7 .
+.Pp
+The
+.Nm
+file uses the standard makefile syntax.
+However,
+.Nm
+should not specify any dependencies to
+.Xr make 1 .
+Instead,
+.Nm
+is to set
+.Xr make 1
+variables that control the aspects of how the system builds.
+.Pp
+The default location of
+.Nm
+is
+.Pa /etc/src.conf ,
+though an alternative location can be specified in the
+.Xr make 1
+variable
+.Va SRCCONF .
+Overriding the location of
+.Nm
+may be necessary if the system-wide settings are not suitable
+for a particular build.
+For instance, setting
+.Va SRCCONF
+to
+.Pa /dev/null
+effectively resets all build controls to their defaults.
+.Pp
+The only purpose of
+.Nm
+is to control the compilation of the
+.Fx
+source code, which is usually located in
+.Pa /usr/src .
+As a rule, the system administrator creates
+.Nm
+when the values of certain control variables need to be changed
+from their defaults.
+.Pp
+In addition, control variables can be specified
+for a particular build via the
+.Fl D
+option of
+.Xr make 1
+or in its environment; see
+.Xr environ 7 .
+.Pp
+The environment of
+.Xr make 1
+for the build can be controlled via the
+.Va SRC_ENV_CONF
+variable, which defaults to
+.Pa /etc/src-env.conf .
+Some examples that may only be set in this file are
+.Va WITH_DIRDEPS_BUILD ,
+and
+.Va WITH_META_MODE ,
+and
+.Va MAKEOBJDIRPREFIX
+as they are environment-only variables.
+.Pp
+The values of
+.Va WITH_
+and
+.Va WITHOUT_
+variables are ignored regardless of their setting;
+even if they would be set to
+.Dq Li FALSE
+or
+.Dq Li NO .
+The presence of an option causes
+it to be honored by
+.Xr make 1 .
+.Pp
+This list provides a name and short description for variables
+that can be used for source builds.
+.Bl -tag -width indent
+]]
+
+local output_tail <const> = [[.El
+.Sh FILES
+.Bl -tag -compact -width Pa
+.It Pa /etc/src.conf
+.It Pa /etc/src-env.conf
+.It Pa /usr/share/mk/bsd.own.mk
+.El
+.Sh SEE ALSO
+.Xr make 1 ,
+.Xr make.conf 5 ,
+.Xr build 7 ,
+.Xr ports 7
+.Sh HISTORY
+The
+.Nm
+file appeared in
+.Fx 7.0 .
+.Sh AUTHORS
+This manual page was autogenerated by
+.An tools/build/options/makeman .
+]]
+
+local scriptdir <const> = libgen.dirname(stdlib.realpath(arg[0]))
+local srcdir <const> = stdlib.realpath(scriptdir .. "/../../../")
+local makesysdir <const> = srcdir .. "/share/mk"
+
+local make_envvar = os.getenv("MAKE")
+local make_cmd_override = {}
+if make_envvar then
+ for word in make_envvar:gmatch("[^%s]+") do
+ make_cmd_override[#make_cmd_override + 1] = word
+ end
+end
+
+-- Lifted from bsdinstall/scripts/pkgbase.in (read_all)
+local function read_pipe(pipe)
+ local ret = ""
+ repeat
+ local buffer = assert(unistd.read(pipe, 1024))
+ ret = ret .. buffer
+ until buffer == ""
+ return ret
+end
+local function run_make(args)
+ local cmd_args = {"env", "-i", "make", "-C", srcdir, "-m", makesysdir,
+ "__MAKE_CONF=/dev/null", "SRCCONF=/dev/null"}
+
+ if #make_cmd_override > 0 then
+ cmd_args[3] = make_cmd_override[1]
+ for k = 2, #make_cmd_override do
+ local val = make_cmd_override[k]
+
+ table.insert(cmd_args, 3 + (k - 1), val)
+ end
+ end
+ for k, v in ipairs(args) do
+ cmd_args[#cmd_args + 1] = v
+ end
+
+ local r, w = assert(unistd.pipe())
+ local pid = assert(unistd.fork())
+ if pid == 0 then
+ -- Child
+ assert(unistd.close(r))
+ assert(unistd.dup2(w, 1))
+ assert(unistd.dup2(w, 2))
+ assert(unistd.execp("env", cmd_args))
+ unistd._exit()
+ end
+
+ -- Parent
+ assert(unistd.close(w))
+
+ local output = read_pipe(r)
+ assert(unistd.close(r))
+
+ local _, exit_type, exit_code = assert(sys_wait.wait(pid))
+ assert(exit_type == "exited", "make exited with wrong status")
+ assert(exit_code == 0, "make exited unsuccessfully")
+ return output
+end
+
+local function native_target()
+ local output = run_make({"MK_AUTO_OBJ=NO", "-V", "MACHINE",
+ "-V", "MACHINE_ARCH"})
+
+ local arch, machine_arch
+ for x in output:gmatch("[^\n]+") do
+ if not arch then
+ arch = x
+ elseif not machine_arch then
+ machine_arch = x
+ end
+ end
+
+ return arch .. "/" .. machine_arch
+end
+
+local function src_targets()
+ local targets = {}
+ targets[native_target()] = true
+
+ local output = run_make({"MK_AUTO_OBJ=no", "targets"})
+ local curline = 0
+
+ for line in output:gmatch("[^\n]+") do
+ curline = curline + 1
+ if curline ~= 1 then
+ local arch = line:match("[^%s]+/[^%s]+")
+
+ -- Make sure we don't roll over our default arch
+ if arch and not targets[arch] then
+ targets[arch] = false
+ end
+ end
+ end
+
+ return targets
+end
+
+local function config_options(srcconf, env, take_dupes, linting)
+ srcconf = srcconf or "/dev/null"
+ env = env or {}
+
+ local option_args = {".MAKE.MODE=normal", "showconfig",
+ "SRC_ENV_CONF=" .. srcconf}
+
+ for _, val in ipairs(env) do
+ option_args[#option_args + 1] = val
+ end
+
+ local output = run_make(option_args)
+
+ local options = {}
+ local known_dupes = {}
+
+ local function warn_on_dupe(option, val)
+ if not linting or known_dupes[option] then
+ return false
+ end
+ if not option:match("^OPT_") then
+ val = val == "yes"
+ end
+
+ known_dupes[option] = true
+ return val ~= options[val]
+ end
+
+ for opt in output:gmatch("[^\n]+") do
+ if opt:match("^MK_[%a%d_]+%s+=%s+.+") then
+ local name = opt:match("MK_[%a%d_]+")
+ local val = opt:match("= .+"):sub(3)
+
+ -- Some settings, e.g., MK_INIT_ALL_ZERO, may end up
+ -- output twice for some reason that I haven't dug into;
+ -- take the first value. In some circumstances, though,
+ -- we do make an exception and actually want to take the
+ -- latest.
+ if take_dupes or options[name] == nil then
+ options[name] = val == "yes"
+ elseif warn_on_dupe(name, val) then
+ io.stderr:write("ignoring duplicate option " ..
+ name .. "\n")
+ end
+ elseif opt:match("^OPT_[%a%d_]+%s+=%s+.+") then
+ local name = opt:match("OPT_[%a%d_]+")
+ local val = opt:match("= .+"):sub(3)
+
+ -- Multi-value options will arbitrarily use a table here
+ -- to indicate the difference.
+ if take_dupes or options[name] == nil then
+ options[name] = val
+ elseif warn_on_dupe(name, val) then
+ io.stderr:write("ignoring duplicate option " ..
+ name .. "\n")
+ end
+ end
+ end
+
+ return options
+end
+
+local function env_only_options()
+ local output = run_make({"MK_AUTO_OBJ=no", "-V", "__ENV_ONLY_OPTIONS"})
+ local options = {}
+
+ for opt in output:gmatch("[^%s]+") do
+ options["MK_" .. opt] = true
+ end
+
+ return options
+end
+
+local function required_options()
+ local output = run_make({"-f", "share/mk/src.opts.mk", "-V",
+ "__REQUIRED_OPTIONS"})
+ local options = {}
+
+ for opt in output:gmatch("[^%s]+") do
+ options["MK_" .. opt] = true
+ end
+
+ return options
+end
+
+local function config_description(option_name)
+ local fh = io.open(scriptdir .. "/" .. option_name)
+ local desc
+
+ if fh then
+ desc = ""
+ for line in fh:lines() do
+ if not line:match("%$FreeBSD%$") then
+ desc = desc .. line .. "\n"
+ end
+ end
+
+ assert(fh:close())
+ end
+
+ return desc
+end
+
+local function config_descriptions(options)
+ local desc = {}
+ for name, _ in pairs(options) do
+ if name:match("^MK_") then
+ local basename = name:gsub("^MK_", "")
+ local with_name = "WITH_" .. basename
+ local without_name = "WITHOUT_" .. basename
+
+ desc[with_name] = config_description(with_name)
+ desc[without_name] = config_description(without_name)
+ elseif name:match("^OPT_") then
+ local basename = name:gsub("^OPT_", "")
+
+ desc[name] = config_description(basename)
+ end
+ end
+ return desc
+end
+
+local function dependent_options(tmpdir, option_name, all_opts, omit_others)
+ local opt_sense = not not option_name:match("^WITH_")
+ local base_option_name = option_name:gsub("^[^_]+_", "")
+ local prefix = (opt_sense and "WITHOUT_") or "WITH_"
+
+ local srcconf = tmpdir .. "/src-" ..prefix .. "ALL_" ..
+ option_name .. ".conf"
+ local fh = assert(io.open(srcconf, "w+"))
+
+ fh:write(option_name .. "=\"YES\"\n")
+ if not omit_others then
+ for opt, value in pairs(all_opts) do
+ local base_opt = opt:gsub("^MK_", "")
+
+ if base_opt ~= base_option_name then
+ local opt_prefix = (value and "WITH_") or "WITHOUT_"
+ fh:write(opt_prefix .. base_opt .. "=\"YES\"\n")
+ end
+ end
+ end
+ assert(fh:close())
+
+ local option_name_key = "MK_" .. base_option_name
+ local options = config_options(srcconf, nil, omit_others)
+ for name, value in pairs(options) do
+ if name == option_name_key or value == all_opts[name] then
+ options[name] = nil
+ elseif name:match("^OPT_") then
+ -- Strip out multi-option values at the moment, they do
+ -- not really make sense.
+ options[name] = nil
+ end
+ end
+
+ return options
+end
+
+local function export_option_table(fd, name, options)
+ unistd.write(fd, name .. " = {")
+ for k, v in pairs(options) do
+ v = (v and "true") or "false"
+ unistd.write(fd, "['" .. k .. "'] = " .. v .. ",")
+ end
+ unistd.write(fd, "}")
+end
+
+local function all_dependent_options(tmpdir, options, default_opts,
+ with_all_opts, without_all_opts)
+ local all_enforced_options = {}
+ local all_effect_options = {}
+ local children = {}
+
+ for _, name in ipairs(options) do
+ local rfd, wfd = assert(unistd.pipe())
+ local pid = assert(unistd.fork())
+
+ if pid == 0 then
+ -- We need to pcall() this so that errors bubble up to
+ -- our _exit() call rather than the main exit.
+ local ret, errobj = pcall(function()
+ unistd.close(rfd)
+
+ local compare_table
+ if name:match("^WITHOUT") then
+ compare_table = with_all_opts
+ else
+ compare_table = without_all_opts
+ end
+
+ -- List of knobs forced on by this one
+ local enforced_options = dependent_options(tmpdir, name,
+ compare_table)
+ -- List of knobs implied by this by one (once additionally
+ -- filtered based on enforced_options values)
+ local effect_options = dependent_options(tmpdir, name,
+ default_opts, true)
+
+ export_option_table(wfd, "enforced_options",
+ enforced_options)
+ export_option_table(wfd, "effect_options",
+ effect_options)
+ end)
+
+ io.stderr:write(".")
+
+ if ret then
+ unistd._exit(0)
+ else
+ unistd.write(wfd, errobj)
+ unistd._exit(1)
+ end
+ end
+
+ unistd.close(wfd)
+ children[pid] = {name, rfd}
+ end
+
+ while next(children) ~= nil do
+::again::
+ local pid, status, exitcode = sys_wait.wait(-1)
+
+ if status ~= "exited" then
+ goto again
+ end
+
+ local info = children[pid]
+ children[pid] = nil
+
+ local name = info[1]
+ local rfd = info[2]
+ local buf = ''
+ local rbuf, sz
+
+ -- Drain the pipe
+ rbuf = unistd.read(rfd, 512)
+ while #rbuf ~= 0 do
+ buf = buf .. rbuf
+ rbuf = unistd.read(rfd, 512)
+ end
+
+ unistd.close(rfd)
+
+ if exitcode ~= 0 then
+ error("Child " .. pid .. " failed, buf: " .. buf)
+ end
+
+ -- The child has written a pair of tables named enforced_options
+ -- and effect_options to the pipe. We'll load the pipe buffer
+ -- as a string and then yank these out of the clean environment
+ -- that we execute the chunk in.
+ local child_env = {}
+ local res, err = pcall(load(buf, "child", "t", child_env))
+
+ all_enforced_options[name] = child_env["enforced_options"]
+ all_effect_options[name] = child_env["effect_options"]
+ end
+
+ io.stderr:write("\n")
+ return all_enforced_options, all_effect_options
+end
+
+local function get_defaults(target_archs, native_default_opts)
+ local target_defaults = {}
+ -- Set of options with differing defaults in some archs
+ local different_defaults = {}
+
+ for tgt, dflt in pairs(target_archs) do
+ if dflt then
+ local native_copy = {}
+ for opt, val in pairs(native_default_opts) do
+ native_copy[opt] = val
+ end
+ target_defaults[tgt] = native_copy
+ goto skip
+ end
+
+ local target = tgt:gsub("/.+$", "")
+ local target_arch = tgt:gsub("^.+/", "")
+
+ local target_opts = config_options(nil, {"TARGET=" .. target,
+ "TARGET_ARCH=" .. target_arch})
+
+ for opt, val in pairs(target_opts) do
+ if val ~= native_default_opts[opt] then
+ different_defaults[opt] = true
+ end
+ end
+
+ target_defaults[tgt] = target_opts
+::skip::
+ end
+
+ for opt in pairs(native_default_opts) do
+ if different_defaults[opt] == nil then
+ for _, opts in pairs(target_defaults) do
+ opts[opt] = nil
+ end
+ end
+ end
+
+ for tgt, opts in pairs(target_defaults) do
+ local val = opts["MK_ACPI"]
+
+ if val ~= nil then
+ print(" - " .. tgt .. ": " .. ((val and "yes") or "no"))
+ end
+ end
+
+ return target_defaults, different_defaults
+end
+
+local function option_comparator(lhs, rhs)
+ -- Convert both options to the base name, compare that instead unless
+ -- they're the same option. For the same option, we just want to get
+ -- ordering between WITH_/WITHOUT_ correct.
+ local base_lhs = lhs:gsub("^[^_]+_", "")
+ local base_rhs = rhs:gsub("^[^_]+_", "")
+
+ if base_lhs == base_rhs then
+ return lhs < rhs
+ else
+ return base_lhs < base_rhs
+ end
+end
+
+local function main(tmpdir)
+ io.stderr:write("building src.conf.5 man page from files in " ..
+ scriptdir .. "\n")
+
+ local env_only_opts <const> = env_only_options()
+ local default_opts = config_options(nil, nil, nil, true)
+ local opt_descriptions = config_descriptions(default_opts)
+ local srcconf_all <const> = tmpdir .. "/src-all-enabled.conf"
+ local fh = io.open(srcconf_all, "w+")
+ local all_targets = src_targets()
+ local target_defaults, different_defaults = get_defaults(all_targets,
+ default_opts)
+ local options = {}
+ local without_all_opts = {}
+
+ for name, value in pairs(default_opts) do
+ if name:match("^MK_") then
+ local base_name = name:gsub("^MK_", "")
+ local with_name = "WITH_" .. base_name
+ local without_name = "WITHOUT_" .. base_name
+ -- If it's differently defaulted on some architectures,
+ -- we'll split it into WITH_/WITHOUT_ just to simplify
+ -- some later bits.
+ if different_defaults[name] ~= nil then
+ options[#options + 1] = with_name
+ options[#options + 1] = without_name
+ elseif value then
+ options[#options + 1] = without_name
+ else
+ options[#options + 1] = with_name
+ end
+
+ without_all_opts[name] = false
+ assert(fh:write(with_name .. '="YES"\n'))
+ else
+ options[#options + 1] = name
+ end
+ end
+
+ assert(fh:close())
+
+ local with_all_opts = config_options(srcconf_all)
+ local all_enforced_options, all_effect_options
+ local all_required_options = required_options()
+
+ all_enforced_options, all_effect_options = all_dependent_options(tmpdir,
+ options, default_opts, with_all_opts, without_all_opts)
+
+ table.sort(options, option_comparator)
+ io.stdout:write(output_head)
+ for _, name in ipairs(options) do
+ local value
+
+ if name:match("^OPT_") then
+ goto skip
+ end
+ assert(name:match("^WITH"), "Name looks wrong: " .. name)
+ local describe_option = name
+
+ value = not not name:match("^WITHOUT")
+
+ -- Normalize name to MK_ for indexing into various other
+ -- arrays
+ name = "MK_" .. name:gsub("^[^_]+_", "")
+
+ print(".It Va " .. describe_option:gsub("^OPT_", ""))
+ if opt_descriptions[describe_option] then
+ io.stdout:write(opt_descriptions[describe_option])
+ else
+ io.stderr:write("Missing description for " ..
+ describe_option .. "\n")
+ end
+
+ local enforced_options = all_enforced_options[describe_option]
+ local effect_options = all_effect_options[describe_option]
+
+ if different_defaults[name] ~= nil then
+ print([[.Pp
+This is a default setting on]])
+
+ local which_targets = {}
+ for tgt, tgt_options in pairs(target_defaults) do
+ if tgt_options[name] ~= value then
+ which_targets[#which_targets + 1] = tgt
+ end
+ end
+
+ table.sort(which_targets)
+ for idx, tgt in ipairs(which_targets) do
+ io.stdout:write(tgt)
+ if idx < #which_targets - 1 then
+ io.stdout:write(", ")
+ elseif idx == #which_targets - 1 then
+ io.stdout:write(" and ")
+ end
+ end
+ print(".")
+ end
+
+ -- Unset any implied options that are actually required.
+ for dep_opt in pairs(enforced_options) do
+ if all_required_options[dep_opt] then
+ enforced_options[dep_opt] = nil
+ end
+ end
+ if next(enforced_options) ~= nil then
+ print([[When set, it enforces these options:
+.Pp
+.Bl -item -compact]])
+
+ local sorted_dep_opt = {}
+ for dep_opt in pairs(enforced_options) do
+ sorted_dep_opt[#sorted_dep_opt + 1] = dep_opt
+ end
+
+ table.sort(sorted_dep_opt)
+ for _, dep_opt in ipairs(sorted_dep_opt) do
+ local dep_val = enforced_options[dep_opt]
+ local dep_prefix = (dep_val and "WITH_") or
+ "WITHOUT_"
+ local dep_name = dep_opt:gsub("^MK_",
+ dep_prefix)
+ print(".It")
+ print(".Va " .. dep_name)
+ end
+
+ print(".El")
+ end
+
+ if next(effect_options) ~= nil then
+ if next(enforced_options) ~= nil then
+ -- Remove any options that were previously
+ -- noted as enforced...
+ for opt, val in pairs(effect_options) do
+ if enforced_options[opt] == val then
+ effect_options[opt] = nil
+ end
+ end
+
+ -- ... and this could leave us with an empty
+ -- set.
+ if next(effect_options) == nil then
+ goto noenforce
+ end
+
+ print(".Pp")
+ end
+
+ print([[When set, these options are also in effect:
+.Pp
+.Bl -inset -compact]])
+
+ local sorted_dep_opt = {}
+ for dep_opt in pairs(effect_options) do
+ sorted_dep_opt[#sorted_dep_opt + 1] = dep_opt
+ end
+
+ table.sort(sorted_dep_opt)
+ for _, dep_opt in ipairs(sorted_dep_opt) do
+ local dep_val = effect_options[dep_opt]
+ local dep_prefix = (dep_val and "WITH_") or
+ "WITHOUT_"
+ local not_dep_prefix = ((not dep_val) and "WITH_") or
+ "WITHOUT_"
+ local dep_name = dep_opt:gsub("^MK_",
+ dep_prefix)
+ local not_dep_name = dep_opt:gsub("^MK_",
+ not_dep_prefix)
+
+ print(".It Va " .. dep_name)
+ print("(unless")
+ print(".Va " .. not_dep_name)
+ print("is set explicitly)")
+ end
+
+ print(".El")
+::noenforce::
+ end
+
+ if env_only_opts[name] ~= nil then
+ print([[.Pp
+This must be set in the environment, make command line, or
+.Pa /etc/src-env.conf ,
+not
+.Pa /etc/src.conf .]])
+ end
+ ::skip::
+ end
+ print([[.El
+.Pp
+The following options accept a single value from a list of valid values.
+.Bl -tag -width indent]])
+ for _, name in ipairs(options) do
+ if name:match("^OPT_") then
+ local desc = opt_descriptions[name]
+
+ print(".It Va " .. name:gsub("^OPT_", ""))
+ if desc then
+ io.stdout:write(desc)
+ else
+ io.stderr:write("Missing description for " ..
+ name .. "\n")
+ end
+ end
+ end
+ io.stdout:write(output_tail)
+end
+
+local tmpdir = "/tmp/makeman." .. unistd.getpid()
+
+if not lfs.mkdir(tmpdir) then
+ error("Failed to create tempdir " .. tmpdir)
+end
+
+-- Catch any errors so that we can properly clean up, then re-throw it.
+local ret, errobj = pcall(main, tmpdir)
+
+for fname in lfs.dir(tmpdir) do
+ if fname ~= "." and fname ~= ".." then
+ assert(os.remove(tmpdir .. "/" .. fname))
+ end
+end
+
+if not lfs.rmdir(tmpdir) then
+ assert(io.stderr:write("Failed to clean up tmpdir: " .. tmpdir .. "\n"))
+end
+
+if not ret then
+ io.stderr:write(errobj .. "\n")
+ os.exit(1)
+end
diff --git a/tools/build/test-includes/Makefile b/tools/build/test-includes/Makefile
index 2c25e0fb32ce..5c45fd7daa4f 100644
--- a/tools/build/test-includes/Makefile
+++ b/tools/build/test-includes/Makefile
@@ -26,6 +26,9 @@ CFLAGS.event.c= -D_WANT_KEVENT32 -D_WANT_FREEBSD11_KEVENT
# details like __inline that the header files must follow to support C89.
CFLAGS+=-ansi
+# Make sure we're pulling in headers from the src tree.
+CFLAGS+=-I${SRCTOP}/sys
+
.include "badfiles.inc"
.for h c in ${HDRS:@x@$x ${x:S,/,_,g:R}.c@}
diff --git a/tools/build/test-includes/badfiles.inc b/tools/build/test-includes/badfiles.inc
index 5f088d3862aa..9feb73edc5d0 100644
--- a/tools/build/test-includes/badfiles.inc
+++ b/tools/build/test-includes/badfiles.inc
@@ -65,11 +65,8 @@ BADHDRS= \
sys/kobj.h \
sys/ksem.h \
sys/ktls.h \
- sys/ktrace.h \
sys/libkern.h \
sys/link_aout.h \
- sys/linker.h \
- sys/linker_set.h \
sys/lock.h \
sys/lock_profile.h \
sys/lockf.h \
@@ -77,7 +74,6 @@ BADHDRS= \
sys/loginclass.h \
sys/mbuf.h \
sys/md4.h \
- sys/md5.h \
sys/mdioctl.h \
sys/memdesc.h \
sys/memrange.h \
@@ -85,7 +81,6 @@ BADHDRS= \
sys/module_khelp.h \
sys/mpt_ioctl.h \
sys/msgbuf.h \
- sys/mutex.h \
sys/namei.h \
sys/osd.h \
sys/pciio.h \
@@ -106,7 +101,6 @@ BADHDRS= \
sys/runq.h \
sys/rwlock.h \
sys/sbuf.h \
- sys/sema.h \
sys/sf_buf.h \
sys/sglist.h \
sys/sigio.h \
@@ -117,10 +111,8 @@ BADHDRS= \
sys/sockopt.h \
sys/stack.h \
sys/stats.h \
- sys/sx.h \
sys/syscallsubr.h \
sys/syslimits.h \
- sys/systm.h \
sys/taskqueue.h \
sys/terminal.h \
sys/termios.h \
@@ -140,7 +132,6 @@ BADHDRS= \
sys/vdso.h \
sys/vmmeter.h \
sys/vnode.h \
- net/bpf.h \
net/bpf_buffer.h \
net/bpf_jitter.h \
net/bpf_zerocopy.h \
@@ -155,13 +146,11 @@ BADHDRS= \
net/if_llc.h \
net/if_media.h \
net/if_mib.h \
- net/if_pfsync.h \
net/if_tap.h \
net/if_tun.h \
net/if_var.h \
net/if_vlan_var.h \
net/iflib.h \
- net/iflib_private.h \
net/ifq.h \
net/mp_ring.h \
net/mppc.h \
@@ -172,9 +161,7 @@ BADHDRS= \
net/paravirt.h \
net/pfil.h \
net/pfkeyv2.h \
- net/pfvar.h \
net/radix.h \
- net/raw_cb.h \
net/rndis.h \
net/route.h \
net/rss_config.h \
@@ -256,9 +243,7 @@ BADHDRS= \
netinet/in_pcb.h \
netinet/in_pcb_var.h \
netinet/in_rss.h \
- netinet/in_systm.h \
netinet/in_var.h \
- netinet/ip.h \
netinet/ip6.h \
netinet/ip_carp.h \
netinet/ip_dummynet.h \
@@ -275,14 +260,11 @@ BADHDRS= \
netinet/sctp_pcb.h \
netinet/sctp_structs.h \
netinet/sctp_sysctl.h \
- netinet/tcp_debug.h \
netinet/tcp_hpts.h \
netinet/tcp_log_buf.h \
netinet/tcp_lro.h \
netinet/tcp_offload.h \
- netinet/tcp_pcap.h \
netinet/tcp_ratelimit.h \
- netinet/tcp_var.h \
netinet/tcpip.h \
netinet/toecore.h \
netinet/udplite.h \
@@ -294,7 +276,6 @@ BADHDRS= \
netinet6/ip6.h \
netinet6/ip6_mroute.h \
netinet6/ip6_var.h \
- netinet6/ip6protosw.h \
netinet6/ip_fw_nat64.h \
netinet6/ip_fw_nptv6.h \
netinet6/mld6.h \
@@ -314,7 +295,6 @@ BADHDRS= \
netipsec/ipsec6.h \
netipsec/key_debug.h \
netipsec/keysock.h \
- netipsec/xform.h \
netsmb/netbios.h \
netsmb/smb.h \
netsmb/smb_conn.h \
diff --git a/tools/diag/prtblknos/main.c b/tools/diag/prtblknos/main.c
index c04b0812d6c6..bfd28206a555 100644
--- a/tools/diag/prtblknos/main.c
+++ b/tools/diag/prtblknos/main.c
@@ -32,11 +32,6 @@
#include <sys/stat.h>
#include <libufs.h>
-union dinode {
- struct ufs1_dinode *dp1;
- struct ufs2_dinode *dp2;
-};
-
void prtblknos(struct fs *fs, union dinode *dp);
struct uufsd disk;
@@ -81,7 +76,7 @@ main(int argc, char *argv[])
if (ufs_disk_fillout_blank(&disk, fsname) == -1 ||
sbfind(&disk, 0) == -1)
err(1, "Cannot access file system superblock on %s", fsname);
- fs = (struct fs *)&disk.d_sb;
+ fs = (struct fs *)&disk.d_sbunion.d_sb;
/* remaining arguments are inode numbers. */
while (*++argv) {
diff --git a/tools/diag/prtblknos/prtblknos.c b/tools/diag/prtblknos/prtblknos.c
index e0d7a7389b48..acd0c1e1a61d 100644
--- a/tools/diag/prtblknos/prtblknos.c
+++ b/tools/diag/prtblknos/prtblknos.c
@@ -33,10 +33,6 @@
#include <libufs.h>
#ifdef PRTBLKNOS
-union dinode {
- struct ufs1_dinode dp1;
- struct ufs2_dinode dp2;
-};
extern struct uufsd disk;
#else /* used by fsdb */
#include <fsck.h>
diff --git a/tools/ifnet/convert_ifapi.sh b/tools/ifnet/convert_ifapi.sh
index b226847c9595..13509cd7182c 100755
--- a/tools/ifnet/convert_ifapi.sh
+++ b/tools/ifnet/convert_ifapi.sh
@@ -157,7 +157,7 @@ handle_misc() {
old=`echo "$__ifp__->if_"${word}`
new=`echo "if_get"${word}"($__ifp__)"`
new=`echo $new | sed -e 's/&/\\\&/'`
- line=`echo $line| sed -e's/'$old'/'$new'/g'`
+ line=`echo $line| sed -e's/'$old'/'$new'/g' | sed -e 's/if_getxname/if_name/'`
return 0;
fi
return 1;
diff --git a/tools/regression/bpf/bpf_filter/Makefile b/tools/regression/bpf/bpf_filter/Makefile
index a02f2cbd5710..4daecb73ebcb 100644
--- a/tools/regression/bpf/bpf_filter/Makefile
+++ b/tools/regression/bpf/bpf_filter/Makefile
@@ -63,7 +63,7 @@ all: ${TEST_CASES}
.if defined(BPF_BENCHMARK)
@-time ${.CURDIR}/${TEST}
.else
- @-env MALLOC_OPTIONS=J ${.CURDIR}/${TEST}
+ @-env MALLOC_CONF=junk:true ${.CURDIR}/${TEST}
.endif
@rm -f ${.CURDIR}/${TEST}
.endfor
diff --git a/tools/regression/tls/ttls3/Makefile b/tools/regression/tls/ttls3/Makefile
index ef00223e4c25..03413ea8e1d6 100644
--- a/tools/regression/tls/ttls3/Makefile
+++ b/tools/regression/tls/ttls3/Makefile
@@ -1,6 +1,6 @@
all: ttls3
-LDFLAGS=-shared -Bsymbolic --allow-shlib-undefined
+LDFLAGS+=-shared -Bsymbolic --allow-shlib-undefined
CFLAGS+= -lpthread
CFLAGS+= -Wl,--rpath=${.OBJDIR}
diff --git a/tools/test/stress2/misc/all.exclude b/tools/test/stress2/misc/all.exclude
index f8a5ea4a91f1..f9b32db95799 100644
--- a/tools/test/stress2/misc/all.exclude
+++ b/tools/test/stress2/misc/all.exclude
@@ -16,8 +16,6 @@ fsck12.sh Waiting for fix 20230319
fsync.sh panic: Journal overflow 20190208
fuse.sh https://people.freebsd.org/~pho/stress/log/log0546.txt 20240828
fuse2.sh https://people.freebsd.org/~pho/stress/log/log0547.txt 20240828
-getrandom.sh Known DoS issue 20201107
-getrandom2.sh Known DoS issue 20200302
gjournal.sh panic: Journal overflow 20190626
gjournal2.sh panic: Journal overflow 20180125
gjournal3.sh panic: Bio not on queue 20171225
@@ -34,6 +32,7 @@ maxvnodes2.sh https://people.freebsd.org/~pho/stress/log/log0083.txt 20210329
memguard.sh https://people.freebsd.org/~pho/stress/log/log0088.txt 20210402
memguard2.sh Waiting for fix commit
memguard3.sh Waiting for fix commit
+mount7.sh https://people.freebsd.org/~pho/stress/log/log0549.txt 20240912
mlockall2.sh Unrecoverable OOM killing seen 20190203
mlockall6.sh https://people.freebsd.org/~pho/stress/log/log0430.txt 20230403
mlockall7.sh Needs further investigation 20210123
@@ -46,6 +45,7 @@ nfs16.sh panic: Failed to register NFS lock locally - error=11 20160608
nullfs28.sh Hang in "mount drain" seen 20220111
oom2.sh Hang in pfault 20180324
overcommit2.sh CAM stuck in vmwait seen 20200112
+pmc4.sh https://people.freebsd.org/~pho/stress/log/log0548.txt 20240904
pmc8.sh panic: [pmc,2749] (ri21, rc1) waiting too long for pmc to ... 20210621
rename14.sh https://people.freebsd.org/~pho/stress/log/log0433.txt 20230409
sctp2.sh panic: Queues are not empty when handling SHUTDOWN-COMPLETE 20210211
@@ -71,8 +71,14 @@ syzkaller59.sh Page fault 20220625
syzkaller65.sh panic: in_pcblookup_hash_locked: invalid local address 20230318
syzkaller66.sh panic: in_pcbconnect: inp is already connected 20230621
syzkaller67.sh panic: ASan: Invalid access, 8-byte read at ... 20230621
+syzkaller80.sh panic 20250711
+syzkaller81.sh panic 20250711
+syzkaller82.sh panic: m_apply, length > size of mbuf chain 20250724
+quota3.sh https://people.freebsd.org/~pho/stress/log/log0604.txt 20250728
quota6.sh https://people.freebsd.org/~pho/stress/log/log0456.txt 20240707
truss3.sh WiP 20200915
+zfs18.sh https://people.freebsd.org/~pho/stress/log/log0560.txt 20241118
+zfs9.sh panic: sacked_bytes < 0 20250711
# Test not to run for other reasons:
diff --git a/tools/test/stress2/misc/datamove6.sh b/tools/test/stress2/misc/datamove6.sh
new file mode 100755
index 000000000000..88bfea425bdc
--- /dev/null
+++ b/tools/test/stress2/misc/datamove6.sh
@@ -0,0 +1,50 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Variation of the datamove.sh, using MSDOSFS
+
+# No problems seen
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+here=`pwd`
+prog=$(basename "$0" .sh)
+cd /tmp
+sed '1,/^EOF/d' < $here/datamove.sh > $prog.c
+mycc -o $prog -Wall -Wextra -O2 -g $prog.c
+rm -f $prog.c
+
+set -eu
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 2g -u $mdstart
+newfs_msdos -F 32 -b 8192 /dev/md$mdstart 2> /dev/null
+#mount -t msdosfs /dev/md$mdstart $mntpoint
+mount_msdosfs -m 777 /dev/md$mdstart $mntpoint
+set +e
+
+$here/../testcases/swap/swap -t 5m -i 100 -h &
+for i in `jot 5`; do
+ su $testuser -c "cd $mntpoint; /tmp/$prog"
+done
+mv /tmp/$prog $mntpoint
+for i in `jot 5`; do
+ mkdir -p $mntpoint/datamove.dir.$i
+ cd $mntpoint/datamove.dir.$i
+ $mntpoint/$prog &
+done
+pkill swap
+wait
+while mount | grep -q $mntpoint; do
+ umount -f $mntpoint > /dev/null 2>&1
+done
+mdconfig -d -u $mdstart
+
+exit 0
diff --git a/tools/test/stress2/misc/exlock2.sh b/tools/test/stress2/misc/exlock2.sh
index e1760cc52a4d..811fd96f502c 100755
--- a/tools/test/stress2/misc/exlock2.sh
+++ b/tools/test/stress2/misc/exlock2.sh
@@ -150,7 +150,7 @@ out:
usleep(100);
}
if (debug != 0 && e != 0)
- system("ps -Uroot | grep -v grep | grep /tmp/exlock2 | "\
+ system("ps -x | grep -v grep | grep /tmp/exlock2 | "\
"awk '{print $1}' | xargs procstat -f");
share[SYNC] = 0;
diff --git a/tools/test/stress2/misc/ftruncate3.sh b/tools/test/stress2/misc/ftruncate3.sh
new file mode 100755
index 000000000000..7373ae8d22a8
--- /dev/null
+++ b/tools/test/stress2/misc/ftruncate3.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+# Test scenario from Bug 64816: [nfs] [patch] mmap and/or ftruncate does not work correctly on nfs mounted file systems
+
+. ../default.cfg
+
+set -u
+grep -q $mntpoint /etc/exports ||
+ { echo "$mntpoint missing from /etc/exports"; exit 0; }
+rpcinfo 2>/dev/null | grep -q mountd || exit 0
+
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+void error(char *msg)
+{
+ fprintf(stderr, "Error: %s\nSystem error %d: %s\n", msg, errno, strerror(errno));
+ exit(-1);
+}
+
+#define SZ 1024 // Less than page size
+
+int main(int argn, char *argv[])
+{
+ int fd, s;
+ char buffer[SZ];
+ char *map;
+
+ if (argn!=2)
+ {
+ fprintf(stderr, "Usage:\n %s [filename]\n", argv[0]);
+ _exit(-1);
+ }
+
+ memset(buffer, 0, SZ);
+ s = 0;
+
+ fd=open(argv[1], O_RDWR|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);
+ if (fd==-1)
+ error("Could not create file");
+
+ if (write(fd, buffer, SZ)!=SZ)
+ error("Could not write buffer");
+
+ map=mmap(NULL, SZ, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+ if (map==MAP_FAILED)
+ error("Map failed");
+ map[SZ-1]=1;
+
+ if (ftruncate(fd, SZ+1)!=0)
+ error("Could not truncate file");
+
+ if (map[SZ-1]==1)
+ printf("Test passed\n");
+ else {
+ printf("Test failed\n");
+ s = 1;
+ }
+
+ exit(s);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 -g /tmp/$prog.c || exit 1
+
+mount | grep -q "on $mntpoint " && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -s 1g -u $mdstart
+newfs -n $newfs_flags /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+mp2=${mntpoint}2
+mkdir -p $mp2
+mount | grep -q "on $mp2 " && umount -f $mp2
+mount -t nfs -o retrycnt=3 127.0.0.1:$mntpoint $mp2 || exit 1
+sleep .2
+mount | grep $mntpoint
+
+cd $mp2
+/tmp/$prog $prog.data; s=$?
+ls -ls $mp2/$prog.data
+cd -
+
+umount $mp2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/fullpath2.sh b/tools/test/stress2/misc/fullpath2.sh
index e4024c32f317..413f832420d4 100755
--- a/tools/test/stress2/misc/fullpath2.sh
+++ b/tools/test/stress2/misc/fullpath2.sh
@@ -123,7 +123,7 @@ static volatile u_int *share;
#define NB 1024
#define RUNTIME 300
-/* dtrace -w -n 'fbt::*vn_fullpath1:entry {@rw[execname,probefunc] = count(); }' */
+/* dtrace -n 'fbt::vn_fullpath:entry {@rw[execname,probefunc] = count(); }' */
static void
getfiles(pid_t pid)
diff --git a/tools/test/stress2/misc/growfs3.sh b/tools/test/stress2/misc/growfs3.sh
new file mode 100755
index 000000000000..33e8327cdbbc
--- /dev/null
+++ b/tools/test/stress2/misc/growfs3.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 32g -u $mdstart
+/sbin/gpart create -s GPT md$mdstart > /dev/null
+/sbin/gpart add -t freebsd-ufs -s 2g -a 4k md$mdstart > /dev/null
+set +e
+
+newfs_flags=$(echo "-O1" "-O2" "-U" "-j" | awk -v N=`jot -r 1 1 4` '{print $N}')
+echo "newfs $newfs_flags md${mdstart}p1"
+newfs $newfs_flags md${mdstart}p1 > /dev/null
+[ "$newfs_flags" = "-O2" ] &&
+ tunefs -n disable md${mdstart}p1 > /dev/null 2>&1
+mount /dev/md${mdstart}p1 $mntpoint
+cp -r /usr/include $mntpoint/inc1
+umount $mntpoint
+
+gpart resize -i 1 -s 31g -a 4k md$mdstart
+growfs -y md${mdstart}p1 > /dev/null
+
+mount /dev/md${mdstart}p1 $mntpoint
+cp -r /usr/include $mntpoint/inc2
+umount $mntpoint
+fsck -fy /dev/md${mdstart}p1 > $log 2>&1; s=$?
+grep -q "WAS MODIFIED" $log && { cat $log; s=1; }
+rm -f $log
+mdconfig -d -u $mdstart
+exit $s
diff --git a/tools/test/stress2/misc/kcmp.sh b/tools/test/stress2/misc/kcmp.sh
new file mode 100755
index 000000000000..7c571dd8e8a1
--- /dev/null
+++ b/tools/test/stress2/misc/kcmp.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Seen:
+# UID PID PPID C PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND
+# 0 3730 3668 11 20 0 13596 2904 exithold DE+ 0 1:59.68 ./kcmp
+
+# Fixed by: 5b3e5c6ce3e5
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+static void *
+t1(void *data __unused)
+{
+ for (;;)
+ pause();
+
+ return (NULL);
+}
+
+int
+main(void)
+{
+ pid_t p1, p2;
+ pthread_t tid[2];
+ time_t start;
+ uintptr_t idx1, idx2;
+ int r;
+
+ if ((r = pthread_create(&tid[0], NULL, t1, NULL)) != 0)
+ errc(1, r, "pthread_create");
+ if ((r = pthread_create(&tid[1], NULL, t1, NULL)) != 0)
+ errc(1, r, "pthread_create");
+
+ start = time(NULL);
+ while (time(NULL) - start < 60) {
+ idx1 = idx2 = 0;
+ p1 = arc4random() % 1000000;
+ p2 = arc4random() % 1000000;
+ kcmp(p1, p2, KCMP_VM, idx1, idx2);
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+/tmp/$prog
+
+rm /tmp/$prog.c /tmp/$prog
+exit 0
diff --git a/tools/test/stress2/misc/marcus8.sh b/tools/test/stress2/misc/marcus8.sh
new file mode 100755
index 000000000000..0c6110c8ec4c
--- /dev/null
+++ b/tools/test/stress2/misc/marcus8.sh
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+# Run with marcus.cfg on a 5g swap backed MD with UFS non SU fs.
+# Check for non empty file system after test.
+
+. ../default.cfg
+
+set -u
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 4g -u $mdstart
+newfs_flags="" # With SU this test runs out of disk space
+newfs $newfs_flags md$mdstart > /dev/null
+tunefs -n disable md$mdstart # Remove the default SU flag
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+
+export runRUNTIME=5m
+export CTRLDIR=$mntpoint/stressX.control
+export RUNDIR=$mntpoint/stressX
+
+su $testuser -c 'cd ..; ./run.sh marcus.cfg'
+
+nb=`find $RUNDIR | wc -l`
+[ $nb -gt 1 ] && { find $RUNDIR -ls | head -12; s=1; } || s=0
+n=0
+while mount | grep $mntpoint | grep -q /dev/md; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
+done
+checkfs /dev/md$mdstart; s2=$?
+mdconfig -d -u $mdstart
+exit $((s + s2))
diff --git a/tools/test/stress2/misc/mmap43.sh b/tools/test/stress2/misc/mmap43.sh
index 98f1de174d54..8508d5865aef 100755
--- a/tools/test/stress2/misc/mmap43.sh
+++ b/tools/test/stress2/misc/mmap43.sh
@@ -10,7 +10,7 @@
set -u
prog=$(basename "$0" .sh)
-log=/tmp/$prog.log
+log=`dirname $diskimage`/$prog.log
rm -f $log
cat > /tmp/$prog.c <<EOF
#include <sys/mman.h>
@@ -148,7 +148,12 @@ s=0
start=`date +%s`
while [ $((`date +%s` - start)) -lt 300 ]; do
st=`date +%s`
- cp file.orig file
+ cp file.orig file || {
+ # Workaround for known UFS SU ENOSPC issue
+ echo "Flush file system buffers and retry."
+ (cd $mntpoint; umount $mntpoint) > /dev/null 2>&1 # busy umount
+ cp file.orig file || exit 1
+ }
for i in `jot $n`; do
timeout -k 70s 1m /tmp/$prog.sort /dev/zero &
done
diff --git a/tools/test/stress2/misc/mprotect3.sh b/tools/test/stress2/misc/mprotect3.sh
new file mode 100755
index 000000000000..9bd4a6f9be79
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect3.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+# Test scenario from:
+# Bug 272585 - calling mprotect in an mmap-ed stack can affect non-target pages
+# Test scenario by: John F. Carr <jfc mit edu>
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+/* Test program from:
+ Bug 272585 - calling mprotect in an mmap-ed stack can affect non-target pages
+ */
+#include <err.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <sys/mman.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#ifndef MAP_GROWSDOWN
+#define MAP_GROWSDOWN 0
+#endif
+#ifndef MAP_STACK
+#define MAP_STACK 0
+#endif
+
+int main(void)
+{
+ long pagesize;
+ char *addr, *guard;
+ size_t alloc_size;
+
+ pagesize = sysconf(_SC_PAGESIZE);
+ if (pagesize < 0)
+ err(EX_OSERR, "getPAGESIZE");
+
+ alloc_size = 0x200000 + pagesize;
+
+ addr = mmap(0, alloc_size, PROT_READ|PROT_WRITE,
+ MAP_GROWSDOWN|MAP_STACK|MAP_PRIVATE|MAP_ANONYMOUS,
+ -1, 0);
+ if (addr == MAP_FAILED) {
+ err(EX_OSERR, "mmap");
+ }
+
+ /* Only 0x20 causes a failure. */
+ guard = addr + alloc_size - 0x20 * pagesize;
+
+ if (mprotect(guard, pagesize, PROT_NONE)) {
+ err(EX_OSERR, "mprotect");
+ }
+
+ printf("mapped %p..%p, guard at %p\n", addr, addr + alloc_size, guard);
+ fflush(stdout);
+
+ ((volatile char *)guard)[-1];
+
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 0
+
+cd /tmp
+./$prog; s=$?
+cd -
+
+rm -f /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit $s
diff --git a/tools/test/stress2/misc/mprotect4.sh b/tools/test/stress2/misc/mprotect4.sh
new file mode 100755
index 000000000000..c233d20852a2
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect4.sh
@@ -0,0 +1,109 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+/* N readers and 1 writer threaded test scenario */
+
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <assert.h>
+#include <err.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+static int go, n, ps;
+static char *cp;
+static volatile char v;
+
+void *
+rd(void *arg __unused)
+{
+ int i;
+
+ while (go == 0)
+ usleep(100);
+ while (go == 1) {
+ for (i = 0; i < n; i += ps) {
+ v = cp[i];
+ }
+ pthread_yield();
+ }
+ return(NULL);
+}
+
+void
+usage(char *prog) {
+ fprintf(stderr, "Usage: %s <number of threads>\n", prog);
+ _exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ pthread_t *tid;
+ time_t start;
+ int e, i, nb;
+
+ if (argc != 2)
+ usage(argv[0]);
+ if (sscanf(argv[1], "%d", &n) != 1)
+ usage(argv[0]);
+ if (n > 1)
+ n--;
+ if ((tid = calloc(n, sizeof(pthread_t *))) == NULL)
+ err(1, "calloc()");
+
+ ps = getpagesize();
+ cp = mmap(NULL, n * ps, PROT_READ, MAP_PRIVATE | MAP_ANON, -1, 0);
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_create(&tid[i], NULL, rd, NULL)) != 0)
+ errc(1, e, "pthread_create()");
+ }
+ go = 1;
+
+ nb = 0;
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ for (i = 0; i < n; i += ps) {
+ if (mprotect(&cp[i], ps, PROT_READ|PROT_WRITE) == -1)
+ err(1, "mprotect(PROT_READ)");
+ cp[i] = 1;
+ if (mprotect(&cp[i], ps, PROT_READ) == -1)
+ err(1, "mprotect(PROT_READ)");
+ nb++;
+ }
+ }
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_join(tid[i], NULL)) != 0)
+ errc(1, e, "pthread_join() in loop %d", i);
+ }
+ if (nb >= 0) {
+#if defined(DEBUG)
+ fprintf(stderr, "%d loops\n", nb);
+#endif
+ ;
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+/tmp/$prog `sysctl -n hw.ncpu`; s=$?
+
+rm -d /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/mprotect5.sh b/tools/test/stress2/misc/mprotect5.sh
new file mode 100755
index 000000000000..ab4d2eeee118
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect5.sh
@@ -0,0 +1,118 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+/* N writers threaded test scenario */
+
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <assert.h>
+#include <err.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+static pthread_mutex_t write_mutex;
+static int go, n, ps;
+static char *cp, *wp;
+
+void *
+wr(void *arg __unused)
+{
+ while (go == 0)
+ usleep(100);
+ while (go == 1) {
+ pthread_mutex_lock(&write_mutex);
+ if (wp != NULL)
+ *wp += 1;
+ pthread_mutex_unlock(&write_mutex);
+ }
+ return(NULL);
+}
+
+void
+usage(char *prog) {
+ fprintf(stderr, "Usage: %s <number of threads>\n", prog);
+ _exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ pthread_t *tid;
+ time_t start;
+ int e, i, nb;
+
+ if (argc != 2)
+ usage(argv[0]);
+ if (sscanf(argv[1], "%d", &n) != 1)
+ usage(argv[0]);
+ if (n > 1)
+ n--;
+ if ((tid = calloc(n, sizeof(pthread_t *))) == NULL)
+ err(1, "calloc()");
+
+ ps = getpagesize();
+ cp = mmap(NULL, n * ps, PROT_READ, MAP_PRIVATE | MAP_ANON, -1, 0);
+ pthread_mutex_init(&write_mutex, NULL);
+ pthread_mutex_lock(&write_mutex);
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_create(&tid[i], NULL, wr, NULL)) != 0)
+ errc(1, e, "pthread_create()");
+ }
+ go = 1;
+
+ nb = 0;
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ for (i = 0; i < n; i += ps) {
+ pthread_mutex_lock(&write_mutex);
+ if (mprotect(&cp[i], ps, PROT_READ|PROT_WRITE) == -1)
+ err(1, "mprotect(PROT_READ)");
+ cp[i] = 0;
+ wp = &cp[i];
+ pthread_mutex_unlock(&write_mutex);
+
+ usleep(100);
+
+ pthread_mutex_lock(&write_mutex);
+ if (mprotect(&cp[i], ps, PROT_READ) == -1)
+ err(1, "mprotect(PROT_READ)");
+ wp = NULL;
+ pthread_mutex_unlock(&write_mutex);
+ nb++;
+ }
+ }
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_join(tid[i], NULL)) != 0)
+ errc(1, e, "pthread_join() in loop %d", i);
+ }
+ if (nb >= 0) {
+#if defined(DEBUG)
+ fprintf(stderr, "%d loops\n", nb);
+#endif
+ ;
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+/tmp/$prog `sysctl -n hw.ncpu`; s=$?
+
+rm -d /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/mprotect6.sh b/tools/test/stress2/misc/mprotect6.sh
new file mode 100755
index 000000000000..ef1443c216d3
--- /dev/null
+++ b/tools/test/stress2/misc/mprotect6.sh
@@ -0,0 +1,146 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <sys/types.h>
+#include <sys/mman.h>
+
+#include <assert.h>
+#include <err.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+static pthread_mutex_t write_mutex;
+static volatile int done;
+static int go, n, *once, *p, ps;
+
+static void *
+wr(void *arg)
+{
+ int idx;
+
+ alarm(180);
+ idx = *(int *)arg;
+ while (go == 0)
+ usleep(100);
+ while (go == 1) {
+ while (go == 1 && once[idx] == 0)
+ usleep(100);
+ if (go == 0)
+ break;
+ p[idx]++;
+ once[idx] = 0;
+ pthread_mutex_lock(&write_mutex);
+ done++;
+ pthread_mutex_unlock(&write_mutex);
+ }
+ return(NULL);
+}
+
+static void
+setonce(int val)
+{
+ int i;
+
+ for (i = 0; i < n; i++)
+ once[i] = val;
+}
+
+static void
+usage(char *prog) {
+ fprintf(stderr, "Usage: %s <number of threads>\n", prog);
+ _exit(1);
+}
+
+int
+main(int argc, char *argv[])
+{
+ pthread_t *tid;
+ time_t start;
+ int *arg;
+ int e, i, nb, r;
+
+ if (argc != 2)
+ usage(argv[0]);
+ if (sscanf(argv[1], "%d", &n) != 1)
+ usage(argv[0]);
+ if (n > 1)
+ n--;
+ if ((tid = calloc(n, sizeof(pthread_t *))) == NULL)
+ err(1, "calloc()");
+ if ((once = calloc(n, sizeof(int *))) == NULL)
+ err(1, "calloc()");
+ setonce(0);
+
+ ps = getpagesize();
+ p = mmap(NULL, n * ps, PROT_READ, MAP_PRIVATE | MAP_ANON, -1, 0);
+ go = 0;
+ pthread_mutex_init(&write_mutex, NULL);
+ for (i = 0; i < n; i++) {
+ arg = malloc(sizeof(int));
+ *arg = i;
+ if ((e = pthread_create(&tid[i], NULL, wr, (void *)arg)) != 0)
+ errc(1, e, "pthread_create()");
+ }
+ go = 1;
+
+ nb = 0;
+ start = time(NULL);
+ while (time(NULL) - start < 120) {
+ if (mprotect(p, n * ps, PROT_READ|PROT_WRITE) == -1)
+ err(1, "mprotect(PROT_READ)");
+ done = 0;
+ setonce(1);
+ while (done != n)
+ usleep(100);
+ if (mprotect(p, n * ps, PROT_READ) == -1)
+ err(1, "mprotect(PROT_READ)");
+ nb++;
+ usleep(100);
+ }
+ go = 0;
+ for (i = 0; i < n; i++) {
+ if ((e = pthread_join(tid[i], NULL)) != 0)
+ errc(1, e, "pthread_join() in loop %d", i);
+ }
+ r = 0;
+ for (i = 1; i < n; i++) {
+ if (p[0] != p[i])
+ r++;
+ }
+ if (r != 0) {
+ fprintf(stderr, "%d loops.\n", nb);
+ for (i = 0; i < n; i++)
+ fprintf(stderr, "p[%3d] = %d\n", i, p[i]);
+ }
+
+ return (r);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 -g /tmp/$prog.c -lpthread || exit 1
+
+n=`sysctl -n hw.ncpu`
+if [ $# -eq 1 ]; then
+ echo $1 | grep -Eq '^[0-9]+$' && n=$1
+fi
+../testcases/swap/swap -t 2m > /dev/null &
+sleep 10
+/tmp/$prog $n; s=$?
+pkill -9 swap
+wait
+
+rm -d /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/msdos17.sh b/tools/test/stress2/misc/msdos17.sh
new file mode 100755
index 000000000000..392a9a622b9a
--- /dev/null
+++ b/tools/test/stress2/misc/msdos17.sh
@@ -0,0 +1,144 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# No problems observed
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+mount | grep -q "on $mntpoint " && umount $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 1g -u $mdstart
+gpart create -s bsd md$mdstart > /dev/null
+gpart add -t freebsd-ufs md$mdstart > /dev/null
+part=a
+newfs_msdos -F 32 -b 8192 /dev/md${mdstart}$part > /dev/null || exit 1
+mount -t msdosfs /dev/md${mdstart}$part $mntpoint
+
+here=`pwd`
+cd /tmp
+cat > $prog.c <<EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <machine/atomic.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static volatile u_int *share;
+static char file1[80], file2[80];
+
+#define SYNC 0
+#define STOP 1
+
+static void
+test0(void)
+{
+ struct stat sb;
+
+ while (share[STOP] == 0) {
+ while (share[SYNC] != 0)
+ usleep(100);
+ if (rename(file1, file2) == -1)
+ err(1, "rename(%s, %s)", file1, file2);
+ if (stat(file1, &sb) == 0)
+ err(1, "stat(%s)", file1);
+ atomic_add_int(&share[SYNC], 1);
+ }
+
+ _exit(0);
+}
+
+static void
+test1(void)
+{
+ struct stat sb;
+
+ while (share[STOP] == 0) {
+ while (share[SYNC] != 1)
+ usleep(100);
+ if (rename(file2, file1) == -1)
+ err(1, "rename(%s, %s)", file2, file1);
+ if (stat(file2, &sb) == 0)
+ err(1, "stat(%s)", file2);
+ atomic_add_int(&share[SYNC], -1);
+ }
+
+ _exit(0);
+}
+
+int
+main(void)
+{
+ pid_t pids[2];
+ size_t len;
+ int fd;
+ char cwd[80];
+
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ if (getcwd(cwd, sizeof(cwd)) == NULL)
+ err(1, "getcwd()");
+ snprintf(file1, sizeof(file1), "%s/a.%06d", cwd, getpid());
+ snprintf(file2, sizeof(file2), "%s/b.%06d", cwd, getpid());
+ if ((fd = open(file1, O_CREAT, 0640)) == -1)
+ err(1, "open(%s)", file1);
+ close(fd);
+
+ if ((pids[0] = fork()) == 0)
+ test0();
+ if ((pids[1] = fork()) == 0)
+ test1();
+
+ sleep(120);
+ share[STOP] = 1;
+
+ if (waitpid(pids[0], NULL, 0) == -1)
+ err(1, "waitpid(%d)", pids[0]);
+ if (waitpid(pids[1], NULL, 0) == -1)
+ err(1, "waitpid(%d)", pids[1]);
+ unlink(file1);
+ unlink(file2);
+}
+EOF
+mycc -o $prog -Wall $prog.c || exit 1
+rm -f $prog.c
+cd $here
+
+(cd ../testcases/swap; ./swap -t 5m -i 20 -l 100) &
+cd $mntpoint
+pids=""
+for i in `jot 30`; do
+ /tmp/$prog &
+ pids="$pids $!"
+done
+for pid in $pids; do
+ wait $pid
+done
+cd $here
+while pkill swap; do :; done
+wait
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog
+exit 0
diff --git a/tools/test/stress2/misc/msdos20.sh b/tools/test/stress2/misc/msdos20.sh
new file mode 100755
index 000000000000..96c224a629f3
--- /dev/null
+++ b/tools/test/stress2/misc/msdos20.sh
@@ -0,0 +1,87 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# msdosfs disk image fuzz test.
+# No problems seen
+
+. ../default.cfg
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+cc -o /tmp/flip -Wall -Wextra -O2 ../tools/flip.c || exit 1
+
+set -eu
+u1=$mdstart
+u2=$((mdstart + 1))
+mp1=${mntpoint}$u1
+mp2=${mntpoint}$u2
+mkdir -p $mp1 $mp2
+prog=$(basename "$0" .sh)
+backup=/tmp/$prog.sh.diskimage.`date +%Y%m%dT%H%M%S`
+cap=$((32 * 1024)) # Only fuzz the first 32k
+log=$mp1/$prog.sh.log
+diskimage=$mp1/msdos20.sh.diskimage
+
+set +e
+mount | grep "on $mp2 " | grep -q /dev/md && umount -f $mp2
+mount | grep "on $mp1 " | grep -q /dev/md && umount -f $mp1
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+[ -c /dev/md$u1 ] && mdconfig -d -u $u1
+mdconfig -a -t swap -s 2g -u $u1
+newfs -U /dev/md$u1 > /dev/null
+mount /dev/md$u1 $mp1
+
+size=32m
+type=`jot -r 1 1 3`
+[ $type -eq 3 ] && size=260m
+[ -c /dev/md$u2 ] && mdconfig -d -u $u2
+dd if=/dev/zero of=$diskimage bs=$size count=1 status=none
+mdconfig -a -t vnode -f $diskimage -u $u2
+[ $type -eq 1 ] && newfs_msdos -F 12 /dev/md$u2 > /dev/null 2>&1
+[ $type -eq 2 ] && newfs_msdos -F 16 /dev/md$u2 > /dev/null 2>&1
+[ $type -eq 3 ] && newfs_msdos -F 32 -b 4096 /dev/md$u2 > /dev/null 2>&1
+
+mount -t msdosfs /dev/md$u2 $mp2 || { echo "Initial mount of type $type failed"; exit 1; }
+if [ -d /usr/include/sys ]; then
+ mkdir $mp2/sys
+ cp /usr/include/sys/elf_common.h $mp2/sys
+ cp /usr/include/sys/soundcard.h $mp2/sys
+ cp /usr/include/sys/sysproto.h $mp2/sys
+fi
+umount $mp2
+
+cd $mp1
+start=`date +%s`
+nn=0
+s=0
+while [ $((`date +%s` - start)) -lt 240 ]; do
+ mount -t msdosfs /dev/md$u2 $mp2 2>/dev/null || { s=1; break; }
+ ls -lR $mp2 > /dev/null 2>&1 || { s=2; break; }
+ rm -rf $mp2/* > /dev/null 2>&1 || { s=3; break; }
+ touch $mp2/`jot -rc 8 a z | tr -d '\n'` || { s=4; break; }
+ while mount | grep -q "on $mp2 "; do umount $mp2; done
+ echo * | grep -q core && { s=5; break; }
+ sync
+ mdconfig -d -u $u2
+ /tmp/flip -n 10 -s $cap $diskimage
+ cp $diskimage $backup
+ fsync $backup
+ sync
+ mdconfig -a -t vnode -f $diskimage -u $u2
+ nn=$((nn + 1))
+done
+#echo "Exit after $nn loops on a type $type MSDOS FS with code $s"
+mount | grep -q "on $mp2 " && umount $mp2
+mdconfig -d -u $u2 || exit 1
+
+echo * | grep -q core && { ls -l *.core; cp $log /tmp; exit 106; } ||
+cd /tmp
+umount $mp1
+mdconfig -d -u $u1
+rm -f /tmp/flip $backup
+exit 0
diff --git a/tools/test/stress2/misc/msdos21.sh b/tools/test/stress2/misc/msdos21.sh
new file mode 100755
index 000000000000..68ea94eab105
--- /dev/null
+++ b/tools/test/stress2/misc/msdos21.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# Test scenario from https://reviews.freebsd.org/D43951 "Fix MSDOSFS rename (in case target exists)"
+# Test scenario by se@
+
+# Triggered a panic with a WiP kernel patch.
+
+set -u
+[ -f "`which rsync`" ] || exit 0
+[ -d /usr/src/lib ] || exit 0
+
+MDUNIT=10
+FS=/mnt/test
+mdconfig -u $MDUNIT -t malloc -s 512m
+newfs_msdos -c 8 -F 32 /dev/md$MDUNIT > /dev/null 2>&1
+mkdir -p $FS
+mount -t msdos /dev/md$MDUNIT $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+umount $FS
+fsck_msdosfs -y /dev/md$MDUNIT; s=$?
+mdconfig -d -u $MDUNIT
+
+exit $s
diff --git a/tools/test/stress2/misc/newfs8.sh b/tools/test/stress2/misc/newfs8.sh
new file mode 100755
index 000000000000..56ee07cba9b1
--- /dev/null
+++ b/tools/test/stress2/misc/newfs8.sh
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Variation of newfs.sh with VM pressure added
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+mount | grep "$mntpoint" | grep md$mdstart > /dev/null &&
+ umount $mntpoint
+mdconfig -l | grep md$mdstart > /dev/null && mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 20g -u $mdstart
+
+log=/tmp/newfs.sh.log
+s=0
+export RUNDIR=$mntpoint/stressX
+export runRUNTIME=2m
+export RUNTIME=$runRUNTIME
+export CTRLDIR=$mntpoint/stressX.control
+start=`date '+%s'`
+for opt in -O2 -U -j; do
+ blocksize=4096
+ while [ $blocksize -le 65536 ]; do
+ for i in 8 4 2 1; do
+ fragsize=$((blocksize / i))
+ echo "`date +%T` newfs $opt -b $blocksize -f $fragsize"\
+ "md$mdstart"
+ newfs $opt -b $blocksize -f $fragsize \
+ md$mdstart > /dev/null || { s=1; continue; }
+ [ "$opt" = "-O2" ] && tunefs -n disable md$mdstart > /dev/null 2>&1
+ mount /dev/md$mdstart $mntpoint || { s=2; continue; }
+ chmod 777 $mntpoint
+ su $testuser -c \
+ "(cd ..; ./run.sh io.cfg > /dev/null 2>&1)" &
+ sleep 30
+ while pkill swap; do :; done
+ while pkill -U $testuser; do :; done
+ ../tools/killall.sh || { echo "Failed at $opt -b $blocksize -f $fragsize$"; \
+ exit 3; }
+ wait
+ while mount | grep "$mntpoint" | \
+ grep -q md$mdstart; do
+ umount $mntpoint > /dev/null 2>&1 || sleep 1
+ done
+ fsck -fy /dev/md$mdstart > $log 2>&1
+ grep -q "WAS MODIFIED" $log && {
+ s=4
+ cat $log
+ }
+ done
+ blocksize=$((blocksize * 2))
+ done
+ if [ $((`date '+%s'` - start)) -gt 3600 ]; then
+ echo "Timed out in $opt -b $blocksize -f $fragsize$"
+ s=5
+ break
+ fi
+done
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/nullfs31.sh b/tools/test/stress2/misc/nullfs31.sh
new file mode 100755
index 000000000000..381ec6bf041c
--- /dev/null
+++ b/tools/test/stress2/misc/nullfs31.sh
@@ -0,0 +1,75 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Variation of nullfs25.sh, using cp(1) (copy_file_range())
+
+# Page fault in vn_copy_file_range() seen:
+# https://people.freebsd.org/~pho/stress/log/log0497.txt
+# Fixed by: 23210f538a00
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+mounts=4 # Number of parallel scripts
+: ${nullfs_srcdir:=$mntpoint}
+: ${nullfs_dstdir:=$mntpoint}
+prog=$(basename "$0" .sh)
+CONT=/tmp/$prog.continue
+
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 1g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+(cd $mntpoint; jot 500 | xargs touch)
+(cd ../testcases/swap; ./swap -t 5m -i 20 > /dev/null) &
+
+for i in `jot $mounts $mdstart`; do
+ [ ! -d ${nullfs_dstdir}$i ] && mkdir ${nullfs_dstdir}$i
+ mount | grep -q " ${nullfs_dstdir}$i " &&
+ umount ${nullfs_dstdir}$i
+done
+
+# Start the parallel tests
+touch $CONT
+for i in `jot $mounts $mdstart`; do
+ while [ -f $CONT ]; do
+ cp /etc/group ${nullfs_dstdir}$i > \
+ /dev/null 2>&1
+ done &
+ # The test: Parallel mount and unmount
+ start=`date +%s`
+ (
+ while [ $((`date +%s` - start)) -lt 300 ]; do
+ mount_nullfs $nullfs_srcdir ${nullfs_dstdir}$i > \
+ /dev/null 2>&1
+ opt=$([ `jot -r 1 0 1` -eq 0 ] && echo "-f")
+ while mount | grep -q ${nullfs_dstdir}$i; do
+ umount $opt ${nullfs_dstdir}$i > \
+ /dev/null 2>&1
+ done
+ done
+ rm -f $CONT
+ ) &
+done
+while [ -f $CONT ] ; do sleep 1; done
+while pgrep -q swap; do pkill swap; done
+wait
+
+for i in `jot $mounts`; do
+ umount ${nullfs_dstdir}$i > /dev/null 2>&1
+done
+n=0
+while mount | grep $mntpoint | grep -q /dev/md; do
+ umount $mntpoint || sleep 1
+ [ $((n += 1)) -gt 300 ] && { echo FAIL; exit 1; }
+done
+mdconfig -d -u $mdstart
+exit 0
diff --git a/tools/test/stress2/misc/nullfs32.sh b/tools/test/stress2/misc/nullfs32.sh
new file mode 100755
index 000000000000..567a40d4d373
--- /dev/null
+++ b/tools/test/stress2/misc/nullfs32.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+# Test scenario from:
+# Bug 254210 - jail: nullfs: deleted files does not free up space
+# Fixed by: 1a0cb938f7b4
+
+# Test scenario idea by: ronald@FreeBSD.org
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+df -h | grep "$mntpoint"
+mount | grep $mntpoint | grep -q /dev/md && umount -f $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 2g -u $mdstart
+newfs $newfs_flags -n md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+
+cd $mntpoint
+mkdir storage test1 test2
+mount_nullfs -o rw,noatime ./storage ./test1
+mount_nullfs -o rw,noatime ./storage ./test2
+
+dd if=/dev/random of=./test1/random.dd bs=1M count=1024 status=none
+
+rm ./test2/random.dd
+df -h | grep "$mntpoint" > $log
+grep -E "${mntpoint}$" $log | grep -q '16K 1.8G 0%' && s=0 || s=1
+if [ $s -eq 1 ]; then
+ echo "Leaking:"
+ cat $log
+ find $mntpoint -type f -ls
+fi
+cd -
+umount $mntpoint/test1
+umount $mntpoint/test2
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/pager_read_error.sh b/tools/test/stress2/misc/pager_read_error.sh
new file mode 100755
index 000000000000..9a2f3c7cc380
--- /dev/null
+++ b/tools/test/stress2/misc/pager_read_error.sh
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Hunt for "vm_fault: pager read error, pid 32939 (mmap)"
+
+# "panic: namei: unexpected flags: 0x10000000" seen:
+# https://people.freebsd.org/~pho/stress/log/log0585.txt
+# Fixed by: 58b2bd33aff7
+
+. ../default.cfg
+
+md=$mdstart
+mp=$mntpoint
+mdconfig -l | grep -q md$md && mdconfig -d -u $md
+mount | grep -q "on $mp " && umount -f $mp
+
+mdconfig -a -t swap -s 1g -u $md
+newfs -U /dev/md$md > /dev/null
+mount /dev/md$md $mp
+
+export RUNDIR=$mp/stressX
+../testcases/swap/swap -t 5m -i 20 -l 100 > /dev/null &
+sleep 5
+../testcases/mmap/mmap -t 5m -i 20 -l 100 > /dev/null 2>&1 &
+sleep 5
+umount -f $mp
+pkill swap mmap
+wait
+
+mdconfig -d -u $md
+exit 0
diff --git a/tools/test/stress2/misc/pthread10.sh b/tools/test/stress2/misc/pthread10.sh
new file mode 100755
index 000000000000..ddeab0f9bb57
--- /dev/null
+++ b/tools/test/stress2/misc/pthread10.sh
@@ -0,0 +1,106 @@
+#!/bin/sh
+
+# Original test scenario by nabijaczleweli@nabijaczleweli.xyz:
+# Bug 283101 - pthread_cancel() doesn't cancel a thread that's currently in pause()
+# Fixed by: 9f78c837d94f check_cancel: when in_sigsuspend, send SIGCANCEL unconditionally
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+static void *
+thread(void *arg __unused)
+{
+ for(;;) {
+ pause();
+ printf("woke up from pause\n");
+ }
+}
+
+static void
+thread_cancel_and_join(pthread_t ptid)
+{
+ void *status = NULL;
+
+ if (pthread_cancel(ptid)) {
+ printf("pthread_cancel() failed\n");
+ exit(1);
+ }
+
+ (void) pthread_join(ptid, &status);
+ int error = (int)(uintptr_t)status;
+
+ if (error) {
+ if (status == PTHREAD_CANCELED) {
+ printf("pthread_cancel() succeeded\n");
+ } else {
+ printf("pthread_join() error (not PTHREAD_CANCELED)\n");
+ exit(1);
+ }
+ }
+}
+
+int
+main(void)
+{
+ // Empirically, I've noticed that either the hang occurs somewhere between
+ // 10 and 500 iterations, or it runs infinitely without ever hanging.
+ // Therefore, stopping at 500th iteration, and looping from a shell script.
+
+ // For quick results (usually under 10 minutes), invoke "./run" from a dozen
+ // consoles or GNU screen windows in parallel.
+
+ pid_t pid = getpid();
+
+ for (uint64_t iteration = 1; iteration <= 500; ++iteration) {
+ printf("PID %d, iteration %lu...", pid, iteration);
+
+ pthread_t ptid;
+ int err;
+
+ err = pthread_create(&ptid, NULL, thread, NULL);
+
+ if (err) {
+ printf("pthread_create() failed with error: %d\n", err);
+ return 1;
+ }
+
+ thread_cancel_and_join(ptid);
+
+ printf("OK\n");
+
+ // Tiny sleep
+ usleep(20000);
+ }
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O2 /tmp/$prog.c -lpthread || exit 1
+(cd ../testcases/swap; ./swap -t 3m -i 20 > /dev/null) &
+sleep 5
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 180 ]; do
+ /tmp/$prog > /dev/null & pid=$!
+ t1=`date +%s`
+ while kill -0 $pid 2> /dev/null; do
+ if [ $((`date +%s` - t1)) -gt 180 ]; then
+ ps -lH $pid
+# exit 1 # For DEBUG
+ kill -9 $pid; s=1
+ echo fail
+ break 2
+ else
+ sleep 1
+ fi
+ done
+ wait $pid; s=$?
+ [ $s -ne 0 ] && break
+done
+while pkill swap; do :; done
+wait
+rm -f /tmp/$prog /tmp/$prog.c
+exit $s
diff --git a/tools/test/stress2/misc/rangelocks.sh b/tools/test/stress2/misc/rangelocks.sh
new file mode 100755
index 000000000000..fa855359d72b
--- /dev/null
+++ b/tools/test/stress2/misc/rangelocks.sh
@@ -0,0 +1,194 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Range lock test scenario suggestion by kib@
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+dir=/tmp
+odir=`pwd`
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/$prog.c
+mycc -o $prog -Wall -Wextra -O2 -g $prog.c || exit 1
+rm -f $prog.c
+cd $odir
+
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+set -e
+mdconfig -a -t swap -s 6g -u $mdstart
+newfs $newfs_flags -n /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+wd="$mntpoint/$prog.dir"
+mkdir -p $wd
+dd if=/dev/zero of=$wd/file bs=1m count=5k status=none
+
+[ `jot -r 1 1 100` -le 25 ] &&
+ ../testcases/swap/swap -t 10m -i 20 > /dev/null 2>&1 &
+cd $wd
+/tmp/$prog $wd/file; s=$?
+cd $odir
+while pkill swap; do :; done
+wait
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -rf /tmp/$prog $wd
+exit $s
+
+EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <machine/atomic.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sched.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+#define DONE 1
+#define MAXBLK 10240
+//#define MAXPROC 32
+#define MAXPROC 1024
+#define MAXSIZ (5LL * 1024 * 1024 *1024)
+#define RUNTIME (5 * 60)
+#define SYNC 0
+
+static volatile u_int *share;
+static int parallel;
+
+static char *file;
+
+static off_t
+newpos(int lng)
+{
+ off_t p;
+
+ do {
+ arc4random_buf(&p, sizeof(p));
+ p = p & 0xfffffff;
+ } while (p + lng > MAXSIZ);
+ return (p);
+}
+
+static void
+test(int indx, int num)
+{
+ off_t pos;
+ ssize_t i, l, r;
+ time_t start;
+ int fd, n;
+ char *buf;
+
+ atomic_add_int(&share[SYNC], 1);
+ while (share[SYNC] != (unsigned int)parallel)
+ sched_yield();
+
+ if ((buf = malloc(MAXBLK)) == NULL)
+ err(1, "malloc");
+ n = 0;
+ start = time(NULL);
+ while (share[DONE] != (unsigned int)parallel) {
+ setproctitle("test(%d) num %d, n %d", indx, num, n);
+ if ((fd = open(file, O_RDWR)) == -1)
+ err(1, "open(%s)", file);
+
+ for (i = 0; i < arc4random() % 512; i++) {
+ if (arc4random() % 100 < 50) {
+ l = arc4random() % MAXBLK + 1;
+ pos = newpos(l);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek");
+ if ((r = read(fd, buf, l)) != l) {
+ warn("read %jd @ %jd returned %zd\n", (intmax_t)l, (intmax_t)pos, r);
+ goto done;
+ }
+ }
+
+ l = arc4random() % MAXBLK + 1;
+ pos = newpos(l);
+ if (lseek(fd, pos, SEEK_SET) == -1)
+ err(1, "lseek");
+ if ((r = write(fd, buf, l)) != l) {
+ warn("write returned %zd\n", r);
+ goto done;
+ }
+ }
+
+ close(fd);
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+ if (time(NULL) - start >= RUNTIME * 4) {
+ fprintf(stderr, "test(%d), %d Timed out\n", indx, num);
+ break;
+ }
+ }
+done:
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+
+ _exit(0);
+}
+
+void
+setup(void)
+{
+
+ parallel = arc4random() % MAXPROC + 1;
+}
+
+int
+main(int argc, char *argv[])
+{
+ size_t len;
+ time_t start;
+ int e, i, n, *pids, status;
+
+ if (argc != 2) {
+ fprintf(stderr, "Usage: %s <file>\n", argv[0]);
+ _exit(1);
+ }
+ e = 0;
+ file = argv[1];
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ n = 0;
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME && e == 0) {
+ setup();
+
+ pids = malloc(sizeof(pid_t) * parallel);
+ share[SYNC] = share[DONE] = 0;
+ for (i = 0; i < parallel; i++) {
+ if ((pids[i] = fork()) == 0)
+ test(i, n);
+ }
+ for (i = 0; i < parallel; i++) {
+ if (waitpid(pids[i], &status, 0) != pids[i])
+ err(1, "waitpid %d", pids[i]);
+ e += status == 0 ? 0 : 1;
+ }
+ n++;
+ n = n % 10;
+ free(pids);
+ }
+
+ return (e);
+}
diff --git a/tools/test/stress2/misc/rangelocks2.sh b/tools/test/stress2/misc/rangelocks2.sh
new file mode 100755
index 000000000000..2df4cf346bc8
--- /dev/null
+++ b/tools/test/stress2/misc/rangelocks2.sh
@@ -0,0 +1,178 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+dir=/tmp
+odir=`pwd`
+cd $dir
+sed '1,/^EOF/d' < $odir/$0 > $dir/$prog.c
+mycc -o $prog -Wall -Wextra -O2 -g $prog.c || exit 1
+rm -f $prog.c
+cd $odir
+
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+set -e
+mdconfig -a -t swap -s 6g -u $mdstart
+newfs $newfs_flags -n /dev/md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+wd="$mntpoint/$prog.dir"
+mkdir -p $wd
+dd if=/dev/zero of=$wd/file bs=1m count=5k status=none
+
+[ `jot -r 1 1 100` -le 25 ] &&
+ ../testcases/swap/swap -t 10m -i 20 > /dev/null 2>&1 &
+cd $wd
+touch $wd/out
+/tmp/$prog $wd/file $wd/out; s=$?
+cd $odir
+while pkill swap; do :; done
+wait
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -rf /tmp/$prog $wd
+exit $s
+
+EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+#include <machine/atomic.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sched.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+#define DONE 1
+#define MAXBLK (100 * 1024 * 1024)
+#define MAXPROC 32
+#define MAXSIZ (5LL * 1024 * 1024 *1024)
+#define RUNTIME (5 * 60)
+#define SYNC 0
+
+static volatile u_int *share;
+static int parallel;
+
+static char *file, *file2;
+
+static off_t
+newpos(int lng)
+{
+ off_t p;
+
+ do {
+ arc4random_buf(&p, sizeof(p));
+ p = p & 0xfffffff;
+ } while (p + lng > MAXSIZ);
+ return (p);
+}
+
+static void
+test(int indx, int num)
+{
+ off_t pos, pos2;
+ ssize_t i, l;
+ time_t start;
+ int fd, fd2, n;
+
+ atomic_add_int(&share[SYNC], 1);
+ while (share[SYNC] != (unsigned int)parallel)
+ sched_yield();
+
+ n = 0;
+ start = time(NULL);
+ while (share[DONE] != (unsigned int)parallel) {
+ setproctitle("test(%d) num %d, n %d", indx, num, n);
+ if ((fd = open(file, O_RDWR)) == -1)
+ err(1, "open(%s)", file);
+ if ((fd2 = open(file2, O_RDWR)) == -1)
+ err(1, "open(%s)", file2);
+
+ for (i = 0; i < arc4random() % 512; i++) {
+ l = arc4random() % MAXBLK + 1;
+ pos = newpos(l);
+ pos2 = newpos(l);
+ if (copy_file_range(fd, &pos, fd2, &pos2, l, 0) == -1)
+ err(1, "copy_file_range()");
+ }
+
+ close(fd2);
+ close(fd);
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+ if (time(NULL) - start >= RUNTIME * 4) {
+ fprintf(stderr, "test(%d), %d Timed out\n", indx, num);
+ break;
+ }
+ }
+ if (n++ == 0)
+ atomic_add_int(&share[DONE], 1);
+
+ _exit(0);
+}
+
+void
+setup(void)
+{
+
+ parallel = arc4random() % MAXPROC + 1;
+}
+
+int
+main(int argc, char *argv[])
+{
+ size_t len;
+ time_t start;
+ int e, i, n, *pids, status;
+
+ if (argc != 3) {
+ fprintf(stderr, "Usage: %s <in file> <out file>\n", argv[0]);
+ _exit(1);
+ }
+ e = 0;
+ file = argv[1];
+ file2 = argv[2];
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ n = 0;
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME && e == 0) {
+ setup();
+
+ pids = malloc(sizeof(pid_t) * parallel);
+ share[SYNC] = share[DONE] = 0;
+ for (i = 0; i < parallel; i++) {
+ if ((pids[i] = fork()) == 0)
+ test(i, n);
+ }
+ for (i = 0; i < parallel; i++) {
+ if (waitpid(pids[i], &status, 0) != pids[i])
+ err(1, "waitpid %d", pids[i]);
+ e += status == 0 ? 0 : 1;
+ }
+ n++;
+ n = n % 10;
+ free(pids);
+ }
+
+ return (e);
+}
diff --git a/tools/test/stress2/misc/rename16.sh b/tools/test/stress2/misc/rename16.sh
new file mode 100755
index 000000000000..09e796299794
--- /dev/null
+++ b/tools/test/stress2/misc/rename16.sh
@@ -0,0 +1,261 @@
+#!/bin/sh
+
+# Copy of suj30.sh but with SU instead of SUJ
+
+# Rename test scenario by Andrey Zonov <zont@FreeBSD.org>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+here=`pwd`
+log=/tmp/$prog.sh.log
+cd /tmp
+sed '1,/^EOF/d' < $here/$0 > $prog.c
+mycc -o $prog -Wall -Wextra -O2 $prog.c -lpthread
+rm -f $prog.c
+
+mount | grep "on $mntpoint " | grep -q md$mdstart && umount $mntpoint
+mdconfig -l | grep -q md$mdstart && mdconfig -d -u $mdstart
+
+mdconfig -a -t swap -s 8g -u $mdstart
+newfs -U md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+chmod 777 $mntpoint
+
+t=`date +%s`
+/tmp/$prog $mntpoint/test-0 100000
+t=$((`date +%s` - t))
+[ $t -gt 60 ] && n=20000 || n=100000
+
+for i in `jot 10`; do
+ /tmp/$prog $mntpoint/test-$i $n &
+done
+wait
+
+while mount | grep -q $mntpoint; do
+ umount $mntpoint || sleep 1
+done
+fsck -fy /dev/md$mdstart > $log
+grep -q "WAS MODIFIED" $log && s=1 || s=0
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog $log
+exit $s
+EOF
+/*
+ * Andrey Zonov (c) 2012
+ *
+ * compile as `cc -o rename rename.c -lpthread'
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <sys/queue.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <pthread.h>
+#ifdef __FreeBSD__
+#include <pthread_np.h>
+#define __NP__
+#endif
+#include <sched.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+
+#define LOCK(x) pthread_mutex_lock(&x.mtx)
+#define UNLOCK(x) pthread_mutex_unlock(&x.mtx)
+#define SIGNAL(x) pthread_cond_signal(&x.wait)
+#define WAIT(x) pthread_cond_wait(&x.wait, &x.mtx)
+
+int max;
+int exited;
+char *dirname1;
+char *dirname2;
+
+struct file {
+ char *name;
+ STAILQ_ENTRY(file) next;
+};
+
+struct files {
+ pthread_mutex_t mtx;
+ pthread_cond_t wait;
+ STAILQ_HEAD(, file) list;
+};
+
+static struct files newfiles;
+static struct files renamedfiles;
+
+void *loop_create(void *arg __unused);
+void *loop_rename(void *arg __unused);
+void *loop_unlink(void *arg __unused);
+
+int
+main(int argc, char **argv)
+{
+ int i;
+ int rc;
+ pthread_t tid[3];
+
+ if (argc != 3)
+ errx(1, "usage: pthread_count <dirname> <max>");
+
+ asprintf(&dirname1, "%s.1", argv[1]);
+ asprintf(&dirname2, "%s.2", argv[1]);
+ if (mkdir(dirname1, 0755) == -1)
+ err(1, "mkdir(%s)", dirname1);
+ if (mkdir(dirname2, 0755) == -1)
+ err(1, "mkdir(%s)", dirname2);
+ max = atoi(argv[2]);
+
+ STAILQ_INIT(&newfiles.list);
+ STAILQ_INIT(&renamedfiles.list);
+
+ rc = pthread_mutex_init(&newfiles.mtx, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_init()");
+ rc = pthread_cond_init(&newfiles.wait, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_init()");
+ rc = pthread_mutex_init(&renamedfiles.mtx, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_init()");
+ rc = pthread_cond_init(&renamedfiles.wait, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_init()");
+
+ rc = pthread_create(&tid[0], NULL, loop_create, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_create()");
+ rc = pthread_create(&tid[1], NULL, loop_rename, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_create()");
+ rc = pthread_create(&tid[2], NULL, loop_unlink, NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_create()");
+
+ for (i = 0; i < 3; i++) {
+ rc = pthread_join(tid[i], NULL);
+ if (rc != 0)
+ errc(1, rc, "pthread_join(%d)", i);
+ }
+
+ rc = pthread_mutex_destroy(&newfiles.mtx);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_destroy(newfiles)");
+ rc = pthread_cond_destroy(&newfiles.wait);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_destroy(newfiles)");
+ rc = pthread_mutex_destroy(&renamedfiles.mtx);
+ if (rc != 0)
+ errc(1, rc, "pthread_mutex_destroy(renamedfiles)");
+ rc = pthread_cond_destroy(&renamedfiles.wait);
+ if (rc != 0)
+ errc(1, rc, "pthread_cond_destroy(renamedfiles)");
+ rmdir(dirname1);
+ rmdir(dirname2);
+ free(dirname1);
+ free(dirname2);
+
+ exit(0);
+}
+
+void *
+loop_create(void *arg __unused)
+{
+ int i;
+ struct file *file;
+
+#ifdef __NP__
+ pthread_set_name_np(pthread_self(), __func__);
+#endif
+
+ for (i = 0; i < max; i++) {
+ file = malloc(sizeof(*file));
+ asprintf(&file->name, "%s/filename_too-long:%d", dirname1, i);
+ if (mkdir(file->name, 0666) == -1) {
+ warn("mkdir(%s)", file->name);
+ free(file->name);
+ free(file);
+ break;
+ }
+ LOCK(newfiles);
+ STAILQ_INSERT_TAIL(&newfiles.list, file, next);
+ UNLOCK(newfiles);
+ SIGNAL(newfiles);
+ }
+ exited = 1;
+ SIGNAL(newfiles);
+ pthread_exit(NULL);
+}
+
+void *
+loop_rename(void *arg __unused)
+{
+ char *filename, *newname;
+ struct file *file;
+
+#ifdef __NP__
+ pthread_set_name_np(pthread_self(), __func__);
+#endif
+
+ for ( ;; ) {
+ LOCK(newfiles);
+ while (STAILQ_EMPTY(&newfiles.list) && exited < 1)
+ WAIT(newfiles);
+ if (STAILQ_EMPTY(&newfiles.list) && exited == 1) {
+ UNLOCK(newfiles);
+ break;
+ }
+ file = STAILQ_FIRST(&newfiles.list);
+ STAILQ_REMOVE_HEAD(&newfiles.list, next);
+ UNLOCK(newfiles);
+ filename = strrchr(file->name, '/');
+ asprintf(&newname, "%s/%s", dirname2, filename);
+ if (rename(file->name, newname) == -1)
+ err(1, "rename(%s, %s)", file->name, newname);
+ free(file->name);
+ file->name = newname;
+ LOCK(renamedfiles);
+ STAILQ_INSERT_TAIL(&renamedfiles.list, file, next);
+ UNLOCK(renamedfiles);
+ SIGNAL(renamedfiles);
+ }
+ exited = 2;
+ SIGNAL(renamedfiles);
+ pthread_exit(NULL);
+}
+
+void *
+loop_unlink(void *arg __unused)
+{
+ struct file *file;
+
+#ifdef __NP__
+ pthread_set_name_np(pthread_self(), __func__);
+#endif
+
+ for ( ;; ) {
+ LOCK(renamedfiles);
+ while (STAILQ_EMPTY(&renamedfiles.list) && exited < 2)
+ WAIT(renamedfiles);
+ if (STAILQ_EMPTY(&renamedfiles.list) && exited == 2) {
+ UNLOCK(renamedfiles);
+ break;
+ }
+ file = STAILQ_FIRST(&renamedfiles.list);
+ STAILQ_REMOVE_HEAD(&renamedfiles.list, next);
+ UNLOCK(renamedfiles);
+ rmdir(file->name);
+ free(file->name);
+ free(file);
+ }
+ pthread_exit(NULL);
+}
diff --git a/tools/test/stress2/misc/rmdir.sh b/tools/test/stress2/misc/rmdir.sh
new file mode 100755
index 000000000000..2df62a5576a8
--- /dev/null
+++ b/tools/test/stress2/misc/rmdir.sh
@@ -0,0 +1,119 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# Based on msdos11.sh
+
+. ../default.cfg
+
+set -u
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+
+cat > /tmp/$prog.c <<EOF
+#include <sys/param.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdatomic.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+static _Atomic(int) *share;
+
+#define PARALLEL 3
+#define RUNTIME (2 * 60)
+#define SYNC 0
+
+static void
+test(void)
+{
+ time_t start;
+
+ atomic_fetch_add(&share[SYNC], 1);
+ while (share[SYNC] != PARALLEL)
+ ;
+ start = time(NULL);
+ while ((time(NULL) - start) < 30) {
+ mkdir("a", 0755);
+ rename("a", "b");
+ rmdir("b");
+ }
+
+ _exit(0);
+}
+
+int
+main(void)
+{
+ pid_t pids[PARALLEL];
+ size_t len;
+ time_t start;
+ int e, i, status;
+
+ e = 0;
+ len = PAGE_SIZE;
+ if ((share = mmap(NULL, len, PROT_READ | PROT_WRITE,
+ MAP_ANON | MAP_SHARED, -1, 0)) == MAP_FAILED)
+ err(1, "mmap");
+
+ start = time(NULL);
+ while ((time(NULL) - start) < RUNTIME && e == 0) {
+ share[SYNC] = 0;
+ for (i = 0; i < PARALLEL; i++) {
+ if ((pids[i] = fork()) == 0)
+ test();
+ if (pids[i] == -1)
+ err(1, "fork()");
+ }
+ for (i = 0; i < PARALLEL; i++) {
+ if (waitpid(pids[i], &status, 0) == -1)
+ err(1, "waitpid(%d)", pids[i]);
+ if (status != 0) {
+ if (WIFSIGNALED(status))
+ fprintf(stderr,
+ "pid %d exit signal %d\n",
+ pids[i], WTERMSIG(status));
+ }
+ e += status == 0 ? 0 : 1;
+ }
+ }
+
+ return (e);
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+set -e
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 512m -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+here=`pwd`
+(cd $here/../testcases/swap; ./swap -t 2m -i 20 -l 100 > /dev/null) &
+sleep .5
+
+cd $mntpoint
+/tmp/$prog; s=$?
+cd -
+wait
+umount $mntpoint
+fsck_ffs /dev/md$mdstart > $log 2>&1
+grep -Eq "WAS MODIFIED" $log && { cat $log; s=32; }
+mdconfig -d -u $mdstart
+rm -f /tmp/$prog /tmp/$prog.c $log
+exit $s
diff --git a/tools/test/stress2/misc/rsync.sh b/tools/test/stress2/misc/rsync.sh
new file mode 100755
index 000000000000..fa52f98c6f02
--- /dev/null
+++ b/tools/test/stress2/misc/rsync.sh
@@ -0,0 +1,49 @@
+#/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+[ -f "`which rsync`" ] || exit 0
+[ -d /usr/src/sys ] || exit 0
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 15g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+mkdir -p $mntpoint/usr/src
+rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+if [ $s -eq 0 ]; then
+ (cd $mntpoint; umount $mntpoint > /dev/null 2>&1) # sync
+ rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+fi
+
+if [ $s -eq 0 ]; then
+ diff -rq /usr/src/sys $mntpoint/usr/src/sys > $log; s=$?
+ [ $s -ne 0 ] &&
+ { echo "/usr/src $mntpoint/usr/src differ!"; head -10 $log; }
+fi
+
+while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint || break
+ sleep 1
+done
+if [ $s -eq 0 ]; then
+ fsck_ffs -fy /dev/md$mdstart > $log 2>&1; s=$?
+ grep -Eq "WAS MODIFIED" $log && { cat $log; s=1; }
+fi
+mdconfig -d -u $mdstart
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/rsync2.sh b/tools/test/stress2/misc/rsync2.sh
new file mode 100755
index 000000000000..882753fe596f
--- /dev/null
+++ b/tools/test/stress2/misc/rsync2.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Test scenario by se@ from https://reviews.freebsd.org/D43951
+
+set -u
+MDUNIT=10
+FS=/mnt/test
+mdconfig -u $MDUNIT -t malloc -s 512m
+newfs_msdos -c 8 -F 32 /dev/md$MDUNIT
+mkdir -p $FS
+mount -t msdos /dev/md$MDUNIT $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+rsync -r /usr/src/lib/libsysdecode $FS
+umount $FS
+fsck_msdosfs -y /dev/md$MDUNIT; s=$?
+exit $s
diff --git a/tools/test/stress2/misc/rsync3.sh b/tools/test/stress2/misc/rsync3.sh
new file mode 100755
index 000000000000..1d77bdfbcaa5
--- /dev/null
+++ b/tools/test/stress2/misc/rsync3.sh
@@ -0,0 +1,43 @@
+#/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# tmpfs version of rsync.sh
+
+[ `id -u` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+[ -f "`which rsync`" ] || exit 0
+[ -d /usr/src/sys ] || exit 0
+
+set -eu
+prog=$(basename "$0" .sh)
+log=/tmp/$prog.log
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mount -t tmpfs dummy $mntpoint
+set +e
+
+mkdir -p $mntpoint/usr/src
+rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+if [ $s -eq 0 ]; then
+ rsync -avrq /usr/src/sys $mntpoint/usr/src; s=$?
+fi
+
+if [ $s -eq 0 ]; then
+ diff -rq /usr/src/sys $mntpoint/usr/src/sys > $log; s=$?
+ [ $s -ne 0 ] &&
+ { echo "/usr/src $mntpoint/usr/src differ!"; head -10 $log; }
+fi
+
+while mount | grep -q "on $mntpoint "; do
+ umount $mntpoint || break
+ sleep 1
+done
+rm -f $log
+exit $s
diff --git a/tools/test/stress2/misc/seekhole2.sh b/tools/test/stress2/misc/seekhole2.sh
new file mode 100755
index 000000000000..e3f08779061d
--- /dev/null
+++ b/tools/test/stress2/misc/seekhole2.sh
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+#
+# Copyright (c) 2025 Peter Holm <pho@FreeBSD.org>
+#
+# SPDX-License-Identifier: BSD-2-Clause
+#
+
+# A SEEK_HOLE / SEEK_DATA test scenario, FFS version
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+
+prog=$(basename "$0" .sh)
+exp=/tmp/$prog.exp
+here=`pwd`
+log=/tmp/$prog.log
+
+cc -o /tmp/lsholes -Wall -Wextra -O2 $here/../tools/lsholes.c | exit 1
+cat > $exp <<EXP
+Min hole size is 32768, file size is 524288000.
+data #1 @ 0, size=32768)
+hole #2 @ 32768, size=32768
+data #3 @ 65536, size=32768)
+hole #4 @ 98304, size=32768
+data #5 @ 131072, size=32768)
+hole #6 @ 163840, size=524091392
+data #7 @ 524255232, size=32768)
+hole #8 @ 524288000, size=0
+EXP
+
+set -eu
+mount | grep "on $mntpoint " | grep -q /dev/md && umount -f $mntpoint
+[ -c /dev/md$mdstart ] && mdconfig -d -u $mdstart
+mdconfig -a -t swap -s 2g -u $mdstart
+newfs $newfs_flags md$mdstart > /dev/null
+mount /dev/md$mdstart $mntpoint
+set +e
+
+file=$mntpoint/file
+copy=$mntpoint/copy
+truncate -s 500m $file
+bs=`getconf MIN_HOLE_SIZE $file`
+printf "\001" | dd of=$file seek=$((0*bs)) bs=1 count=1 conv=notrunc status=none
+printf "\002" | dd of=$file seek=$((2*bs)) bs=1 count=1 conv=notrunc status=none
+printf "\003" | dd of=$file seek=$((4*bs)) bs=1 count=1 conv=notrunc status=none
+s1=0
+s2=0
+s3=0
+/tmp/lsholes $file > $log 2>&1; s1=$?
+
+sdiff -s $exp $log || s2=1
+
+$here/../testcases/swap/swap -t 2m -i 20 -h > /dev/null &
+sleep 10
+cp $file $copy
+while pkill swap; do :; done
+wait
+cmp $file $copy || { echo "copy error"; s3=1; }
+
+umount $mntpoint
+mdconfig -d -u $mdstart
+rm -f /tmp/lsholes $exp $log
+exit $((s1 + s2 + s3))
diff --git a/tools/test/stress2/misc/syzkaller71.sh b/tools/test/stress2/misc/syzkaller71.sh
new file mode 100755
index 000000000000..58cf7eeb5825
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller71.sh
@@ -0,0 +1,171 @@
+#!/bin/sh
+
+# panic: Counter goes negative
+# cpuid = 4
+# time = 1694583637
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01bac2a960
+# vpanic() at vpanic+0x132/frame 0xfffffe01bac2aa90
+# panic() at panic+0x43/frame 0xfffffe01bac2aaf0
+# sctp_inpcb_free() at sctp_inpcb_free+0xf28/frame 0xfffffe01bac2ab60
+# sctp_close() at sctp_close+0xc0/frame 0xfffffe01bac2abb0
+# soclose() at soclose+0x154/frame 0xfffffe01bac2ac10
+# _fdrop() at _fdrop+0x1b/frame 0xfffffe01bac2ac30
+# closef() at closef+0x1e3/frame 0xfffffe01bac2acc0
+# fdescfree() at fdescfree+0x41a/frame 0xfffffe01bac2ad80
+# exit1() at exit1+0x4a1/frame 0xfffffe01bac2adf0
+# sys_exit() at sys_exit+0xd/frame 0xfffffe01bac2ae00
+# amd64_syscall() at amd64_syscall+0x14f/frame 0xfffffe01bac2af30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01bac2af30
+# --- syscall (1, FreeBSD ELF64, exit), rip = 0x824db2f4a, rsp = 0x8211862b8, rbp = 0x8211862d0 ---
+# KDB: enter: pani[ thread pid 9676 tid 346853 ]
+# Stopped at kdb_enter+0x32: movq $0,0xe27583(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n265298-10db91ecec98b1: Tue Sep 12 12:16:45 CEST 2023
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+uname -p | grep -Eq "amd64" || exit 0
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=d8a54d453b8e643b807a5c3c56728561f01c0fde
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+d4e1d30d578891245f59@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static unsigned long long procid;
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter __unused = 0;
+ for (;; iter++) {
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ sleep_ms(1);
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ }
+}
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+void execute_one(void)
+{
+ intptr_t res = 0;
+ res = syscall(SYS_socket, 0x1cul, 1ul, 0x84);
+ if (res != -1)
+ r[0] = res;
+ *(uint8_t*)0x20000040 = 0x1c;
+ *(uint8_t*)0x20000041 = 0x1c;
+ *(uint16_t*)0x20000042 = htobe16(0x4e22 + procid * 4);
+ *(uint32_t*)0x20000044 = 0;
+ *(uint64_t*)0x20000048 = htobe64(0);
+ *(uint64_t*)0x20000050 = htobe64(1);
+ *(uint32_t*)0x20000058 = 0;
+ syscall(SYS_bind, r[0], 0x20000040ul, 0x1cul);
+ *(uint8_t*)0x20000180 = 0x1c;
+ *(uint8_t*)0x20000181 = 0x1c;
+ *(uint16_t*)0x20000182 = htobe16(0x4e22 + procid * 4);
+ *(uint32_t*)0x20000184 = 0;
+ *(uint64_t*)0x20000188 = htobe64(0);
+ *(uint64_t*)0x20000190 = htobe64(1);
+ *(uint32_t*)0x20000198 = 0;
+ syscall(SYS_connect, r[0], 0x20000180ul, 0x1cul);
+ *(uint32_t*)0x20000300 = 0x80000021;
+ syscall(SYS_setsockopt, r[0], 0x84, 0x1b, 0x20000300ul, 4ul);
+ memset((void*)0x20000480, 163, 1);
+ syscall(SYS_sendto, r[0], 0x20000480ul, 0xfffffe5cul, 0x188ul, 0ul, 0ul);
+ *(uint16_t*)0x200000c0 = 0;
+ *(uint16_t*)0x200000c2 = 0x200;
+ *(uint32_t*)0x200000c4 = 0;
+ *(uint32_t*)0x200000c8 = 0;
+ *(uint32_t*)0x200000cc = 0;
+ syscall(SYS_setsockopt, r[0], 0x84, 0x21, 0x200000c0ul, 0x10ul);
+ syscall(SYS_shutdown, r[0], 0ul);
+ syscall(SYS_writev, r[0], 0ul, 0ul);
+}
+int main(void)
+{
+ syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul);
+ for (procid = 0; procid < 4; procid++) {
+ if (fork() == 0) {
+ loop();
+ }
+ }
+ sleep(1000000);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+mount | grep -q "on $mntpoint " && umount $mntpoint
+mount -o size=10m -t tmpfs dummy $mntpoint
+
+cd $mntpoint
+for i in `jot 20`; do
+ timeout 3m /tmp/$prog &
+done
+wait
+cd -
+
+umount $mntpoint
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller72.sh b/tools/test/stress2/misc/syzkaller72.sh
new file mode 100755
index 000000000000..6dd69987a913
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller72.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+# panic: sbflush_internal: ccc 0 mb 0xfffff8004eee95f0 mbcnt 0
+# cpuid = 9
+# time = 1704448830
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe016a2ccb70
+# vpanic() at vpanic+0x131/frame 0xfffffe016a2ccca0
+# panic() at panic+0x43/frame 0xfffffe016a2ccd00
+# sbrelease_internal() at sbrelease_internal+0x7c/frame 0xfffffe016a2ccd20
+# sbrelease() at sbrelease+0x5e/frame 0xfffffe016a2ccd50
+# sorflush() at sorflush+0x66/frame 0xfffffe016a2ccd70
+# soshutdown() at soshutdown+0x105/frame 0xfffffe016a2ccdb0
+# kern_shutdown() at kern_shutdown+0x60/frame 0xfffffe016a2ccdf0
+# ia32_syscall() at ia32_syscall+0x154/frame 0xfffffe016a2ccf30
+# int0x80_syscall_common() at int0x80_syscall_common+0x9c/frame 0xffffdb44
+# KDB: enter: panic
+# [ thread pid 4927 tid 100275 ]
+# Stopped at : movq $0,0xe37212(%rip)
+# db> x/s version
+# FreeBSD 15.0-CURRENT #0 main-n267418-24cd5c26fe3e: Fri Jan 5 08:21:43 CET 2024
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=a9e90e96743f3e20b4a66d9d0d4c08c57ea8cc7f
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// Reported-by: syzbot+a58e1615881c01a51653@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x10000000, /*len=*/0x1000000, /*prot=*/7,
+ /*flags=*/0x1012, /*fd=*/-1, /*offset=*/0);
+ intptr_t res = 0;
+ res = syscall(SYS_socket, /*domain=*/0x26, /*type=*/2, /*proto=*/0);
+ if (res != -1)
+ r[0] = res;
+ syscall(SYS_shutdown, /*fd=*/(intptr_t)r[0], /*how=*/0);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -m32 -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ timeout 3m /tmp/$prog
+done
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller73.sh b/tools/test/stress2/misc/syzkaller73.sh
new file mode 100755
index 000000000000..776ace385f21
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller73.sh
@@ -0,0 +1,537 @@
+#!/bin/sh
+
+# No issues seen (Looks a bit like syzkaller43.sh)
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=cf4c0a08d26692dc8f22b0fcc50db08fd17dd709
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <dirent.h>
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+#ifndef SYS_aio_writev
+#define SYS_aio_writev 578
+#endif
+
+static __thread int clone_ongoing;
+static __thread int skip_segv;
+static __thread jmp_buf segv_env;
+
+static void segv_handler(int sig, siginfo_t* info, void* ctx __unused)
+{
+ if (__atomic_load_n(&clone_ongoing, __ATOMIC_RELAXED) != 0) {
+ exit(sig);
+ }
+ uintptr_t addr = (uintptr_t)info->si_addr;
+ const uintptr_t prog_start = 1 << 20;
+ const uintptr_t prog_end = 100 << 20;
+ int skip = __atomic_load_n(&skip_segv, __ATOMIC_RELAXED) != 0;
+ int valid = addr < prog_start || addr > prog_end;
+ if (sig == SIGBUS)
+ valid = 1;
+ if (skip && valid) {
+ _longjmp(segv_env, 1);
+ }
+ exit(sig);
+}
+
+static void install_segv_handler(void)
+{
+ struct sigaction sa;
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_sigaction = segv_handler;
+ sa.sa_flags = SA_NODEFER | SA_SIGINFO;
+ sigaction(SIGSEGV, &sa, NULL);
+ sigaction(SIGBUS, &sa, NULL);
+}
+
+#define NONFAILING(...) \
+ ({ \
+ int ok = 1; \
+ __atomic_fetch_add(&skip_segv, 1, __ATOMIC_SEQ_CST); \
+ if (_setjmp(segv_env) == 0) { \
+ __VA_ARGS__; \
+ } else \
+ ok = 0; \
+ __atomic_fetch_sub(&skip_segv, 1, __ATOMIC_SEQ_CST); \
+ ok; \
+ })
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void use_temporary_dir(void)
+{
+ char tmpdir_template[] = "./syzkaller.XXXXXX";
+ char* tmpdir = mkdtemp(tmpdir_template);
+ if (!tmpdir)
+ exit(1);
+ if (chmod(tmpdir, 0777))
+ exit(1);
+ if (chdir(tmpdir))
+ exit(1);
+}
+
+static void reset_flags(const char* filename)
+{
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ st.st_flags &= ~(SF_NOUNLINK | UF_NOUNLINK | SF_IMMUTABLE | UF_IMMUTABLE |
+ SF_APPEND | UF_APPEND);
+ if (lchflags(filename, st.st_flags))
+ exit(1);
+}
+static void __attribute__((noinline)) remove_dir(const char* dir)
+{
+ DIR* dp = opendir(dir);
+ if (dp == NULL) {
+ if (errno == EACCES) {
+ if (rmdir(dir))
+ exit(1);
+ return;
+ }
+ exit(1);
+ }
+ struct dirent* ep = 0;
+ while ((ep = readdir(dp))) {
+ if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
+ continue;
+ char filename[FILENAME_MAX];
+ snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name);
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ if (S_ISDIR(st.st_mode)) {
+ remove_dir(filename);
+ continue;
+ }
+ if (unlink(filename)) {
+ if (errno == EPERM) {
+ reset_flags(filename);
+ reset_flags(dir);
+ if (unlink(filename) == 0)
+ continue;
+ }
+ exit(1);
+ }
+ }
+ closedir(dp);
+ while (rmdir(dir)) {
+ if (errno == EPERM) {
+ reset_flags(dir);
+ if (rmdir(dir) == 0)
+ break;
+ }
+ exit(1);
+ }
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static void sandbox_common()
+{
+ struct rlimit rlim;
+ rlim.rlim_cur = rlim.rlim_max = 128 << 20;
+ setrlimit(RLIMIT_AS, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 8 << 20;
+ setrlimit(RLIMIT_MEMLOCK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_FSIZE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_STACK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 0;
+ setrlimit(RLIMIT_CORE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 256;
+ setrlimit(RLIMIT_NOFILE, &rlim);
+}
+
+static void loop();
+
+static int do_sandbox_none(void)
+{
+ sandbox_common();
+ loop();
+ return 0;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void execute_one(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 24; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter = 0;
+ for (;; iter++) {
+ char cwdbuf[32];
+ sprintf(cwdbuf, "./%d", iter);
+ if (mkdir(cwdbuf, 0777))
+ exit(1);
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ if (chdir(cwdbuf))
+ exit(1);
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ remove_dir(cwdbuf);
+ }
+}
+
+uint64_t r[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ res = syscall(SYS_socket, /*domain=AF_INET6*/ 0x1cul,
+ /*type=SOCK_STREAM*/ 1ul, /*proto=*/0);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ NONFAILING(*(uint32_t*)0x200000c0 = 0x101);
+ syscall(SYS_setsockopt, /*fd=*/r[0], /*level=*/0xffff,
+ /*optname=SO_SNDBUF*/ 0x1001, /*optval=*/0x200000c0ul,
+ /*optlen=*/4ul);
+ break;
+ case 2:
+ NONFAILING(*(uint8_t*)0x20000140 = 0x1c);
+ NONFAILING(*(uint8_t*)0x20000141 = 0x1c);
+ NONFAILING(*(uint16_t*)0x20000142 = htobe16(0x4e23));
+ NONFAILING(*(uint32_t*)0x20000144 = 0);
+ NONFAILING(memset((void*)0x20000148, 0, 16));
+ NONFAILING(*(uint32_t*)0x20000158 = 0);
+ syscall(SYS_bind, /*fd=*/r[0], /*addr=*/0x20000140ul, /*addrlen=*/0x1cul);
+ break;
+ case 3:
+ NONFAILING(*(uint32_t*)0x20000500 = r[0]);
+ NONFAILING(*(uint64_t*)0x20000508 = 0);
+ NONFAILING(*(uint64_t*)0x20000510 = 0);
+ NONFAILING(*(uint64_t*)0x20000518 = 0);
+ NONFAILING(*(uint32_t*)0x20000520 = 4);
+ NONFAILING(*(uint32_t*)0x20000524 = 0);
+ NONFAILING(*(uint64_t*)0x20000528 = 0);
+ NONFAILING(*(uint32_t*)0x20000530 = 0);
+ NONFAILING(*(uint32_t*)0x20000534 = 4);
+ NONFAILING(*(uint64_t*)0x20000538 = 0x822e);
+ NONFAILING(*(uint64_t*)0x20000540 = 0);
+ NONFAILING(*(uint64_t*)0x20000548 = 0x20000340);
+ NONFAILING(*(uint32_t*)0x20000550 = 0);
+ NONFAILING(*(uint32_t*)0x20000554 = 0);
+ NONFAILING(*(uint64_t*)0x20000558 = 0xfffffffffffffffe);
+ NONFAILING(*(uint64_t*)0x20000560 = 0);
+ NONFAILING(*(uint64_t*)0x20000568 = 0x20000380);
+ NONFAILING(memcpy((void*)0x20000380, "\x3c\x88\x80", 3));
+ syscall(SYS_aio_writev, /*iocb=*/0x20000500ul);
+ break;
+ case 4:
+ NONFAILING(*(uint8_t*)0x20000180 = 0x1c);
+ NONFAILING(*(uint8_t*)0x20000181 = 0x1c);
+ NONFAILING(*(uint16_t*)0x20000182 = htobe16(0x4e23));
+ NONFAILING(*(uint32_t*)0x20000184 = 0);
+ NONFAILING(memset((void*)0x20000188, 0, 16));
+ NONFAILING(*(uint32_t*)0x20000198 = 0);
+ syscall(SYS_connect, /*fd=*/r[0], /*addr=*/0x20000180ul,
+ /*addrlen=*/0x1cul);
+ break;
+ case 5:
+ NONFAILING(memset((void*)0x20000200, 14, 1));
+ syscall(SYS_sendto, /*fd=*/r[0], /*buf=*/0x20000200ul, /*len=*/0xff66ul,
+ /*f=*/0ul, /*addr=*/0ul, /*addrlen=*/0ul);
+ break;
+ case 6:
+ syscall(SYS_sendmsg, /*fd=*/r[0], /*msg=*/0ul, /*f=*/0ul);
+ break;
+ case 7:
+ syscall(SYS_socket, /*domain=AF_INET*/ 2ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0);
+ break;
+ case 8:
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=SOCK_SEQPACKET*/ 5ul,
+ /*proto=*/0x84);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 9:
+ syscall(SYS_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0ul,
+ /*flags=O_RDWR*/ 2ul, /*mode=*/0ul);
+ break;
+ case 10:
+ syscall(SYS_openat, /*fd=*/0xffffffffffffff9cul, /*file=*/0ul,
+ /*flags=O_RDWR*/ 2ul, /*mode=*/0ul);
+ break;
+ case 11:
+ syscall(SYS_socket, /*domain=*/2ul, /*type=SOCK_SEQPACKET*/ 5ul,
+ /*proto=*/0x84);
+ break;
+ case 12:
+ syscall(SYS_socket, /*domain=*/0x1cul, /*type=*/1ul, /*proto=*/0);
+ break;
+ case 13:
+ syscall(SYS_shutdown, /*fd=*/-1, /*how=*/0ul);
+ break;
+ case 14:
+ syscall(SYS_shutdown, /*fd=*/-1, /*how=*/0ul);
+ break;
+ case 15:
+ syscall(SYS_sendto, /*fd=*/-1, /*buf=*/0ul, /*len=*/0ul, /*f=*/0ul,
+ /*addr=*/0ul, /*addrlen=*/0ul);
+ break;
+ case 16:
+ syscall(SYS_sendmsg, /*fd=*/-1, /*msg=*/0ul, /*f=*/0ul);
+ break;
+ case 17:
+ syscall(SYS_rfork, /*flags=RFMEM|RFTHREAD|RFCFDG|RFNOWAIT*/ 0x3060ul);
+ break;
+ case 18:
+ syscall(SYS_rfork, /*flags=RFMEM|RFTHREAD|RFCFDG|RFNOWAIT*/ 0x3060ul);
+ break;
+ case 19:
+ syscall(SYS_openat, /*fd=*/0xffffff9cul, /*file=*/0ul,
+ /*flags=O_APPEND*/ 8ul, /*mode=*/0ul);
+ break;
+ case 20:
+ syscall(SYS_openat, /*fd=*/0xffffff9cul, /*file=*/0ul,
+ /*flags=O_APPEND*/ 8ul, /*mode=*/0ul);
+ break;
+ case 21:
+ syscall(SYS_connect, /*fd=*/r[1], /*addr=*/0ul, /*addrlen=*/0ul);
+ break;
+ case 22:
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0x84);
+ if (res != -1)
+ r[2] = res;
+ break;
+ case 23:
+ NONFAILING(*(uint32_t*)0x200001c0 = 0);
+ syscall(SYS_getsockopt, /*fd=*/r[2], /*level=*/0x84, /*opt=*/0xc,
+ /*val=*/0ul, /*len=*/0x200001c0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x20000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul, /*fd=*/-1,
+ /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ install_segv_handler();
+ use_temporary_dir();
+ do_sandbox_none();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -m32 -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 2m -i 10 -l 100 > /dev/null 2>&1) &
+sleep 1
+cd /tmp
+start=`date +%s`
+while [ $((`date +%s` - start)) -lt 120 ]; do
+ timeout 3m /tmp/$prog > /dev/null 2>&1
+done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller74.sh b/tools/test/stress2/misc/syzkaller74.sh
new file mode 100755
index 000000000000..886c6047585b
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller74.sh
@@ -0,0 +1,469 @@
+#!/bin/sh
+
+# panic: _pctrie_lookup_node: freed node in iter path
+# cpuid = 0
+# time = 1745029155
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01085d2a30
+# vpanic() at vpanic+0x136/frame 0xfffffe01085d2b60
+# panic() at panic+0x43/frame 0xfffffe01085d2bc0
+# pctrie_iter_lookup_ge() at pctrie_iter_lookup_ge+0x166/frame 0xfffffe01085d2bd0
+# vm_object_page_clean() at vm_object_page_clean+0x22e/frame 0xfffffe01085d2c50
+# vnode_pager_clean_async() at vnode_pager_clean_async+0x48/frame 0xfffffe01085d2c70
+# vinactivef() at vinactivef+0x75/frame 0xfffffe01085d2cb0
+# vput_final() at vput_final+0x29c/frame 0xfffffe01085d2d00
+# vm_map_process_deferred() at vm_map_process_deferred+0xa9/frame 0xfffffe01085d2d20
+# vm_map_remove() at vm_map_remove+0xcb/frame 0xfffffe01085d2d50
+# vmspace_exit() at vmspace_exit+0xa8/frame 0xfffffe01085d2d80
+# exit1() at exit1+0x533/frame 0xfffffe01085d2df0
+# sys_exit() at sys_exit+0xd/frame 0xfffffe01085d2e00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe01085d2f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01085d2f30
+# --- syscall (1, FreeBSD ELF64, exit), rip = 0x822a9b7fa, rsp = 0x8202b4de8, rbp = 0x8202b4e00 ---
+# KDB: enter: panic
+# [ thread pid 21141 tid 100328 ]
+# Stopped at kdb_enter+0x33: movq $0,0x104d862(%rip)
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=8658267170f7f61f4317bb04c1fe9add379ffaf4
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+b5f9ebf4c2c63a5db681@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <dirent.h>
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/resource.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void use_temporary_dir(void)
+{
+ char tmpdir_template[] = "./syzkaller.XXXXXX";
+ char* tmpdir = mkdtemp(tmpdir_template);
+ if (!tmpdir)
+ exit(1);
+ if (chmod(tmpdir, 0777))
+ exit(1);
+ if (chdir(tmpdir))
+ exit(1);
+}
+
+static void reset_flags(const char* filename)
+{
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ st.st_flags &= ~(SF_NOUNLINK | UF_NOUNLINK | SF_IMMUTABLE | UF_IMMUTABLE |
+ SF_APPEND | UF_APPEND);
+ if (lchflags(filename, st.st_flags))
+ exit(1);
+}
+static void __attribute__((noinline)) remove_dir(const char* dir)
+{
+ DIR* dp = opendir(dir);
+ if (dp == NULL) {
+ if (errno == EACCES) {
+ if (rmdir(dir))
+ exit(1);
+ return;
+ }
+ exit(1);
+ }
+ struct dirent* ep = 0;
+ while ((ep = readdir(dp))) {
+ if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
+ continue;
+ char filename[FILENAME_MAX];
+ snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name);
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ if (S_ISDIR(st.st_mode)) {
+ remove_dir(filename);
+ continue;
+ }
+ if (unlink(filename)) {
+ if (errno == EPERM) {
+ reset_flags(filename);
+ reset_flags(dir);
+ if (unlink(filename) == 0)
+ continue;
+ }
+ exit(1);
+ }
+ }
+ closedir(dp);
+ while (rmdir(dir)) {
+ if (errno == EPERM) {
+ reset_flags(dir);
+ if (rmdir(dir) == 0)
+ break;
+ }
+ exit(1);
+ }
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static void sandbox_common()
+{
+ struct rlimit rlim;
+ rlim.rlim_cur = rlim.rlim_max = 128 << 20;
+ setrlimit(RLIMIT_AS, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 8 << 20;
+ setrlimit(RLIMIT_MEMLOCK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_FSIZE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 1 << 20;
+ setrlimit(RLIMIT_STACK, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 0;
+ setrlimit(RLIMIT_CORE, &rlim);
+ rlim.rlim_cur = rlim.rlim_max = 256;
+ setrlimit(RLIMIT_NOFILE, &rlim);
+}
+
+static void loop();
+
+static int do_sandbox_none(void)
+{
+ sandbox_common();
+ loop();
+ return 0;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void execute_one(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 12; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter = 0;
+ for (;; iter++) {
+ char cwdbuf[32];
+ sprintf(cwdbuf, "./%d", iter);
+ if (mkdir(cwdbuf, 0777))
+ exit(1);
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ if (chdir(cwdbuf))
+ exit(1);
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ remove_dir(cwdbuf);
+ }
+}
+
+uint64_t r[5] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ memcpy((void*)0x200000000000, "./file0\000", 8);
+ res = syscall(SYS_openat, /*fd=*/0xffffff9c, /*file=*/0x200000000000ul,
+ /*flags=O_VERIFY|O_CREAT|O_WRONLY*/ 0x200201ul, /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ *(uint32_t*)0x200000000240 = r[0];
+ *(uint64_t*)0x200000000248 = 0x80000001;
+ *(uint64_t*)0x200000000250 = 0x2000000004c0;
+ memcpy((void*)0x2000000004c0, "\x45\x09\xee\x8f\xcd", 5);
+ *(uint64_t*)0x200000000258 = 5;
+ *(uint32_t*)0x200000000260 = 3;
+ *(uint32_t*)0x200000000264 = 0;
+ *(uint64_t*)0x200000000268 = 0x200000000000000;
+ *(uint32_t*)0x200000000270 = 8;
+ *(uint32_t*)0x200000000274 = 0;
+ *(uint64_t*)0x200000000278 = 1;
+ *(uint64_t*)0x200000000280 = 7;
+ *(uint64_t*)0x200000000288 = 0;
+ *(uint32_t*)0x200000000290 = 0;
+ *(uint32_t*)0x200000000294 = 0x20000005;
+ *(uint32_t*)0x200000000298 = 0x2e5562f1;
+ *(uint16_t*)0x2000000002a0 = 0xc088;
+ syscall(SYS_aio_write, /*iocb=*/0x200000000240ul);
+ break;
+ case 2:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_VERIFY*/ 0x200000ul,
+ /*mode=S_IWOTH|S_IWGRP|S_IXUSR|S_IWUSR*/ 0xd2ul);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 3:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_PRIVATE*/ 0x12ul, /*fd=*/r[1],
+ /*offset=*/0ul);
+ break;
+ case 4:
+ memcpy((void*)0x200000000100, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000100ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[2] = res;
+ break;
+ case 5:
+ memcpy((void*)0x2000000016c0, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x2000000016c0ul, /*flags=O_WRONLY*/ 1ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[3] = res;
+ break;
+ case 6:
+ *(uint64_t*)0x200000000080 = 0x2000000006c0;
+ *(uint64_t*)0x200000000088 = 0x100000;
+ syscall(SYS_pwritev, /*fd=*/r[3], /*vec=*/0x200000000080ul, /*vlen=*/1ul,
+ /*off=*/0ul);
+ break;
+ case 7:
+ *(uint64_t*)0x200000001780 = 0x200000000180;
+ *(uint64_t*)0x200000001788 = 0x1b133353141e377d;
+ syscall(SYS_preadv, /*fd=*/r[2], /*vec=*/0x200000001780ul,
+ /*vlen=*/0x10000000000000d1ul, /*off=*/0ul);
+ break;
+ case 8:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80400000000000*/ 0x80400000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[4] = res;
+ break;
+ case 9:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_SHARED|0x20000*/ 0x20011ul, /*fd=*/r[4],
+ /*offset=*/0ul);
+ break;
+ case 10:
+ syscall(SYS_setsockopt, /*fd=*/(intptr_t)-1, /*level=*/6,
+ /*optname=TCP_LOGID*/ 0x24, /*optval=*/0ul, /*optlen=*/0ul);
+ break;
+ case 11:
+ syscall(SYS_setsockopt, /*fd=*/(intptr_t)-1, /*level=*/6,
+ /*optname=TCP_LOGID*/ 0x24, /*optval=*/0ul, /*optlen=*/0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ use_temporary_dir();
+ do_sandbox_none();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+cd /tmp
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.??????
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller75.sh b/tools/test/stress2/misc/syzkaller75.sh
new file mode 100755
index 000000000000..05e1e56bc44d
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller75.sh
@@ -0,0 +1,377 @@
+#!/bin/sh
+
+# panic: vm_pager_assert_in: page 0xfffffe001987bcc0 is mapped
+# cpuid = 10
+# time = 1745335200
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0108807700
+# vpanic() at vpanic+0x136/frame 0xfffffe0108807830
+# panic() at panic+0x43/frame 0xfffffe0108807890
+# vm_pager_assert_in() at vm_pager_assert_in+0x1fa/frame 0xfffffe01088078d0
+# vm_pager_get_pages() at vm_pager_get_pages+0x3d/frame 0xfffffe0108807920
+# vm_fault_getpages() at vm_fault_getpages+0x22b/frame 0xfffffe0108807980
+# vm_fault_object() at vm_fault_object+0x2ab/frame 0xfffffe01088079e0
+# vm_fault() at vm_fault+0x2d1/frame 0xfffffe0108807b40
+# vm_map_wire_locked() at vm_map_wire_locked+0x385/frame 0xfffffe0108807bf0
+# vm_mmap_object() at vm_mmap_object+0x2fd/frame 0xfffffe0108807c50
+# vn_mmap() at vn_mmap+0x152/frame 0xfffffe0108807ce0
+# kern_mmap() at kern_mmap+0x621/frame 0xfffffe0108807dc0
+# sys_mmap() at sys_mmap+0x42/frame 0xfffffe0108807e00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe0108807f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe0108807f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x82438d7fa, rsp = 0x824847f68, rbp = 0x824847f90 ---
+# KDB: enter: panic
+# [ thread pid 43067 tid 146060 ]
+# Stopped at kdb_enter+0x33: movq $0,0x124d7e2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #2 main-n276647-a098111a28ed-dirty: Tue Apr 22 16:37:39 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=bab5b2c0d3e8f95d52a06ab501ddb3c11200a5c9
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+1cc9ede76727d2ea2e8d@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void execute_one(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 11; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+// int iter = 0;
+ for (;; /*iter++*/) {
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ }
+}
+
+uint64_t r[4] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ memcpy((void*)0x200000000200, "./file0\000", 8);
+ res = syscall(SYS_openat, /*fd=*/0xffffff9c, /*file=*/0x200000000200ul,
+ /*flags=O_VERIFY|O_CREAT|O_CLOEXEC|O_WRONLY*/ 0x300201ul,
+ /*mode=S_IWGRP|S_IXUSR|S_IWUSR*/ 0xd0ul);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ *(uint32_t*)0x200000000240 = r[0];
+ *(uint64_t*)0x200000000248 = 0x80000002;
+ *(uint64_t*)0x200000000250 = 0x200000000080;
+ memcpy((void*)0x200000000080, "\x1f\x9a\xc4", 3);
+ *(uint64_t*)0x200000000258 = 3;
+ *(uint32_t*)0x200000000260 = 0;
+ *(uint32_t*)0x200000000264 = 0;
+ *(uint64_t*)0x200000000268 = 0;
+ *(uint32_t*)0x200000000270 = 0;
+ *(uint32_t*)0x200000000274 = 0;
+ *(uint64_t*)0x200000000278 = 0;
+ *(uint64_t*)0x200000000280 = 7;
+ *(uint64_t*)0x200000000288 = 0;
+ *(uint32_t*)0x200000000290 = 0;
+ *(uint32_t*)0x200000000294 = 0;
+ *(uint64_t*)0x200000000298 = 0;
+ *(uint64_t*)0x2000000002a0 = 0;
+ *(uint64_t*)0x2000000002a8 = 0;
+ syscall(SYS_aio_write, /*iocb=*/0x200000000240ul);
+ break;
+ case 2:
+ syscall(SYS_mlockall, /*flags=MCL_FUTURE*/ 2ul);
+ break;
+ case 3:
+ memcpy((void*)0x200000000100, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000100ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 4:
+ *(uint64_t*)0x200000001780 = 0x200000000180;
+ *(uint64_t*)0x200000001788 = 0x1b133353141e377d;
+ syscall(SYS_preadv, /*fd=*/r[1], /*vec=*/0x200000001780ul,
+ /*vlen=*/0x10000000000000d1ul, /*off=*/0ul);
+ break;
+ case 5:
+ memcpy((void*)0x200000000040, "./file0\000", 8);
+ syscall(
+ SYS_open, /*file=*/0x200000000040ul,
+ /*flags=O_TRUNC|O_NONBLOCK|O_NOFOLLOW|O_CREAT|O_APPEND|0x2*/ 0x70eul,
+ /*mode=*/0ul);
+ break;
+ case 6:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80400000000000*/ 0x80400000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[2] = res;
+ break;
+ case 7:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_SHARED|0x20000*/ 0x20011ul, /*fd=*/r[2],
+ /*offset=*/0ul);
+ break;
+ case 8:
+ memcpy((void*)0x200000000040, "./file0\000", 8);
+ syscall(SYS_truncate, /*file=*/0x200000000040ul, /*len=*/0xaa480ul);
+ break;
+ case 9:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000480ul, /*flags=*/0ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[3] = res;
+ break;
+ case 10:
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x200000ul,
+ /*prot=PROT_WRITE|PROT_READ*/ 3ul,
+ /*flags=MAP_FIXED|MAP_PRIVATE*/ 0x12ul, /*fd=*/r[3],
+ /*offset=*/0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 30 -l 100 > /dev/null 2>&1) &
+sleep 5
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+for i in `jot 30`; do
+ (
+ mkdir d$i
+ cd d$i
+ timeout 3m /tmp/$prog > /dev/null 2>&1 &
+ )
+done
+while pgrep -q $prog; do sleep 2; done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller76.sh b/tools/test/stress2/misc/syzkaller76.sh
new file mode 100755
index 000000000000..67a566cbfa00
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller76.sh
@@ -0,0 +1,235 @@
+#!/bin/sh
+
+# panic: aio_process_rw: opcode 70
+# cpuid = 7
+# time = 1746175480
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe010844ccb0
+# vpanic() at vpanic+0x136/frame 0xfffffe010844cde0
+# panic() at panic+0x43/frame 0xfffffe010844ce40
+# aio_process_rw() at aio_process_rw+0x28e/frame 0xfffffe010844cea0
+# aio_daemon() at aio_daemon+0x286/frame 0xfffffe010844cef0
+# fork_exit() at fork_exit+0x82/frame 0xfffffe010844cf30
+# fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe010844cf30
+# --- trap 0xc, rip = 0x2020f02a472a, rsp = 0x2020ec9bb8d8, rbp = 0x2020ec9bb9d0 ---
+# KDB: enter: panic
+# [ thread pid 71553 tid 100216 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f9c2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n276945-2735c20d114f-dirty: Fri May 2 07:17:00 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=0549d8c089382a2593078734cc8166a0fc9049f1
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+b6e15476c91852bb2264@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ res = syscall(SYS_freebsd10_pipe, /*pipefd=*/0x2000000005c0ul);
+ if (res != -1)
+ r[0] = *(uint32_t*)0x2000000005c4;
+ syscall(SYS_close, /*fd=*/r[0]);
+ memcpy((void*)0x200000000080, ".\000", 2);
+ syscall(SYS_open, /*file=*/0x200000000080ul, /*flags=*/0ul, /*mode=*/0ul);
+ *(uint32_t*)0x200000000080 = 0;
+ *(uint32_t*)0x200000000084 = 0;
+ *(uint32_t*)0x200000000088 = 4;
+ *(uint64_t*)0x200000000090 = 0;
+ *(uint64_t*)0x200000000098 = 0;
+ *(uint32_t*)0x2000000000a0 = 0;
+ *(uint32_t*)0x2000000000a4 = 8;
+ *(uint64_t*)0x2000000000a8 = 0x7fffffffffffffff;
+ *(uint32_t*)0x2000000000b0 = 0;
+ *(uint32_t*)0x2000000000b4 = 0x100;
+ *(uint64_t*)0x2000000000b8 = 0;
+ *(uint32_t*)0x2000000000c0 = 0;
+ *(uint32_t*)0x2000000000c4 = 0;
+ *(uint32_t*)0x2000000000c8 = 0;
+ *(uint32_t*)0x2000000000cc = 3;
+ *(uint32_t*)0x2000000000d0 = 0;
+ *(uint32_t*)0x2000000000d4 = 0;
+ *(uint32_t*)0x2000000000d8 = 0x400008;
+ *(uint32_t*)0x2000000000dc = 0x8e;
+ *(uint32_t*)0x2000000000e0 = 0xfffffffd;
+ *(uint32_t*)0x2000000000e4 = 0xf;
+ *(uint32_t*)0x2000000000e8 = 0xfffffffc;
+ *(uint32_t*)0x2000000000ec = 0;
+ *(uint32_t*)0x2000000000f0 = 0;
+ *(uint32_t*)0x2000000000f4 = 0;
+ *(uint32_t*)0x2000000000f8 = 0xff;
+ *(uint32_t*)0x2000000000fc = 0;
+ *(uint32_t*)0x200000000100 = 0;
+ *(uint32_t*)0x200000000104 = 2;
+ *(uint32_t*)0x200000000108 = 0;
+ *(uint32_t*)0x20000000010c = 2;
+ *(uint32_t*)0x200000000110 = 2;
+ *(uint32_t*)0x200000000114 = 0x5bee;
+ *(uint32_t*)0x200000000118 = 0;
+ *(uint32_t*)0x20000000011c = 0xc;
+ *(uint32_t*)0x200000000120 = 3;
+ *(uint32_t*)0x200000000124 = 2;
+ *(uint32_t*)0x200000000128 = 0;
+ *(uint32_t*)0x20000000012c = 0x10000000;
+ *(uint32_t*)0x200000000130 = 0;
+ *(uint32_t*)0x200000000134 = 1;
+ *(uint32_t*)0x200000000138 = 0;
+ *(uint32_t*)0x20000000013c = 0x83;
+ *(uint32_t*)0x200000000140 = 0;
+ *(uint32_t*)0x200000000144 = 0;
+ *(uint32_t*)0x200000000148 = 0;
+ *(uint32_t*)0x20000000014c = 0;
+ *(uint32_t*)0x200000000150 = 0;
+ *(uint32_t*)0x200000000154 = 0xfff;
+ *(uint32_t*)0x200000000158 = 1;
+ *(uint32_t*)0x20000000015c = 0x4c;
+ *(uint32_t*)0x200000000160 = 0x1fffffc;
+ *(uint32_t*)0x200000000164 = 4;
+ *(uint32_t*)0x200000000168 = 0x40000001;
+ *(uint32_t*)0x20000000016c = 0;
+ *(uint32_t*)0x200000000170 = 8;
+ *(uint32_t*)0x200000000174 = 0;
+ *(uint32_t*)0x200000000178 = 0;
+ *(uint32_t*)0x20000000017c = 0x100001;
+ *(uint32_t*)0x200000000180 = 0;
+ *(uint32_t*)0x200000000184 = 0x1ff;
+ *(uint32_t*)0x200000000188 = 0xe;
+ *(uint32_t*)0x20000000018c = 8;
+ *(uint32_t*)0x200000000190 = 0;
+ *(uint32_t*)0x200000000194 = 0;
+ *(uint32_t*)0x200000000198 = 0;
+ *(uint32_t*)0x20000000019c = 0xc;
+ *(uint32_t*)0x2000000001a0 = 9;
+ *(uint32_t*)0x2000000001a4 = 2;
+ *(uint32_t*)0x2000000001a8 = 0x10000002;
+ *(uint32_t*)0x2000000001ac = 0x100000;
+ *(uint32_t*)0x2000000001b0 = 0x46;
+ *(uint32_t*)0x2000000001b4 = 6;
+ *(uint32_t*)0x2000000001b8 = 0x3ff;
+ *(uint32_t*)0x2000000001bc = 2;
+ *(uint32_t*)0x2000000001c0 = 0;
+ *(uint32_t*)0x2000000001c4 = 0xfffffffa;
+ *(uint32_t*)0x2000000001c8 = 0x200;
+ *(uint32_t*)0x2000000001cc = 0;
+ *(uint32_t*)0x2000000001d0 = 1;
+ *(uint32_t*)0x2000000001d4 = 3;
+ *(uint32_t*)0x2000000001d8 = 0;
+ *(uint32_t*)0x2000000001dc = 0x100;
+ *(uint32_t*)0x2000000001e0 = 0;
+ *(uint32_t*)0x2000000001e4 = 8;
+ *(uint32_t*)0x2000000001e8 = 0x108c6b2;
+ *(uint32_t*)0x2000000001ec = 0xfffffffa;
+ *(uint32_t*)0x2000000001f0 = 0;
+ *(uint32_t*)0x2000000001f4 = 5;
+ *(uint32_t*)0x2000000001f8 = 0;
+ *(uint32_t*)0x2000000001fc = 0;
+ *(uint32_t*)0x200000000200 = 0;
+ *(uint32_t*)0x200000000204 = 0;
+ *(uint32_t*)0x200000000208 = 0;
+ *(uint32_t*)0x20000000020c = 0x80;
+ *(uint32_t*)0x200000000210 = 0;
+ *(uint32_t*)0x200000000214 = 1;
+ *(uint32_t*)0x200000000218 = 0;
+ *(uint32_t*)0x20000000021c = 6;
+ *(uint32_t*)0x200000000220 = 0;
+ *(uint32_t*)0x200000000224 = 0;
+ *(uint32_t*)0x200000000228 = 0;
+ *(uint32_t*)0x20000000022c = 6;
+ *(uint32_t*)0x200000000230 = 0;
+ *(uint32_t*)0x200000000234 = 0;
+ *(uint32_t*)0x200000000238 = 0;
+ *(uint32_t*)0x20000000023c = 0xa9f;
+ syscall(SYS_ioctl, /*fd=*/(intptr_t)-1, /*cmd=*/0xc1c06d02ul,
+ /*arg=*/0x200000000080ul);
+ *(uint32_t*)0x200000000580 = -1;
+ *(uint64_t*)0x200000000588 = 0;
+ *(uint64_t*)0x200000000590 = 0x200000000180;
+ *(uint64_t*)0x200000000598 = 0;
+ *(uint32_t*)0x2000000005a0 = 0xfffff000;
+ *(uint32_t*)0x2000000005a4 = 3;
+ *(uint64_t*)0x2000000005a8 = 0;
+ *(uint32_t*)0x2000000005b0 = 0;
+ *(uint32_t*)0x2000000005b4 = 0;
+ *(uint64_t*)0x2000000005b8 = 0;
+ *(uint64_t*)0x2000000005c0 = 0;
+ *(uint64_t*)0x2000000005c8 = 0;
+ *(uint32_t*)0x2000000005d0 = 0;
+ *(uint32_t*)0x2000000005d4 = 0;
+ *(uint64_t*)0x2000000005d8 = 0;
+ *(uint16_t*)0x2000000005e0 = 0x4043;
+ *(uint32_t*)0x200000000620 = -1;
+ *(uint64_t*)0x200000000628 = 0;
+ *(uint64_t*)0x200000000630 = 0;
+ *(uint64_t*)0x200000000638 = 0;
+ *(uint32_t*)0x200000000640 = 0x10;
+ *(uint32_t*)0x200000000644 = 0;
+ *(uint64_t*)0x200000000648 = 0;
+ *(uint32_t*)0x200000000650 = 0;
+ *(uint32_t*)0x200000000654 = 0;
+ *(uint64_t*)0x200000000658 = 8;
+ *(uint64_t*)0x200000000660 = 0x3ff;
+ *(uint64_t*)0x200000000668 = 0;
+ *(uint32_t*)0x200000000670 = 1;
+ *(uint32_t*)0x200000000674 = 0;
+ *(uint32_t*)0x200000000678 = 3;
+ *(uint16_t*)0x200000000680 = 0;
+ *(uint32_t*)0x2000000006c0 = -1;
+ *(uint64_t*)0x2000000006c8 = 0;
+ *(uint64_t*)0x2000000006d0 = 0;
+ *(uint64_t*)0x2000000006d8 = 0;
+ *(uint32_t*)0x2000000006e0 = 0;
+ *(uint32_t*)0x2000000006e4 = 0;
+ *(uint64_t*)0x2000000006e8 = 2;
+ *(uint32_t*)0x2000000006f0 = 0;
+ *(uint32_t*)0x2000000006f4 = 0;
+ *(uint64_t*)0x2000000006f8 = 0x101;
+ *(uint64_t*)0x200000000700 = 0xb3;
+ *(uint64_t*)0x200000000708 = 0;
+ *(uint32_t*)0x200000000710 = 0;
+ *(uint32_t*)0x200000000714 = 0xa;
+ *(uint64_t*)0x200000000718 = 3;
+ *(uint32_t*)0x200000000720 = 0;
+ syscall(SYS_lio_listio, /*mode=*/0ul, /*list=*/0x200000000580ul, /*nent=*/3ul,
+ /*sig=*/0ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller77.sh b/tools/test/stress2/misc/syzkaller77.sh
new file mode 100755
index 000000000000..c77a3fd2dd22
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller77.sh
@@ -0,0 +1,290 @@
+#!/bin/sh
+
+# panic: sofree:1883 curvnet is NULL, so=0xfffff8017ca59000
+# cpuid = 8
+# time = 1746559098
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe0182b5c8d0
+# vpanic() at vpanic+0x136/frame 0xfffffe0182b5ca00
+# panic() at panic+0x43/frame 0xfffffe0182b5ca60
+# sorele_locked() at sorele_locked+0x25f/frame 0xfffffe0182b5ca90
+# uipc_sendfile_wait() at uipc_sendfile_wait+0x1df/frame 0xfffffe0182b5caf0
+# vn_sendfile() at vn_sendfile+0x59b/frame 0xfffffe0182b5cd70
+# sendfile() at sendfile+0x129/frame 0xfffffe0182b5ce00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe0182b5cf30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe0182b5cf30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x8223fb72a, rsp = 0x824baaf58, rbp = 0x824baaf90 ---
+# KDB: enter: panic
+# [ thread pid 6382 tid 103296 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f202(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n277057-794e792121ba-dirty: Tue May 6 18:34:20 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=f04b36c4f2b84533225a1bd695a0aed2efa559e5
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+7b0b20cf2c672c181d98@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <time.h>
+#include <unistd.h>
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void loop(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 8; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+uint64_t r[5] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80000000000000*/ 0x80000000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ break;
+ case 1:
+ syscall(SYS_ftruncate, /*fd=*/r[0], /*len=*/0x3862ul);
+ break;
+ case 2:
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=*/2ul, /*proto=*/0x88);
+ if (res != -1)
+ r[1] = res;
+ break;
+ case 3:
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0, /*fds=*/0x200000000180ul);
+ if (res != -1) {
+ r[2] = *(uint32_t*)0x200000000180;
+ r[3] = *(uint32_t*)0x200000000184;
+ }
+ break;
+ case 4:
+ syscall(SYS_dup2, /*oldfd=*/r[2], /*newfd=*/r[1]);
+ break;
+ case 5:
+ memcpy((void*)0x200000000140, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000140ul, /*flags=*/0ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[4] = res;
+ break;
+ case 6:
+ syscall(SYS_sendfile, /*fd=*/r[4], /*s=*/r[1], /*offset=*/0ul,
+ /*nbytes=*/0ul, /*hdtr=*/0ul, /*sbytes=*/0ul,
+ /*flags=SF_SYNC|SF_NOCACHE*/ 0x14ul);
+ break;
+ case 7:
+ syscall(SYS_dup2, /*oldfd=*/r[4], /*newfd=*/r[3]);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 30 -l 100 > /dev/null 2>&1) &
+sleep 5
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+for i in `jot 30`; do
+ (
+ mkdir d$i
+ cd d$i
+ timeout 3m /tmp/$prog > /dev/null 2>&1 &
+ )
+done
+while pgrep -q $prog; do sleep 2; done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller78.sh b/tools/test/stress2/misc/syzkaller78.sh
new file mode 100755
index 000000000000..1858129d4c81
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller78.sh
@@ -0,0 +1,282 @@
+#!/bin/sh
+
+# Fatal trap 12: page fault while in kernel mode
+# cpuid = 10; apic id = 07
+# fault virtual address = 0x0
+# fault code = supervisor read data, page not present
+# instruction pointer = 0x20:0xffffffff80c3c276
+# stack pointer = 0x28:0xfffffe017273eb00
+# frame pointer = 0x28:0xfffffe017273eb30
+# code segment = base 0x0, limit 0xfffff, type 0x1b
+# = DPL 0, pres 1, long 1, def32 0, gran 1
+# processor eflags = interrupt enabled, resume, IOPL = 0
+# current process = 43905 (syzkaller78)
+# rdi: fffff8005b5d55e0 rsi: 0000000000000008 rdx: ffffffff81249e88
+# rcx: fffff8001b9aed00 r8: 0000000000000000 r9: fffff80003396000
+# rax: 0000000000000000 rbx: fffff8005b5d5400 rbp: fffffe017273eb30
+# r10: 0000000000000000 r11: fffff804d84e9c60 r12: fffff8005b5d55f8
+# r13: 0000000000000000 r14: fffff80497171700 r15: fffff8005b5d55c0
+# trap number = 12
+# panic: page fault
+# cpuid = 7
+# time = 1746555157
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe017273e830
+# vpanic() at vpanic+0x136/frame 0xfffffe017273e960
+# panic() at panic+0x43/frame 0xfffffe017273e9c0
+# trap_pfault() at trap_pfault+0x48d/frame 0xfffffe017273ea30
+# calltrap() at calltrap+0x8/frame 0xfffffe017273ea30
+# --- trap 0xc, rip = 0xffffffff80c3c276, rsp = 0xfffffe017273eb00, rbp = 0xfffffe017273eb30 ---
+# unp_dispose() at unp_dispose+0x3b6/frame 0xfffffe017273eb30
+# uipc_detach() at uipc_detach+0x35/frame 0xfffffe017273eb80
+# sorele_locked() at sorele_locked+0x107/frame 0xfffffe017273ebb0
+# soclose() at soclose+0x17d/frame 0xfffffe017273ec10
+# _fdrop() at _fdrop+0x1b/frame 0xfffffe017273ec30
+# closef() at closef+0x1e3/frame 0xfffffe017273ecc0
+# fdescfree() at fdescfree+0x41e/frame 0xfffffe017273ed80
+# exit1() at exit1+0x4a4/frame 0xfffffe017273edf0
+# sys_exit() at sys_exit+0xd/frameamd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe017273ef30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe017273ef30
+# --- syscall (1, FreeBSD ELF64, exit), rip = 0x823ab472a, rsp = 0x8208e3ea8, rbp = 0x8208e3ec0 ---
+# KDB: enter: panic
+# [ thread pid 43905 tid 103344 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f202(%rip)
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=46eb92ee6e2f6acbd4250d0f2065b1f93296bd82
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+0e99ffc200638909ca1c@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <dirent.h>
+#include <errno.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static unsigned long long procid;
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void use_temporary_dir(void)
+{
+ char tmpdir_template[] = "./syzkaller.XXXXXX";
+ char* tmpdir = mkdtemp(tmpdir_template);
+ if (!tmpdir)
+ exit(1);
+ if (chmod(tmpdir, 0777))
+ exit(1);
+ if (chdir(tmpdir))
+ exit(1);
+}
+
+static void reset_flags(const char* filename)
+{
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ st.st_flags &= ~(SF_NOUNLINK | UF_NOUNLINK | SF_IMMUTABLE | UF_IMMUTABLE |
+ SF_APPEND | UF_APPEND);
+ if (lchflags(filename, st.st_flags))
+ exit(1);
+}
+static void __attribute__((noinline)) remove_dir(const char* dir)
+{
+ DIR* dp = opendir(dir);
+ if (dp == NULL) {
+ if (errno == EACCES) {
+ if (rmdir(dir))
+ exit(1);
+ return;
+ }
+ exit(1);
+ }
+ struct dirent* ep = 0;
+ while ((ep = readdir(dp))) {
+ if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0)
+ continue;
+ char filename[FILENAME_MAX];
+ snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name);
+ struct stat st;
+ if (lstat(filename, &st))
+ exit(1);
+ if (S_ISDIR(st.st_mode)) {
+ remove_dir(filename);
+ continue;
+ }
+ if (unlink(filename)) {
+ if (errno == EPERM) {
+ reset_flags(filename);
+ reset_flags(dir);
+ if (unlink(filename) == 0)
+ continue;
+ }
+ exit(1);
+ }
+ }
+ closedir(dp);
+ while (rmdir(dir)) {
+ if (errno == EPERM) {
+ reset_flags(dir);
+ if (rmdir(dir) == 0)
+ break;
+ }
+ exit(1);
+ }
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter = 0;
+ for (;; iter++) {
+ char cwdbuf[32];
+ sprintf(cwdbuf, "./%d", iter);
+ if (mkdir(cwdbuf, 0777))
+ exit(1);
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ if (chdir(cwdbuf))
+ exit(1);
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ remove_dir(cwdbuf);
+ }
+}
+
+uint64_t r[5] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff,
+ 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_one(void)
+{
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ memcpy((void*)0x200000000480, "./file0\000", 8);
+ res = syscall(
+ SYS_open, /*file=*/0x200000000480ul,
+ /*flags=O_NONBLOCK|O_CREAT|O_RDWR|0x80000000000000*/ 0x80000000000206ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ syscall(SYS_ftruncate, /*fd=*/r[0], /*len=*/0x3862ul);
+ memcpy((void*)0x200000000100, "./file0\000", 8);
+ res = syscall(SYS_open, /*file=*/0x200000000100ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[1] = res;
+ *(uint64_t*)0x2000000000c0 = 0x200000000340;
+ *(uint64_t*)0x2000000000c8 = 0x41;
+ syscall(SYS_readv, /*fd=*/r[1], /*vec=*/0x2000000000c0ul, /*vlen=*/1ul);
+ res = syscall(SYS_socket, /*domain=*/2ul, /*type=*/2ul, /*proto=*/0x88);
+ if (res != -1)
+ r[2] = res;
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0, /*fds=*/0x200000000180ul);
+ if (res != -1)
+ r[3] = *(uint32_t*)0x200000000180;
+ syscall(SYS_dup2, /*oldfd=*/r[3], /*newfd=*/r[2]);
+ memcpy((void*)0x200000000140, "./file0\000", 8);
+ res =
+ syscall(SYS_open, /*file=*/0x200000000140ul, /*flags=*/0ul, /*mode=*/0ul);
+ if (res != -1)
+ r[4] = res;
+ syscall(SYS_sendfile, /*fd=*/r[4], /*s=*/r[2], /*offset=*/0xcbul,
+ /*nbytes=*/0x2000ul, /*hdtr=*/0ul, /*sbytes=*/0ul,
+ /*flags=SF_USER_READAHEAD|SF_NODISKIO|0x2*/ 0xbul);
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ for (procid = 0; procid < 4; procid++) {
+ if (fork() == 0) {
+ use_temporary_dir();
+ loop();
+ }
+ }
+ sleep(1000000);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 30 -l 100 > /dev/null 2>&1) &
+sleep 5
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+for i in `jot 30`; do
+ (
+ mkdir d$i
+ cd d$i
+ timeout 3m /tmp/$prog > /dev/null 2>&1 &
+ )
+done
+while pgrep -q $prog; do sleep 2; done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller79.sh b/tools/test/stress2/misc/syzkaller79.sh
new file mode 100755
index 000000000000..7413a2034a3d
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller79.sh
@@ -0,0 +1,82 @@
+#!/bin/sh
+
+# panic: mutex so_rcv not owned at ../../../kern/uipc_usrreq.c:1750
+# cpuid = 5
+# time = 1746938647
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01e75c5b40
+# vpanic() at vpanic+0x136/frame 0xfffffe01e75c5c70
+# panic() at panic+0x43/frame 0xfffffe01e75c5cd0
+# __mtx_assert() at __mtx_assert+0xa9/frame 0xfffffe01e75c5ce0
+# knote() at knote+0x45/frame 0xfffffe01e75c5d30
+# sowwakeup_locked() at sowwakeup_locked+0xc8/frame 0xfffffe01e75c5d50
+# socantsendmore() at socantsendmore+0x4f/frame 0xfffffe01e75c5d70
+# uipc_shutdown() at uipc_shutdown+0x113/frame 0xfffffe01e75c5db0
+# soshutdown() at soshutdown+0x3e/frame 0xfffffe01e75c5dd0
+# kern_shutdown() at kern_shutdown+0x5e/frame 0xfffffe01e75c5e00
+# amd64_syscall() at amd64_syscall+0x15a/frame 0xfffffe01e75c5f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01e75c5f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x82281772a, rsp = 0x82092efd8, rbp = 0x82092f000 ---
+# KDB: enter: panic
+# [ thread pid 54792 tid 1014483 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122f192(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n277201-48578dcb6b7e-dirty: Sat May 10 13:10:42 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=ac94349a29f2efc40e9274239e4ca9b2c473a4e7
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzkaller.appspot.com/x/repro.c?x=16c074d4580000
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_SEQPACKET*/ 5ul,
+ /*proto=*/0, /*fds=*/0x200000000040ul);
+ if (res != -1)
+ r[0] = *(uint32_t*)0x200000000044;
+ syscall(SYS_fcntl, /*fd=*/r[0], /*cmd=*/4ul, /*flags=FASYNC*/ 0x40ul);
+ syscall(SYS_shutdown, /*fd=*/r[0], /*how=*/2ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller80.sh b/tools/test/stress2/misc/syzkaller80.sh
new file mode 100755
index 000000000000..31eae210d5b3
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller80.sh
@@ -0,0 +1,320 @@
+#!/bin/sh
+
+# panic: ../../../kern/uipc_usrreq.c:1256: uipc_sosend_stream_or_seqpacket: Empty stailq 0xfffffe00ffe5fc88->stqh_last is 0xfffffe00ffe5fcd0, not head's first field address
+# cpuid = 5
+# time = 1749593630
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00ffe5fab0
+# vpanic() at vpanic+0x136/frame 0xfffffe00ffe5fbe0
+# panic() at panic+0x43/frame 0xfffffe00ffe5fc40
+# uipc_sosend_stream_or_seqpacket() at uipc_sosend_stream_or_seqpacket+0xa39/frame 0xfffffe00ffe5fd10
+# sousrsend() at sousrsend+0x79/frame 0xfffffe00ffe5fd70
+# dofilewrite() at dofilewrite+0x81/frame 0xfffffe00ffe5fdc0
+# sys_writev() at sys_writev+0x69/frame 0xfffffe00ffe5fe00
+# amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe00ffe5ff30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe00ffe5ff30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x82330181a, rsp = 0x8238dbf68, rbp = 0x8238dbf90 ---
+# KDB: enter: panic
+# [ thread pid 4484 tid 101524 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122ebc2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n277833-948078b65c27-dirty: Tue Jun 10 06:01:36 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=210ae0bfcef6324abfffbfaf10120b767106a990
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+cfcb8520b0071b548fba@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <errno.h>
+#include <pthread.h>
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static unsigned long long procid;
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void thread_start(void* (*fn)(void*), void* arg)
+{
+ pthread_t th;
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setstacksize(&attr, 128 << 10);
+ int i = 0;
+ for (; i < 100; i++) {
+ if (pthread_create(&th, &attr, fn, arg) == 0) {
+ pthread_attr_destroy(&attr);
+ return;
+ }
+ if (errno == EAGAIN) {
+ usleep(50);
+ continue;
+ }
+ break;
+ }
+ exit(1);
+}
+
+typedef struct {
+ pthread_mutex_t mu;
+ pthread_cond_t cv;
+ int state;
+} event_t;
+
+static void event_init(event_t* ev)
+{
+ if (pthread_mutex_init(&ev->mu, 0))
+ exit(1);
+ if (pthread_cond_init(&ev->cv, 0))
+ exit(1);
+ ev->state = 0;
+}
+
+static void event_reset(event_t* ev)
+{
+ ev->state = 0;
+}
+
+static void event_set(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ if (ev->state)
+ exit(1);
+ ev->state = 1;
+ pthread_mutex_unlock(&ev->mu);
+ pthread_cond_broadcast(&ev->cv);
+}
+
+static void event_wait(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ while (!ev->state)
+ pthread_cond_wait(&ev->cv, &ev->mu);
+ pthread_mutex_unlock(&ev->mu);
+}
+
+static int event_isset(event_t* ev)
+{
+ pthread_mutex_lock(&ev->mu);
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+static int event_timedwait(event_t* ev, uint64_t timeout)
+{
+ uint64_t start = current_time_ms();
+ uint64_t now = start;
+ pthread_mutex_lock(&ev->mu);
+ for (;;) {
+ if (ev->state)
+ break;
+ uint64_t remain = timeout - (now - start);
+ struct timespec ts;
+ ts.tv_sec = remain / 1000;
+ ts.tv_nsec = (remain % 1000) * 1000 * 1000;
+ pthread_cond_timedwait(&ev->cv, &ev->mu, &ts);
+ now = current_time_ms();
+ if (now - start > timeout)
+ break;
+ }
+ int res = ev->state;
+ pthread_mutex_unlock(&ev->mu);
+ return res;
+}
+
+struct thread_t {
+ int created, call;
+ event_t ready, done;
+};
+
+static struct thread_t threads[16];
+static void execute_call(int call);
+static int running;
+
+static void* thr(void* arg)
+{
+ struct thread_t* th = (struct thread_t*)arg;
+ for (;;) {
+ event_wait(&th->ready);
+ event_reset(&th->ready);
+ execute_call(th->call);
+ __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->done);
+ }
+ return 0;
+}
+
+static void execute_one(void)
+{
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ int i, call, thread;
+ for (call = 0; call < 5; call++) {
+ for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0]));
+ thread++) {
+ struct thread_t* th = &threads[thread];
+ if (!th->created) {
+ th->created = 1;
+ event_init(&th->ready);
+ event_init(&th->done);
+ event_set(&th->done);
+ thread_start(thr, th);
+ }
+ if (!event_isset(&th->done))
+ continue;
+ event_reset(&th->done);
+ th->call = call;
+ __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
+ event_set(&th->ready);
+ if (call == 2)
+ break;
+ event_timedwait(&th->done, 50);
+ break;
+ }
+ }
+ for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++)
+ sleep_ms(1);
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+ int iter = 0;
+ for (;; iter++) {
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ }
+}
+
+uint64_t r[2] = {0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_call(int call)
+{
+ intptr_t res = 0;
+ switch (call) {
+ case 0:
+ res = syscall(SYS_socketpair, /*domain=*/1ul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0, /*fds=*/0x200000000040ul);
+ if (res != -1) {
+ r[0] = *(uint32_t*)0x200000000040;
+ r[1] = *(uint32_t*)0x200000000044;
+ }
+ break;
+ case 1:
+ memcpy((void*)0x200000000100, "\x09\x00\x10\x00", 4);
+ syscall(SYS_setsockopt, /*fd=*/r[1], /*level=*/0, /*optname=*/3,
+ /*optval=*/0x200000000100ul, /*optlen=*/4ul);
+ break;
+ case 2:
+ *(uint64_t*)0x2000000018c0 = 0;
+ *(uint32_t*)0x2000000018c8 = 0;
+ *(uint64_t*)0x2000000018d0 = 0;
+ *(uint64_t*)0x2000000018d8 = 0;
+ *(uint64_t*)0x2000000018e0 = 0x200000001880;
+ memcpy((void*)0x200000001880, "\x10\x00\x00\x00\xff\xff\x00\x00\x06", 9);
+ *(uint64_t*)0x2000000018e8 = 0x10;
+ *(uint32_t*)0x2000000018f0 = 0;
+ syscall(SYS_sendmsg, /*fd=*/r[0], /*msg=*/0x2000000018c0ul, /*f=*/0ul);
+ for (int i = 0; i < 64; i++) {
+ syscall(SYS_sendmsg, /*fd=*/r[0], /*msg=*/0x2000000018c0ul, /*f=*/0ul);
+ }
+ break;
+ case 3:
+ syscall(SYS_writev, /*fd=*/r[0], /*vec=*/0ul, /*vlen=*/0ul);
+ for (int i = 0; i < 64; i++) {
+ syscall(SYS_writev, /*fd=*/r[0], /*vec=*/0ul, /*vlen=*/0ul);
+ }
+ break;
+ case 4:
+ syscall(SYS_setsockopt, /*fd=*/(intptr_t)-1, /*level=*/0, /*optname=*/0xa,
+ /*optval=*/0ul, /*optlen=*/0ul);
+ break;
+ }
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ for (procid = 0; procid < 4; procid++) {
+ if (fork() == 0) {
+ loop();
+ }
+ }
+ sleep(1000000);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c -lpthread || exit 1
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller81.sh b/tools/test/stress2/misc/syzkaller81.sh
new file mode 100755
index 000000000000..e3e4ec50aeea
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller81.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+# panic: kern_clock_gettime: 22
+# cpuid = 1
+# time = 1750181240
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01a6084ba0
+# vpanic() at vpanic+0x136/frame 0xfffffe01a6084cd0
+# panic() at panic+0x43/frame 0xfffffe01a6084d30
+# kern_clock_nanosleep() at kern_clock_nanosleep+0x38f/frame 0xfffffe01a6084db0
+# sys_clock_nanosleep() at sys_clock_nanosleep+0x49/frame 0xfffffe01a6084e00
+# amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe01a6084f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01a6084f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x8233d281a, rsp = 0x820bfb2b8, rbp = 0x820bfb2e0 ---
+# KDB: enter: panic
+# [ thread pid 26119 tid 104417 ]
+# Stopped at kdb_enter+0x33: movq $0,0x122a7b2(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #1 ufs-n278031-3296ff02387b: Tue Jun 17 16:40:44 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/var/tmp/deviant3/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=5eb7636bc26fcbd20412de35ec10944233b8577d
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+e17e46b1f0b65027b005@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ *(uint64_t*)0x200000000040 = 0x10000000000;
+ *(uint64_t*)0x200000000048 = 0x4000000;
+ syscall(SYS_clock_nanosleep, /*id=*/0x10ul, /*flags=TIMER_ABSTIME*/ 1ul,
+ /*rqtp=*/0x200000000040ul, /*rmtp=*/0ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller82.sh b/tools/test/stress2/misc/syzkaller82.sh
new file mode 100755
index 000000000000..c810942eb060
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller82.sh
@@ -0,0 +1,122 @@
+#!/bin/sh
+
+# panic: m_apply, length > size of mbuf chain (8 extra)
+# cpuid = 1
+# time = 1753341719
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe01f00c5080
+# vpanic() at vpanic+0x136/frame 0xfffffe01f00c51b0
+# panic() at panic+0x43/frame 0xfffffe01f00c5210
+# m_apply() at m_apply+0x2d3/frame 0xfffffe01f00c5260
+# sctp_delayed_cksum() at sctp_delayed_cksum+0x4c/frame 0xfffffe01f00c5290
+# ip6_output_delayed_csum() at ip6_output_delayed_csum+0xaa/frame 0xfffffe01f00c52d0
+# ip6_output() at ip6_output+0x19e6/frame 0xfffffe01f00c5490
+# sctp_lowlevel_chunk_output() at sctp_lowlevel_chunk_output+0x104f/frame 0xfffffe01f00c55d0
+# sctp_med_chunk_output() at sctp_med_chunk_output+0x2ad2/frame 0xfffffe01f00c5fb0
+# sctp_chunk_output() at sctp_chunk_output+0x121c/frame 0xfffffe01f00c6960
+# sctp_lower_sosend() at sctp_lower_sosend+0x146c/frame 0xfffffe01f00c6b50
+# sctp_sosend() at sctp_sosend+0x333/frame 0xfffffe01f00c6c70
+# sousrsend() at sousrsend+0x79/frame 0xffkern_sendit() at kern_sendit+0x1be/frame 0xfffffe01f00c6d60
+# sendit() at sendit+0x1ab/frame 0xfffffe01f00c6db0
+# sys_sendto() at sys_sendto+0x4d/frame 0xfffffe01f00c6e00
+# amd64_syscall() at amd64_syscall+0x169/frame 0xfffffe01f00c6f30
+# fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01f00c6f30
+# --- syscall (0, FreeBSD ELF64, syscall), rip = 0x823035b0a, rsp = 0x8208fa048, rbp = 0x8208fa060 ---
+# KDB: enter: panic
+# [ thread pid 41871 tid 736799 ]
+# Stopped at kdb_enter+0x33: movq $0,0x1231b52(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n279001-7502c1f27082-dirty: Wed Jul 23 20:31:48 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+# db>
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=09297b76b7db4aa29c86ac971062bc078b06c0ff
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+// syzbot+73fe316271df473230eb@syzkaller.appspotmail.com
+
+#define _GNU_SOURCE
+
+#include <pwd.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+
+uint64_t r[1] = {0xffffffffffffffff};
+
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ res = syscall(SYS_socket, /*domain=*/0x1cul, /*type=SOCK_STREAM*/ 1ul,
+ /*proto=*/0x84);
+ if (res != -1)
+ r[0] = res;
+ *(uint8_t*)0x2000000001c0 = 0x10;
+ *(uint8_t*)0x2000000001c1 = 2;
+ *(uint16_t*)0x2000000001c2 = htobe16(0x4e23);
+ *(uint32_t*)0x2000000001c4 = htobe32(0);
+ memset((void*)0x2000000001c8, 0, 8);
+ memset((void*)0x2000000001d0, 0, 112);
+ *(uint32_t*)0x200000000240 = 0;
+ *(uint32_t*)0x200000000244 = 0x5234;
+ *(uint32_t*)0x200000000248 = 0xffff;
+ *(uint32_t*)0x20000000024c = 0x314;
+ *(uint32_t*)0x200000000250 = 0x3bb;
+ *(uint16_t*)0x200000000254 = 2;
+ *(uint8_t*)0x200000000256 = 9;
+ syscall(SYS_setsockopt, /*fd=*/r[0], /*level=*/0x84, /*opt=*/0xa,
+ /*val=*/0x2000000001c0ul, /*len=*/0x98ul);
+ *(uint8_t*)0x200000000000 = 0x1c;
+ *(uint8_t*)0x200000000001 = 0x1c;
+ *(uint16_t*)0x200000000002 = htobe16(0x4e22);
+ *(uint32_t*)0x200000000004 = 0;
+ memset((void*)0x200000000008, 0, 16);
+ *(uint32_t*)0x200000000018 = 0;
+ syscall(SYS_bind, /*fd=*/r[0], /*addr=*/0x200000000000ul, /*addrlen=*/0x1cul);
+ *(uint8_t*)0x200000000180 = 0x5f;
+ *(uint8_t*)0x200000000181 = 0x1c;
+ *(uint16_t*)0x200000000182 = htobe16(0x4e22);
+ *(uint32_t*)0x200000000184 = 0;
+ *(uint64_t*)0x200000000188 = htobe64(0);
+ *(uint64_t*)0x200000000190 = htobe64(1);
+ *(uint32_t*)0x200000000198 = 0;
+ syscall(SYS_connect, /*fd=*/r[0], /*addr=*/0x200000000180ul,
+ /*addrlen=*/0x1cul);
+ memset((void*)0x2000000020c0, 209, 1);
+ syscall(SYS_sendto, /*fd=*/r[0], /*buf=*/0x2000000020c0ul, /*len=*/0xffeful,
+ /*f=MSG_NOSIGNAL|MSG_EOF|MSG_DONTWAIT|MSG_DONTROUTE*/ 0x20184ul,
+ /*addr=*/0ul, /*addrlen=*/0ul);
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+kldstat | grep -q sctp || { kldload sctp.ko && loaded=1; }
+timeout 3m /tmp/$prog > /dev/null 2>&1
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+[ $loaded ] && kldunload sctp.ko
+exit 0
diff --git a/tools/test/stress2/misc/syzkaller83.sh b/tools/test/stress2/misc/syzkaller83.sh
new file mode 100755
index 000000000000..418bfd75982d
--- /dev/null
+++ b/tools/test/stress2/misc/syzkaller83.sh
@@ -0,0 +1,168 @@
+#!/bin/sh
+
+# panic: handle_workitem_remove: bad file delta
+# cpuid = 2
+# time = 1753799597
+# KDB: stack backtrace:
+# db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00ffc84b70
+# vpanic() at vpanic+0x136/frame 0xfffffe00ffc84ca0
+# panic() at panic+0x43/frame 0xfffffe00ffc84d00
+# handle_workitem_remove() at handle_workitem_remove+0x68d/frame 0xfffffe00ffc84d70
+# handle_workitem_remove() at handle_workitem_remove+0x52d/frame 0xfffffe00ffc84de0
+# process_worklist_item() at process_worklist_item+0x21e/frame 0xfffffe00ffc84e70
+# softdep_process_worklist() at softdep_process_worklist+0xbd/frame 0xfffffe00ffc84eb0
+# softdep_flush() at softdep_flush+0x10f/frame 0xfffffe00ffc84ef0
+# fork_exit() at fork_exit+0x82/frame 0xfffffe00ffc84f30
+# fork_trampoline() at fork_trampoline+0xe/frame 0xfffffe00ffc84f30
+# --- trap 0, rip = 0, rsp = 0, rbp = 0 ---
+# KDB: enter: panic
+# [ thread pid 16 tid 100253 ]
+# Stopped at kdb_enter+0x33: movq $0,0x1230852(%rip)
+# db> x/s version
+# version: FreeBSD 15.0-CURRENT #0 main-n279158-f1f77adfd9bc-dirty: Tue Jul 29 15:49:28 CEST 2025
+# pho@mercat1.netperf.freebsd.org:/usr/src/sys/amd64/compile/PHO
+
+[ `id -u ` -ne 0 ] && echo "Must be root!" && exit 1
+
+. ../default.cfg
+set -u
+prog=$(basename "$0" .sh)
+cat > /tmp/$prog.c <<EOF
+// https://syzkaller.appspot.com/bug?id=0a60b828818a364deb4721d58b2ed5167b1f6296
+// autogenerated by syzkaller (https://github.com/google/syzkaller)
+
+#define _GNU_SOURCE
+
+#include <sys/types.h>
+
+#include <pwd.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/endian.h>
+#include <sys/syscall.h>
+#include <sys/wait.h>
+#include <time.h>
+#include <unistd.h>
+
+static void kill_and_wait(int pid, int* status)
+{
+ kill(pid, SIGKILL);
+ while (waitpid(-1, status, 0) != pid) {
+ }
+}
+
+static void sleep_ms(uint64_t ms)
+{
+ usleep(ms * 1000);
+}
+
+static uint64_t current_time_ms(void)
+{
+ struct timespec ts;
+ if (clock_gettime(CLOCK_MONOTONIC, &ts))
+ exit(1);
+ return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000;
+}
+
+static void execute_one(void);
+
+#define WAIT_FLAGS 0
+
+static void loop(void)
+{
+// int iter = 0;
+ for (;; /*iter++*/) {
+ int pid = fork();
+ if (pid < 0)
+ exit(1);
+ if (pid == 0) {
+ execute_one();
+ exit(0);
+ }
+ int status = 0;
+ uint64_t start = current_time_ms();
+ for (;;) {
+ sleep_ms(10);
+ if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid)
+ break;
+ if (current_time_ms() - start < 5000)
+ continue;
+ kill_and_wait(pid, &status);
+ break;
+ }
+ }
+}
+
+uint64_t r[3] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff};
+
+void execute_one(void)
+{
+ intptr_t res = 0;
+ if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {
+ }
+ memcpy((void*)0x200000000180, "./file0\000", 8);
+ syscall(SYS_mkdir, /*path=*/0x200000000180ul, /*mode=*/0ul);
+ memcpy((void*)0x200000000000, "./file0/file0\000", 14);
+ syscall(SYS_mkdir, /*path=*/0x200000000000ul, /*mode=*/0ul);
+ memcpy((void*)0x200000000080, ".\000", 2);
+ res = syscall(SYS_open, /*file=*/0x200000000080ul,
+ /*flags=O_DIRECT*/ 0x10000ul, /*mode=*/0ul);
+ if (res != -1)
+ r[0] = res;
+ memcpy((void*)0x200000000080, ".\000", 2);
+ res =
+ syscall(SYS_open, /*file=*/0x200000000080ul, /*flags=*/0ul, /*mode=*/0ul);
+ if (res != -1)
+ r[1] = res;
+ memcpy((void*)0x200000000080, ".\000", 2);
+ res = syscall(SYS_open, /*file=*/0x200000000080ul, /*flags=O_NONBLOCK*/ 4ul,
+ /*mode=*/0ul);
+ if (res != -1)
+ r[2] = res;
+ memcpy((void*)0x200000000100, "./file1\000", 8);
+ syscall(SYS_mkdirat, /*fd=*/r[2], /*path=*/0x200000000100ul,
+ /*mode=S_IROTH|S_IWUSR*/ 0x84ul);
+ memcpy((void*)0x200000000340, "./file0/file0\000", 14);
+ memcpy((void*)0x200000000380, "./file1\000", 8);
+ syscall(SYS_renameat, /*oldfd=*/r[0], /*old=*/0x200000000340ul,
+ /*newfd=*/r[1], /*new=*/0x200000000380ul);
+}
+int main(void)
+{
+ syscall(SYS_mmap, /*addr=*/0x200000000000ul, /*len=*/0x1000000ul,
+ /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/ 7ul,
+ /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/ 0x1012ul,
+ /*fd=*/(intptr_t)-1, /*offset=*/0ul);
+ const char* reason;
+ (void)reason;
+ loop();
+ return 0;
+}
+EOF
+mycc -o /tmp/$prog -Wall -Wextra -O0 /tmp/$prog.c || exit 1
+
+(cd ../testcases/swap; ./swap -t 3m -i 30 -l 100 > /dev/null 2>&1) &
+sleep 5
+
+work=/tmp/$prog.dir
+rm -rf $work
+mkdir $work
+cd /tmp/$prog.dir
+for i in `jot 30`; do
+ (
+ mkdir d$i
+ cd d$i
+ timeout 3m /tmp/$prog > /dev/null 2>&1 &
+ )
+done
+while pgrep -q $prog; do sleep 2; done
+while pkill swap; do :; done
+wait
+
+rm -rf /tmp/$prog /tmp/$prog.c /tmp/$prog.core /tmp/$prog.?????? $work
+exit 0
diff --git a/tools/test/stress2/misc/vfork.sh b/tools/test/stress2/misc/vfork.sh
index 20db95c2b9be..cabc30ebaa6c 100755
--- a/tools/test/stress2/misc/vfork.sh
+++ b/tools/test/stress2/misc/vfork.sh
@@ -31,6 +31,9 @@
# "panic: failed to set signal flags for ast p ... fl 4" seen.
# Fixed in r302999.
+# Test scenario updated after commit:
+# ecc662c749b1 - main - PT_ATTACH: do not interrupt interruptible sleeps
+
. ../default.cfg
cd /tmp
@@ -46,38 +49,32 @@ main(void)
fprintf(stderr, "%d\n", getpid());
if ((pid = vfork()) == 0) {
-#if 0
- if (ptrace(PT_TRACE_ME, 0, 0, 0) == -1)
- err(1, "PT_TRACEME");
-#endif
sleep(30);
_exit(0);
}
if (pid == -1)
err(1, "vfork");
-
- return (0);
}
EOF
-mycc -o vfork1 -Wall -Wextra -g vfork1.c
-rm vfork1.c
+mycc -o vfork1 -Wall -Wextra -g vfork1.c || exit 1
+rm vfork1.c
cat > vfork2.c <<- EOF
#include <sys/types.h>
+#include <sys/ptrace.h>
+#include <sys/resource.h>
+#include <sys/time.h>
+#include <sys/wait.h>
#include <err.h>
#include <errno.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
-#include <sys/ptrace.h>
-#include <sys/resource.h>
-#include <sys/time.h>
-#include <sys/wait.h>
#include <unistd.h>
int
-main(int argc, char **argv)
+main(int argc, char *argv[])
{
pid_t pid, rpid;
struct rusage ru;
@@ -86,6 +83,7 @@ main(int argc, char **argv)
if (argc != 2)
errx(1, "Usage: %s <pid>", argv[0]);
pid = atoi(argv[1]);
+ status = 0;
if (pid == -1)
err(1, "fork()");
@@ -99,24 +97,17 @@ main(int argc, char **argv)
err(0, "OK wait4");
}
if (rpid == 0) {
-// fprintf(stderr, "No rusage info.\n");
if (ptrace(PT_DETACH, pid, NULL, 0) == -1)
err(1, "ptrace(%d) detach", pid);
- if (wait(&status) == -1)
- err(1, "wait");
} else {
fprintf(stderr, "FAIL Got unexpected rusage.\n");
if (ru.ru_utime.tv_sec != 0)
fprintf(stderr, "FAIL tv_sec\n");
}
- if (status != 0x4000)
- fprintf(stderr, "FAIL Child exit status 0x%x\n", status);
-
- return (0);
}
EOF
-mycc -o vfork2 -Wall -Wextra -g vfork2.c
-rm vfork2.c
+mycc -o vfork2 -Wall -Wextra -g vfork2.c || exit 1
+rm vfork2.c
./vfork1 &
sleep .2
@@ -127,5 +118,6 @@ childpid=`ps -lx | grep -v grep | grep vfork1 |
./vfork2 $childpid
s=$?
+pkill vfork1
rm -f vfork1 vfork2
exit $s
diff --git a/tools/tools/ath/athpoke/athpoke.c b/tools/tools/ath/athpoke/athpoke.c
index e54388587ca8..02a21676e91f 100644
--- a/tools/tools/ath/athpoke/athpoke.c
+++ b/tools/tools/ath/athpoke/athpoke.c
@@ -89,7 +89,7 @@ main(int argc, char *argv[])
atd.ad_out_data = (caddr_t) &state.revs;
atd.ad_out_size = sizeof(state.revs);
if (ioctl(s, SIOCGATHDIAG, &atd) < 0)
- err(1, atd.ad_name);
+ err(1, "%s", atd.ad_name);
argc -= optind;
argv += optind;
@@ -132,7 +132,7 @@ regread(int s, struct ath_diag *atd, uint32_t r)
atd->ad_out_size = sizeof(v);
atd->ad_id = HAL_DIAG_REGS | ATH_DIAG_IN | ATH_DIAG_DYN;
if (ioctl(s, SIOCGATHDIAG, atd) < 0)
- err(1, atd->ad_name);
+ err(1, "%s", atd->ad_name);
return v[2];
}
@@ -147,7 +147,7 @@ regwrite(int s, struct ath_diag *atd, uint32_t r, uint32_t v)
atd->ad_in_size = sizeof(rw);
atd->ad_id = HAL_DIAG_SETREGS | ATH_DIAG_IN;
if (ioctl(s, SIOCGATHDIAG, atd) < 0)
- err(1, atd->ad_name);
+ err(1, "%s", atd->ad_name);
}
static int
diff --git a/tools/tools/ath/common/ctrl.c b/tools/tools/ath/common/ctrl.c
index 419e6fe8277e..ccea1b13401a 100644
--- a/tools/tools/ath/common/ctrl.c
+++ b/tools/tools/ath/common/ctrl.c
@@ -87,7 +87,7 @@ ath_driver_req_open(struct ath_driver_req *req, const char *ifname)
{
int s;
- if (s != -1)
+ if (req->s != -1)
ath_driver_req_close(req);
/* For now, netif socket, not /dev/ filedescriptor */
diff --git a/tools/tools/git/ghpr/README b/tools/tools/git/ghpr/README
new file mode 100644
index 000000000000..e07d56b1e09b
--- /dev/null
+++ b/tools/tools/git/ghpr/README
@@ -0,0 +1,5 @@
+These are totally experimental
+
+Shared for collaboration on writing them, if you aren't
+in touch with Warner about them, you may find it's super
+tough sledding to use them.
diff --git a/tools/tools/git/ghpr/ghpr-init.sh b/tools/tools/git/ghpr/ghpr-init.sh
new file mode 100644
index 000000000000..567148b14716
--- /dev/null
+++ b/tools/tools/git/ghpr/ghpr-init.sh
@@ -0,0 +1,29 @@
+#!/bin/sh
+
+set -e
+
+die() {
+ echo $*
+ exit 1
+}
+
+# Create a fresh branch for the staging tree.
+BRANCH=${1:-staging}
+base=main
+
+if [ "$(git config branch.${BRANCH}.opabinia)" = "true" ]; then
+ echo "Branch ${BRANCH} has already been initialized"
+ # Bail if the branch already exists
+else
+ if git rev-parse --verify ${BRANCH} > /dev/null 2>&1; then
+ echo "Branch ${BRANCH} already exists, skipping creation, but rebasing to ${base}"
+ git rebase ${base} ${BRANCH}
+ else
+ # Create the branch and tag it as the one we're using for opabinia merging.
+ echo "Creating ${BRANCH} from ${base} to land changes"
+ git checkout -b ${BRANCH} ${base} || die "Can't create ${BRANCH}"
+ fi
+fi
+
+git config set --type bool --all branch.${BRANCH}.opabinia true || die "Can't annotate"
+git config set --all branch.${BRANCH}.opabinia.base "${base}" || die "Can't annotate"
diff --git a/tools/tools/git/ghpr/ghpr-push.sh b/tools/tools/git/ghpr/ghpr-push.sh
new file mode 100644
index 000000000000..1d11f31cc52a
--- /dev/null
+++ b/tools/tools/git/ghpr/ghpr-push.sh
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+set -e
+
+die() {
+ echo $*
+ exit 1
+}
+
+staging=staging
+do_pr_branch_push=false
+
+
+# Iteratively try to push all the branches, then push upstream. Repeat until the upstream
+# push works...
+while true; do
+ # We'll likely drop pushing to the pull request branches, but that's not
+ # final, so keep the code, but if false'd out. We'll make it a proper option
+ # or remove it once the discussion settles down. Only Warner can use it at
+ # the moment anyway.
+ if $do_pr_branch_push; then
+ for pr in $(git config --get-all branch.${staging}.opabinia.prs); do
+ upstream=$(git config --get branch.${staging}.opabinia.${pr}.upstream)
+ upstream_branch=$(git config --get branch.${staging}.opabinia.${pr}.upstream-branch)
+ git push $upstream HEAD:$upstream_branch --force || true # bare git push gives cut and paste line
+ done
+ fi
+
+ if ! git push --push-option=confirm-author freebsd HEAD:main; then
+ git fetch freebsd
+ git rebase freebsd/main ${staging}
+ continue
+ fi
+ break
+done
+
+# OK, pull and rebase to catchup to these changes...
+git checkout main;
+git pull --rebase
+
+# try to cleanup
+for pr in $(git config --get-all branch.${staging}.opabinia.prs); do
+ if ! $do_pr_branch_push; then
+ gh pr edit $pr --add-label merged
+ gh pr close $pr --comment "Automated message from ghpr: Thank you for your submission. This PR has been merged to FreeBSD's `main` branch. These changes will appear shortly on our GitHub mirror."
+ fi
+ git branch -D PR-${pr}
+ git config --remove-section branch.${staging}.opabinia.${pr}
+done
+git config --remove-section branch.${staging}.opabinia
+git branch -D ${staging}
diff --git a/tools/tools/git/ghpr/ghpr-stage.sh b/tools/tools/git/ghpr/ghpr-stage.sh
new file mode 100644
index 000000000000..df9eeeeea5a3
--- /dev/null
+++ b/tools/tools/git/ghpr/ghpr-stage.sh
@@ -0,0 +1,72 @@
+#!/bin/sh
+
+set -e
+
+die() {
+ echo $*
+ exit 1
+}
+
+update_to_upstream() (
+ local staging=$1
+ local base=$2
+
+ git checkout ${base}
+ git pull --rebase
+ git rebase -i ${base} ${staging}
+)
+
+PR=$1
+staging=staging
+
+[ -n "${PR}" ] || die "Need a pr"
+
+if [ "$(git config branch.${staging}.opabinia)" != "true" ]; then
+ die "Branch ${staging} has not been initialized"
+fi
+
+base=$(git config branch.${staging}.opabinia.base)
+[ -n "${base}" ] || die "No base set on ${staging}"
+
+if [ -z "$(git config --get-all branch.${staging}.opabinia.prs)" ]; then
+ # Update ${base} if prs list is empty
+ update_to_upstream ${staging} ${base}
+else
+ # Otherwise checkout staging as is
+ git checkout ${staging}
+fi
+
+# OK. We always have to create a new branch for the PR. We do this into
+# ${base} first (since that's what gh pr checkout does). We then then rebase
+# this branch onto the staging branch, doing the rebase rewriting along the
+# way. This rather convoluted setup was selected over cherry-picking and/or
+# pulling a formatted patch to apply because it always applies it correctly
+# and then we use git's tools to merge, pushing the problems there rather than
+# trying to deal with them ourselves here.
+
+# In the future, PR may be a list
+# Also, error handling is annoying at best.
+
+git branch -D PR-$PR || true
+gh pr checkout $PR -b PR-$PR
+
+upstream=$(git config branch.PR-$PR.pushRemote)
+upstream_branch=$(git config branch.PR-$PR.merge | sed -e s=refs/heads/==)
+
+git rebase -i ${base} --onto ${staging} --exec 'env EDITOR=$HOME/bin/git-fixup-editor git commit --amend --trailer "Reviewed-by: imp" --trailer "Pull-Request: https://github.com/freebsd/freebsd-src/pull/'"$PR"'"'
+# Save the upstream data
+git config --add branch.${staging}.opabinia.prs ${PR}
+git config --add branch.${staging}.opabinia.${PR}.upstream ${upstream}
+git config --add branch.${staging}.opabinia.${PR}.upstream-branch ${upstream_branch}
+# Move the staging branch to the new tip of the tree.
+git checkout -B ${staging} HEAD
+
+# XXX need to somehow scrape the PR for approvals, translate that to FreeBSD's name
+# and add that in the Reviewed-by stuff... that's done by hand...
+
+# Sanity check things... not 100% right, since it checks everything we're queued up so far...
+tools/build/checkstyle9.pl ${base}..${staging}
+
+# Bump .Dd dates?
+# run before/after igor?
+# Anything else?
diff --git a/tools/tools/git/git-arc.1 b/tools/tools/git/git-arc.1
index 1f1bc2fca130..a056a2223e0e 100644
--- a/tools/tools/git/git-arc.1
+++ b/tools/tools/git/git-arc.1
@@ -83,6 +83,8 @@ and wait for confirmation.
.It Fl r Ar reviewer
Add one or more reviewers, separated by commas, to revision(s) being created.
Each argument must be an existing Phabricator user or group.
+Note that group reviewers must be specified using their
+hashtag (e.g. #jails for the "Jails" group).
.It Fl s Ar subscriber
Add one or more subscribers, separated by commas, to revision(s) being created.
Each argument must be an existing Phabricator user or group.
diff --git a/tools/tools/git/git-arc.sh b/tools/tools/git/git-arc.sh
index b49721159799..22df0c61293a 100644
--- a/tools/tools/git/git-arc.sh
+++ b/tools/tools/git/git-arc.sh
@@ -545,7 +545,7 @@ find_author()
# don't know if the prior _ are _ or + or any number of other characters.
# Since there's issues here, prompt
a=$(printf "%s <%s>\n" "${name}" $(echo "$addr" | sed -e 's/\(.*\)_/\1@/'))
- echo "Making best guess: Turning ${addr} to ${a}"
+ echo "Making best guess: Turning ${addr} to ${a}" >&2
if ! prompt; then
echo "ABORT"
return
@@ -582,17 +582,10 @@ patch_commit()
echo '{"revisionIDs": [ '"${diff#D}"' ]}' | \
arc_call_conduit -- differential.querydiffs |
jq -r '.response | flatten | .[]' > "$diff_data"
- author_addr=$(jq -r ".authorEmail?" "$diff_data" | sort -u)
- author_name=$(jq -r ".authorName?" "$diff_data" | sort -u)
-
- # JSON will return "null" when a field is not populated.
- # Turn this string into an empty one.
- if [ "$author_addr" = "null" ]; then
- author_addr=""
- fi
- if [ "$author_name" = "null" ]; then
- author_name=""
- fi
+ # If the differential revision has multiple revisions, just take the first
+ # non-null value we get.
+ author_addr=$(jq -r ".authorEmail?" "$diff_data" | grep -v '^null$' | head -n 1)
+ author_name=$(jq -r ".authorName?" "$diff_data" | grep -v '^null$' | head -n 1)
author=$(find_author "$user_addr" "$user_name" "$author_addr" "$author_name")
diff --git a/tools/tools/kgdb/tcplog.py b/tools/tools/kgdb/tcplog.py
new file mode 100644
index 000000000000..380f5fc85b53
--- /dev/null
+++ b/tools/tools/kgdb/tcplog.py
@@ -0,0 +1,267 @@
+#!/usr/bin/env python3
+
+#-
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# This software was developed by Tom Jones <thj@FreeBSD.org> under sponsorship
+# from The FreeBSD Foundation
+
+## Extracting logs using the kgdb script
+#
+# This script extracts tcp black box logs from a kernel core for use with
+# tcplog_dumper[1] and readbbr_log[2].
+#
+# Some system configuration is required to enable black box logs
+#
+# [1]: https://github.com/Netflix/tcplog_dumper
+# [2]: https://github.com/Netflix/read_bbrlog
+#
+# TCP Logs can be extracted from FreeBSD kernel core dumps using the gdb plugin
+# provided in the `kgdb` directory. An example usage assuming relevant kernel
+# builds and coredumps looks like:
+#
+# $ kgdb kernel-debug/kernel.debug vmcore.last
+# Reading symbols from coredump/kernel-debug/kernel.debug...
+#
+# Unread portion of the kernel message buffer:
+# KDB: enter: sysctl debug.kdb.enter
+#
+# __curthread () at /usr/src/sys/amd64/include/pcpu_aux.h:57
+# 57 __asm("movq %%gs:%P1,%0" : "=r" (td) : "n" (offsetof(struct pcpu,
+# (kgdb) source tcplog.py
+# (kgdb) tcplog_dump vnet0
+# processing struct tcpcb * 0xfffff80006e8ca80
+# _t_logstate: 4 _t_logpoint: 0 '\000' t_lognum: 25 t_logsn: 25
+# log written to 0xfffff80006e8ca80_tcp_log.bin
+# processing struct tcpcb * 0xfffff8000ec2b540
+# _t_logstate: 4 _t_logpoint: 0 '\000' t_lognum: 8 t_logsn: 8
+# log written to 0xfffff8000ec2b540_tcp_log.bin
+# processing struct tcpcb * 0xfffff80006bd9540
+# no logs
+# processing struct tcpcb * 0xfffff80006bd9a80
+# no logs
+# processing struct tcpcb * 0xfffff8001d837540
+# no logs
+# processing struct tcpcb * 0xfffff8001d837000
+# no logs
+#
+# processed 1 vnets, dumped 2 logs
+# 0xfffff80006e8ca80_tcp_log.bin 0xfffff8000ec2b540_tcp_log.bin
+#
+#
+# The generated files can be given to tcplog_dumper to generate pcaps like so:
+#
+# $ tcplog_dumper -s -f 0xfffff80006e8ca80_tcp_log.bin
+#
+
+import struct
+
+TLB_FLAG_RXBUF = 0x0001 #/* Includes receive buffer info */
+TLB_FLAG_TXBUF = 0x0002 #/* Includes send buffer info */
+TLB_FLAG_HDR = 0x0004 #/* Includes a TCP header */
+TLB_FLAG_VERBOSE = 0x0008 #/* Includes function/line numbers */
+TLB_FLAG_STACKINFO = 0x0010 #/* Includes stack-specific info */
+
+TCP_LOG_BUF_VER = 9 # from netinet/tcp_log_buf.h
+TCP_LOG_DEV_TYPE_BBR = 1 # from dev/tcp_log/tcp_log_dev.h
+
+TCP_LOG_ID_LEN = 64
+TCP_LOG_TAG_LEN = 32
+TCP_LOG_REASON_LEN = 32
+
+AF_INET = 2
+AF_INET6 = 28
+
+INC_ISIPV6 = 0x01
+
+class TCPLogDump(gdb.Command):
+
+ def __init__(self):
+ super(TCPLogDump, self).__init__(
+ "tcplog_dump", gdb.COMMAND_USER
+ )
+
+ def dump_tcpcb(self, tcpcb):
+ if tcpcb['t_lognum'] == 0:
+ print("processing {}\t{}\n\tno logs".format(tcpcb.type, tcpcb))
+ return
+ else:
+ print("processing {}\t{}".format(tcpcb.type, tcpcb))
+
+ print("\t_t_logstate:\t{} _t_logpoint:\t{} t_lognum:\t{} t_logsn:\t{}".format(
+ tcpcb['_t_logstate'], tcpcb['_t_logpoint'], tcpcb['t_lognum'], tcpcb['t_logsn']))
+
+ eaddr = (tcpcb['t_logs']['stqh_first'])
+ log_buf = bytes()
+ while eaddr != 0:
+ log_buf += self.print_tcplog_entry(eaddr)
+ eaddr = eaddr.dereference()['tlm_queue']['stqe_next']
+
+ if log_buf:
+ filename = "{}_tcp_log.bin".format(tcpcb)
+
+ with open(filename, "wb") as f:
+ f.write(self.format_header(tcpcb, eaddr, len(log_buf)))
+ f.write(log_buf)
+ self.logfiles_dumped.append(filename)
+ print("\tlog written to {}".format(filename))
+
+ # tcpcb, entry address, length of data for header
+ def format_header(self, tcpcb, eaddr, datalen):
+ # Get a handle we can use to read memory
+ inf = gdb.inferiors()[0] # in a coredump this should always be safe
+
+ # Add the common header
+ hdrlen = gdb.parse_and_eval("sizeof(struct tcp_log_header)")
+ hdr = struct.pack("=llq", TCP_LOG_BUF_VER, TCP_LOG_DEV_TYPE_BBR, hdrlen+datalen)
+
+ inp = tcpcb.cast(gdb.lookup_type("struct inpcb").pointer())
+
+ # Add entry->tldl_ie
+ bufaddr = gdb.parse_and_eval(
+ "&(((struct inpcb *){})->inp_inc.inc_ie)".format(tcpcb))
+ length = gdb.parse_and_eval("sizeof(struct in_endpoints)")
+ hdr += inf.read_memory(bufaddr, length).tobytes()
+
+ # Add boot time
+ hdr += struct.pack("=16x") # BOOTTIME
+
+ # Add id, tag and reason as UNKNOWN
+
+ unknown = bytes("UNKNOWN", "ascii")
+
+ hdr += struct.pack("={}s{}s{}s"
+ .format(TCP_LOG_ID_LEN, TCP_LOG_TAG_LEN, TCP_LOG_REASON_LEN),
+ unknown, unknown, unknown
+ )
+
+ # Add entry->tldl_af
+ if inp['inp_inc']['inc_flags'] & INC_ISIPV6:
+ hdr += struct.pack("=b", AF_INET6)
+ else:
+ hdr += struct.pack("=b", AF_INET)
+
+ hdr += struct.pack("=7x") # pad[7]
+
+ if len(hdr) != hdrlen:
+ print("header len {} bytes NOT CORRECT should be {}".format(len(hdr), hdrlen))
+
+ return hdr
+
+ def print_tcplog_entry(self, eaddr):
+ # implement tcp_log_logs_to_buf
+ entry = eaddr.dereference()
+
+ # If header is present copy out entire buffer
+ # otherwise copy just to the start of the header.
+ if entry['tlm_buf']['tlb_eventflags'] & TLB_FLAG_HDR:
+ length = gdb.parse_and_eval("sizeof(struct tcp_log_buffer)")
+ else:
+ length = gdb.parse_and_eval("&((struct tcp_log_buffer *) 0)->tlb_th")
+
+ bufaddr = gdb.parse_and_eval("&(((struct tcp_log_mem *){})->tlm_buf)".format(eaddr))
+
+ # Get a handle we can use to read memory
+ inf = gdb.inferiors()[0] # in a coredump this should always be safe
+ buf_mem = inf.read_memory(bufaddr, length).tobytes()
+
+ # If needed copy out a header size worth of 0 bytes
+ # this was a simple expression untiil gdb got involved.
+ if not entry['tlm_buf']['tlb_eventflags'] & TLB_FLAG_HDR:
+ buf_mem += bytes([0 for b
+ in range(
+ gdb.parse_and_eval("sizeof(struct tcp_log_buffer) - {}".format(length))
+ )
+ ])
+
+ # If verbose is set:
+ if entry['tlm_buf']['tlb_eventflags'] & TLB_FLAG_VERBOSE:
+ bufaddr = gdb.parse_and_eval("&(((struct tcp_log_mem *){})->tlm_v)".format(eaddr))
+ length = gdb.parse_and_eval("sizeof(struct tcp_log_verbose)")
+ buf_mem += inf.read_memory(bufaddr, length).tobytes()
+
+ return buf_mem
+
+ def dump_vnet(self, vnet):
+ # This is the general access pattern for something in a vnet.
+ cmd = "(struct inpcbinfo*)((((struct vnet *) {} )->vnet_data_base) + (uintptr_t )&vnet_entry_tcbinfo)".format(vnet)
+ ti = gdb.parse_and_eval(cmd)
+
+ # Get the inplist head (struct inpcb *)(struct inpcbinfo*)({})->ipi_listhead
+ inplist = ti['ipi_listhead']
+ self.walk_inplist(inplist)
+
+ def walk_inplist(self, inplist):
+ inp = inplist['clh_first']
+ while inp != 0:
+ self.dump_tcpcb(inp.cast(gdb.lookup_type("struct tcpcb").pointer()))
+ inp = inp['inp_list']['cle_next']
+
+ def walk_vnets(self, vnet):
+ vnets = []
+ while vnet != 0:
+ vnets.append(vnet)
+ vnet = vnet['vnet_le']['le_next']
+ return vnets
+
+ def complete(self, text, word):
+ return gdb.COMPLETE_SYMBOL
+
+ def invoke(self, args, from_tty):
+ if not args:
+ self.usage()
+ return
+
+ self.logfiles_dumped = []
+
+ node = gdb.parse_and_eval(args)
+
+ # If we are passed vnet0 pull out the first vnet, it is always there.
+ if str(node.type) == "struct vnet_list_head *":
+ print("finding start of the vnet list and continuing")
+ node = node["lh_first"]
+
+ if str(node.type) == "struct vnet *":
+ vnets = self.walk_vnets(node)
+ for vnet in vnets:
+ self.dump_vnet(vnet)
+
+ print("\nprocessed {} vnets, dumped {} logs\n\t{}"
+ .format(len(vnets), len(self.logfiles_dumped), " ".join(self.logfiles_dumped)))
+ elif str(node.type) == "struct inpcbinfo *":
+ inplist = node['ipi_listhead']
+ self.walk_inplist(inplist)
+
+ print("\ndumped {} logs\n\t{}"
+ .format(len(self.logfiles_dumped), " ".join(self.logfiles_dumped)))
+ elif str(node.type) == "struct tcpcb *":
+ self.dump_tcpcb(node)
+ else:
+ self.usage()
+
+ return
+
+ def usage(self):
+ print("tcplog_dump <address ish>")
+ print("Locate tcp_log_buffers and write them to a file")
+ print("Address can be one of:")
+ print("\tvnet list head (i.e. vnet0)")
+ print("\tvnet directly")
+ print("\tinpcbinfo")
+ print("\ttcpcb")
+ print("\nIf given anything other than a struct tcpcb *, will try and walk all available members")
+ print("that can be found")
+ print("\n")
+ print("logs will be written to files in cwd in the format:")
+ print("\t\t `%p_tcp_log.bin` struct tcpcb *")
+ print("\t\t existing files will be stomped on")
+ print("\nexamples:\n")
+ print("\t(kgdb) tcplog_dump vnet0")
+ print("\t(kgdb) tcplog_dump (struct inpcbinfo *)V_tcbinfo # on a non-vnet kernel (maybe, untested)")
+ print("\t(kgdb) tcplog_dump (struct tcpcb *)0xfffff80006e8ca80")
+ print("\t\twill result in a file called: 0xfffff80006e8ca80_tcp_log.bin\n\n")
+
+ return
+
+TCPLogDump()
+
diff --git a/tools/tools/nanobsd/defaults.sh b/tools/tools/nanobsd/defaults.sh
index 4ba35ffeb04d..59ae8d92f4af 100755
--- a/tools/tools/nanobsd/defaults.sh
+++ b/tools/tools/nanobsd/defaults.sh
@@ -79,7 +79,12 @@ CONF_BUILD=' '
CONF_INSTALL=' '
# Options to put in make.conf during both build- & installworld.
-CONF_WORLD=' '
+CONF_WORLD='
+WITHOUT_DEBUG_FILES=true
+WITHOUT_LIB32=true
+WITHOUT_KERNEL_SYMBOLS=true
+WITHOUT_TESTS=true
+'
# Kernel config file to use
NANO_KERNEL=GENERIC
@@ -104,7 +109,7 @@ NANO_NEWFS="-b 4096 -f 512 -i 8192 -U"
NANO_DRIVE=ada0
# Target media size in 512 bytes sectors
-NANO_MEDIASIZE=2000000
+NANO_MEDIASIZE=4000000
# Number of code images on media (1 or 2)
NANO_IMAGES=2
@@ -538,7 +543,7 @@ setup_nanobsd ( ) (
# are installed by this point, but are later in the process,
# the symlink not being here causes problems. It never hurts
# to have the symlink in error though.
- ln -s ../../etc/local usr/local/etc
+ ln -sf ../../etc/local usr/local/etc
for d in var etc
do
diff --git a/tools/tools/nanobsd/pcengines/ALIX_DSK b/tools/tools/nanobsd/pcengines/ALIX_DSK
index 9ab9d79c574c..31365834d20f 100644
--- a/tools/tools/nanobsd/pcengines/ALIX_DSK
+++ b/tools/tools/nanobsd/pcengines/ALIX_DSK
@@ -97,6 +97,7 @@ device pflog
device pfsync
device carp
device if_bridge
+device crypto # core crypto support
options DEVICE_POLLING
diff --git a/tools/tools/nanobsd/rescue/common b/tools/tools/nanobsd/rescue/common
index 5fcf5c19b882..15bf10f5e67d 100644
--- a/tools/tools/nanobsd/rescue/common
+++ b/tools/tools/nanobsd/rescue/common
@@ -1,15 +1,15 @@
#
#
-NANO_SRC=$(pwd)
-NANO_SRC=${NANO_SRC%/tools/tools/nanobsd/rescue}
-NANO_OBJ=${NANO_SRC}/../nanobsd-builds/${NANO_NAME}/obj
+#NANO_SRC=$(pwd)
+#NANO_SRC=${NANO_SRC%/tools/tools/nanobsd/rescue}
+#NANO_OBJ=${NANO_SRC}/../nanobsd-builds/${NANO_NAME}/obj
NANO_TOOLS=`pwd`
NANO_PACKAGE_DIR=`pwd`/Pkg
NANO_RAM_TMPVARSIZE=40960
NANO_PMAKE="make -j 8"
NANO_LABEL="rescue"
NANO_RAM_TMPVARSIZE=40960
-NANO_MEDIASIZE="3932160"
+NANO_MEDIASIZE="6000000"
NANO_SECTS="63"
NANO_HEADS="16"
NANO_IMAGES="2"
@@ -31,10 +31,12 @@ CONF_INSTALL='
CONF_WORLD='
CFLAGS=-O -pipe
# We do not need these for rescue
-WITHOUT_LIB32=true
WITHOUT_TESTS=true
-WITHOUT_DEBUG_FILES=t
-WITHOUT_KERNEL_SYMBOLS=t
+WITHOUT_DEBUG_FILES=true
+WITHOUT_KERNEL_SYMBOLS=true
+WITHOUT_CLANG_FULL=true
+WITH_CLANG_EXTRAS=true
+WITHOUT_LIB32=true
'
# Functions
@@ -50,14 +52,14 @@ toUpper() {
customize_cmd cust_allow_ssh_root
customize_cmd cust_install_files
-cust_ld32_cfg () (
- cd ${NANO_WORLDDIR}/libexec
- if [ \! -f ld-elf32.so.1 ]; then
- ln -s ld-elf.so.1 ld-elf32.so.1
- fi
-)
-customize_cmd cust_ld32_cfg
-
+#cust_ld32_cfg () (
+# cd ${NANO_WORLDDIR}/libexec
+# if [ \! -f ld-elf32.so.1 ]; then
+# ln -s ld-elf.so.1 ld-elf32.so.1
+# fi
+#)
+#customize_cmd cust_ld32_cfg
+#
#cust_boot_cfg () (
# cd ${NANO_WORLDDIR}
# echo "-S115200 -h" > boot.config
@@ -67,7 +69,7 @@ customize_cmd cust_ld32_cfg
#)
#customize_cmd cust_boot_cfg
-customize_cmd cust_pkgng
+#customize_cmd cust_pkgng
cust_etc_cfg () (
cd ${NANO_WORLDDIR}
diff --git a/tools/tools/net80211/w00t/Makefile.inc b/tools/tools/net80211/w00t/Makefile.inc
index 69c06542d367..fcde408757e6 100644
--- a/tools/tools/net80211/w00t/Makefile.inc
+++ b/tools/tools/net80211/w00t/Makefile.inc
@@ -1,7 +1,7 @@
W00T= ../libw00t
# NB: we get crc32 from -lz
DPADD= ${W00T}/libw00t.a
-LDFLAGS= -L${W00T}
+LDFLAGS+= -L${W00T}
LDADD= -lw00t
LIBADD+= crypto z
diff --git a/tools/tools/nvmf/nvmfd/Makefile b/tools/tools/nvmf/nvmfd/Makefile
new file mode 100644
index 000000000000..dc3dcc5e3a5c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/Makefile
@@ -0,0 +1,14 @@
+.include <src.opts.mk>
+.PATH: ${SRCTOP}/sys/libkern
+
+PACKAGE=nvme-tools
+PROG= nvmfd
+SRCS= nvmfd.c controller.c ctl.c devices.c discovery.c gsb_crc32.c io.c
+CFLAGS+= -I${SRCTOP}/lib/libnvmf
+MAN= nvmfd.8
+LIBADD+= nvmf pthread util nv
+
+.include <bsd.prog.mk>
+
+CFLAGS.ctl.c= -I${SRCTOP}/sys
+CWARNFLAGS.gsb_crc32.c= -Wno-cast-align
diff --git a/tools/tools/nvmf/nvmfd/Makefile.depend b/tools/tools/nvmf/nvmfd/Makefile.depend
new file mode 100644
index 000000000000..c4c6125c7a7c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/Makefile.depend
@@ -0,0 +1,20 @@
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libnv \
+ lib/libnvmf \
+ lib/libthr \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/tools/tools/nvmf/nvmfd/controller.c b/tools/tools/nvmf/nvmfd/controller.c
new file mode 100644
index 000000000000..e9435bce69da
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/controller.c
@@ -0,0 +1,244 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <err.h>
+#include <errno.h>
+#include <libnvmf.h>
+#include <stdlib.h>
+
+#include "internal.h"
+
+struct controller {
+ struct nvmf_qpair *qp;
+
+ uint64_t cap;
+ uint32_t vs;
+ uint32_t cc;
+ uint32_t csts;
+
+ bool shutdown;
+
+ struct nvme_controller_data cdata;
+};
+
+static bool
+update_cc(struct controller *c, uint32_t new_cc)
+{
+ uint32_t changes;
+
+ if (c->shutdown)
+ return (false);
+ if (!nvmf_validate_cc(c->qp, c->cap, c->cc, new_cc))
+ return (false);
+
+ changes = c->cc ^ new_cc;
+ c->cc = new_cc;
+
+ /* Handle shutdown requests. */
+ if (NVMEV(NVME_CC_REG_SHN, changes) != 0 &&
+ NVMEV(NVME_CC_REG_SHN, new_cc) != 0) {
+ c->csts &= ~NVMEM(NVME_CSTS_REG_SHST);
+ c->csts |= NVMEF(NVME_CSTS_REG_SHST, NVME_SHST_COMPLETE);
+ c->shutdown = true;
+ }
+
+ if (NVMEV(NVME_CC_REG_EN, changes) != 0) {
+ if (NVMEV(NVME_CC_REG_EN, new_cc) == 0) {
+ /* Controller reset. */
+ c->csts = 0;
+ c->shutdown = true;
+ } else
+ c->csts |= NVMEF(NVME_CSTS_REG_RDY, 1);
+ }
+ return (true);
+}
+
+static void
+handle_property_get(const struct controller *c, const struct nvmf_capsule *nc,
+ const struct nvmf_fabric_prop_get_cmd *pget)
+{
+ struct nvmf_fabric_prop_get_rsp rsp;
+
+ nvmf_init_cqe(&rsp, nc, 0);
+
+ switch (le32toh(pget->ofst)) {
+ case NVMF_PROP_CAP:
+ if (pget->attrib.size != NVMF_PROP_SIZE_8)
+ goto error;
+ rsp.value.u64 = htole64(c->cap);
+ break;
+ case NVMF_PROP_VS:
+ if (pget->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ rsp.value.u32.low = htole32(c->vs);
+ break;
+ case NVMF_PROP_CC:
+ if (pget->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ rsp.value.u32.low = htole32(c->cc);
+ break;
+ case NVMF_PROP_CSTS:
+ if (pget->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ rsp.value.u32.low = htole32(c->csts);
+ break;
+ default:
+ goto error;
+ }
+
+ nvmf_send_response(nc, &rsp);
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static void
+handle_property_set(struct controller *c, const struct nvmf_capsule *nc,
+ const struct nvmf_fabric_prop_set_cmd *pset)
+{
+ switch (le32toh(pset->ofst)) {
+ case NVMF_PROP_CC:
+ if (pset->attrib.size != NVMF_PROP_SIZE_4)
+ goto error;
+ if (!update_cc(c, le32toh(pset->value.u32.low)))
+ goto error;
+ break;
+ default:
+ goto error;
+ }
+
+ nvmf_send_success(nc);
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static void
+handle_fabrics_command(struct controller *c,
+ const struct nvmf_capsule *nc, const struct nvmf_fabric_cmd *fc)
+{
+ switch (fc->fctype) {
+ case NVMF_FABRIC_COMMAND_PROPERTY_GET:
+ handle_property_get(c, nc,
+ (const struct nvmf_fabric_prop_get_cmd *)fc);
+ break;
+ case NVMF_FABRIC_COMMAND_PROPERTY_SET:
+ handle_property_set(c, nc,
+ (const struct nvmf_fabric_prop_set_cmd *)fc);
+ break;
+ case NVMF_FABRIC_COMMAND_CONNECT:
+ warnx("CONNECT command on connected queue");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ break;
+ case NVMF_FABRIC_COMMAND_DISCONNECT:
+ warnx("DISCONNECT command on admin queue");
+ nvmf_send_error(nc, NVME_SCT_COMMAND_SPECIFIC,
+ NVMF_FABRIC_SC_INVALID_QUEUE_TYPE);
+ break;
+ default:
+ warnx("Unsupported fabrics command %#x", fc->fctype);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+}
+
+static void
+handle_identify_command(const struct controller *c,
+ const struct nvmf_capsule *nc, const struct nvme_command *cmd)
+{
+ uint8_t cns;
+
+ cns = le32toh(cmd->cdw10) & 0xFF;
+ switch (cns) {
+ case 1:
+ break;
+ default:
+ warnx("Unsupported CNS %#x for IDENTIFY", cns);
+ goto error;
+ }
+
+ nvmf_send_controller_data(nc, &c->cdata, sizeof(c->cdata));
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+void
+controller_handle_admin_commands(struct controller *c, handle_command *cb,
+ void *cb_arg)
+{
+ struct nvmf_qpair *qp = c->qp;
+ const struct nvme_command *cmd;
+ struct nvmf_capsule *nc;
+ int error;
+
+ for (;;) {
+ error = nvmf_controller_receive_capsule(qp, &nc);
+ if (error != 0) {
+ if (error != ECONNRESET)
+ warnc(error, "Failed to read command capsule");
+ break;
+ }
+
+ cmd = nvmf_capsule_sqe(nc);
+
+ /*
+ * Only permit Fabrics commands while a controller is
+ * disabled.
+ */
+ if (NVMEV(NVME_CC_REG_EN, c->cc) == 0 &&
+ cmd->opc != NVME_OPC_FABRICS_COMMANDS) {
+ warnx("Unsupported admin opcode %#x while disabled\n",
+ cmd->opc);
+ nvmf_send_generic_error(nc,
+ NVME_SC_COMMAND_SEQUENCE_ERROR);
+ nvmf_free_capsule(nc);
+ continue;
+ }
+
+ if (cb(nc, cmd, cb_arg)) {
+ nvmf_free_capsule(nc);
+ continue;
+ }
+
+ switch (cmd->opc) {
+ case NVME_OPC_FABRICS_COMMANDS:
+ handle_fabrics_command(c, nc,
+ (const struct nvmf_fabric_cmd *)cmd);
+ break;
+ case NVME_OPC_IDENTIFY:
+ handle_identify_command(c, nc, cmd);
+ break;
+ default:
+ warnx("Unsupported admin opcode %#x", cmd->opc);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+ nvmf_free_capsule(nc);
+ }
+}
+
+struct controller *
+init_controller(struct nvmf_qpair *qp,
+ const struct nvme_controller_data *cdata)
+{
+ struct controller *c;
+
+ c = calloc(1, sizeof(*c));
+ c->qp = qp;
+ c->cap = nvmf_controller_cap(c->qp);
+ c->vs = cdata->ver;
+ c->cdata = *cdata;
+
+ return (c);
+}
+
+void
+free_controller(struct controller *c)
+{
+ free(c);
+}
diff --git a/tools/tools/nvmf/nvmfd/ctl.c b/tools/tools/nvmf/nvmfd/ctl.c
new file mode 100644
index 000000000000..73e90e1411bd
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/ctl.c
@@ -0,0 +1,137 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/param.h>
+#include <sys/linker.h>
+#include <sys/nv.h>
+#include <sys/time.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libnvmf.h>
+#include <string.h>
+
+#include <cam/ctl/ctl.h>
+#include <cam/ctl/ctl_io.h>
+#include <cam/ctl/ctl_ioctl.h>
+
+#include "internal.h"
+
+static int ctl_fd = -1;
+static int ctl_port;
+
+static void
+open_ctl(void)
+{
+ if (ctl_fd > 0)
+ return;
+
+ ctl_fd = open(CTL_DEFAULT_DEV, O_RDWR);
+ if (ctl_fd == -1 && errno == ENOENT) {
+ if (kldload("ctl") == -1)
+ err(1, "Failed to load ctl.ko");
+ ctl_fd = open(CTL_DEFAULT_DEV, O_RDWR);
+ }
+ if (ctl_fd == -1)
+ err(1, "Failed to open %s", CTL_DEFAULT_DEV);
+}
+
+void
+init_ctl_port(const char *subnqn, const struct nvmf_association_params *params)
+{
+ char result_buf[256];
+ struct ctl_port_entry entry;
+ struct ctl_req req;
+ nvlist_t *nvl;
+
+ open_ctl();
+
+ nvl = nvlist_create(0);
+
+ nvlist_add_string(nvl, "subnqn", subnqn);
+
+ /* XXX: Hardcoded in discovery.c */
+ nvlist_add_stringf(nvl, "portid", "%u", 1);
+
+ nvlist_add_stringf(nvl, "max_io_qsize", "%u", params->max_io_qsize);
+
+ memset(&req, 0, sizeof(req));
+ strlcpy(req.driver, "nvmf", sizeof(req.driver));
+ req.reqtype = CTL_REQ_CREATE;
+ req.args = nvlist_pack(nvl, &req.args_len);
+ if (req.args == NULL)
+ errx(1, "Failed to pack nvlist for CTL_PORT/CTL_REQ_CREATE");
+ req.result = result_buf;
+ req.result_len = sizeof(result_buf);
+ if (ioctl(ctl_fd, CTL_PORT_REQ, &req) != 0)
+ err(1, "ioctl(CTL_PORT/CTL_REQ_CREATE)");
+ if (req.status == CTL_LUN_ERROR)
+ errx(1, "Failed to create CTL port: %s", req.error_str);
+ if (req.status != CTL_LUN_OK)
+ errx(1, "Failed to create CTL port: %d", req.status);
+
+ nvlist_destroy(nvl);
+ nvl = nvlist_unpack(result_buf, req.result_len, 0);
+ if (nvl == NULL)
+ errx(1, "Failed to unpack nvlist from CTL_PORT/CTL_REQ_CREATE");
+
+ ctl_port = nvlist_get_number(nvl, "port_id");
+ nvlist_destroy(nvl);
+
+ memset(&entry, 0, sizeof(entry));
+ entry.targ_port = ctl_port;
+ if (ioctl(ctl_fd, CTL_ENABLE_PORT, &entry) != 0)
+ errx(1, "ioctl(CTL_ENABLE_PORT)");
+}
+
+void
+shutdown_ctl_port(const char *subnqn)
+{
+ struct ctl_req req;
+ nvlist_t *nvl;
+
+ open_ctl();
+
+ nvl = nvlist_create(0);
+
+ nvlist_add_string(nvl, "subnqn", subnqn);
+
+ memset(&req, 0, sizeof(req));
+ strlcpy(req.driver, "nvmf", sizeof(req.driver));
+ req.reqtype = CTL_REQ_REMOVE;
+ req.args = nvlist_pack(nvl, &req.args_len);
+ if (req.args == NULL)
+ errx(1, "Failed to pack nvlist for CTL_PORT/CTL_REQ_REMOVE");
+ if (ioctl(ctl_fd, CTL_PORT_REQ, &req) != 0)
+ err(1, "ioctl(CTL_PORT/CTL_REQ_REMOVE)");
+ if (req.status == CTL_LUN_ERROR)
+ errx(1, "Failed to remove CTL port: %s", req.error_str);
+ if (req.status != CTL_LUN_OK)
+ errx(1, "Failed to remove CTL port: %d", req.status);
+
+ nvlist_destroy(nvl);
+}
+
+void
+ctl_handoff_qpair(struct nvmf_qpair *qp,
+ const struct nvmf_fabric_connect_cmd *cmd,
+ const struct nvmf_fabric_connect_data *data)
+{
+ struct ctl_nvmf req;
+ int error;
+
+ memset(&req, 0, sizeof(req));
+ req.type = CTL_NVMF_HANDOFF;
+ error = nvmf_handoff_controller_qpair(qp, cmd, data, &req.data.handoff);
+ if (error != 0) {
+ warnc(error, "Failed to prepare qpair for handoff");
+ return;
+ }
+
+ if (ioctl(ctl_fd, CTL_NVMF, &req) != 0)
+ warn("ioctl(CTL_NVMF/CTL_NVMF_HANDOFF)");
+}
diff --git a/tools/tools/nvmf/nvmfd/devices.c b/tools/tools/nvmf/nvmfd/devices.c
new file mode 100644
index 000000000000..fafc1077f207
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/devices.c
@@ -0,0 +1,386 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/disk.h>
+#include <sys/gsb_crc32.h>
+#include <sys/ioctl.h>
+#include <sys/stat.h>
+#include <net/ieee_oui.h>
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <libnvmf.h>
+#include <libutil.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+#define RAMDISK_PREFIX "ramdisk:"
+
+struct backing_device {
+ enum { RAMDISK, FILE, CDEV } type;
+ union {
+ int fd; /* FILE, CDEV */
+ void *mem; /* RAMDISK */
+ };
+ u_int sector_size;
+ uint64_t nlbas;
+ uint64_t eui64;
+};
+
+static struct backing_device *devices;
+static u_int ndevices;
+
+static uint64_t
+generate_eui64(uint32_t low)
+{
+ return (OUI_FREEBSD_NVME_LOW << 16 | low);
+}
+
+static uint32_t
+crc32(const void *buf, size_t len)
+{
+ return (calculate_crc32c(0xffffffff, buf, len) ^ 0xffffffff);
+}
+
+static void
+init_ramdisk(const char *config, struct backing_device *dev)
+{
+ static uint32_t ramdisk_idx = 1;
+ uint64_t num;
+
+ dev->type = RAMDISK;
+ dev->sector_size = 512;
+ if (expand_number(config, &num))
+ errx(1, "Invalid ramdisk specification: %s", config);
+ if ((num % dev->sector_size) != 0)
+ errx(1, "Invalid ramdisk size %ju", (uintmax_t)num);
+ dev->mem = calloc(num, 1);
+ dev->nlbas = num / dev->sector_size;
+ dev->eui64 = generate_eui64('M' << 24 | ramdisk_idx++);
+}
+
+static void
+init_filedevice(const char *config, int fd, struct stat *sb,
+ struct backing_device *dev)
+{
+ dev->type = FILE;
+ dev->fd = fd;
+ dev->sector_size = 512;
+ if ((sb->st_size % dev->sector_size) != 0)
+ errx(1, "File size is not a multiple of 512: %s", config);
+ dev->nlbas = sb->st_size / dev->sector_size;
+ dev->eui64 = generate_eui64('F' << 24 |
+ (crc32(config, strlen(config)) & 0xffffff));
+}
+
+static void
+init_chardevice(const char *config, int fd, struct backing_device *dev)
+{
+ off_t len;
+
+ dev->type = CDEV;
+ dev->fd = fd;
+ if (ioctl(fd, DIOCGSECTORSIZE, &dev->sector_size) != 0)
+ err(1, "Failed to fetch sector size for %s", config);
+ if (ioctl(fd, DIOCGMEDIASIZE, &len) != 0)
+ err(1, "Failed to fetch sector size for %s", config);
+ dev->nlbas = len / dev->sector_size;
+ dev->eui64 = generate_eui64('C' << 24 |
+ (crc32(config, strlen(config)) & 0xffffff));
+}
+
+static void
+init_device(const char *config, struct backing_device *dev)
+{
+ struct stat sb;
+ int fd;
+
+ /* Check for a RAM disk. */
+ if (strncmp(RAMDISK_PREFIX, config, strlen(RAMDISK_PREFIX)) == 0) {
+ init_ramdisk(config + strlen(RAMDISK_PREFIX), dev);
+ return;
+ }
+
+ fd = open(config, O_RDWR);
+ if (fd == -1)
+ err(1, "Failed to open %s", config);
+ if (fstat(fd, &sb) == -1)
+ err(1, "fstat");
+ switch (sb.st_mode & S_IFMT) {
+ case S_IFCHR:
+ init_chardevice(config, fd, dev);
+ break;
+ case S_IFREG:
+ init_filedevice(config, fd, &sb, dev);
+ break;
+ default:
+ errx(1, "Invalid file type for %s", config);
+ }
+}
+
+void
+register_devices(int ac, char **av)
+{
+ ndevices = ac;
+ devices = calloc(ndevices, sizeof(*devices));
+
+ for (int i = 0; i < ac; i++)
+ init_device(av[i], &devices[i]);
+}
+
+u_int
+device_count(void)
+{
+ return (ndevices);
+}
+
+static struct backing_device *
+lookup_device(uint32_t nsid)
+{
+ if (nsid == 0 || nsid > ndevices)
+ return (NULL);
+ return (&devices[nsid - 1]);
+}
+
+void
+device_active_nslist(uint32_t nsid, struct nvme_ns_list *nslist)
+{
+ u_int count;
+
+ memset(nslist, 0, sizeof(*nslist));
+ count = 0;
+ nsid++;
+ while (nsid <= ndevices) {
+ nslist->ns[count] = htole32(nsid);
+ count++;
+ if (count == nitems(nslist->ns))
+ break;
+ nsid++;
+ }
+}
+
+bool
+device_identification_descriptor(uint32_t nsid, void *buf)
+{
+ struct backing_device *dev;
+ char *p;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL)
+ return (false);
+
+ memset(buf, 0, 4096);
+
+ p = buf;
+
+ /* EUI64 */
+ *p++ = 1;
+ *p++ = 8;
+ p += 2;
+ be64enc(p, dev->eui64);
+ return (true);
+}
+
+bool
+device_namespace_data(uint32_t nsid, struct nvme_namespace_data *nsdata)
+{
+ struct backing_device *dev;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL)
+ return (false);
+
+ memset(nsdata, 0, sizeof(*nsdata));
+ nsdata->nsze = htole64(dev->nlbas);
+ nsdata->ncap = nsdata->nsze;
+ nsdata->nuse = nsdata->ncap;
+ nsdata->nlbaf = 1 - 1;
+ nsdata->flbas = NVMEF(NVME_NS_DATA_FLBAS_FORMAT, 0);
+ nsdata->lbaf[0] = NVMEF(NVME_NS_DATA_LBAF_LBADS,
+ ffs(dev->sector_size) - 1);
+
+ be64enc(nsdata->eui64, dev->eui64);
+ return (true);
+}
+
+static bool
+read_buffer(int fd, void *buf, size_t len, off_t offset)
+{
+ ssize_t nread;
+ char *dst;
+
+ dst = buf;
+ while (len > 0) {
+ nread = pread(fd, dst, len, offset);
+ if (nread == -1 && errno == EINTR)
+ continue;
+ if (nread <= 0)
+ return (false);
+ dst += nread;
+ len -= nread;
+ offset += nread;
+ }
+ return (true);
+}
+
+void
+device_read(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc)
+{
+ struct backing_device *dev;
+ char *p, *src;
+ off_t off;
+ size_t len;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return;
+ }
+
+ if (lba + nlb < lba || lba + nlb > dev->nlbas) {
+ nvmf_send_generic_error(nc, NVME_SC_LBA_OUT_OF_RANGE);
+ return;
+ }
+
+ off = lba * dev->sector_size;
+ len = nlb * dev->sector_size;
+ if (nvmf_capsule_data_len(nc) != len) {
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+ return;
+ }
+
+ if (dev->type == RAMDISK) {
+ p = NULL;
+ src = (char *)dev->mem + off;
+ } else {
+ p = malloc(len);
+ if (!read_buffer(dev->fd, p, len, off)) {
+ free(p);
+ nvmf_send_generic_error(nc,
+ NVME_SC_INTERNAL_DEVICE_ERROR);
+ return;
+ }
+ src = p;
+ }
+
+ nvmf_send_controller_data(nc, src, len);
+ free(p);
+}
+
+static bool
+write_buffer(int fd, const void *buf, size_t len, off_t offset)
+{
+ ssize_t nwritten;
+ const char *src;
+
+ src = buf;
+ while (len > 0) {
+ nwritten = pwrite(fd, src, len, offset);
+ if (nwritten == -1 && errno == EINTR)
+ continue;
+ if (nwritten <= 0)
+ return (false);
+ src += nwritten;
+ len -= nwritten;
+ offset += nwritten;
+ }
+ return (true);
+}
+
+void
+device_write(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc)
+{
+ struct backing_device *dev;
+ char *p, *dst;
+ off_t off;
+ size_t len;
+ int error;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return;
+ }
+
+ if (lba + nlb < lba || lba + nlb > dev->nlbas) {
+ nvmf_send_generic_error(nc, NVME_SC_LBA_OUT_OF_RANGE);
+ return;
+ }
+
+ off = lba * dev->sector_size;
+ len = nlb * dev->sector_size;
+ if (nvmf_capsule_data_len(nc) != len) {
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+ return;
+ }
+
+ if (dev->type == RAMDISK) {
+ p = NULL;
+ dst = (char *)dev->mem + off;
+ } else {
+ p = malloc(len);
+ dst = p;
+ }
+
+ error = nvmf_receive_controller_data(nc, 0, dst, len);
+ if (error != 0) {
+ nvmf_send_generic_error(nc, NVME_SC_TRANSIENT_TRANSPORT_ERROR);
+ free(p);
+ return;
+ }
+
+ if (dev->type != RAMDISK) {
+ if (!write_buffer(dev->fd, p, len, off)) {
+ free(p);
+ nvmf_send_generic_error(nc,
+ NVME_SC_INTERNAL_DEVICE_ERROR);
+ return;
+ }
+ }
+ free(p);
+ nvmf_send_success(nc);
+}
+
+void
+device_flush(uint32_t nsid, const struct nvmf_capsule *nc)
+{
+ struct backing_device *dev;
+
+ dev = lookup_device(nsid);
+ if (dev == NULL) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return;
+ }
+
+ switch (dev->type) {
+ case RAMDISK:
+ break;
+ case FILE:
+ if (fdatasync(dev->fd) == -1) {
+ nvmf_send_error(nc, NVME_SCT_MEDIA_ERROR,
+ NVME_SC_WRITE_FAULTS);
+ return;
+ }
+ break;
+ case CDEV:
+ if (ioctl(dev->fd, DIOCGFLUSH) == -1) {
+ nvmf_send_error(nc, NVME_SCT_MEDIA_ERROR,
+ NVME_SC_WRITE_FAULTS);
+ return;
+ }
+ }
+
+ nvmf_send_success(nc);
+}
diff --git a/tools/tools/nvmf/nvmfd/discovery.c b/tools/tools/nvmf/nvmfd/discovery.c
new file mode 100644
index 000000000000..2cfe56731d7c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/discovery.c
@@ -0,0 +1,342 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <assert.h>
+#include <err.h>
+#include <libnvmf.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+struct io_controller_data {
+ struct nvme_discovery_log_entry entry;
+ bool wildcard;
+};
+
+struct discovery_controller {
+ struct nvme_discovery_log *discovery_log;
+ size_t discovery_log_len;
+ int s;
+};
+
+struct discovery_thread_arg {
+ struct controller *c;
+ struct nvmf_qpair *qp;
+ int s;
+};
+
+static struct io_controller_data *io_controllers;
+static struct nvmf_association *discovery_na;
+static u_int num_io_controllers;
+
+static bool
+init_discovery_log_entry(struct nvme_discovery_log_entry *entry, int s,
+ const char *subnqn)
+{
+ struct sockaddr_storage ss;
+ socklen_t len;
+ bool wildcard;
+
+ len = sizeof(ss);
+ if (getsockname(s, (struct sockaddr *)&ss, &len) == -1)
+ err(1, "getsockname");
+
+ memset(entry, 0, sizeof(*entry));
+ entry->trtype = NVMF_TRTYPE_TCP;
+ switch (ss.ss_family) {
+ case AF_INET:
+ {
+ struct sockaddr_in *sin;
+
+ sin = (struct sockaddr_in *)&ss;
+ entry->adrfam = NVMF_ADRFAM_IPV4;
+ snprintf(entry->trsvcid, sizeof(entry->trsvcid), "%u",
+ htons(sin->sin_port));
+ if (inet_ntop(AF_INET, &sin->sin_addr, entry->traddr,
+ sizeof(entry->traddr)) == NULL)
+ err(1, "inet_ntop");
+ wildcard = (sin->sin_addr.s_addr == htonl(INADDR_ANY));
+ break;
+ }
+ case AF_INET6:
+ {
+ struct sockaddr_in6 *sin6;
+
+ sin6 = (struct sockaddr_in6 *)&ss;
+ entry->adrfam = NVMF_ADRFAM_IPV6;
+ snprintf(entry->trsvcid, sizeof(entry->trsvcid), "%u",
+ htons(sin6->sin6_port));
+ if (inet_ntop(AF_INET6, &sin6->sin6_addr, entry->traddr,
+ sizeof(entry->traddr)) == NULL)
+ err(1, "inet_ntop");
+ wildcard = (memcmp(&sin6->sin6_addr, &in6addr_any,
+ sizeof(in6addr_any)) == 0);
+ break;
+ }
+ default:
+ errx(1, "Unsupported address family %u", ss.ss_family);
+ }
+ entry->subtype = NVMF_SUBTYPE_NVME;
+ if (flow_control_disable)
+ entry->treq |= (1 << 2);
+ entry->portid = htole16(1);
+ entry->cntlid = htole16(NVMF_CNTLID_DYNAMIC);
+ entry->aqsz = NVME_MAX_ADMIN_ENTRIES;
+ strlcpy(entry->subnqn, subnqn, sizeof(entry->subnqn));
+ return (wildcard);
+}
+
+void
+init_discovery(void)
+{
+ struct nvmf_association_params aparams;
+
+ memset(&aparams, 0, sizeof(aparams));
+ aparams.sq_flow_control = false;
+ aparams.dynamic_controller_model = true;
+ aparams.max_admin_qsize = NVME_MAX_ADMIN_ENTRIES;
+ aparams.tcp.pda = 0;
+ aparams.tcp.header_digests = header_digests;
+ aparams.tcp.data_digests = data_digests;
+ aparams.tcp.maxh2cdata = maxh2cdata;
+ discovery_na = nvmf_allocate_association(NVMF_TRTYPE_TCP, true,
+ &aparams);
+ if (discovery_na == NULL)
+ err(1, "Failed to create discovery association");
+}
+
+void
+discovery_add_io_controller(int s, const char *subnqn)
+{
+ struct io_controller_data *icd;
+
+ io_controllers = reallocf(io_controllers, (num_io_controllers + 1) *
+ sizeof(*io_controllers));
+
+ icd = &io_controllers[num_io_controllers];
+ num_io_controllers++;
+
+ icd->wildcard = init_discovery_log_entry(&icd->entry, s, subnqn);
+}
+
+static void
+build_discovery_log_page(struct discovery_controller *dc)
+{
+ struct sockaddr_storage ss;
+ socklen_t len;
+ char traddr[256];
+ u_int i, nentries;
+ uint8_t adrfam;
+
+ if (dc->discovery_log != NULL)
+ return;
+
+ len = sizeof(ss);
+ if (getsockname(dc->s, (struct sockaddr *)&ss, &len) == -1) {
+ warn("build_discovery_log_page: getsockname");
+ return;
+ }
+
+ memset(traddr, 0, sizeof(traddr));
+ switch (ss.ss_family) {
+ case AF_INET:
+ {
+ struct sockaddr_in *sin;
+
+ sin = (struct sockaddr_in *)&ss;
+ adrfam = NVMF_ADRFAM_IPV4;
+ if (inet_ntop(AF_INET, &sin->sin_addr, traddr,
+ sizeof(traddr)) == NULL) {
+ warn("build_discovery_log_page: inet_ntop");
+ return;
+ }
+ break;
+ }
+ case AF_INET6:
+ {
+ struct sockaddr_in6 *sin6;
+
+ sin6 = (struct sockaddr_in6 *)&ss;
+ adrfam = NVMF_ADRFAM_IPV6;
+ if (inet_ntop(AF_INET6, &sin6->sin6_addr, traddr,
+ sizeof(traddr)) == NULL) {
+ warn("build_discovery_log_page: inet_ntop");
+ return;
+ }
+ break;
+ }
+ default:
+ assert(false);
+ }
+
+ nentries = 0;
+ for (i = 0; i < num_io_controllers; i++) {
+ if (io_controllers[i].wildcard &&
+ io_controllers[i].entry.adrfam != adrfam)
+ continue;
+ nentries++;
+ }
+
+ dc->discovery_log_len = sizeof(*dc->discovery_log) +
+ nentries * sizeof(struct nvme_discovery_log_entry);
+ dc->discovery_log = calloc(dc->discovery_log_len, 1);
+ dc->discovery_log->numrec = nentries;
+ dc->discovery_log->recfmt = 0;
+ nentries = 0;
+ for (i = 0; i < num_io_controllers; i++) {
+ if (io_controllers[i].wildcard &&
+ io_controllers[i].entry.adrfam != adrfam)
+ continue;
+
+ dc->discovery_log->entries[nentries] = io_controllers[i].entry;
+ if (io_controllers[i].wildcard)
+ memcpy(dc->discovery_log->entries[nentries].traddr,
+ traddr, sizeof(traddr));
+ }
+}
+
+static void
+handle_get_log_page_command(const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd, struct discovery_controller *dc)
+{
+ uint64_t offset;
+ uint32_t length;
+
+ switch (nvmf_get_log_page_id(cmd)) {
+ case NVME_LOG_DISCOVERY:
+ break;
+ default:
+ warnx("Unsupported log page %u for discovery controller",
+ nvmf_get_log_page_id(cmd));
+ goto error;
+ }
+
+ build_discovery_log_page(dc);
+
+ offset = nvmf_get_log_page_offset(cmd);
+ if (offset >= dc->discovery_log_len)
+ goto error;
+
+ length = nvmf_get_log_page_length(cmd);
+ if (length > dc->discovery_log_len - offset)
+ length = dc->discovery_log_len - offset;
+
+ nvmf_send_controller_data(nc, (char *)dc->discovery_log + offset,
+ length);
+ return;
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static bool
+discovery_command(const struct nvmf_capsule *nc, const struct nvme_command *cmd,
+ void *arg)
+{
+ struct discovery_controller *dc = arg;
+
+ switch (cmd->opc) {
+ case NVME_OPC_GET_LOG_PAGE:
+ handle_get_log_page_command(nc, cmd, dc);
+ return (true);
+ default:
+ return (false);
+ }
+}
+
+static void *
+discovery_thread(void *arg)
+{
+ struct discovery_thread_arg *dta = arg;
+ struct discovery_controller dc;
+
+ pthread_detach(pthread_self());
+
+ memset(&dc, 0, sizeof(dc));
+ dc.s = dta->s;
+
+ controller_handle_admin_commands(dta->c, discovery_command, &dc);
+
+ free(dc.discovery_log);
+ free_controller(dta->c);
+
+ nvmf_free_qpair(dta->qp);
+
+ close(dta->s);
+ free(dta);
+ return (NULL);
+}
+
+void
+handle_discovery_socket(int s)
+{
+ struct nvmf_fabric_connect_data data;
+ struct nvme_controller_data cdata;
+ struct nvmf_qpair_params qparams;
+ struct discovery_thread_arg *dta;
+ struct nvmf_capsule *nc;
+ struct nvmf_qpair *qp;
+ pthread_t thr;
+ int error;
+
+ memset(&qparams, 0, sizeof(qparams));
+ qparams.tcp.fd = s;
+
+ nc = NULL;
+ qp = nvmf_accept(discovery_na, &qparams, &nc, &data);
+ if (qp == NULL) {
+ warnx("Failed to create discovery qpair: %s",
+ nvmf_association_error(discovery_na));
+ goto error;
+ }
+
+ if (strcmp(data.subnqn, NVMF_DISCOVERY_NQN) != 0) {
+ warn("Discovery qpair with invalid SubNQN: %.*s",
+ (int)sizeof(data.subnqn), data.subnqn);
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, subnqn));
+ goto error;
+ }
+
+ /* Just use a controller ID of 1 for all discovery controllers. */
+ error = nvmf_finish_accept(nc, 1);
+ if (error != 0) {
+ warnc(error, "Failed to send CONNECT reponse");
+ goto error;
+ }
+
+ nvmf_init_discovery_controller_data(qp, &cdata);
+
+ dta = malloc(sizeof(*dta));
+ dta->qp = qp;
+ dta->s = s;
+ dta->c = init_controller(qp, &cdata);
+
+ error = pthread_create(&thr, NULL, discovery_thread, dta);
+ if (error != 0) {
+ warnc(error, "Failed to create discovery thread");
+ free_controller(dta->c);
+ free(dta);
+ goto error;
+ }
+
+ nvmf_free_capsule(nc);
+ return;
+
+error:
+ if (nc != NULL)
+ nvmf_free_capsule(nc);
+ if (qp != NULL)
+ nvmf_free_qpair(qp);
+ close(s);
+}
diff --git a/tools/tools/nvmf/nvmfd/internal.h b/tools/tools/nvmf/nvmfd/internal.h
new file mode 100644
index 000000000000..f70dc78881c6
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/internal.h
@@ -0,0 +1,66 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#ifndef __INTERNAL_H__
+#define __INTERNAL_H__
+
+#include <stdbool.h>
+
+struct controller;
+struct nvme_command;
+struct nvme_controller_data;
+struct nvme_ns_list;
+struct nvmf_capsule;
+struct nvmf_qpair;
+
+typedef bool handle_command(const struct nvmf_capsule *,
+ const struct nvme_command *, void *);
+
+extern bool data_digests;
+extern bool header_digests;
+extern bool flow_control_disable;
+extern bool kernel_io;
+extern uint32_t maxh2cdata;
+
+/* controller.c */
+void controller_handle_admin_commands(struct controller *c,
+ handle_command *cb, void *cb_arg);
+struct controller *init_controller(struct nvmf_qpair *qp,
+ const struct nvme_controller_data *cdata);
+void free_controller(struct controller *c);
+
+/* discovery.c */
+void init_discovery(void);
+void handle_discovery_socket(int s);
+void discovery_add_io_controller(int s, const char *subnqn);
+
+/* io.c */
+void init_io(const char *subnqn);
+void handle_io_socket(int s);
+void shutdown_io(void);
+
+/* devices.c */
+void register_devices(int ac, char **av);
+u_int device_count(void);
+void device_active_nslist(uint32_t nsid, struct nvme_ns_list *nslist);
+bool device_identification_descriptor(uint32_t nsid, void *buf);
+bool device_namespace_data(uint32_t nsid, struct nvme_namespace_data *nsdata);
+void device_read(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc);
+void device_write(uint32_t nsid, uint64_t lba, u_int nlb,
+ const struct nvmf_capsule *nc);
+void device_flush(uint32_t nsid, const struct nvmf_capsule *nc);
+
+/* ctl.c */
+void init_ctl_port(const char *subnqn,
+ const struct nvmf_association_params *params);
+void ctl_handoff_qpair(struct nvmf_qpair *qp,
+ const struct nvmf_fabric_connect_cmd *cmd,
+ const struct nvmf_fabric_connect_data *data);
+void shutdown_ctl_port(const char *subnqn);
+
+#endif /* !__INTERNAL_H__ */
diff --git a/tools/tools/nvmf/nvmfd/io.c b/tools/tools/nvmf/nvmfd/io.c
new file mode 100644
index 000000000000..4407360257a2
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/io.c
@@ -0,0 +1,676 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/sysctl.h>
+#include <err.h>
+#include <errno.h>
+#include <libnvmf.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+struct io_controller {
+ struct controller *c;
+
+ u_int num_io_queues;
+ u_int active_io_queues;
+ struct nvmf_qpair **io_qpairs;
+ int *io_sockets;
+
+ struct nvme_firmware_page fp;
+ struct nvme_health_information_page hip;
+ uint16_t partial_dur;
+ uint16_t partial_duw;
+
+ uint16_t cntlid;
+ char hostid[16];
+ char hostnqn[NVME_NQN_FIELD_SIZE];
+};
+
+static struct nvmf_association *io_na;
+static pthread_cond_t io_cond;
+static pthread_mutex_t io_na_mutex;
+static struct io_controller *io_controller;
+static const char *nqn;
+static char serial[NVME_SERIAL_NUMBER_LENGTH];
+
+void
+init_io(const char *subnqn)
+{
+ struct nvmf_association_params aparams;
+ u_long hostid;
+ size_t len;
+
+ memset(&aparams, 0, sizeof(aparams));
+ aparams.sq_flow_control = !flow_control_disable;
+ aparams.dynamic_controller_model = true;
+ aparams.max_admin_qsize = NVME_MAX_ADMIN_ENTRIES;
+ aparams.max_io_qsize = NVMF_MAX_IO_ENTRIES;
+ aparams.tcp.pda = 0;
+ aparams.tcp.header_digests = header_digests;
+ aparams.tcp.data_digests = data_digests;
+ aparams.tcp.maxh2cdata = maxh2cdata;
+ io_na = nvmf_allocate_association(NVMF_TRTYPE_TCP, true,
+ &aparams);
+ if (io_na == NULL)
+ err(1, "Failed to create I/O controller association");
+
+ nqn = subnqn;
+
+ /* Generate a serial number from the kern.hostid node. */
+ len = sizeof(hostid);
+ if (sysctlbyname("kern.hostid", &hostid, &len, NULL, 0) == -1)
+ err(1, "sysctl: kern.hostid");
+
+ nvmf_controller_serial(serial, sizeof(serial), hostid);
+
+ pthread_cond_init(&io_cond, NULL);
+ pthread_mutex_init(&io_na_mutex, NULL);
+
+ if (kernel_io)
+ init_ctl_port(subnqn, &aparams);
+}
+
+void
+shutdown_io(void)
+{
+ if (kernel_io)
+ shutdown_ctl_port(nqn);
+}
+
+static void
+handle_get_log_page(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ uint64_t offset;
+ uint32_t numd;
+ size_t len;
+ uint8_t lid;
+
+ lid = le32toh(cmd->cdw10) & 0xff;
+ numd = le32toh(cmd->cdw10) >> 16 | le32toh(cmd->cdw11) << 16;
+ offset = le32toh(cmd->cdw12) | (uint64_t)le32toh(cmd->cdw13) << 32;
+
+ if (offset % 3 != 0)
+ goto error;
+
+ len = (numd + 1) * 4;
+
+ switch (lid) {
+ case NVME_LOG_ERROR:
+ {
+ void *buf;
+
+ if (len % sizeof(struct nvme_error_information_entry) != 0)
+ goto error;
+
+ buf = calloc(1, len);
+ nvmf_send_controller_data(nc, buf, len);
+ free(buf);
+ return;
+ }
+ case NVME_LOG_HEALTH_INFORMATION:
+ if (len != sizeof(ioc->hip))
+ goto error;
+
+ nvmf_send_controller_data(nc, &ioc->hip, sizeof(ioc->hip));
+ return;
+ case NVME_LOG_FIRMWARE_SLOT:
+ if (len != sizeof(ioc->fp))
+ goto error;
+
+ nvmf_send_controller_data(nc, &ioc->fp, sizeof(ioc->fp));
+ return;
+ default:
+ warnx("Unsupported page %#x for GET_LOG_PAGE\n", lid);
+ goto error;
+ }
+
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static bool
+handle_io_identify_command(const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ struct nvme_namespace_data nsdata;
+ struct nvme_ns_list nslist;
+ uint32_t nsid;
+ uint8_t cns;
+
+ cns = le32toh(cmd->cdw10) & 0xFF;
+ switch (cns) {
+ case 0: /* Namespace data. */
+ if (!device_namespace_data(le32toh(cmd->nsid), &nsdata)) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return (true);
+ }
+
+ nvmf_send_controller_data(nc, &nsdata, sizeof(nsdata));
+ return (true);
+ case 2: /* Active namespace list. */
+ nsid = le32toh(cmd->nsid);
+ if (nsid >= 0xfffffffe) {
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+ return (true);
+ }
+
+ device_active_nslist(nsid, &nslist);
+ nvmf_send_controller_data(nc, &nslist, sizeof(nslist));
+ return (true);
+ case 3: /* Namespace Identification Descriptor list. */
+ if (!device_identification_descriptor(le32toh(cmd->nsid),
+ &nsdata)) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ return (true);
+ }
+
+ nvmf_send_controller_data(nc, &nsdata, sizeof(nsdata));
+ return (true);
+ default:
+ return (false);
+ }
+}
+
+static void
+handle_set_features(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ struct nvme_completion cqe;
+ uint8_t fid;
+
+ fid = NVMEV(NVME_FEAT_SET_FID, le32toh(cmd->cdw10));
+ switch (fid) {
+ case NVME_FEAT_NUMBER_OF_QUEUES:
+ {
+ uint32_t num_queues;
+
+ if (ioc->num_io_queues != 0) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_COMMAND_SEQUENCE_ERROR);
+ return;
+ }
+
+ num_queues = le32toh(cmd->cdw11) & 0xffff;
+
+ /* 5.12.1.7: 65535 is invalid. */
+ if (num_queues == 65535)
+ goto error;
+
+ /* Fabrics requires the same number of SQs and CQs. */
+ if (le32toh(cmd->cdw11) >> 16 != num_queues)
+ goto error;
+
+ /* Convert to 1's based */
+ num_queues++;
+
+ /* Lock to synchronize with handle_io_qpair. */
+ pthread_mutex_lock(&io_na_mutex);
+ ioc->num_io_queues = num_queues;
+ ioc->io_qpairs = calloc(num_queues, sizeof(*ioc->io_qpairs));
+ ioc->io_sockets = calloc(num_queues, sizeof(*ioc->io_sockets));
+ pthread_mutex_unlock(&io_na_mutex);
+
+ nvmf_init_cqe(&cqe, nc, 0);
+ cqe.cdw0 = cmd->cdw11;
+ nvmf_send_response(nc, &cqe);
+ return;
+ }
+ case NVME_FEAT_ASYNC_EVENT_CONFIGURATION:
+ {
+ uint32_t aer_mask;
+
+ aer_mask = le32toh(cmd->cdw11);
+
+ /* Check for any reserved or unimplemented feature bits. */
+ if ((aer_mask & 0xffffc000) != 0)
+ goto error;
+
+ /* No AERs are generated by this daemon. */
+ nvmf_send_success(nc);
+ return;
+ }
+ default:
+ warnx("Unsupported feature ID %u for SET_FEATURES", fid);
+ goto error;
+ }
+
+error:
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_FIELD);
+}
+
+static bool
+admin_command(const struct nvmf_capsule *nc, const struct nvme_command *cmd,
+ void *arg)
+{
+ struct io_controller *ioc = arg;
+
+ switch (cmd->opc) {
+ case NVME_OPC_GET_LOG_PAGE:
+ handle_get_log_page(ioc, nc, cmd);
+ return (true);
+ case NVME_OPC_IDENTIFY:
+ return (handle_io_identify_command(nc, cmd));
+ case NVME_OPC_SET_FEATURES:
+ handle_set_features(ioc, nc, cmd);
+ return (true);
+ case NVME_OPC_ASYNC_EVENT_REQUEST:
+ /* Ignore and never complete. */
+ return (true);
+ case NVME_OPC_KEEP_ALIVE:
+ nvmf_send_success(nc);
+ return (true);
+ default:
+ return (false);
+ }
+}
+
+static void
+handle_admin_qpair(struct io_controller *ioc)
+{
+ pthread_setname_np(pthread_self(), "admin queue");
+
+ controller_handle_admin_commands(ioc->c, admin_command, ioc);
+
+ pthread_mutex_lock(&io_na_mutex);
+ for (u_int i = 0; i < ioc->num_io_queues; i++) {
+ if (ioc->io_qpairs[i] == NULL || ioc->io_sockets[i] == -1)
+ continue;
+ close(ioc->io_sockets[i]);
+ ioc->io_sockets[i] = -1;
+ }
+
+ /* Wait for I/O threads to notice. */
+ while (ioc->active_io_queues > 0)
+ pthread_cond_wait(&io_cond, &io_na_mutex);
+
+ io_controller = NULL;
+ pthread_mutex_unlock(&io_na_mutex);
+
+ free_controller(ioc->c);
+
+ free(ioc);
+}
+
+static bool
+handle_io_fabrics_command(const struct nvmf_capsule *nc,
+ const struct nvmf_fabric_cmd *fc)
+{
+ switch (fc->fctype) {
+ case NVMF_FABRIC_COMMAND_CONNECT:
+ warnx("CONNECT command on connected queue");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ break;
+ case NVMF_FABRIC_COMMAND_DISCONNECT:
+ {
+ const struct nvmf_fabric_disconnect_cmd *dis =
+ (const struct nvmf_fabric_disconnect_cmd *)fc;
+ if (dis->recfmt != htole16(0)) {
+ nvmf_send_error(nc, NVME_SCT_COMMAND_SPECIFIC,
+ NVMF_FABRIC_SC_INCOMPATIBLE_FORMAT);
+ break;
+ }
+ nvmf_send_success(nc);
+ return (true);
+ }
+ default:
+ warnx("Unsupported fabrics command %#x", fc->fctype);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+
+ return (false);
+}
+
+static void
+hip_add(uint64_t pair[2], uint64_t addend)
+{
+ uint64_t old, new;
+
+ old = le64toh(pair[0]);
+ new = old + addend;
+ pair[0] = htole64(new);
+ if (new < old)
+ pair[1] += htole64(1);
+}
+
+static uint64_t
+cmd_lba(const struct nvme_command *cmd)
+{
+ return ((uint64_t)le32toh(cmd->cdw11) << 32 | le32toh(cmd->cdw10));
+}
+
+static u_int
+cmd_nlb(const struct nvme_command *cmd)
+{
+ return ((le32toh(cmd->cdw12) & 0xffff) + 1);
+}
+
+static void
+handle_read(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ size_t len;
+
+ len = nvmf_capsule_data_len(nc);
+ device_read(le32toh(cmd->nsid), cmd_lba(cmd), cmd_nlb(cmd), nc);
+ hip_add(ioc->hip.host_read_commands, 1);
+
+ len /= 512;
+ len += ioc->partial_dur;
+ if (len > 1000)
+ hip_add(ioc->hip.data_units_read, len / 1000);
+ ioc->partial_dur = len % 1000;
+}
+
+static void
+handle_write(struct io_controller *ioc, const struct nvmf_capsule *nc,
+ const struct nvme_command *cmd)
+{
+ size_t len;
+
+ len = nvmf_capsule_data_len(nc);
+ device_write(le32toh(cmd->nsid), cmd_lba(cmd), cmd_nlb(cmd), nc);
+ hip_add(ioc->hip.host_write_commands, 1);
+
+ len /= 512;
+ len += ioc->partial_duw;
+ if (len > 1000)
+ hip_add(ioc->hip.data_units_written, len / 1000);
+ ioc->partial_duw = len % 1000;
+}
+
+static void
+handle_flush(const struct nvmf_capsule *nc, const struct nvme_command *cmd)
+{
+ device_flush(le32toh(cmd->nsid), nc);
+}
+
+static bool
+handle_io_commands(struct io_controller *ioc, struct nvmf_qpair *qp)
+{
+ const struct nvme_command *cmd;
+ struct nvmf_capsule *nc;
+ int error;
+ bool disconnect;
+
+ disconnect = false;
+
+ while (!disconnect) {
+ error = nvmf_controller_receive_capsule(qp, &nc);
+ if (error != 0) {
+ if (error != ECONNRESET)
+ warnc(error, "Failed to read command capsule");
+ break;
+ }
+
+ cmd = nvmf_capsule_sqe(nc);
+
+ switch (cmd->opc) {
+ case NVME_OPC_FLUSH:
+ if (cmd->nsid == htole32(0xffffffff)) {
+ nvmf_send_generic_error(nc,
+ NVME_SC_INVALID_NAMESPACE_OR_FORMAT);
+ break;
+ }
+ handle_flush(nc, cmd);
+ break;
+ case NVME_OPC_WRITE:
+ handle_write(ioc, nc, cmd);
+ break;
+ case NVME_OPC_READ:
+ handle_read(ioc, nc, cmd);
+ break;
+ case NVME_OPC_FABRICS_COMMANDS:
+ disconnect = handle_io_fabrics_command(nc,
+ (const struct nvmf_fabric_cmd *)cmd);
+ break;
+ default:
+ warnx("Unsupported NVM opcode %#x", cmd->opc);
+ nvmf_send_generic_error(nc, NVME_SC_INVALID_OPCODE);
+ break;
+ }
+ nvmf_free_capsule(nc);
+ }
+
+ return (disconnect);
+}
+
+static void
+handle_io_qpair(struct io_controller *ioc, struct nvmf_qpair *qp, int qid)
+{
+ char name[64];
+ bool disconnect;
+
+ snprintf(name, sizeof(name), "I/O queue %d", qid);
+ pthread_setname_np(pthread_self(), name);
+
+ disconnect = handle_io_commands(ioc, qp);
+
+ pthread_mutex_lock(&io_na_mutex);
+ if (disconnect)
+ ioc->io_qpairs[qid - 1] = NULL;
+ if (ioc->io_sockets[qid - 1] != -1) {
+ close(ioc->io_sockets[qid - 1]);
+ ioc->io_sockets[qid - 1] = -1;
+ }
+ ioc->active_io_queues--;
+ if (ioc->active_io_queues == 0)
+ pthread_cond_broadcast(&io_cond);
+ pthread_mutex_unlock(&io_na_mutex);
+}
+
+static void
+connect_admin_qpair(int s, struct nvmf_qpair *qp, struct nvmf_capsule *nc,
+ const struct nvmf_fabric_connect_data *data)
+{
+ struct nvme_controller_data cdata;
+ struct io_controller *ioc;
+ int error;
+
+ /* Can only have one active I/O controller at a time. */
+ pthread_mutex_lock(&io_na_mutex);
+ if (io_controller != NULL) {
+ pthread_mutex_unlock(&io_na_mutex);
+ nvmf_send_error(nc, NVME_SCT_COMMAND_SPECIFIC,
+ NVMF_FABRIC_SC_CONTROLLER_BUSY);
+ goto error;
+ }
+
+ error = nvmf_finish_accept(nc, 2);
+ if (error != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnc(error, "Failed to send CONNECT response");
+ goto error;
+ }
+
+ ioc = calloc(1, sizeof(*ioc));
+ ioc->cntlid = 2;
+ memcpy(ioc->hostid, data->hostid, sizeof(ioc->hostid));
+ memcpy(ioc->hostnqn, data->hostnqn, sizeof(ioc->hostnqn));
+
+ nvmf_init_io_controller_data(qp, serial, nqn, device_count(),
+ NVMF_IOCCSZ, &cdata);
+
+ ioc->fp.afi = NVMEF(NVME_FIRMWARE_PAGE_AFI_SLOT, 1);
+ memcpy(ioc->fp.revision[0], cdata.fr, sizeof(cdata.fr));
+
+ ioc->hip.power_cycles[0] = 1;
+
+ ioc->c = init_controller(qp, &cdata);
+
+ io_controller = ioc;
+ pthread_mutex_unlock(&io_na_mutex);
+
+ nvmf_free_capsule(nc);
+
+ handle_admin_qpair(ioc);
+ close(s);
+ return;
+
+error:
+ nvmf_free_capsule(nc);
+ close(s);
+}
+
+static void
+connect_io_qpair(int s, struct nvmf_qpair *qp, struct nvmf_capsule *nc,
+ const struct nvmf_fabric_connect_data *data, uint16_t qid)
+{
+ struct io_controller *ioc;
+ int error;
+
+ pthread_mutex_lock(&io_na_mutex);
+ if (io_controller == NULL) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to create I/O qpair without admin qpair");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ goto error;
+ }
+
+ if (memcmp(io_controller->hostid, data->hostid,
+ sizeof(data->hostid)) != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("hostid mismatch for I/O qpair CONNECT");
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, hostid));
+ goto error;
+ }
+ if (le16toh(data->cntlid) != io_controller->cntlid) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("cntlid mismatch for I/O qpair CONNECT");
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, cntlid));
+ goto error;
+ }
+ if (memcmp(io_controller->hostnqn, data->hostnqn,
+ sizeof(data->hostid)) != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("host NQN mismatch for I/O qpair CONNECT");
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, hostnqn));
+ goto error;
+ }
+
+ if (io_controller->num_io_queues == 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to create I/O qpair without enabled queues");
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ goto error;
+ }
+ if (qid > io_controller->num_io_queues) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to create invalid I/O qpair %u", qid);
+ nvmf_connect_invalid_parameters(nc, false,
+ offsetof(struct nvmf_fabric_connect_cmd, qid));
+ goto error;
+ }
+ if (io_controller->io_qpairs[qid - 1] != NULL) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnx("Attempt to re-create I/O qpair %u", qid);
+ nvmf_send_generic_error(nc, NVME_SC_COMMAND_SEQUENCE_ERROR);
+ goto error;
+ }
+
+ error = nvmf_finish_accept(nc, io_controller->cntlid);
+ if (error != 0) {
+ pthread_mutex_unlock(&io_na_mutex);
+ warnc(error, "Failed to send CONNECT response");
+ goto error;
+ }
+
+ ioc = io_controller;
+ ioc->active_io_queues++;
+ ioc->io_qpairs[qid - 1] = qp;
+ ioc->io_sockets[qid - 1] = s;
+ pthread_mutex_unlock(&io_na_mutex);
+
+ nvmf_free_capsule(nc);
+
+ handle_io_qpair(ioc, qp, qid);
+ return;
+
+error:
+ nvmf_free_capsule(nc);
+ close(s);
+}
+
+static void *
+io_socket_thread(void *arg)
+{
+ struct nvmf_fabric_connect_data data;
+ struct nvmf_qpair_params qparams;
+ const struct nvmf_fabric_connect_cmd *cmd;
+ struct nvmf_capsule *nc;
+ struct nvmf_qpair *qp;
+ int s;
+
+ pthread_detach(pthread_self());
+
+ s = (intptr_t)arg;
+ memset(&qparams, 0, sizeof(qparams));
+ qparams.tcp.fd = s;
+
+ nc = NULL;
+ qp = nvmf_accept(io_na, &qparams, &nc, &data);
+ if (qp == NULL) {
+ warnx("Failed to create I/O qpair: %s",
+ nvmf_association_error(io_na));
+ goto error;
+ }
+
+ if (kernel_io) {
+ ctl_handoff_qpair(qp, nvmf_capsule_sqe(nc), &data);
+ goto error;
+ }
+
+ if (strcmp(data.subnqn, nqn) != 0) {
+ warn("I/O qpair with invalid SubNQN: %.*s",
+ (int)sizeof(data.subnqn), data.subnqn);
+ nvmf_connect_invalid_parameters(nc, true,
+ offsetof(struct nvmf_fabric_connect_data, subnqn));
+ goto error;
+ }
+
+ /* Is this an admin or I/O queue pair? */
+ cmd = nvmf_capsule_sqe(nc);
+ if (cmd->qid == 0)
+ connect_admin_qpair(s, qp, nc, &data);
+ else
+ connect_io_qpair(s, qp, nc, &data, le16toh(cmd->qid));
+ nvmf_free_qpair(qp);
+ return (NULL);
+
+error:
+ if (nc != NULL)
+ nvmf_free_capsule(nc);
+ if (qp != NULL)
+ nvmf_free_qpair(qp);
+ close(s);
+ return (NULL);
+}
+
+void
+handle_io_socket(int s)
+{
+ pthread_t thr;
+ int error;
+
+ error = pthread_create(&thr, NULL, io_socket_thread,
+ (void *)(uintptr_t)s);
+ if (error != 0) {
+ warnc(error, "Failed to create I/O qpair thread");
+ close(s);
+ }
+}
diff --git a/tools/tools/nvmf/nvmfd/nvmfd.8 b/tools/tools/nvmf/nvmfd/nvmfd.8
new file mode 100644
index 000000000000..1076583c417c
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/nvmfd.8
@@ -0,0 +1,131 @@
+.\"
+.\" SPDX-License-Identifier: BSD-2-Clause
+.\"
+.\" Copyright (c) 2024 Chelsio Communications, Inc.
+.\"
+.Dd July 25, 2024
+.Dt NVMFD 8
+.Os
+.Sh NAME
+.Nm nvmfd
+.Nd "NVMeoF controller daemon"
+.Sh SYNOPSIS
+.Nm
+.Fl K
+.Op Fl dFGg
+.Op Fl H Ar MAXH2CDATA
+.Op Fl P Ar port
+.Op Fl p Ar port
+.Op Fl t Ar transport
+.Op Fl n Ar subnqn
+.Nm
+.Op Fl dFGg
+.Op Fl H Ar MAXH2CDATA
+.Op Fl P Ar port
+.Op Fl p Ar port
+.Op Fl t Ar transport
+.Op Fl n Ar subnqn
+.Ar device
+.Op Ar device ...
+.Sh DESCRIPTION
+.Nm
+accepts incoming NVMeoF connections for both I/O and discovery controllers.
+.Nm
+can either implement a single dynamic I/O controller in user mode or hand
+off incoming I/O controller connections to
+.Xr nvmft 4 .
+A dynamic discovery controller service is always provided in user mode.
+.Pp
+The following options are available:
+.Bl -tag -width "-t transport"
+.It Fl F
+Permit remote hosts to disable SQ flow control.
+.It Fl G
+Permit remote hosts to enable PDU data digests for the TCP transport.
+.It Fl g
+Permit remote hosts to enable PDU header digests for the TCP transport.
+.It Fl H
+Set the MAXH2CDATA value advertised to the remote host for the TCP transport.
+This value is in bytes and determines the maximum data payload size for
+data PDUs sent by the remote host.
+The value must be at least 4096 and defaults to 256KiB.
+.It Fl K
+Enable kernel mode which hands off incoming I/O controller connections to
+.Xr nvmft 4 .
+.It Fl P Ar port
+Use
+.Ar port
+as the listen TCP port for the discovery controller service.
+The default value is 8009.
+.It Fl d
+Enable debug mode.
+The daemon sends any errors to standard output and does not place
+itself in the background.
+.It Fl p Ar port
+Use
+.Ar port
+as the listen TCP port for the I/O controller service.
+By default an unused ephemeral port will be chosen.
+.It Fl n Ar subnqn
+The Subsystem NVMe Qualified Name for the I/O controller.
+If an explicit NQN is not given, a default value is generated from the
+current host's UUID obtained from the
+.Vt kern.hostuuid
+sysctl.
+.It Fl t Ar transport
+The transport type to use.
+The default transport is
+.Dq tcp .
+.It Ar device
+When implementing a user mode I/O controller,
+one or more
+.Ar device
+arguments must be specified.
+Each
+.Ar device
+describes the backing store for a namespace exported to remote hosts.
+Devices can be specified using one of the following syntaxes:
+.Bl -tag -width "ramdisk:size"
+.It Pa pathname
+File or disk device
+.It ramdisk : Ns Ar size
+Allocate a memory disk with the given
+.Ar size .
+.Ar size
+may use any of the suffixes supported by
+.Xr expand_number 3 .
+.El
+.El
+.Sh FILES
+.Bl -tag -width "/var/run/nvmfd.pid" -compact
+.It Pa /var/run/nvmfd.pid
+The default location of the
+.Nm
+PID file.
+.El
+.Sh EXIT STATUS
+.Ex -std
+.Sh SEE ALSO
+.Xr ctl 4 ,
+.Xr nvmft 4 ,
+.Xr ctladm 8 ,
+.Xr ctld 8
+.Sh HISTORY
+The
+.Nm
+module first appeared in
+.Fx 15.0 .
+.Sh AUTHORS
+The
+.Nm
+subsystem was developed by
+.An John Baldwin Aq Mt jhb@FreeBSD.org
+under sponsorship from Chelsio Communications, Inc.
+.Sh BUGS
+The discovery controller and kernel mode functionality of
+.Nm
+should be merged into
+.Xr ctld 8 .
+.Pp
+Additional parameters such as
+queue sizes should be configurable.
diff --git a/tools/tools/nvmf/nvmfd/nvmfd.c b/tools/tools/nvmf/nvmfd/nvmfd.c
new file mode 100644
index 000000000000..df6f400b40e5
--- /dev/null
+++ b/tools/tools/nvmf/nvmfd/nvmfd.c
@@ -0,0 +1,271 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause
+ *
+ * Copyright (c) 2023-2024 Chelsio Communications, Inc.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ */
+
+#include <sys/param.h>
+#include <sys/event.h>
+#include <sys/linker.h>
+#include <sys/module.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <assert.h>
+#include <err.h>
+#include <errno.h>
+#include <libnvmf.h>
+#include <libutil.h>
+#include <netdb.h>
+#include <signal.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "internal.h"
+
+bool data_digests = false;
+bool header_digests = false;
+bool flow_control_disable = false;
+bool kernel_io = false;
+uint32_t maxh2cdata = 256 * 1024;
+
+static const char *subnqn;
+static volatile bool quit = false;
+
+static void
+usage(void)
+{
+ fprintf(stderr, "nvmfd -K [-dFGg] [-H MAXH2CDATA] [-P port] [-p port] [-t transport] [-n subnqn]\n"
+ "nvmfd [-dFGg] [-H MAXH2CDATA] [-P port] [-p port] [-t transport] [-n subnqn]\n"
+ "\tdevice [device [...]]\n"
+ "\n"
+ "Devices use one of the following syntaxes:\n"
+ "\tpathame - file or disk device\n"
+ "\tramdisk:size - memory disk of given size\n");
+ exit(1);
+}
+
+static void
+handle_sig(int sig __unused)
+{
+ quit = true;
+}
+
+static void
+register_listen_socket(int kqfd, int s, void *udata)
+{
+ struct kevent kev;
+
+ if (listen(s, -1) != 0)
+ err(1, "listen");
+
+ EV_SET(&kev, s, EVFILT_READ, EV_ADD, 0, 0, udata);
+ if (kevent(kqfd, &kev, 1, NULL, 0, NULL) == -1)
+ err(1, "kevent: failed to add listen socket");
+}
+
+static void
+create_passive_sockets(int kqfd, const char *port, bool discovery)
+{
+ struct addrinfo hints, *ai, *list;
+ bool created;
+ int error, s;
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_PASSIVE;
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_protocol = IPPROTO_TCP;
+ error = getaddrinfo(NULL, port, &hints, &list);
+ if (error != 0)
+ errx(1, "%s", gai_strerror(error));
+ created = false;
+
+ for (ai = list; ai != NULL; ai = ai->ai_next) {
+ s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
+ if (s == -1)
+ continue;
+
+ if (bind(s, ai->ai_addr, ai->ai_addrlen) != 0) {
+ close(s);
+ continue;
+ }
+
+ if (discovery) {
+ register_listen_socket(kqfd, s, (void *)1);
+ } else {
+ register_listen_socket(kqfd, s, (void *)2);
+ discovery_add_io_controller(s, subnqn);
+ }
+ created = true;
+ }
+
+ freeaddrinfo(list);
+ if (!created)
+ err(1, "Failed to create any listen sockets");
+}
+
+static void
+handle_connections(int kqfd)
+{
+ struct kevent ev;
+ int s;
+
+ signal(SIGHUP, handle_sig);
+ signal(SIGINT, handle_sig);
+ signal(SIGQUIT, handle_sig);
+ signal(SIGTERM, handle_sig);
+
+ while (!quit) {
+ if (kevent(kqfd, NULL, 0, &ev, 1, NULL) == -1) {
+ if (errno == EINTR)
+ continue;
+ err(1, "kevent");
+ }
+
+ assert(ev.filter == EVFILT_READ);
+
+ s = accept(ev.ident, NULL, NULL);
+ if (s == -1) {
+ warn("accept");
+ continue;
+ }
+
+ switch ((uintptr_t)ev.udata) {
+ case 1:
+ handle_discovery_socket(s);
+ break;
+ case 2:
+ handle_io_socket(s);
+ break;
+ default:
+ __builtin_unreachable();
+ }
+ }
+}
+
+int
+main(int ac, char **av)
+{
+ struct pidfh *pfh;
+ const char *dport, *ioport, *transport;
+ pid_t pid;
+ uint64_t value;
+ int ch, error, kqfd;
+ bool daemonize;
+ static char nqn[NVMF_NQN_MAX_LEN];
+
+ /* 7.4.9.3 Default port for discovery */
+ dport = "8009";
+
+ pfh = NULL;
+ daemonize = true;
+ ioport = "0";
+ subnqn = NULL;
+ transport = "tcp";
+ while ((ch = getopt(ac, av, "dFgGH:Kn:P:p:t:")) != -1) {
+ switch (ch) {
+ case 'd':
+ daemonize = false;
+ break;
+ case 'F':
+ flow_control_disable = true;
+ break;
+ case 'G':
+ data_digests = true;
+ break;
+ case 'g':
+ header_digests = true;
+ break;
+ case 'H':
+ if (expand_number(optarg, &value) != 0)
+ errx(1, "Invalid MAXH2CDATA value %s", optarg);
+ if (value < 4096 || value > UINT32_MAX ||
+ value % 4 != 0)
+ errx(1, "Invalid MAXH2CDATA value %s", optarg);
+ maxh2cdata = value;
+ break;
+ case 'K':
+ kernel_io = true;
+ break;
+ case 'n':
+ subnqn = optarg;
+ break;
+ case 'P':
+ dport = optarg;
+ break;
+ case 'p':
+ ioport = optarg;
+ break;
+ case 't':
+ transport = optarg;
+ break;
+ default:
+ usage();
+ }
+ }
+
+ av += optind;
+ ac -= optind;
+
+ if (kernel_io) {
+ if (ac > 0)
+ usage();
+ if (modfind("nvmft") == -1 && kldload("nvmft") == -1)
+ warn("couldn't load nvmft");
+ } else {
+ if (ac < 1)
+ usage();
+ }
+
+ if (strcasecmp(transport, "tcp") == 0) {
+ } else
+ errx(1, "Invalid transport %s", transport);
+
+ if (subnqn == NULL) {
+ error = nvmf_nqn_from_hostuuid(nqn);
+ if (error != 0)
+ errc(1, error, "Failed to generate NQN");
+ subnqn = nqn;
+ }
+
+ if (!kernel_io)
+ register_devices(ac, av);
+
+ init_discovery();
+ init_io(subnqn);
+
+ if (daemonize) {
+ pfh = pidfile_open(NULL, 0600, &pid);
+ if (pfh == NULL) {
+ if (errno == EEXIST)
+ errx(1, "Daemon already running, pid: %jd",
+ (intmax_t)pid);
+ warn("Cannot open or create pidfile");
+ }
+
+ if (daemon(0, 0) != 0) {
+ pidfile_remove(pfh);
+ err(1, "Failed to fork into the background");
+ }
+
+ pidfile_write(pfh);
+ }
+
+ kqfd = kqueue();
+ if (kqfd == -1) {
+ pidfile_remove(pfh);
+ err(1, "kqueue");
+ }
+
+ create_passive_sockets(kqfd, dport, true);
+ create_passive_sockets(kqfd, ioport, false);
+
+ handle_connections(kqfd);
+ shutdown_io();
+ if (pfh != NULL)
+ pidfile_remove(pfh);
+ return (0);
+}
diff --git a/tools/tools/sysdoc/tunables.mdoc b/tools/tools/sysdoc/tunables.mdoc
index 54f6920a22c0..20b59f450cf2 100644
--- a/tools/tools/sysdoc/tunables.mdoc
+++ b/tools/tools/sysdoc/tunables.mdoc
@@ -1272,12 +1272,12 @@ bool
Controls forwarding of source-routed IP packets.
---
-net.inet.ip.check_interface
+net.inet.ip.rfc1122_strong_es
bool
This
.Nm
-verifies that packets arrive on the correct interfaces.
+verifies that the packet's IP destination address matches an address on the arrival interface.
---
net.inet.ip.fastforwarding
diff --git a/tools/tools/vhba/vhba.h b/tools/tools/vhba/vhba.h
index d6b32b10b56d..be00779bcb5d 100644
--- a/tools/tools/vhba/vhba.h
+++ b/tools/tools/vhba/vhba.h
@@ -38,12 +38,12 @@
#include <sys/taskqueue.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
+#include <sys/stdarg.h>
#include <sys/proc.h>
#include <machine/bus.h>
#include <machine/cpu.h>
-#include <machine/stdarg.h>
#include <cam/cam.h>
#include <cam/cam_debug.h>
diff --git a/tools/tools/vt/mkkfont/Makefile b/tools/tools/vt/mkkfont/Makefile
index f9758be0ef15..1e8a9bcdafd7 100644
--- a/tools/tools/vt/mkkfont/Makefile
+++ b/tools/tools/vt/mkkfont/Makefile
@@ -1,4 +1,4 @@
PROG= mkkfont
-MAN1=
+MAN=
.include <bsd.prog.mk>
diff --git a/tools/uma/smrstress/smrstress.c b/tools/uma/smrstress/smrstress.c
index 2d6566c6e6dc..41fa11b4364c 100644
--- a/tools/uma/smrstress/smrstress.c
+++ b/tools/uma/smrstress/smrstress.c
@@ -37,11 +37,10 @@
#include <sys/mbuf.h>
#include <sys/smp.h>
#include <sys/smr.h>
+#include <sys/stdarg.h>
#include <vm/uma.h>
-#include <machine/stdarg.h>
-
static uma_zone_t smrs_zone;
static smr_t smrs_smr;