Input buildinfo: https://buildinfos.debian.net/buildinfo-pool/g/golang-blitiri-go-spf/golang-blitiri-go-spf_1.1.0-1_all.buildinfo Use metasnap for getting required timestamps New buildinfo file: /tmp/golang-blitiri-go-spf-1.1.0-1_bfv6zxu/golang-blitiri-go-spf_1.1.0-1_all.buildinfo Get source package info: golang-blitiri-go-spf=1.1.0-1 Source URL: http://snapshot.notset.fr/mr/package/golang-blitiri-go-spf/1.1.0-1/srcfiles?fileinfo=1 env -i PATH=/usr/sbin:/usr/bin:/sbin:/bin TMPDIR=/tmp mmdebstrap --arch=amd64 --include=autoconf=2.69-11.1 automake=1:1.16.2-1 autopoint=0.19.8.1-10 autotools-dev=20180224.1 base-files=11 base-passwd=3.5.47 bash=5.0-6 binutils=2.34-8 binutils-common=2.34-8 binutils-x86-64-linux-gnu=2.34-8 bsdextrautils=2.35.2-6 bsdutils=1:2.35.2-6 build-essential=12.8 bzip2=1.0.8-3 coreutils=8.32-2 cpp=4:9.2.1-3.1 cpp-9=9.3.0-14 dash=0.5.10.2-7 debconf=1.5.74 debhelper=13.1 debianutils=4.11 dh-autoreconf=19 dh-golang=1.49 dh-strip-nondeterminism=1.8.1-1 diffutils=1:3.7-3 dmsetup=2:1.02.167-1+b1 dpkg=1.20.2 dpkg-dev=1.20.2 dwz=0.13-5 file=1:5.38-5 findutils=4.7.0-1 g++=4:9.2.1-3.1 g++-9=9.3.0-14 gcc=4:9.2.1-3.1 gcc-10-base=10.1.0-4 gcc-9=9.3.0-14 gcc-9-base=9.3.0-14 gettext=0.19.8.1-10 gettext-base=0.19.8.1-10 golang-1.14-go=1.14.4-1 golang-1.14-src=1.14.4-1 golang-any=2:1.14~2 golang-go=2:1.14~2 golang-gopkg-yaml.v2-dev=2.2.8-2 golang-src=2:1.14~2 grep=3.4-1 groff-base=1.22.4-5 gzip=1.10-2 hostname=3.23 init-system-helpers=1.57 intltool-debian=0.35.0+20060710.5 libacl1=2.2.53-8 libarchive-zip-perl=1.68-1 libargon2-1=0~20171227-0.2 libasan5=9.3.0-14 libatomic1=10.1.0-4 libattr1=1:2.4.48-5 libaudit-common=1:2.8.5-3 libaudit1=1:2.8.5-3+b1 libbinutils=2.34-8 libblkid1=2.35.2-6 libbz2-1.0=1.0.8-3 libc-bin=2.30-8 libc-dev-bin=2.30-8 libc6=2.30-8 libc6-dev=2.30-8 libcap-ng0=0.7.9-2.2 libcc1-0=10.1.0-4 libcroco3=0.6.13-1 libcrypt-dev=1:4.4.16-1 libcrypt1=1:4.4.16-1 libcryptsetup12=2:2.3.3-1 libctf-nobfd0=2.34-8 libctf0=2.34-8 libdb5.3=5.3.28+dfsg1-0.6 libdebconfclient0=0.252 libdebhelper-perl=13.1 libdevmapper1.02.1=2:1.02.167-1+b1 libdpkg-perl=1.20.2 libelf1=0.176-1.1 libffi7=3.3-4 libfile-stripnondeterminism-perl=1.8.1-1 libgcc-9-dev=9.3.0-14 libgcc-s1=10.1.0-4 libgcrypt20=1.8.5-5 libgdbm-compat4=1.18.1-5 libgdbm6=1.18.1-5 libglib2.0-0=2.64.3-1 libgmp10=2:6.2.0+dfsg-6 libgomp1=10.1.0-4 libgpg-error0=1.38-1 libicu67=67.1-2 libisl22=0.22.1-1 libitm1=10.1.0-4 libjson-c4=0.13.1+dfsg-9 liblsan0=10.1.0-4 liblz4-1=1.9.2-2 liblzma5=5.2.4-1+b1 libmagic-mgc=1:5.38-5 libmagic1=1:5.38-5 libmount1=2.35.2-6 libmpc3=1.1.0-1 libmpfr6=4.0.2-1 libpam-modules=1.3.1-5 libpam-modules-bin=1.3.1-5 libpam-runtime=1.3.1-5 libpam0g=1.3.1-5 libpcre2-8-0=10.34-7 libpcre3=2:8.39-13 libperl5.30=5.30.3-4 libpipeline1=1.5.2-2 libquadmath0=10.1.0-4 libseccomp2=2.4.3-1+b1 libselinux1=3.0-1+b3 libsigsegv2=2.12-2 libsmartcols1=2.35.2-6 libssl1.1=1.1.1g-1 libstdc++-9-dev=9.3.0-14 libstdc++6=10.1.0-4 libsub-override-perl=0.09-2 libsystemd0=245.6-1 libtinfo6=6.2-1 libtool=2.4.6-14 libtsan0=10.1.0-4 libubsan1=10.1.0-4 libuchardet0=0.0.7-1 libudev1=245.6-1 libunistring2=0.9.10-4 libuuid1=2.35.2-6 libxml2=2.9.10+dfsg-5+b1 linux-libc-dev=5.7.6-1 login=1:4.8.1-1 lsb-base=11.1.0 m4=1.4.18-4 make=4.3-3 man-db=2.9.3-1 mawk=1.3.4.20200120-2 ncurses-base=6.2-1 ncurses-bin=6.2-1 patch=2.7.6-6 perl=5.30.3-4 perl-base=5.30.3-4 perl-modules-5.30=5.30.3-4 po-debconf=1.0.21 sed=4.7-1 sensible-utils=0.0.12+nmu1 sysvinit-utils=2.96-3 tar=1.30+dfsg-7 util-linux=2.35.2-6 xz-utils=5.2.4-1+b1 zlib1g=1:1.2.11.dfsg-2 --variant=apt --aptopt=Acquire::Check-Valid-Until "false" --aptopt=Acquire::http::Dl-Limit "1000"; --aptopt=Acquire::https::Dl-Limit "1000"; --aptopt=Acquire::Retries "5"; --aptopt=APT::Get::allow-downgrades "true"; --keyring=/usr/share/keyrings/ --essential-hook=chroot "$1" sh -c "apt-get --yes install fakeroot util-linux" --essential-hook=copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ --essential-hook=chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20200629T084301Z/ unstable main' >> /etc/apt/sources.list && apt-get update" --customize-hook=chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash --customize-hook=chroot "$1" env sh -c "apt-get source --only-source -d golang-blitiri-go-spf=1.1.0-1 && mkdir -p /build/golang-blitiri-go-spf-AwE00g && dpkg-source --no-check -x /*.dsc /build/golang-blitiri-go-spf-AwE00g/golang-blitiri-go-spf-1.1.0 && chown -R builduser:builduser /build/golang-blitiri-go-spf-AwE00g" --customize-hook=chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/golang-blitiri-go-spf-AwE00g/golang-blitiri-go-spf-1.1.0 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1593341796" dpkg-buildpackage -uc -a amd64 --build=all" --customize-hook=sync-out /build/golang-blitiri-go-spf-AwE00g /tmp/golang-blitiri-go-spf-1.1.0-1_bfv6zxu bullseye /dev/null deb http://snapshot.notset.fr/archive/debian/20200629T084301Z unstable main I: automatically chosen mode: root I: chroot architecture amd64 is equal to the host's architecture I: automatically chosen format: tar I: using /tmp/mmdebstrap.f95iPLQnaA as tempdir I: running apt-get update... I: downloading packages with apt... I: extracting archives... I: installing essential packages... I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "apt-get --yes install fakeroot util-linux"' exec /tmp/mmdebstrap.f95iPLQnaA Reading package lists... Building dependency tree... util-linux is already the newest version (2.35.2-6). The following NEW packages will be installed: fakeroot libfakeroot 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 132 kB of archives. After this operation, 393 kB of additional disk space will be used. Get:1 http://snapshot.notset.fr/archive/debian/20200629T084301Z unstable/main amd64 libfakeroot amd64 1.24-1 [45.7 kB] Get:2 http://snapshot.notset.fr/archive/debian/20200629T084301Z unstable/main amd64 fakeroot amd64 1.24-1 [85.9 kB] debconf: delaying package configuration, since apt-utils is not installed Fetched 132 kB in 0s (1069 kB/s) Selecting previously unselected package libfakeroot:amd64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 4632 files and directories currently installed.) Preparing to unpack .../libfakeroot_1.24-1_amd64.deb ... Unpacking libfakeroot:amd64 (1.24-1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.24-1_amd64.deb ... Unpacking fakeroot (1.24-1) ... Setting up libfakeroot:amd64 (1.24-1) ... Setting up fakeroot (1.24-1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Processing triggers for libc-bin (2.30-8) ... I: running special hook: copy-in /usr/share/keyrings/debian-archive-bullseye-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-security-automatic.gpg /usr/share/keyrings/debian-archive-bullseye-stable.gpg /usr/share/keyrings/debian-archive-buster-automatic.gpg /usr/share/keyrings/debian-archive-buster-security-automatic.gpg /usr/share/keyrings/debian-archive-buster-stable.gpg /usr/share/keyrings/debian-archive-keyring.gpg /usr/share/keyrings/debian-archive-removed-keys.gpg /usr/share/keyrings/debian-archive-stretch-automatic.gpg /usr/share/keyrings/debian-archive-stretch-security-automatic.gpg /usr/share/keyrings/debian-archive-stretch-stable.gpg /usr/share/keyrings/debian-ports-archive-keyring-removed.gpg /usr/share/keyrings/debian-ports-archive-keyring.gpg /usr/share/keyrings/debian-keyring.gpg /etc/apt/trusted.gpg.d/ I: running --essential-hook in shell: sh -c 'chroot "$1" sh -c "rm /etc/apt/sources.list && echo 'deb http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb-src http://snapshot.notset.fr/archive/debian/20210814T212851Z/ bookworm main deb http://snapshot.notset.fr/archive/debian/20200629T084301Z/ unstable main' >> /etc/apt/sources.list && apt-get update"' exec /tmp/mmdebstrap.f95iPLQnaA Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm InRelease [81.6 kB] Hit:2 http://snapshot.notset.fr/archive/debian/20200629T084301Z unstable InRelease Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Ign:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources Ign:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main Sources [11.4 MB] Get:4 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main amd64 Packages [11.1 MB] Fetched 22.6 MB in 20s (1144 kB/s) Reading package lists... I: installing remaining packages inside the chroot... I: running --customize-hook in shell: sh -c 'chroot "$1" useradd --no-create-home -d /nonexistent -p "" builduser -s /bin/bash' exec /tmp/mmdebstrap.f95iPLQnaA I: running --customize-hook in shell: sh -c 'chroot "$1" env sh -c "apt-get source --only-source -d golang-blitiri-go-spf=1.1.0-1 && mkdir -p /build/golang-blitiri-go-spf-AwE00g && dpkg-source --no-check -x /*.dsc /build/golang-blitiri-go-spf-AwE00g/golang-blitiri-go-spf-1.1.0 && chown -R builduser:builduser /build/golang-blitiri-go-spf-AwE00g"' exec /tmp/mmdebstrap.f95iPLQnaA Reading package lists... NOTICE: 'golang-blitiri-go-spf' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/go-team/packages/golang-blitiri-go-spf.git Please use: git clone https://salsa.debian.org/go-team/packages/golang-blitiri-go-spf.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 85.2 kB of source archives. Get:1 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main golang-blitiri-go-spf 1.1.0-1 (dsc) [2198 B] Get:2 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main golang-blitiri-go-spf 1.1.0-1 (tar) [81.0 kB] Get:3 http://snapshot.notset.fr/archive/debian/20210814T212851Z bookworm/main golang-blitiri-go-spf 1.1.0-1 (diff) [1936 B] Fetched 85.2 kB in 0s (759 kB/s) Download complete and in download only mode W: Download is performed unsandboxed as root as file 'golang-blitiri-go-spf_1.1.0-1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied) dpkg-source: info: extracting golang-blitiri-go-spf in /build/golang-blitiri-go-spf-AwE00g/golang-blitiri-go-spf-1.1.0 dpkg-source: info: unpacking golang-blitiri-go-spf_1.1.0.orig.tar.gz dpkg-source: info: unpacking golang-blitiri-go-spf_1.1.0-1.debian.tar.xz I: running --customize-hook in shell: sh -c 'chroot "$1" env --unset=TMPDIR runuser builduser -c "cd /build/golang-blitiri-go-spf-AwE00g/golang-blitiri-go-spf-1.1.0 && env DEB_BUILD_OPTIONS="parallel=4" LC_ALL="C.UTF-8" SOURCE_DATE_EPOCH="1593341796" dpkg-buildpackage -uc -a amd64 --build=all"' exec /tmp/mmdebstrap.f95iPLQnaA dpkg-buildpackage: info: source package golang-blitiri-go-spf dpkg-buildpackage: info: source version 1.1.0-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Alberto Bertogli dpkg-source --before-build . debian/rules clean dh clean --buildsystem=golang --with=golang dh_auto_clean -O--buildsystem=golang dh_autoreconf_clean -O--buildsystem=golang dh_clean -O--buildsystem=golang debian/rules binary-indep dh binary-indep --buildsystem=golang --with=golang dh_update_autotools_config -i -O--buildsystem=golang dh_autoreconf -i -O--buildsystem=golang dh_auto_configure -i -O--buildsystem=golang dh_auto_build -i -O--buildsystem=golang cd obj-x86_64-linux-gnu && go install -trimpath -v -p 4 blitiri.com.ar/go/spf runtime/internal/sys runtime/internal/atomic math/bits internal/cpu runtime/internal/math unicode/utf8 internal/race sync/atomic internal/bytealg unicode math internal/testlog internal/nettrace runtime/cgo runtime internal/reflectlite sync internal/singleflight math/rand errors sort internal/oserror io strconv syscall vendor/golang.org/x/net/dns/dnsmessage strings reflect bytes regexp/syntax time internal/syscall/unix internal/syscall/execenv regexp context internal/poll internal/fmtsort os fmt net net/url blitiri.com.ar/go/spf dh_auto_test -i -O--buildsystem=golang cd obj-x86_64-linux-gnu && go test -vet=off -v -p 4 blitiri.com.ar/go/spf === RUN TestBasic TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "" TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "" TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1" TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 " TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 -" TestBasic: spf.go:277: permerror, unknown field TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 all" TestBasic: spf.go:237: pass matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 exp=blah +all" TestBasic: spf.go:270: exp= not used, skipping TestBasic: spf.go:237: pass matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 +all" TestBasic: spf.go:237: pass matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 -all " TestBasic: spf.go:237: fail matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ~all" TestBasic: spf.go:237: softfail matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ?all" TestBasic: spf.go:237: neutral matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a ~all" TestBasic: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "domain" {-1 -1} TestBasic: spf.go:237: softfail matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a/24" TestBasic: spf.go:526: masks on "a/24": ["a/24" "" "" "/24" "24" "" ""] "domain" {24 -1} TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a:d1110/24" TestBasic: spf.go:526: masks on "a:d1110/24": ["a:d1110/24" ":d1110" "d1110" "/24" "24" "" ""] "d1110" {24 -1} TestBasic: spf.go:561: mx matched 1.1.1.1, 1.1.1.0, {24 -1} TestBasic: spf.go:246: a ok, pass matched 'a' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a:d1110/montoto" TestBasic: spf.go:246: a ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a:d1110/99" TestBasic: spf.go:246: a ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a:d1110/32" TestBasic: spf.go:526: masks on "a:d1110/32": ["a:d1110/32" ":d1110" "d1110" "/32" "32" "" ""] "d1110" {32 -1} TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a:d1110" TestBasic: spf.go:526: masks on "a:d1110": ["a:d1110" ":d1110" "d1110" "" "" "" ""] "d1110" {-1 -1} TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a:d1111" TestBasic: spf.go:526: masks on "a:d1111": ["a:d1111" ":d1111" "d1111" "" "" "" ""] "d1111" {-1 -1} TestBasic: spf.go:561: mx matched 1.1.1.1, 1.1.1.1, {-1 -1} TestBasic: spf.go:246: a ok, pass matched 'a' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 a:nothing/24" TestBasic: spf.go:526: masks on "a:nothing/24": ["a:nothing/24" ":nothing" "nothing" "/24" "24" "" ""] "nothing" {24 -1} TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx" TestBasic: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "domain" {-1 -1} TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx/24" TestBasic: spf.go:526: masks on "mx/24": ["mx/24" "" "" "/24" "24" "" ""] "domain" {24 -1} TestBasic: spf.go:284: fallback to neutral TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx:a/montoto ~all" TestBasic: spf.go:526: masks on "mx:a/montoto": [] "domain" {-1 -1} TestBasic: spf.go:246: a ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx:d1110/24 ~all" TestBasic: spf.go:526: masks on "mx:d1110/24": ["mx:d1110/24" ":d1110" "d1110" "/24" "24" "" ""] "d1110" {24 -1} TestBasic: spf.go:615: mx matched 1.1.1.1, 1.1.1.0, {24 -1} TestBasic: spf.go:251: mx ok, pass matched 'mx' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx:d1110/24//100 ~all" TestBasic: spf.go:526: masks on "mx:d1110/24//100": ["mx:d1110/24//100" ":d1110" "d1110" "/24" "24" "//100" "100"] "d1110" {24 100} TestBasic: spf.go:615: mx matched 1.1.1.1, 1.1.1.0, {24 100} TestBasic: spf.go:251: mx ok, pass matched 'mx' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx:d1110/24//129 ~all" TestBasic: spf.go:251: mx ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx:d1110/24/100 ~all" TestBasic: spf.go:526: masks on "mx:d1110/24/100": [] "domain" {-1 -1} TestBasic: spf.go:251: mx ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 mx:d1110/99 ~all" TestBasic: spf.go:251: mx ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ip4:1.2.3.4 ~all" TestBasic: spf.go:237: softfail matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ip6:12 ~all" TestBasic: spf.go:256: ip ok, permerror invalid ipX value TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 -all" TestBasic: spf.go:256: ip ok, pass matched 'ip' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ip4:1.1.1.1/24 -all" TestBasic: spf.go:256: ip ok, pass matched 'ip' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ip4:1.1.1.1/lala -all" TestBasic: spf.go:256: ip ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ip4:1.1.1.1/33 -all" TestBasic: spf.go:256: ip ok, permerror invalid mask TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 include:doesnotexist" TestBasic: spf.go:160: check doesnotexist 2 TestBasic: spf.go:176: dns record "" TestBasic: spf.go:241: include ok, permerror no DNS record found TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ptr -all" TestBasic: spf.go:398: ptr forward resolution "lalala." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "xx.domain." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "d1111." -> ["1.1.1.1"] TestBasic: spf.go:407: ptr evaluating "domain" in ["lalala." "xx.domain." "d1111."] TestBasic: spf.go:261: ptr ok, pass matched 'ptr' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ptr:d1111 -all" TestBasic: spf.go:398: ptr forward resolution "lalala." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "xx.domain." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "d1111." -> ["1.1.1.1"] TestBasic: spf.go:407: ptr evaluating "d1111" in ["lalala." "xx.domain." "d1111."] TestBasic: spf.go:261: ptr ok, pass matched 'ptr' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ptr:lalala -all" TestBasic: spf.go:398: ptr forward resolution "lalala." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "xx.domain." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "d1111." -> ["1.1.1.1"] TestBasic: spf.go:407: ptr evaluating "lalala" in ["lalala." "xx.domain." "d1111."] TestBasic: spf.go:261: ptr ok, pass matched 'ptr' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 ptr:doesnotexist -all" TestBasic: spf.go:398: ptr forward resolution "lalala." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "xx.domain." -> ["1.1.1.1"] TestBasic: spf.go:398: ptr forward resolution "d1111." -> ["1.1.1.1"] TestBasic: spf.go:407: ptr evaluating "doesnotexist" in ["lalala." "xx.domain." "d1111."] TestBasic: spf.go:237: fail matched all TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 blah" TestBasic: spf.go:277: permerror, unknown field TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 exists:d1111 -all" TestBasic: spf.go:266: exists ok, pass matched 'exists' TestBasic: spf.go:114: check host "1.1.1.1" "domain" TestBasic: spf.go:160: check domain 1 TestBasic: spf.go:176: dns record "v=spf1 redirect=" TestBasic: spf.go:273: redirect, "redirect=" --- PASS: TestBasic (0.00s) === RUN TestIPv6 TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 all" TestIPv6: spf.go:237: pass matched all TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 a ~all" TestIPv6: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "domain" {-1 -1} TestIPv6: spf.go:237: softfail matched all TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 a/24" TestIPv6: spf.go:526: masks on "a/24": ["a/24" "" "" "/24" "24" "" ""] "domain" {24 -1} TestIPv6: spf.go:284: fallback to neutral TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 a:d6660//24" TestIPv6: spf.go:526: masks on "a:d6660//24": ["a:d6660//24" ":d6660" "d6660" "" "" "//24" "24"] "d6660" {-1 24} TestIPv6: spf.go:561: mx matched 2001:db8::68, 2001:db8::, {-1 24} TestIPv6: spf.go:246: a ok, pass matched 'a' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 a:d6660/24//100" TestIPv6: spf.go:526: masks on "a:d6660/24//100": ["a:d6660/24//100" ":d6660" "d6660" "/24" "24" "//100" "100"] "d6660" {24 100} TestIPv6: spf.go:561: mx matched 2001:db8::68, 2001:db8::, {24 100} TestIPv6: spf.go:246: a ok, pass matched 'a' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 a:d6660" TestIPv6: spf.go:526: masks on "a:d6660": ["a:d6660" ":d6660" "d6660" "" "" "" ""] "d6660" {-1 -1} TestIPv6: spf.go:284: fallback to neutral TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 a:d6666" TestIPv6: spf.go:526: masks on "a:d6666": ["a:d6666" ":d6666" "d6666" "" "" "" ""] "d6666" {-1 -1} TestIPv6: spf.go:561: mx matched 2001:db8::68, 2001:db8::68, {-1 -1} TestIPv6: spf.go:246: a ok, pass matched 'a' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 a:nothing//24" TestIPv6: spf.go:526: masks on "a:nothing//24": ["a:nothing//24" ":nothing" "nothing" "" "" "//24" "24"] "nothing" {-1 24} TestIPv6: spf.go:284: fallback to neutral TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 mx:d6660//24 ~all" TestIPv6: spf.go:526: masks on "mx:d6660//24": ["mx:d6660//24" ":d6660" "d6660" "" "" "//24" "24"] "d6660" {-1 24} TestIPv6: spf.go:615: mx matched 2001:db8::68, 2001:db8::, {-1 24} TestIPv6: spf.go:251: mx ok, pass matched 'mx' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 mx:d6660/24//100 ~all" TestIPv6: spf.go:526: masks on "mx:d6660/24//100": ["mx:d6660/24//100" ":d6660" "d6660" "/24" "24" "//100" "100"] "d6660" {24 100} TestIPv6: spf.go:615: mx matched 2001:db8::68, 2001:db8::, {24 100} TestIPv6: spf.go:251: mx ok, pass matched 'mx' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 mx:d6660/24/100 ~all" TestIPv6: spf.go:526: masks on "mx:d6660/24/100": [] "domain" {-1 -1} TestIPv6: spf.go:251: mx ok, permerror invalid mask TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 ip6:2001:db8::68 ~all" TestIPv6: spf.go:256: ip ok, pass matched 'ip' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 ip6:2001:db8::1/24 ~all" TestIPv6: spf.go:256: ip ok, pass matched 'ip' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 ip6:2001:db8::1/100 ~all" TestIPv6: spf.go:256: ip ok, pass matched 'ip' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 ptr -all" TestIPv6: spf.go:398: ptr forward resolution "sonlas6." -> ["2001:db8::68"] TestIPv6: spf.go:398: ptr forward resolution "domain." -> ["1.1.1.1"] TestIPv6: spf.go:398: ptr forward resolution "d6666." -> ["2001:db8::68"] TestIPv6: spf.go:407: ptr evaluating "domain" in ["sonlas6." "domain." "d6666."] TestIPv6: spf.go:261: ptr ok, pass matched 'ptr' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 ptr:d6666 -all" TestIPv6: spf.go:398: ptr forward resolution "sonlas6." -> ["2001:db8::68"] TestIPv6: spf.go:398: ptr forward resolution "domain." -> ["1.1.1.1"] TestIPv6: spf.go:398: ptr forward resolution "d6666." -> ["2001:db8::68"] TestIPv6: spf.go:407: ptr evaluating "d6666" in ["sonlas6." "domain." "d6666."] TestIPv6: spf.go:261: ptr ok, pass matched 'ptr' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 ptr:sonlas6 -all" TestIPv6: spf.go:398: ptr forward resolution "sonlas6." -> ["2001:db8::68"] TestIPv6: spf.go:398: ptr forward resolution "domain." -> ["1.1.1.1"] TestIPv6: spf.go:398: ptr forward resolution "d6666." -> ["2001:db8::68"] TestIPv6: spf.go:407: ptr evaluating "sonlas6" in ["sonlas6." "domain." "d6666."] TestIPv6: spf.go:261: ptr ok, pass matched 'ptr' TestIPv6: spf.go:114: check host "2001:db8::68" "domain" TestIPv6: spf.go:160: check domain 1 TestIPv6: spf.go:176: dns record "v=spf1 ptr:sonlas7 -all" TestIPv6: spf.go:398: ptr forward resolution "sonlas6." -> ["2001:db8::68"] TestIPv6: spf.go:398: ptr forward resolution "domain." -> ["1.1.1.1"] TestIPv6: spf.go:398: ptr forward resolution "d6666." -> ["2001:db8::68"] TestIPv6: spf.go:407: ptr evaluating "sonlas7" in ["sonlas6." "domain." "d6666."] TestIPv6: spf.go:237: fail matched all --- PASS: TestIPv6 (0.00s) === RUN TestInclude TestInclude: spf.go:114: check host "1.1.1.1" "domain" TestInclude: spf.go:160: check domain 1 TestInclude: spf.go:176: dns record "v=spf1 include:domain2 ip4:1.1.1.1" TestInclude: spf.go:160: check domain2 2 TestInclude: spf.go:176: dns record "" TestInclude: spf.go:241: include ok, permerror no DNS record found TestInclude: spf.go:114: check host "1.1.1.1" "domain" TestInclude: spf.go:160: check domain 1 TestInclude: spf.go:176: dns record "v=spf1 include:domain2 ip4:1.1.1.1" TestInclude: spf.go:160: check domain2 2 TestInclude: spf.go:176: dns record "v=spf1 all" TestInclude: spf.go:237: pass matched all TestInclude: spf.go:241: include ok, pass matched 'all' TestInclude: spf.go:114: check host "1.1.1.1" "domain" TestInclude: spf.go:160: check domain 1 TestInclude: spf.go:176: dns record "v=spf1 include:domain2 ip4:1.1.1.1" TestInclude: spf.go:160: check domain2 2 TestInclude: spf.go:176: dns record "v=spf1" TestInclude: spf.go:284: fallback to neutral TestInclude: spf.go:256: ip ok, pass matched 'ip' TestInclude: spf.go:114: check host "1.1.1.1" "domain" TestInclude: spf.go:160: check domain 1 TestInclude: spf.go:176: dns record "v=spf1 include:domain2 ip4:1.1.1.1" TestInclude: spf.go:160: check domain2 2 TestInclude: spf.go:176: dns record "v=spf1 -all" TestInclude: spf.go:237: fail matched all TestInclude: spf.go:256: ip ok, pass matched 'ip' --- PASS: TestInclude (0.00s) === RUN TestRecursionLimit TestRecursionLimit: spf.go:114: check host "1.1.1.1" "domain" TestRecursionLimit: spf.go:160: check domain 1 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 2 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 3 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 4 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 5 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 6 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 7 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 8 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 9 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 10 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:160: check domain 11 TestRecursionLimit: spf.go:176: dns record "v=spf1 include:domain ~all" TestRecursionLimit: spf.go:218: lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached TestRecursionLimit: spf.go:241: include ok, permerror lookup limit reached --- PASS: TestRecursionLimit (0.00s) === RUN TestRedirect TestRedirect: spf.go:114: check host "1.1.1.1" "domain" TestRedirect: spf.go:160: check domain 1 TestRedirect: spf.go:176: dns record "v=spf1 redirect=domain2" TestRedirect: spf.go:273: redirect, "redirect=domain2" TestRedirect: spf.go:160: check domain2 2 TestRedirect: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 -all" TestRedirect: spf.go:256: ip ok, pass matched 'ip' --- PASS: TestRedirect (0.00s) === RUN TestInvalidRedirect TestInvalidRedirect: spf.go:114: check host "1.1.1.1" "doesnotexist" TestInvalidRedirect: spf.go:160: check doesnotexist 1 TestInvalidRedirect: spf.go:176: dns record "" TestInvalidRedirect: spf.go:114: check host "1.1.1.1" "domain" TestInvalidRedirect: spf.go:160: check domain 1 TestInvalidRedirect: spf.go:176: dns record "v=spf1 redirect=doesnotexist" TestInvalidRedirect: spf.go:273: redirect, "redirect=doesnotexist" TestInvalidRedirect: spf.go:160: check doesnotexist 2 TestInvalidRedirect: spf.go:176: dns record "" --- PASS: TestInvalidRedirect (0.00s) === RUN TestRedirectOrder TestRedirectOrder: spf.go:114: check host "1.1.1.1" "domain" TestRedirectOrder: spf.go:160: check domain 1 TestRedirectOrder: spf.go:176: dns record "v=spf1 redirect=faildom" TestRedirectOrder: spf.go:273: redirect, "redirect=faildom" TestRedirectOrder: spf.go:160: check faildom 2 TestRedirectOrder: spf.go:176: dns record "v=spf1 -all" TestRedirectOrder: spf.go:237: fail matched all TestRedirectOrder: spf.go:114: check host "1.1.1.1" "domain" TestRedirectOrder: spf.go:160: check domain 1 TestRedirectOrder: spf.go:176: dns record "v=spf1 redirect=faildom all" TestRedirectOrder: spf.go:237: pass matched all --- PASS: TestRedirectOrder (0.00s) === RUN TestNoRecord TestNoRecord: spf.go:114: check host "1.1.1.1" "d1" TestNoRecord: spf.go:160: check d1 1 TestNoRecord: spf.go:176: dns record "" TestNoRecord: spf.go:114: check host "1.1.1.1" "d2" TestNoRecord: spf.go:160: check d2 1 TestNoRecord: spf.go:176: dns record "" TestNoRecord: spf.go:114: check host "1.1.1.1" "d3" TestNoRecord: spf.go:160: check d3 1 TestNoRecord: spf.go:176: dns record "" TestNoRecord: spf.go:114: check host "1.1.1.1" "nospf" TestNoRecord: spf.go:160: check nospf 1 TestNoRecord: spf.go:173: dns perm error: no such domain --- PASS: TestNoRecord (0.00s) === RUN TestDNSTemporaryErrors TestDNSTemporaryErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSTemporaryErrors: spf.go:160: check domain 1 TestDNSTemporaryErrors: spf.go:176: dns record "v=spf1 include:tmperr" TestDNSTemporaryErrors: spf.go:160: check tmperr 2 TestDNSTemporaryErrors: spf.go:164: dns temp error: lookup : temporary error for testing TestDNSTemporaryErrors: spf.go:241: include ok, temperror lookup : temporary error for testing TestDNSTemporaryErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSTemporaryErrors: spf.go:160: check domain 1 TestDNSTemporaryErrors: spf.go:176: dns record "v=spf1 a:tmperr" TestDNSTemporaryErrors: spf.go:526: masks on "a:tmperr": ["a:tmperr" ":tmperr" "tmperr" "" "" "" ""] "tmperr" {-1 -1} TestDNSTemporaryErrors: spf.go:246: a ok, temperror lookup : temporary error for testing TestDNSTemporaryErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSTemporaryErrors: spf.go:160: check domain 1 TestDNSTemporaryErrors: spf.go:176: dns record "v=spf1 mx:tmperr" TestDNSTemporaryErrors: spf.go:526: masks on "mx:tmperr": ["mx:tmperr" ":tmperr" "tmperr" "" "" "" ""] "tmperr" {-1 -1} TestDNSTemporaryErrors: spf.go:251: mx ok, temperror lookup : temporary error for testing TestDNSTemporaryErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSTemporaryErrors: spf.go:160: check domain 1 TestDNSTemporaryErrors: spf.go:176: dns record "v=spf1 ptr:tmperr" TestDNSTemporaryErrors: spf.go:261: ptr ok, temperror lookup : temporary error for testing TestDNSTemporaryErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSTemporaryErrors: spf.go:160: check domain 1 TestDNSTemporaryErrors: spf.go:176: dns record "v=spf1 mx:tmpmx" TestDNSTemporaryErrors: spf.go:526: masks on "mx:tmpmx": ["mx:tmpmx" ":tmpmx" "tmpmx" "" "" "" ""] "tmpmx" {-1 -1} TestDNSTemporaryErrors: spf.go:251: mx ok, temperror lookup : temporary error for testing --- PASS: TestDNSTemporaryErrors (0.00s) === RUN TestDNSPermanentErrors TestDNSPermanentErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSPermanentErrors: spf.go:160: check domain 1 TestDNSPermanentErrors: spf.go:176: dns record "v=spf1 include:tmperr" TestDNSPermanentErrors: spf.go:160: check tmperr 2 TestDNSPermanentErrors: spf.go:173: dns perm error: lookup : permanent error for testing TestDNSPermanentErrors: spf.go:241: include ok, permerror lookup : permanent error for testing TestDNSPermanentErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSPermanentErrors: spf.go:160: check domain 1 TestDNSPermanentErrors: spf.go:176: dns record "v=spf1 a:tmperr" TestDNSPermanentErrors: spf.go:526: masks on "a:tmperr": ["a:tmperr" ":tmperr" "tmperr" "" "" "" ""] "tmperr" {-1 -1} TestDNSPermanentErrors: spf.go:284: fallback to neutral TestDNSPermanentErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSPermanentErrors: spf.go:160: check domain 1 TestDNSPermanentErrors: spf.go:176: dns record "v=spf1 mx:tmperr" TestDNSPermanentErrors: spf.go:526: masks on "mx:tmperr": ["mx:tmperr" ":tmperr" "tmperr" "" "" "" ""] "tmperr" {-1 -1} TestDNSPermanentErrors: spf.go:284: fallback to neutral TestDNSPermanentErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSPermanentErrors: spf.go:160: check domain 1 TestDNSPermanentErrors: spf.go:176: dns record "v=spf1 ptr:tmperr" TestDNSPermanentErrors: spf.go:284: fallback to neutral TestDNSPermanentErrors: spf.go:114: check host "1.1.1.1" "domain" TestDNSPermanentErrors: spf.go:160: check domain 1 TestDNSPermanentErrors: spf.go:176: dns record "v=spf1 mx:tmpmx" TestDNSPermanentErrors: spf.go:526: masks on "mx:tmpmx": ["mx:tmpmx" ":tmpmx" "tmpmx" "" "" "" ""] "tmpmx" {-1 -1} TestDNSPermanentErrors: spf.go:284: fallback to neutral --- PASS: TestDNSPermanentErrors (0.00s) === RUN TestMacros TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 ptr:%{fff} -all" TestMacros: spf.go:708: macro "fff": [] TestMacros: spf.go:261: ptr ok, permerror invalid macro TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 mx:%{fff} -all" TestMacros: spf.go:526: masks on "mx:%{fff}": ["mx:%{fff}" ":%{fff}" "%{fff}" "" "" "" ""] "%{fff}" {-1 -1} TestMacros: spf.go:708: macro "fff": [] TestMacros: spf.go:251: mx ok, permerror invalid macro TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 redirect=%{fff}" TestMacros: spf.go:273: redirect, "redirect=%{fff}" TestMacros: spf.go:708: macro "fff": [] TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 a:%{o0}" TestMacros: spf.go:526: masks on "a:%{o0}": ["a:%{o0}" ":%{o0}" "%{o0}" "" "" "" ""] "%{o0}" {-1 -1} TestMacros: spf.go:708: macro "o0": ["o0" "o" "0" "" ""] TestMacros: spf.go:246: a ok, permerror invalid macro TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 +a:sss-%{s}-sss" TestMacros: spf.go:526: masks on "a:sss-%{s}-sss": ["a:sss-%{s}-sss" ":sss-%{s}-sss" "sss-%{s}-sss" "" "" "" ""] "sss-%{s}-sss" {-1 -1} TestMacros: spf.go:708: macro "s": ["s" "s" "" "" ""] TestMacros: spf.go:805: macro expanded "sss-%{s}-sss" to "sss-user@domain-sss" TestMacros: spf.go:561: mx matched 2001:db8::68, 2001:db8::68, {-1 -1} TestMacros: spf.go:246: a ok, pass matched 'a' TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 +a:ooo-%{o}-ooo" TestMacros: spf.go:526: masks on "a:ooo-%{o}-ooo": ["a:ooo-%{o}-ooo" ":ooo-%{o}-ooo" "ooo-%{o}-ooo" "" "" "" ""] "ooo-%{o}-ooo" {-1 -1} TestMacros: spf.go:708: macro "o": ["o" "o" "" "" ""] TestMacros: spf.go:805: macro expanded "ooo-%{o}-ooo" to "ooo-domain-ooo" TestMacros: spf.go:561: mx matched 2001:db8::68, 2001:db8::68, {-1 -1} TestMacros: spf.go:246: a ok, pass matched 'a' TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 +a:OOO-%{O}-OOO" TestMacros: spf.go:526: masks on "a:OOO-%{O}-OOO": ["a:OOO-%{O}-OOO" ":OOO-%{O}-OOO" "OOO-%{O}-OOO" "" "" "" ""] "OOO-%{O}-OOO" {-1 -1} TestMacros: spf.go:708: macro "O": ["O" "O" "" "" ""] TestMacros: spf.go:805: macro expanded "OOO-%{O}-OOO" to "OOO-domain-OOO" TestMacros: spf.go:561: mx matched 2001:db8::68, 2001:db8::68, {-1 -1} TestMacros: spf.go:246: a ok, pass matched 'a' TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 +a:ppp-%{p}-ppp" TestMacros: spf.go:526: masks on "a:ppp-%{p}-ppp": ["a:ppp-%{p}-ppp" ":ppp-%{p}-ppp" "ppp-%{p}-ppp" "" "" "" ""] "ppp-%{p}-ppp" {-1 -1} TestMacros: spf.go:708: macro "p": ["p" "p" "" "" ""] TestMacros: spf.go:805: macro expanded "ppp-%{p}-ppp" to "ppp-unknown-ppp" TestMacros: spf.go:561: mx matched 2001:db8::68, 2001:db8::68, {-1 -1} TestMacros: spf.go:246: a ok, pass matched 'a' TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 +a:vvv-%{v}-vvv" TestMacros: spf.go:526: masks on "a:vvv-%{v}-vvv": ["a:vvv-%{v}-vvv" ":vvv-%{v}-vvv" "vvv-%{v}-vvv" "" "" "" ""] "vvv-%{v}-vvv" {-1 -1} TestMacros: spf.go:708: macro "v": ["v" "v" "" "" ""] TestMacros: spf.go:805: macro expanded "vvv-%{v}-vvv" to "vvv-ip6-vvv" TestMacros: spf.go:561: mx matched 2001:db8::68, 2001:db8::68, {-1 -1} TestMacros: spf.go:246: a ok, pass matched 'a' TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 a:%{x}" TestMacros: spf.go:526: masks on "a:%{x}": ["a:%{x}" ":%{x}" "%{x}" "" "" "" ""] "%{x}" {-1 -1} TestMacros: spf.go:708: macro "x": [] TestMacros: spf.go:246: a ok, permerror invalid macro TestMacros: spf.go:129: check host with sender "2001:db8::68" "helo" "user@domain" ("domain") TestMacros: spf.go:160: check domain 1 TestMacros: spf.go:176: dns record "v=spf1 +a:ooo-%{o7}-ooo" TestMacros: spf.go:526: masks on "a:ooo-%{o7}-ooo": ["a:ooo-%{o7}-ooo" ":ooo-%{o7}-ooo" "ooo-%{o7}-ooo" "" "" "" ""] "ooo-%{o7}-ooo" {-1 -1} TestMacros: spf.go:708: macro "o7": ["o7" "o" "7" "" ""] TestMacros: spf.go:805: macro expanded "ooo-%{o7}-ooo" to "ooo-domain-ooo" TestMacros: spf.go:561: mx matched 2001:db8::68, 2001:db8::68, {-1 -1} TestMacros: spf.go:246: a ok, pass matched 'a' --- PASS: TestMacros (0.00s) === RUN TestMacrosV4 TestMacrosV4: spf.go:129: check host with sender "1.1.1.1" "helo" "user@domain.com" ("domain.com") TestMacrosV4: spf.go:160: check domain.com 1 TestMacrosV4: spf.go:176: dns record "v=spf1 +a:sr-%{sr}-sr" TestMacrosV4: spf.go:526: masks on "a:sr-%{sr}-sr": ["a:sr-%{sr}-sr" ":sr-%{sr}-sr" "sr-%{sr}-sr" "" "" "" ""] "sr-%{sr}-sr" {-1 -1} TestMacrosV4: spf.go:708: macro "sr": ["sr" "s" "" "r" ""] TestMacrosV4: spf.go:805: macro expanded "sr-%{sr}-sr" to "sr-com.user@domain-sr" TestMacrosV4: spf.go:561: mx matched 1.1.1.1, 1.1.1.1, {-1 -1} TestMacrosV4: spf.go:246: a ok, pass matched 'a' TestMacrosV4: spf.go:129: check host with sender "1.1.1.1" "helo" "user@domain.com" ("domain.com") TestMacrosV4: spf.go:160: check domain.com 1 TestMacrosV4: spf.go:176: dns record "v=spf1 +a:sra-%{sr.}-sra" TestMacrosV4: spf.go:526: masks on "a:sra-%{sr.}-sra": ["a:sra-%{sr.}-sra" ":sra-%{sr.}-sra" "sra-%{sr.}-sra" "" "" "" ""] "sra-%{sr.}-sra" {-1 -1} TestMacrosV4: spf.go:708: macro "sr.": ["sr." "s" "" "r" "."] TestMacrosV4: spf.go:805: macro expanded "sra-%{sr.}-sra" to "sra-com.user@domain-sra" TestMacrosV4: spf.go:561: mx matched 1.1.1.1, 1.1.1.1, {-1 -1} TestMacrosV4: spf.go:246: a ok, pass matched 'a' TestMacrosV4: spf.go:129: check host with sender "1.1.1.1" "helo" "user@domain.com" ("domain.com") TestMacrosV4: spf.go:160: check domain.com 1 TestMacrosV4: spf.go:176: dns record "v=spf1 +a:o7-%{o7}-o7" TestMacrosV4: spf.go:526: masks on "a:o7-%{o7}-o7": ["a:o7-%{o7}-o7" ":o7-%{o7}-o7" "o7-%{o7}-o7" "" "" "" ""] "o7-%{o7}-o7" {-1 -1} TestMacrosV4: spf.go:708: macro "o7": ["o7" "o" "7" "" ""] TestMacrosV4: spf.go:805: macro expanded "o7-%{o7}-o7" to "o7-domain.com-o7" TestMacrosV4: spf.go:561: mx matched 1.1.1.1, 1.1.1.1, {-1 -1} TestMacrosV4: spf.go:246: a ok, pass matched 'a' TestMacrosV4: spf.go:129: check host with sender "1.1.1.1" "helo" "user@domain.com" ("domain.com") TestMacrosV4: spf.go:160: check domain.com 1 TestMacrosV4: spf.go:176: dns record "v=spf1 +a:o1-%{o1}-o1" TestMacrosV4: spf.go:526: masks on "a:o1-%{o1}-o1": ["a:o1-%{o1}-o1" ":o1-%{o1}-o1" "o1-%{o1}-o1" "" "" "" ""] "o1-%{o1}-o1" {-1 -1} TestMacrosV4: spf.go:708: macro "o1": ["o1" "o" "1" "" ""] TestMacrosV4: spf.go:805: macro expanded "o1-%{o1}-o1" to "o1-com-o1" TestMacrosV4: spf.go:561: mx matched 1.1.1.1, 1.1.1.1, {-1 -1} TestMacrosV4: spf.go:246: a ok, pass matched 'a' TestMacrosV4: spf.go:129: check host with sender "1.1.1.1" "helo" "user@domain.com" ("domain.com") TestMacrosV4: spf.go:160: check domain.com 1 TestMacrosV4: spf.go:176: dns record "v=spf1 +a:o1r-%{o1r}-o1r" TestMacrosV4: spf.go:526: masks on "a:o1r-%{o1r}-o1r": ["a:o1r-%{o1r}-o1r" ":o1r-%{o1r}-o1r" "o1r-%{o1r}-o1r" "" "" "" ""] "o1r-%{o1r}-o1r" {-1 -1} TestMacrosV4: spf.go:708: macro "o1r": ["o1r" "o" "1" "r" ""] TestMacrosV4: spf.go:805: macro expanded "o1r-%{o1r}-o1r" to "o1r-domain-o1r" TestMacrosV4: spf.go:561: mx matched 1.1.1.1, 1.1.1.1, {-1 -1} TestMacrosV4: spf.go:246: a ok, pass matched 'a' TestMacrosV4: spf.go:129: check host with sender "1.1.1.1" "helo" "user@domain.com" ("domain.com") TestMacrosV4: spf.go:160: check domain.com 1 TestMacrosV4: spf.go:176: dns record "v=spf1 +a:vvv-%{v}-vvv" TestMacrosV4: spf.go:526: masks on "a:vvv-%{v}-vvv": ["a:vvv-%{v}-vvv" ":vvv-%{v}-vvv" "vvv-%{v}-vvv" "" "" "" ""] "vvv-%{v}-vvv" {-1 -1} TestMacrosV4: spf.go:708: macro "v": ["v" "v" "" "" ""] TestMacrosV4: spf.go:805: macro expanded "vvv-%{v}-vvv" to "vvv-in-addr-vvv" TestMacrosV4: spf.go:561: mx matched 1.1.1.1, 1.1.1.1, {-1 -1} TestMacrosV4: spf.go:246: a ok, pass matched 'a' --- PASS: TestMacrosV4 (0.00s) === RUN TestSimple TestSimple: yml_test.go:152: suite: Simple successes TestSimple: yml_test.go:157: domain example.net TestSimple: yml_test.go:159: SPF: [v=spf1 +all] TestSimple: yml_test.go:225: test test1 TestSimple: yml_test.go:227: checkhost 1.2.3.4 foobar@example.net TestSimple: spf.go:129: check host with sender "1.2.3.4" "example.net" "foobar@example.net" ("example.net") TestSimple: spf.go:160: check example.net 1 TestSimple: spf.go:176: dns record "v=spf1 +all" TestSimple: spf.go:237: pass matched all TestSimple: yml_test.go:234: success: pass, matched 'all' [test1] TestSimple: yml_test.go:225: test test2 TestSimple: yml_test.go:227: checkhost 1.2.3.4 foobar@example.net TestSimple: spf.go:129: check host with sender "1.2.3.4" "blargh" "foobar@example.net" ("example.net") TestSimple: spf.go:160: check example.net 1 TestSimple: spf.go:176: dns record "v=spf1 +all" TestSimple: spf.go:237: pass matched all TestSimple: yml_test.go:234: success: pass, matched 'all' [test2] TestSimple: yml_test.go:152: suite: Simple failures TestSimple: yml_test.go:157: domain example.net TestSimple: yml_test.go:159: SPF: [v=spf1 -all] TestSimple: yml_test.go:225: test test1 TestSimple: yml_test.go:227: checkhost 1.2.3.4 foobar@example.net TestSimple: spf.go:129: check host with sender "1.2.3.4" "example.net" "foobar@example.net" ("example.net") TestSimple: spf.go:160: check example.net 1 TestSimple: spf.go:176: dns record "v=spf1 -all" TestSimple: spf.go:237: fail matched all TestSimple: yml_test.go:234: success: fail, matched 'all' [test1] TestSimple: yml_test.go:225: test test2 TestSimple: yml_test.go:227: checkhost 1.2.3.4 foobar@example.net TestSimple: spf.go:129: check host with sender "1.2.3.4" "blargh" "foobar@example.net" ("example.net") TestSimple: spf.go:160: check example.net 1 TestSimple: spf.go:176: dns record "v=spf1 -all" TestSimple: spf.go:237: fail matched all TestSimple: yml_test.go:234: success: fail, matched 'all' [test2] --- PASS: TestSimple (0.00s) === RUN TestRFC4408 TestRFC4408: yml_test.go:152: suite: Initial processing TestRFC4408: yml_test.go:157: domain example.com TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain a.example.net TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=exp.example.net] TestRFC4408: yml_test.go:157: domain hosed3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:example.net –all] TestRFC4408: yml_test.go:157: domain example.net TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=exp.example.net] TestRFC4408: yml_test.go:157: domain exp.example.net TestRFC4408: yml_test.go:159: TXT: [%{l}] TestRFC4408: yml_test.go:157: domain a12345678901234567890123456789012345678901234567890123456789012.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:157: domain hosed.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:garbage.example.net -all] TestRFC4408: yml_test.go:157: domain hosed2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 €a:example.net -all] TestRFC4408: yml_test.go:157: domain nothosed.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:example.net -all] TestRFC4408: yml_test.go:159: SPF: [–] TestRFC4408: yml_test.go:157: domain fine.example.com TestRFC4408: yml_test.go:159: TXT: [v=spf1 a -all] TestRFC4408: yml_test.go:225: test helo-domain-literal TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "[1.2.3.5]" "" ("[1.2.3.5]") TestRFC4408: spf.go:160: check [1.2.3.5] 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [helo-domain-literal] TestRFC4408: yml_test.go:225: test nolocalpart TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 @example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "@example.net" ("example.net") TestRFC4408: spf.go:160: check example.net 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=exp.example.net" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [nolocalpart] TestRFC4408: yml_test.go:225: test non-ascii-non-spf TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foobar@nothosed.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@nothosed.example.com" ("nothosed.example.com") TestRFC4408: spf.go:160: check nothosed.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:example.net -all" TestRFC4408: spf.go:526: masks on "a:example.net": ["a:example.net" ":example.net" "example.net" "" "" "" ""] "example.net" {-1 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [non-ascii-non-spf] TestRFC4408: yml_test.go:225: test emptylabel TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 lyme.eater@A...example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "mail.example.net" "lyme.eater@A...example.com" ("A...example.com") TestRFC4408: spf.go:160: check A...example.com 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [emptylabel] TestRFC4408: yml_test.go:225: test longlabel TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "mail.example.net" "lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com" ("A12345678901234567890123456789012345678901234567890123456789012.example.com") TestRFC4408: spf.go:160: check A12345678901234567890123456789012345678901234567890123456789012.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [longlabel] TestRFC4408: yml_test.go:225: test helo-not-fqdn TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "A2345678" "" ("A2345678") TestRFC4408: spf.go:160: check A2345678 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [helo-not-fqdn] TestRFC4408: yml_test.go:225: test domain-literal TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 foo@[1.2.3.5] TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "OEMCOMPUTER" "foo@[1.2.3.5]" ("[1.2.3.5]") TestRFC4408: spf.go:160: check [1.2.3.5] 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [domain-literal] TestRFC4408: yml_test.go:225: test non-ascii-result TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foobar@hosed3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@hosed3.example.com" ("hosed3.example.com") TestRFC4408: spf.go:160: check hosed3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:example.net \u0096all" TestRFC4408: spf.go:526: masks on "a:example.net": ["a:example.net" ":example.net" "example.net" "" "" "" ""] "example.net" {-1 -1} TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [non-ascii-result] TestRFC4408: yml_test.go:225: test two-spaces TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 actually@fine.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "hosed" "actually@fine.example.com" ("fine.example.com") TestRFC4408: spf.go:160: check fine.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a -all" TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "fine.example.com" {-1 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [two-spaces] TestRFC4408: yml_test.go:225: test toolonglabel TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "mail.example.net" "lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com" ("A123456789012345678901234567890123456789012345678901234567890123.example.com") TestRFC4408: spf.go:160: check A123456789012345678901234567890123456789012345678901234567890123.example.com 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [toolonglabel] TestRFC4408: yml_test.go:152: suite: Record lookup TestRFC4408: yml_test.go:157: domain spfonly.example.net TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:159: TXT: [NONE] TestRFC4408: yml_test.go:157: domain spftimeout.example.net TestRFC4408: yml_test.go:159: TXT: [v=spf1 -all] TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain txttimeout.example.net TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:159: TXT: [NONE] TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain nospftxttimeout.example.net TestRFC4408: yml_test.go:159: SPF: [v=spf3 !a:yahoo.com -all] TestRFC4408: yml_test.go:159: TXT: [NONE] TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain alltimeout.example.net TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain both.example.net TestRFC4408: yml_test.go:159: TXT: [v=spf1 -all] TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:157: domain txtonly.example.net TestRFC4408: yml_test.go:159: TXT: [v=spf1 -all] TestRFC4408: yml_test.go:225: test spftimeout TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@spftimeout.example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@spftimeout.example.net" ("spftimeout.example.net") TestRFC4408: spf.go:160: check spftimeout.example.net 1 TestRFC4408: spf.go:164: dns temp error: lookup : test timeout error TestRFC4408: yml_test.go:234: success: temperror, lookup : test timeout error [spftimeout] TestRFC4408: yml_test.go:225: test txttimeout TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@txttimeout.example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@txttimeout.example.net" ("txttimeout.example.net") TestRFC4408: spf.go:160: check txttimeout.example.net 1 TestRFC4408: spf.go:164: dns temp error: lookup : test timeout error TestRFC4408: yml_test.go:234: success: temperror, lookup : test timeout error [txttimeout] TestRFC4408: yml_test.go:225: test nospftxttimeout TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@nospftxttimeout.example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@nospftxttimeout.example.net" ("nospftxttimeout.example.net") TestRFC4408: spf.go:160: check nospftxttimeout.example.net 1 TestRFC4408: spf.go:164: dns temp error: lookup : test timeout error TestRFC4408: yml_test.go:234: success: temperror, lookup : test timeout error [nospftxttimeout] TestRFC4408: yml_test.go:225: test alltimeout TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@alltimeout.example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@alltimeout.example.net" ("alltimeout.example.net") TestRFC4408: spf.go:160: check alltimeout.example.net 1 TestRFC4408: spf.go:164: dns temp error: lookup : test timeout error TestRFC4408: yml_test.go:234: success: temperror, lookup : test timeout error [alltimeout] TestRFC4408: yml_test.go:225: test both TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@both.example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@both.example.net" ("both.example.net") TestRFC4408: spf.go:160: check both.example.net 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [both] TestRFC4408: yml_test.go:225: test txtonly TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@txtonly.example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@txtonly.example.net" ("txtonly.example.net") TestRFC4408: spf.go:160: check txtonly.example.net 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [txtonly] TestRFC4408: yml_test.go:225: test spfonly TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@spfonly.example.net TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@spfonly.example.net" ("spfonly.example.net") TestRFC4408: spf.go:160: check spfonly.example.net 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [spfonly] TestRFC4408: yml_test.go:152: suite: Selecting records TestRFC4408: yml_test.go:157: domain example1.com TestRFC4408: yml_test.go:159: SPF: [v=spf1] TestRFC4408: yml_test.go:157: domain example4.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 +all] TestRFC4408: yml_test.go:159: TXT: [v=spf1 -all] TestRFC4408: yml_test.go:157: domain example8.com TestRFC4408: yml_test.go:159: SPF: [V=spf1 -all] TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:159: TXT: [v=spf1 +all] TestRFC4408: yml_test.go:157: domain example9.com TestRFC4408: yml_test.go:159: SPF: [v=SpF1 ~all] TestRFC4408: yml_test.go:157: domain example6.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:159: SPF: [V=sPf1 +all] TestRFC4408: yml_test.go:157: domain example7.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:157: domain example3.com TestRFC4408: yml_test.go:159: SPF: [v=spf10] TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx] TestRFC4408: yml_test.go:159: MX: {0 mail.example1.com} TestRFC4408: yml_test.go:157: domain example2.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx] TestRFC4408: yml_test.go:157: domain mail.example1.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain example5.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 +all] TestRFC4408: yml_test.go:159: TXT: [v=spf1 -all] TestRFC4408: yml_test.go:159: TXT: [v=spf1 +all] TestRFC4408: yml_test.go:225: test spfoverride TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example4.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example4.com" ("example4.com") TestRFC4408: spf.go:160: check example4.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [spfoverride] TestRFC4408: yml_test.go:225: test multispf1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example7.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example7.com" ("example7.com") TestRFC4408: spf.go:160: check example7.com 1 TestRFC4408: spf.go:168: multiple dns records TestRFC4408: yml_test.go:234: success: permerror, multiple matching DNS records [multispf1] TestRFC4408: yml_test.go:225: test multispf2 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example8.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example8.com" ("example8.com") TestRFC4408: spf.go:160: check example8.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 +all" TestRFC4408: spf.go:237: pass matched all TestRFC4408: yml_test.go:234: success: pass, matched 'all' [multispf2] TestRFC4408: yml_test.go:225: test case-insensitive TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example9.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example9.com" ("example9.com") TestRFC4408: spf.go:160: check example9.com 1 TestRFC4408: spf.go:176: dns record "v=SpF1 ~all" TestRFC4408: spf.go:237: softfail matched all TestRFC4408: yml_test.go:234: success: softfail, matched 'all' [case-insensitive] TestRFC4408: yml_test.go:225: test nospace1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example2.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example2.com" ("example2.com") TestRFC4408: spf.go:160: check example2.com 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [nospace1] TestRFC4408: yml_test.go:225: test empty TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example1.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail1.example1.com" "foo@example1.com" ("example1.com") TestRFC4408: spf.go:160: check example1.com 1 TestRFC4408: spf.go:176: dns record "v=spf1" TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [empty] TestRFC4408: yml_test.go:225: test nospace2 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example3.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example3.com" ("example3.com") TestRFC4408: spf.go:160: check example3.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx" TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "example3.com" {-1 -1} TestRFC4408: spf.go:615: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC4408: spf.go:251: mx ok, pass matched 'mx' TestRFC4408: yml_test.go:234: success: pass, matched 'mx' [nospace2] TestRFC4408: yml_test.go:225: test multitxt1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example5.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example5.com" ("example5.com") TestRFC4408: spf.go:160: check example5.com 1 TestRFC4408: spf.go:168: multiple dns records TestRFC4408: yml_test.go:234: success: permerror, multiple matching DNS records [multitxt1] TestRFC4408: yml_test.go:225: test multitxt2 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@example6.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example6.com" ("example6.com") TestRFC4408: spf.go:160: check example6.com 1 TestRFC4408: spf.go:168: multiple dns records TestRFC4408: yml_test.go:234: success: permerror, multiple matching DNS records [multitxt2] TestRFC4408: yml_test.go:225: test nospf TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@mail.example1.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@mail.example1.com" ("mail.example1.com") TestRFC4408: spf.go:160: check mail.example1.com 1 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: none, no DNS record found [nospf] TestRFC4408: yml_test.go:152: suite: Record evaluation TestRFC4408: yml_test.go:157: domain t5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 redirect=t5.example.com ~all] TestRFC4408: yml_test.go:157: domain t9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:foo-bar -all] TestRFC4408: yml_test.go:157: domain t10.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:mail.example...com -all] TestRFC4408: yml_test.go:157: domain t1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4 -all moo] TestRFC4408: yml_test.go:157: domain t4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] TestRFC4408: yml_test.go:157: domain t3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] TestRFC4408: yml_test.go:157: domain t6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] TestRFC4408: yml_test.go:157: domain t7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4] TestRFC4408: yml_test.go:157: domain t8.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] TestRFC4408: yml_test.go:157: domain t11.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] TestRFC4408: yml_test.go:157: domain t12.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:%{H}.bar -all] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain t2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] TestRFC4408: yml_test.go:225: test modifier-charset-bad2 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@t4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t4.example.com" ("t4.example.com") TestRFC4408: spf.go:160: check t4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [modifier-charset-bad2] TestRFC4408: yml_test.go:225: test invalid-domain-empty-label TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@t10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t10.example.com" ("t10.example.com") TestRFC4408: spf.go:160: check t10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:mail.example...com -all" TestRFC4408: spf.go:526: masks on "a:mail.example...com": ["a:mail.example...com" ":mail.example...com" "mail.example...com" "" "" "" ""] "mail.example...com" {-1 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [invalid-domain-empty-label] TestRFC4408: yml_test.go:225: test modifier-charset-bad1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@t3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t3.example.com" ("t3.example.com") TestRFC4408: spf.go:160: check t3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [modifier-charset-bad1] TestRFC4408: yml_test.go:225: test redirect-after-mechanisms1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@t5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t5.example.com" ("t5.example.com") TestRFC4408: spf.go:160: check t5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 redirect=t5.example.com ~all" TestRFC4408: spf.go:237: softfail matched all TestRFC4408: yml_test.go:234: success: softfail, matched 'all' [redirect-after-mechanisms1] TestRFC4408: yml_test.go:225: test default-result TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 foo@t7.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "mail.example.com" "foo@t7.example.com" ("t7.example.com") TestRFC4408: spf.go:160: check t7.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.4" TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [default-result] TestRFC4408: yml_test.go:225: test invalid-domain-long TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@t11.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t11.example.com" ("t11.example.com") TestRFC4408: spf.go:160: check t11.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" TestRFC4408: spf.go:526: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com": ["a:a123456789012345678901234567890123456789012345678901234567890123.example.com" ":a123456789012345678901234567890123456789012345678901234567890123.example.com" "a123456789012345678901234567890123456789012345678901234567890123.example.com" "" "" "" ""] "a123456789012345678901234567890123456789012345678901234567890123.example.com" {-1 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [invalid-domain-long] TestRFC4408: yml_test.go:225: test invalid-domain-long-via-macro TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@t12.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "%%%%%%%%%%%%%%%%%%%%%%" "foo@t12.example.com" ("t12.example.com") TestRFC4408: spf.go:160: check t12.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:%{H}.bar -all" TestRFC4408: spf.go:526: masks on "a:%{H}.bar": ["a:%{H}.bar" ":%{H}.bar" "%{H}.bar" "" "" "" ""] "%{H}.bar" {-1 -1} TestRFC4408: spf.go:708: macro "H": ["H" "H" "" "" ""] TestRFC4408: spf.go:805: macro expanded "%{H}.bar" to "t12.example.com.bar" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [invalid-domain-long-via-macro] TestRFC4408: yml_test.go:152: suite: ALL mechanism syntax TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all.] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all:foobar] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all/8] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ?all] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 all -all] TestRFC4408: yml_test.go:225: test all-dot TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all." TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [all-dot] TestRFC4408: yml_test.go:225: test all-arg TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all:foobar" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [all-arg] TestRFC4408: yml_test.go:225: test all-cidr TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all/8" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [all-cidr] TestRFC4408: yml_test.go:225: test all-neutral TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ?all" TestRFC4408: spf.go:237: neutral matched all TestRFC4408: yml_test.go:234: success: neutral, matched 'all' [all-neutral] TestRFC4408: yml_test.go:225: test all-double TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 all -all" TestRFC4408: spf.go:237: pass matched all TestRFC4408: yml_test.go:234: success: pass, matched 'all' [all-double] TestRFC4408: yml_test.go:152: suite: PTR mechanism syntax TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ptr -all] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ptr:] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ptr/0 -all] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ptr:example.com -all] TestRFC4408: yml_test.go:157: domain 4.3.2.1.in-addr.arpa TestRFC4408: yml_test.go:159: PTR: [e3.example.com] TestRFC4408: yml_test.go:159: PTR: [e4.example.com] TestRFC4408: yml_test.go:159: PTR: [mail.example.com] TestRFC4408: yml_test.go:157: domain 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.E.B.A.B.E.F.A.C.ip6.arpa TestRFC4408: yml_test.go:159: PTR: [e3.example.com] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ptr -all] TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:159: AAAA: [CAFE:BABE::1] TestRFC4408: yml_test.go:225: test ptr-nomatch-invalid TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ptr -all" TestRFC4408: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC4408: spf.go:398: ptr forward resolution "e4.example.com." -> [] TestRFC4408: spf.go:398: ptr forward resolution "mail.example.com." -> ["1.2.3.4"] TestRFC4408: spf.go:407: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [ptr-nomatch-invalid] TestRFC4408: yml_test.go:225: test ptr-match-ip6 TestRFC4408: yml_test.go:227: checkhost cafe:babe::1 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::1" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ptr -all" TestRFC4408: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC4408: spf.go:407: ptr evaluating "e3.example.com" in ["e3.example.com."] TestRFC4408: spf.go:261: ptr ok, pass matched 'ptr' TestRFC4408: yml_test.go:234: success: pass, matched 'ptr' [ptr-match-ip6] TestRFC4408: yml_test.go:225: test ptr-empty-domain TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ptr:" TestRFC4408: spf.go:261: ptr ok, permerror invalid domain TestRFC4408: yml_test.go:234: success: permerror, invalid domain [ptr-empty-domain] TestRFC4408: yml_test.go:225: test ptr-cidr TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ptr/0 -all" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [ptr-cidr] TestRFC4408: yml_test.go:225: test ptr-match-target TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ptr:example.com -all" TestRFC4408: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC4408: spf.go:398: ptr forward resolution "e4.example.com." -> [] TestRFC4408: spf.go:398: ptr forward resolution "mail.example.com." -> ["1.2.3.4"] TestRFC4408: spf.go:407: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] TestRFC4408: spf.go:261: ptr ok, pass matched 'ptr' TestRFC4408: yml_test.go:234: success: pass, matched 'ptr' [ptr-match-target] TestRFC4408: yml_test.go:225: test ptr-match-implicit TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ptr -all" TestRFC4408: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC4408: spf.go:398: ptr forward resolution "e4.example.com." -> [] TestRFC4408: spf.go:398: ptr forward resolution "mail.example.com." -> ["1.2.3.4"] TestRFC4408: spf.go:407: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] TestRFC4408: spf.go:261: ptr ok, pass matched 'ptr' TestRFC4408: yml_test.go:234: success: pass, matched 'ptr' [ptr-match-implicit] TestRFC4408: yml_test.go:152: suite: A mechanism syntax TestRFC4408: yml_test.go:157: domain e2b.example.com TestRFC4408: yml_test.go:159: A: [1.1.1.1] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a//0 -all] TestRFC4408: yml_test.go:157: domain foo:bar/baz.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: A: [1.1.1.1] TestRFC4408: yml_test.go:159: AAAA: [1234::2] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a/0 -all] TestRFC4408: yml_test.go:157: domain e5a.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:museum] TestRFC4408: yml_test.go:157: domain e8.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a/24//64 -all] TestRFC4408: yml_test.go:157: domain e10.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:foo.example.com/24] TestRFC4408: yml_test.go:157: domain e11.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:foo:bar/baz.example.com] TestRFC4408: yml_test.go:157: domain e2a.example.com TestRFC4408: yml_test.go:159: AAAA: [1234::1] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a//0 -all] TestRFC4408: yml_test.go:157: domain e8a.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a/24 -all] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:abc.123] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a/0 -all] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:foo.example.com] TestRFC4408: yml_test.go:157: domain e7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a//129 -all] TestRFC4408: yml_test.go:157: domain e12.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:example.-com] TestRFC4408: yml_test.go:157: domain e14.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:foo.example.xn--zckzah -all] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:111.222.33.44] TestRFC4408: yml_test.go:157: domain e6a.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a/33 -all] TestRFC4408: yml_test.go:157: domain e8e.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a/24/64 -all] TestRFC4408: yml_test.go:157: domain e8b.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a//64 -all] TestRFC4408: yml_test.go:157: domain e9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:example.com:8080] TestRFC4408: yml_test.go:157: domain foo.example.xn--zckzah TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain ipv6.example.com TestRFC4408: yml_test.go:159: AAAA: [1234::1] TestRFC4408: yml_test.go:159: A: [1.1.1.1] TestRFC4408: yml_test.go:159: SPF: [v=spf1 a -all] TestRFC4408: yml_test.go:157: domain foo.example.com TestRFC4408: yml_test.go:159: A: [1.1.1.1] TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:157: domain e5b.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:museum.] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a//33 -all] TestRFC4408: yml_test.go:157: domain e13.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:225: test a-dual-cidr-ip4-err TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e8e.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8e.example.com" ("e8e.example.com") TestRFC4408: spf.go:160: check e8e.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/24/64 -all" TestRFC4408: spf.go:526: masks on "a/24/64": [] "e8e.example.com" {-1 -1} TestRFC4408: spf.go:246: a ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [a-dual-cidr-ip4-err] TestRFC4408: yml_test.go:225: test a-nxdomain TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/0 -all" TestRFC4408: spf.go:526: masks on "a/0": ["a/0" "" "" "/0" "0" "" ""] "e1.example.com" {0 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-nxdomain] TestRFC4408: yml_test.go:225: test a-dual-cidr-ip6-match TestRFC4408: yml_test.go:227: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com TestRFC4408: spf.go:129: check host with sender "2001:db8:1234::cafe:babe" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC4408: spf.go:160: check e8.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/24//64 -all" TestRFC4408: spf.go:526: masks on "a/24//64": ["a/24//64" "" "" "/24" "24" "//64" "64"] "e8.example.com" {24 64} TestRFC4408: spf.go:561: mx matched 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, {24 64} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-dual-cidr-ip6-match] TestRFC4408: yml_test.go:225: test a-dual-cidr-ip4-default TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e8b.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8b.example.com" ("e8b.example.com") TestRFC4408: spf.go:160: check e8b.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a//64 -all" TestRFC4408: spf.go:526: masks on "a//64": ["a//64" "" "" "" "" "//64" "64"] "e8b.example.com" {-1 64} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-dual-cidr-ip4-default] TestRFC4408: yml_test.go:225: test a-multi-ip1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC4408: spf.go:160: check e10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:foo.example.com/24" TestRFC4408: spf.go:526: masks on "a:foo.example.com/24": ["a:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC4408: spf.go:561: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-multi-ip1] TestRFC4408: yml_test.go:225: test a-cidr4-0-ip6 TestRFC4408: yml_test.go:227: checkhost 1234::1 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/0 -all" TestRFC4408: spf.go:526: masks on "a/0": ["a/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-cidr4-0-ip6] TestRFC4408: yml_test.go:225: test a-bad-cidr4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6a.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6a.example.com" ("e6a.example.com") TestRFC4408: spf.go:160: check e6a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/33 -all" TestRFC4408: spf.go:246: a ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [a-bad-cidr4] TestRFC4408: yml_test.go:225: test a-dual-cidr-ip4-match TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC4408: spf.go:160: check e8.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/24//64 -all" TestRFC4408: spf.go:526: masks on "a/24//64": ["a/24//64" "" "" "/24" "24" "//64" "64"] "e8.example.com" {24 64} TestRFC4408: spf.go:561: mx matched 1.2.3.4, 1.2.3.5, {24 64} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-dual-cidr-ip4-match] TestRFC4408: yml_test.go:225: test a-dual-cidr-ip6-default TestRFC4408: yml_test.go:227: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com TestRFC4408: spf.go:129: check host with sender "2001:db8:1234::cafe:babe" "mail.example.com" "foo@e8a.example.com" ("e8a.example.com") TestRFC4408: spf.go:160: check e8a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/24 -all" TestRFC4408: spf.go:526: masks on "a/24": ["a/24" "" "" "/24" "24" "" ""] "e8a.example.com" {24 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-dual-cidr-ip6-default] TestRFC4408: yml_test.go:225: test a-ip6-dualstack TestRFC4408: yml_test.go:227: checkhost 1234::1 foo@ipv6.example.com TestRFC4408: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@ipv6.example.com" ("ipv6.example.com") TestRFC4408: spf.go:160: check ipv6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a -all" TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "ipv6.example.com" {-1 -1} TestRFC4408: spf.go:561: mx matched 1234::1, 1234::1, {-1 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-ip6-dualstack] TestRFC4408: yml_test.go:225: test a-cidr6 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a//33 -all" TestRFC4408: spf.go:526: masks on "a//33": ["a//33" "" "" "" "" "//33" "33"] "e6.example.com" {-1 33} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-cidr6] TestRFC4408: yml_test.go:225: test a-cidr4-0 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a/0 -all" TestRFC4408: spf.go:526: masks on "a/0": ["a/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC4408: spf.go:561: mx matched 1.2.3.4, 1.1.1.1, {0 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-cidr4-0] TestRFC4408: yml_test.go:225: test a-dash-in-toplabel TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e14.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e14.example.com" ("e14.example.com") TestRFC4408: spf.go:160: check e14.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:foo.example.xn--zckzah -all" TestRFC4408: spf.go:526: masks on "a:foo.example.xn--zckzah": ["a:foo.example.xn--zckzah" ":foo.example.xn--zckzah" "foo.example.xn--zckzah" "" "" "" ""] "foo.example.xn--zckzah" {-1 -1} TestRFC4408: spf.go:561: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-dash-in-toplabel] TestRFC4408: yml_test.go:225: test a-cidr6-0-ip6 TestRFC4408: yml_test.go:227: checkhost 1234::1 foo@e2a.example.com TestRFC4408: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC4408: spf.go:160: check e2a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC4408: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC4408: spf.go:561: mx matched 1234::1, 1234::1, {-1 0} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-cidr6-0-ip6] TestRFC4408: yml_test.go:225: test a-cidr6-0-ip4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC4408: spf.go:160: check e2a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC4408: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-cidr6-0-ip4] TestRFC4408: yml_test.go:225: test a-cidr6-0-nxdomain TestRFC4408: yml_test.go:227: checkhost 1234::1 foo@e2b.example.com TestRFC4408: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2b.example.com" ("e2b.example.com") TestRFC4408: spf.go:160: check e2b.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC4408: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2b.example.com" {-1 0} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-cidr6-0-nxdomain] TestRFC4408: yml_test.go:225: test a-multi-ip2 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC4408: spf.go:160: check e10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:foo.example.com/24" TestRFC4408: spf.go:526: masks on "a:foo.example.com/24": ["a:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC4408: spf.go:561: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [a-multi-ip2] TestRFC4408: yml_test.go:225: test a-cidr6-0-ip4mapped TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC4408: spf.go:160: check e2a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC4408: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [a-cidr6-0-ip4mapped] TestRFC4408: yml_test.go:225: test a-bad-cidr6 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC4408: spf.go:160: check e7.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a//129 -all" TestRFC4408: spf.go:246: a ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [a-bad-cidr6] TestRFC4408: yml_test.go:152: suite: Include mechanism semantics and syntax TestRFC4408: yml_test.go:157: domain ip7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.7 ?all] TestRFC4408: yml_test.go:157: domain e8.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include: -all] TestRFC4408: yml_test.go:157: domain ip5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.5 -all] TestRFC4408: yml_test.go:157: domain erehwon.example.com TestRFC4408: yml_test.go:159: TXT: [v=spfl am not an SPF record] TestRFC4408: yml_test.go:157: domain e7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:erehwon.example.com -all] TestRFC4408: yml_test.go:157: domain ip8.example.com TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:e6.example.com -all] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include +all] TestRFC4408: yml_test.go:157: domain e9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:ip5.example.com/24 -all] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:ip8.example.com -all] TestRFC4408: yml_test.go:157: domain ip6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.6 ~all] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:ip5.example.com ~all] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:ip6.example.com all] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:ip7.example.com -all] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:225: test include-empty-domain TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC4408: spf.go:160: check e8.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include: -all" TestRFC4408: spf.go:160: check 2 TestRFC4408: spf.go:176: dns record "" TestRFC4408: spf.go:241: include ok, permerror no DNS record found TestRFC4408: yml_test.go:234: success: permerror, no DNS record found [include-empty-domain] TestRFC4408: yml_test.go:225: test include-fail TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:ip5.example.com ~all" TestRFC4408: spf.go:160: check ip5.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.5 -all" TestRFC4408: spf.go:237: fail matched all TestRFC4408: spf.go:237: softfail matched all TestRFC4408: yml_test.go:234: success: softfail, matched 'all' [include-fail] TestRFC4408: yml_test.go:225: test include-neutral TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:ip7.example.com -all" TestRFC4408: spf.go:160: check ip7.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.7 ?all" TestRFC4408: spf.go:237: neutral matched all TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [include-neutral] TestRFC4408: yml_test.go:225: test include-temperror TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:ip8.example.com -all" TestRFC4408: spf.go:160: check ip8.example.com 2 TestRFC4408: spf.go:164: dns temp error: lookup : test timeout error TestRFC4408: spf.go:241: include ok, temperror lookup : test timeout error TestRFC4408: yml_test.go:234: success: temperror, lookup : test timeout error [include-temperror] TestRFC4408: yml_test.go:225: test include-permerror TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:e6.example.com -all" TestRFC4408: spf.go:160: check e6.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 include +all" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: spf.go:241: include ok, permerror unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [include-permerror] TestRFC4408: yml_test.go:225: test include-syntax-error TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include +all" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [include-syntax-error] TestRFC4408: yml_test.go:225: test include-cidr TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e9.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e9.example.com" ("e9.example.com") TestRFC4408: spf.go:160: check e9.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:ip5.example.com/24 -all" TestRFC4408: spf.go:659: macro contains / TestRFC4408: spf.go:241: include ok, permerror invalid macro TestRFC4408: yml_test.go:234: success: permerror, invalid macro [include-cidr] TestRFC4408: yml_test.go:225: test include-none TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC4408: spf.go:160: check e7.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:erehwon.example.com -all" TestRFC4408: spf.go:160: check erehwon.example.com 2 TestRFC4408: spf.go:176: dns record "" TestRFC4408: spf.go:241: include ok, permerror no DNS record found TestRFC4408: yml_test.go:234: success: permerror, no DNS record found [include-none] TestRFC4408: yml_test.go:225: test include-softfail TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:ip6.example.com all" TestRFC4408: spf.go:160: check ip6.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.6 ~all" TestRFC4408: spf.go:237: softfail matched all TestRFC4408: spf.go:237: pass matched all TestRFC4408: yml_test.go:234: success: pass, matched 'all' [include-softfail] TestRFC4408: yml_test.go:152: suite: MX mechanism syntax TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: A: [1.1.1.1] TestRFC4408: yml_test.go:159: AAAA: [1234::2] TestRFC4408: yml_test.go:159: MX: {0 e2.example.com} TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx/0 -all] TestRFC4408: yml_test.go:157: domain e2a.example.com TestRFC4408: yml_test.go:159: AAAA: [1234::1] TestRFC4408: yml_test.go:159: MX: {0 e2a.example.com} TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx//0 -all] TestRFC4408: yml_test.go:157: domain e6a.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx/33 -all] TestRFC4408: yml_test.go:157: domain foo1.example.com TestRFC4408: yml_test.go:159: A: [1.1.1.1] TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:157: domain e12.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx:example.-com] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx/0 -all] TestRFC4408: yml_test.go:159: MX: {0 e1.example.com} TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx//33 -all] TestRFC4408: yml_test.go:157: domain e7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx//129 -all] TestRFC4408: yml_test.go:157: domain e9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx:example.com:8080] TestRFC4408: yml_test.go:157: domain e13.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx: -all] TestRFC4408: yml_test.go:157: domain e2b.example.com TestRFC4408: yml_test.go:159: A: [1.1.1.1] TestRFC4408: yml_test.go:159: MX: {0 e2b.example.com} TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx//0 -all] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx:foo.example.com] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx] TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e11.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx:foo:bar/baz.example.com] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:159: MX: {0 } TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx:abc.123] TestRFC4408: yml_test.go:157: domain e10.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx:foo.example.com/24] TestRFC4408: yml_test.go:157: domain foo.example.com TestRFC4408: yml_test.go:159: MX: {0 foo1.example.com} TestRFC4408: yml_test.go:157: domain foo:bar/baz.example.com TestRFC4408: yml_test.go:159: MX: {0 foo:bar/baz.example.com} TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:225: test mx-cidr6 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx//33 -all" TestRFC4408: spf.go:526: masks on "mx//33": ["mx//33" "" "" "" "" "//33" "33"] "e6.example.com" {-1 33} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [mx-cidr6] TestRFC4408: yml_test.go:225: test mx-cidr4-0 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx/0 -all" TestRFC4408: spf.go:526: masks on "mx/0": ["mx/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC4408: spf.go:615: mx matched 1.2.3.4, 1.1.1.1, {0 -1} TestRFC4408: spf.go:251: mx ok, pass matched 'mx' TestRFC4408: yml_test.go:234: success: pass, matched 'mx' [mx-cidr4-0] TestRFC4408: yml_test.go:225: test mx-cidr6-0-nxdomain TestRFC4408: yml_test.go:227: checkhost 1234::1 foo@e2b.example.com TestRFC4408: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2b.example.com" ("e2b.example.com") TestRFC4408: spf.go:160: check e2b.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC4408: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2b.example.com" {-1 0} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [mx-cidr6-0-nxdomain] TestRFC4408: yml_test.go:225: test mx-empty TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "" ("mail.example.com") TestRFC4408: spf.go:160: check mail.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx" TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "mail.example.com" {-1 -1} TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [mx-empty] TestRFC4408: yml_test.go:225: test mx-cidr4-0-ip6 TestRFC4408: yml_test.go:227: checkhost 1234::1 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx/0 -all" TestRFC4408: spf.go:526: masks on "mx/0": ["mx/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [mx-cidr4-0-ip6] TestRFC4408: yml_test.go:225: test mx-cidr6-0-ip4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC4408: spf.go:160: check e2a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC4408: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [mx-cidr6-0-ip4] TestRFC4408: yml_test.go:225: test mx-implicit TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx" TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e4.example.com" {-1 -1} TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [mx-implicit] TestRFC4408: yml_test.go:225: test mx-bad-cidr4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6a.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6a.example.com" ("e6a.example.com") TestRFC4408: spf.go:160: check e6a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx/33 -all" TestRFC4408: spf.go:251: mx ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [mx-bad-cidr4] TestRFC4408: yml_test.go:225: test mx-multi-ip2 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC4408: spf.go:160: check e10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx:foo.example.com/24" TestRFC4408: spf.go:526: masks on "mx:foo.example.com/24": ["mx:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC4408: spf.go:615: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC4408: spf.go:251: mx ok, pass matched 'mx' TestRFC4408: yml_test.go:234: success: pass, matched 'mx' [mx-multi-ip2] TestRFC4408: yml_test.go:225: test mx-nxdomain TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx/0 -all" TestRFC4408: spf.go:526: masks on "mx/0": ["mx/0" "" "" "/0" "0" "" ""] "e1.example.com" {0 -1} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [mx-nxdomain] TestRFC4408: yml_test.go:225: test mx-cidr6-0-ip4mapped TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC4408: spf.go:160: check e2a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC4408: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [mx-cidr6-0-ip4mapped] TestRFC4408: yml_test.go:225: test mx-cidr6-0-ip6 TestRFC4408: yml_test.go:227: checkhost 1234::1 foo@e2a.example.com TestRFC4408: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC4408: spf.go:160: check e2a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC4408: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC4408: spf.go:615: mx matched 1234::1, 1234::1, {-1 0} TestRFC4408: spf.go:251: mx ok, pass matched 'mx' TestRFC4408: yml_test.go:234: success: pass, matched 'mx' [mx-cidr6-0-ip6] TestRFC4408: yml_test.go:225: test mx-bad-cidr6 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC4408: spf.go:160: check e7.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx//129 -all" TestRFC4408: spf.go:251: mx ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [mx-bad-cidr6] TestRFC4408: yml_test.go:225: test mx-multi-ip1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC4408: spf.go:160: check e10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx:foo.example.com/24" TestRFC4408: spf.go:526: masks on "mx:foo.example.com/24": ["mx:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC4408: spf.go:615: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC4408: spf.go:251: mx ok, pass matched 'mx' TestRFC4408: yml_test.go:234: success: pass, matched 'mx' [mx-multi-ip1] TestRFC4408: yml_test.go:152: suite: EXISTS mechanism syntax TestRFC4408: yml_test.go:157: domain mail6.example.com TestRFC4408: yml_test.go:159: AAAA: [CAFE:BABE::4] TestRFC4408: yml_test.go:157: domain err.example.com TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:mail.example.com] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:mail6.example.com -all] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:err.example.com -all] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:mail.example.com/24] TestRFC4408: yml_test.go:225: test exists-implicit TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [exists-implicit] TestRFC4408: yml_test.go:225: test exists-cidr TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:mail.example.com/24" TestRFC4408: spf.go:659: macro contains / TestRFC4408: spf.go:266: exists ok, permerror invalid macro TestRFC4408: yml_test.go:234: success: permerror, invalid macro [exists-cidr] TestRFC4408: yml_test.go:225: test exists-ip4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:mail.example.com" TestRFC4408: spf.go:266: exists ok, pass matched 'exists' TestRFC4408: yml_test.go:234: success: pass, matched 'exists' [exists-ip4] TestRFC4408: yml_test.go:225: test exists-ip6 TestRFC4408: yml_test.go:227: checkhost cafe:babe::3 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::3" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:mail.example.com" TestRFC4408: spf.go:266: exists ok, pass matched 'exists' TestRFC4408: yml_test.go:234: success: pass, matched 'exists' [exists-ip6] TestRFC4408: yml_test.go:225: test exists-ip6only TestRFC4408: yml_test.go:227: checkhost cafe:babe::3 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::3" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:mail6.example.com -all" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [exists-ip6only] TestRFC4408: yml_test.go:225: test exists-dnserr TestRFC4408: yml_test.go:227: checkhost cafe:babe::3 foo@e6.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::3" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:err.example.com -all" TestRFC4408: spf.go:266: exists ok, temperror lookup : test timeout error TestRFC4408: yml_test.go:234: success: temperror, lookup : test timeout error [exists-dnserr] TestRFC4408: yml_test.go:225: test exists-empty-domain TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:" TestRFC4408: spf.go:266: exists ok, permerror invalid domain TestRFC4408: yml_test.go:234: success: permerror, invalid domain [exists-empty-domain] TestRFC4408: yml_test.go:152: suite: IP4 mechanism syntax TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4//32] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.1.1.1/0 -all] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4/32 -all] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4/032 -all] TestRFC4408: yml_test.go:157: domain e8.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4:8080] TestRFC4408: yml_test.go:157: domain e9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4/33 -all] TestRFC4408: yml_test.go:157: domain e7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] TestRFC4408: yml_test.go:225: test bare-ip4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [bare-ip4] TestRFC4408: yml_test.go:225: test bad-ip4-port TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC4408: spf.go:160: check e8.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.4:8080" TestRFC4408: spf.go:256: ip ok, permerror invalid ipX value TestRFC4408: yml_test.go:234: success: permerror, invalid ipX value [bad-ip4-port] TestRFC4408: yml_test.go:225: test ip4-mapped-ip6 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC4408: spf.go:160: check e7.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" TestRFC4408: spf.go:256: ip ok, fail matched 'ip' TestRFC4408: yml_test.go:234: success: fail, matched 'ip' [ip4-mapped-ip6] TestRFC4408: yml_test.go:225: test cidr4-0 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1/0 -all" TestRFC4408: spf.go:256: ip ok, pass matched 'ip' TestRFC4408: yml_test.go:234: success: pass, matched 'ip' [cidr4-0] TestRFC4408: yml_test.go:225: test cidr4-32 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.4/32 -all" TestRFC4408: spf.go:256: ip ok, pass matched 'ip' TestRFC4408: yml_test.go:234: success: pass, matched 'ip' [cidr4-32] TestRFC4408: yml_test.go:225: test cidr4-33 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.4/33 -all" TestRFC4408: spf.go:256: ip ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [cidr4-33] TestRFC4408: yml_test.go:225: test bad-ip4-short TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e9.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e9.example.com" ("e9.example.com") TestRFC4408: spf.go:160: check e9.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3" TestRFC4408: spf.go:256: ip ok, permerror invalid ipX value TestRFC4408: yml_test.go:234: success: permerror, invalid ipX value [bad-ip4-short] TestRFC4408: yml_test.go:225: test ip4-dual-cidr TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.2.3.4//32" TestRFC4408: spf.go:256: ip ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [ip4-dual-cidr] TestRFC4408: yml_test.go:152: suite: IP6 mechanism syntax TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip6:::1.1.1.1/129] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip6:::1.1.1.1//33] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip6:CAFE:BABE:8000::/33] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip6::CAFE::BABE] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all ip6] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip6:::1.1.1.1/0] TestRFC4408: yml_test.go:225: test ip6-bad1 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6::CAFE::BABE" TestRFC4408: spf.go:256: ip ok, permerror invalid ipX value TestRFC4408: yml_test.go:234: success: permerror, invalid ipX value [ip6-bad1] TestRFC4408: yml_test.go:225: test cidr6-0-ip4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/0" TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [cidr6-0-ip4] TestRFC4408: yml_test.go:225: test cidr6-ip4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/0" TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [cidr6-ip4] TestRFC4408: yml_test.go:225: test cidr6-0 TestRFC4408: yml_test.go:227: checkhost deaf:babe::cab:fee foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "deaf:babe::cab:fee" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/0" TestRFC4408: spf.go:256: ip ok, pass matched 'ip' TestRFC4408: yml_test.go:234: success: pass, matched 'ip' [cidr6-0] TestRFC4408: yml_test.go:225: test cidr6-33 TestRFC4408: yml_test.go:227: checkhost cafe:babe:8000:: foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe:8000::" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" TestRFC4408: spf.go:256: ip ok, pass matched 'ip' TestRFC4408: yml_test.go:234: success: pass, matched 'ip' [cidr6-33] TestRFC4408: yml_test.go:225: test cidr6-33-ip4 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [cidr6-33-ip4] TestRFC4408: yml_test.go:225: test cidr6-129 TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/129" TestRFC4408: spf.go:256: ip ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [cidr6-129] TestRFC4408: yml_test.go:225: test cidr6-bad TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1//33" TestRFC4408: spf.go:256: ip ok, permerror invalid mask TestRFC4408: yml_test.go:234: success: permerror, invalid mask [cidr6-bad] TestRFC4408: yml_test.go:152: suite: Semantics of exp and other modifiers TestRFC4408: yml_test.go:157: domain e10.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 redirect=erehwon.example.com] TestRFC4408: yml_test.go:157: domain e15.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] TestRFC4408: yml_test.go:157: domain e16.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=-all] TestRFC4408: yml_test.go:157: domain e21.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=e21msg.example.com -all] TestRFC4408: yml_test.go:157: domain e22.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=mail.example.com -all] TestRFC4408: yml_test.go:157: domain twoexp.example.com TestRFC4408: yml_test.go:159: TXT: [one] TestRFC4408: yml_test.go:159: TXT: [two] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 1up=foo] TestRFC4408: yml_test.go:157: domain e11msg.example.com TestRFC4408: yml_test.go:159: TXT: [Answer a fool according to his folly.] TestRFC4408: yml_test.go:159: TXT: [Do not answer a fool according to his folly.] TestRFC4408: yml_test.go:157: domain e9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all foo=%abc] TestRFC4408: yml_test.go:157: domain exp2.example.com TestRFC4408: yml_test.go:159: TXT: [See me.] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 =all] TestRFC4408: yml_test.go:157: domain e8.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=exp4.example.com] TestRFC4408: yml_test.go:157: domain e14.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] TestRFC4408: yml_test.go:157: domain e20.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 default=+] TestRFC4408: yml_test.go:157: domain nonascii.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=badexp.example.com -all] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain exp1.example.com TestRFC4408: yml_test.go:159: TXT: [No-see-um] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] TestRFC4408: yml_test.go:157: domain e11.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=e11msg.example.com] TestRFC4408: yml_test.go:157: domain e21msg.example.com TestRFC4408: yml_test.go:159: TIMEOUT TestRFC4408: yml_test.go:157: domain tworecs.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=twoexp.example.com -all] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all] TestRFC4408: yml_test.go:157: domain e12.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp= -all] TestRFC4408: yml_test.go:157: domain e13.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=e13msg.example.com -all] TestRFC4408: yml_test.go:157: domain e19.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 default=pass] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=exp2.example.com] TestRFC4408: yml_test.go:157: domain exp3.example.com TestRFC4408: yml_test.go:159: TXT: [Correct!] TestRFC4408: yml_test.go:157: domain exp4.example.com TestRFC4408: yml_test.go:159: TXT: [%{l} in implementation] TestRFC4408: yml_test.go:157: domain e7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] TestRFC4408: yml_test.go:157: domain e13msg.example.com TestRFC4408: yml_test.go:159: TXT: [The %{x}-files.] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] TestRFC4408: yml_test.go:157: domain e18.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ?all redirect=] TestRFC4408: yml_test.go:157: domain badexp.example.com TestRFC4408: yml_test.go:159: TXT: [Explanation] TestRFC4408: yml_test.go:157: domain e17.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 redirect=-all ?all] TestRFC4408: yml_test.go:225: test non-ascii-exp TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foobar@nonascii.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@nonascii.example.com" ("nonascii.example.com") TestRFC4408: spf.go:160: check nonascii.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=badexp.example.com -all" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [non-ascii-exp] TestRFC4408: yml_test.go:225: test redirect-cancels-exp TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:273: redirect, "redirect=e2.example.com" TestRFC4408: spf.go:160: check e2.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 -all" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [redirect-cancels-exp] TestRFC4408: yml_test.go:225: test redirect-twice TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e15.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e15.example.com" ("e15.example.com") TestRFC4408: spf.go:160: check e15.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" TestRFC4408: yml_test.go:234: success: permerror, invalid domain [redirect-twice] TestRFC4408: yml_test.go:225: test two-exp-records TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foobar@tworecs.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@tworecs.example.com" ("tworecs.example.com") TestRFC4408: spf.go:160: check tworecs.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=twoexp.example.com -all" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [two-exp-records] TestRFC4408: yml_test.go:225: test dorky-sentinel TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 Macro Error@e8.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "Macro Error@e8.example.com" ("e8.example.com") TestRFC4408: spf.go:160: check e8.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=exp4.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [dorky-sentinel] TestRFC4408: yml_test.go:225: test exp-no-txt TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e22.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e22.example.com" ("e22.example.com") TestRFC4408: spf.go:160: check e22.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=mail.example.com -all" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [exp-no-txt] TestRFC4408: yml_test.go:225: test exp-dns-error TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e21.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e21.example.com" ("e21.example.com") TestRFC4408: spf.go:160: check e21.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=e21msg.example.com -all" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [exp-dns-error] TestRFC4408: yml_test.go:225: test explanation-syntax-error TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e13.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e13.example.com" ("e13.example.com") TestRFC4408: spf.go:160: check e13.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=e13msg.example.com -all" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [explanation-syntax-error] TestRFC4408: yml_test.go:225: test include-ignores-exp TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC4408: spf.go:160: check e7.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" TestRFC4408: spf.go:160: check e3.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:273: redirect, "redirect=e4.example.com" TestRFC4408: spf.go:160: check e4.example.com 3 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=exp2.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [include-ignores-exp] TestRFC4408: yml_test.go:225: test invalid-modifier TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 1up=foo" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [invalid-modifier] TestRFC4408: yml_test.go:225: test exp-multiple-txt TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e11.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e11.example.com" ("e11.example.com") TestRFC4408: spf.go:160: check e11.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=e11msg.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [exp-multiple-txt] TestRFC4408: yml_test.go:225: test empty-modifier-name TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 =all" TestRFC4408: spf.go:277: permerror, unknown field TestRFC4408: yml_test.go:234: success: permerror, unknown field [empty-modifier-name] TestRFC4408: yml_test.go:225: test redirect-none TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC4408: spf.go:160: check e10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 redirect=erehwon.example.com" TestRFC4408: spf.go:273: redirect, "redirect=erehwon.example.com" TestRFC4408: spf.go:160: check erehwon.example.com 2 TestRFC4408: spf.go:176: dns record "" TestRFC4408: yml_test.go:234: success: permerror, no DNS record found [redirect-none] TestRFC4408: yml_test.go:225: test redirect-cancels-prior-exp TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:273: redirect, "redirect=e4.example.com" TestRFC4408: spf.go:160: check e4.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=exp2.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [redirect-cancels-prior-exp] TestRFC4408: yml_test.go:152: suite: Macro expansion rules TestRFC4408: yml_test.go:157: domain somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.example.com TestRFC4408: yml_test.go:159: TXT: [Congratulations! That was tricky.] TestRFC4408: yml_test.go:157: domain mx.example.com TestRFC4408: yml_test.go:159: A: [192.168.218.41] TestRFC4408: yml_test.go:159: A: [192.168.218.42] TestRFC4408: yml_test.go:159: AAAA: [CAFE:BABE::2] TestRFC4408: yml_test.go:159: AAAA: [CAFE:BABE::3] TestRFC4408: yml_test.go:157: domain 40.218.168.192.in-addr.arpa TestRFC4408: yml_test.go:159: PTR: [mx.example.com] TestRFC4408: yml_test.go:157: domain 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.E.B.A.B.E.F.A.C.ip6.arpa TestRFC4408: yml_test.go:159: PTR: [mx.example.com] TestRFC4408: yml_test.go:157: domain 40.218.168.192.example.com TestRFC4408: yml_test.go:159: TXT: [Connections from %{c} not authorized.] TestRFC4408: yml_test.go:157: domain e9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:%{H} -all] TestRFC4408: yml_test.go:157: domain e6msg.example.com TestRFC4408: yml_test.go:159: TXT: [connect from %{p}] TestRFC4408: yml_test.go:157: domain e11.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] TestRFC4408: yml_test.go:157: domain bar.foo.user.example.com TestRFC4408: yml_test.go:159: A: [127.0.0.2] TestRFC4408: yml_test.go:157: domain exp.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exp=msg.example.com. -all] TestRFC4408: yml_test.go:157: domain msg.example.com TestRFC4408: yml_test.go:159: TXT: [This is a test.] TestRFC4408: yml_test.go:157: domain macro%percent space%20url-space.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:%{a}.example.com -all] TestRFC4408: yml_test.go:157: domain mx.e7.example.com.should.example.com TestRFC4408: yml_test.go:159: A: [127.0.0.2] TestRFC4408: yml_test.go:157: domain e12.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] TestRFC4408: yml_test.go:157: domain e1t.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] TestRFC4408: yml_test.go:157: domain somewhat.long.exp.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] TestRFC4408: yml_test.go:157: domain 41.218.168.192.in-addr.arpa TestRFC4408: yml_test.go:159: PTR: [mx.example.com] TestRFC4408: yml_test.go:157: domain 42.218.168.192.in-addr.arpa TestRFC4408: yml_test.go:159: PTR: [mx.example.com] TestRFC4408: yml_test.go:159: PTR: [mx.e7.example.com] TestRFC4408: yml_test.go:157: domain 1.2.3.4.gladstone.philip.user.example.com TestRFC4408: yml_test.go:159: A: [127.0.0.2] TestRFC4408: yml_test.go:157: domain msgbas2x.cos.example.com TestRFC4408: yml_test.go:159: A: [192.168.218.40] TestRFC4408: yml_test.go:157: domain e1a.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=%{r}.example.com] TestRFC4408: yml_test.go:157: domain 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.E.B.A.B.E.F.A.C.ip6.arpa TestRFC4408: yml_test.go:159: PTR: [mx.example.com] TestRFC4408: yml_test.go:157: domain _spfh.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -a:%{h} +all] TestRFC4408: yml_test.go:157: domain e8.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=msg8.%{D2}] TestRFC4408: yml_test.go:157: domain a.spf.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:o.spf.example.com. ~all] TestRFC4408: yml_test.go:157: domain example.com TestRFC4408: yml_test.go:159: A: [192.168.90.76] TestRFC4408: yml_test.go:159: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] TestRFC4408: yml_test.go:157: domain e1e.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=e4msg.example.com] TestRFC4408: yml_test.go:157: domain mx.example.com.ok.example.com TestRFC4408: yml_test.go:159: A: [127.0.0.2] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=e6msg.example.com] TestRFC4408: yml_test.go:157: domain mx.e7.example.com TestRFC4408: yml_test.go:159: A: [192.168.218.42] TestRFC4408: yml_test.go:157: domain e7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] TestRFC4408: yml_test.go:157: domain example.com.d.spf.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 redirect=a.spf.example.com] TestRFC4408: yml_test.go:157: domain o.spf.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:192.168.218.40] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -all exp=%{ir}.example.com] TestRFC4408: yml_test.go:157: domain e4msg.example.com TestRFC4408: yml_test.go:159: TXT: [%{c} is queried as %{ir}.%{v}.arpa] TestRFC4408: yml_test.go:157: domain msg8.example.com TestRFC4408: yml_test.go:159: TXT: [http://example.com/why.html?l=%{L}] TestRFC4408: yml_test.go:157: domain e10.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] TestRFC4408: yml_test.go:225: test p-macro-ip6-novalid TestRFC4408: yml_test.go:227: checkhost cafe:babe::1 test@e6.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::1" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [p-macro-ip6-novalid] TestRFC4408: yml_test.go:225: test hello-domain-literal TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e9.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "[192.168.218.40]" "test@e9.example.com" ("e9.example.com") TestRFC4408: spf.go:160: check e9.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:%{H} -all" TestRFC4408: spf.go:526: masks on "a:%{H}": ["a:%{H}" ":%{H}" "%{H}" "" "" "" ""] "%{H}" {-1 -1} TestRFC4408: spf.go:708: macro "H": ["H" "H" "" "" ""] TestRFC4408: spf.go:805: macro expanded "%{H}" to "e9.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [hello-domain-literal] TestRFC4408: yml_test.go:225: test upper-macro TestRFC4408: yml_test.go:227: checkhost 192.168.218.42 jack&jill=up@e8.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.42" "msgbas2x.cos.example.com" "jack&jill=up@e8.example.com" ("e8.example.com") TestRFC4408: spf.go:160: check e8.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=msg8.%{D2}" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [upper-macro] TestRFC4408: yml_test.go:225: test invalid-hello-macro TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e9.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "JUMPIN' JUPITER" "test@e9.example.com" ("e9.example.com") TestRFC4408: spf.go:160: check e9.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:%{H} -all" TestRFC4408: spf.go:526: masks on "a:%{H}": ["a:%{H}" ":%{H}" "%{H}" "" "" "" ""] "%{H}" {-1 -1} TestRFC4408: spf.go:708: macro "H": ["H" "H" "" "" ""] TestRFC4408: spf.go:805: macro expanded "%{H}" to "e9.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [invalid-hello-macro] TestRFC4408: yml_test.go:225: test trailing-dot-domain TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@example.com" ("example.com") TestRFC4408: spf.go:160: check example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 redirect=%{d}.d.spf.example.com." TestRFC4408: spf.go:273: redirect, "redirect=%{d}.d.spf.example.com." TestRFC4408: spf.go:708: macro "d": ["d" "d" "" "" ""] TestRFC4408: spf.go:805: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." TestRFC4408: spf.go:160: check example.com.d.spf.example.com. 2 TestRFC4408: spf.go:176: dns record "v=spf1 redirect=a.spf.example.com" TestRFC4408: spf.go:273: redirect, "redirect=a.spf.example.com" TestRFC4408: spf.go:160: check a.spf.example.com 3 TestRFC4408: spf.go:176: dns record "v=spf1 include:o.spf.example.com. ~all" TestRFC4408: spf.go:160: check o.spf.example.com. 4 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:192.168.218.40" TestRFC4408: spf.go:256: ip ok, pass matched 'ip' TestRFC4408: spf.go:241: include ok, pass matched 'ip' TestRFC4408: yml_test.go:234: success: pass, matched 'ip' [trailing-dot-domain] TestRFC4408: yml_test.go:225: test invalid-macro-char TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e1.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" TestRFC4408: spf.go:266: exists ok, permerror invalid macro TestRFC4408: yml_test.go:234: success: permerror, invalid macro [invalid-macro-char] TestRFC4408: yml_test.go:225: test macro-mania-in-domain TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 test@e1a.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "test@e1a.example.com" ("e1a.example.com") TestRFC4408: spf.go:160: check e1a.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" TestRFC4408: spf.go:526: masks on "a:macro%%percent%_%_space%-url-space.example.com": ["a:macro%%percent%_%_space%-url-space.example.com" ":macro%%percent%_%_space%-url-space.example.com" "macro%%percent%_%_space%-url-space.example.com" "" "" "" ""] "macro%%percent%_%_space%-url-space.example.com" {-1 -1} TestRFC4408: spf.go:805: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" TestRFC4408: spf.go:561: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [macro-mania-in-domain] TestRFC4408: yml_test.go:225: test v-macro-ip6 TestRFC4408: yml_test.go:227: checkhost cafe:babe::1 test@e4.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::1" "msgbas2x.cos.example.com" "test@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=e4msg.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [v-macro-ip6] TestRFC4408: yml_test.go:225: test undef-macro TestRFC4408: yml_test.go:227: checkhost cafe:babe::c0a8:da28 test@e5.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::c0a8:da28" "msgbas2x.cos.example.com" "test@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a:%{a}.example.com -all" TestRFC4408: spf.go:526: masks on "a:%{a}.example.com": ["a:%{a}.example.com" ":%{a}.example.com" "%{a}.example.com" "" "" "" ""] "%{a}.example.com" {-1 -1} TestRFC4408: spf.go:708: macro "a": [] TestRFC4408: spf.go:246: a ok, permerror invalid macro TestRFC4408: yml_test.go:234: success: permerror, invalid macro [undef-macro] TestRFC4408: yml_test.go:225: test require-valid-helo TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 test@e10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "OEMCOMPUTER" "test@e10.example.com" ("e10.example.com") TestRFC4408: spf.go:160: check e10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" TestRFC4408: spf.go:708: macro "d2": ["d2" "d" "2" "" ""] TestRFC4408: spf.go:805: macro expanded "_spfh.%{d2}" to "_spfh.example.com" TestRFC4408: spf.go:160: check _spfh.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 -a:%{h} +all" TestRFC4408: spf.go:526: masks on "a:%{h}": ["a:%{h}" ":%{h}" "%{h}" "" "" "" ""] "%{h}" {-1 -1} TestRFC4408: spf.go:708: macro "h": ["h" "h" "" "" ""] TestRFC4408: spf.go:805: macro expanded "%{h}" to "_spfh.example.com" TestRFC4408: spf.go:237: pass matched all TestRFC4408: spf.go:241: include ok, fail matched 'all' TestRFC4408: yml_test.go:234: success: fail, matched 'all' [require-valid-helo] TestRFC4408: yml_test.go:225: test macro-reverse-split-on-dash TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "philip-gladstone-test@e11.example.com" ("e11.example.com") TestRFC4408: spf.go:160: check e11.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" TestRFC4408: spf.go:708: macro "i": ["i" "i" "" "" ""] TestRFC4408: spf.go:708: macro "l2r-": ["l2r-" "l" "2" "r" "-"] TestRFC4408: spf.go:708: macro "d2": ["d2" "d" "2" "" ""] TestRFC4408: spf.go:805: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" TestRFC4408: spf.go:266: exists ok, pass matched 'exists' TestRFC4408: yml_test.go:234: success: pass, matched 'exists' [macro-reverse-split-on-dash] TestRFC4408: yml_test.go:225: test macro-multiple-delimiters TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo-bar+zip+quux@e12.example.com" ("e12.example.com") TestRFC4408: spf.go:160: check e12.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" TestRFC4408: spf.go:708: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] TestRFC4408: spf.go:708: macro "d2": ["d2" "d" "2" "" ""] TestRFC4408: spf.go:805: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" TestRFC4408: spf.go:266: exists ok, pass matched 'exists' TestRFC4408: yml_test.go:234: success: pass, matched 'exists' [macro-multiple-delimiters] TestRFC4408: yml_test.go:225: test trailing-dot-exp TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@exp.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@exp.example.com" ("exp.example.com") TestRFC4408: spf.go:160: check exp.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exp=msg.example.com. -all" TestRFC4408: spf.go:270: exp= not used, skipping TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [trailing-dot-exp] TestRFC4408: yml_test.go:225: test invalid-embedded-macro-char TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e1e.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e1e.example.com" ("e1e.example.com") TestRFC4408: spf.go:160: check e1e.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" TestRFC4408: spf.go:266: exists ok, permerror invalid macro TestRFC4408: yml_test.go:234: success: permerror, invalid macro [invalid-embedded-macro-char] TestRFC4408: yml_test.go:225: test invalid-trailing-macro-char TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e1t.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e1t.example.com" ("e1t.example.com") TestRFC4408: spf.go:160: check e1t.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 exists:foo%.sbl.example.com ?all" TestRFC4408: spf.go:266: exists ok, permerror invalid macro TestRFC4408: yml_test.go:234: success: permerror, invalid macro [invalid-trailing-macro-char] TestRFC4408: yml_test.go:225: test exp-txt-macro-char TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e3.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e3.example.com" ("e3.example.com") TestRFC4408: spf.go:160: check e3.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=%{ir}.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [exp-txt-macro-char] TestRFC4408: yml_test.go:225: test domain-name-truncation TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@somewhat.long.exp.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@somewhat.long.exp.example.com" ("somewhat.long.exp.example.com") TestRFC4408: spf.go:160: check somewhat.long.exp.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [domain-name-truncation] TestRFC4408: yml_test.go:225: test p-macro-ip6-valid TestRFC4408: yml_test.go:227: checkhost cafe:babe::3 test@e6.example.com TestRFC4408: spf.go:129: check host with sender "cafe:babe::3" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [p-macro-ip6-valid] TestRFC4408: yml_test.go:225: test v-macro-ip4 TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e4.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=e4msg.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [v-macro-ip4] TestRFC4408: yml_test.go:225: test p-macro-ip4-novalid TestRFC4408: yml_test.go:227: checkhost 192.168.218.40 test@e6.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [p-macro-ip4-novalid] TestRFC4408: yml_test.go:225: test p-macro-ip4-valid TestRFC4408: yml_test.go:227: checkhost 192.168.218.41 test@e6.example.com TestRFC4408: spf.go:129: check host with sender "192.168.218.41" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC4408: spf.go:160: check e6.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC4408: spf.go:237: fail matched all TestRFC4408: yml_test.go:234: success: fail, matched 'all' [p-macro-ip4-valid] TestRFC4408: yml_test.go:152: suite: Processing limits TestRFC4408: yml_test.go:157: domain e4.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 mx] TestRFC4408: yml_test.go:159: MX: {0 mail.example.com} TestRFC4408: yml_test.go:159: MX: {1 mail.example.com} TestRFC4408: yml_test.go:159: MX: {2 mail.example.com} TestRFC4408: yml_test.go:159: MX: {3 mail.example.com} TestRFC4408: yml_test.go:159: MX: {4 mail.example.com} TestRFC4408: yml_test.go:159: MX: {5 mail.example.com} TestRFC4408: yml_test.go:159: MX: {6 mail.example.com} TestRFC4408: yml_test.go:159: MX: {7 mail.example.com} TestRFC4408: yml_test.go:159: MX: {8 mail.example.com} TestRFC4408: yml_test.go:159: MX: {9 mail.example.com} TestRFC4408: yml_test.go:159: MX: {10 e4.example.com} TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:157: domain e5.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ptr] TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:157: domain e6.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] TestRFC4408: yml_test.go:159: A: [1.2.3.8] TestRFC4408: yml_test.go:159: MX: {10 e6.example.com} TestRFC4408: yml_test.go:157: domain e7.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] TestRFC4408: yml_test.go:159: A: [1.2.3.20] TestRFC4408: yml_test.go:157: domain e9.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] TestRFC4408: yml_test.go:159: A: [1.2.3.21] TestRFC4408: yml_test.go:157: domain e2.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:e3.example.com] TestRFC4408: yml_test.go:159: A: [1.2.3.7] TestRFC4408: yml_test.go:157: domain e1.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] TestRFC4408: yml_test.go:159: A: [1.2.3.6] TestRFC4408: yml_test.go:157: domain e3.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 include:e2.example.com] TestRFC4408: yml_test.go:159: A: [1.2.3.8] TestRFC4408: yml_test.go:157: domain 5.3.2.1.in-addr.arpa TestRFC4408: yml_test.go:159: PTR: [e1.example.com.] TestRFC4408: yml_test.go:159: PTR: [e2.example.com.] TestRFC4408: yml_test.go:159: PTR: [e3.example.com.] TestRFC4408: yml_test.go:159: PTR: [e4.example.com.] TestRFC4408: yml_test.go:159: PTR: [example.com.] TestRFC4408: yml_test.go:159: PTR: [e6.example.com.] TestRFC4408: yml_test.go:159: PTR: [e7.example.com.] TestRFC4408: yml_test.go:159: PTR: [e8.example.com.] TestRFC4408: yml_test.go:159: PTR: [e9.example.com.] TestRFC4408: yml_test.go:159: PTR: [e10.example.com.] TestRFC4408: yml_test.go:159: PTR: [e5.example.com.] TestRFC4408: yml_test.go:157: domain e8.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:157: domain inc.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a a a a a a a a] TestRFC4408: yml_test.go:159: A: [1.2.3.10] TestRFC4408: yml_test.go:157: domain e10.example.com TestRFC4408: yml_test.go:159: SPF: [v=spf1 a -all] TestRFC4408: yml_test.go:159: A: [1.2.3.1] TestRFC4408: yml_test.go:159: A: [1.2.3.2] TestRFC4408: yml_test.go:159: A: [1.2.3.3] TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:159: A: [1.2.3.5] TestRFC4408: yml_test.go:159: A: [1.2.3.6] TestRFC4408: yml_test.go:159: A: [1.2.3.7] TestRFC4408: yml_test.go:159: A: [1.2.3.8] TestRFC4408: yml_test.go:159: A: [1.2.3.9] TestRFC4408: yml_test.go:159: A: [1.2.3.10] TestRFC4408: yml_test.go:159: A: [1.2.3.11] TestRFC4408: yml_test.go:159: A: [1.2.3.12] TestRFC4408: yml_test.go:157: domain mail.example.com TestRFC4408: yml_test.go:159: A: [1.2.3.4] TestRFC4408: yml_test.go:225: test ptr-limit TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 foo@e5.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC4408: spf.go:160: check e5.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ptr" TestRFC4408: spf.go:398: ptr forward resolution "e1.example.com." -> ["1.2.3.6"] TestRFC4408: spf.go:398: ptr forward resolution "e2.example.com." -> ["1.2.3.7"] TestRFC4408: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.8"] TestRFC4408: spf.go:398: ptr forward resolution "e4.example.com." -> ["1.2.3.5"] TestRFC4408: spf.go:398: ptr forward resolution "example.com." -> [] TestRFC4408: spf.go:398: ptr forward resolution "e6.example.com." -> ["1.2.3.8"] TestRFC4408: spf.go:398: ptr forward resolution "e7.example.com." -> ["1.2.3.20"] TestRFC4408: spf.go:398: ptr forward resolution "e8.example.com." -> ["1.2.3.4"] TestRFC4408: spf.go:398: ptr forward resolution "e9.example.com." -> ["1.2.3.21"] TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: yml_test.go:234: success: neutral, [ptr-limit] TestRFC4408: yml_test.go:225: test mech-over-limit TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC4408: spf.go:160: check e7.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC4408: spf.go:407: ptr evaluating "e7.example.com" in [] TestRFC4408: spf.go:218: lookup limit reached TestRFC4408: yml_test.go:234: success: permerror, lookup limit reached [mech-over-limit] TestRFC4408: yml_test.go:225: test include-at-limit TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC4408: spf.go:160: check e8.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e8.example.com" {-1 -1} TestRFC4408: spf.go:561: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [include-at-limit] TestRFC4408: yml_test.go:225: test redirect-loop TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC4408: spf.go:160: check e1.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 3 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 4 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 5 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 6 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 7 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 8 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 9 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 10 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:273: redirect, "redirect=e1.example.com" TestRFC4408: spf.go:160: check e1.example.com 11 TestRFC4408: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC4408: spf.go:218: lookup limit reached TestRFC4408: yml_test.go:234: success: permerror, lookup limit reached [redirect-loop] TestRFC4408: yml_test.go:225: test include-loop TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC4408: spf.go:160: check e2.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC4408: spf.go:160: check e3.example.com 2 TestRFC4408: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC4408: spf.go:160: check e2.example.com 3 TestRFC4408: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC4408: spf.go:160: check e3.example.com 4 TestRFC4408: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC4408: spf.go:160: check e2.example.com 5 TestRFC4408: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC4408: spf.go:160: check e3.example.com 6 TestRFC4408: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC4408: spf.go:160: check e2.example.com 7 TestRFC4408: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC4408: spf.go:160: check e3.example.com 8 TestRFC4408: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC4408: spf.go:160: check e2.example.com 9 TestRFC4408: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC4408: spf.go:160: check e3.example.com 10 TestRFC4408: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC4408: spf.go:160: check e2.example.com 11 TestRFC4408: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC4408: spf.go:218: lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: spf.go:241: include ok, permerror lookup limit reached TestRFC4408: yml_test.go:234: success: permerror, lookup limit reached [include-loop] TestRFC4408: yml_test.go:225: test mx-limit TestRFC4408: yml_test.go:227: checkhost 1.2.3.5 foo@e4.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.5" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC4408: spf.go:160: check e4.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 mx" TestRFC4408: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e4.example.com" {-1 -1} TestRFC4408: spf.go:251: mx ok, permerror too many MX records TestRFC4408: yml_test.go:234: success: permerror, too many MX records [mx-limit] TestRFC4408: yml_test.go:225: test false-a-limit TestRFC4408: yml_test.go:227: checkhost 1.2.3.12 foo@e10.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.12" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC4408: spf.go:160: check e10.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a -all" TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e10.example.com" {-1 -1} TestRFC4408: spf.go:561: mx matched 1.2.3.12, 1.2.3.12, {-1 -1} TestRFC4408: spf.go:246: a ok, pass matched 'a' TestRFC4408: yml_test.go:234: success: pass, matched 'a' [false-a-limit] TestRFC4408: yml_test.go:225: test include-over-limit TestRFC4408: yml_test.go:227: checkhost 1.2.3.4 foo@e9.example.com TestRFC4408: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e9.example.com" ("e9.example.com") TestRFC4408: spf.go:160: check e9.example.com 1 TestRFC4408: spf.go:176: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e9.example.com" {-1 -1} TestRFC4408: spf.go:160: check inc.example.com 3 TestRFC4408: spf.go:176: dns record "v=spf1 a a a a a a a a" TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC4408: spf.go:284: fallback to neutral TestRFC4408: spf.go:218: lookup limit reached TestRFC4408: yml_test.go:234: success: permerror, lookup limit reached [include-over-limit] --- PASS: TestRFC4408 (0.07s) === RUN TestRFC7208 TestRFC7208: yml_test.go:152: suite: Initial processing TestRFC7208: yml_test.go:157: domain example.net TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=exp.example.net] TestRFC7208: yml_test.go:157: domain hosed.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:garbage.example.net -all] TestRFC7208: yml_test.go:157: domain hosed2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 €a:example.net -all] TestRFC7208: yml_test.go:157: domain ctrl.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:ctrl.example.com ptr -all] TestRFC7208: yml_test.go:159: A: [192.0.2.3] TestRFC7208: yml_test.go:157: domain fine.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a -all] TestRFC7208: yml_test.go:157: domain null.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4: 192.0.2.5 -all] TestRFC7208: yml_test.go:159: TestRFC7208: yml_test.go:157: domain example.com TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:157: domain exp.example.net TestRFC7208: yml_test.go:159: TXT: [%{l}] TestRFC7208: yml_test.go:157: domain a12345678901234567890123456789012345678901234567890123456789012.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:157: domain hosed3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:example.net –all] TestRFC7208: yml_test.go:157: domain nothosed.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:example.net -all] TestRFC7208: yml_test.go:159: SPF: [–] TestRFC7208: yml_test.go:157: domain trail.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a -all ] TestRFC7208: yml_test.go:157: domain a.example.net TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=exp.example.net] TestRFC7208: yml_test.go:225: test trailing-space TestRFC7208: yml_test.go:227: checkhost 192.0.2.5 silly@trail.example.com TestRFC7208: spf.go:129: check host with sender "192.0.2.5" "hosed" "silly@trail.example.com" ("trail.example.com") TestRFC7208: spf.go:160: check trail.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a -all " TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "trail.example.com" {-1 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [trailing-space] TestRFC7208: yml_test.go:225: test helo-not-fqdn TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "A2345678" "" ("A2345678") TestRFC7208: spf.go:160: check A2345678 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [helo-not-fqdn] TestRFC7208: yml_test.go:225: test helo-domain-literal TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "[1.2.3.5]" "" ("[1.2.3.5]") TestRFC7208: spf.go:160: check [1.2.3.5] 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [helo-domain-literal] TestRFC7208: yml_test.go:225: test non-ascii-result TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foobar@hosed3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@hosed3.example.com" ("hosed3.example.com") TestRFC7208: spf.go:160: check hosed3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:example.net \u0096all" TestRFC7208: spf.go:526: masks on "a:example.net": ["a:example.net" ":example.net" "example.net" "" "" "" ""] "example.net" {-1 -1} TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [non-ascii-result] TestRFC7208: yml_test.go:225: test non-ascii-non-spf TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foobar@nothosed.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@nothosed.example.com" ("nothosed.example.com") TestRFC7208: spf.go:160: check nothosed.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:example.net -all" TestRFC7208: spf.go:526: masks on "a:example.net": ["a:example.net" ":example.net" "example.net" "" "" "" ""] "example.net" {-1 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [non-ascii-non-spf] TestRFC7208: yml_test.go:225: test two-spaces TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 actually@fine.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "hosed" "actually@fine.example.com" ("fine.example.com") TestRFC7208: spf.go:160: check fine.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a -all" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "fine.example.com" {-1 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [two-spaces] TestRFC7208: yml_test.go:225: test emptylabel TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 lyme.eater@A...example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "mail.example.net" "lyme.eater@A...example.com" ("A...example.com") TestRFC7208: spf.go:160: check A...example.com 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [emptylabel] TestRFC7208: yml_test.go:225: test domain-literal TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 foo@[1.2.3.5] TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "OEMCOMPUTER" "foo@[1.2.3.5]" ("[1.2.3.5]") TestRFC7208: spf.go:160: check [1.2.3.5] 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [domain-literal] TestRFC7208: yml_test.go:225: test null-text TestRFC7208: yml_test.go:227: checkhost 192.0.2.5 silly@null.example.com TestRFC7208: spf.go:129: check host with sender "192.0.2.5" "hosed" "silly@null.example.com" ("null.example.com") TestRFC7208: spf.go:160: check null.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:192.0.2.5 -all" TestRFC7208: spf.go:256: ip ok, pass matched 'ip' TestRFC7208: yml_test.go:234: success: pass, matched 'ip' [null-text] TestRFC7208: yml_test.go:225: test nolocalpart TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 @example.net TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "@example.net" ("example.net") TestRFC7208: spf.go:160: check example.net 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=exp.example.net" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [nolocalpart] TestRFC7208: yml_test.go:225: test toolonglabel TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "mail.example.net" "lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com" ("A123456789012345678901234567890123456789012345678901234567890123.example.com") TestRFC7208: spf.go:160: check A123456789012345678901234567890123456789012345678901234567890123.example.com 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [toolonglabel] TestRFC7208: yml_test.go:225: test longlabel TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "mail.example.net" "lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com" ("A12345678901234567890123456789012345678901234567890123456789012.example.com") TestRFC7208: spf.go:160: check A12345678901234567890123456789012345678901234567890123456789012.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [longlabel] TestRFC7208: yml_test.go:152: suite: Record lookup TestRFC7208: yml_test.go:157: domain both.example.net TestRFC7208: yml_test.go:159: TXT: [v=spf1 -all] TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:157: domain txtonly.example.net TestRFC7208: yml_test.go:159: TXT: [v=spf1 -all] TestRFC7208: yml_test.go:157: domain spfonly.example.net TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:159: TXT: [NONE] TestRFC7208: yml_test.go:157: domain spftimeout.example.net TestRFC7208: yml_test.go:159: TXT: [v=spf1 -all] TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:157: domain txttimeout.example.net TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:159: TXT: [NONE] TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:157: domain nospftxttimeout.example.net TestRFC7208: yml_test.go:159: SPF: [v=spf3 !a:yahoo.com -all] TestRFC7208: yml_test.go:159: TXT: [NONE] TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:157: domain alltimeout.example.net TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:225: test txttimeout TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@txttimeout.example.net TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@txttimeout.example.net" ("txttimeout.example.net") TestRFC7208: spf.go:160: check txttimeout.example.net 1 TestRFC7208: spf.go:164: dns temp error: lookup : test timeout error TestRFC7208: yml_test.go:234: success: temperror, lookup : test timeout error [txttimeout] TestRFC7208: yml_test.go:225: test nospftxttimeout TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@nospftxttimeout.example.net TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@nospftxttimeout.example.net" ("nospftxttimeout.example.net") TestRFC7208: spf.go:160: check nospftxttimeout.example.net 1 TestRFC7208: spf.go:164: dns temp error: lookup : test timeout error TestRFC7208: yml_test.go:234: success: temperror, lookup : test timeout error [nospftxttimeout] TestRFC7208: yml_test.go:225: test alltimeout TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@alltimeout.example.net TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@alltimeout.example.net" ("alltimeout.example.net") TestRFC7208: spf.go:160: check alltimeout.example.net 1 TestRFC7208: spf.go:164: dns temp error: lookup : test timeout error TestRFC7208: yml_test.go:234: success: temperror, lookup : test timeout error [alltimeout] TestRFC7208: yml_test.go:225: test both TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@both.example.net TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@both.example.net" ("both.example.net") TestRFC7208: spf.go:160: check both.example.net 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [both] TestRFC7208: yml_test.go:225: test txtonly TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@txtonly.example.net TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@txtonly.example.net" ("txtonly.example.net") TestRFC7208: spf.go:160: check txtonly.example.net 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [txtonly] TestRFC7208: yml_test.go:225: test spfonly TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@spfonly.example.net TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "foo@spfonly.example.net" ("spfonly.example.net") TestRFC7208: spf.go:160: check spfonly.example.net 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [spfonly] TestRFC7208: yml_test.go:152: suite: Selecting records TestRFC7208: yml_test.go:157: domain example1.com TestRFC7208: yml_test.go:159: SPF: [v=spf1] TestRFC7208: yml_test.go:157: domain mail.example1.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain example5.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 +all] TestRFC7208: yml_test.go:159: TXT: [v=spf1 -all] TestRFC7208: yml_test.go:159: TXT: [v=spf1 +all] TestRFC7208: yml_test.go:157: domain example7.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:157: domain example8.com TestRFC7208: yml_test.go:159: SPF: [V=spf1 -all] TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:159: TXT: [v=spf1 +all] TestRFC7208: yml_test.go:157: domain example3.com TestRFC7208: yml_test.go:159: SPF: [v=spf10] TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx] TestRFC7208: yml_test.go:159: MX: {0 mail.example1.com} TestRFC7208: yml_test.go:157: domain example2.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx] TestRFC7208: yml_test.go:157: domain example4.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 +all] TestRFC7208: yml_test.go:159: TXT: [v=spf1 -all] TestRFC7208: yml_test.go:157: domain example6.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:159: SPF: [V=sPf1 +all] TestRFC7208: yml_test.go:157: domain example9.com TestRFC7208: yml_test.go:159: SPF: [v=SpF1 ~all] TestRFC7208: yml_test.go:225: test spfoverride TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example4.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example4.com" ("example4.com") TestRFC7208: spf.go:160: check example4.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [spfoverride] TestRFC7208: yml_test.go:225: test multitxt1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example5.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example5.com" ("example5.com") TestRFC7208: spf.go:160: check example5.com 1 TestRFC7208: spf.go:168: multiple dns records TestRFC7208: yml_test.go:234: success: permerror, multiple matching DNS records [multitxt1] TestRFC7208: yml_test.go:225: test multitxt2 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example6.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example6.com" ("example6.com") TestRFC7208: spf.go:160: check example6.com 1 TestRFC7208: spf.go:168: multiple dns records TestRFC7208: yml_test.go:234: success: permerror, multiple matching DNS records [multitxt2] TestRFC7208: yml_test.go:225: test multispf1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example7.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example7.com" ("example7.com") TestRFC7208: spf.go:160: check example7.com 1 TestRFC7208: spf.go:168: multiple dns records TestRFC7208: yml_test.go:234: success: permerror, multiple matching DNS records [multispf1] TestRFC7208: yml_test.go:225: test nospf TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@mail.example1.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@mail.example1.com" ("mail.example1.com") TestRFC7208: spf.go:160: check mail.example1.com 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [nospf] TestRFC7208: yml_test.go:225: test nospace1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example2.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example2.com" ("example2.com") TestRFC7208: spf.go:160: check example2.com 1 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: none, no DNS record found [nospace1] TestRFC7208: yml_test.go:225: test empty TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example1.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail1.example1.com" "foo@example1.com" ("example1.com") TestRFC7208: spf.go:160: check example1.com 1 TestRFC7208: spf.go:176: dns record "v=spf1" TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [empty] TestRFC7208: yml_test.go:225: test nospace2 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example3.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example3.com" ("example3.com") TestRFC7208: spf.go:160: check example3.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx" TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "example3.com" {-1 -1} TestRFC7208: spf.go:615: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC7208: spf.go:251: mx ok, pass matched 'mx' TestRFC7208: yml_test.go:234: success: pass, matched 'mx' [nospace2] TestRFC7208: yml_test.go:225: test multispf2 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example8.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example8.com" ("example8.com") TestRFC7208: spf.go:160: check example8.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 +all" TestRFC7208: spf.go:237: pass matched all TestRFC7208: yml_test.go:234: success: pass, matched 'all' [multispf2] TestRFC7208: yml_test.go:225: test case-insensitive TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@example9.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example9.com" ("example9.com") TestRFC7208: spf.go:160: check example9.com 1 TestRFC7208: spf.go:176: dns record "v=SpF1 ~all" TestRFC7208: spf.go:237: softfail matched all TestRFC7208: yml_test.go:234: success: softfail, matched 'all' [case-insensitive] TestRFC7208: yml_test.go:152: suite: Record evaluation TestRFC7208: yml_test.go:157: domain t6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] TestRFC7208: yml_test.go:157: domain t8.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] TestRFC7208: yml_test.go:157: domain t9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:foo-bar -all] TestRFC7208: yml_test.go:157: domain t11.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] TestRFC7208: yml_test.go:157: domain t12.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:%{H}.bar -all] TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain t2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] TestRFC7208: yml_test.go:157: domain t4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] TestRFC7208: yml_test.go:157: domain t5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 redirect=t5.example.com ~all] TestRFC7208: yml_test.go:157: domain t7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4] TestRFC7208: yml_test.go:157: domain t10.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:mail.example...com -all] TestRFC7208: yml_test.go:157: domain t1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4 -all moo] TestRFC7208: yml_test.go:157: domain t3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] TestRFC7208: yml_test.go:225: test modifier-charset-bad2 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@t4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t4.example.com" ("t4.example.com") TestRFC7208: spf.go:160: check t4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [modifier-charset-bad2] TestRFC7208: yml_test.go:225: test default-result TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 foo@t7.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "mail.example.com" "foo@t7.example.com" ("t7.example.com") TestRFC7208: spf.go:160: check t7.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.4" TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [default-result] TestRFC7208: yml_test.go:225: test invalid-domain-empty-label TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@t10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t10.example.com" ("t10.example.com") TestRFC7208: spf.go:160: check t10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:mail.example...com -all" TestRFC7208: spf.go:526: masks on "a:mail.example...com": ["a:mail.example...com" ":mail.example...com" "mail.example...com" "" "" "" ""] "mail.example...com" {-1 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [invalid-domain-empty-label] TestRFC7208: yml_test.go:225: test invalid-domain-long TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@t11.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t11.example.com" ("t11.example.com") TestRFC7208: spf.go:160: check t11.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" TestRFC7208: spf.go:526: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com": ["a:a123456789012345678901234567890123456789012345678901234567890123.example.com" ":a123456789012345678901234567890123456789012345678901234567890123.example.com" "a123456789012345678901234567890123456789012345678901234567890123.example.com" "" "" "" ""] "a123456789012345678901234567890123456789012345678901234567890123.example.com" {-1 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [invalid-domain-long] TestRFC7208: yml_test.go:225: test invalid-domain-long-via-macro TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@t12.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "%%%%%%%%%%%%%%%%%%%%%%" "foo@t12.example.com" ("t12.example.com") TestRFC7208: spf.go:160: check t12.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:%{H}.bar -all" TestRFC7208: spf.go:526: masks on "a:%{H}.bar": ["a:%{H}.bar" ":%{H}.bar" "%{H}.bar" "" "" "" ""] "%{H}.bar" {-1 -1} TestRFC7208: spf.go:708: macro "H": ["H" "H" "" "" ""] TestRFC7208: spf.go:805: macro expanded "%{H}.bar" to "t12.example.com.bar" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [invalid-domain-long-via-macro] TestRFC7208: yml_test.go:225: test modifier-charset-bad1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@t3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t3.example.com" ("t3.example.com") TestRFC7208: spf.go:160: check t3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [modifier-charset-bad1] TestRFC7208: yml_test.go:225: test redirect-after-mechanisms1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@t5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@t5.example.com" ("t5.example.com") TestRFC7208: spf.go:160: check t5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 redirect=t5.example.com ~all" TestRFC7208: spf.go:237: softfail matched all TestRFC7208: yml_test.go:234: success: softfail, matched 'all' [redirect-after-mechanisms1] TestRFC7208: yml_test.go:152: suite: ALL mechanism syntax TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all:foobar] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all/8] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ?all] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 all -all] TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all.] TestRFC7208: yml_test.go:225: test all-dot TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all." TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [all-dot] TestRFC7208: yml_test.go:225: test all-arg TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all:foobar" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [all-arg] TestRFC7208: yml_test.go:225: test all-cidr TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all/8" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [all-cidr] TestRFC7208: yml_test.go:225: test all-neutral TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ?all" TestRFC7208: spf.go:237: neutral matched all TestRFC7208: yml_test.go:234: success: neutral, matched 'all' [all-neutral] TestRFC7208: yml_test.go:225: test all-double TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 all -all" TestRFC7208: spf.go:237: pass matched all TestRFC7208: yml_test.go:234: success: pass, matched 'all' [all-double] TestRFC7208: yml_test.go:152: suite: PTR mechanism syntax TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:159: AAAA: [2001:db8::1] TestRFC7208: yml_test.go:157: domain loop.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr:example.Com -all] TestRFC7208: yml_test.go:157: domain 4.2.0.192.in-addr.arpa TestRFC7208: yml_test.go:159: PTR: [loop4.example.com.] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr -all] TestRFC7208: yml_test.go:157: domain 4.3.2.1.in-addr.arpa TestRFC7208: yml_test.go:159: PTR: [e3.example.com] TestRFC7208: yml_test.go:159: PTR: [e4.example.com] TestRFC7208: yml_test.go:159: PTR: [mail.example.com] TestRFC7208: yml_test.go:157: domain 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.D.0.1.0.0.2.ip6.arpa TestRFC7208: yml_test.go:159: PTR: [mail.Example.com] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr -all] TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:159: AAAA: [CAFE:BABE::1] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr:] TestRFC7208: yml_test.go:157: domain loop4.example.com TestRFC7208: yml_test.go:159: CNAME: [CNAME.example.com.] TestRFC7208: yml_test.go:157: domain cname.example.com TestRFC7208: yml_test.go:159: CNAME: [CNAME.example.com.] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr/0 -all] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr:example.com -all] TestRFC7208: yml_test.go:157: domain 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.E.B.A.B.E.F.A.C.ip6.arpa TestRFC7208: yml_test.go:159: PTR: [e3.example.com] TestRFC7208: yml_test.go:225: test ptr-nomatch-invalid TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr -all" TestRFC7208: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC7208: spf.go:398: ptr forward resolution "e4.example.com." -> [] TestRFC7208: spf.go:398: ptr forward resolution "mail.example.com." -> ["1.2.3.4" "2001:db8::1"] TestRFC7208: spf.go:407: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [ptr-nomatch-invalid] TestRFC7208: yml_test.go:225: test ptr-match-ip6 TestRFC7208: yml_test.go:227: checkhost cafe:babe::1 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::1" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr -all" TestRFC7208: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC7208: spf.go:407: ptr evaluating "e3.example.com" in ["e3.example.com."] TestRFC7208: spf.go:261: ptr ok, pass matched 'ptr' TestRFC7208: yml_test.go:234: success: pass, matched 'ptr' [ptr-match-ip6] TestRFC7208: yml_test.go:225: test ptr-empty-domain TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr:" TestRFC7208: spf.go:261: ptr ok, permerror invalid domain TestRFC7208: yml_test.go:234: success: permerror, invalid domain [ptr-empty-domain] TestRFC7208: yml_test.go:225: test ptr-case-change TestRFC7208: yml_test.go:227: checkhost 2001:db8::1 bar@e6.example.com TestRFC7208: spf.go:129: check host with sender "2001:db8::1" "mail.example.com" "bar@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr:example.Com -all" TestRFC7208: spf.go:398: ptr forward resolution "mail.Example.com." -> ["1.2.3.4" "2001:db8::1"] TestRFC7208: spf.go:407: ptr evaluating "example.Com" in ["mail.example.com."] TestRFC7208: spf.go:261: ptr ok, pass matched 'ptr' TestRFC7208: yml_test.go:234: success: pass, matched 'ptr' [ptr-case-change] TestRFC7208: yml_test.go:225: test ptr-cname-loop TestRFC7208: yml_test.go:227: checkhost 192.0.2.4 postmaster@loop.example.com TestRFC7208: spf.go:129: check host with sender "192.0.2.4" "loop.example.com" "postmaster@loop.example.com" ("loop.example.com") TestRFC7208: spf.go:160: check loop.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr" TestRFC7208: spf.go:398: ptr forward resolution "loop4.example.com." -> [] TestRFC7208: spf.go:407: ptr evaluating "loop.example.com" in [] TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [ptr-cname-loop] TestRFC7208: yml_test.go:225: test ptr-cidr TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr/0 -all" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [ptr-cidr] TestRFC7208: yml_test.go:225: test ptr-match-target TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr:example.com -all" TestRFC7208: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC7208: spf.go:398: ptr forward resolution "e4.example.com." -> [] TestRFC7208: spf.go:398: ptr forward resolution "mail.example.com." -> ["1.2.3.4" "2001:db8::1"] TestRFC7208: spf.go:407: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] TestRFC7208: spf.go:261: ptr ok, pass matched 'ptr' TestRFC7208: yml_test.go:234: success: pass, matched 'ptr' [ptr-match-target] TestRFC7208: yml_test.go:225: test ptr-match-implicit TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr -all" TestRFC7208: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.4" "cafe:babe::1"] TestRFC7208: spf.go:398: ptr forward resolution "e4.example.com." -> [] TestRFC7208: spf.go:398: ptr forward resolution "mail.example.com." -> ["1.2.3.4" "2001:db8::1"] TestRFC7208: spf.go:407: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] TestRFC7208: spf.go:261: ptr ok, pass matched 'ptr' TestRFC7208: yml_test.go:234: success: pass, matched 'ptr' [ptr-match-implicit] TestRFC7208: yml_test.go:152: suite: A mechanism syntax TestRFC7208: yml_test.go:157: domain foo:bar/baz.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a//129 -all] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a/0 -all] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a//33 -all] TestRFC7208: yml_test.go:157: domain e10.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:foo.example.com/24] TestRFC7208: yml_test.go:157: domain e13.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:abc.123] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:111.222.33.44] TestRFC7208: yml_test.go:157: domain e8.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a/24//64 -all] TestRFC7208: yml_test.go:157: domain e8e.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a/24/64 -all] TestRFC7208: yml_test.go:157: domain e12.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:example.-com] TestRFC7208: yml_test.go:157: domain foo.example.xn--zckzah TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e2a.example.com TestRFC7208: yml_test.go:159: AAAA: [1234::1] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a//0 -all] TestRFC7208: yml_test.go:157: domain ipv6.example.com TestRFC7208: yml_test.go:159: AAAA: [1234::1] TestRFC7208: yml_test.go:159: A: [1.1.1.1] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a -all] TestRFC7208: yml_test.go:157: domain e8b.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a//64 -all] TestRFC7208: yml_test.go:157: domain e9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:example.com:8080] TestRFC7208: yml_test.go:157: domain e11.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:foo:bar/baz.example.com] TestRFC7208: yml_test.go:157: domain e2b.example.com TestRFC7208: yml_test.go:159: A: [1.1.1.1] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a//0 -all] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: A: [1.1.1.1] TestRFC7208: yml_test.go:159: AAAA: [1234::2] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a/0 -all] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:foo.example.com] TestRFC7208: yml_test.go:157: domain foo.example.com TestRFC7208: yml_test.go:159: A: [1.1.1.1] TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:157: domain e14.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:foo.example.xn--zckzah -all] TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e5a.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:museum] TestRFC7208: yml_test.go:157: domain e5b.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:museum.] TestRFC7208: yml_test.go:157: domain e8a.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:159: AAAA: [2001:db8:1234::dead:beef] TestRFC7208: yml_test.go:159: SPF: [v=spf1 a/24 -all] TestRFC7208: yml_test.go:157: domain e6a.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a/33 -all] TestRFC7208: yml_test.go:225: test a-multi-ip2 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC7208: spf.go:160: check e10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:foo.example.com/24" TestRFC7208: spf.go:526: masks on "a:foo.example.com/24": ["a:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC7208: spf.go:561: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-multi-ip2] TestRFC7208: yml_test.go:225: test a-nxdomain TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/0 -all" TestRFC7208: spf.go:526: masks on "a/0": ["a/0" "" "" "/0" "0" "" ""] "e1.example.com" {0 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-nxdomain] TestRFC7208: yml_test.go:225: test a-bad-cidr6 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC7208: spf.go:160: check e7.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a//129 -all" TestRFC7208: spf.go:246: a ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [a-bad-cidr6] TestRFC7208: yml_test.go:225: test a-dual-cidr-ip6-default TestRFC7208: yml_test.go:227: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com TestRFC7208: spf.go:129: check host with sender "2001:db8:1234::cafe:babe" "mail.example.com" "foo@e8a.example.com" ("e8a.example.com") TestRFC7208: spf.go:160: check e8a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/24 -all" TestRFC7208: spf.go:526: masks on "a/24": ["a/24" "" "" "/24" "24" "" ""] "e8a.example.com" {24 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-dual-cidr-ip6-default] TestRFC7208: yml_test.go:225: test a-bad-cidr4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6a.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6a.example.com" ("e6a.example.com") TestRFC7208: spf.go:160: check e6a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/33 -all" TestRFC7208: spf.go:246: a ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [a-bad-cidr4] TestRFC7208: yml_test.go:225: test a-dual-cidr-ip6-match TestRFC7208: yml_test.go:227: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com TestRFC7208: spf.go:129: check host with sender "2001:db8:1234::cafe:babe" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC7208: spf.go:160: check e8.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/24//64 -all" TestRFC7208: spf.go:526: masks on "a/24//64": ["a/24//64" "" "" "/24" "24" "//64" "64"] "e8.example.com" {24 64} TestRFC7208: spf.go:561: mx matched 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, {24 64} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-dual-cidr-ip6-match] TestRFC7208: yml_test.go:225: test a-multi-ip1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC7208: spf.go:160: check e10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:foo.example.com/24" TestRFC7208: spf.go:526: masks on "a:foo.example.com/24": ["a:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC7208: spf.go:561: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-multi-ip1] TestRFC7208: yml_test.go:225: test a-dual-cidr-ip4-err TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e8e.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8e.example.com" ("e8e.example.com") TestRFC7208: spf.go:160: check e8e.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/24/64 -all" TestRFC7208: spf.go:526: masks on "a/24/64": [] "e8e.example.com" {-1 -1} TestRFC7208: spf.go:246: a ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [a-dual-cidr-ip4-err] TestRFC7208: yml_test.go:225: test a-dash-in-toplabel TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e14.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e14.example.com" ("e14.example.com") TestRFC7208: spf.go:160: check e14.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:foo.example.xn--zckzah -all" TestRFC7208: spf.go:526: masks on "a:foo.example.xn--zckzah": ["a:foo.example.xn--zckzah" ":foo.example.xn--zckzah" "foo.example.xn--zckzah" "" "" "" ""] "foo.example.xn--zckzah" {-1 -1} TestRFC7208: spf.go:561: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-dash-in-toplabel] TestRFC7208: yml_test.go:225: test a-cidr6-0-ip4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC7208: spf.go:160: check e2a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC7208: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-cidr6-0-ip4] TestRFC7208: yml_test.go:225: test a-dual-cidr-ip4-default TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e8b.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8b.example.com" ("e8b.example.com") TestRFC7208: spf.go:160: check e8b.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a//64 -all" TestRFC7208: spf.go:526: masks on "a//64": ["a//64" "" "" "" "" "//64" "64"] "e8b.example.com" {-1 64} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-dual-cidr-ip4-default] TestRFC7208: yml_test.go:225: test a-cidr6-0-ip6 TestRFC7208: yml_test.go:227: checkhost 1234::1 foo@e2a.example.com TestRFC7208: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC7208: spf.go:160: check e2a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC7208: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC7208: spf.go:561: mx matched 1234::1, 1234::1, {-1 0} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-cidr6-0-ip6] TestRFC7208: yml_test.go:225: test a-cidr6-0-nxdomain TestRFC7208: yml_test.go:227: checkhost 1234::1 foo@e2b.example.com TestRFC7208: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2b.example.com" ("e2b.example.com") TestRFC7208: spf.go:160: check e2b.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC7208: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2b.example.com" {-1 0} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-cidr6-0-nxdomain] TestRFC7208: yml_test.go:225: test a-cidr6-0-ip4mapped TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC7208: spf.go:160: check e2a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a//0 -all" TestRFC7208: spf.go:526: masks on "a//0": ["a//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-cidr6-0-ip4mapped] TestRFC7208: yml_test.go:225: test a-ip6-dualstack TestRFC7208: yml_test.go:227: checkhost 1234::1 foo@ipv6.example.com TestRFC7208: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@ipv6.example.com" ("ipv6.example.com") TestRFC7208: spf.go:160: check ipv6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a -all" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "ipv6.example.com" {-1 -1} TestRFC7208: spf.go:561: mx matched 1234::1, 1234::1, {-1 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-ip6-dualstack] TestRFC7208: yml_test.go:225: test a-dual-cidr-ip4-match TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC7208: spf.go:160: check e8.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/24//64 -all" TestRFC7208: spf.go:526: masks on "a/24//64": ["a/24//64" "" "" "/24" "24" "//64" "64"] "e8.example.com" {24 64} TestRFC7208: spf.go:561: mx matched 1.2.3.4, 1.2.3.5, {24 64} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-dual-cidr-ip4-match] TestRFC7208: yml_test.go:225: test a-cidr4-0 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/0 -all" TestRFC7208: spf.go:526: masks on "a/0": ["a/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC7208: spf.go:561: mx matched 1.2.3.4, 1.1.1.1, {0 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [a-cidr4-0] TestRFC7208: yml_test.go:225: test a-cidr4-0-ip6 TestRFC7208: yml_test.go:227: checkhost 1234::1 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a/0 -all" TestRFC7208: spf.go:526: masks on "a/0": ["a/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-cidr4-0-ip6] TestRFC7208: yml_test.go:225: test a-cidr6 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a//33 -all" TestRFC7208: spf.go:526: masks on "a//33": ["a//33" "" "" "" "" "//33" "33"] "e6.example.com" {-1 33} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [a-cidr6] TestRFC7208: yml_test.go:152: suite: Include mechanism semantics and syntax TestRFC7208: yml_test.go:157: domain ip5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.5 -all] TestRFC7208: yml_test.go:157: domain e7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:erehwon.example.com -all] TestRFC7208: yml_test.go:157: domain erehwon.example.com TestRFC7208: yml_test.go:159: TXT: [v=spfl am not an SPF record] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:ip6.example.com all] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:ip7.example.com -all] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:e6.example.com -all] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include +all] TestRFC7208: yml_test.go:157: domain e8.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include: -all] TestRFC7208: yml_test.go:157: domain e9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:ip5.example.com/24 -all] TestRFC7208: yml_test.go:157: domain ip7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.7 ?all] TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain ip6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.6 ~all] TestRFC7208: yml_test.go:157: domain ip8.example.com TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:ip5.example.com ~all] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:ip8.example.com -all] TestRFC7208: yml_test.go:225: test include-none TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC7208: spf.go:160: check e7.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:erehwon.example.com -all" TestRFC7208: spf.go:160: check erehwon.example.com 2 TestRFC7208: spf.go:176: dns record "" TestRFC7208: spf.go:241: include ok, permerror no DNS record found TestRFC7208: yml_test.go:234: success: permerror, no DNS record found [include-none] TestRFC7208: yml_test.go:225: test include-softfail TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:ip6.example.com all" TestRFC7208: spf.go:160: check ip6.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.6 ~all" TestRFC7208: spf.go:237: softfail matched all TestRFC7208: spf.go:237: pass matched all TestRFC7208: yml_test.go:234: success: pass, matched 'all' [include-softfail] TestRFC7208: yml_test.go:225: test include-neutral TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:ip7.example.com -all" TestRFC7208: spf.go:160: check ip7.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.7 ?all" TestRFC7208: spf.go:237: neutral matched all TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [include-neutral] TestRFC7208: yml_test.go:225: test include-temperror TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:ip8.example.com -all" TestRFC7208: spf.go:160: check ip8.example.com 2 TestRFC7208: spf.go:164: dns temp error: lookup : test timeout error TestRFC7208: spf.go:241: include ok, temperror lookup : test timeout error TestRFC7208: yml_test.go:234: success: temperror, lookup : test timeout error [include-temperror] TestRFC7208: yml_test.go:225: test include-permerror TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:e6.example.com -all" TestRFC7208: spf.go:160: check e6.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 include +all" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: spf.go:241: include ok, permerror unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [include-permerror] TestRFC7208: yml_test.go:225: test include-syntax-error TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include +all" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [include-syntax-error] TestRFC7208: yml_test.go:225: test include-cidr TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e9.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e9.example.com" ("e9.example.com") TestRFC7208: spf.go:160: check e9.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:ip5.example.com/24 -all" TestRFC7208: spf.go:659: macro contains / TestRFC7208: spf.go:241: include ok, permerror invalid macro TestRFC7208: yml_test.go:234: success: permerror, invalid macro [include-cidr] TestRFC7208: yml_test.go:225: test include-empty-domain TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC7208: spf.go:160: check e8.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include: -all" TestRFC7208: spf.go:160: check 2 TestRFC7208: spf.go:176: dns record "" TestRFC7208: spf.go:241: include ok, permerror no DNS record found TestRFC7208: yml_test.go:234: success: permerror, no DNS record found [include-empty-domain] TestRFC7208: yml_test.go:225: test include-fail TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:ip5.example.com ~all" TestRFC7208: spf.go:160: check ip5.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.5 -all" TestRFC7208: spf.go:237: fail matched all TestRFC7208: spf.go:237: softfail matched all TestRFC7208: yml_test.go:234: success: softfail, matched 'all' [include-fail] TestRFC7208: yml_test.go:152: suite: MX mechanism syntax TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx] TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx//129 -all] TestRFC7208: yml_test.go:157: domain foo1.example.com TestRFC7208: yml_test.go:159: A: [1.1.1.1] TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:157: domain e12.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx:example.-com] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx:abc.123] TestRFC7208: yml_test.go:157: domain e9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx:example.com:8080] TestRFC7208: yml_test.go:157: domain e10.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx:foo.example.com/24] TestRFC7208: yml_test.go:157: domain e11.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx:foo:bar/baz.example.com] TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:159: MX: {0 } TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx] TestRFC7208: yml_test.go:157: domain e2b.example.com TestRFC7208: yml_test.go:159: A: [1.1.1.1] TestRFC7208: yml_test.go:159: MX: {0 e2b.example.com} TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx//0 -all] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx//33 -all] TestRFC7208: yml_test.go:157: domain foo.example.com TestRFC7208: yml_test.go:159: MX: {0 foo1.example.com} TestRFC7208: yml_test.go:157: domain e13.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx: -all] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx/0 -all] TestRFC7208: yml_test.go:159: MX: {0 e1.example.com} TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: A: [1.1.1.1] TestRFC7208: yml_test.go:159: AAAA: [1234::2] TestRFC7208: yml_test.go:159: MX: {0 e2.example.com} TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx/0 -all] TestRFC7208: yml_test.go:157: domain e2a.example.com TestRFC7208: yml_test.go:159: AAAA: [1234::1] TestRFC7208: yml_test.go:159: MX: {0 e2a.example.com} TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx//0 -all] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx:foo.example.com] TestRFC7208: yml_test.go:157: domain e6a.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx/33 -all] TestRFC7208: yml_test.go:157: domain foo:bar/baz.example.com TestRFC7208: yml_test.go:159: MX: {0 foo:bar/baz.example.com} TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:225: test mx-cidr6 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx//33 -all" TestRFC7208: spf.go:526: masks on "mx//33": ["mx//33" "" "" "" "" "//33" "33"] "e6.example.com" {-1 33} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [mx-cidr6] TestRFC7208: yml_test.go:225: test mx-cidr6-0-nxdomain TestRFC7208: yml_test.go:227: checkhost 1234::1 foo@e2b.example.com TestRFC7208: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2b.example.com" ("e2b.example.com") TestRFC7208: spf.go:160: check e2b.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC7208: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2b.example.com" {-1 0} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [mx-cidr6-0-nxdomain] TestRFC7208: yml_test.go:225: test mx-multi-ip1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC7208: spf.go:160: check e10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx:foo.example.com/24" TestRFC7208: spf.go:526: masks on "mx:foo.example.com/24": ["mx:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC7208: spf.go:615: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC7208: spf.go:251: mx ok, pass matched 'mx' TestRFC7208: yml_test.go:234: success: pass, matched 'mx' [mx-multi-ip1] TestRFC7208: yml_test.go:225: test mx-cidr4-0 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx/0 -all" TestRFC7208: spf.go:526: masks on "mx/0": ["mx/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC7208: spf.go:615: mx matched 1.2.3.4, 1.1.1.1, {0 -1} TestRFC7208: spf.go:251: mx ok, pass matched 'mx' TestRFC7208: yml_test.go:234: success: pass, matched 'mx' [mx-cidr4-0] TestRFC7208: yml_test.go:225: test mx-cidr6-0-ip4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC7208: spf.go:160: check e2a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC7208: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [mx-cidr6-0-ip4] TestRFC7208: yml_test.go:225: test mx-cidr6-0-ip4mapped TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2a.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC7208: spf.go:160: check e2a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC7208: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [mx-cidr6-0-ip4mapped] TestRFC7208: yml_test.go:225: test mx-implicit TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx" TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e4.example.com" {-1 -1} TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [mx-implicit] TestRFC7208: yml_test.go:225: test mx-bad-cidr6 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC7208: spf.go:160: check e7.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx//129 -all" TestRFC7208: spf.go:251: mx ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [mx-bad-cidr6] TestRFC7208: yml_test.go:225: test mx-empty TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "" ("mail.example.com") TestRFC7208: spf.go:160: check mail.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx" TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "mail.example.com" {-1 -1} TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [mx-empty] TestRFC7208: yml_test.go:225: test mx-bad-cidr4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6a.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6a.example.com" ("e6a.example.com") TestRFC7208: spf.go:160: check e6a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx/33 -all" TestRFC7208: spf.go:251: mx ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [mx-bad-cidr4] TestRFC7208: yml_test.go:225: test mx-multi-ip2 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC7208: spf.go:160: check e10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx:foo.example.com/24" TestRFC7208: spf.go:526: masks on "mx:foo.example.com/24": ["mx:foo.example.com/24" ":foo.example.com" "foo.example.com" "/24" "24" "" ""] "foo.example.com" {24 -1} TestRFC7208: spf.go:615: mx matched 1.2.3.4, 1.2.3.5, {24 -1} TestRFC7208: spf.go:251: mx ok, pass matched 'mx' TestRFC7208: yml_test.go:234: success: pass, matched 'mx' [mx-multi-ip2] TestRFC7208: yml_test.go:225: test mx-nxdomain TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx/0 -all" TestRFC7208: spf.go:526: masks on "mx/0": ["mx/0" "" "" "/0" "0" "" ""] "e1.example.com" {0 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [mx-nxdomain] TestRFC7208: yml_test.go:225: test mx-cidr4-0-ip6 TestRFC7208: yml_test.go:227: checkhost 1234::1 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx/0 -all" TestRFC7208: spf.go:526: masks on "mx/0": ["mx/0" "" "" "/0" "0" "" ""] "e2.example.com" {0 -1} TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [mx-cidr4-0-ip6] TestRFC7208: yml_test.go:225: test mx-cidr6-0-ip6 TestRFC7208: yml_test.go:227: checkhost 1234::1 foo@e2a.example.com TestRFC7208: spf.go:129: check host with sender "1234::1" "mail.example.com" "foo@e2a.example.com" ("e2a.example.com") TestRFC7208: spf.go:160: check e2a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx//0 -all" TestRFC7208: spf.go:526: masks on "mx//0": ["mx//0" "" "" "" "" "//0" "0"] "e2a.example.com" {-1 0} TestRFC7208: spf.go:615: mx matched 1234::1, 1234::1, {-1 0} TestRFC7208: spf.go:251: mx ok, pass matched 'mx' TestRFC7208: yml_test.go:234: success: pass, matched 'mx' [mx-cidr6-0-ip6] TestRFC7208: yml_test.go:152: suite: EXISTS mechanism syntax TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:mail.example.com/24] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:mail.example.com] TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain mail6.example.com TestRFC7208: yml_test.go:159: AAAA: [CAFE:BABE::4] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:mail6.example.com -all] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:err.example.com -all] TestRFC7208: yml_test.go:157: domain err.example.com TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists] TestRFC7208: yml_test.go:225: test exists-implicit TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [exists-implicit] TestRFC7208: yml_test.go:225: test exists-cidr TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:mail.example.com/24" TestRFC7208: spf.go:659: macro contains / TestRFC7208: spf.go:266: exists ok, permerror invalid macro TestRFC7208: yml_test.go:234: success: permerror, invalid macro [exists-cidr] TestRFC7208: yml_test.go:225: test exists-ip4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:mail.example.com" TestRFC7208: spf.go:266: exists ok, pass matched 'exists' TestRFC7208: yml_test.go:234: success: pass, matched 'exists' [exists-ip4] TestRFC7208: yml_test.go:225: test exists-ip6 TestRFC7208: yml_test.go:227: checkhost cafe:babe::3 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::3" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:mail.example.com" TestRFC7208: spf.go:266: exists ok, pass matched 'exists' TestRFC7208: yml_test.go:234: success: pass, matched 'exists' [exists-ip6] TestRFC7208: yml_test.go:225: test exists-ip6only TestRFC7208: yml_test.go:227: checkhost cafe:babe::3 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::3" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:mail6.example.com -all" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [exists-ip6only] TestRFC7208: yml_test.go:225: test exists-dnserr TestRFC7208: yml_test.go:227: checkhost cafe:babe::3 foo@e6.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::3" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:err.example.com -all" TestRFC7208: spf.go:266: exists ok, temperror lookup : test timeout error TestRFC7208: yml_test.go:234: success: temperror, lookup : test timeout error [exists-dnserr] TestRFC7208: yml_test.go:225: test exists-empty-domain TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:" TestRFC7208: spf.go:266: exists ok, permerror invalid domain TestRFC7208: yml_test.go:234: success: permerror, invalid domain [exists-empty-domain] TestRFC7208: yml_test.go:152: suite: IP4 mechanism syntax TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4] TestRFC7208: yml_test.go:157: domain e7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] TestRFC7208: yml_test.go:157: domain e8.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4:8080] TestRFC7208: yml_test.go:157: domain e9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.1.1.1/0 -all] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4/32 -all] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4/33 -all] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4/032 -all] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4//32] TestRFC7208: yml_test.go:225: test bad-ip4-short TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e9.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e9.example.com" ("e9.example.com") TestRFC7208: spf.go:160: check e9.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3" TestRFC7208: spf.go:256: ip ok, permerror invalid ipX value TestRFC7208: yml_test.go:234: success: permerror, invalid ipX value [bad-ip4-short] TestRFC7208: yml_test.go:225: test bare-ip4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [bare-ip4] TestRFC7208: yml_test.go:225: test cidr4-33 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.4/33 -all" TestRFC7208: spf.go:256: ip ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [cidr4-33] TestRFC7208: yml_test.go:225: test bad-ip4-port TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC7208: spf.go:160: check e8.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.4:8080" TestRFC7208: spf.go:256: ip ok, permerror invalid ipX value TestRFC7208: yml_test.go:234: success: permerror, invalid ipX value [bad-ip4-port] TestRFC7208: yml_test.go:225: test ip4-dual-cidr TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.4//32" TestRFC7208: spf.go:256: ip ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [ip4-dual-cidr] TestRFC7208: yml_test.go:225: test ip4-mapped-ip6 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC7208: spf.go:160: check e7.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" TestRFC7208: spf.go:256: ip ok, fail matched 'ip' TestRFC7208: yml_test.go:234: success: fail, matched 'ip' [ip4-mapped-ip6] TestRFC7208: yml_test.go:225: test cidr4-0 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1/0 -all" TestRFC7208: spf.go:256: ip ok, pass matched 'ip' TestRFC7208: yml_test.go:234: success: pass, matched 'ip' [cidr4-0] TestRFC7208: yml_test.go:225: test cidr4-32 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.2.3.4/32 -all" TestRFC7208: spf.go:256: ip ok, pass matched 'ip' TestRFC7208: yml_test.go:234: success: pass, matched 'ip' [cidr4-32] TestRFC7208: yml_test.go:152: suite: IP6 mechanism syntax TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all ip6] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip6:::1.1.1.1/0] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip6:::1.1.1.1/129] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip6:::1.1.1.1//33] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip6:Cafe:Babe:8000::/33] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip6::CAFE::BABE] TestRFC7208: yml_test.go:225: test cidr6-33-ip4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [cidr6-33-ip4] TestRFC7208: yml_test.go:225: test cidr6-129 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/129" TestRFC7208: spf.go:256: ip ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [cidr6-129] TestRFC7208: yml_test.go:225: test cidr6-bad TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1//33" TestRFC7208: spf.go:256: ip ok, permerror invalid mask TestRFC7208: yml_test.go:234: success: permerror, invalid mask [cidr6-bad] TestRFC7208: yml_test.go:225: test cidr6-33 TestRFC7208: yml_test.go:227: checkhost cafe:babe:8000:: foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe:8000::" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" TestRFC7208: spf.go:256: ip ok, pass matched 'ip' TestRFC7208: yml_test.go:234: success: pass, matched 'ip' [cidr6-33] TestRFC7208: yml_test.go:225: test cidr6-0-ip4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/0" TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [cidr6-0-ip4] TestRFC7208: yml_test.go:225: test cidr6-ip4 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/0" TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [cidr6-ip4] TestRFC7208: yml_test.go:225: test cidr6-0 TestRFC7208: yml_test.go:227: checkhost deaf:babe::cab:fee foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "deaf:babe::cab:fee" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6:::1.1.1.1/0" TestRFC7208: spf.go:256: ip ok, pass matched 'ip' TestRFC7208: yml_test.go:234: success: pass, matched 'ip' [cidr6-0] TestRFC7208: yml_test.go:225: test ip6-bad1 TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip6::CAFE::BABE" TestRFC7208: spf.go:256: ip ok, permerror invalid ipX value TestRFC7208: yml_test.go:234: success: permerror, invalid ipX value [ip6-bad1] TestRFC7208: yml_test.go:152: suite: Semantics of exp and other modifiers TestRFC7208: yml_test.go:157: domain exp2.example.com TestRFC7208: yml_test.go:159: TXT: [See me.] TestRFC7208: yml_test.go:157: domain e13msg.example.com TestRFC7208: yml_test.go:159: TXT: [The %{x}-files.] TestRFC7208: yml_test.go:157: domain e10.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 redirect=erehwon.example.com] TestRFC7208: yml_test.go:157: domain e18.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ?all redirect=] TestRFC7208: yml_test.go:157: domain e20.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 default=+] TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all] TestRFC7208: yml_test.go:157: domain e7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] TestRFC7208: yml_test.go:157: domain e21.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=e21msg.example.com -all] TestRFC7208: yml_test.go:157: domain nonascii.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=badexp.example.com -all] TestRFC7208: yml_test.go:157: domain e23.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] TestRFC7208: yml_test.go:157: domain e13.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=e13msg.example.com -all] TestRFC7208: yml_test.go:157: domain e15.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] TestRFC7208: yml_test.go:157: domain e19.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 default=pass] TestRFC7208: yml_test.go:157: domain twoexp.example.com TestRFC7208: yml_test.go:159: TXT: [one] TestRFC7208: yml_test.go:159: TXT: [two] TestRFC7208: yml_test.go:157: domain exp1.example.com TestRFC7208: yml_test.go:159: TXT: [No-see-um] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 1up=foo] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 =all] TestRFC7208: yml_test.go:157: domain e8.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=exp4.example.com] TestRFC7208: yml_test.go:157: domain e14.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] TestRFC7208: yml_test.go:157: domain tworecs.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=twoexp.example.com -all] TestRFC7208: yml_test.go:157: domain e24.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 redirect=testimplicit.example.com] TestRFC7208: yml_test.go:159: A: [192.0.2.1] TestRFC7208: yml_test.go:157: domain testimplicit.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a -all] TestRFC7208: yml_test.go:159: A: [192.0.2.2] TestRFC7208: yml_test.go:157: domain exp3.example.com TestRFC7208: yml_test.go:159: TXT: [Correct!] TestRFC7208: yml_test.go:157: domain exp4.example.com TestRFC7208: yml_test.go:159: TXT: [%{l} in implementation] TestRFC7208: yml_test.go:157: domain e12.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp= -all] TestRFC7208: yml_test.go:157: domain e22.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=mail.example.com -all] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=exp2.example.com] TestRFC7208: yml_test.go:157: domain e9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all foo=%abc] TestRFC7208: yml_test.go:157: domain e16.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=-all] TestRFC7208: yml_test.go:157: domain badexp.example.com TestRFC7208: yml_test.go:159: TXT: [Explanation] TestRFC7208: yml_test.go:157: domain e11.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=e11msg.example.com] TestRFC7208: yml_test.go:157: domain e11msg.example.com TestRFC7208: yml_test.go:159: TXT: [Answer a fool according to his folly.] TestRFC7208: yml_test.go:159: TXT: [Do not answer a fool according to his folly.] TestRFC7208: yml_test.go:157: domain e17.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 redirect=-all ?all] TestRFC7208: yml_test.go:157: domain e21msg.example.com TestRFC7208: yml_test.go:159: TIMEOUT TestRFC7208: yml_test.go:225: test redirect-cancels-exp TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:273: redirect, "redirect=e2.example.com" TestRFC7208: spf.go:160: check e2.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 -all" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [redirect-cancels-exp] TestRFC7208: yml_test.go:225: test invalid-modifier TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 1up=foo" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [invalid-modifier] TestRFC7208: yml_test.go:225: test two-exp-records TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foobar@tworecs.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@tworecs.example.com" ("tworecs.example.com") TestRFC7208: spf.go:160: check tworecs.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=twoexp.example.com -all" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [two-exp-records] TestRFC7208: yml_test.go:225: test non-ascii-exp TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foobar@nonascii.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "hosed" "foobar@nonascii.example.com" ("nonascii.example.com") TestRFC7208: spf.go:160: check nonascii.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=badexp.example.com -all" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [non-ascii-exp] TestRFC7208: yml_test.go:225: test redirect-implicit TestRFC7208: yml_test.go:227: checkhost 192.0.2.2 bar@e24.example.com TestRFC7208: spf.go:129: check host with sender "192.0.2.2" "e24.example.com" "bar@e24.example.com" ("e24.example.com") TestRFC7208: spf.go:160: check e24.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 redirect=testimplicit.example.com" TestRFC7208: spf.go:273: redirect, "redirect=testimplicit.example.com" TestRFC7208: spf.go:160: check testimplicit.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 a -all" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "testimplicit.example.com" {-1 -1} TestRFC7208: spf.go:561: mx matched 192.0.2.2, 192.0.2.2, {-1 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [redirect-implicit] TestRFC7208: yml_test.go:225: test redirect-none TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC7208: spf.go:160: check e10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 redirect=erehwon.example.com" TestRFC7208: spf.go:273: redirect, "redirect=erehwon.example.com" TestRFC7208: spf.go:160: check erehwon.example.com 2 TestRFC7208: spf.go:176: dns record "" TestRFC7208: yml_test.go:234: success: permerror, no DNS record found [redirect-none] TestRFC7208: yml_test.go:225: test dorky-sentinel TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 Macro Error@e8.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "Macro Error@e8.example.com" ("e8.example.com") TestRFC7208: spf.go:160: check e8.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=exp4.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [dorky-sentinel] TestRFC7208: yml_test.go:225: test exp-multiple-txt TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e11.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e11.example.com" ("e11.example.com") TestRFC7208: spf.go:160: check e11.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=e11msg.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [exp-multiple-txt] TestRFC7208: yml_test.go:225: test explanation-syntax-error TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e13.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e13.example.com" ("e13.example.com") TestRFC7208: spf.go:160: check e13.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=e13msg.example.com -all" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [explanation-syntax-error] TestRFC7208: yml_test.go:225: test redirect-cancels-prior-exp TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e3.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:273: redirect, "redirect=e4.example.com" TestRFC7208: spf.go:160: check e4.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=exp2.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [redirect-cancels-prior-exp] TestRFC7208: yml_test.go:225: test exp-void TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e23.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e23.example.com" ("e23.example.com") TestRFC7208: spf.go:160: check e23.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all" TestRFC7208: spf.go:526: masks on "a:erehwon.example.com": ["a:erehwon.example.com" ":erehwon.example.com" "erehwon.example.com" "" "" "" ""] "erehwon.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a:foobar.com": ["a:foobar.com" ":foobar.com" "foobar.com" "" "" "" ""] "foobar.com" {-1 -1} TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [exp-void] TestRFC7208: yml_test.go:225: test include-ignores-exp TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC7208: spf.go:160: check e7.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" TestRFC7208: spf.go:160: check e3.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:273: redirect, "redirect=e4.example.com" TestRFC7208: spf.go:160: check e4.example.com 3 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=exp2.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [include-ignores-exp] TestRFC7208: yml_test.go:225: test empty-modifier-name TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e6.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 =all" TestRFC7208: spf.go:277: permerror, unknown field TestRFC7208: yml_test.go:234: success: permerror, unknown field [empty-modifier-name] TestRFC7208: yml_test.go:225: test exp-no-txt TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e22.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e22.example.com" ("e22.example.com") TestRFC7208: spf.go:160: check e22.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=mail.example.com -all" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [exp-no-txt] TestRFC7208: yml_test.go:225: test exp-dns-error TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e21.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e21.example.com" ("e21.example.com") TestRFC7208: spf.go:160: check e21.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=e21msg.example.com -all" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [exp-dns-error] TestRFC7208: yml_test.go:225: test redirect-twice TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e15.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e15.example.com" ("e15.example.com") TestRFC7208: spf.go:160: check e15.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" TestRFC7208: yml_test.go:234: success: permerror, invalid domain [redirect-twice] TestRFC7208: yml_test.go:152: suite: Macro expansion rules TestRFC7208: yml_test.go:157: domain msgbas2x.cos.example.com TestRFC7208: yml_test.go:159: A: [192.168.218.40] TestRFC7208: yml_test.go:157: domain msg.example.com TestRFC7208: yml_test.go:159: TXT: [This is a test.] TestRFC7208: yml_test.go:157: domain 40.218.168.192.example.com TestRFC7208: yml_test.go:159: TXT: [Connections from %{c} not authorized.] TestRFC7208: yml_test.go:157: domain 1.2.3.4.gladstone.philip.user.example.com TestRFC7208: yml_test.go:159: A: [127.0.0.2] TestRFC7208: yml_test.go:157: domain mx.example.com.ok.example.com TestRFC7208: yml_test.go:159: A: [127.0.0.2] TestRFC7208: yml_test.go:157: domain e9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:%{H} -all] TestRFC7208: yml_test.go:157: domain e10.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] TestRFC7208: yml_test.go:157: domain somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.somewhat.long.exp.example.com.example.com TestRFC7208: yml_test.go:159: TXT: [Congratulations! That was tricky.] TestRFC7208: yml_test.go:157: domain e4msg.example.com TestRFC7208: yml_test.go:159: TXT: [%{c} is queried as %{ir}.%{v}.arpa] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:%{a}.example.com -all] TestRFC7208: yml_test.go:157: domain 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.E.B.A.B.E.F.A.C.ip6.arpa TestRFC7208: yml_test.go:159: PTR: [mx.example.com] TestRFC7208: yml_test.go:157: domain 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.E.B.A.B.E.F.A.C.ip6.arpa TestRFC7208: yml_test.go:159: PTR: [mx.example.com] TestRFC7208: yml_test.go:157: domain _spfh.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -a:%{h} +all] TestRFC7208: yml_test.go:157: domain e12.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=e6msg.example.com] TestRFC7208: yml_test.go:157: domain mx.e7.example.com TestRFC7208: yml_test.go:159: A: [192.168.218.42] TestRFC7208: yml_test.go:157: domain msg8.example.com TestRFC7208: yml_test.go:159: TXT: [http://example.com/why.html?l=%{L}] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=%{ir}.example.com] TestRFC7208: yml_test.go:157: domain somewhat.long.exp.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] TestRFC7208: yml_test.go:157: domain mx.example.com TestRFC7208: yml_test.go:159: A: [192.168.218.41] TestRFC7208: yml_test.go:159: A: [192.168.218.42] TestRFC7208: yml_test.go:159: AAAA: [CAFE:BABE::2] TestRFC7208: yml_test.go:159: AAAA: [CAFE:BABE::3] TestRFC7208: yml_test.go:157: domain e8.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=msg8.%{D2}] TestRFC7208: yml_test.go:157: domain e1e.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] TestRFC7208: yml_test.go:157: domain e6msg.example.com TestRFC7208: yml_test.go:159: TXT: [connect from %{p}] TestRFC7208: yml_test.go:157: domain 40.218.168.192.in-addr.arpa TestRFC7208: yml_test.go:159: PTR: [mx.example.com] TestRFC7208: yml_test.go:157: domain 42.218.168.192.in-addr.arpa TestRFC7208: yml_test.go:159: PTR: [mx.example.com] TestRFC7208: yml_test.go:159: PTR: [mx.e7.example.com] TestRFC7208: yml_test.go:157: domain example.com.d.spf.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 redirect=a.spf.example.com] TestRFC7208: yml_test.go:157: domain example.com TestRFC7208: yml_test.go:159: A: [192.168.90.76] TestRFC7208: yml_test.go:159: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] TestRFC7208: yml_test.go:157: domain exp.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exp=msg.example.com. -all] TestRFC7208: yml_test.go:157: domain e1a.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] TestRFC7208: yml_test.go:157: domain 41.218.168.192.in-addr.arpa TestRFC7208: yml_test.go:159: PTR: [mx.example.com] TestRFC7208: yml_test.go:157: domain a.spf.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:o.spf.example.com. ~all] TestRFC7208: yml_test.go:157: domain o.spf.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:192.168.218.40] TestRFC7208: yml_test.go:157: domain macro%percent space%20url-space.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] TestRFC7208: yml_test.go:157: domain bar.foo.user.example.com TestRFC7208: yml_test.go:159: A: [127.0.0.2] TestRFC7208: yml_test.go:157: domain e11.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] TestRFC7208: yml_test.go:157: domain e1t.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=%{r}.example.com] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 -all exp=e4msg.example.com] TestRFC7208: yml_test.go:157: domain mx.e7.example.com.should.example.com TestRFC7208: yml_test.go:159: A: [127.0.0.2] TestRFC7208: yml_test.go:225: test p-macro-ip4-novalid TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e6.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [p-macro-ip4-novalid] TestRFC7208: yml_test.go:225: test trailing-dot-domain TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@example.com" ("example.com") TestRFC7208: spf.go:160: check example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 redirect=%{d}.d.spf.example.com." TestRFC7208: spf.go:273: redirect, "redirect=%{d}.d.spf.example.com." TestRFC7208: spf.go:708: macro "d": ["d" "d" "" "" ""] TestRFC7208: spf.go:805: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." TestRFC7208: spf.go:160: check example.com.d.spf.example.com. 2 TestRFC7208: spf.go:176: dns record "v=spf1 redirect=a.spf.example.com" TestRFC7208: spf.go:273: redirect, "redirect=a.spf.example.com" TestRFC7208: spf.go:160: check a.spf.example.com 3 TestRFC7208: spf.go:176: dns record "v=spf1 include:o.spf.example.com. ~all" TestRFC7208: spf.go:160: check o.spf.example.com. 4 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:192.168.218.40" TestRFC7208: spf.go:256: ip ok, pass matched 'ip' TestRFC7208: spf.go:241: include ok, pass matched 'ip' TestRFC7208: yml_test.go:234: success: pass, matched 'ip' [trailing-dot-domain] TestRFC7208: yml_test.go:225: test invalid-embedded-macro-char TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e1e.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e1e.example.com" ("e1e.example.com") TestRFC7208: spf.go:160: check e1e.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" TestRFC7208: spf.go:266: exists ok, permerror invalid macro TestRFC7208: yml_test.go:234: success: permerror, invalid macro [invalid-embedded-macro-char] TestRFC7208: yml_test.go:225: test invalid-trailing-macro-char TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e1t.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e1t.example.com" ("e1t.example.com") TestRFC7208: spf.go:160: check e1t.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:foo%.sbl.example.com ?all" TestRFC7208: spf.go:266: exists ok, permerror invalid macro TestRFC7208: yml_test.go:234: success: permerror, invalid macro [invalid-trailing-macro-char] TestRFC7208: yml_test.go:225: test p-macro-ip4-valid TestRFC7208: yml_test.go:227: checkhost 192.168.218.41 test@e6.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.41" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [p-macro-ip4-valid] TestRFC7208: yml_test.go:225: test macro-reverse-split-on-dash TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "philip-gladstone-test@e11.example.com" ("e11.example.com") TestRFC7208: spf.go:160: check e11.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" TestRFC7208: spf.go:708: macro "i": ["i" "i" "" "" ""] TestRFC7208: spf.go:708: macro "l2r-": ["l2r-" "l" "2" "r" "-"] TestRFC7208: spf.go:708: macro "d2": ["d2" "d" "2" "" ""] TestRFC7208: spf.go:805: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" TestRFC7208: spf.go:266: exists ok, pass matched 'exists' TestRFC7208: yml_test.go:234: success: pass, matched 'exists' [macro-reverse-split-on-dash] TestRFC7208: yml_test.go:225: test macro-multiple-delimiters TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo-bar+zip+quux@e12.example.com" ("e12.example.com") TestRFC7208: spf.go:160: check e12.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" TestRFC7208: spf.go:708: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] TestRFC7208: spf.go:708: macro "d2": ["d2" "d" "2" "" ""] TestRFC7208: spf.go:805: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" TestRFC7208: spf.go:266: exists ok, pass matched 'exists' TestRFC7208: yml_test.go:234: success: pass, matched 'exists' [macro-multiple-delimiters] TestRFC7208: yml_test.go:225: test invalid-macro-char TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e1.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" TestRFC7208: spf.go:266: exists ok, permerror invalid macro TestRFC7208: yml_test.go:234: success: permerror, invalid macro [invalid-macro-char] TestRFC7208: yml_test.go:225: test macro-mania-in-domain TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 test@e1a.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "test@e1a.example.com" ("e1a.example.com") TestRFC7208: spf.go:160: check e1a.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" TestRFC7208: spf.go:526: masks on "a:macro%%percent%_%_space%-url-space.example.com": ["a:macro%%percent%_%_space%-url-space.example.com" ":macro%%percent%_%_space%-url-space.example.com" "macro%%percent%_%_space%-url-space.example.com" "" "" "" ""] "macro%%percent%_%_space%-url-space.example.com" {-1 -1} TestRFC7208: spf.go:805: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" TestRFC7208: spf.go:561: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [macro-mania-in-domain] TestRFC7208: yml_test.go:225: test v-macro-ip4 TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e4.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=e4msg.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [v-macro-ip4] TestRFC7208: yml_test.go:225: test v-macro-ip6 TestRFC7208: yml_test.go:227: checkhost cafe:babe::1 test@e4.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::1" "msgbas2x.cos.example.com" "test@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=e4msg.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [v-macro-ip6] TestRFC7208: yml_test.go:225: test p-macro-ip6-novalid TestRFC7208: yml_test.go:227: checkhost cafe:babe::1 test@e6.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::1" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [p-macro-ip6-novalid] TestRFC7208: yml_test.go:225: test invalid-hello-macro TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e9.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "JUMPIN' JUPITER" "test@e9.example.com" ("e9.example.com") TestRFC7208: spf.go:160: check e9.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:%{H} -all" TestRFC7208: spf.go:526: masks on "a:%{H}": ["a:%{H}" ":%{H}" "%{H}" "" "" "" ""] "%{H}" {-1 -1} TestRFC7208: spf.go:708: macro "H": ["H" "H" "" "" ""] TestRFC7208: spf.go:805: macro expanded "%{H}" to "e9.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [invalid-hello-macro] TestRFC7208: yml_test.go:225: test hello-domain-literal TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e9.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "[192.168.218.40]" "test@e9.example.com" ("e9.example.com") TestRFC7208: spf.go:160: check e9.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:%{H} -all" TestRFC7208: spf.go:526: masks on "a:%{H}": ["a:%{H}" ":%{H}" "%{H}" "" "" "" ""] "%{H}" {-1 -1} TestRFC7208: spf.go:708: macro "H": ["H" "H" "" "" ""] TestRFC7208: spf.go:805: macro expanded "%{H}" to "e9.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [hello-domain-literal] TestRFC7208: yml_test.go:225: test require-valid-helo TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 test@e10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "OEMCOMPUTER" "test@e10.example.com" ("e10.example.com") TestRFC7208: spf.go:160: check e10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" TestRFC7208: spf.go:708: macro "d2": ["d2" "d" "2" "" ""] TestRFC7208: spf.go:805: macro expanded "_spfh.%{d2}" to "_spfh.example.com" TestRFC7208: spf.go:160: check _spfh.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 -a:%{h} +all" TestRFC7208: spf.go:526: masks on "a:%{h}": ["a:%{h}" ":%{h}" "%{h}" "" "" "" ""] "%{h}" {-1 -1} TestRFC7208: spf.go:708: macro "h": ["h" "h" "" "" ""] TestRFC7208: spf.go:805: macro expanded "%{h}" to "_spfh.example.com" TestRFC7208: spf.go:237: pass matched all TestRFC7208: spf.go:241: include ok, fail matched 'all' TestRFC7208: yml_test.go:234: success: fail, matched 'all' [require-valid-helo] TestRFC7208: yml_test.go:225: test trailing-dot-exp TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@exp.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@exp.example.com" ("exp.example.com") TestRFC7208: spf.go:160: check exp.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 exp=msg.example.com. -all" TestRFC7208: spf.go:270: exp= not used, skipping TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [trailing-dot-exp] TestRFC7208: yml_test.go:225: test domain-name-truncation TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@somewhat.long.exp.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@somewhat.long.exp.example.com" ("somewhat.long.exp.example.com") TestRFC7208: spf.go:160: check somewhat.long.exp.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [domain-name-truncation] TestRFC7208: yml_test.go:225: test upper-macro TestRFC7208: yml_test.go:227: checkhost 192.168.218.42 ~jack&jill=up-a_b3.c@e8.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.42" "msgbas2x.cos.example.com" "~jack&jill=up-a_b3.c@e8.example.com" ("e8.example.com") TestRFC7208: spf.go:160: check e8.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=msg8.%{D2}" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [upper-macro] TestRFC7208: yml_test.go:225: test exp-txt-macro-char TestRFC7208: yml_test.go:227: checkhost 192.168.218.40 test@e3.example.com TestRFC7208: spf.go:129: check host with sender "192.168.218.40" "msgbas2x.cos.example.com" "test@e3.example.com" ("e3.example.com") TestRFC7208: spf.go:160: check e3.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=%{ir}.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [exp-txt-macro-char] TestRFC7208: yml_test.go:225: test undef-macro TestRFC7208: yml_test.go:227: checkhost cafe:babe::c0a8:da28 test@e5.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::c0a8:da28" "msgbas2x.cos.example.com" "test@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:%{a}.example.com -all" TestRFC7208: spf.go:526: masks on "a:%{a}.example.com": ["a:%{a}.example.com" ":%{a}.example.com" "%{a}.example.com" "" "" "" ""] "%{a}.example.com" {-1 -1} TestRFC7208: spf.go:708: macro "a": [] TestRFC7208: spf.go:246: a ok, permerror invalid macro TestRFC7208: yml_test.go:234: success: permerror, invalid macro [undef-macro] TestRFC7208: yml_test.go:225: test p-macro-ip6-valid TestRFC7208: yml_test.go:227: checkhost cafe:babe::3 test@e6.example.com TestRFC7208: spf.go:129: check host with sender "cafe:babe::3" "msgbas2x.cos.example.com" "test@e6.example.com" ("e6.example.com") TestRFC7208: spf.go:160: check e6.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 -all exp=e6msg.example.com" TestRFC7208: spf.go:237: fail matched all TestRFC7208: yml_test.go:234: success: fail, matched 'all' [p-macro-ip6-valid] TestRFC7208: yml_test.go:152: suite: Processing limits TestRFC7208: yml_test.go:157: domain mail.example.com TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e1.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] TestRFC7208: yml_test.go:159: A: [1.2.3.6] TestRFC7208: yml_test.go:157: domain e4.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx] TestRFC7208: yml_test.go:159: MX: {0 mail.example.com} TestRFC7208: yml_test.go:159: MX: {1 mail.example.com} TestRFC7208: yml_test.go:159: MX: {2 mail.example.com} TestRFC7208: yml_test.go:159: MX: {3 mail.example.com} TestRFC7208: yml_test.go:159: MX: {4 mail.example.com} TestRFC7208: yml_test.go:159: MX: {5 mail.example.com} TestRFC7208: yml_test.go:159: MX: {6 mail.example.com} TestRFC7208: yml_test.go:159: MX: {7 mail.example.com} TestRFC7208: yml_test.go:159: MX: {8 mail.example.com} TestRFC7208: yml_test.go:159: MX: {9 mail.example.com} TestRFC7208: yml_test.go:159: MX: {10 e4.example.com} TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:157: domain e2.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:e3.example.com] TestRFC7208: yml_test.go:159: A: [1.2.3.7] TestRFC7208: yml_test.go:157: domain e5.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr] TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:157: domain 5.3.2.1.in-addr.arpa TestRFC7208: yml_test.go:159: PTR: [e1.example.com.] TestRFC7208: yml_test.go:159: PTR: [e2.example.com.] TestRFC7208: yml_test.go:159: PTR: [e3.example.com.] TestRFC7208: yml_test.go:159: PTR: [e4.example.com.] TestRFC7208: yml_test.go:159: PTR: [example.com.] TestRFC7208: yml_test.go:159: PTR: [e6.example.com.] TestRFC7208: yml_test.go:159: PTR: [e7.example.com.] TestRFC7208: yml_test.go:159: PTR: [e8.example.com.] TestRFC7208: yml_test.go:159: PTR: [e9.example.com.] TestRFC7208: yml_test.go:159: PTR: [e10.example.com.] TestRFC7208: yml_test.go:159: PTR: [e5.example.com.] TestRFC7208: yml_test.go:157: domain e10.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a -all] TestRFC7208: yml_test.go:159: A: [1.2.3.1] TestRFC7208: yml_test.go:159: A: [1.2.3.2] TestRFC7208: yml_test.go:159: A: [1.2.3.3] TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:159: A: [1.2.3.5] TestRFC7208: yml_test.go:159: A: [1.2.3.6] TestRFC7208: yml_test.go:159: A: [1.2.3.7] TestRFC7208: yml_test.go:159: A: [1.2.3.8] TestRFC7208: yml_test.go:159: A: [1.2.3.9] TestRFC7208: yml_test.go:159: A: [1.2.3.10] TestRFC7208: yml_test.go:159: A: [1.2.3.11] TestRFC7208: yml_test.go:159: A: [1.2.3.12] TestRFC7208: yml_test.go:157: domain e6.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] TestRFC7208: yml_test.go:159: A: [1.2.3.8] TestRFC7208: yml_test.go:159: MX: {10 e6.example.com} TestRFC7208: yml_test.go:157: domain e7.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] TestRFC7208: yml_test.go:159: A: [1.2.3.20] TestRFC7208: yml_test.go:157: domain inc.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a a a a a a a a] TestRFC7208: yml_test.go:159: A: [1.2.3.10] TestRFC7208: yml_test.go:157: domain e3.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 include:e2.example.com] TestRFC7208: yml_test.go:159: A: [1.2.3.8] TestRFC7208: yml_test.go:157: domain e8.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] TestRFC7208: yml_test.go:159: A: [1.2.3.4] TestRFC7208: yml_test.go:157: domain e9.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] TestRFC7208: yml_test.go:159: A: [1.2.3.21] TestRFC7208: yml_test.go:157: domain e11.example.com TestRFC7208: yml_test.go:159: TXT: [v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all] TestRFC7208: yml_test.go:157: domain e12.example.com TestRFC7208: yml_test.go:159: TXT: [v=spf1 a:err.example.com a:err1.example.com ?all] TestRFC7208: yml_test.go:225: test redirect-loop TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e1.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e1.example.com" ("e1.example.com") TestRFC7208: spf.go:160: check e1.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 3 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 4 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 5 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 6 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 7 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 8 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 9 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 10 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:273: redirect, "redirect=e1.example.com" TestRFC7208: spf.go:160: check e1.example.com 11 TestRFC7208: spf.go:176: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" TestRFC7208: spf.go:218: lookup limit reached TestRFC7208: yml_test.go:234: success: permerror, lookup limit reached [redirect-loop] TestRFC7208: yml_test.go:225: test include-loop TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e2.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e2.example.com" ("e2.example.com") TestRFC7208: spf.go:160: check e2.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC7208: spf.go:160: check e3.example.com 2 TestRFC7208: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC7208: spf.go:160: check e2.example.com 3 TestRFC7208: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC7208: spf.go:160: check e3.example.com 4 TestRFC7208: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC7208: spf.go:160: check e2.example.com 5 TestRFC7208: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC7208: spf.go:160: check e3.example.com 6 TestRFC7208: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC7208: spf.go:160: check e2.example.com 7 TestRFC7208: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC7208: spf.go:160: check e3.example.com 8 TestRFC7208: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC7208: spf.go:160: check e2.example.com 9 TestRFC7208: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC7208: spf.go:160: check e3.example.com 10 TestRFC7208: spf.go:176: dns record "v=spf1 include:e2.example.com" TestRFC7208: spf.go:160: check e2.example.com 11 TestRFC7208: spf.go:176: dns record "v=spf1 include:e3.example.com" TestRFC7208: spf.go:218: lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: spf.go:241: include ok, permerror lookup limit reached TestRFC7208: yml_test.go:234: success: permerror, lookup limit reached [include-loop] TestRFC7208: yml_test.go:225: test ptr-limit TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 foo@e5.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "mail.example.com" "foo@e5.example.com" ("e5.example.com") TestRFC7208: spf.go:160: check e5.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 ptr" TestRFC7208: spf.go:398: ptr forward resolution "e1.example.com." -> ["1.2.3.6"] TestRFC7208: spf.go:398: ptr forward resolution "e2.example.com." -> ["1.2.3.7"] TestRFC7208: spf.go:398: ptr forward resolution "e3.example.com." -> ["1.2.3.8"] TestRFC7208: spf.go:398: ptr forward resolution "e4.example.com." -> ["1.2.3.5"] TestRFC7208: spf.go:398: ptr forward resolution "example.com." -> [] TestRFC7208: spf.go:398: ptr forward resolution "e6.example.com." -> ["1.2.3.8"] TestRFC7208: spf.go:398: ptr forward resolution "e7.example.com." -> ["1.2.3.20"] TestRFC7208: spf.go:398: ptr forward resolution "e8.example.com." -> ["1.2.3.4"] TestRFC7208: spf.go:398: ptr forward resolution "e9.example.com." -> ["1.2.3.21"] TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: yml_test.go:234: success: neutral, [ptr-limit] TestRFC7208: yml_test.go:225: test false-a-limit TestRFC7208: yml_test.go:227: checkhost 1.2.3.12 foo@e10.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.12" "mail.example.com" "foo@e10.example.com" ("e10.example.com") TestRFC7208: spf.go:160: check e10.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a -all" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e10.example.com" {-1 -1} TestRFC7208: spf.go:561: mx matched 1.2.3.12, 1.2.3.12, {-1 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [false-a-limit] TestRFC7208: yml_test.go:225: test mx-limit TestRFC7208: yml_test.go:227: checkhost 1.2.3.5 foo@e4.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.5" "mail.example.com" "foo@e4.example.com" ("e4.example.com") TestRFC7208: spf.go:160: check e4.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx" TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e4.example.com" {-1 -1} TestRFC7208: spf.go:251: mx ok, permerror too many MX records TestRFC7208: yml_test.go:234: success: permerror, too many MX records [mx-limit] TestRFC7208: yml_test.go:225: test mech-over-limit TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e7.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e7.example.com" ("e7.example.com") TestRFC7208: spf.go:160: check e7.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e7.example.com" {-1 -1} TestRFC7208: spf.go:407: ptr evaluating "e7.example.com" in [] TestRFC7208: spf.go:218: lookup limit reached TestRFC7208: yml_test.go:234: success: permerror, lookup limit reached [mech-over-limit] TestRFC7208: yml_test.go:225: test include-at-limit TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e8.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e8.example.com" ("e8.example.com") TestRFC7208: spf.go:160: check e8.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e8.example.com" {-1 -1} TestRFC7208: spf.go:561: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestRFC7208: spf.go:246: a ok, pass matched 'a' TestRFC7208: yml_test.go:234: success: pass, matched 'a' [include-at-limit] TestRFC7208: yml_test.go:225: test include-over-limit TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e9.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e9.example.com" ("e9.example.com") TestRFC7208: spf.go:160: check e9.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "e9.example.com" {-1 -1} TestRFC7208: spf.go:160: check inc.example.com 3 TestRFC7208: spf.go:176: dns record "v=spf1 a a a a a a a a" TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "inc.example.com" {-1 -1} TestRFC7208: spf.go:284: fallback to neutral TestRFC7208: spf.go:218: lookup limit reached TestRFC7208: yml_test.go:234: success: permerror, lookup limit reached [include-over-limit] TestRFC7208: yml_test.go:225: test void-at-limit TestRFC7208: yml_test.go:227: checkhost 1.2.3.4 foo@e12.example.com TestRFC7208: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "foo@e12.example.com" ("e12.example.com") TestRFC7208: spf.go:160: check e12.example.com 1 TestRFC7208: spf.go:176: dns record "v=spf1 a:err.example.com a:err1.example.com ?all" TestRFC7208: spf.go:526: masks on "a:err.example.com": ["a:err.example.com" ":err.example.com" "err.example.com" "" "" "" ""] "err.example.com" {-1 -1} TestRFC7208: spf.go:526: masks on "a:err1.example.com": ["a:err1.example.com" ":err1.example.com" "err1.example.com" "" "" "" ""] "err1.example.com" {-1 -1} TestRFC7208: spf.go:237: neutral matched all TestRFC7208: yml_test.go:234: success: neutral, matched 'all' [void-at-limit] TestRFC7208: yml_test.go:152: suite: Test cases from implementation bugs TestRFC7208: yml_test.go:157: domain smtp1.example.com TestRFC7208: yml_test.go:159: A: [192.0.2.26] TestRFC7208: yml_test.go:159: AAAA: [2001:db8:ff0:200::2] TestRFC7208: yml_test.go:157: domain 2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.F.F.0.8.B.D.0.1.0.0.2.ip6.arpa TestRFC7208: yml_test.go:159: PTR: [smtp6-v.fe.example.org] TestRFC7208: yml_test.go:157: domain smtp6-v.fe.example.org TestRFC7208: yml_test.go:159: AAAA: [2001:db8:ff0:100::2] TestRFC7208: yml_test.go:157: domain _spf.example.com TestRFC7208: yml_test.go:159: SPF: [v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all] TestRFC7208: yml_test.go:157: domain _expspf.example.org TestRFC7208: yml_test.go:159: TXT: [Sender domain not allowed from this host. Please see http://www.openspf.org/Why?s=mfrom&id=%{S}&ip=%{C}&r=%{R}] TestRFC7208: yml_test.go:157: domain example.org TestRFC7208: yml_test.go:159: SPF: [v=spf1 mx redirect=_spf.example.com] TestRFC7208: yml_test.go:159: MX: {10 smtp.example.org} TestRFC7208: yml_test.go:159: MX: {10 smtp1.example.com} TestRFC7208: yml_test.go:157: domain smtp.example.org TestRFC7208: yml_test.go:159: A: [198.51.100.2] TestRFC7208: yml_test.go:159: AAAA: [2001:db8:ff0:100::3] TestRFC7208: yml_test.go:225: test bytes-bug TestRFC7208: yml_test.go:227: checkhost 2001:db8:ff0:100::2 test@example.org TestRFC7208: spf.go:129: check host with sender "2001:db8:ff0:100::2" "example.org" "test@example.org" ("example.org") TestRFC7208: spf.go:160: check example.org 1 TestRFC7208: spf.go:176: dns record "v=spf1 mx redirect=_spf.example.com" TestRFC7208: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "example.org" {-1 -1} TestRFC7208: spf.go:273: redirect, "redirect=_spf.example.com" TestRFC7208: spf.go:160: check _spf.example.com 5 TestRFC7208: spf.go:176: dns record "v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all" TestRFC7208: spf.go:398: ptr forward resolution "smtp6-v.fe.example.org." -> ["2001:db8:ff0:100::2"] TestRFC7208: spf.go:407: ptr evaluating "fe.example.org" in ["smtp6-v.fe.example.org."] TestRFC7208: spf.go:261: ptr ok, pass matched 'ptr' TestRFC7208: yml_test.go:234: success: pass, matched 'ptr' [bytes-bug] --- PASS: TestRFC7208 (0.10s) === RUN TestPySPF TestPySPF: yml_test.go:152: suite: TestPySPF: yml_test.go:157: domain lyme.eater.example.co.uk.1.2.3.5.spf.example.net TestPySPF: yml_test.go:159: A: [127.0.0.1] TestPySPF: yml_test.go:157: domain example.co.uk TestPySPF: yml_test.go:159: SPF: [v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all] TestPySPF: yml_test.go:225: test exists-pass TestPySPF: yml_test.go:227: checkhost 1.2.3.5 lyme.eater@example.co.uk TestPySPF: spf.go:129: check host with sender "1.2.3.5" "mail.example.net" "lyme.eater@example.co.uk" ("example.co.uk") TestPySPF: spf.go:160: check example.co.uk 1 TestPySPF: spf.go:176: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" TestPySPF: spf.go:526: masks on "mx/26": ["mx/26" "" "" "/26" "26" "" ""] "example.co.uk" {26 -1} TestPySPF: spf.go:708: macro "l": ["l" "l" "" "" ""] TestPySPF: spf.go:708: macro "d": ["d" "d" "" "" ""] TestPySPF: spf.go:708: macro "i": ["i" "i" "" "" ""] TestPySPF: spf.go:805: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.5.spf.example.net" TestPySPF: spf.go:266: exists ok, pass matched 'exists' TestPySPF: yml_test.go:234: success: pass, matched 'exists' [exists-pass] TestPySPF: yml_test.go:225: test exists-fail TestPySPF: yml_test.go:227: checkhost 1.2.3.4 lyme.eater@example.co.uk TestPySPF: spf.go:129: check host with sender "1.2.3.4" "mail.example.net" "lyme.eater@example.co.uk" ("example.co.uk") TestPySPF: spf.go:160: check example.co.uk 1 TestPySPF: spf.go:176: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" TestPySPF: spf.go:526: masks on "mx/26": ["mx/26" "" "" "/26" "26" "" ""] "example.co.uk" {26 -1} TestPySPF: spf.go:708: macro "l": ["l" "l" "" "" ""] TestPySPF: spf.go:708: macro "d": ["d" "d" "" "" ""] TestPySPF: spf.go:708: macro "i": ["i" "i" "" "" ""] TestPySPF: spf.go:805: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.4.spf.example.net" TestPySPF: spf.go:237: fail matched all TestPySPF: yml_test.go:234: success: fail, matched 'all' [exists-fail] TestPySPF: yml_test.go:152: suite: TestPySPF: yml_test.go:157: domain examplef.com TestPySPF: yml_test.go:159: SPF: [v=spf1 -all] TestPySPF: yml_test.go:159: SPF: [v=spf1 +all] TestPySPF: yml_test.go:157: domain examplea.com TestPySPF: yml_test.go:159: SPF: [v=spf1 a mx include:b.com] TestPySPF: yml_test.go:157: domain exampleb.com TestPySPF: yml_test.go:159: SPF: [v=spf1 a mx include:a.com] TestPySPF: yml_test.go:157: domain examplec.com TestPySPF: yml_test.go:159: SPF: [v=spf1 -all:foobar] TestPySPF: yml_test.go:157: domain exampled.com TestPySPF: yml_test.go:159: SPF: [v=spf1 a:examplea.com:8080] TestPySPF: yml_test.go:157: domain examplee.com TestPySPF: yml_test.go:159: SPF: [v=spf1 ip4:1.2.3.4:8080] TestPySPF: yml_test.go:225: test badall TestPySPF: yml_test.go:227: checkhost 66.150.186.79 chuckvsr@examplec.com TestPySPF: spf.go:129: check host with sender "66.150.186.79" "mail.example.com" "chuckvsr@examplec.com" ("examplec.com") TestPySPF: spf.go:160: check examplec.com 1 TestPySPF: spf.go:176: dns record "v=spf1 -all:foobar" TestPySPF: spf.go:277: permerror, unknown field TestPySPF: yml_test.go:234: success: permerror, unknown field [badall] TestPySPF: yml_test.go:225: test tworecs TestPySPF: yml_test.go:227: checkhost 66.150.186.79 chuckvsr@examplef.com TestPySPF: spf.go:129: check host with sender "66.150.186.79" "mail.example.com" "chuckvsr@examplef.com" ("examplef.com") TestPySPF: spf.go:160: check examplef.com 1 TestPySPF: spf.go:168: multiple dns records TestPySPF: yml_test.go:234: success: permerror, multiple matching DNS records [tworecs] TestPySPF: yml_test.go:225: test badip TestPySPF: yml_test.go:227: checkhost 66.150.186.79 chuckvsr@examplee.com TestPySPF: spf.go:129: check host with sender "66.150.186.79" "mail.example.com" "chuckvsr@examplee.com" ("examplee.com") TestPySPF: spf.go:160: check examplee.com 1 TestPySPF: spf.go:176: dns record "v=spf1 ip4:1.2.3.4:8080" TestPySPF: spf.go:256: ip ok, permerror invalid ipX value TestPySPF: yml_test.go:234: success: permerror, invalid ipX value [badip] TestPySPF: yml_test.go:225: test incloop TestPySPF: yml_test.go:227: checkhost 66.150.186.79 chuckvsr@examplea.com TestPySPF: spf.go:129: check host with sender "66.150.186.79" "mail.example.com" "chuckvsr@examplea.com" ("examplea.com") TestPySPF: spf.go:160: check examplea.com 1 TestPySPF: spf.go:176: dns record "v=spf1 a mx include:b.com" TestPySPF: spf.go:526: masks on "a": ["a" "" "" "" "" "" ""] "examplea.com" {-1 -1} TestPySPF: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "examplea.com" {-1 -1} TestPySPF: spf.go:160: check b.com 4 TestPySPF: spf.go:176: dns record "" TestPySPF: spf.go:241: include ok, permerror no DNS record found TestPySPF: yml_test.go:234: success: permerror, no DNS record found [incloop] TestPySPF: yml_test.go:152: suite: TestPySPF: yml_test.go:157: domain example3.com TestPySPF: yml_test.go:159: SPF: [v=spf1 mx] TestPySPF: yml_test.go:159: SPF: [v=spf1 mx] TestPySPF: yml_test.go:159: MX: {0 mail.example1.com} TestPySPF: yml_test.go:157: domain example1.com TestPySPF: yml_test.go:159: SPF: [v=spf1] TestPySPF: yml_test.go:157: domain example2.com TestPySPF: yml_test.go:159: SPF: [v=spf1mx] TestPySPF: yml_test.go:157: domain mail.example1.com TestPySPF: yml_test.go:159: A: [1.2.3.4] TestPySPF: yml_test.go:225: test empty TestPySPF: yml_test.go:227: checkhost 1.2.3.4 foo@example1.com TestPySPF: spf.go:129: check host with sender "1.2.3.4" "mail1.example1.com" "foo@example1.com" ("example1.com") TestPySPF: spf.go:160: check example1.com 1 TestPySPF: spf.go:176: dns record "v=spf1" TestPySPF: spf.go:284: fallback to neutral TestPySPF: yml_test.go:234: success: neutral, [empty] TestPySPF: yml_test.go:225: test nospace2 TestPySPF: yml_test.go:227: checkhost 1.2.3.4 foo@example3.com TestPySPF: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example3.com" ("example3.com") TestPySPF: spf.go:160: check example3.com 1 TestPySPF: spf.go:176: dns record "v=spf1 mx" TestPySPF: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "example3.com" {-1 -1} TestPySPF: spf.go:615: mx matched 1.2.3.4, 1.2.3.4, {-1 -1} TestPySPF: spf.go:251: mx ok, pass matched 'mx' TestPySPF: yml_test.go:234: success: pass, matched 'mx' [nospace2] TestPySPF: yml_test.go:225: test nospace1 TestPySPF: yml_test.go:227: checkhost 1.2.3.4 foo@example2.com TestPySPF: spf.go:129: check host with sender "1.2.3.4" "mail.example1.com" "foo@example2.com" ("example2.com") TestPySPF: spf.go:160: check example2.com 1 TestPySPF: spf.go:176: dns record "" TestPySPF: yml_test.go:234: success: none, no DNS record found [nospace1] TestPySPF: yml_test.go:152: suite: TestPySPF: yml_test.go:157: domain e1.example.com TestPySPF: yml_test.go:159: SPF: [v=spf1 default=-] TestPySPF: yml_test.go:157: domain e2.example.com TestPySPF: yml_test.go:159: CNAME: [c1.example.com.] TestPySPF: yml_test.go:157: domain c1.example.com TestPySPF: yml_test.go:159: CNAME: [c2.example.com.] TestPySPF: yml_test.go:157: domain c2.example.com TestPySPF: yml_test.go:159: SPF: [v=spf1 a a:c1.example.com -all] TestPySPF: yml_test.go:159: A: [1.2.3.4] TestPySPF: yml_test.go:157: domain mx1.example.com TestPySPF: yml_test.go:159: CNAME: [] TestPySPF: yml_test.go:157: domain e3.example.com TestPySPF: yml_test.go:159: SPF: [v=spf1 a:mx1.example.com mx:mx1.example.com ~all] TestPySPF: yml_test.go:157: domain mail.example.com TestPySPF: yml_test.go:159: MX: {0 } TestPySPF: yml_test.go:159: SPF: [v=spf1 mx] TestPySPF: yml_test.go:157: domain example.com TestPySPF: yml_test.go:159: SPF: [v=spf1 -all] TestPySPF: yml_test.go:225: test emptyMX TestPySPF: yml_test.go:227: checkhost 1.2.3.4 TestPySPF: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "" ("mail.example.com") TestPySPF: spf.go:160: check mail.example.com 1 TestPySPF: spf.go:176: dns record "v=spf1 mx" TestPySPF: spf.go:526: masks on "mx": ["mx" "" "" "" "" "" ""] "mail.example.com" {-1 -1} TestPySPF: spf.go:284: fallback to neutral TestPySPF: yml_test.go:234: success: neutral, [emptyMX] TestPySPF: yml_test.go:225: test localhost TestPySPF: yml_test.go:227: checkhost 127.0.0.1 root@example.com TestPySPF: spf.go:129: check host with sender "127.0.0.1" "mail.example.com" "root@example.com" ("example.com") TestPySPF: spf.go:160: check example.com 1 TestPySPF: spf.go:176: dns record "v=spf1 -all" TestPySPF: spf.go:237: fail matched all TestPySPF: yml_test.go:234: success: fail, matched 'all' [localhost] TestPySPF: yml_test.go:225: test null-cname TestPySPF: yml_test.go:227: checkhost 1.2.3.4 bar@e3.example.com TestPySPF: spf.go:129: check host with sender "1.2.3.4" "mail.example.com" "bar@e3.example.com" ("e3.example.com") TestPySPF: spf.go:160: check e3.example.com 1 TestPySPF: spf.go:176: dns record "v=spf1 a:mx1.example.com mx:mx1.example.com ~all" TestPySPF: spf.go:526: masks on "a:mx1.example.com": ["a:mx1.example.com" ":mx1.example.com" "mx1.example.com" "" "" "" ""] "mx1.example.com" {-1 -1} TestPySPF: spf.go:526: masks on "mx:mx1.example.com": ["mx:mx1.example.com" ":mx1.example.com" "mx1.example.com" "" "" "" ""] "mx1.example.com" {-1 -1} TestPySPF: spf.go:237: softfail matched all TestPySPF: yml_test.go:234: success: softfail, matched 'all' [null-cname] --- PASS: TestPySPF (0.00s) PASS ok blitiri.com.ar/go/spf 0.185s create-stamp debian/debhelper-build-stamp dh_testroot -i -O--buildsystem=golang dh_prep -i -O--buildsystem=golang dh_auto_install -i -O--buildsystem=golang dh_installdocs -i -O--buildsystem=golang dh_installchangelogs -i -O--buildsystem=golang dh_installsystemduser -i -O--buildsystem=golang dh_perl -i -O--buildsystem=golang dh_link -i -O--buildsystem=golang dh_strip_nondeterminism -i -O--buildsystem=golang dh_compress -i -O--buildsystem=golang dh_fixperms -i -O--buildsystem=golang dh_missing -i -O--buildsystem=golang dh_installdeb -i -O--buildsystem=golang dh_golang -i -O--buildsystem=golang Use of uninitialized value $caller in string eq at /usr/share/perl5/Debian/Debhelper/Buildsystem/golang.pm line 567. dh_gencontrol -i -O--buildsystem=golang dpkg-gencontrol: warning: Depends field of package golang-blitiri-go-spf-dev: substitution variable ${shlibs:Depends} used, but is not defined dh_md5sums -i -O--buildsystem=golang dh_builddeb -i -O--buildsystem=golang dpkg-deb: building package 'golang-blitiri-go-spf-dev' in '../golang-blitiri-go-spf-dev_1.1.0-1_all.deb'. dpkg-genbuildinfo --build=all dpkg-genchanges --build=all >../golang-blitiri-go-spf_1.1.0-1_all.changes dpkg-genchanges: info: binary-only arch-indep upload (source code and arch-specific packages not included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) I: running special hook: sync-out /build/golang-blitiri-go-spf-AwE00g /tmp/golang-blitiri-go-spf-1.1.0-1_bfv6zxu I: cleaning package lists and apt cache... I: creating tarball... I: done I: removing tempdir /tmp/mmdebstrap.f95iPLQnaA... I: success in 363.7202 seconds md5: golang-blitiri-go-spf-dev_1.1.0-1_all.deb: OK sha1: golang-blitiri-go-spf-dev_1.1.0-1_all.deb: OK sha256: golang-blitiri-go-spf-dev_1.1.0-1_all.deb: OK Checksums: OK