diff options
Diffstat (limited to 'tools')
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; |