1c340ef28SDag-Erling Smørgrav# 2c340ef28SDag-Erling Smørgrav# Copyright (c) 2025 Dag-Erling Smørgrav <des@FreeBSD.org> 3c340ef28SDag-Erling Smørgrav# 4c340ef28SDag-Erling Smørgrav# SPDX-License-Identifier: BSD-2-Clause 5c340ef28SDag-Erling Smørgrav# 6c340ef28SDag-Erling Smørgrav 7c340ef28SDag-Erling Smørgrav. $(atf_get_srcdir)/certctl.subr 8c340ef28SDag-Erling Smørgrav 9c340ef28SDag-Erling Smørgrav# Random sets of eight non-colliding names 10c340ef28SDag-Erling Smørgravset1() 11c340ef28SDag-Erling Smørgrav{ 12c340ef28SDag-Erling Smørgrav cat <<EOF 13c340ef28SDag-Erling SmørgravAVOYKJHSLFHWPVQMKBHENUAHJTEGMCCB 0ca83bbe 14c340ef28SDag-Erling SmørgravUYSYXKDNNJTYOQPBGIKQDHRJYZHTDPKK 0d9a6512 15c340ef28SDag-Erling SmørgravLODHGFXMZYKGOKAYGWTMMYQJYHDATDDM 4e6219f5 16c340ef28SDag-Erling SmørgravNBBTQHJLHKBFFFWJTHHSNKOQYMGLHLPW 5dd76abc 17c340ef28SDag-Erling SmørgravBJFAQZXZHYQLIDDPCAQFPDMNXICUXBXW ad68573d 18c340ef28SDag-Erling SmørgravIOKNTHVEVVIJMNMYAVILMEMQQWLVRESN b577803d 19c340ef28SDag-Erling SmørgravBHGMAJJGNJPIVMHMFCUTJLGFROJICEKN c98a6338 20c340ef28SDag-Erling SmørgravHCRFQMGDQJALMLUQNXMPGLXFLLJRODJW f50c6379 21c340ef28SDag-Erling SmørgravEOF 22c340ef28SDag-Erling Smørgrav} 23c340ef28SDag-Erling Smørgrav 24c340ef28SDag-Erling Smørgravset2() 25c340ef28SDag-Erling Smørgrav{ 26c340ef28SDag-Erling Smørgrav cat <<EOF 27c340ef28SDag-Erling SmørgravGOHKZTSKIPDSYNLMGYXGLROPTATELXIU 30789c88 28c340ef28SDag-Erling SmørgravYOOTYHEGHZIYFXOBLNKENPSJUDGOPJJU 7fadbc13 29c340ef28SDag-Erling SmørgravETRINNYBGKIENAVGOKVJYFSSHFZIJZRH 8ed664af 30c340ef28SDag-Erling SmørgravDBFGMFFMRNLPQLQPOLXOEUVLCRXLRSWT 8f34355e 31c340ef28SDag-Erling SmørgravWFOPBQPLQFHDHZOUQFEIDGSYDUOTSNDQ ac0471df 32c340ef28SDag-Erling SmørgravHMNETZMGNIWRGXQCVZXVZGWSGFBRRDQC b32f1472 33c340ef28SDag-Erling SmørgravSHFYBXDVAUACBFPPAIGDAQIAGYOYGMQE baca75fa 34c340ef28SDag-Erling SmørgravPCBGDNVPYCDGNRQSGRSLXFHYKXLAVLHW ddeeae01 35c340ef28SDag-Erling SmørgravEOF 36c340ef28SDag-Erling Smørgrav} 37c340ef28SDag-Erling Smørgrav 38c340ef28SDag-Erling Smørgravset3() 39c340ef28SDag-Erling Smørgrav{ 40c340ef28SDag-Erling Smørgrav cat <<EOF 41c340ef28SDag-Erling SmørgravNJWIRLPWAIICVJBKXXHFHLCPAERZATRL 000aa2e5 42c340ef28SDag-Erling SmørgravRJAENDPOCZQEVCPFUWOWDXPCSMYJPVYC 021b95a3 43c340ef28SDag-Erling SmørgravPQUQDSWHBNVLBTNBGONYRLGZZVEFXVLO 071e8c50 44c340ef28SDag-Erling SmørgravVZEXRKJUPZSFBDWBOLUZXOGLNTEAPCZM 3af7bb9b 45c340ef28SDag-Erling SmørgravZXOWOXQTXNZMAMZIWVFDZDJEWOOAGAOH 48d5c7cc 46c340ef28SDag-Erling SmørgravKQSFQYVJMFTMADIHJIWGSQISWKSHRYQO 509f5ba1 47c340ef28SDag-Erling SmørgravAIECYSLWZOIEPJWWUTWSQXCNCIHHZHYI 8cb0c503 48c340ef28SDag-Erling SmørgravRFHWDJZEPOFLMPGXAHVEJFHCDODAPVEV 9ae4e049 49c340ef28SDag-Erling SmørgravEOF 50c340ef28SDag-Erling Smørgrav} 51c340ef28SDag-Erling Smørgrav 52c340ef28SDag-Erling Smørgrav# Random set of three colliding names 53c340ef28SDag-Erling Smørgravcollhash=f2888ce3 54c340ef28SDag-Erling Smørgravcoll() 55c340ef28SDag-Erling Smørgrav{ 56c340ef28SDag-Erling Smørgrav cat <<EOF 57c340ef28SDag-Erling SmørgravEJFTZEOANQLOYPEHWWXBWEWEFVKHMSNA $collhash 58c340ef28SDag-Erling SmørgravLEMRWZAZLKZLPPSFLNLQZVGKKBEOFYWG $collhash 59c340ef28SDag-Erling SmørgravZWUPHYWKKTVEFBJOLLPDAIKGRDFVXZID $collhash 60c340ef28SDag-Erling SmørgravEOF 61c340ef28SDag-Erling Smørgrav} 62c340ef28SDag-Erling Smørgrav 63c340ef28SDag-Erling Smørgravsortfile() { 64c340ef28SDag-Erling Smørgrav for filename; do 65c340ef28SDag-Erling Smørgrav sort "${filename}" >"${filename}"- 66c340ef28SDag-Erling Smørgrav mv "${filename}"- "${filename}" 67c340ef28SDag-Erling Smørgrav done 68c340ef28SDag-Erling Smørgrav} 69c340ef28SDag-Erling Smørgrav 70c340ef28SDag-Erling Smørgravcertctl_setup() 71c340ef28SDag-Erling Smørgrav{ 72c340ef28SDag-Erling Smørgrav export DESTDIR="$PWD" 73c340ef28SDag-Erling Smørgrav 74c340ef28SDag-Erling Smørgrav # Create input directories 75c340ef28SDag-Erling Smørgrav mkdir -p ${DESTDIR}${DISTBASE}/usr/share/certs/trusted 76c340ef28SDag-Erling Smørgrav mkdir -p ${DESTDIR}${DISTBASE}/usr/share/certs/untrusted 77c340ef28SDag-Erling Smørgrav mkdir -p ${DESTDIR}/usr/local/share/certs 78c340ef28SDag-Erling Smørgrav 79*03221b18SDag-Erling Smørgrav # Do not create output directories; certctl will take care of it 80*03221b18SDag-Erling Smørgrav #mkdir -p ${DESTDIR}${DISTBASE}/etc/ssl/certs 81*03221b18SDag-Erling Smørgrav #mkdir -p ${DESTDIR}${DISTBASE}/etc/ssl/untrusted 82c340ef28SDag-Erling Smørgrav 83c340ef28SDag-Erling Smørgrav # Generate a random key 84c340ef28SDag-Erling Smørgrav keyname="testkey" 85c340ef28SDag-Erling Smørgrav gen_key ${keyname} 86c340ef28SDag-Erling Smørgrav 87c340ef28SDag-Erling Smørgrav # Generate certificates 88c340ef28SDag-Erling Smørgrav :>metalog.expect 89c340ef28SDag-Erling Smørgrav :>trusted.expect 90c340ef28SDag-Erling Smørgrav :>untrusted.expect 91c340ef28SDag-Erling Smørgrav metalog() { 92c340ef28SDag-Erling Smørgrav echo ".${DISTBASE}$@ type=file" >>metalog.expect 93c340ef28SDag-Erling Smørgrav } 94c340ef28SDag-Erling Smørgrav trusted() { 95c340ef28SDag-Erling Smørgrav local crtname=$1 96c340ef28SDag-Erling Smørgrav local filename=$2 97c340ef28SDag-Erling Smørgrav printf "%s\t%s\n" "${filename}" "${crtname}" >>trusted.expect 98c340ef28SDag-Erling Smørgrav metalog "/etc/ssl/certs/${filename}" 99c340ef28SDag-Erling Smørgrav } 100c340ef28SDag-Erling Smørgrav untrusted() { 101c340ef28SDag-Erling Smørgrav local crtname=$1 102c340ef28SDag-Erling Smørgrav local filename=$2 103c340ef28SDag-Erling Smørgrav printf "%s\t%s\n" "${filename}" "${crtname}" >>untrusted.expect 104c340ef28SDag-Erling Smørgrav metalog "/etc/ssl/untrusted/${filename}" 105c340ef28SDag-Erling Smørgrav } 106c340ef28SDag-Erling Smørgrav set1 | while read crtname hash ; do 107c340ef28SDag-Erling Smørgrav gen_crt ${crtname} ${keyname} 108c340ef28SDag-Erling Smørgrav mv ${crtname}.crt ${DESTDIR}${DISTBASE}/usr/share/certs/trusted 109c340ef28SDag-Erling Smørgrav trusted "${crtname}" "${hash}.0" 110c340ef28SDag-Erling Smørgrav done 111c340ef28SDag-Erling Smørgrav local c=0 112c340ef28SDag-Erling Smørgrav coll | while read crtname hash ; do 113c340ef28SDag-Erling Smørgrav gen_crt ${crtname} ${keyname} 114c340ef28SDag-Erling Smørgrav mv ${crtname}.crt ${DESTDIR}${DISTBASE}/usr/share/certs/trusted 115c340ef28SDag-Erling Smørgrav trusted "${crtname}" "${hash}.${c}" 116c340ef28SDag-Erling Smørgrav c=$((c+1)) 117c340ef28SDag-Erling Smørgrav done 118c340ef28SDag-Erling Smørgrav set2 | while read crtname hash ; do 119c340ef28SDag-Erling Smørgrav gen_crt ${crtname} ${keyname} 120c340ef28SDag-Erling Smørgrav openssl x509 -in ${crtname}.crt 121c340ef28SDag-Erling Smørgrav rm ${crtname}.crt 122c340ef28SDag-Erling Smørgrav trusted "${crtname}" "${hash}.0" 123c340ef28SDag-Erling Smørgrav done >usr/local/share/certs/bundle.crt 124c340ef28SDag-Erling Smørgrav set3 | while read crtname hash ; do 125c340ef28SDag-Erling Smørgrav gen_crt ${crtname} ${keyname} 126c340ef28SDag-Erling Smørgrav mv ${crtname}.crt ${DESTDIR}${DISTBASE}/usr/share/certs/untrusted 127c340ef28SDag-Erling Smørgrav untrusted "${crtname}" "${hash}.0" 128c340ef28SDag-Erling Smørgrav done 129c340ef28SDag-Erling Smørgrav metalog "/etc/ssl/cert.pem" 130c340ef28SDag-Erling Smørgrav unset -f untrusted 131c340ef28SDag-Erling Smørgrav unset -f trusted 132c340ef28SDag-Erling Smørgrav unset -f metalog 133c340ef28SDag-Erling Smørgrav sortfile *.expect 134c340ef28SDag-Erling Smørgrav} 135c340ef28SDag-Erling Smørgrav 136c340ef28SDag-Erling Smørgravcheck_trusted() { 137c340ef28SDag-Erling Smørgrav local crtname=$1 138c340ef28SDag-Erling Smørgrav local subject="$(subject ${crtname})" 139c340ef28SDag-Erling Smørgrav local c=${2:-1} 140c340ef28SDag-Erling Smørgrav 141c340ef28SDag-Erling Smørgrav atf_check -e ignore -o match:"found: ${c}\$" \ 142c340ef28SDag-Erling Smørgrav openssl storeutl -noout -subject "${subject}" \ 143c340ef28SDag-Erling Smørgrav ${DESTDIR}${DISTBASE}/etc/ssl/certs 144c340ef28SDag-Erling Smørgrav atf_check -e ignore -o not-match:"found: [1-9]" \ 145c340ef28SDag-Erling Smørgrav openssl storeutl -noout -subject "${subject}" \ 146c340ef28SDag-Erling Smørgrav ${DESTDIR}${DISTBASE}/etc/ssl/untrusted 147c340ef28SDag-Erling Smørgrav} 148c340ef28SDag-Erling Smørgrav 149c340ef28SDag-Erling Smørgravcheck_untrusted() { 150c340ef28SDag-Erling Smørgrav local crtname=$1 151c340ef28SDag-Erling Smørgrav local subject="$(subject ${crtname})" 152c340ef28SDag-Erling Smørgrav local c=${2:-1} 153c340ef28SDag-Erling Smørgrav 154c340ef28SDag-Erling Smørgrav atf_check -e ignore -o not-match:"found: [1-9]" \ 155c340ef28SDag-Erling Smørgrav openssl storeutl -noout -subject "${subject}" \ 156c340ef28SDag-Erling Smørgrav ${DESTDIR}/${DISTBASE}/etc/ssl/certs 157c340ef28SDag-Erling Smørgrav atf_check -e ignore -o match:"found: ${c}\$" \ 158c340ef28SDag-Erling Smørgrav openssl storeutl -noout -subject "${subject}" \ 159c340ef28SDag-Erling Smørgrav ${DESTDIR}/${DISTBASE}/etc/ssl/untrusted 160c340ef28SDag-Erling Smørgrav} 161c340ef28SDag-Erling Smørgrav 162c340ef28SDag-Erling Smørgravcheck_in_bundle() { 163c340ef28SDag-Erling Smørgrav local b=${DISTBASE}${DISTBASE+/} 164c340ef28SDag-Erling Smørgrav local crtfile=$1 165c340ef28SDag-Erling Smørgrav local line 166c340ef28SDag-Erling Smørgrav 167c340ef28SDag-Erling Smørgrav line=$(tail +5 "${crtfile}" | head -1) 168c340ef28SDag-Erling Smørgrav atf_check grep -q "${line}" ${DESTDIR}${DISTBASE}/etc/ssl/cert.pem 169c340ef28SDag-Erling Smørgrav} 170c340ef28SDag-Erling Smørgrav 171c340ef28SDag-Erling Smørgravcheck_not_in_bundle() { 172c340ef28SDag-Erling Smørgrav local b=${DISTBASE}${DISTBASE+/} 173c340ef28SDag-Erling Smørgrav local crtfile=$1 174c340ef28SDag-Erling Smørgrav local line 175c340ef28SDag-Erling Smørgrav 176c340ef28SDag-Erling Smørgrav line=$(tail +5 "${crtfile}" | head -1) 177c340ef28SDag-Erling Smørgrav atf_check -s exit:1 grep -q "${line}" etc/ssl/cert.pem 178c340ef28SDag-Erling Smørgrav} 179c340ef28SDag-Erling Smørgrav 180c340ef28SDag-Erling Smørgravatf_test_case rehash 181c340ef28SDag-Erling Smørgravrehash_head() 182c340ef28SDag-Erling Smørgrav{ 183c340ef28SDag-Erling Smørgrav atf_set "descr" "Test the rehash command" 184c340ef28SDag-Erling Smørgrav} 185c340ef28SDag-Erling Smørgravrehash_body() 186c340ef28SDag-Erling Smørgrav{ 187c340ef28SDag-Erling Smørgrav certctl_setup 188c340ef28SDag-Erling Smørgrav atf_check certctl rehash 189c340ef28SDag-Erling Smørgrav 190c340ef28SDag-Erling Smørgrav # Verify non-colliding trusted certificates 191c340ef28SDag-Erling Smørgrav (set1; set2) >trusted 192c340ef28SDag-Erling Smørgrav while read crtname hash ; do 193c340ef28SDag-Erling Smørgrav check_trusted "${crtname}" 194c340ef28SDag-Erling Smørgrav done <trusted 195c340ef28SDag-Erling Smørgrav 196c340ef28SDag-Erling Smørgrav # Verify colliding trusted certificates 197c340ef28SDag-Erling Smørgrav coll >coll 198c340ef28SDag-Erling Smørgrav while read crtname hash ; do 199c340ef28SDag-Erling Smørgrav check_trusted "${crtname}" $(wc -l <coll) 200c340ef28SDag-Erling Smørgrav done <coll 201c340ef28SDag-Erling Smørgrav 202c340ef28SDag-Erling Smørgrav # Verify untrusted certificates 203c340ef28SDag-Erling Smørgrav set3 >untrusted 204c340ef28SDag-Erling Smørgrav while read crtname hash ; do 205c340ef28SDag-Erling Smørgrav check_untrusted "${crtname}" 206c340ef28SDag-Erling Smørgrav done <untrusted 207c340ef28SDag-Erling Smørgrav 208c340ef28SDag-Erling Smørgrav # Verify bundle 209c340ef28SDag-Erling Smørgrav for f in etc/ssl/certs/*.? ; do 210c340ef28SDag-Erling Smørgrav check_in_bundle "${f}" 211c340ef28SDag-Erling Smørgrav done 212c340ef28SDag-Erling Smørgrav for f in etc/ssl/untrusted/*.? ; do 213c340ef28SDag-Erling Smørgrav check_not_in_bundle "${f}" 214c340ef28SDag-Erling Smørgrav done 215c340ef28SDag-Erling Smørgrav} 216c340ef28SDag-Erling Smørgrav 217c340ef28SDag-Erling Smørgravatf_test_case list 218c340ef28SDag-Erling Smørgravlist_head() 219c340ef28SDag-Erling Smørgrav{ 220c340ef28SDag-Erling Smørgrav atf_set "descr" "Test the list and untrusted commands" 221c340ef28SDag-Erling Smørgrav} 222c340ef28SDag-Erling Smørgravlist_body() 223c340ef28SDag-Erling Smørgrav{ 224c340ef28SDag-Erling Smørgrav certctl_setup 225c340ef28SDag-Erling Smørgrav atf_check certctl rehash 226c340ef28SDag-Erling Smørgrav 227c340ef28SDag-Erling Smørgrav atf_check -o save:trusted.out certctl list 228c340ef28SDag-Erling Smørgrav sortfile trusted.out 229c340ef28SDag-Erling Smørgrav # the ordering of the colliding certificates is partly 230c340ef28SDag-Erling Smørgrav # determined by fields that change every time we regenerate 231c340ef28SDag-Erling Smørgrav # them, so ignore them in the diff 232c340ef28SDag-Erling Smørgrav atf_check diff -u \ 233c340ef28SDag-Erling Smørgrav --ignore-matching-lines $collhash \ 234c340ef28SDag-Erling Smørgrav trusted.expect trusted.out 235c340ef28SDag-Erling Smørgrav 236c340ef28SDag-Erling Smørgrav atf_check -o save:untrusted.out certctl untrusted 237c340ef28SDag-Erling Smørgrav sortfile untrusted.out 238c340ef28SDag-Erling Smørgrav atf_check diff -u \ 239c340ef28SDag-Erling Smørgrav untrusted.expect untrusted.out 240c340ef28SDag-Erling Smørgrav} 241c340ef28SDag-Erling Smørgrav 242c340ef28SDag-Erling Smørgravatf_test_case trust 243c340ef28SDag-Erling Smørgravtrust_head() 244c340ef28SDag-Erling Smørgrav{ 245c340ef28SDag-Erling Smørgrav atf_set "descr" "Test the trust command" 246c340ef28SDag-Erling Smørgrav} 247c340ef28SDag-Erling Smørgravtrust_body() 248c340ef28SDag-Erling Smørgrav{ 249c340ef28SDag-Erling Smørgrav certctl_setup 250c340ef28SDag-Erling Smørgrav atf_check certctl rehash 251c340ef28SDag-Erling Smørgrav crtname=$(set3 | (read crtname hash ; echo ${crtname})) 252c340ef28SDag-Erling Smørgrav crtfile=usr/share/certs/untrusted/${crtname}.crt 253c340ef28SDag-Erling Smørgrav check_untrusted ${crtname} 254c340ef28SDag-Erling Smørgrav check_not_in_bundle ${crtfile} 255c340ef28SDag-Erling Smørgrav atf_check -e match:"was previously untrusted" \ 256c340ef28SDag-Erling Smørgrav certctl trust ${crtfile} 257c340ef28SDag-Erling Smørgrav check_trusted ${crtname} 258c340ef28SDag-Erling Smørgrav check_in_bundle ${crtfile} 259c340ef28SDag-Erling Smørgrav} 260c340ef28SDag-Erling Smørgrav 261c340ef28SDag-Erling Smørgravatf_test_case untrust 262c340ef28SDag-Erling Smørgravuntrust_head() 263c340ef28SDag-Erling Smørgrav{ 264c340ef28SDag-Erling Smørgrav atf_set "descr" "Test the untrust command" 265c340ef28SDag-Erling Smørgrav} 266c340ef28SDag-Erling Smørgravuntrust_body() 267c340ef28SDag-Erling Smørgrav{ 268c340ef28SDag-Erling Smørgrav certctl_setup 269c340ef28SDag-Erling Smørgrav atf_check certctl rehash 270c340ef28SDag-Erling Smørgrav crtname=$(set1 | (read crtname hash ; echo ${crtname})) 271c340ef28SDag-Erling Smørgrav crtfile=usr/share/certs/trusted/${crtname}.crt 272c340ef28SDag-Erling Smørgrav check_trusted "${crtname}" 273c340ef28SDag-Erling Smørgrav check_in_bundle ${crtfile} 274c340ef28SDag-Erling Smørgrav atf_check certctl untrust "${crtfile}" 275c340ef28SDag-Erling Smørgrav check_untrusted "${crtname}" 276c340ef28SDag-Erling Smørgrav check_not_in_bundle ${crtfile} 277c340ef28SDag-Erling Smørgrav} 278c340ef28SDag-Erling Smørgrav 279c340ef28SDag-Erling Smørgravatf_test_case metalog 280c340ef28SDag-Erling Smørgravmetalog_head() 281c340ef28SDag-Erling Smørgrav{ 282c340ef28SDag-Erling Smørgrav atf_set "descr" "Verify the metalog" 283c340ef28SDag-Erling Smørgrav} 284c340ef28SDag-Erling Smørgravmetalog_body() 285c340ef28SDag-Erling Smørgrav{ 286c340ef28SDag-Erling Smørgrav export DISTBASE=/base 287c340ef28SDag-Erling Smørgrav certctl_setup 288c340ef28SDag-Erling Smørgrav 289c340ef28SDag-Erling Smørgrav # certctl gets DESTDIR and DISTBASE from environment 290c340ef28SDag-Erling Smørgrav rm -f metalog.orig 291c340ef28SDag-Erling Smørgrav atf_check certctl -U -M metalog.orig rehash 292c340ef28SDag-Erling Smørgrav sed -E 's/(type=file) .*/\1/' metalog.orig | sort >metalog.short 293c340ef28SDag-Erling Smørgrav atf_check diff -u metalog.expect metalog.short 294c340ef28SDag-Erling Smørgrav 295c340ef28SDag-Erling Smørgrav # certctl gets DESTDIR and DISTBASE from command line 296c340ef28SDag-Erling Smørgrav rm -f metalog.orig 297c340ef28SDag-Erling Smørgrav atf_check env -uDESTDIR -uDISTBASE \ 298c340ef28SDag-Erling Smørgrav certctl -D ${DESTDIR} -d ${DISTBASE} -U -M metalog.orig rehash 299c340ef28SDag-Erling Smørgrav sed -E 's/(type=file) .*/\1/' metalog.orig | sort >metalog.short 300c340ef28SDag-Erling Smørgrav atf_check diff -u metalog.expect metalog.short 301c340ef28SDag-Erling Smørgrav 302c340ef28SDag-Erling Smørgrav # as above, but intentionally add trailing slashes 303c340ef28SDag-Erling Smørgrav rm -f metalog.orig 304c340ef28SDag-Erling Smørgrav atf_check env -uDESTDIR -uDISTBASE \ 305c340ef28SDag-Erling Smørgrav certctl -D ${DESTDIR}// -d ${DISTBASE}/ -U -M metalog.orig rehash 306c340ef28SDag-Erling Smørgrav sed -E 's/(type=file) .*/\1/' metalog.orig | sort >metalog.short 307c340ef28SDag-Erling Smørgrav atf_check diff -u metalog.expect metalog.short 308c340ef28SDag-Erling Smørgrav} 309c340ef28SDag-Erling Smørgrav 310c340ef28SDag-Erling Smørgravatf_test_case misc 311c340ef28SDag-Erling Smørgravmisc_head() 312c340ef28SDag-Erling Smørgrav{ 313c340ef28SDag-Erling Smørgrav atf_set "descr" "Test miscellaneous edge cases" 314c340ef28SDag-Erling Smørgrav} 315c340ef28SDag-Erling Smørgravmisc_body() 316c340ef28SDag-Erling Smørgrav{ 317c340ef28SDag-Erling Smørgrav # certctl rejects DISTBASE that does not begin with a slash 318c340ef28SDag-Erling Smørgrav atf_check -s exit:1 -e match:"begin with a slash" \ 319c340ef28SDag-Erling Smørgrav certctl -d base -n rehash 320c340ef28SDag-Erling Smørgrav atf_check -s exit:1 -e match:"begin with a slash" \ 321c340ef28SDag-Erling Smørgrav env DISTBASE=base certctl -n rehash 322c340ef28SDag-Erling Smørgrav} 323c340ef28SDag-Erling Smørgrav 324c340ef28SDag-Erling Smørgravatf_init_test_cases() 325c340ef28SDag-Erling Smørgrav{ 326c340ef28SDag-Erling Smørgrav atf_add_test_case rehash 327c340ef28SDag-Erling Smørgrav atf_add_test_case list 328c340ef28SDag-Erling Smørgrav atf_add_test_case trust 329c340ef28SDag-Erling Smørgrav atf_add_test_case untrust 330c340ef28SDag-Erling Smørgrav atf_add_test_case metalog 331c340ef28SDag-Erling Smørgrav atf_add_test_case misc 332c340ef28SDag-Erling Smørgrav} 333