Running as unit: rb-build-i386_4-53660.service ==================================================================================== Sun Feb 23 03:11:41 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job reproducible_builder_i386_4) on jenkins, called using "ionos16-i386 ionos2-i386" as arguments. Sun Feb 23 03:11:41 UTC 2025 - actually running "reproducible_build.sh" (md5sum 68e686e434c9ab7bc3ec047d8b309cbc) as "/tmp/jenkins-script-sV42Dgvc" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Sun Feb 23 03:11:41 UTC 2025 - checking /var/lib/jenkins/offline_nodes if ionos16-i386.debian.net is marked as down. Sun Feb 23 03:11:41 UTC 2025 - checking via ssh if ionos16-i386.debian.net is up. removed '/tmp/read-only-fs-test-mZiC2W' Sun Feb 23 03:11:41 UTC 2025 - checking /var/lib/jenkins/offline_nodes if ionos2-i386.debian.net is marked as down. Sun Feb 23 03:11:41 UTC 2025 - checking via ssh if ionos2-i386.debian.net is up. removed '/tmp/read-only-fs-test-5dS98C' ok, let's check if golang-blitiri-go-spf is building anywhere yet… ok, golang-blitiri-go-spf is not building anywhere… UPDATE 1 ============================================================================= Initialising reproducibly build of golang-blitiri-go-spf in unstable on i386 on jenkins now. 1st build will be done on ionos16-i386.debian.net. 2nd build will be done on ionos2-i386.debian.net. ============================================================================= Sun Feb 23 03:11:48 UTC 2025 I: starting to build golang-blitiri-go-spf/unstable/i386 on jenkins on '2025-02-23 03:11' Sun Feb 23 03:11:48 UTC 2025 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/i386_4/53660/console.log 1740280308 i386 unstable golang-blitiri-go-spf Sun Feb 23 03:11:48 UTC 2025 I: Downloading source for unstable/golang-blitiri-go-spf=1.5.1-1 --2025-02-23 03:11:49-- http://deb.debian.org/debian/pool/main/g/golang-blitiri-go-spf/golang-blitiri-go-spf_1.5.1-1.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2212 (2.2K) [text/prs.lines.tag] Saving to: ‘golang-blitiri-go-spf_1.5.1-1.dsc’ 0K .. 100% 292M=0s 2025-02-23 03:11:49 (292 MB/s) - ‘golang-blitiri-go-spf_1.5.1-1.dsc’ saved [2212/2212] --2025-02-23 03:11:49-- http://deb.debian.org/debian/pool/main/g/golang-blitiri-go-spf/golang-blitiri-go-spf_1.5.1-1.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2212 (2.2K) [text/prs.lines.tag] Saving to: ‘golang-blitiri-go-spf_1.5.1-1.dsc’ 0K .. 100% 292M=0s 2025-02-23 03:11:49 (292 MB/s) - ‘golang-blitiri-go-spf_1.5.1-1.dsc’ saved [2212/2212] Sun Feb 23 03:11:49 UTC 2025 I: golang-blitiri-go-spf_1.5.1-1.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: golang-blitiri-go-spf Binary: golang-blitiri-go-spf-dev Architecture: all Version: 1.5.1-1 Maintainer: Debian Go Packaging Team Uploaders: Alberto Bertogli , Homepage: https://blitiri.com.ar/git/r/spf/ Standards-Version: 4.6.1 Vcs-Browser: https://salsa.debian.org/go-team/packages/golang-blitiri-go-spf Vcs-Git: https://salsa.debian.org/go-team/packages/golang-blitiri-go-spf.git Testsuite: autopkgtest-pkg-go Build-Depends: debhelper-compat (= 13), dh-golang, golang-any, golang-gopkg-yaml.v3-dev Package-List: golang-blitiri-go-spf-dev deb golang optional arch=all Checksums-Sha1: 019670c0bf39df212ca1fb2e359bd0863410e993 88384 golang-blitiri-go-spf_1.5.1.orig.tar.gz 699c50480a452cde65fefa4e3368e6065e1d15c9 2392 golang-blitiri-go-spf_1.5.1-1.debian.tar.xz Checksums-Sha256: e1f62c8d3be0aeab6c8d005fbcaa270469d0b28f5f7bebc0c857aec65872ec16 88384 golang-blitiri-go-spf_1.5.1.orig.tar.gz 3e8be56926517dca9bc66e2911aee4f2326d006a2ad4af99a113e69f74473968 2392 golang-blitiri-go-spf_1.5.1-1.debian.tar.xz Files: c3f3b5a9a67f40814daad55888bd1e7a 88384 golang-blitiri-go-spf_1.5.1.orig.tar.gz b87aaa893dc561155c83be0861121c04 2392 golang-blitiri-go-spf_1.5.1-1.debian.tar.xz Go-Import-Path: blitiri.com.ar/go/spf -----BEGIN PGP SIGNATURE----- iQJGBAEBCgAwFiEEPpmlJvXcwMu/HO6mALrnSzQzafEFAmMSTb4SHG5pbGVzaEBk ZWJpYW4ub3JnAAoJEAC650s0M2nxRc8P/jaedUe3ZNt6NpMlqGMg8Z1gftFE4yvs WXl1jXH1vlzUXF14rG0TIw1bNmwAbZ576bMQRS4erJ8cDbbZ0rsuUInMd+JD4LfW OMYR/X+n/smtDaG+8JsC5lIJMFWtzHD1HBt0HcZwb/5IbWWDNK8TZ9RJHVoBRNvB E4qSkkST6ZfNVxWqZqGcB7a8dqyuqD4CB9MXR1vXnIRD6e6YscORY1EzbvSrcsez bA+XgIkgFLiF81ilqL0nTrwK6B2U/16QIUfPf3n842ik9Z3Z6o4eL65r1td6Dn3W e/lHGcguOD3m70avV+FxDhUM0xkoOSlP6BUEU7FNXEpKfTPnqHaQyIhcCfGMnbB3 4jtzWrVmPGY+bMKqr9cRzItO8XfEovDuLdjV5CmTJ00WrGhOfuBGk1A+CS/4gb2m tsk1d4zfLZQJV1h/u510tErzhYHBmXGnUPH1aCXzuZD92FcE9zPJ4oMEAFsz9VK6 gB3/ZksMnU1wZZ0Gv0Vrg+lGjUZTLB+AOhfSYPnlZmF8PzkP+aIaP/nUPhIcV0nR krizjIdJU9HxEV7xGxESPnW9CezxN1sm018dx9Jk7gYlZUV/Ez1qYJ5YIMBQrLoR YCEkaWG6wbfPlUGi+j0UVolQa/p+5tLoha3KJimVfyLKtuMUY1MQHkWz7GXCKeYc aNS/m6/j/PQD =mrGL -----END PGP SIGNATURE----- Sun Feb 23 03:11:49 UTC 2025 I: Checking whether the package is not for us Sun Feb 23 03:11:49 UTC 2025 I: Starting 1st build on remote node ionos16-i386.debian.net. Sun Feb 23 03:11:49 UTC 2025 I: Preparing to do remote build '1' on ionos16-i386.debian.net. Sun Feb 23 03:11:49 UTC 2025 - checking /var/lib/jenkins/offline_nodes if ionos16-i386.debian.net is marked as down. Sun Feb 23 03:11:49 UTC 2025 - checking via ssh if ionos16-i386.debian.net is up. removed '/tmp/read-only-fs-test-hhD9Tw' ==================================================================================== Sat Mar 28 09:34:49 UTC 2026 - running /srv/jenkins/bin/reproducible_build.sh (for job /srv/jenkins/bin/reproducible_build.sh) on ionos16-i386, called using "1 golang-blitiri-go-spf unstable /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm 1.5.1-1" as arguments. Sat Mar 28 09:34:49 UTC 2026 - actually running "reproducible_build.sh" (md5sum 68e686e434c9ab7bc3ec047d8b309cbc) as "/tmp/jenkins-script-RgNc4RUe" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Sat Mar 28 09:34:49 UTC 2026 I: Downloading source for unstable/golang-blitiri-go-spf=1.5.1-1 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 93.0 kB of source archives. Get:1 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (dsc) [2212 B] Get:2 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (tar) [88.4 kB] Get:3 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (diff) [2392 B] Fetched 93.0 kB in 0s (2710 kB/s) Download complete and in download only mode 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 93.0 kB of source archives. Get:1 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (dsc) [2212 B] Get:2 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (tar) [88.4 kB] Get:3 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (diff) [2392 B] Fetched 93.0 kB in 0s (2710 kB/s) Download complete and in download only mode ============================================================================= Building golang-blitiri-go-spf in unstable on i386 on ionos16-i386 now. Date: Sat Mar 28 10:34:50 CET 2026 Date UTC: Sat Mar 28 09:34:50 UTC 2026 ============================================================================= W: /root/.pbuilderrc does not exist I: Logging to b1/build.log I: pbuilder: network access will be disabled during build I: Current time: Fri Mar 27 21:34:50 -12 2026 I: pbuilder-time-stamp: 1774690490 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: using eatmydata during job I: Copying source file I: copying [golang-blitiri-go-spf_1.5.1-1.dsc] I: copying [./golang-blitiri-go-spf_1.5.1.orig.tar.gz] I: copying [./golang-blitiri-go-spf_1.5.1-1.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./golang-blitiri-go-spf_1.5.1-1.dsc: unsupported subcommand dpkg-source: info: extracting golang-blitiri-go-spf in golang-blitiri-go-spf-1.5.1 dpkg-source: info: unpacking golang-blitiri-go-spf_1.5.1.orig.tar.gz dpkg-source: info: unpacking golang-blitiri-go-spf_1.5.1-1.debian.tar.xz I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/50092/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='i386' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=22 ' DISTRIBUTION='unstable' HOME='/root' HOST_ARCH='i386' IFS=' ' INVOCATION_ID='9cc14c348e3341ce9963f1bf245479e4' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' LD_LIBRARY_PATH='/usr/lib/libeatmydata' LD_PRELOAD='libeatmydata.so' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='50092' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/pbuilderrc_x3CL --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b1 --logfile b1/build.log golang-blitiri-go-spf_1.5.1-1.dsc' SUDO_GID='112' SUDO_UID='107' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://213.165.73.152:3128' I: uname -a Linux ionos16-i386 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Nov 22 2024 /bin -> usr/bin I: user script /srv/workspace/pbuilder/50092/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: i386 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), dh-golang, golang-any, golang-gopkg-yaml.v3-dev dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19761 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on dh-golang; however: Package dh-golang is not installed. pbuilder-satisfydepends-dummy depends on golang-any; however: Package golang-any is not installed. pbuilder-satisfydepends-dummy depends on golang-gopkg-yaml.v3-dev; however: Package golang-gopkg-yaml.v3-dev is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} debhelper{a} dh-autoreconf{a} dh-golang{a} dh-strip-nondeterminism{a} dwz{a} file{a} gettext{a} gettext-base{a} golang-1.24-go{a} golang-1.24-src{a} golang-any{a} golang-go{a} golang-gopkg-yaml.v3-dev{a} golang-src{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libdebhelper-perl{a} libelf1t64{a} libfile-stripnondeterminism-perl{a} libicu72{a} libmagic-mgc{a} libmagic1t64{a} libpipeline1{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2{a} m4{a} man-db{a} po-debconf{a} sensible-utils{a} The following packages are RECOMMENDED but will NOT be installed: curl libarchive-cpio-perl libltdl-dev libmail-sendmail-perl lynx pkgconf wget 0 packages upgraded, 37 newly installed, 0 to remove and 0 not upgraded. Need to get 68.1 MB of archives. After unpacking 329 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main i386 sensible-utils all 0.0.24 [24.8 kB] Get: 2 http://deb.debian.org/debian unstable/main i386 libmagic-mgc i386 1:5.45-3+b1 [314 kB] Get: 3 http://deb.debian.org/debian unstable/main i386 libmagic1t64 i386 1:5.45-3+b1 [115 kB] Get: 4 http://deb.debian.org/debian unstable/main i386 file i386 1:5.45-3+b1 [43.2 kB] Get: 5 http://deb.debian.org/debian unstable/main i386 gettext-base i386 0.23.1-1 [245 kB] Get: 6 http://deb.debian.org/debian unstable/main i386 libuchardet0 i386 0.0.8-1+b2 [69.2 kB] Get: 7 http://deb.debian.org/debian unstable/main i386 groff-base i386 1.23.0-7 [1199 kB] Get: 8 http://deb.debian.org/debian unstable/main i386 bsdextrautils i386 2.40.4-4 [96.4 kB] Get: 9 http://deb.debian.org/debian unstable/main i386 libpipeline1 i386 1.5.8-1 [41.2 kB] Get: 10 http://deb.debian.org/debian unstable/main i386 man-db i386 2.13.0-1 [1428 kB] Get: 11 http://deb.debian.org/debian unstable/main i386 m4 i386 1.4.19-5 [301 kB] Get: 12 http://deb.debian.org/debian unstable/main i386 autoconf all 2.72-3 [493 kB] Get: 13 http://deb.debian.org/debian unstable/main i386 autotools-dev all 20220109.1 [51.6 kB] Get: 14 http://deb.debian.org/debian unstable/main i386 automake all 1:1.17-3 [862 kB] Get: 15 http://deb.debian.org/debian unstable/main i386 autopoint all 0.23.1-1 [770 kB] Get: 16 http://deb.debian.org/debian unstable/main i386 libdebhelper-perl all 13.24.1 [90.9 kB] Get: 17 http://deb.debian.org/debian unstable/main i386 libtool all 2.5.4-3 [539 kB] Get: 18 http://deb.debian.org/debian unstable/main i386 dh-autoreconf all 20 [17.1 kB] Get: 19 http://deb.debian.org/debian unstable/main i386 libarchive-zip-perl all 1.68-1 [104 kB] Get: 20 http://deb.debian.org/debian unstable/main i386 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Get: 21 http://deb.debian.org/debian unstable/main i386 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Get: 22 http://deb.debian.org/debian unstable/main i386 libelf1t64 i386 0.192-4 [195 kB] Get: 23 http://deb.debian.org/debian unstable/main i386 dwz i386 0.15-1+b1 [116 kB] Get: 24 http://deb.debian.org/debian unstable/main i386 libunistring5 i386 1.3-1 [458 kB] Get: 25 http://deb.debian.org/debian unstable/main i386 libicu72 i386 72.1-6 [9582 kB] Get: 26 http://deb.debian.org/debian unstable/main i386 libxml2 i386 2.12.7+dfsg+really2.9.14-0.2+b1 [734 kB] Get: 27 http://deb.debian.org/debian unstable/main i386 gettext i386 0.23.1-1 [1714 kB] Get: 28 http://deb.debian.org/debian unstable/main i386 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 29 http://deb.debian.org/debian unstable/main i386 po-debconf all 1.0.21+nmu1 [248 kB] Get: 30 http://deb.debian.org/debian unstable/main i386 debhelper all 13.24.1 [920 kB] Get: 31 http://deb.debian.org/debian unstable/main i386 dh-golang all 1.63 [24.4 kB] Get: 32 http://deb.debian.org/debian unstable/main i386 golang-1.24-src all 1.24.0-1 [20.3 MB] Get: 33 http://deb.debian.org/debian unstable/main i386 golang-1.24-go i386 1.24.0-1 [26.8 MB] Get: 34 http://deb.debian.org/debian unstable/main i386 golang-src all 2:1.24~2 [5136 B] Get: 35 http://deb.debian.org/debian unstable/main i386 golang-go i386 2:1.24~2 [44.3 kB] Get: 36 http://deb.debian.org/debian unstable/main i386 golang-any i386 2:1.24~2 [5216 B] Get: 37 http://deb.debian.org/debian unstable/main i386 golang-gopkg-yaml.v3-dev all 3.0.1-3 [74.3 kB] Fetched 68.1 MB in 0s (142 MB/s) Preconfiguring packages ... Selecting previously unselected package sensible-utils. (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 ... 19761 files and directories currently installed.) Preparing to unpack .../00-sensible-utils_0.0.24_all.deb ... Unpacking sensible-utils (0.0.24) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../01-libmagic-mgc_1%3a5.45-3+b1_i386.deb ... Unpacking libmagic-mgc (1:5.45-3+b1) ... Selecting previously unselected package libmagic1t64:i386. Preparing to unpack .../02-libmagic1t64_1%3a5.45-3+b1_i386.deb ... Unpacking libmagic1t64:i386 (1:5.45-3+b1) ... Selecting previously unselected package file. Preparing to unpack .../03-file_1%3a5.45-3+b1_i386.deb ... Unpacking file (1:5.45-3+b1) ... Selecting previously unselected package gettext-base. Preparing to unpack .../04-gettext-base_0.23.1-1_i386.deb ... Unpacking gettext-base (0.23.1-1) ... Selecting previously unselected package libuchardet0:i386. Preparing to unpack .../05-libuchardet0_0.0.8-1+b2_i386.deb ... Unpacking libuchardet0:i386 (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../06-groff-base_1.23.0-7_i386.deb ... Unpacking groff-base (1.23.0-7) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../07-bsdextrautils_2.40.4-4_i386.deb ... Unpacking bsdextrautils (2.40.4-4) ... Selecting previously unselected package libpipeline1:i386. Preparing to unpack .../08-libpipeline1_1.5.8-1_i386.deb ... Unpacking libpipeline1:i386 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../09-man-db_2.13.0-1_i386.deb ... Unpacking man-db (2.13.0-1) ... Selecting previously unselected package m4. Preparing to unpack .../10-m4_1.4.19-5_i386.deb ... Unpacking m4 (1.4.19-5) ... Selecting previously unselected package autoconf. Preparing to unpack .../11-autoconf_2.72-3_all.deb ... Unpacking autoconf (2.72-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../12-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../13-automake_1%3a1.17-3_all.deb ... Unpacking automake (1:1.17-3) ... Selecting previously unselected package autopoint. Preparing to unpack .../14-autopoint_0.23.1-1_all.deb ... Unpacking autopoint (0.23.1-1) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../15-libdebhelper-perl_13.24.1_all.deb ... Unpacking libdebhelper-perl (13.24.1) ... Selecting previously unselected package libtool. Preparing to unpack .../16-libtool_2.5.4-3_all.deb ... Unpacking libtool (2.5.4-3) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../17-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../18-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../19-libfile-stripnondeterminism-perl_1.14.1-2_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.1-2) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../20-dh-strip-nondeterminism_1.14.1-2_all.deb ... Unpacking dh-strip-nondeterminism (1.14.1-2) ... Selecting previously unselected package libelf1t64:i386. Preparing to unpack .../21-libelf1t64_0.192-4_i386.deb ... Unpacking libelf1t64:i386 (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../22-dwz_0.15-1+b1_i386.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libunistring5:i386. Preparing to unpack .../23-libunistring5_1.3-1_i386.deb ... Unpacking libunistring5:i386 (1.3-1) ... Selecting previously unselected package libicu72:i386. Preparing to unpack .../24-libicu72_72.1-6_i386.deb ... Unpacking libicu72:i386 (72.1-6) ... Selecting previously unselected package libxml2:i386. Preparing to unpack .../25-libxml2_2.12.7+dfsg+really2.9.14-0.2+b1_i386.deb ... Unpacking libxml2:i386 (2.12.7+dfsg+really2.9.14-0.2+b1) ... Selecting previously unselected package gettext. Preparing to unpack .../26-gettext_0.23.1-1_i386.deb ... Unpacking gettext (0.23.1-1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../27-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../28-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../29-debhelper_13.24.1_all.deb ... Unpacking debhelper (13.24.1) ... Selecting previously unselected package dh-golang. Preparing to unpack .../30-dh-golang_1.63_all.deb ... Unpacking dh-golang (1.63) ... Selecting previously unselected package golang-1.24-src. Preparing to unpack .../31-golang-1.24-src_1.24.0-1_all.deb ... Unpacking golang-1.24-src (1.24.0-1) ... Selecting previously unselected package golang-1.24-go. Preparing to unpack .../32-golang-1.24-go_1.24.0-1_i386.deb ... Unpacking golang-1.24-go (1.24.0-1) ... Selecting previously unselected package golang-src. Preparing to unpack .../33-golang-src_2%3a1.24~2_all.deb ... Unpacking golang-src (2:1.24~2) ... Selecting previously unselected package golang-go:i386. Preparing to unpack .../34-golang-go_2%3a1.24~2_i386.deb ... Unpacking golang-go:i386 (2:1.24~2) ... Selecting previously unselected package golang-any:i386. Preparing to unpack .../35-golang-any_2%3a1.24~2_i386.deb ... Unpacking golang-any:i386 (2:1.24~2) ... Selecting previously unselected package golang-gopkg-yaml.v3-dev. Preparing to unpack .../36-golang-gopkg-yaml.v3-dev_3.0.1-3_all.deb ... Unpacking golang-gopkg-yaml.v3-dev (3.0.1-3) ... Setting up golang-1.24-src (1.24.0-1) ... Setting up libpipeline1:i386 (1.5.8-1) ... Setting up libicu72:i386 (72.1-6) ... Setting up bsdextrautils (2.40.4-4) ... Setting up libmagic-mgc (1:5.45-3+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up golang-gopkg-yaml.v3-dev (3.0.1-3) ... Setting up libdebhelper-perl (13.24.1) ... Setting up libmagic1t64:i386 (1:5.45-3+b1) ... Setting up gettext-base (0.23.1-1) ... Setting up m4 (1.4.19-5) ... Setting up file (1:5.45-3+b1) ... Setting up libelf1t64:i386 (0.192-4) ... Setting up autotools-dev (20220109.1) ... Setting up libunistring5:i386 (1.3-1) ... Setting up autopoint (0.23.1-1) ... Setting up golang-1.24-go (1.24.0-1) ... Setting up autoconf (2.72-3) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.24) ... Setting up libuchardet0:i386 (0.0.8-1+b2) ... Setting up golang-src (2:1.24~2) ... Setting up libxml2:i386 (2.12.7+dfsg+really2.9.14-0.2+b1) ... Setting up automake (1:1.17-3) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.14.1-2) ... Setting up gettext (0.23.1-1) ... Setting up libtool (2.5.4-3) ... Setting up golang-go:i386 (2:1.24~2) ... Setting up golang-any:i386 (2:1.24~2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up dh-strip-nondeterminism (1.14.1-2) ... Setting up groff-base (1.23.0-7) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up man-db (2.13.0-1) ... Not building database; man-db/auto-update is not 'true'. Setting up debhelper (13.24.1) ... Setting up dh-golang (1.63) ... Processing triggers for libc-bin (2.40-7) ... Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps I: Building the package I: Running cd /build/reproducible-path/golang-blitiri-go-spf-1.5.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../golang-blitiri-go-spf_1.5.1-1_source.changes dpkg-buildpackage: info: source package golang-blitiri-go-spf dpkg-buildpackage: info: source version 1.5.1-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Alberto Bertogli dpkg-source --before-build . dpkg-buildpackage: info: host architecture i386 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 dh binary --buildsystem=golang --with=golang dh_update_autotools_config -O--buildsystem=golang dh_autoreconf -O--buildsystem=golang dh_auto_configure -O--buildsystem=golang dh_auto_build -O--buildsystem=golang cd obj-i686-linux-gnu && go install -trimpath -v -p 22 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest internal/coverage/rtcov internal/goarch internal/msan internal/nettrace internal/unsafeheader unicode/utf8 internal/asan sync/atomic internal/byteorder internal/godebugs internal/runtime/atomic unicode cmp internal/runtime/syscall internal/profilerecord internal/itoa math/bits internal/goos internal/cpu internal/goexperiment internal/runtime/math internal/abi internal/runtime/sys internal/chacha8rand math internal/bytealg internal/runtime/exithook internal/stringslite internal/race internal/sync internal/runtime/maps runtime weak iter internal/reflectlite sync maps slices internal/bisect internal/singleflight internal/testlog unique runtime/cgo errors internal/oserror internal/godebug sort strconv path io vendor/golang.org/x/net/dns/dnsmessage syscall bytes strings net/netip reflect regexp/syntax internal/syscall/execenv internal/syscall/unix time regexp context io/fs internal/poll internal/fmtsort internal/filepathlite os fmt net net/url blitiri.com.ar/go/spf/internal/dnstest blitiri.com.ar/go/spf dh_auto_test -O--buildsystem=golang cd obj-i686-linux-gnu && go test -vet=off -v -p 22 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest === RUN TestBasic spf.go:308: check "domain" 0 0 spf.go:330: dns record "" spf.go:308: check "domain" 0 0 spf.go:330: dns record "" spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 " spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 -" spf.go:437: unknown field, permerror spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exp=blah +all" spf.go:430: exp= ignored spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 -all " spf.go:397: all: fail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ~all" spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a ~all" spf.go:747: masks on "a", "domain": "domain" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a/24" spf.go:747: masks on "a/24", "domain": "domain" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/24" spf.go:747: masks on "a:d1110/24", "domain": "d1110" [/24, ] spf.go:768: a match: 1.1.1.1, 1.1.1.0, [/24, ] spf.go:406: "a:d1110/24" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/montoto" spf.go:747: masks on "a:d1110/montoto", "domain": "" [, ] spf.go:406: "a:d1110/montoto" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/99" spf.go:747: masks on "a:d1110/99", "domain": "" [, ] spf.go:406: "a:d1110/99" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/32" spf.go:747: masks on "a:d1110/32", "domain": "d1110" [/32, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110" spf.go:747: masks on "a:d1110", "domain": "d1110" [, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1111" spf.go:747: masks on "a:d1111", "domain": "d1111" [, ] spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:d1111" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:nothing/24" spf.go:747: masks on "a:nothing/24", "domain": "nothing" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "domain": "domain" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx/24" spf.go:780: masks on "mx/24", "domain": "domain" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:a/montoto ~all" spf.go:780: masks on "mx:a/montoto", "domain": "" [, ] spf.go:411: "mx:a/montoto" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24 ~all" spf.go:780: masks on "mx:d1110/24", "domain": "d1110" [/24, ] spf.go:828: mx ips: [1.1.1.0] spf.go:831: mx match: 1.1.1.1, 1.1.1.0, [/24, ] spf.go:411: "mx:d1110/24" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24//100 ~all" spf.go:780: masks on "mx:d1110/24//100", "domain": "d1110" [/24, /100] spf.go:828: mx ips: [1.1.1.0] spf.go:831: mx match: 1.1.1.1, 1.1.1.0, [/24, /100] spf.go:411: "mx:d1110/24//100" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24//129 ~all" spf.go:780: masks on "mx:d1110/24//129", "domain": "" [/24, ] spf.go:411: "mx:d1110/24//129" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24/100 ~all" spf.go:780: masks on "mx:d1110/24/100", "domain": "" [, ] spf.go:411: "mx:d1110/24/100" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/99 ~all" spf.go:780: masks on "mx:d1110/99", "domain": "" [, ] spf.go:411: "mx:d1110/99" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4 ~all" spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:12 ~all" spf.go:416: "ip6:12" permerror, invalid ipX value spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 -all" spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/24 -all" spf.go:527: ip match: 1.1.1.0/24 contains 1.1.1.1 spf.go:416: "ip4:1.1.1.1/24" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/lala -all" spf.go:416: "ip4:1.1.1.1/lala" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/33 -all" spf.go:416: "ip4:1.1.1.1/33" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:doesnotexist" permerror, no DNS record found spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "domain" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "xx.domain." spf.go:421: "ptr" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:d1111 -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "d1111" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "d1111." spf.go:421: "ptr:d1111" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:lalala -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "lalala" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "lalala." spf.go:421: "ptr:lalala" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:doesnotexist -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "doesnotexist" in ["lalala." "xx.domain." "d1111."] spf.go:397: all: fail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 blah" spf.go:437: unknown field, permerror spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exists:d1111 -all" spf.go:640: exists match: 1.1.1.1 spf.go:426: "exists:d1111" pass, matched exists spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=" spf.go:434: "redirect=": permerror, invalid domain --- PASS: TestBasic (0.00s) === RUN TestIPv6 spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a ~all" spf.go:747: masks on "a", "domain": "domain" [, ] spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a/24" spf.go:747: masks on "a/24", "domain": "domain" [/24, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660//24" spf.go:747: masks on "a:d6660//24", "domain": "d6660" [, /24] spf.go:768: a match: 2001:db8::68, 2001:db8::, [, /24] spf.go:406: "a:d6660//24" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660/24//100" spf.go:747: masks on "a:d6660/24//100", "domain": "d6660" [/24, /100] spf.go:768: a match: 2001:db8::68, 2001:db8::, [/24, /100] spf.go:406: "a:d6660/24//100" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660" spf.go:747: masks on "a:d6660", "domain": "d6660" [, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6666" spf.go:747: masks on "a:d6666", "domain": "d6666" [, ] spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:d6666" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:nothing//24" spf.go:747: masks on "a:nothing//24", "domain": "nothing" [, /24] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660//24 ~all" spf.go:780: masks on "mx:d6660//24", "domain": "d6660" [, /24] spf.go:828: mx ips: [2001:db8::] spf.go:831: mx match: 2001:db8::68, 2001:db8::, [, /24] spf.go:411: "mx:d6660//24" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660/24//100 ~all" spf.go:780: masks on "mx:d6660/24//100", "domain": "d6660" [/24, /100] spf.go:828: mx ips: [2001:db8::] spf.go:831: mx match: 2001:db8::68, 2001:db8::, [/24, /100] spf.go:411: "mx:d6660/24//100" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660/24/100 ~all" spf.go:780: masks on "mx:d6660/24/100", "domain": "" [, ] spf.go:411: "mx:d6660/24/100" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::68 ~all" spf.go:536: ip match: 2001:db8::68 spf.go:416: "ip6:2001:db8::68" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::1/24 ~all" spf.go:527: ip match: 2001:d00::/24 contains 2001:db8::68 spf.go:416: "ip6:2001:db8::1/24" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::1/100 ~all" spf.go:527: ip match: 2001:db8::/100 contains 2001:db8::68 spf.go:416: "ip6:2001:db8::1/100" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "domain" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "domain." spf.go:421: "ptr" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:d6666 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "d6666" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "d6666." spf.go:421: "ptr:d6666" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:sonlas6 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "sonlas6" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "sonlas6." spf.go:421: "ptr:sonlas6" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:sonlas7 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "sonlas7" in ["sonlas6." "domain." "d6666."] spf.go:397: all: fail --- PASS: TestIPv6 (0.00s) === RUN TestInclude spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "" spf.go:401: "include:domain2" permerror, no DNS record found spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip --- PASS: TestInclude (0.00s) === RUN TestRecursionLimit spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 1 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 2 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 3 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 4 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 5 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 6 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 7 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 8 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 9 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 10 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 11 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:373: lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached --- PASS: TestRecursionLimit (0.00s) === RUN TestRedirect spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 -all" spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:434: "redirect=domain2": pass, matched ip --- PASS: TestRedirect (0.00s) === RUN TestInvalidRedirect spf.go:308: check "doesnotexist" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=doesnotexist": permerror, no DNS record found --- PASS: TestInvalidRedirect (0.00s) === RUN TestRedirectOrder spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=faildom" spf.go:308: check "faildom" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=faildom": fail, matched all spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=faildom all" spf.go:397: all: pass --- PASS: TestRedirectOrder (0.00s) === RUN TestNoRecord spf.go:308: check "d1" 0 0 spf.go:330: dns record "" spf.go:308: check "d2" 0 0 spf.go:330: dns record "" spf.go:308: check "d3" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:308: check "nospf" 0 0 spf.go:314: dns domain not found: lookup : record not found for testing --- PASS: TestNoRecord (0.00s) === RUN TestDNSTemporaryErrors spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:tmperr" spf.go:308: check "tmperr" 1 0 spf.go:318: dns temp error: lookup : temporary error for testing spf.go:401: "include:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:tmperr" spf.go:747: masks on "a:tmperr", "domain": "tmperr" [, ] spf.go:406: "a:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:tmperr" spf.go:780: masks on "mx:tmperr", "domain": "tmperr" [, ] spf.go:411: "mx:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:tmperr" spf.go:421: "ptr:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:tmpmx" spf.go:780: masks on "mx:tmpmx", "domain": "tmpmx" [, ] spf.go:411: "mx:tmpmx" temperror, lookup : temporary error for testing --- PASS: TestDNSTemporaryErrors (0.00s) === RUN TestDNSPermanentErrors spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:permerr" spf.go:308: check "permerr" 1 0 spf.go:327: dns perm error: lookup : permanent error for testing spf.go:401: "include:permerr" permerror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:permerr" spf.go:747: masks on "a:permerr", "domain": "permerr" [, ] spf.go:406: "a:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:permerr" spf.go:780: masks on "mx:permerr", "domain": "permerr" [, ] spf.go:411: "mx:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:permerr" spf.go:421: "ptr:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:permmx" spf.go:780: masks on "mx:permmx", "domain": "permmx" [, ] spf.go:411: "mx:permmx" temperror, lookup : permanent error for testing --- PASS: TestDNSPermanentErrors (0.00s) === RUN TestMXWithInvalidRecord spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:dom2 -all" spf.go:780: masks on "mx:dom2", "domain": "dom2" [, ] spf.go:828: mx ips: [1.1.1.1] spf.go:831: mx match: 1.1.1.1, 1.1.1.1, [, ] spf.go:411: "mx:dom2" pass, matched mx --- PASS: TestMXWithInvalidRecord (0.00s) === RUN TestMacros spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:%{fff} -all" spf.go:923: macro "fff": [] spf.go:421: "ptr:%{fff}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:%{fff} -all" spf.go:780: masks on "mx:%{fff}", "domain": "%{fff}" [, ] spf.go:923: macro "fff": [] spf.go:411: "mx:%{fff}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=%{fff}" spf.go:923: macro "fff": [] spf.go:434: "redirect=%{fff}": permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:%{o0}" spf.go:747: masks on "a:%{o0}", "domain": "%{o0}" [, ] spf.go:923: macro "o0": ["o0" "o" "0" "" ""] spf.go:406: "a:%{o0}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:sss-%{s}-sss" spf.go:747: masks on "a:sss-%{s}-sss", "domain": "sss-%{s}-sss" [, ] spf.go:923: macro "s": ["s" "s" "" "" ""] spf.go:1020: macro expanded "sss-%{s}-sss" to "sss-user@domain-sss" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:sss-%{s}-sss" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ooo-%{o}-ooo" spf.go:747: masks on "a:ooo-%{o}-ooo", "domain": "ooo-%{o}-ooo" [, ] spf.go:923: macro "o": ["o" "o" "" "" ""] spf.go:1020: macro expanded "ooo-%{o}-ooo" to "ooo-domain-ooo" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ooo-%{o}-ooo" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:OOO-%{O}-OOO" spf.go:747: masks on "a:OOO-%{O}-OOO", "domain": "OOO-%{O}-OOO" [, ] spf.go:923: macro "O": ["O" "O" "" "" ""] spf.go:1020: macro expanded "OOO-%{O}-OOO" to "OOO-domain-OOO" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:OOO-%{O}-OOO" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ppp-%{p}-ppp" spf.go:747: masks on "a:ppp-%{p}-ppp", "domain": "ppp-%{p}-ppp" [, ] spf.go:923: macro "p": ["p" "p" "" "" ""] spf.go:1020: macro expanded "ppp-%{p}-ppp" to "ppp-unknown-ppp" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ppp-%{p}-ppp" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:hhh-%{h}-hhh" spf.go:747: masks on "a:hhh-%{h}-hhh", "domain": "hhh-%{h}-hhh" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "hhh-%{h}-hhh" to "hhh-helo-hhh" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:hhh-%{h}-hhh" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:vvv-%{v}-vvv" spf.go:747: masks on "a:vvv-%{v}-vvv", "domain": "vvv-%{v}-vvv" [, ] spf.go:923: macro "v": ["v" "v" "" "" ""] spf.go:1020: macro expanded "vvv-%{v}-vvv" to "vvv-ip6-vvv" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:vvv-%{v}-vvv" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:%{x}" spf.go:747: masks on "a:%{x}", "domain": "%{x}" [, ] spf.go:923: macro "x": [] spf.go:406: "a:%{x}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ooo-%{o7}-ooo" spf.go:747: masks on "a:ooo-%{o7}-ooo", "domain": "ooo-%{o7}-ooo" [, ] spf.go:923: macro "o7": ["o7" "o" "7" "" ""] spf.go:1020: macro expanded "ooo-%{o7}-ooo" to "ooo-domain-ooo" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ooo-%{o7}-ooo" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exists:%{ir}.vvv -all" spf.go:923: macro "ir": ["ir" "i" "" "r" ""] spf.go:1020: macro expanded "%{ir}.vvv" to "8.6.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.vvv" spf.go:640: exists match: 1.1.1.1 spf.go:426: "exists:%{ir}.vvv" pass, matched exists --- PASS: TestMacros (0.00s) === RUN TestMacrosV4 spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:sr-%{sr}-sr" spf.go:747: masks on "a:sr-%{sr}-sr", "domain.com": "sr-%{sr}-sr" [, ] spf.go:923: macro "sr": ["sr" "s" "" "r" ""] spf.go:1020: macro expanded "sr-%{sr}-sr" to "sr-com.user@domain-sr" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:sr-%{sr}-sr" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:sra-%{sr.}-sra" spf.go:747: masks on "a:sra-%{sr.}-sra", "domain.com": "sra-%{sr.}-sra" [, ] spf.go:923: macro "sr.": ["sr." "s" "" "r" "."] spf.go:1020: macro expanded "sra-%{sr.}-sra" to "sra-com.user@domain-sra" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:sra-%{sr.}-sra" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o7-%{o7}-o7" spf.go:747: masks on "a:o7-%{o7}-o7", "domain.com": "o7-%{o7}-o7" [, ] spf.go:923: macro "o7": ["o7" "o" "7" "" ""] spf.go:1020: macro expanded "o7-%{o7}-o7" to "o7-domain.com-o7" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o7-%{o7}-o7" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o1-%{o1}-o1" spf.go:747: masks on "a:o1-%{o1}-o1", "domain.com": "o1-%{o1}-o1" [, ] spf.go:923: macro "o1": ["o1" "o" "1" "" ""] spf.go:1020: macro expanded "o1-%{o1}-o1" to "o1-com-o1" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o1-%{o1}-o1" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o1r-%{o1r}-o1r" spf.go:747: masks on "a:o1r-%{o1r}-o1r", "domain.com": "o1r-%{o1r}-o1r" [, ] spf.go:923: macro "o1r": ["o1r" "o" "1" "r" ""] spf.go:1020: macro expanded "o1r-%{o1r}-o1r" to "o1r-domain-o1r" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o1r-%{o1r}-o1r" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:vvv-%{v}-vvv" spf.go:747: masks on "a:vvv-%{v}-vvv", "domain.com": "vvv-%{v}-vvv" [, ] spf.go:923: macro "v": ["v" "v" "" "" ""] spf.go:1020: macro expanded "vvv-%{v}-vvv" to "vvv-in-addr-vvv" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:vvv-%{v}-vvv" pass, matched a --- PASS: TestMacrosV4 (0.00s) === RUN TestIPMatchHelper --- PASS: TestIPMatchHelper (0.00s) === RUN TestInvalidMacro spf.go:923: macro "x": [] spf.go:923: macro "z": [] spf.go:923: macro "c": ["c" "c" "" "" ""] spf.go:923: macro "r": ["r" "r" "" "" ""] spf.go:923: macro "t": ["t" "t" "" "" ""] --- PASS: TestInvalidMacro (0.00s) === RUN TestNullTrace --- PASS: TestNullTrace (0.00s) === RUN TestOverrideLookupLimit spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:373: lookup limit reached spf.go:401: "include:domain4" permerror, lookup limit reached spf.go:401: "include:domain3" permerror, lookup limit reached spf.go:401: "include:domain2" permerror, lookup limit reached --- PASS: TestOverrideLookupLimit (0.00s) === RUN TestOverrideVoidLookupLimit spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached spf.go:401: "include:domain3" permerror, void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:514: void lookup: nxdomain spf.go:308: check "domain4" 6 3 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:503: void lookup: no answers spf.go:378: void lookup limit reached spf.go:401: "include:domain3" permerror, void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:503: void lookup: no answers spf.go:308: check "domain4" 6 3 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:378: void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached --- PASS: TestOverrideVoidLookupLimit (0.00s) === RUN TestWithContext spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:327: dns perm error: context canceled --- PASS: TestWithContext (0.00s) === RUN TestWithResolver spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all --- PASS: TestWithResolver (0.00s) === RUN TestBadResolverResponse spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 a:domain1 -all" spf.go:747: masks on "a:domain1", "domain1": "domain1" [, ] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 a:domain1//24 -all" spf.go:747: masks on "a:domain1//24", "domain1": "domain1" [, /24] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 mx:domain1 -all" spf.go:780: masks on "mx:domain1", "domain1": "domain1" [, ] spf.go:828: mx ips: [] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 mx:domain1//24 -all" spf.go:780: masks on "mx:domain1//24", "domain1": "domain1" [, /24] spf.go:828: mx ips: [] spf.go:397: all: fail --- PASS: TestBadResolverResponse (0.00s) === RUN TestWithTraceFunc spf_test.go:698: tracing check "domain1" 0 0 spf_test.go:698: tracing dns record "v=spf1 include:domain2" spf_test.go:698: tracing check "domain2" 1 0 spf_test.go:698: tracing dns record "v=spf1 +all" spf_test.go:698: tracing all: pass spf_test.go:698: tracing "include:domain2" pass, matched all --- PASS: TestWithTraceFunc (0.00s) === RUN TestOurs yml_test.go:162: suite: Simple successes yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:251: test test1 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [test1] yml_test.go:251: test test2 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [test2] yml_test.go:162: suite: Simple failures yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:251: test test2 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [test2] yml_test.go:251: test test1 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [test1] yml_test.go:162: suite: Regexp edge cases for "a", "mx" and "ptr" yml_test.go:167: domain a1.net yml_test.go:169: SPF: [v=spf1 ip6:a::a ~all] yml_test.go:167: domain a2.net yml_test.go:169: SPF: [v=spf1 ip6:1a0a:cccc::/29 ~all] yml_test.go:167: domain expmx.net yml_test.go:169: SPF: [v=spf1 exp=mx:mymx.com ~all] yml_test.go:169: MX: {10 mymx.com} yml_test.go:167: domain mymx.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain expptr.net yml_test.go:169: SPF: [v=spf1 exp=ptr:lalala.com ~all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [ptr:lalala.com.] yml_test.go:167: domain ptr:lalala.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test ipv6-with-a yml_test.go:253: checkhost a::a foobar@a1.net spf.go:308: check "a1.net" 0 0 spf.go:330: dns record "v=spf1 ip6:a::a ~all" spf.go:536: ip match: a::a spf.go:416: "ip6:a::a" pass, matched ip yml_test.go:260: success: pass, matched ip [ipv6-with-a] yml_test.go:251: test bad-a-mask yml_test.go:253: checkhost 2001:db8:ff0:100::2 foobar@a2.net spf.go:308: check "a2.net" 0 0 spf.go:330: dns record "v=spf1 ip6:1a0a:cccc::/29 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [bad-a-mask] yml_test.go:251: test exp-contains-mx yml_test.go:253: checkhost 1.2.3.4 foobar@expmx.net spf.go:308: check "expmx.net" 0 0 spf.go:330: dns record "v=spf1 exp=mx:mymx.com ~all" spf.go:430: exp= ignored spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [exp-contains-mx] yml_test.go:251: test exp-contains-ptr yml_test.go:253: checkhost 1.2.3.4 foobar@expptr.net spf.go:308: check "expptr.net" 0 0 spf.go:330: dns record "v=spf1 exp=ptr:lalala.com ~all" spf.go:430: exp= ignored spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [exp-contains-ptr] yml_test.go:162: suite: Error on PTR forward resolution yml_test.go:167: domain lalala.com yml_test.go:169: TIMEOUT yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 ptr:lalala.com ~all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [lalala.com] yml_test.go:251: test broken-ptr-forward yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 ptr:lalala.com ~all" spf.go:600: ptr evaluating "lalala.com" in [] spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [broken-ptr-forward] yml_test.go:162: suite: Permanent error on 'exists' resolution yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 exists:lalala.com ~all] yml_test.go:167: domain lalala.com yml_test.go:169: SERVFAIL yml_test.go:251: test exists-perm-error yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 exists:lalala.com ~all" spf.go:426: "exists:lalala.com" temperror, lookup : test servfail error yml_test.go:260: success: temperror, lookup : test servfail error [exists-perm-error] yml_test.go:162: suite: Resolve H macros correctly yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 exists:%{h}.com ~all] yml_test.go:167: domain holahola.com yml_test.go:169: A: [127.0.0.2] yml_test.go:251: test resolve-h-macros yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 exists:%{h}.com ~all" spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}.com" to "holahola.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{h}.com" pass, matched exists yml_test.go:260: success: pass, matched exists [resolve-h-macros] yml_test.go:162: suite: Only include the first 10 PTR results yml_test.go:167: domain dom06.com yml_test.go:169: A: [127.0.0.6] yml_test.go:167: domain dom08.com yml_test.go:169: A: [127.0.0.8] yml_test.go:167: domain dom09.com yml_test.go:169: A: [127.0.0.9] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [dom01.com] yml_test.go:169: PTR: [dom02.com] yml_test.go:169: PTR: [dom03.com] yml_test.go:169: PTR: [dom04.com] yml_test.go:169: PTR: [dom05.com] yml_test.go:169: PTR: [dom06.com] yml_test.go:169: PTR: [dom07.com] yml_test.go:169: PTR: [dom08.com] yml_test.go:169: PTR: [dom09.com] yml_test.go:169: PTR: [dom10.com] yml_test.go:169: PTR: [domain.net] yml_test.go:167: domain dom02.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain dom07.com yml_test.go:169: A: [127.0.0.7] yml_test.go:167: domain dom10.com yml_test.go:169: A: [127.0.0.10] yml_test.go:167: domain domain.net yml_test.go:169: A: [127.0.0.1] yml_test.go:169: SPF: [v=spf1 ptr ~all] yml_test.go:167: domain dom01.com yml_test.go:169: A: [127.0.0.1] yml_test.go:167: domain dom03.com yml_test.go:169: A: [127.0.0.3] yml_test.go:167: domain dom04.com yml_test.go:169: A: [127.0.0.4] yml_test.go:167: domain dom05.com yml_test.go:169: A: [127.0.0.5] yml_test.go:251: test only-first-10-ptr yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 ptr ~all" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "dom01.com." -> [{"127.0.0.1" ""}] spf.go:591: ptr forward resolution "dom02.com." -> [{"127.0.0.2" ""}] spf.go:591: ptr forward resolution "dom03.com." -> [{"127.0.0.3" ""}] spf.go:591: ptr forward resolution "dom04.com." -> [{"127.0.0.4" ""}] spf.go:591: ptr forward resolution "dom05.com." -> [{"127.0.0.5" ""}] spf.go:591: ptr forward resolution "dom06.com." -> [{"127.0.0.6" ""}] spf.go:591: ptr forward resolution "dom07.com." -> [{"127.0.0.7" ""}] spf.go:591: ptr forward resolution "dom08.com." -> [{"127.0.0.8" ""}] spf.go:591: ptr forward resolution "dom09.com." -> [{"127.0.0.9" ""}] spf.go:591: ptr forward resolution "dom10.com." -> [{"127.0.0.10" ""}] spf.go:600: ptr evaluating "domain.net" in ["dom01.com." "dom02.com." "dom03.com." "dom04.com." "dom05.com." "dom06.com." "dom07.com." "dom08.com." "dom09.com." "dom10.com."] spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [only-first-10-ptr] yml_test.go:162: suite: Resolution limits yml_test.go:167: domain okay.com yml_test.go:169: SPF: [v=spf1 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain bad.com yml_test.go:169: SPF: [v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain d00 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d11 yml_test.go:169: SPF: [v=spf1 include:d21 ~all] yml_test.go:167: domain d13 yml_test.go:169: SPF: [v=spf1 include:d23 ~all] yml_test.go:167: domain d14 yml_test.go:169: SPF: [v=spf1 include:d24 ~all] yml_test.go:167: domain d15 yml_test.go:169: SPF: [v=spf1 include:d25 ~all] yml_test.go:167: domain d21 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d12 yml_test.go:169: SPF: [v=spf1 include:d22 ~all] yml_test.go:167: domain d22 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d23 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d24 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d25 yml_test.go:169: SPF: [v=spf1 all] yml_test.go:251: test resolution-with-10-lookups yml_test.go:253: checkhost 1.2.3.4 foo@okay.com spf.go:308: check "okay.com" 0 0 spf.go:330: dns record "v=spf1 include:d11 include:d12 include:d13 include:d14 include:d15 -all" spf.go:308: check "d11" 1 0 spf.go:330: dns record "v=spf1 include:d21 ~all" spf.go:308: check "d21" 2 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d12" 3 0 spf.go:330: dns record "v=spf1 include:d22 ~all" spf.go:308: check "d22" 4 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d13" 5 0 spf.go:330: dns record "v=spf1 include:d23 ~all" spf.go:308: check "d23" 6 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d14" 7 0 spf.go:330: dns record "v=spf1 include:d24 ~all" spf.go:308: check "d24" 8 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d15" 9 0 spf.go:330: dns record "v=spf1 include:d25 ~all" spf.go:308: check "d25" 10 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:401: "include:d25" pass, matched all spf.go:401: "include:d15" pass, matched all yml_test.go:260: success: pass, matched all [resolution-with-10-lookups] yml_test.go:251: test resolution-with-11-lookups yml_test.go:253: checkhost 1.2.3.4 foo@bad.com spf.go:308: check "bad.com" 0 0 spf.go:330: dns record "v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all" spf.go:308: check "d00" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:308: check "d11" 2 0 spf.go:330: dns record "v=spf1 include:d21 ~all" spf.go:308: check "d21" 3 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d12" 4 0 spf.go:330: dns record "v=spf1 include:d22 ~all" spf.go:308: check "d22" 5 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d13" 6 0 spf.go:330: dns record "v=spf1 include:d23 ~all" spf.go:308: check "d23" 7 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d14" 8 0 spf.go:330: dns record "v=spf1 include:d24 ~all" spf.go:308: check "d24" 9 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d15" 10 0 spf.go:330: dns record "v=spf1 include:d25 ~all" spf.go:308: check "d25" 11 0 spf.go:330: dns record "v=spf1 all" spf.go:373: lookup limit reached spf.go:401: "include:d25" permerror, lookup limit reached spf.go:401: "include:d15" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [resolution-with-11-lookups] yml_test.go:162: suite: MX resolution limits yml_test.go:167: domain mx10 yml_test.go:169: SPF: [v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all] yml_test.go:167: domain mx11 yml_test.go:169: SPF: [v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all] yml_test.go:167: domain domain yml_test.go:169: MX: {1 blah1} yml_test.go:169: MX: {2 blah2} yml_test.go:169: MX: {3 blah3} yml_test.go:251: test mx-resolution-10-terms yml_test.go:253: checkhost 1.2.3.4 foo@mx10 spf.go:308: check "mx10" 0 0 spf.go:330: dns record "v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all" spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:397: all: pass yml_test.go:260: success: pass, matched all [mx-resolution-10-terms] yml_test.go:251: test mx-resolution-11-terms yml_test.go:253: checkhost 1.2.3.4 foo@mx11 spf.go:308: check "mx11" 0 0 spf.go:330: dns record "v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all" spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [mx-resolution-11-terms] yml_test.go:162: suite: NXDOMAIN tests yml_test.go:167: domain d01 yml_test.go:169: SPF: [v=spf1 mx ip4:1.2.3.4 -all] yml_test.go:169: MX: {10 doesnotexist} yml_test.go:169: MX: {20 doesnotexist} yml_test.go:167: domain d02 yml_test.go:169: SPF: [v=spf1 include:doesnotexist all] yml_test.go:167: domain d03 yml_test.go:169: SPF: [v=spf1 redirect=doesnotexist] yml_test.go:167: domain sender yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain d00 yml_test.go:169: SPF: [v=spf1 mx -all] yml_test.go:169: MX: {10 doesnotexist} yml_test.go:169: MX: {20 sender} yml_test.go:251: test one-mx-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d00 spf.go:308: check "d00" 0 0 spf.go:330: dns record "v=spf1 mx -all" spf.go:780: masks on "mx", "d00": "d00" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [one-mx-not-found] yml_test.go:251: test all-mx-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d01 spf.go:308: check "d01" 0 0 spf.go:330: dns record "v=spf1 mx ip4:1.2.3.4 -all" spf.go:780: masks on "mx", "d01": "d01" [, ] spf.go:828: mx ips: [] spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [all-mx-not-found] yml_test.go:251: test domain-not-found yml_test.go:253: checkhost 1.2.3.4 foo@doesnotexist spf.go:308: check "doesnotexist" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-not-found] yml_test.go:251: test include-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d02 spf.go:308: check "d02" 0 0 spf.go:330: dns record "v=spf1 include:doesnotexist all" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:doesnotexist" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-not-found] yml_test.go:251: test redirect-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d03 spf.go:308: check "d03" 0 0 spf.go:330: dns record "v=spf1 redirect=doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=doesnotexist": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-not-found] --- PASS: TestOurs (0.02s) === RUN TestRFC4408 yml_test.go:162: suite: Initial processing yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed3.example.com yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain nothosed.example.com yml_test.go:169: SPF: [v=spf1 a:example.net -all] yml_test.go:169: SPF: [–] yml_test.go:167: domain example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain a.example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] yml_test.go:167: domain hosed2.example.com yml_test.go:169: SPF: [v=spf1 €a:example.net -all] yml_test.go:167: domain fine.example.com yml_test.go:169: TXT: [v=spf1 a -all] yml_test.go:251: test non-ascii-result yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com spf.go:308: check "hosed3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net \u0096all" spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [non-ascii-result] yml_test.go:251: test two-spaces yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com spf.go:308: check "fine.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-spaces] yml_test.go:251: test toolonglabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [toolonglabel] yml_test.go:251: test longlabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [longlabel] yml_test.go:251: test emptylabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com spf.go:308: check "A...example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [emptylabel] yml_test.go:251: test helo-not-fqdn yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] yml_test.go:251: test nolocalpart yml_test.go:253: checkhost 1.2.3.4 @example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp.example.net" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test domain-literal yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-literal] yml_test.go:251: test non-ascii-non-spf yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com spf.go:308: check "nothosed.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net -all" spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-non-spf] yml_test.go:251: test helo-domain-literal yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-domain-literal] yml_test.go:162: suite: Record lookup yml_test.go:167: domain both.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain txtonly.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain spfonly.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:167: domain spftimeout.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TIMEOUT yml_test.go:167: domain txttimeout.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain nospftxttimeout.example.net yml_test.go:169: SPF: [v=spf3 !a:yahoo.com -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT yml_test.go:251: test alltimeout yml_test.go:253: checkhost 1.2.3.4 foo@alltimeout.example.net spf.go:308: check "alltimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [alltimeout] yml_test.go:251: test both yml_test.go:253: checkhost 1.2.3.4 foo@both.example.net spf.go:308: check "both.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [both] yml_test.go:251: test txtonly yml_test.go:253: checkhost 1.2.3.4 foo@txtonly.example.net spf.go:308: check "txtonly.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [txtonly] yml_test.go:251: test spfonly yml_test.go:253: checkhost 1.2.3.4 foo@spfonly.example.net spf.go:308: check "spfonly.example.net" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [spfonly] yml_test.go:251: test spftimeout yml_test.go:253: checkhost 1.2.3.4 foo@spftimeout.example.net spf.go:308: check "spftimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [spftimeout] yml_test.go:251: test txttimeout yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net spf.go:308: check "txttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:251: test nospftxttimeout yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net spf.go:308: check "nospftxttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:162: suite: Selecting records yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain example6.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [V=sPf1 +all] yml_test.go:167: domain example8.com yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example9.com yml_test.go:169: SPF: [v=SpF1 ~all] yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf10] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test spfoverride yml_test.go:253: checkhost 1.2.3.4 foo@example4.com spf.go:308: check "example4.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [spfoverride] yml_test.go:251: test multitxt2 yml_test.go:253: checkhost 1.2.3.4 foo@example6.com spf.go:308: check "example6.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test multispf1 yml_test.go:253: checkhost 1.2.3.4 foo@example7.com spf.go:308: check "example7.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multispf1] yml_test.go:251: test multispf2 yml_test.go:253: checkhost 1.2.3.4 foo@example8.com spf.go:308: check "example8.com" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [multispf2] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:251: test multitxt1 yml_test.go:253: checkhost 1.2.3.4 foo@example5.com spf.go:308: check "example5.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] yml_test.go:251: test case-insensitive yml_test.go:253: checkhost 1.2.3.4 foo@example9.com spf.go:308: check "example9.com" 0 0 spf.go:330: dns record "v=SpF1 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:162: suite: Record evaluation yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] yml_test.go:167: domain t8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] yml_test.go:167: domain t9.example.com yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] yml_test.go:167: domain t10.example.com yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] yml_test.go:167: domain t11.example.com yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] yml_test.go:167: domain t2.example.com yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] yml_test.go:167: domain t7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:251: test default-result yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com spf.go:308: check "t7.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [default-result] yml_test.go:251: test invalid-domain-long yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com spf.go:308: check "t11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long] yml_test.go:251: test invalid-domain-long-via-macro yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com spf.go:308: check "t12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H}.bar -all" spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:251: test modifier-charset-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com spf.go:308: check "t3.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] yml_test.go:251: test modifier-charset-bad2 yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com spf.go:308: check "t4.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] yml_test.go:251: test invalid-domain-empty-label yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com spf.go:308: check "t10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mail.example...com -all" spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] yml_test.go:251: test redirect-after-mechanisms1 yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com spf.go:308: check "t5.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:162: suite: ALL mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all.] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all/8] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ?all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 all -all] yml_test.go:251: test all-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all/8" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-cidr] yml_test.go:251: test all-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [all-neutral] yml_test.go:251: test all-double yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 all -all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [all-double] yml_test.go:251: test all-dot yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -all." spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-dot] yml_test.go:251: test all-arg yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:162: suite: PTR mechanism syntax yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [CAFE:BABE::1] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr:] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ptr/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e3.example.com] yml_test.go:169: PTR: [e4.example.com] yml_test.go:169: PTR: [mail.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [e3.example.com] yml_test.go:251: test ptr-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:" spf.go:421: "ptr:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [ptr-empty-domain] yml_test.go:251: test ptr-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr/0 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [ptr-cidr] yml_test.go:251: test ptr-match-target yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.com -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr:example.com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-target] yml_test.go:251: test ptr-match-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] yml_test.go:251: test ptr-nomatch-invalid yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:251: test ptr-match-ip6 yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:162: suite: A mechanism syntax yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain e5a.example.com yml_test.go:169: SPF: [v=spf1 a:museum] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a//129 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:example.com:8080] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 a:] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 a/33 -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] yml_test.go:167: domain foo.example.xn--zckzah yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24//64 -all] yml_test.go:167: domain e8a.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24 -all] yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a//64 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 a:example.-com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e5b.example.com yml_test.go:169: SPF: [v=spf1 a:museum.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a//33 -all] yml_test.go:167: domain e8e.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24/64 -all] yml_test.go:167: domain foo.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] yml_test.go:251: test a-dash-in-toplabel yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com spf.go:308: check "e14.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:foo.example.xn--zckzah" pass, matched a yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] yml_test.go:251: test a-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a//129 -all" spf.go:747: masks on "a//129", "e7.example.com": "" [, ] spf.go:406: "a//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:251: test a-dual-cidr-ip6-match yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip1] yml_test.go:251: test a-dual-cidr-ip4-default yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com spf.go:308: check "e8b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//64 -all" spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] yml_test.go:251: test a-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip2] yml_test.go:251: test a-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] yml_test.go:251: test a-dual-cidr-ip4-match yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] yml_test.go:251: test a-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a//33 -all" spf.go:747: masks on "a//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] yml_test.go:251: test a-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-nxdomain] yml_test.go:251: test a-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] yml_test.go:251: test a-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/33 -all" spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] spf.go:406: "a/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] yml_test.go:251: test a-dual-cidr-ip4-err yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com spf.go:308: check "e8e.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24/64 -all" spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] spf.go:406: "a/24/64" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:406: "a/0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr4-0] yml_test.go:251: test a-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] yml_test.go:251: test a-dual-cidr-ip6-default yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com spf.go:308: check "e8a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24 -all" spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] yml_test.go:251: test a-ip6-dualstack yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com spf.go:308: check "ipv6.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] spf.go:768: a match: 1234::1, 1234::1, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [a-ip6-dualstack] yml_test.go:162: suite: Include mechanism semantics and syntax yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain erehwon.example.com yml_test.go:169: TXT: [v=spfl am not an SPF record] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain ip5.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] yml_test.go:167: domain ip7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 include: -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e6.example.com -all" spf.go:308: check "e6.example.com" 1 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror spf.go:401: "include:e6.example.com" permerror, unknown field yml_test.go:260: success: permerror, unknown field [include-permerror] yml_test.go:251: test include-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [include-syntax-error] yml_test.go:251: test include-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" spf.go:874: macro contains / spf.go:401: "include:ip5.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [include-cidr] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:erehwon.example.com -all" spf.go:308: check "erehwon.example.com" 1 0 spf.go:330: dns record "" spf.go:401: "include:erehwon.example.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-none] yml_test.go:251: test include-fail yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" spf.go:308: check "ip5.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" spf.go:397: all: fail spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [include-fail] yml_test.go:251: test include-softfail yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip6.example.com all" spf.go:308: check "ip6.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.6 ~all" spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] yml_test.go:251: test include-temperror yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip8.example.com -all" spf.go:308: check "ip8.example.com" 1 0 spf.go:318: dns temp error: lookup : test timeout error spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 include: -all" spf.go:308: check "" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] yml_test.go:251: test include-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip7.example.com -all" spf.go:308: check "ip7.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" spf.go:397: all: neutral spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:162: suite: MX mechanism syntax yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:167: domain foo.example.com yml_test.go:169: MX: {0 foo1.example.com} yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: MX: {0 e2.example.com} yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:167: domain foo1.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: MX: {0 foo:bar/baz.example.com} yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 mx//129 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:169: MX: {0 e1.example.com} yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: MX: {0 e2a.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: MX: {0 e2b.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 mx//33 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 mx:abc.123] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 mx/33 -all] yml_test.go:251: test mx-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/33 -all" spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] spf.go:411: "mx/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] yml_test.go:251: test mx-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//129 -all" spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] spf.go:411: "mx//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] yml_test.go:251: test mx-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] yml_test.go:251: test mx-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:831: mx match: 1234::1, 1234::1, [, /0] spf.go:411: "mx//0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] yml_test.go:251: test mx-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-implicit] yml_test.go:251: test mx-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//33 -all" spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6] yml_test.go:251: test mx-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip1] yml_test.go:251: test mx-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:411: "mx/0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:828: mx ips: [1.1.1.1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-nxdomain] yml_test.go:251: test mx-empty yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-empty] yml_test.go:251: test mx-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip2] yml_test.go:251: test mx-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:251: test mx-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:828: mx ips: [] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-nxdomain] yml_test.go:251: test mx-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] yml_test.go:162: suite: EXISTS mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exists:] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 exists] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] yml_test.go:251: test exists-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:" spf.go:426: "exists:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 exists" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [exists-implicit] yml_test.go:251: test exists-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com/24" spf.go:874: macro contains / spf.go:426: "exists:mail.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [exists-cidr] yml_test.go:251: test exists-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip4] yml_test.go:251: test exists-ip6 yml_test.go:253: checkhost cafe:babe::3 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip6] yml_test.go:251: test exists-ip6only yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-ip6only] yml_test.go:251: test exists-dnserr yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:err.example.com -all" spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] yml_test.go:162: suite: IP4 mechanism syntax yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip4] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test cidr4-33 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr4-33] yml_test.go:251: test bad-ip4-port yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] yml_test.go:251: test bad-ip4-short yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3" spf.go:416: "ip4:1.2.3" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] yml_test.go:251: test cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 spf.go:416: "ip4:1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-0] yml_test.go:251: test bare-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [bare-ip4] yml_test.go:251: test ip4-dual-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] yml_test.go:251: test cidr4-32 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 spf.go:416: "ip4:1.2.3.4/32" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-32] yml_test.go:162: suite: IP6 mechanism syntax yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all ip6] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/0] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/129] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1//33] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip6:CAFE:BABE:8000::/33] yml_test.go:251: test cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-0-ip4] yml_test.go:251: test cidr6-0 yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-0] yml_test.go:251: test cidr6-bad yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-bad] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-33-ip4] yml_test.go:251: test ip6-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] yml_test.go:251: test cidr6-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-129 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-129] yml_test.go:251: test cidr6-33 yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: spf.go:416: "ip6:CAFE:BABE:8000::/33" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-33] yml_test.go:162: suite: Semantics of exp and other modifiers yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] yml_test.go:167: domain e13msg.example.com yml_test.go:169: TXT: [The %{x}-files.] yml_test.go:167: domain e16.example.com yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e21msg.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] yml_test.go:167: domain e20.example.com yml_test.go:169: SPF: [v=spf1 default=+] yml_test.go:167: domain e22.example.com yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] yml_test.go:167: domain tworecs.example.com yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] yml_test.go:167: domain e11msg.example.com yml_test.go:169: TXT: [Answer a fool according to his folly.] yml_test.go:169: TXT: [Do not answer a fool according to his folly.] yml_test.go:167: domain e15.example.com yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] yml_test.go:167: domain exp2.example.com yml_test.go:169: TXT: [See me.] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 1up=foo] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 =all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] yml_test.go:167: domain e21.example.com yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] yml_test.go:167: domain badexp.example.com yml_test.go:169: TXT: [Explanation] yml_test.go:167: domain twoexp.example.com yml_test.go:169: TXT: [one] yml_test.go:169: TXT: [two] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 -all foo=%abc] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exp= -all] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] yml_test.go:167: domain exp1.example.com yml_test.go:169: TXT: [No-see-um] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] yml_test.go:167: domain exp4.example.com yml_test.go:169: TXT: [%{l} in implementation] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] yml_test.go:167: domain e17.example.com yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] yml_test.go:167: domain e19.example.com yml_test.go:169: SPF: [v=spf1 default=pass] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] yml_test.go:251: test invalid-modifier yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 1up=foo" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [invalid-modifier] yml_test.go:251: test dorky-sentinel yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [dorky-sentinel] yml_test.go:251: test exp-multiple-txt yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-multiple-txt] yml_test.go:251: test explanation-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com spf.go:308: check "e13.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:251: test two-exp-records yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com spf.go:308: check "tworecs.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:251: test redirect-cancels-prior-exp yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 1 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] yml_test.go:251: test redirect-none yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" spf.go:308: check "erehwon.example.com" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test redirect-cancels-exp yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" spf.go:430: exp= ignored spf.go:308: check "e2.example.com" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=e2.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-exp] yml_test.go:251: test include-ignores-exp yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 2 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-ignores-exp] yml_test.go:251: test empty-modifier-name yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 =all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [empty-modifier-name] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] yml_test.go:251: test non-ascii-exp yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com spf.go:308: check "nonascii.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-exp] yml_test.go:251: test exp-no-txt yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com spf.go:308: check "e22.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-no-txt] yml_test.go:251: test exp-dns-error yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com spf.go:308: check "e21.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-dns-error] yml_test.go:162: suite: Macro expansion rules yml_test.go:167: domain msgbas2x.cos.example.com yml_test.go:169: A: [192.168.218.40] yml_test.go:167: domain example.com yml_test.go:169: A: [192.168.90.76] yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] yml_test.go:167: domain somewhat.long.exp.example.com yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] yml_test.go:167: domain mx.example.com yml_test.go:169: A: [192.168.218.41] yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] yml_test.go:167: domain e6msg.example.com yml_test.go:169: TXT: [connect from %{p}] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com yml_test.go:169: A: [192.168.218.42] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] yml_test.go:167: domain exp.example.com yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] yml_test.go:167: domain 40.218.168.192.example.com yml_test.go:169: TXT: [Connections from %{c} not authorized.] yml_test.go:167: 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 yml_test.go:169: TXT: [Congratulations! That was tricky.] yml_test.go:167: domain 40.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain msg.example.com yml_test.go:169: TXT: [This is a test.] yml_test.go:167: domain e1a.example.com yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] yml_test.go:167: domain 42.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:169: PTR: [mx.e7.example.com] yml_test.go:167: domain _spfh.example.com yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] yml_test.go:167: domain e4msg.example.com yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.example.com.ok.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain msg8.example.com yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] yml_test.go:167: domain example.com.d.spf.example.com yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] yml_test.go:167: domain e1t.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] yml_test.go:167: domain a.spf.example.com yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] yml_test.go:167: domain macro%percent space%20url-space.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com.should.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:%{H} -all] yml_test.go:167: domain o.spf.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] yml_test.go:251: test macro-reverse-split-on-dash yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] yml_test.go:251: test invalid-trailing-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com spf.go:308: check "e1t.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] yml_test.go:251: test exp-txt-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-txt-macro-char] yml_test.go:251: test v-macro-ip4 yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip4] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] yml_test.go:251: test p-macro-ip4-valid yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] yml_test.go:251: test invalid-hello-macro yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-hello-macro] yml_test.go:251: test trailing-dot-domain yml_test.go:253: checkhost 192.168.218.40 test@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." spf.go:308: check "example.com.d.spf.example.com." 1 0 spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" spf.go:308: check "a.spf.example.com" 2 0 spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" spf.go:308: check "o.spf.example.com." 3 0 spf.go:330: dns record "v=spf1 ip4:192.168.218.40" spf.go:536: ip match: 192.168.218.40 spf.go:416: "ip4:192.168.218.40" pass, matched ip spf.go:401: "include:o.spf.example.com." pass, matched ip spf.go:434: "redirect=a.spf.example.com": pass, matched ip spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip yml_test.go:260: success: pass, matched ip [trailing-dot-domain] yml_test.go:251: test invalid-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] yml_test.go:251: test invalid-embedded-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com spf.go:308: check "e1e.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] yml_test.go:251: test macro-mania-in-domain yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com spf.go:308: check "e1a.example.com" 0 0 spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a yml_test.go:260: success: pass, matched a [macro-mania-in-domain] yml_test.go:251: test undef-macro yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] spf.go:923: macro "a": [] spf.go:406: "a:%{a}.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test hello-domain-literal yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [hello-domain-literal] yml_test.go:251: test macro-multiple-delimiters yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] yml_test.go:251: test domain-name-truncation yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com spf.go:308: check "somewhat.long.exp.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [domain-name-truncation] yml_test.go:251: test upper-macro yml_test.go:253: checkhost 192.168.218.42 jack&jill=up@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [upper-macro] yml_test.go:251: test require-valid-helo yml_test.go:253: checkhost 1.2.3.4 test@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "_spfh.%{d2}" to "_spfh.example.com" spf.go:308: check "_spfh.example.com" 1 0 spf.go:330: dns record "v=spf1 -a:%{h} +all" spf.go:747: masks on "a:%{h}", "_spfh.example.com": "%{h}" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}" to "OEMCOMPUTER" spf.go:514: void lookup: nxdomain spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] yml_test.go:251: test trailing-dot-exp yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com spf.go:308: check "exp.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-dot-exp] yml_test.go:251: test v-macro-ip6 yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip6] yml_test.go:251: test p-macro-ip6-novalid yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] yml_test.go:251: test p-macro-ip6-valid yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:162: suite: Processing limits yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example.com} yml_test.go:169: MX: {1 mail.example.com} yml_test.go:169: MX: {2 mail.example.com} yml_test.go:169: MX: {3 mail.example.com} yml_test.go:169: MX: {4 mail.example.com} yml_test.go:169: MX: {5 mail.example.com} yml_test.go:169: MX: {6 mail.example.com} yml_test.go:169: MX: {7 mail.example.com} yml_test.go:169: MX: {8 mail.example.com} yml_test.go:169: MX: {9 mail.example.com} yml_test.go:169: MX: {10 e4.example.com} yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.21] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [1.2.3.1] yml_test.go:169: A: [1.2.3.2] yml_test.go:169: A: [1.2.3.3] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: A: [1.2.3.5] yml_test.go:169: A: [1.2.3.6] yml_test.go:169: A: [1.2.3.7] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: A: [1.2.3.9] yml_test.go:169: A: [1.2.3.10] yml_test.go:169: A: [1.2.3.11] yml_test.go:169: A: [1.2.3.12] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com] yml_test.go:169: A: [1.2.3.7] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:e2.example.com] yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain 5.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e1.example.com.] yml_test.go:169: PTR: [e2.example.com.] yml_test.go:169: PTR: [e3.example.com.] yml_test.go:169: PTR: [e4.example.com.] yml_test.go:169: PTR: [example.com.] yml_test.go:169: PTR: [e6.example.com.] yml_test.go:169: PTR: [e7.example.com.] yml_test.go:169: PTR: [e8.example.com.] yml_test.go:169: PTR: [e9.example.com.] yml_test.go:169: PTR: [e10.example.com.] yml_test.go:169: PTR: [e5.example.com.] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.20] yml_test.go:167: domain inc.example.com yml_test.go:169: SPF: [v=spf1 a a a a a a a a] yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] yml_test.go:251: test include-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [include-at-limit] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 2 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 3 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 4 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 5 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 6 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 7 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 8 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 9 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 10 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 11 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:373: lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 2 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 3 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 4 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 5 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 6 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 7 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 8 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 9 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 10 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 11 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:373: lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-loop] yml_test.go:251: test mx-limit yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:411: "mx" permerror, too many MX records yml_test.go:260: success: permerror, too many MX records [mx-limit] yml_test.go:251: test ptr-limit yml_test.go:253: checkhost 1.2.3.5 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "e1.example.com." -> [{"1.2.3.6" ""}] spf.go:591: ptr forward resolution "e2.example.com." -> [{"1.2.3.7" ""}] spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e4.example.com." -> [{"1.2.3.5" ""}] spf.go:591: ptr forward resolution "e6.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e7.example.com." -> [{"1.2.3.20" ""}] spf.go:591: ptr forward resolution "e8.example.com." -> [{"1.2.3.4" ""}] spf.go:591: ptr forward resolution "e9.example.com." -> [{"1.2.3.21" ""}] spf.go:591: ptr forward resolution "e10.example.com." -> [{"1.2.3.1" ""} {"1.2.3.2" ""} {"1.2.3.3" ""} {"1.2.3.4" ""} {"1.2.3.5" ""} {"1.2.3.6" ""} {"1.2.3.7" ""} {"1.2.3.8" ""} {"1.2.3.9" ""} {"1.2.3.10" ""} {"1.2.3.11" ""} {"1.2.3.12" ""}] spf.go:600: ptr evaluating "e5.example.com" in ["e1.example.com." "e2.example.com." "e3.example.com." "e4.example.com." "e6.example.com." "e7.example.com." "e8.example.com." "e9.example.com." "e10.example.com."] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-limit] yml_test.go:251: test false-a-limit yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [false-a-limit] yml_test.go:251: test mech-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [mech-at-limit] yml_test.go:251: test mech-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] yml_test.go:251: test include-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:308: check "inc.example.com" 2 0 spf.go:330: dns record "v=spf1 a a a a a a a a" spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:444: fallback to neutral spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] --- PASS: TestRFC4408 (0.03s) === RUN TestRFC7208 yml_test.go:162: suite: Initial processing yml_test.go:167: domain badip.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.0.2.5 include:spf.protection.outlook.com ~all] yml_test.go:167: domain example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain a.example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] yml_test.go:167: domain hosed2.example.com yml_test.go:169: SPF: [v=spf1 €a:example.net -all] yml_test.go:167: domain nothosed.example.com yml_test.go:169: SPF: [v=spf1 a:example.net -all] yml_test.go:169: SPF: [–] yml_test.go:167: domain ctrl.example.com yml_test.go:169: SPF: [v=spf1 a:ctrl.example.com ptr -all] yml_test.go:169: A: [192.0.2.3] yml_test.go:167: domain fine.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] yml_test.go:167: domain hosed3.example.com yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain trail.example.com yml_test.go:169: SPF: [v=spf1 a -all ] yml_test.go:167: domain null.example.com yml_test.go:169: SPF: [v=spf1 ip4: 192.0.2.5 -all] yml_test.go:169: yml_test.go:251: test helo-not-fqdn yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] yml_test.go:251: test two-spaces yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com spf.go:308: check "fine.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-spaces] yml_test.go:251: test toolonglabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [toolonglabel] yml_test.go:251: test domain-literal yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-literal] yml_test.go:251: test non-ascii-non-spf yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com spf.go:308: check "nothosed.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net -all" spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-non-spf] yml_test.go:251: test null-text yml_test.go:253: checkhost 192.0.2.5 silly@null.example.com spf.go:308: check "null.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.5 -all" spf.go:536: ip match: 192.0.2.5 spf.go:416: "ip4:192.0.2.5" pass, matched ip yml_test.go:260: success: pass, matched ip [null-text] yml_test.go:251: test badip4 yml_test.go:253: checkhost 192.0.2.5 oops@badip.example.com spf.go:308: check "badip.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.5\n include:spf.protection.outlook.com ~all" spf.go:416: "ip4:192.0.2.5\n" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip4] yml_test.go:251: test nolocalpart yml_test.go:253: checkhost 1.2.3.4 @example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp.example.net" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test non-ascii-result yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com spf.go:308: check "hosed3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net \u0096all" spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [non-ascii-result] yml_test.go:251: test trailing-space yml_test.go:253: checkhost 192.0.2.5 silly@trail.example.com spf.go:308: check "trail.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all " spf.go:747: masks on "a", "trail.example.com": "trail.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-space] yml_test.go:251: test longlabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [longlabel] yml_test.go:251: test emptylabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com spf.go:308: check "A...example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [emptylabel] yml_test.go:251: test helo-domain-literal yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-domain-literal] yml_test.go:162: suite: Record lookup yml_test.go:167: domain both.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain txtonly.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain spfonly.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:167: domain spftimeout.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TIMEOUT yml_test.go:167: domain txttimeout.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain nospftxttimeout.example.net yml_test.go:169: SPF: [v=spf3 !a:yahoo.com -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT yml_test.go:251: test txttimeout yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net spf.go:308: check "txttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:251: test nospftxttimeout yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net spf.go:308: check "nospftxttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:251: test alltimeout yml_test.go:253: checkhost 1.2.3.4 foo@alltimeout.example.net spf.go:308: check "alltimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [alltimeout] yml_test.go:251: test both yml_test.go:253: checkhost 1.2.3.4 foo@both.example.net spf.go:308: check "both.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [both] yml_test.go:251: test txtonly yml_test.go:253: checkhost 1.2.3.4 foo@txtonly.example.net spf.go:308: check "txtonly.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [txtonly] yml_test.go:251: test spfonly yml_test.go:253: checkhost 1.2.3.4 foo@spfonly.example.net spf.go:308: check "spfonly.example.net" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [spfonly] yml_test.go:162: suite: Selecting records yml_test.go:167: domain example9.com yml_test.go:169: SPF: [v=SpF1 ~all] yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example6.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [V=sPf1 +all] yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain example8.com yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf10] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:251: test multitxt1 yml_test.go:253: checkhost 1.2.3.4 foo@example5.com spf.go:308: check "example5.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test multispf2 yml_test.go:253: checkhost 1.2.3.4 foo@example8.com spf.go:308: check "example8.com" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [multispf2] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] yml_test.go:251: test case-insensitive yml_test.go:253: checkhost 1.2.3.4 foo@example9.com spf.go:308: check "example9.com" 0 0 spf.go:330: dns record "v=SpF1 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test spfoverride yml_test.go:253: checkhost 1.2.3.4 foo@example4.com spf.go:308: check "example4.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [spfoverride] yml_test.go:251: test multitxt2 yml_test.go:253: checkhost 1.2.3.4 foo@example6.com spf.go:308: check "example6.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test multispf1 yml_test.go:253: checkhost 1.2.3.4 foo@example7.com spf.go:308: check "example7.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multispf1] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:162: suite: Record evaluation yml_test.go:167: domain t9.example.com yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t2.example.com yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] yml_test.go:167: domain t10.example.com yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] yml_test.go:167: domain t11.example.com yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] yml_test.go:167: domain t6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] yml_test.go:167: domain t7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:251: test modifier-charset-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com spf.go:308: check "t3.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] yml_test.go:251: test default-result yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com spf.go:308: check "t7.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [default-result] yml_test.go:251: test invalid-domain-empty-label yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com spf.go:308: check "t10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mail.example...com -all" spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] yml_test.go:251: test invalid-domain-long yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com spf.go:308: check "t11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long] yml_test.go:251: test invalid-domain-long-via-macro yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com spf.go:308: check "t12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H}.bar -all" spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:251: test modifier-charset-bad2 yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com spf.go:308: check "t4.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] yml_test.go:251: test redirect-after-mechanisms1 yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com spf.go:308: check "t5.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:162: suite: ALL mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all.] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all/8] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ?all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 all -all] yml_test.go:251: test all-dot yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -all." spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-dot] yml_test.go:251: test all-arg yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:251: test all-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all/8" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-cidr] yml_test.go:251: test all-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [all-neutral] yml_test.go:251: test all-double yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 all -all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [all-double] yml_test.go:162: suite: PTR mechanism syntax yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ptr/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] yml_test.go:167: 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 yml_test.go:169: PTR: [e3.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [mail.Example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [CAFE:BABE::1] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.Com -all] yml_test.go:167: domain loop.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:167: domain loop4.example.com yml_test.go:169: CNAME: CNAME.example.com. yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [2001:db8::1] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e3.example.com] yml_test.go:169: PTR: [e4.example.com] yml_test.go:169: PTR: [mail.example.com] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr:] yml_test.go:167: domain 4.2.0.192.in-addr.arpa yml_test.go:169: PTR: [loop4.example.com.] yml_test.go:167: domain cname.example.com yml_test.go:169: CNAMELOOP yml_test.go:251: test ptr-match-ip6 yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:251: test ptr-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:" spf.go:421: "ptr:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [ptr-empty-domain] yml_test.go:251: test ptr-case-change yml_test.go:253: checkhost 2001:db8::1 bar@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.Com -all" spf.go:591: ptr forward resolution "mail.Example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "example.Com" in ["mail.example.com."] spf.go:604: ptr match: "mail.example.com." spf.go:421: "ptr:example.Com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-case-change] yml_test.go:251: test ptr-cname-loop yml_test.go:253: checkhost 192.0.2.4 postmaster@loop.example.com spf.go:308: check "loop.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:600: ptr evaluating "loop.example.com" in [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-cname-loop] yml_test.go:251: test ptr-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr/0 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [ptr-cidr] yml_test.go:251: test ptr-match-target yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.com -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr:example.com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-target] yml_test.go:251: test ptr-match-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] yml_test.go:251: test ptr-nomatch-invalid yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:162: suite: A mechanism syntax yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 a/33 -all] yml_test.go:167: domain e8a.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24 -all] yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a//64 -all] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 a:example.-com] yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a//33 -all] yml_test.go:167: domain e8e.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24/64 -all] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] yml_test.go:167: domain foo.example.xn--zckzah yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e5a.example.com yml_test.go:169: SPF: [v=spf1 a:museum] yml_test.go:167: domain e5b.example.com yml_test.go:169: SPF: [v=spf1 a:museum.] yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24//64 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:example.com:8080] yml_test.go:167: domain foo.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a//129 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 a:] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:251: test a-dual-cidr-ip4-match yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] yml_test.go:251: test a-dual-cidr-ip6-match yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] yml_test.go:251: test a-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] yml_test.go:251: test a-dash-in-toplabel yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com spf.go:308: check "e14.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:foo.example.xn--zckzah" pass, matched a yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] yml_test.go:251: test a-dual-cidr-ip4-err yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com spf.go:308: check "e8e.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24/64 -all" spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] spf.go:406: "a/24/64" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] yml_test.go:251: test a-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a//129 -all" spf.go:747: masks on "a//129", "e7.example.com": "" [, ] spf.go:406: "a//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:251: test a-ip6-dualstack yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com spf.go:308: check "ipv6.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] spf.go:768: a match: 1234::1, 1234::1, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [a-ip6-dualstack] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a//33 -all" spf.go:747: masks on "a//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] yml_test.go:251: test a-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/33 -all" spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] spf.go:406: "a/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] yml_test.go:251: test a-dual-cidr-ip4-default yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com spf.go:308: check "e8b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//64 -all" spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] yml_test.go:251: test a-dual-cidr-ip6-default yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com spf.go:308: check "e8a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24 -all" spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] yml_test.go:251: test a-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:406: "a/0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr4-0] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip1] yml_test.go:251: test a-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip2] yml_test.go:251: test a-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-nxdomain] yml_test.go:251: test a-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] yml_test.go:251: test a-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] yml_test.go:162: suite: Include mechanism semantics and syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] yml_test.go:167: domain ip7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] yml_test.go:167: domain erehwon.example.com yml_test.go:169: TXT: [v=spfl am not an SPF record] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 include: -all] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain ip5.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] yml_test.go:251: test include-fail yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" spf.go:308: check "ip5.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" spf.go:397: all: fail spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [include-fail] yml_test.go:251: test include-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip7.example.com -all" spf.go:308: check "ip7.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" spf.go:397: all: neutral spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e6.example.com -all" spf.go:308: check "e6.example.com" 1 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror spf.go:401: "include:e6.example.com" permerror, unknown field yml_test.go:260: success: permerror, unknown field [include-permerror] yml_test.go:251: test include-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [include-syntax-error] yml_test.go:251: test include-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 include: -all" spf.go:308: check "" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] yml_test.go:251: test include-softfail yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip6.example.com all" spf.go:308: check "ip6.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.6 ~all" spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] yml_test.go:251: test include-temperror yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip8.example.com -all" spf.go:308: check "ip8.example.com" 1 0 spf.go:318: dns temp error: lookup : test timeout error spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" spf.go:874: macro contains / spf.go:401: "include:ip5.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [include-cidr] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:erehwon.example.com -all" spf.go:308: check "erehwon.example.com" 1 0 spf.go:330: dns record "" spf.go:401: "include:erehwon.example.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-none] yml_test.go:162: suite: MX mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: MX: {0 e2.example.com} yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 mx:abc.123] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 mx//33 -all] yml_test.go:167: domain foo1.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 mx//129 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:169: MX: {0 e1.example.com} yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: MX: {0 e2a.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 mx/33 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] yml_test.go:167: domain foo.example.com yml_test.go:169: MX: {0 foo1.example.com} yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: MX: {0 foo:bar/baz.example.com} yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: MX: {0 e2b.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] yml_test.go:251: test mx-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//33 -all" spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6] yml_test.go:251: test mx-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] yml_test.go:251: test mx-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:831: mx match: 1234::1, 1234::1, [, /0] spf.go:411: "mx//0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] yml_test.go:251: test mx-empty yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-empty] yml_test.go:251: test mx-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:828: mx ips: [] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-nxdomain] yml_test.go:251: test mx-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:411: "mx/0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/33 -all" spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] spf.go:411: "mx/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] yml_test.go:251: test mx-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip1] yml_test.go:251: test mx-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip2] yml_test.go:251: test mx-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:251: test mx-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//129 -all" spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] spf.go:411: "mx//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] yml_test.go:251: test mx-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:828: mx ips: [1.1.1.1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-nxdomain] yml_test.go:251: test mx-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-implicit] yml_test.go:162: suite: EXISTS mechanism syntax yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 exists] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exists:] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 exists" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [exists-implicit] yml_test.go:251: test exists-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com/24" spf.go:874: macro contains / spf.go:426: "exists:mail.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [exists-cidr] yml_test.go:251: test exists-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip4] yml_test.go:251: test exists-ip6 yml_test.go:253: checkhost cafe:babe::3 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip6] yml_test.go:251: test exists-ip6only yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-ip6only] yml_test.go:251: test exists-dnserr yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:err.example.com -all" spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] yml_test.go:251: test exists-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:" spf.go:426: "exists:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:162: suite: IP4 mechanism syntax yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip4] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] yml_test.go:251: test bare-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [bare-ip4] yml_test.go:251: test bad-ip4-port yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] yml_test.go:251: test bad-ip4-short yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3" spf.go:416: "ip4:1.2.3" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] yml_test.go:251: test cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 spf.go:416: "ip4:1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-0] yml_test.go:251: test cidr4-32 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 spf.go:416: "ip4:1.2.3.4/32" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-32] yml_test.go:251: test cidr4-33 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr4-33] yml_test.go:251: test ip4-dual-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:162: suite: IP6 mechanism syntax yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all ip6] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/0] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/129] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1//33] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip6:Cafe:Babe:8000::/33] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-0-ip4] yml_test.go:251: test cidr6-0 yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-0] yml_test.go:251: test cidr6-bad yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-bad] yml_test.go:251: test ip6-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] yml_test.go:251: test cidr6-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-129 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-129] yml_test.go:251: test cidr6-33 yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: spf.go:416: "ip6:Cafe:Babe:8000::/33" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-33] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-33-ip4] yml_test.go:162: suite: Semantics of exp and other modifiers yml_test.go:167: domain e16.example.com yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e20.example.com yml_test.go:169: SPF: [v=spf1 default=+] yml_test.go:167: domain e21.example.com yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] yml_test.go:167: domain e15.example.com yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] yml_test.go:167: domain e22.example.com yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] yml_test.go:167: domain e23.example.com yml_test.go:169: SPF: [v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] yml_test.go:167: domain e13msg.example.com yml_test.go:169: TXT: [The %{x}-files.] yml_test.go:167: domain e21msg.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e24.example.com yml_test.go:169: SPF: [v=spf1 redirect=testimplicit.example.com] yml_test.go:169: A: [192.0.2.1] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain exp4.example.com yml_test.go:169: TXT: [%{l} in implementation] yml_test.go:167: domain e11msg.example.com yml_test.go:169: TXT: [Answer a fool according to his folly.] yml_test.go:169: TXT: [Do not answer a fool according to his folly.] yml_test.go:167: domain e17.example.com yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] yml_test.go:167: domain testimplicit.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [192.0.2.2] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain exp2.example.com yml_test.go:169: TXT: [See me.] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 -all foo=%abc] yml_test.go:167: domain tworecs.example.com yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] yml_test.go:167: domain exp1.example.com yml_test.go:169: TXT: [No-see-um] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exp= -all] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] yml_test.go:167: domain twoexp.example.com yml_test.go:169: TXT: [one] yml_test.go:169: TXT: [two] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] yml_test.go:167: domain e19.example.com yml_test.go:169: SPF: [v=spf1 default=pass] yml_test.go:167: domain badexp.example.com yml_test.go:169: TXT: [Explanation] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 1up=foo] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 =all] yml_test.go:251: test invalid-modifier yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 1up=foo" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [invalid-modifier] yml_test.go:251: test empty-modifier-name yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 =all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [empty-modifier-name] yml_test.go:251: test dorky-sentinel yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [dorky-sentinel] yml_test.go:251: test explanation-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com spf.go:308: check "e13.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] yml_test.go:251: test redirect-none yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" spf.go:308: check "erehwon.example.com" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test non-ascii-exp yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com spf.go:308: check "nonascii.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-exp] yml_test.go:251: test two-exp-records yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com spf.go:308: check "tworecs.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:251: test redirect-implicit yml_test.go:253: checkhost 192.0.2.2 bar@e24.example.com spf.go:308: check "e24.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=testimplicit.example.com" spf.go:308: check "testimplicit.example.com" 1 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "testimplicit.example.com": "testimplicit.example.com" [, ] spf.go:768: a match: 192.0.2.2, 192.0.2.2, [, ] spf.go:406: "a" pass, matched a spf.go:434: "redirect=testimplicit.example.com": pass, matched a yml_test.go:260: success: pass, matched a [redirect-implicit] yml_test.go:251: test exp-no-txt yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com spf.go:308: check "e22.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-no-txt] yml_test.go:251: test exp-void yml_test.go:253: checkhost 1.2.3.4 foo@e23.example.com spf.go:308: check "e23.example.com" 0 0 spf.go:330: dns record "v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all" spf.go:747: masks on "a:erehwon.example.com", "e23.example.com": "erehwon.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:foobar.com", "e23.example.com": "foobar.com" [, ] spf.go:514: void lookup: nxdomain spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-void] yml_test.go:251: test include-ignores-exp yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 2 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-ignores-exp] yml_test.go:251: test redirect-cancels-prior-exp yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 1 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] yml_test.go:251: test exp-multiple-txt yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-multiple-txt] yml_test.go:251: test exp-dns-error yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com spf.go:308: check "e21.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-dns-error] yml_test.go:251: test redirect-cancels-exp yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" spf.go:430: exp= ignored spf.go:308: check "e2.example.com" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=e2.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-exp] yml_test.go:162: suite: Macro expansion rules yml_test.go:167: domain example.com.d.spf.example.com yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] yml_test.go:167: domain macro%percent space%20url-space.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] yml_test.go:167: domain 40.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:%{H} -all] yml_test.go:167: domain 40.218.168.192.example.com yml_test.go:169: TXT: [Connections from %{c} not authorized.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com.should.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain msg8.example.com yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] yml_test.go:167: domain exp.example.com yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] yml_test.go:167: 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 yml_test.go:169: TXT: [Congratulations! That was tricky.] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] yml_test.go:167: domain 42.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:169: PTR: [mx.e7.example.com] yml_test.go:167: domain a.spf.example.com yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] yml_test.go:167: domain o.spf.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] yml_test.go:167: domain e1t.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] yml_test.go:167: domain somewhat.long.exp.example.com yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] yml_test.go:167: domain e6msg.example.com yml_test.go:169: TXT: [connect from %{p}] yml_test.go:167: domain example.com yml_test.go:169: A: [192.168.90.76] yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] yml_test.go:167: domain msg.example.com yml_test.go:169: TXT: [This is a test.] yml_test.go:167: domain e1a.example.com yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] yml_test.go:167: domain mx.example.com yml_test.go:169: A: [192.168.218.41] yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com yml_test.go:169: A: [192.168.218.42] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] yml_test.go:167: domain msgbas2x.cos.example.com yml_test.go:169: A: [192.168.218.40] yml_test.go:167: domain _spfh.example.com yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] yml_test.go:167: domain mx.example.com.ok.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e4msg.example.com yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] yml_test.go:251: test invalid-trailing-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com spf.go:308: check "e1t.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] yml_test.go:251: test macro-mania-in-domain yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com spf.go:308: check "e1a.example.com" 0 0 spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a yml_test.go:260: success: pass, matched a [macro-mania-in-domain] yml_test.go:251: test invalid-hello-macro yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-hello-macro] yml_test.go:251: test hello-domain-literal yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [hello-domain-literal] yml_test.go:251: test trailing-dot-domain yml_test.go:253: checkhost 192.168.218.40 test@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." spf.go:308: check "example.com.d.spf.example.com." 1 0 spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" spf.go:308: check "a.spf.example.com" 2 0 spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" spf.go:308: check "o.spf.example.com." 3 0 spf.go:330: dns record "v=spf1 ip4:192.168.218.40" spf.go:536: ip match: 192.168.218.40 spf.go:416: "ip4:192.168.218.40" pass, matched ip spf.go:401: "include:o.spf.example.com." pass, matched ip spf.go:434: "redirect=a.spf.example.com": pass, matched ip spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip yml_test.go:260: success: pass, matched ip [trailing-dot-domain] yml_test.go:251: test invalid-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] yml_test.go:251: test invalid-embedded-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com spf.go:308: check "e1e.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] yml_test.go:251: test v-macro-ip4 yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip4] yml_test.go:251: test p-macro-ip4-valid yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] yml_test.go:251: test upper-macro yml_test.go:253: checkhost 192.168.218.42 ~jack&jill=up-a_b3.c@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [upper-macro] yml_test.go:251: test macro-reverse-split-on-dash yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] yml_test.go:251: test trailing-dot-exp yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com spf.go:308: check "exp.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-dot-exp] yml_test.go:251: test exp-txt-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-txt-macro-char] yml_test.go:251: test domain-name-truncation yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com spf.go:308: check "somewhat.long.exp.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [domain-name-truncation] yml_test.go:251: test v-macro-ip6 yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip6] yml_test.go:251: test undef-macro yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] spf.go:923: macro "a": [] spf.go:406: "a:%{a}.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test require-valid-helo yml_test.go:253: checkhost 1.2.3.4 test@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "_spfh.%{d2}" to "_spfh.example.com" spf.go:308: check "_spfh.example.com" 1 0 spf.go:330: dns record "v=spf1 -a:%{h} +all" spf.go:747: masks on "a:%{h}", "_spfh.example.com": "%{h}" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}" to "OEMCOMPUTER" spf.go:514: void lookup: nxdomain spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] yml_test.go:251: test p-macro-ip6-novalid yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] yml_test.go:251: test p-macro-ip6-valid yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:251: test macro-multiple-delimiters yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] yml_test.go:162: suite: Processing limits yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com] yml_test.go:169: A: [1.2.3.7] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.20] yml_test.go:167: domain inc.example.com yml_test.go:169: SPF: [v=spf1 a a a a a a a a] yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:e2.example.com] yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain 5.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e1.example.com.] yml_test.go:169: PTR: [e2.example.com.] yml_test.go:169: PTR: [e3.example.com.] yml_test.go:169: PTR: [e4.example.com.] yml_test.go:169: PTR: [example.com.] yml_test.go:169: PTR: [e6.example.com.] yml_test.go:169: PTR: [e7.example.com.] yml_test.go:169: PTR: [e8.example.com.] yml_test.go:169: PTR: [e9.example.com.] yml_test.go:169: PTR: [e10.example.com.] yml_test.go:169: PTR: [e5.example.com.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.21] yml_test.go:167: domain e12.example.com yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com ?all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example.com} yml_test.go:169: MX: {1 mail.example.com} yml_test.go:169: MX: {2 mail.example.com} yml_test.go:169: MX: {3 mail.example.com} yml_test.go:169: MX: {4 mail.example.com} yml_test.go:169: MX: {5 mail.example.com} yml_test.go:169: MX: {6 mail.example.com} yml_test.go:169: MX: {7 mail.example.com} yml_test.go:169: MX: {8 mail.example.com} yml_test.go:169: MX: {9 mail.example.com} yml_test.go:169: MX: {10 e4.example.com} yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e11.example.com yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [1.2.3.1] yml_test.go:169: A: [1.2.3.2] yml_test.go:169: A: [1.2.3.3] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: A: [1.2.3.5] yml_test.go:169: A: [1.2.3.6] yml_test.go:169: A: [1.2.3.7] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: A: [1.2.3.9] yml_test.go:169: A: [1.2.3.10] yml_test.go:169: A: [1.2.3.11] yml_test.go:169: A: [1.2.3.12] yml_test.go:251: test mech-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] yml_test.go:251: test include-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [include-at-limit] yml_test.go:251: test mx-limit yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:411: "mx" permerror, too many MX records yml_test.go:260: success: permerror, too many MX records [mx-limit] yml_test.go:251: test false-a-limit yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [false-a-limit] yml_test.go:251: test mech-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [mech-at-limit] yml_test.go:251: test include-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:308: check "inc.example.com" 2 0 spf.go:330: dns record "v=spf1 a a a a a a a a" spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:444: fallback to neutral spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] yml_test.go:251: test void-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com ?all" spf.go:747: masks on "a:err.example.com", "e12.example.com": "err.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err1.example.com", "e12.example.com": "err1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [void-at-limit] yml_test.go:251: test void-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all" spf.go:747: masks on "a:err.example.com", "e11.example.com": "err.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err1.example.com", "e11.example.com": "err1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err2.example.com", "e11.example.com": "err2.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [void-over-limit] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 2 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 3 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 4 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 5 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 6 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 7 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 8 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 9 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 10 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 11 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:373: lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 2 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 3 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 4 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 5 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 6 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 7 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 8 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 9 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 10 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 11 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:373: lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-loop] yml_test.go:251: test ptr-limit yml_test.go:253: checkhost 1.2.3.5 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "e1.example.com." -> [{"1.2.3.6" ""}] spf.go:591: ptr forward resolution "e2.example.com." -> [{"1.2.3.7" ""}] spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e4.example.com." -> [{"1.2.3.5" ""}] spf.go:591: ptr forward resolution "e6.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e7.example.com." -> [{"1.2.3.20" ""}] spf.go:591: ptr forward resolution "e8.example.com." -> [{"1.2.3.4" ""}] spf.go:591: ptr forward resolution "e9.example.com." -> [{"1.2.3.21" ""}] spf.go:591: ptr forward resolution "e10.example.com." -> [{"1.2.3.1" ""} {"1.2.3.2" ""} {"1.2.3.3" ""} {"1.2.3.4" ""} {"1.2.3.5" ""} {"1.2.3.6" ""} {"1.2.3.7" ""} {"1.2.3.8" ""} {"1.2.3.9" ""} {"1.2.3.10" ""} {"1.2.3.11" ""} {"1.2.3.12" ""}] spf.go:600: ptr evaluating "e5.example.com" in ["e1.example.com." "e2.example.com." "e3.example.com." "e4.example.com." "e6.example.com." "e7.example.com." "e8.example.com." "e9.example.com." "e10.example.com."] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-limit] yml_test.go:162: suite: Test cases from implementation bugs yml_test.go:167: domain webmail.pair.com yml_test.go:169: TXT: [v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32] yml_test.go:167: domain example.org yml_test.go:169: SPF: [v=spf1 mx redirect=_spf.example.com] yml_test.go:169: MX: {10 smtp.example.org} yml_test.go:169: MX: {10 smtp1.example.com} yml_test.go:167: domain smtp.example.org yml_test.go:169: A: [198.51.100.2] yml_test.go:169: AAAA: [2001:db8:ff0:100::3] yml_test.go:167: domain a.example.org yml_test.go:169: TXT: [Another TXT record.] yml_test.go:169: TXT: [v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all] yml_test.go:169: TXT: [More TXT records.] yml_test.go:169: TXT: [A third TXT record.] yml_test.go:169: AAAA: [2001:db8:ff0:300::4] yml_test.go:167: domain b.example.org yml_test.go:169: CNAME: a.example.org yml_test.go:167: domain relay.pair.com yml_test.go:169: TXT: [v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all] yml_test.go:169: A: [192.0.2.131] yml_test.go:167: domain smtp1.example.com yml_test.go:169: A: [192.0.2.26] yml_test.go:169: AAAA: [2001:db8:ff0:200::2] yml_test.go:167: 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 yml_test.go:169: PTR: [smtp6-v.fe.example.org] yml_test.go:167: domain smtp6-v.fe.example.org yml_test.go:169: AAAA: [2001:db8:ff0:100::2] yml_test.go:167: domain _spf.example.com yml_test.go:169: SPF: [v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all] yml_test.go:167: domain _expspf.example.org yml_test.go:169: TXT: [Sender domain not allowed from this host. Please see http://www.openspf.org/Why?s=mfrom&id=%{S}&ip=%{C}&r=%{R}] yml_test.go:167: domain mail.example.org yml_test.go:169: SPF: [v=spf1 include:a.example.org include:b.example.org -all] yml_test.go:169: A: [192.0.2.28] yml_test.go:251: test bytes-bug yml_test.go:253: checkhost 2001:db8:ff0:100::2 test@example.org spf.go:308: check "example.org" 0 0 spf.go:330: dns record "v=spf1 mx redirect=_spf.example.com" spf.go:780: masks on "mx", "example.org": "example.org" [, ] spf.go:828: mx ips: [198.51.100.2 2001:db8:ff0:100::3 192.0.2.26 2001:db8:ff0:200::2] spf.go:308: check "_spf.example.com" 2 0 spf.go:330: dns record "v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all" spf.go:591: ptr forward resolution "smtp6-v.fe.example.org." -> [{"2001:db8:ff0:100::2" ""}] spf.go:600: ptr evaluating "fe.example.org" in ["smtp6-v.fe.example.org."] spf.go:604: ptr match: "smtp6-v.fe.example.org." spf.go:421: "ptr:fe.example.org" pass, matched ptr spf.go:434: "redirect=_spf.example.com": pass, matched ptr yml_test.go:260: success: pass, matched ptr [bytes-bug] yml_test.go:251: test cname-aliasing yml_test.go:253: checkhost 192.0.2.27 test@mail.example.org spf.go:308: check "mail.example.org" 0 0 spf.go:330: dns record "v=spf1 include:a.example.org include:b.example.org -all" spf.go:308: check "a.example.org" 1 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all" spf.go:308: check "webmail.pair.com" 2 0 spf.go:330: dns record "v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32" spf.go:444: fallback to neutral spf.go:308: check "relay.pair.com" 3 0 spf.go:330: dns record "v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all" spf.go:747: masks on "a", "relay.pair.com": "relay.pair.com" [, ] spf.go:397: all: fail spf.go:397: all: fail spf.go:308: check "b.example.org" 5 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all" spf.go:308: check "webmail.pair.com" 6 0 spf.go:330: dns record "v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32" spf.go:444: fallback to neutral spf.go:308: check "relay.pair.com" 7 0 spf.go:330: dns record "v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all" spf.go:747: masks on "a", "relay.pair.com": "relay.pair.com" [, ] spf.go:397: all: fail spf.go:397: all: fail spf.go:397: all: fail yml_test.go:260: success: fail, matched all [cname-aliasing] --- PASS: TestRFC7208 (0.03s) === RUN TestPySPF yml_test.go:162: suite: yml_test.go:167: domain lyme.eater.example.co.uk.1.2.3.5.spf.example.net yml_test.go:169: A: [127.0.0.1] yml_test.go:167: domain example.co.uk yml_test.go:169: SPF: [v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all] yml_test.go:251: test exists-pass yml_test.go:253: checkhost 1.2.3.5 lyme.eater@example.co.uk spf.go:308: check "example.co.uk" 0 0 spf.go:330: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" spf.go:780: masks on "mx/26", "example.co.uk": "example.co.uk" [/26, ] spf.go:514: void lookup: nxdomain spf.go:923: macro "l": ["l" "l" "" "" ""] spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.5.spf.example.net" spf.go:640: exists match: 127.0.0.1 spf.go:426: "exists:%{l}.%{d}.%{i}.spf.example.net" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-pass] yml_test.go:251: test exists-fail yml_test.go:253: checkhost 1.2.3.4 lyme.eater@example.co.uk spf.go:308: check "example.co.uk" 0 0 spf.go:330: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" spf.go:780: masks on "mx/26", "example.co.uk": "example.co.uk" [/26, ] spf.go:514: void lookup: nxdomain spf.go:923: macro "l": ["l" "l" "" "" ""] spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.4.spf.example.net" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-fail] yml_test.go:162: suite: yml_test.go:167: domain examplea.com yml_test.go:169: SPF: [v=spf1 a mx include:b.com] yml_test.go:167: domain exampleb.com yml_test.go:169: SPF: [v=spf1 a mx include:a.com] yml_test.go:167: domain examplec.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain exampled.com yml_test.go:169: SPF: [v=spf1 a:examplea.com:8080] yml_test.go:167: domain examplee.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain examplef.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:251: test badall yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplec.com spf.go:308: check "examplec.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [badall] yml_test.go:251: test tworecs yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplef.com spf.go:308: check "examplef.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [tworecs] yml_test.go:251: test badip yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplee.com spf.go:308: check "examplee.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip] yml_test.go:251: test incloop yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplea.com spf.go:308: check "examplea.com" 0 0 spf.go:330: dns record "v=spf1 a mx include:b.com" spf.go:747: masks on "a", "examplea.com": "examplea.com" [, ] spf.go:514: void lookup: nxdomain spf.go:780: masks on "mx", "examplea.com": "examplea.com" [, ] spf.go:514: void lookup: nxdomain spf.go:308: check "b.com" 3 2 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:b.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [incloop] yml_test.go:162: suite: yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1mx] yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:162: suite: yml_test.go:167: domain c1.example.com yml_test.go:169: CNAME: c2.example.com. yml_test.go:167: domain c2.example.com yml_test.go:169: SPF: [v=spf1 a a:c1.example.com -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mx1.example.com yml_test.go:169: yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:mx1.example.com mx:mx1.example.com ~all] yml_test.go:167: domain mail.example.com yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 default=-] yml_test.go:167: domain e2.example.com yml_test.go:169: CNAME: c1.example.com. yml_test.go:251: test cname-chain yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a a:c1.example.com -all" spf.go:747: masks on "a", "e2.example.com": "e2.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [cname-chain] yml_test.go:251: test null-cname yml_test.go:253: checkhost 1.2.3.4 bar@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mx1.example.com mx:mx1.example.com ~all" spf.go:747: masks on "a:mx1.example.com", "e3.example.com": "mx1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:780: masks on "mx:mx1.example.com", "e3.example.com": "mx1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [null-cname] yml_test.go:251: test emptyMX yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [emptyMX] yml_test.go:251: test localhost yml_test.go:253: checkhost 127.0.0.1 root@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [localhost] --- PASS: TestPySPF (0.00s) PASS ok blitiri.com.ar/go/spf 0.106s ? blitiri.com.ar/go/spf/internal/dnstest [no test files] create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=golang dh_prep -O--buildsystem=golang dh_auto_install --destdir=debian/golang-blitiri-go-spf-dev/ -O--buildsystem=golang dh_installdocs -O--buildsystem=golang dh_installchangelogs -O--buildsystem=golang dh_installsystemduser -O--buildsystem=golang dh_perl -O--buildsystem=golang dh_link -O--buildsystem=golang dh_strip_nondeterminism -O--buildsystem=golang dh_compress -O--buildsystem=golang dh_fixperms -O--buildsystem=golang dh_missing -O--buildsystem=golang dh_installdeb -O--buildsystem=golang dh_golang -O--buildsystem=golang dh_gencontrol -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 -O--buildsystem=golang dh_builddeb -O--buildsystem=golang dpkg-deb: building package 'golang-blitiri-go-spf-dev' in '../golang-blitiri-go-spf-dev_1.5.1-1_all.deb'. dpkg-genbuildinfo --build=binary -O../golang-blitiri-go-spf_1.5.1-1_i386.buildinfo dpkg-genchanges --build=binary -O../golang-blitiri-go-spf_1.5.1-1_i386.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/50092 and its subdirectories I: Current time: Fri Mar 27 21:35:32 -12 2026 I: pbuilder-time-stamp: 1774690532 Sat Mar 28 09:35:32 UTC 2026 I: Signing ./b1/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo as golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc Sat Mar 28 09:35:32 UTC 2026 I: Signed ./b1/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo as ./b1/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc Sat Mar 28 09:35:32 UTC 2026 - build #1 for golang-blitiri-go-spf/unstable/i386 on ionos16-i386 done. Starting cleanup. All cleanup done. Sat Mar 28 09:35:32 UTC 2026 - reproducible_build.sh stopped running as /tmp/jenkins-script-RgNc4RUe, removing. /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm: total 16 drwxr-xr-x 2 jenkins jenkins 4096 Feb 23 03:12 b1 drwxr-xr-x 2 jenkins jenkins 4096 Feb 23 03:11 b2 -rw-r--r-- 1 jenkins jenkins 2212 Sep 2 2022 golang-blitiri-go-spf_1.5.1-1.dsc -rw------- 1 jenkins jenkins 3407 Feb 23 03:11 rbuildlog.FX6wdxe /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b1: total 448 -rw-r--r-- 1 jenkins jenkins 292459 Feb 23 03:12 build.log -rw-r--r-- 1 jenkins jenkins 37120 Feb 23 03:12 golang-blitiri-go-spf-dev_1.5.1-1_all.deb -rw-r--r-- 1 jenkins jenkins 2392 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1.debian.tar.xz -rw-r--r-- 1 jenkins jenkins 2212 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1.dsc -rw-r--r-- 1 jenkins jenkins 4814 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo -rw-r--r-- 1 jenkins jenkins 5696 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc -rw-r--r-- 1 jenkins jenkins 1244 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_i386.changes -rw-r--r-- 1 jenkins jenkins 1694 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_source.changes -rw-r--r-- 1 jenkins jenkins 88384 Feb 23 03:12 golang-blitiri-go-spf_1.5.1.orig.tar.gz /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b2: total 0 Sun Feb 23 03:12:34 UTC 2025 I: Deleting $TMPDIR on ionos16-i386.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Fri Mar 27 21:34:50 -12 2026 I: pbuilder-time-stamp: 1774690490 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: using eatmydata during job I: Copying source file I: copying [golang-blitiri-go-spf_1.5.1-1.dsc] I: copying [./golang-blitiri-go-spf_1.5.1.orig.tar.gz] I: copying [./golang-blitiri-go-spf_1.5.1-1.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./golang-blitiri-go-spf_1.5.1-1.dsc: unsupported subcommand dpkg-source: info: extracting golang-blitiri-go-spf in golang-blitiri-go-spf-1.5.1 dpkg-source: info: unpacking golang-blitiri-go-spf_1.5.1.orig.tar.gz dpkg-source: info: unpacking golang-blitiri-go-spf_1.5.1-1.debian.tar.xz I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/50092/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='i386' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=22 ' DISTRIBUTION='unstable' HOME='/root' HOST_ARCH='i386' IFS=' ' INVOCATION_ID='9cc14c348e3341ce9963f1bf245479e4' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' LD_LIBRARY_PATH='/usr/lib/libeatmydata' LD_PRELOAD='libeatmydata.so' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='50092' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/pbuilderrc_x3CL --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b1 --logfile b1/build.log golang-blitiri-go-spf_1.5.1-1.dsc' SUDO_GID='112' SUDO_UID='107' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://213.165.73.152:3128' I: uname -a Linux ionos16-i386 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Nov 22 2024 /bin -> usr/bin I: user script /srv/workspace/pbuilder/50092/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: i386 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), dh-golang, golang-any, golang-gopkg-yaml.v3-dev dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19761 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on dh-golang; however: Package dh-golang is not installed. pbuilder-satisfydepends-dummy depends on golang-any; however: Package golang-any is not installed. pbuilder-satisfydepends-dummy depends on golang-gopkg-yaml.v3-dev; however: Package golang-gopkg-yaml.v3-dev is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} debhelper{a} dh-autoreconf{a} dh-golang{a} dh-strip-nondeterminism{a} dwz{a} file{a} gettext{a} gettext-base{a} golang-1.24-go{a} golang-1.24-src{a} golang-any{a} golang-go{a} golang-gopkg-yaml.v3-dev{a} golang-src{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libdebhelper-perl{a} libelf1t64{a} libfile-stripnondeterminism-perl{a} libicu72{a} libmagic-mgc{a} libmagic1t64{a} libpipeline1{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2{a} m4{a} man-db{a} po-debconf{a} sensible-utils{a} The following packages are RECOMMENDED but will NOT be installed: curl libarchive-cpio-perl libltdl-dev libmail-sendmail-perl lynx pkgconf wget 0 packages upgraded, 37 newly installed, 0 to remove and 0 not upgraded. Need to get 68.1 MB of archives. After unpacking 329 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main i386 sensible-utils all 0.0.24 [24.8 kB] Get: 2 http://deb.debian.org/debian unstable/main i386 libmagic-mgc i386 1:5.45-3+b1 [314 kB] Get: 3 http://deb.debian.org/debian unstable/main i386 libmagic1t64 i386 1:5.45-3+b1 [115 kB] Get: 4 http://deb.debian.org/debian unstable/main i386 file i386 1:5.45-3+b1 [43.2 kB] Get: 5 http://deb.debian.org/debian unstable/main i386 gettext-base i386 0.23.1-1 [245 kB] Get: 6 http://deb.debian.org/debian unstable/main i386 libuchardet0 i386 0.0.8-1+b2 [69.2 kB] Get: 7 http://deb.debian.org/debian unstable/main i386 groff-base i386 1.23.0-7 [1199 kB] Get: 8 http://deb.debian.org/debian unstable/main i386 bsdextrautils i386 2.40.4-4 [96.4 kB] Get: 9 http://deb.debian.org/debian unstable/main i386 libpipeline1 i386 1.5.8-1 [41.2 kB] Get: 10 http://deb.debian.org/debian unstable/main i386 man-db i386 2.13.0-1 [1428 kB] Get: 11 http://deb.debian.org/debian unstable/main i386 m4 i386 1.4.19-5 [301 kB] Get: 12 http://deb.debian.org/debian unstable/main i386 autoconf all 2.72-3 [493 kB] Get: 13 http://deb.debian.org/debian unstable/main i386 autotools-dev all 20220109.1 [51.6 kB] Get: 14 http://deb.debian.org/debian unstable/main i386 automake all 1:1.17-3 [862 kB] Get: 15 http://deb.debian.org/debian unstable/main i386 autopoint all 0.23.1-1 [770 kB] Get: 16 http://deb.debian.org/debian unstable/main i386 libdebhelper-perl all 13.24.1 [90.9 kB] Get: 17 http://deb.debian.org/debian unstable/main i386 libtool all 2.5.4-3 [539 kB] Get: 18 http://deb.debian.org/debian unstable/main i386 dh-autoreconf all 20 [17.1 kB] Get: 19 http://deb.debian.org/debian unstable/main i386 libarchive-zip-perl all 1.68-1 [104 kB] Get: 20 http://deb.debian.org/debian unstable/main i386 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Get: 21 http://deb.debian.org/debian unstable/main i386 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Get: 22 http://deb.debian.org/debian unstable/main i386 libelf1t64 i386 0.192-4 [195 kB] Get: 23 http://deb.debian.org/debian unstable/main i386 dwz i386 0.15-1+b1 [116 kB] Get: 24 http://deb.debian.org/debian unstable/main i386 libunistring5 i386 1.3-1 [458 kB] Get: 25 http://deb.debian.org/debian unstable/main i386 libicu72 i386 72.1-6 [9582 kB] Get: 26 http://deb.debian.org/debian unstable/main i386 libxml2 i386 2.12.7+dfsg+really2.9.14-0.2+b1 [734 kB] Get: 27 http://deb.debian.org/debian unstable/main i386 gettext i386 0.23.1-1 [1714 kB] Get: 28 http://deb.debian.org/debian unstable/main i386 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 29 http://deb.debian.org/debian unstable/main i386 po-debconf all 1.0.21+nmu1 [248 kB] Get: 30 http://deb.debian.org/debian unstable/main i386 debhelper all 13.24.1 [920 kB] Get: 31 http://deb.debian.org/debian unstable/main i386 dh-golang all 1.63 [24.4 kB] Get: 32 http://deb.debian.org/debian unstable/main i386 golang-1.24-src all 1.24.0-1 [20.3 MB] Get: 33 http://deb.debian.org/debian unstable/main i386 golang-1.24-go i386 1.24.0-1 [26.8 MB] Get: 34 http://deb.debian.org/debian unstable/main i386 golang-src all 2:1.24~2 [5136 B] Get: 35 http://deb.debian.org/debian unstable/main i386 golang-go i386 2:1.24~2 [44.3 kB] Get: 36 http://deb.debian.org/debian unstable/main i386 golang-any i386 2:1.24~2 [5216 B] Get: 37 http://deb.debian.org/debian unstable/main i386 golang-gopkg-yaml.v3-dev all 3.0.1-3 [74.3 kB] Fetched 68.1 MB in 0s (142 MB/s) Preconfiguring packages ... Selecting previously unselected package sensible-utils. (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 ... 19761 files and directories currently installed.) Preparing to unpack .../00-sensible-utils_0.0.24_all.deb ... Unpacking sensible-utils (0.0.24) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../01-libmagic-mgc_1%3a5.45-3+b1_i386.deb ... Unpacking libmagic-mgc (1:5.45-3+b1) ... Selecting previously unselected package libmagic1t64:i386. Preparing to unpack .../02-libmagic1t64_1%3a5.45-3+b1_i386.deb ... Unpacking libmagic1t64:i386 (1:5.45-3+b1) ... Selecting previously unselected package file. Preparing to unpack .../03-file_1%3a5.45-3+b1_i386.deb ... Unpacking file (1:5.45-3+b1) ... Selecting previously unselected package gettext-base. Preparing to unpack .../04-gettext-base_0.23.1-1_i386.deb ... Unpacking gettext-base (0.23.1-1) ... Selecting previously unselected package libuchardet0:i386. Preparing to unpack .../05-libuchardet0_0.0.8-1+b2_i386.deb ... Unpacking libuchardet0:i386 (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../06-groff-base_1.23.0-7_i386.deb ... Unpacking groff-base (1.23.0-7) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../07-bsdextrautils_2.40.4-4_i386.deb ... Unpacking bsdextrautils (2.40.4-4) ... Selecting previously unselected package libpipeline1:i386. Preparing to unpack .../08-libpipeline1_1.5.8-1_i386.deb ... Unpacking libpipeline1:i386 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../09-man-db_2.13.0-1_i386.deb ... Unpacking man-db (2.13.0-1) ... Selecting previously unselected package m4. Preparing to unpack .../10-m4_1.4.19-5_i386.deb ... Unpacking m4 (1.4.19-5) ... Selecting previously unselected package autoconf. Preparing to unpack .../11-autoconf_2.72-3_all.deb ... Unpacking autoconf (2.72-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../12-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../13-automake_1%3a1.17-3_all.deb ... Unpacking automake (1:1.17-3) ... Selecting previously unselected package autopoint. Preparing to unpack .../14-autopoint_0.23.1-1_all.deb ... Unpacking autopoint (0.23.1-1) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../15-libdebhelper-perl_13.24.1_all.deb ... Unpacking libdebhelper-perl (13.24.1) ... Selecting previously unselected package libtool. Preparing to unpack .../16-libtool_2.5.4-3_all.deb ... Unpacking libtool (2.5.4-3) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../17-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../18-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../19-libfile-stripnondeterminism-perl_1.14.1-2_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.1-2) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../20-dh-strip-nondeterminism_1.14.1-2_all.deb ... Unpacking dh-strip-nondeterminism (1.14.1-2) ... Selecting previously unselected package libelf1t64:i386. Preparing to unpack .../21-libelf1t64_0.192-4_i386.deb ... Unpacking libelf1t64:i386 (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../22-dwz_0.15-1+b1_i386.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libunistring5:i386. Preparing to unpack .../23-libunistring5_1.3-1_i386.deb ... Unpacking libunistring5:i386 (1.3-1) ... Selecting previously unselected package libicu72:i386. Preparing to unpack .../24-libicu72_72.1-6_i386.deb ... Unpacking libicu72:i386 (72.1-6) ... Selecting previously unselected package libxml2:i386. Preparing to unpack .../25-libxml2_2.12.7+dfsg+really2.9.14-0.2+b1_i386.deb ... Unpacking libxml2:i386 (2.12.7+dfsg+really2.9.14-0.2+b1) ... Selecting previously unselected package gettext. Preparing to unpack .../26-gettext_0.23.1-1_i386.deb ... Unpacking gettext (0.23.1-1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../27-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../28-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../29-debhelper_13.24.1_all.deb ... Unpacking debhelper (13.24.1) ... Selecting previously unselected package dh-golang. Preparing to unpack .../30-dh-golang_1.63_all.deb ... Unpacking dh-golang (1.63) ... Selecting previously unselected package golang-1.24-src. Preparing to unpack .../31-golang-1.24-src_1.24.0-1_all.deb ... Unpacking golang-1.24-src (1.24.0-1) ... Selecting previously unselected package golang-1.24-go. Preparing to unpack .../32-golang-1.24-go_1.24.0-1_i386.deb ... Unpacking golang-1.24-go (1.24.0-1) ... Selecting previously unselected package golang-src. Preparing to unpack .../33-golang-src_2%3a1.24~2_all.deb ... Unpacking golang-src (2:1.24~2) ... Selecting previously unselected package golang-go:i386. Preparing to unpack .../34-golang-go_2%3a1.24~2_i386.deb ... Unpacking golang-go:i386 (2:1.24~2) ... Selecting previously unselected package golang-any:i386. Preparing to unpack .../35-golang-any_2%3a1.24~2_i386.deb ... Unpacking golang-any:i386 (2:1.24~2) ... Selecting previously unselected package golang-gopkg-yaml.v3-dev. Preparing to unpack .../36-golang-gopkg-yaml.v3-dev_3.0.1-3_all.deb ... Unpacking golang-gopkg-yaml.v3-dev (3.0.1-3) ... Setting up golang-1.24-src (1.24.0-1) ... Setting up libpipeline1:i386 (1.5.8-1) ... Setting up libicu72:i386 (72.1-6) ... Setting up bsdextrautils (2.40.4-4) ... Setting up libmagic-mgc (1:5.45-3+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up golang-gopkg-yaml.v3-dev (3.0.1-3) ... Setting up libdebhelper-perl (13.24.1) ... Setting up libmagic1t64:i386 (1:5.45-3+b1) ... Setting up gettext-base (0.23.1-1) ... Setting up m4 (1.4.19-5) ... Setting up file (1:5.45-3+b1) ... Setting up libelf1t64:i386 (0.192-4) ... Setting up autotools-dev (20220109.1) ... Setting up libunistring5:i386 (1.3-1) ... Setting up autopoint (0.23.1-1) ... Setting up golang-1.24-go (1.24.0-1) ... Setting up autoconf (2.72-3) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.24) ... Setting up libuchardet0:i386 (0.0.8-1+b2) ... Setting up golang-src (2:1.24~2) ... Setting up libxml2:i386 (2.12.7+dfsg+really2.9.14-0.2+b1) ... Setting up automake (1:1.17-3) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.14.1-2) ... Setting up gettext (0.23.1-1) ... Setting up libtool (2.5.4-3) ... Setting up golang-go:i386 (2:1.24~2) ... Setting up golang-any:i386 (2:1.24~2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up dh-strip-nondeterminism (1.14.1-2) ... Setting up groff-base (1.23.0-7) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up man-db (2.13.0-1) ... Not building database; man-db/auto-update is not 'true'. Setting up debhelper (13.24.1) ... Setting up dh-golang (1.63) ... Processing triggers for libc-bin (2.40-7) ... Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps I: Building the package I: Running cd /build/reproducible-path/golang-blitiri-go-spf-1.5.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../golang-blitiri-go-spf_1.5.1-1_source.changes dpkg-buildpackage: info: source package golang-blitiri-go-spf dpkg-buildpackage: info: source version 1.5.1-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Alberto Bertogli dpkg-source --before-build . dpkg-buildpackage: info: host architecture i386 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 dh binary --buildsystem=golang --with=golang dh_update_autotools_config -O--buildsystem=golang dh_autoreconf -O--buildsystem=golang dh_auto_configure -O--buildsystem=golang dh_auto_build -O--buildsystem=golang cd obj-i686-linux-gnu && go install -trimpath -v -p 22 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest internal/coverage/rtcov internal/goarch internal/msan internal/nettrace internal/unsafeheader unicode/utf8 internal/asan sync/atomic internal/byteorder internal/godebugs internal/runtime/atomic unicode cmp internal/runtime/syscall internal/profilerecord internal/itoa math/bits internal/goos internal/cpu internal/goexperiment internal/runtime/math internal/abi internal/runtime/sys internal/chacha8rand math internal/bytealg internal/runtime/exithook internal/stringslite internal/race internal/sync internal/runtime/maps runtime weak iter internal/reflectlite sync maps slices internal/bisect internal/singleflight internal/testlog unique runtime/cgo errors internal/oserror internal/godebug sort strconv path io vendor/golang.org/x/net/dns/dnsmessage syscall bytes strings net/netip reflect regexp/syntax internal/syscall/execenv internal/syscall/unix time regexp context io/fs internal/poll internal/fmtsort internal/filepathlite os fmt net net/url blitiri.com.ar/go/spf/internal/dnstest blitiri.com.ar/go/spf dh_auto_test -O--buildsystem=golang cd obj-i686-linux-gnu && go test -vet=off -v -p 22 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest === RUN TestBasic spf.go:308: check "domain" 0 0 spf.go:330: dns record "" spf.go:308: check "domain" 0 0 spf.go:330: dns record "" spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 " spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 -" spf.go:437: unknown field, permerror spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exp=blah +all" spf.go:430: exp= ignored spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 -all " spf.go:397: all: fail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ~all" spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a ~all" spf.go:747: masks on "a", "domain": "domain" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a/24" spf.go:747: masks on "a/24", "domain": "domain" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/24" spf.go:747: masks on "a:d1110/24", "domain": "d1110" [/24, ] spf.go:768: a match: 1.1.1.1, 1.1.1.0, [/24, ] spf.go:406: "a:d1110/24" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/montoto" spf.go:747: masks on "a:d1110/montoto", "domain": "" [, ] spf.go:406: "a:d1110/montoto" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/99" spf.go:747: masks on "a:d1110/99", "domain": "" [, ] spf.go:406: "a:d1110/99" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/32" spf.go:747: masks on "a:d1110/32", "domain": "d1110" [/32, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110" spf.go:747: masks on "a:d1110", "domain": "d1110" [, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1111" spf.go:747: masks on "a:d1111", "domain": "d1111" [, ] spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:d1111" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:nothing/24" spf.go:747: masks on "a:nothing/24", "domain": "nothing" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "domain": "domain" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx/24" spf.go:780: masks on "mx/24", "domain": "domain" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:a/montoto ~all" spf.go:780: masks on "mx:a/montoto", "domain": "" [, ] spf.go:411: "mx:a/montoto" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24 ~all" spf.go:780: masks on "mx:d1110/24", "domain": "d1110" [/24, ] spf.go:828: mx ips: [1.1.1.0] spf.go:831: mx match: 1.1.1.1, 1.1.1.0, [/24, ] spf.go:411: "mx:d1110/24" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24//100 ~all" spf.go:780: masks on "mx:d1110/24//100", "domain": "d1110" [/24, /100] spf.go:828: mx ips: [1.1.1.0] spf.go:831: mx match: 1.1.1.1, 1.1.1.0, [/24, /100] spf.go:411: "mx:d1110/24//100" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24//129 ~all" spf.go:780: masks on "mx:d1110/24//129", "domain": "" [/24, ] spf.go:411: "mx:d1110/24//129" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24/100 ~all" spf.go:780: masks on "mx:d1110/24/100", "domain": "" [, ] spf.go:411: "mx:d1110/24/100" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/99 ~all" spf.go:780: masks on "mx:d1110/99", "domain": "" [, ] spf.go:411: "mx:d1110/99" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4 ~all" spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:12 ~all" spf.go:416: "ip6:12" permerror, invalid ipX value spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 -all" spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/24 -all" spf.go:527: ip match: 1.1.1.0/24 contains 1.1.1.1 spf.go:416: "ip4:1.1.1.1/24" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/lala -all" spf.go:416: "ip4:1.1.1.1/lala" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/33 -all" spf.go:416: "ip4:1.1.1.1/33" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:doesnotexist" permerror, no DNS record found spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "domain" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "xx.domain." spf.go:421: "ptr" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:d1111 -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "d1111" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "d1111." spf.go:421: "ptr:d1111" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:lalala -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "lalala" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "lalala." spf.go:421: "ptr:lalala" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:doesnotexist -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "doesnotexist" in ["lalala." "xx.domain." "d1111."] spf.go:397: all: fail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 blah" spf.go:437: unknown field, permerror spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exists:d1111 -all" spf.go:640: exists match: 1.1.1.1 spf.go:426: "exists:d1111" pass, matched exists spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=" spf.go:434: "redirect=": permerror, invalid domain --- PASS: TestBasic (0.00s) === RUN TestIPv6 spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a ~all" spf.go:747: masks on "a", "domain": "domain" [, ] spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a/24" spf.go:747: masks on "a/24", "domain": "domain" [/24, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660//24" spf.go:747: masks on "a:d6660//24", "domain": "d6660" [, /24] spf.go:768: a match: 2001:db8::68, 2001:db8::, [, /24] spf.go:406: "a:d6660//24" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660/24//100" spf.go:747: masks on "a:d6660/24//100", "domain": "d6660" [/24, /100] spf.go:768: a match: 2001:db8::68, 2001:db8::, [/24, /100] spf.go:406: "a:d6660/24//100" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660" spf.go:747: masks on "a:d6660", "domain": "d6660" [, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6666" spf.go:747: masks on "a:d6666", "domain": "d6666" [, ] spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:d6666" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:nothing//24" spf.go:747: masks on "a:nothing//24", "domain": "nothing" [, /24] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660//24 ~all" spf.go:780: masks on "mx:d6660//24", "domain": "d6660" [, /24] spf.go:828: mx ips: [2001:db8::] spf.go:831: mx match: 2001:db8::68, 2001:db8::, [, /24] spf.go:411: "mx:d6660//24" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660/24//100 ~all" spf.go:780: masks on "mx:d6660/24//100", "domain": "d6660" [/24, /100] spf.go:828: mx ips: [2001:db8::] spf.go:831: mx match: 2001:db8::68, 2001:db8::, [/24, /100] spf.go:411: "mx:d6660/24//100" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660/24/100 ~all" spf.go:780: masks on "mx:d6660/24/100", "domain": "" [, ] spf.go:411: "mx:d6660/24/100" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::68 ~all" spf.go:536: ip match: 2001:db8::68 spf.go:416: "ip6:2001:db8::68" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::1/24 ~all" spf.go:527: ip match: 2001:d00::/24 contains 2001:db8::68 spf.go:416: "ip6:2001:db8::1/24" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::1/100 ~all" spf.go:527: ip match: 2001:db8::/100 contains 2001:db8::68 spf.go:416: "ip6:2001:db8::1/100" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "domain" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "domain." spf.go:421: "ptr" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:d6666 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "d6666" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "d6666." spf.go:421: "ptr:d6666" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:sonlas6 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "sonlas6" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "sonlas6." spf.go:421: "ptr:sonlas6" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:sonlas7 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "sonlas7" in ["sonlas6." "domain." "d6666."] spf.go:397: all: fail --- PASS: TestIPv6 (0.00s) === RUN TestInclude spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "" spf.go:401: "include:domain2" permerror, no DNS record found spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip --- PASS: TestInclude (0.00s) === RUN TestRecursionLimit spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 1 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 2 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 3 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 4 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 5 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 6 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 7 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 8 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 9 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 10 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 11 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:373: lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached --- PASS: TestRecursionLimit (0.00s) === RUN TestRedirect spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 -all" spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:434: "redirect=domain2": pass, matched ip --- PASS: TestRedirect (0.00s) === RUN TestInvalidRedirect spf.go:308: check "doesnotexist" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=doesnotexist": permerror, no DNS record found --- PASS: TestInvalidRedirect (0.00s) === RUN TestRedirectOrder spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=faildom" spf.go:308: check "faildom" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=faildom": fail, matched all spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=faildom all" spf.go:397: all: pass --- PASS: TestRedirectOrder (0.00s) === RUN TestNoRecord spf.go:308: check "d1" 0 0 spf.go:330: dns record "" spf.go:308: check "d2" 0 0 spf.go:330: dns record "" spf.go:308: check "d3" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:308: check "nospf" 0 0 spf.go:314: dns domain not found: lookup : record not found for testing --- PASS: TestNoRecord (0.00s) === RUN TestDNSTemporaryErrors spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:tmperr" spf.go:308: check "tmperr" 1 0 spf.go:318: dns temp error: lookup : temporary error for testing spf.go:401: "include:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:tmperr" spf.go:747: masks on "a:tmperr", "domain": "tmperr" [, ] spf.go:406: "a:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:tmperr" spf.go:780: masks on "mx:tmperr", "domain": "tmperr" [, ] spf.go:411: "mx:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:tmperr" spf.go:421: "ptr:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:tmpmx" spf.go:780: masks on "mx:tmpmx", "domain": "tmpmx" [, ] spf.go:411: "mx:tmpmx" temperror, lookup : temporary error for testing --- PASS: TestDNSTemporaryErrors (0.00s) === RUN TestDNSPermanentErrors spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:permerr" spf.go:308: check "permerr" 1 0 spf.go:327: dns perm error: lookup : permanent error for testing spf.go:401: "include:permerr" permerror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:permerr" spf.go:747: masks on "a:permerr", "domain": "permerr" [, ] spf.go:406: "a:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:permerr" spf.go:780: masks on "mx:permerr", "domain": "permerr" [, ] spf.go:411: "mx:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:permerr" spf.go:421: "ptr:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:permmx" spf.go:780: masks on "mx:permmx", "domain": "permmx" [, ] spf.go:411: "mx:permmx" temperror, lookup : permanent error for testing --- PASS: TestDNSPermanentErrors (0.00s) === RUN TestMXWithInvalidRecord spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:dom2 -all" spf.go:780: masks on "mx:dom2", "domain": "dom2" [, ] spf.go:828: mx ips: [1.1.1.1] spf.go:831: mx match: 1.1.1.1, 1.1.1.1, [, ] spf.go:411: "mx:dom2" pass, matched mx --- PASS: TestMXWithInvalidRecord (0.00s) === RUN TestMacros spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:%{fff} -all" spf.go:923: macro "fff": [] spf.go:421: "ptr:%{fff}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:%{fff} -all" spf.go:780: masks on "mx:%{fff}", "domain": "%{fff}" [, ] spf.go:923: macro "fff": [] spf.go:411: "mx:%{fff}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=%{fff}" spf.go:923: macro "fff": [] spf.go:434: "redirect=%{fff}": permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:%{o0}" spf.go:747: masks on "a:%{o0}", "domain": "%{o0}" [, ] spf.go:923: macro "o0": ["o0" "o" "0" "" ""] spf.go:406: "a:%{o0}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:sss-%{s}-sss" spf.go:747: masks on "a:sss-%{s}-sss", "domain": "sss-%{s}-sss" [, ] spf.go:923: macro "s": ["s" "s" "" "" ""] spf.go:1020: macro expanded "sss-%{s}-sss" to "sss-user@domain-sss" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:sss-%{s}-sss" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ooo-%{o}-ooo" spf.go:747: masks on "a:ooo-%{o}-ooo", "domain": "ooo-%{o}-ooo" [, ] spf.go:923: macro "o": ["o" "o" "" "" ""] spf.go:1020: macro expanded "ooo-%{o}-ooo" to "ooo-domain-ooo" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ooo-%{o}-ooo" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:OOO-%{O}-OOO" spf.go:747: masks on "a:OOO-%{O}-OOO", "domain": "OOO-%{O}-OOO" [, ] spf.go:923: macro "O": ["O" "O" "" "" ""] spf.go:1020: macro expanded "OOO-%{O}-OOO" to "OOO-domain-OOO" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:OOO-%{O}-OOO" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ppp-%{p}-ppp" spf.go:747: masks on "a:ppp-%{p}-ppp", "domain": "ppp-%{p}-ppp" [, ] spf.go:923: macro "p": ["p" "p" "" "" ""] spf.go:1020: macro expanded "ppp-%{p}-ppp" to "ppp-unknown-ppp" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ppp-%{p}-ppp" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:hhh-%{h}-hhh" spf.go:747: masks on "a:hhh-%{h}-hhh", "domain": "hhh-%{h}-hhh" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "hhh-%{h}-hhh" to "hhh-helo-hhh" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:hhh-%{h}-hhh" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:vvv-%{v}-vvv" spf.go:747: masks on "a:vvv-%{v}-vvv", "domain": "vvv-%{v}-vvv" [, ] spf.go:923: macro "v": ["v" "v" "" "" ""] spf.go:1020: macro expanded "vvv-%{v}-vvv" to "vvv-ip6-vvv" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:vvv-%{v}-vvv" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:%{x}" spf.go:747: masks on "a:%{x}", "domain": "%{x}" [, ] spf.go:923: macro "x": [] spf.go:406: "a:%{x}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ooo-%{o7}-ooo" spf.go:747: masks on "a:ooo-%{o7}-ooo", "domain": "ooo-%{o7}-ooo" [, ] spf.go:923: macro "o7": ["o7" "o" "7" "" ""] spf.go:1020: macro expanded "ooo-%{o7}-ooo" to "ooo-domain-ooo" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ooo-%{o7}-ooo" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exists:%{ir}.vvv -all" spf.go:923: macro "ir": ["ir" "i" "" "r" ""] spf.go:1020: macro expanded "%{ir}.vvv" to "8.6.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.vvv" spf.go:640: exists match: 1.1.1.1 spf.go:426: "exists:%{ir}.vvv" pass, matched exists --- PASS: TestMacros (0.00s) === RUN TestMacrosV4 spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:sr-%{sr}-sr" spf.go:747: masks on "a:sr-%{sr}-sr", "domain.com": "sr-%{sr}-sr" [, ] spf.go:923: macro "sr": ["sr" "s" "" "r" ""] spf.go:1020: macro expanded "sr-%{sr}-sr" to "sr-com.user@domain-sr" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:sr-%{sr}-sr" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:sra-%{sr.}-sra" spf.go:747: masks on "a:sra-%{sr.}-sra", "domain.com": "sra-%{sr.}-sra" [, ] spf.go:923: macro "sr.": ["sr." "s" "" "r" "."] spf.go:1020: macro expanded "sra-%{sr.}-sra" to "sra-com.user@domain-sra" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:sra-%{sr.}-sra" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o7-%{o7}-o7" spf.go:747: masks on "a:o7-%{o7}-o7", "domain.com": "o7-%{o7}-o7" [, ] spf.go:923: macro "o7": ["o7" "o" "7" "" ""] spf.go:1020: macro expanded "o7-%{o7}-o7" to "o7-domain.com-o7" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o7-%{o7}-o7" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o1-%{o1}-o1" spf.go:747: masks on "a:o1-%{o1}-o1", "domain.com": "o1-%{o1}-o1" [, ] spf.go:923: macro "o1": ["o1" "o" "1" "" ""] spf.go:1020: macro expanded "o1-%{o1}-o1" to "o1-com-o1" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o1-%{o1}-o1" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o1r-%{o1r}-o1r" spf.go:747: masks on "a:o1r-%{o1r}-o1r", "domain.com": "o1r-%{o1r}-o1r" [, ] spf.go:923: macro "o1r": ["o1r" "o" "1" "r" ""] spf.go:1020: macro expanded "o1r-%{o1r}-o1r" to "o1r-domain-o1r" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o1r-%{o1r}-o1r" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:vvv-%{v}-vvv" spf.go:747: masks on "a:vvv-%{v}-vvv", "domain.com": "vvv-%{v}-vvv" [, ] spf.go:923: macro "v": ["v" "v" "" "" ""] spf.go:1020: macro expanded "vvv-%{v}-vvv" to "vvv-in-addr-vvv" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:vvv-%{v}-vvv" pass, matched a --- PASS: TestMacrosV4 (0.00s) === RUN TestIPMatchHelper --- PASS: TestIPMatchHelper (0.00s) === RUN TestInvalidMacro spf.go:923: macro "x": [] spf.go:923: macro "z": [] spf.go:923: macro "c": ["c" "c" "" "" ""] spf.go:923: macro "r": ["r" "r" "" "" ""] spf.go:923: macro "t": ["t" "t" "" "" ""] --- PASS: TestInvalidMacro (0.00s) === RUN TestNullTrace --- PASS: TestNullTrace (0.00s) === RUN TestOverrideLookupLimit spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:373: lookup limit reached spf.go:401: "include:domain4" permerror, lookup limit reached spf.go:401: "include:domain3" permerror, lookup limit reached spf.go:401: "include:domain2" permerror, lookup limit reached --- PASS: TestOverrideLookupLimit (0.00s) === RUN TestOverrideVoidLookupLimit spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached spf.go:401: "include:domain3" permerror, void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:514: void lookup: nxdomain spf.go:308: check "domain4" 6 3 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:503: void lookup: no answers spf.go:378: void lookup limit reached spf.go:401: "include:domain3" permerror, void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:503: void lookup: no answers spf.go:308: check "domain4" 6 3 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:378: void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached --- PASS: TestOverrideVoidLookupLimit (0.00s) === RUN TestWithContext spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:327: dns perm error: context canceled --- PASS: TestWithContext (0.00s) === RUN TestWithResolver spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all --- PASS: TestWithResolver (0.00s) === RUN TestBadResolverResponse spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 a:domain1 -all" spf.go:747: masks on "a:domain1", "domain1": "domain1" [, ] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 a:domain1//24 -all" spf.go:747: masks on "a:domain1//24", "domain1": "domain1" [, /24] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 mx:domain1 -all" spf.go:780: masks on "mx:domain1", "domain1": "domain1" [, ] spf.go:828: mx ips: [] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 mx:domain1//24 -all" spf.go:780: masks on "mx:domain1//24", "domain1": "domain1" [, /24] spf.go:828: mx ips: [] spf.go:397: all: fail --- PASS: TestBadResolverResponse (0.00s) === RUN TestWithTraceFunc spf_test.go:698: tracing check "domain1" 0 0 spf_test.go:698: tracing dns record "v=spf1 include:domain2" spf_test.go:698: tracing check "domain2" 1 0 spf_test.go:698: tracing dns record "v=spf1 +all" spf_test.go:698: tracing all: pass spf_test.go:698: tracing "include:domain2" pass, matched all --- PASS: TestWithTraceFunc (0.00s) === RUN TestOurs yml_test.go:162: suite: Simple successes yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:251: test test1 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [test1] yml_test.go:251: test test2 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [test2] yml_test.go:162: suite: Simple failures yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:251: test test2 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [test2] yml_test.go:251: test test1 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [test1] yml_test.go:162: suite: Regexp edge cases for "a", "mx" and "ptr" yml_test.go:167: domain a1.net yml_test.go:169: SPF: [v=spf1 ip6:a::a ~all] yml_test.go:167: domain a2.net yml_test.go:169: SPF: [v=spf1 ip6:1a0a:cccc::/29 ~all] yml_test.go:167: domain expmx.net yml_test.go:169: SPF: [v=spf1 exp=mx:mymx.com ~all] yml_test.go:169: MX: {10 mymx.com} yml_test.go:167: domain mymx.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain expptr.net yml_test.go:169: SPF: [v=spf1 exp=ptr:lalala.com ~all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [ptr:lalala.com.] yml_test.go:167: domain ptr:lalala.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test ipv6-with-a yml_test.go:253: checkhost a::a foobar@a1.net spf.go:308: check "a1.net" 0 0 spf.go:330: dns record "v=spf1 ip6:a::a ~all" spf.go:536: ip match: a::a spf.go:416: "ip6:a::a" pass, matched ip yml_test.go:260: success: pass, matched ip [ipv6-with-a] yml_test.go:251: test bad-a-mask yml_test.go:253: checkhost 2001:db8:ff0:100::2 foobar@a2.net spf.go:308: check "a2.net" 0 0 spf.go:330: dns record "v=spf1 ip6:1a0a:cccc::/29 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [bad-a-mask] yml_test.go:251: test exp-contains-mx yml_test.go:253: checkhost 1.2.3.4 foobar@expmx.net spf.go:308: check "expmx.net" 0 0 spf.go:330: dns record "v=spf1 exp=mx:mymx.com ~all" spf.go:430: exp= ignored spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [exp-contains-mx] yml_test.go:251: test exp-contains-ptr yml_test.go:253: checkhost 1.2.3.4 foobar@expptr.net spf.go:308: check "expptr.net" 0 0 spf.go:330: dns record "v=spf1 exp=ptr:lalala.com ~all" spf.go:430: exp= ignored spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [exp-contains-ptr] yml_test.go:162: suite: Error on PTR forward resolution yml_test.go:167: domain lalala.com yml_test.go:169: TIMEOUT yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 ptr:lalala.com ~all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [lalala.com] yml_test.go:251: test broken-ptr-forward yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 ptr:lalala.com ~all" spf.go:600: ptr evaluating "lalala.com" in [] spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [broken-ptr-forward] yml_test.go:162: suite: Permanent error on 'exists' resolution yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 exists:lalala.com ~all] yml_test.go:167: domain lalala.com yml_test.go:169: SERVFAIL yml_test.go:251: test exists-perm-error yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 exists:lalala.com ~all" spf.go:426: "exists:lalala.com" temperror, lookup : test servfail error yml_test.go:260: success: temperror, lookup : test servfail error [exists-perm-error] yml_test.go:162: suite: Resolve H macros correctly yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 exists:%{h}.com ~all] yml_test.go:167: domain holahola.com yml_test.go:169: A: [127.0.0.2] yml_test.go:251: test resolve-h-macros yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 exists:%{h}.com ~all" spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}.com" to "holahola.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{h}.com" pass, matched exists yml_test.go:260: success: pass, matched exists [resolve-h-macros] yml_test.go:162: suite: Only include the first 10 PTR results yml_test.go:167: domain dom06.com yml_test.go:169: A: [127.0.0.6] yml_test.go:167: domain dom08.com yml_test.go:169: A: [127.0.0.8] yml_test.go:167: domain dom09.com yml_test.go:169: A: [127.0.0.9] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [dom01.com] yml_test.go:169: PTR: [dom02.com] yml_test.go:169: PTR: [dom03.com] yml_test.go:169: PTR: [dom04.com] yml_test.go:169: PTR: [dom05.com] yml_test.go:169: PTR: [dom06.com] yml_test.go:169: PTR: [dom07.com] yml_test.go:169: PTR: [dom08.com] yml_test.go:169: PTR: [dom09.com] yml_test.go:169: PTR: [dom10.com] yml_test.go:169: PTR: [domain.net] yml_test.go:167: domain dom02.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain dom07.com yml_test.go:169: A: [127.0.0.7] yml_test.go:167: domain dom10.com yml_test.go:169: A: [127.0.0.10] yml_test.go:167: domain domain.net yml_test.go:169: A: [127.0.0.1] yml_test.go:169: SPF: [v=spf1 ptr ~all] yml_test.go:167: domain dom01.com yml_test.go:169: A: [127.0.0.1] yml_test.go:167: domain dom03.com yml_test.go:169: A: [127.0.0.3] yml_test.go:167: domain dom04.com yml_test.go:169: A: [127.0.0.4] yml_test.go:167: domain dom05.com yml_test.go:169: A: [127.0.0.5] yml_test.go:251: test only-first-10-ptr yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 ptr ~all" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "dom01.com." -> [{"127.0.0.1" ""}] spf.go:591: ptr forward resolution "dom02.com." -> [{"127.0.0.2" ""}] spf.go:591: ptr forward resolution "dom03.com." -> [{"127.0.0.3" ""}] spf.go:591: ptr forward resolution "dom04.com." -> [{"127.0.0.4" ""}] spf.go:591: ptr forward resolution "dom05.com." -> [{"127.0.0.5" ""}] spf.go:591: ptr forward resolution "dom06.com." -> [{"127.0.0.6" ""}] spf.go:591: ptr forward resolution "dom07.com." -> [{"127.0.0.7" ""}] spf.go:591: ptr forward resolution "dom08.com." -> [{"127.0.0.8" ""}] spf.go:591: ptr forward resolution "dom09.com." -> [{"127.0.0.9" ""}] spf.go:591: ptr forward resolution "dom10.com." -> [{"127.0.0.10" ""}] spf.go:600: ptr evaluating "domain.net" in ["dom01.com." "dom02.com." "dom03.com." "dom04.com." "dom05.com." "dom06.com." "dom07.com." "dom08.com." "dom09.com." "dom10.com."] spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [only-first-10-ptr] yml_test.go:162: suite: Resolution limits yml_test.go:167: domain okay.com yml_test.go:169: SPF: [v=spf1 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain bad.com yml_test.go:169: SPF: [v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain d00 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d11 yml_test.go:169: SPF: [v=spf1 include:d21 ~all] yml_test.go:167: domain d13 yml_test.go:169: SPF: [v=spf1 include:d23 ~all] yml_test.go:167: domain d14 yml_test.go:169: SPF: [v=spf1 include:d24 ~all] yml_test.go:167: domain d15 yml_test.go:169: SPF: [v=spf1 include:d25 ~all] yml_test.go:167: domain d21 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d12 yml_test.go:169: SPF: [v=spf1 include:d22 ~all] yml_test.go:167: domain d22 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d23 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d24 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d25 yml_test.go:169: SPF: [v=spf1 all] yml_test.go:251: test resolution-with-10-lookups yml_test.go:253: checkhost 1.2.3.4 foo@okay.com spf.go:308: check "okay.com" 0 0 spf.go:330: dns record "v=spf1 include:d11 include:d12 include:d13 include:d14 include:d15 -all" spf.go:308: check "d11" 1 0 spf.go:330: dns record "v=spf1 include:d21 ~all" spf.go:308: check "d21" 2 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d12" 3 0 spf.go:330: dns record "v=spf1 include:d22 ~all" spf.go:308: check "d22" 4 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d13" 5 0 spf.go:330: dns record "v=spf1 include:d23 ~all" spf.go:308: check "d23" 6 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d14" 7 0 spf.go:330: dns record "v=spf1 include:d24 ~all" spf.go:308: check "d24" 8 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d15" 9 0 spf.go:330: dns record "v=spf1 include:d25 ~all" spf.go:308: check "d25" 10 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:401: "include:d25" pass, matched all spf.go:401: "include:d15" pass, matched all yml_test.go:260: success: pass, matched all [resolution-with-10-lookups] yml_test.go:251: test resolution-with-11-lookups yml_test.go:253: checkhost 1.2.3.4 foo@bad.com spf.go:308: check "bad.com" 0 0 spf.go:330: dns record "v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all" spf.go:308: check "d00" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:308: check "d11" 2 0 spf.go:330: dns record "v=spf1 include:d21 ~all" spf.go:308: check "d21" 3 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d12" 4 0 spf.go:330: dns record "v=spf1 include:d22 ~all" spf.go:308: check "d22" 5 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d13" 6 0 spf.go:330: dns record "v=spf1 include:d23 ~all" spf.go:308: check "d23" 7 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d14" 8 0 spf.go:330: dns record "v=spf1 include:d24 ~all" spf.go:308: check "d24" 9 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d15" 10 0 spf.go:330: dns record "v=spf1 include:d25 ~all" spf.go:308: check "d25" 11 0 spf.go:330: dns record "v=spf1 all" spf.go:373: lookup limit reached spf.go:401: "include:d25" permerror, lookup limit reached spf.go:401: "include:d15" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [resolution-with-11-lookups] yml_test.go:162: suite: MX resolution limits yml_test.go:167: domain mx10 yml_test.go:169: SPF: [v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all] yml_test.go:167: domain mx11 yml_test.go:169: SPF: [v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all] yml_test.go:167: domain domain yml_test.go:169: MX: {1 blah1} yml_test.go:169: MX: {2 blah2} yml_test.go:169: MX: {3 blah3} yml_test.go:251: test mx-resolution-10-terms yml_test.go:253: checkhost 1.2.3.4 foo@mx10 spf.go:308: check "mx10" 0 0 spf.go:330: dns record "v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all" spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:397: all: pass yml_test.go:260: success: pass, matched all [mx-resolution-10-terms] yml_test.go:251: test mx-resolution-11-terms yml_test.go:253: checkhost 1.2.3.4 foo@mx11 spf.go:308: check "mx11" 0 0 spf.go:330: dns record "v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all" spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [mx-resolution-11-terms] yml_test.go:162: suite: NXDOMAIN tests yml_test.go:167: domain d01 yml_test.go:169: SPF: [v=spf1 mx ip4:1.2.3.4 -all] yml_test.go:169: MX: {10 doesnotexist} yml_test.go:169: MX: {20 doesnotexist} yml_test.go:167: domain d02 yml_test.go:169: SPF: [v=spf1 include:doesnotexist all] yml_test.go:167: domain d03 yml_test.go:169: SPF: [v=spf1 redirect=doesnotexist] yml_test.go:167: domain sender yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain d00 yml_test.go:169: SPF: [v=spf1 mx -all] yml_test.go:169: MX: {10 doesnotexist} yml_test.go:169: MX: {20 sender} yml_test.go:251: test one-mx-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d00 spf.go:308: check "d00" 0 0 spf.go:330: dns record "v=spf1 mx -all" spf.go:780: masks on "mx", "d00": "d00" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [one-mx-not-found] yml_test.go:251: test all-mx-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d01 spf.go:308: check "d01" 0 0 spf.go:330: dns record "v=spf1 mx ip4:1.2.3.4 -all" spf.go:780: masks on "mx", "d01": "d01" [, ] spf.go:828: mx ips: [] spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [all-mx-not-found] yml_test.go:251: test domain-not-found yml_test.go:253: checkhost 1.2.3.4 foo@doesnotexist spf.go:308: check "doesnotexist" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-not-found] yml_test.go:251: test include-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d02 spf.go:308: check "d02" 0 0 spf.go:330: dns record "v=spf1 include:doesnotexist all" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:doesnotexist" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-not-found] yml_test.go:251: test redirect-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d03 spf.go:308: check "d03" 0 0 spf.go:330: dns record "v=spf1 redirect=doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=doesnotexist": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-not-found] --- PASS: TestOurs (0.02s) === RUN TestRFC4408 yml_test.go:162: suite: Initial processing yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed3.example.com yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain nothosed.example.com yml_test.go:169: SPF: [v=spf1 a:example.net -all] yml_test.go:169: SPF: [–] yml_test.go:167: domain example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain a.example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] yml_test.go:167: domain hosed2.example.com yml_test.go:169: SPF: [v=spf1 €a:example.net -all] yml_test.go:167: domain fine.example.com yml_test.go:169: TXT: [v=spf1 a -all] yml_test.go:251: test non-ascii-result yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com spf.go:308: check "hosed3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net \u0096all" spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [non-ascii-result] yml_test.go:251: test two-spaces yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com spf.go:308: check "fine.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-spaces] yml_test.go:251: test toolonglabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [toolonglabel] yml_test.go:251: test longlabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [longlabel] yml_test.go:251: test emptylabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com spf.go:308: check "A...example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [emptylabel] yml_test.go:251: test helo-not-fqdn yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] yml_test.go:251: test nolocalpart yml_test.go:253: checkhost 1.2.3.4 @example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp.example.net" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test domain-literal yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-literal] yml_test.go:251: test non-ascii-non-spf yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com spf.go:308: check "nothosed.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net -all" spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-non-spf] yml_test.go:251: test helo-domain-literal yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-domain-literal] yml_test.go:162: suite: Record lookup yml_test.go:167: domain both.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain txtonly.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain spfonly.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:167: domain spftimeout.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TIMEOUT yml_test.go:167: domain txttimeout.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain nospftxttimeout.example.net yml_test.go:169: SPF: [v=spf3 !a:yahoo.com -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT yml_test.go:251: test alltimeout yml_test.go:253: checkhost 1.2.3.4 foo@alltimeout.example.net spf.go:308: check "alltimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [alltimeout] yml_test.go:251: test both yml_test.go:253: checkhost 1.2.3.4 foo@both.example.net spf.go:308: check "both.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [both] yml_test.go:251: test txtonly yml_test.go:253: checkhost 1.2.3.4 foo@txtonly.example.net spf.go:308: check "txtonly.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [txtonly] yml_test.go:251: test spfonly yml_test.go:253: checkhost 1.2.3.4 foo@spfonly.example.net spf.go:308: check "spfonly.example.net" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [spfonly] yml_test.go:251: test spftimeout yml_test.go:253: checkhost 1.2.3.4 foo@spftimeout.example.net spf.go:308: check "spftimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [spftimeout] yml_test.go:251: test txttimeout yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net spf.go:308: check "txttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:251: test nospftxttimeout yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net spf.go:308: check "nospftxttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:162: suite: Selecting records yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain example6.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [V=sPf1 +all] yml_test.go:167: domain example8.com yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example9.com yml_test.go:169: SPF: [v=SpF1 ~all] yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf10] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test spfoverride yml_test.go:253: checkhost 1.2.3.4 foo@example4.com spf.go:308: check "example4.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [spfoverride] yml_test.go:251: test multitxt2 yml_test.go:253: checkhost 1.2.3.4 foo@example6.com spf.go:308: check "example6.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test multispf1 yml_test.go:253: checkhost 1.2.3.4 foo@example7.com spf.go:308: check "example7.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multispf1] yml_test.go:251: test multispf2 yml_test.go:253: checkhost 1.2.3.4 foo@example8.com spf.go:308: check "example8.com" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [multispf2] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:251: test multitxt1 yml_test.go:253: checkhost 1.2.3.4 foo@example5.com spf.go:308: check "example5.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] yml_test.go:251: test case-insensitive yml_test.go:253: checkhost 1.2.3.4 foo@example9.com spf.go:308: check "example9.com" 0 0 spf.go:330: dns record "v=SpF1 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:162: suite: Record evaluation yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] yml_test.go:167: domain t8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] yml_test.go:167: domain t9.example.com yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] yml_test.go:167: domain t10.example.com yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] yml_test.go:167: domain t11.example.com yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] yml_test.go:167: domain t2.example.com yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] yml_test.go:167: domain t7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:251: test default-result yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com spf.go:308: check "t7.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [default-result] yml_test.go:251: test invalid-domain-long yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com spf.go:308: check "t11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long] yml_test.go:251: test invalid-domain-long-via-macro yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com spf.go:308: check "t12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H}.bar -all" spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:251: test modifier-charset-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com spf.go:308: check "t3.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] yml_test.go:251: test modifier-charset-bad2 yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com spf.go:308: check "t4.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] yml_test.go:251: test invalid-domain-empty-label yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com spf.go:308: check "t10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mail.example...com -all" spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] yml_test.go:251: test redirect-after-mechanisms1 yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com spf.go:308: check "t5.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:162: suite: ALL mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all.] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all/8] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ?all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 all -all] yml_test.go:251: test all-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all/8" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-cidr] yml_test.go:251: test all-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [all-neutral] yml_test.go:251: test all-double yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 all -all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [all-double] yml_test.go:251: test all-dot yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -all." spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-dot] yml_test.go:251: test all-arg yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:162: suite: PTR mechanism syntax yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [CAFE:BABE::1] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr:] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ptr/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e3.example.com] yml_test.go:169: PTR: [e4.example.com] yml_test.go:169: PTR: [mail.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [e3.example.com] yml_test.go:251: test ptr-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:" spf.go:421: "ptr:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [ptr-empty-domain] yml_test.go:251: test ptr-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr/0 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [ptr-cidr] yml_test.go:251: test ptr-match-target yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.com -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr:example.com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-target] yml_test.go:251: test ptr-match-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] yml_test.go:251: test ptr-nomatch-invalid yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:251: test ptr-match-ip6 yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:162: suite: A mechanism syntax yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain e5a.example.com yml_test.go:169: SPF: [v=spf1 a:museum] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a//129 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:example.com:8080] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 a:] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 a/33 -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] yml_test.go:167: domain foo.example.xn--zckzah yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24//64 -all] yml_test.go:167: domain e8a.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24 -all] yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a//64 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 a:example.-com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e5b.example.com yml_test.go:169: SPF: [v=spf1 a:museum.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a//33 -all] yml_test.go:167: domain e8e.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24/64 -all] yml_test.go:167: domain foo.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] yml_test.go:251: test a-dash-in-toplabel yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com spf.go:308: check "e14.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:foo.example.xn--zckzah" pass, matched a yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] yml_test.go:251: test a-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a//129 -all" spf.go:747: masks on "a//129", "e7.example.com": "" [, ] spf.go:406: "a//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:251: test a-dual-cidr-ip6-match yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip1] yml_test.go:251: test a-dual-cidr-ip4-default yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com spf.go:308: check "e8b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//64 -all" spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] yml_test.go:251: test a-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip2] yml_test.go:251: test a-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] yml_test.go:251: test a-dual-cidr-ip4-match yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] yml_test.go:251: test a-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a//33 -all" spf.go:747: masks on "a//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] yml_test.go:251: test a-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-nxdomain] yml_test.go:251: test a-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] yml_test.go:251: test a-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/33 -all" spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] spf.go:406: "a/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] yml_test.go:251: test a-dual-cidr-ip4-err yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com spf.go:308: check "e8e.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24/64 -all" spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] spf.go:406: "a/24/64" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:406: "a/0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr4-0] yml_test.go:251: test a-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] yml_test.go:251: test a-dual-cidr-ip6-default yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com spf.go:308: check "e8a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24 -all" spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] yml_test.go:251: test a-ip6-dualstack yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com spf.go:308: check "ipv6.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] spf.go:768: a match: 1234::1, 1234::1, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [a-ip6-dualstack] yml_test.go:162: suite: Include mechanism semantics and syntax yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain erehwon.example.com yml_test.go:169: TXT: [v=spfl am not an SPF record] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain ip5.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] yml_test.go:167: domain ip7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 include: -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e6.example.com -all" spf.go:308: check "e6.example.com" 1 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror spf.go:401: "include:e6.example.com" permerror, unknown field yml_test.go:260: success: permerror, unknown field [include-permerror] yml_test.go:251: test include-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [include-syntax-error] yml_test.go:251: test include-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" spf.go:874: macro contains / spf.go:401: "include:ip5.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [include-cidr] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:erehwon.example.com -all" spf.go:308: check "erehwon.example.com" 1 0 spf.go:330: dns record "" spf.go:401: "include:erehwon.example.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-none] yml_test.go:251: test include-fail yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" spf.go:308: check "ip5.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" spf.go:397: all: fail spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [include-fail] yml_test.go:251: test include-softfail yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip6.example.com all" spf.go:308: check "ip6.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.6 ~all" spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] yml_test.go:251: test include-temperror yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip8.example.com -all" spf.go:308: check "ip8.example.com" 1 0 spf.go:318: dns temp error: lookup : test timeout error spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 include: -all" spf.go:308: check "" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] yml_test.go:251: test include-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip7.example.com -all" spf.go:308: check "ip7.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" spf.go:397: all: neutral spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:162: suite: MX mechanism syntax yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:167: domain foo.example.com yml_test.go:169: MX: {0 foo1.example.com} yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: MX: {0 e2.example.com} yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:167: domain foo1.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: MX: {0 foo:bar/baz.example.com} yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 mx//129 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:169: MX: {0 e1.example.com} yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: MX: {0 e2a.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: MX: {0 e2b.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 mx//33 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 mx:abc.123] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 mx/33 -all] yml_test.go:251: test mx-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/33 -all" spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] spf.go:411: "mx/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] yml_test.go:251: test mx-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//129 -all" spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] spf.go:411: "mx//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] yml_test.go:251: test mx-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] yml_test.go:251: test mx-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:831: mx match: 1234::1, 1234::1, [, /0] spf.go:411: "mx//0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] yml_test.go:251: test mx-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-implicit] yml_test.go:251: test mx-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//33 -all" spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6] yml_test.go:251: test mx-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip1] yml_test.go:251: test mx-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:411: "mx/0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:828: mx ips: [1.1.1.1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-nxdomain] yml_test.go:251: test mx-empty yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-empty] yml_test.go:251: test mx-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip2] yml_test.go:251: test mx-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:251: test mx-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:828: mx ips: [] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-nxdomain] yml_test.go:251: test mx-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] yml_test.go:162: suite: EXISTS mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exists:] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 exists] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] yml_test.go:251: test exists-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:" spf.go:426: "exists:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 exists" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [exists-implicit] yml_test.go:251: test exists-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com/24" spf.go:874: macro contains / spf.go:426: "exists:mail.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [exists-cidr] yml_test.go:251: test exists-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip4] yml_test.go:251: test exists-ip6 yml_test.go:253: checkhost cafe:babe::3 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip6] yml_test.go:251: test exists-ip6only yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-ip6only] yml_test.go:251: test exists-dnserr yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:err.example.com -all" spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] yml_test.go:162: suite: IP4 mechanism syntax yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip4] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test cidr4-33 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr4-33] yml_test.go:251: test bad-ip4-port yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] yml_test.go:251: test bad-ip4-short yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3" spf.go:416: "ip4:1.2.3" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] yml_test.go:251: test cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 spf.go:416: "ip4:1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-0] yml_test.go:251: test bare-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [bare-ip4] yml_test.go:251: test ip4-dual-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] yml_test.go:251: test cidr4-32 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 spf.go:416: "ip4:1.2.3.4/32" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-32] yml_test.go:162: suite: IP6 mechanism syntax yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all ip6] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/0] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/129] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1//33] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip6:CAFE:BABE:8000::/33] yml_test.go:251: test cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-0-ip4] yml_test.go:251: test cidr6-0 yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-0] yml_test.go:251: test cidr6-bad yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-bad] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-33-ip4] yml_test.go:251: test ip6-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] yml_test.go:251: test cidr6-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-129 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-129] yml_test.go:251: test cidr6-33 yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: spf.go:416: "ip6:CAFE:BABE:8000::/33" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-33] yml_test.go:162: suite: Semantics of exp and other modifiers yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] yml_test.go:167: domain e13msg.example.com yml_test.go:169: TXT: [The %{x}-files.] yml_test.go:167: domain e16.example.com yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e21msg.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] yml_test.go:167: domain e20.example.com yml_test.go:169: SPF: [v=spf1 default=+] yml_test.go:167: domain e22.example.com yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] yml_test.go:167: domain tworecs.example.com yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] yml_test.go:167: domain e11msg.example.com yml_test.go:169: TXT: [Answer a fool according to his folly.] yml_test.go:169: TXT: [Do not answer a fool according to his folly.] yml_test.go:167: domain e15.example.com yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] yml_test.go:167: domain exp2.example.com yml_test.go:169: TXT: [See me.] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 1up=foo] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 =all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] yml_test.go:167: domain e21.example.com yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] yml_test.go:167: domain badexp.example.com yml_test.go:169: TXT: [Explanation] yml_test.go:167: domain twoexp.example.com yml_test.go:169: TXT: [one] yml_test.go:169: TXT: [two] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 -all foo=%abc] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exp= -all] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] yml_test.go:167: domain exp1.example.com yml_test.go:169: TXT: [No-see-um] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] yml_test.go:167: domain exp4.example.com yml_test.go:169: TXT: [%{l} in implementation] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] yml_test.go:167: domain e17.example.com yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] yml_test.go:167: domain e19.example.com yml_test.go:169: SPF: [v=spf1 default=pass] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] yml_test.go:251: test invalid-modifier yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 1up=foo" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [invalid-modifier] yml_test.go:251: test dorky-sentinel yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [dorky-sentinel] yml_test.go:251: test exp-multiple-txt yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-multiple-txt] yml_test.go:251: test explanation-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com spf.go:308: check "e13.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:251: test two-exp-records yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com spf.go:308: check "tworecs.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:251: test redirect-cancels-prior-exp yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 1 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] yml_test.go:251: test redirect-none yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" spf.go:308: check "erehwon.example.com" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test redirect-cancels-exp yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" spf.go:430: exp= ignored spf.go:308: check "e2.example.com" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=e2.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-exp] yml_test.go:251: test include-ignores-exp yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 2 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-ignores-exp] yml_test.go:251: test empty-modifier-name yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 =all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [empty-modifier-name] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] yml_test.go:251: test non-ascii-exp yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com spf.go:308: check "nonascii.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-exp] yml_test.go:251: test exp-no-txt yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com spf.go:308: check "e22.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-no-txt] yml_test.go:251: test exp-dns-error yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com spf.go:308: check "e21.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-dns-error] yml_test.go:162: suite: Macro expansion rules yml_test.go:167: domain msgbas2x.cos.example.com yml_test.go:169: A: [192.168.218.40] yml_test.go:167: domain example.com yml_test.go:169: A: [192.168.90.76] yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] yml_test.go:167: domain somewhat.long.exp.example.com yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] yml_test.go:167: domain mx.example.com yml_test.go:169: A: [192.168.218.41] yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] yml_test.go:167: domain e6msg.example.com yml_test.go:169: TXT: [connect from %{p}] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com yml_test.go:169: A: [192.168.218.42] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] yml_test.go:167: domain exp.example.com yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] yml_test.go:167: domain 40.218.168.192.example.com yml_test.go:169: TXT: [Connections from %{c} not authorized.] yml_test.go:167: 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 yml_test.go:169: TXT: [Congratulations! That was tricky.] yml_test.go:167: domain 40.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain msg.example.com yml_test.go:169: TXT: [This is a test.] yml_test.go:167: domain e1a.example.com yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] yml_test.go:167: domain 42.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:169: PTR: [mx.e7.example.com] yml_test.go:167: domain _spfh.example.com yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] yml_test.go:167: domain e4msg.example.com yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.example.com.ok.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain msg8.example.com yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] yml_test.go:167: domain example.com.d.spf.example.com yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] yml_test.go:167: domain e1t.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] yml_test.go:167: domain a.spf.example.com yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] yml_test.go:167: domain macro%percent space%20url-space.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com.should.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:%{H} -all] yml_test.go:167: domain o.spf.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] yml_test.go:251: test macro-reverse-split-on-dash yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] yml_test.go:251: test invalid-trailing-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com spf.go:308: check "e1t.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] yml_test.go:251: test exp-txt-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-txt-macro-char] yml_test.go:251: test v-macro-ip4 yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip4] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] yml_test.go:251: test p-macro-ip4-valid yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] yml_test.go:251: test invalid-hello-macro yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-hello-macro] yml_test.go:251: test trailing-dot-domain yml_test.go:253: checkhost 192.168.218.40 test@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." spf.go:308: check "example.com.d.spf.example.com." 1 0 spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" spf.go:308: check "a.spf.example.com" 2 0 spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" spf.go:308: check "o.spf.example.com." 3 0 spf.go:330: dns record "v=spf1 ip4:192.168.218.40" spf.go:536: ip match: 192.168.218.40 spf.go:416: "ip4:192.168.218.40" pass, matched ip spf.go:401: "include:o.spf.example.com." pass, matched ip spf.go:434: "redirect=a.spf.example.com": pass, matched ip spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip yml_test.go:260: success: pass, matched ip [trailing-dot-domain] yml_test.go:251: test invalid-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] yml_test.go:251: test invalid-embedded-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com spf.go:308: check "e1e.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] yml_test.go:251: test macro-mania-in-domain yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com spf.go:308: check "e1a.example.com" 0 0 spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a yml_test.go:260: success: pass, matched a [macro-mania-in-domain] yml_test.go:251: test undef-macro yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] spf.go:923: macro "a": [] spf.go:406: "a:%{a}.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test hello-domain-literal yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [hello-domain-literal] yml_test.go:251: test macro-multiple-delimiters yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] yml_test.go:251: test domain-name-truncation yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com spf.go:308: check "somewhat.long.exp.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [domain-name-truncation] yml_test.go:251: test upper-macro yml_test.go:253: checkhost 192.168.218.42 jack&jill=up@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [upper-macro] yml_test.go:251: test require-valid-helo yml_test.go:253: checkhost 1.2.3.4 test@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "_spfh.%{d2}" to "_spfh.example.com" spf.go:308: check "_spfh.example.com" 1 0 spf.go:330: dns record "v=spf1 -a:%{h} +all" spf.go:747: masks on "a:%{h}", "_spfh.example.com": "%{h}" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}" to "OEMCOMPUTER" spf.go:514: void lookup: nxdomain spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] yml_test.go:251: test trailing-dot-exp yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com spf.go:308: check "exp.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-dot-exp] yml_test.go:251: test v-macro-ip6 yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip6] yml_test.go:251: test p-macro-ip6-novalid yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] yml_test.go:251: test p-macro-ip6-valid yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:162: suite: Processing limits yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example.com} yml_test.go:169: MX: {1 mail.example.com} yml_test.go:169: MX: {2 mail.example.com} yml_test.go:169: MX: {3 mail.example.com} yml_test.go:169: MX: {4 mail.example.com} yml_test.go:169: MX: {5 mail.example.com} yml_test.go:169: MX: {6 mail.example.com} yml_test.go:169: MX: {7 mail.example.com} yml_test.go:169: MX: {8 mail.example.com} yml_test.go:169: MX: {9 mail.example.com} yml_test.go:169: MX: {10 e4.example.com} yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.21] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [1.2.3.1] yml_test.go:169: A: [1.2.3.2] yml_test.go:169: A: [1.2.3.3] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: A: [1.2.3.5] yml_test.go:169: A: [1.2.3.6] yml_test.go:169: A: [1.2.3.7] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: A: [1.2.3.9] yml_test.go:169: A: [1.2.3.10] yml_test.go:169: A: [1.2.3.11] yml_test.go:169: A: [1.2.3.12] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com] yml_test.go:169: A: [1.2.3.7] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:e2.example.com] yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain 5.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e1.example.com.] yml_test.go:169: PTR: [e2.example.com.] yml_test.go:169: PTR: [e3.example.com.] yml_test.go:169: PTR: [e4.example.com.] yml_test.go:169: PTR: [example.com.] yml_test.go:169: PTR: [e6.example.com.] yml_test.go:169: PTR: [e7.example.com.] yml_test.go:169: PTR: [e8.example.com.] yml_test.go:169: PTR: [e9.example.com.] yml_test.go:169: PTR: [e10.example.com.] yml_test.go:169: PTR: [e5.example.com.] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.20] yml_test.go:167: domain inc.example.com yml_test.go:169: SPF: [v=spf1 a a a a a a a a] yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] yml_test.go:251: test include-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [include-at-limit] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 2 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 3 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 4 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 5 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 6 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 7 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 8 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 9 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 10 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 11 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:373: lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 2 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 3 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 4 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 5 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 6 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 7 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 8 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 9 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 10 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 11 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:373: lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-loop] yml_test.go:251: test mx-limit yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:411: "mx" permerror, too many MX records yml_test.go:260: success: permerror, too many MX records [mx-limit] yml_test.go:251: test ptr-limit yml_test.go:253: checkhost 1.2.3.5 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "e1.example.com." -> [{"1.2.3.6" ""}] spf.go:591: ptr forward resolution "e2.example.com." -> [{"1.2.3.7" ""}] spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e4.example.com." -> [{"1.2.3.5" ""}] spf.go:591: ptr forward resolution "e6.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e7.example.com." -> [{"1.2.3.20" ""}] spf.go:591: ptr forward resolution "e8.example.com." -> [{"1.2.3.4" ""}] spf.go:591: ptr forward resolution "e9.example.com." -> [{"1.2.3.21" ""}] spf.go:591: ptr forward resolution "e10.example.com." -> [{"1.2.3.1" ""} {"1.2.3.2" ""} {"1.2.3.3" ""} {"1.2.3.4" ""} {"1.2.3.5" ""} {"1.2.3.6" ""} {"1.2.3.7" ""} {"1.2.3.8" ""} {"1.2.3.9" ""} {"1.2.3.10" ""} {"1.2.3.11" ""} {"1.2.3.12" ""}] spf.go:600: ptr evaluating "e5.example.com" in ["e1.example.com." "e2.example.com." "e3.example.com." "e4.example.com." "e6.example.com." "e7.example.com." "e8.example.com." "e9.example.com." "e10.example.com."] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-limit] yml_test.go:251: test false-a-limit yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [false-a-limit] yml_test.go:251: test mech-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [mech-at-limit] yml_test.go:251: test mech-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] yml_test.go:251: test include-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:308: check "inc.example.com" 2 0 spf.go:330: dns record "v=spf1 a a a a a a a a" spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:444: fallback to neutral spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] --- PASS: TestRFC4408 (0.03s) === RUN TestRFC7208 yml_test.go:162: suite: Initial processing yml_test.go:167: domain badip.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.0.2.5 include:spf.protection.outlook.com ~all] yml_test.go:167: domain example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain a.example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] yml_test.go:167: domain hosed2.example.com yml_test.go:169: SPF: [v=spf1 €a:example.net -all] yml_test.go:167: domain nothosed.example.com yml_test.go:169: SPF: [v=spf1 a:example.net -all] yml_test.go:169: SPF: [–] yml_test.go:167: domain ctrl.example.com yml_test.go:169: SPF: [v=spf1 a:ctrl.example.com ptr -all] yml_test.go:169: A: [192.0.2.3] yml_test.go:167: domain fine.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] yml_test.go:167: domain hosed3.example.com yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain trail.example.com yml_test.go:169: SPF: [v=spf1 a -all ] yml_test.go:167: domain null.example.com yml_test.go:169: SPF: [v=spf1 ip4: 192.0.2.5 -all] yml_test.go:169: yml_test.go:251: test helo-not-fqdn yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] yml_test.go:251: test two-spaces yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com spf.go:308: check "fine.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-spaces] yml_test.go:251: test toolonglabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [toolonglabel] yml_test.go:251: test domain-literal yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-literal] yml_test.go:251: test non-ascii-non-spf yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com spf.go:308: check "nothosed.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net -all" spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-non-spf] yml_test.go:251: test null-text yml_test.go:253: checkhost 192.0.2.5 silly@null.example.com spf.go:308: check "null.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.5 -all" spf.go:536: ip match: 192.0.2.5 spf.go:416: "ip4:192.0.2.5" pass, matched ip yml_test.go:260: success: pass, matched ip [null-text] yml_test.go:251: test badip4 yml_test.go:253: checkhost 192.0.2.5 oops@badip.example.com spf.go:308: check "badip.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.5\n include:spf.protection.outlook.com ~all" spf.go:416: "ip4:192.0.2.5\n" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip4] yml_test.go:251: test nolocalpart yml_test.go:253: checkhost 1.2.3.4 @example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp.example.net" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test non-ascii-result yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com spf.go:308: check "hosed3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net \u0096all" spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [non-ascii-result] yml_test.go:251: test trailing-space yml_test.go:253: checkhost 192.0.2.5 silly@trail.example.com spf.go:308: check "trail.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all " spf.go:747: masks on "a", "trail.example.com": "trail.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-space] yml_test.go:251: test longlabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [longlabel] yml_test.go:251: test emptylabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com spf.go:308: check "A...example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [emptylabel] yml_test.go:251: test helo-domain-literal yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-domain-literal] yml_test.go:162: suite: Record lookup yml_test.go:167: domain both.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain txtonly.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain spfonly.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:167: domain spftimeout.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TIMEOUT yml_test.go:167: domain txttimeout.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain nospftxttimeout.example.net yml_test.go:169: SPF: [v=spf3 !a:yahoo.com -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT yml_test.go:251: test txttimeout yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net spf.go:308: check "txttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:251: test nospftxttimeout yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net spf.go:308: check "nospftxttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:251: test alltimeout yml_test.go:253: checkhost 1.2.3.4 foo@alltimeout.example.net spf.go:308: check "alltimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [alltimeout] yml_test.go:251: test both yml_test.go:253: checkhost 1.2.3.4 foo@both.example.net spf.go:308: check "both.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [both] yml_test.go:251: test txtonly yml_test.go:253: checkhost 1.2.3.4 foo@txtonly.example.net spf.go:308: check "txtonly.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [txtonly] yml_test.go:251: test spfonly yml_test.go:253: checkhost 1.2.3.4 foo@spfonly.example.net spf.go:308: check "spfonly.example.net" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [spfonly] yml_test.go:162: suite: Selecting records yml_test.go:167: domain example9.com yml_test.go:169: SPF: [v=SpF1 ~all] yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example6.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [V=sPf1 +all] yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain example8.com yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf10] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:251: test multitxt1 yml_test.go:253: checkhost 1.2.3.4 foo@example5.com spf.go:308: check "example5.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test multispf2 yml_test.go:253: checkhost 1.2.3.4 foo@example8.com spf.go:308: check "example8.com" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [multispf2] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] yml_test.go:251: test case-insensitive yml_test.go:253: checkhost 1.2.3.4 foo@example9.com spf.go:308: check "example9.com" 0 0 spf.go:330: dns record "v=SpF1 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test spfoverride yml_test.go:253: checkhost 1.2.3.4 foo@example4.com spf.go:308: check "example4.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [spfoverride] yml_test.go:251: test multitxt2 yml_test.go:253: checkhost 1.2.3.4 foo@example6.com spf.go:308: check "example6.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test multispf1 yml_test.go:253: checkhost 1.2.3.4 foo@example7.com spf.go:308: check "example7.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multispf1] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:162: suite: Record evaluation yml_test.go:167: domain t9.example.com yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t2.example.com yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] yml_test.go:167: domain t10.example.com yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] yml_test.go:167: domain t11.example.com yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] yml_test.go:167: domain t6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] yml_test.go:167: domain t7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:251: test modifier-charset-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com spf.go:308: check "t3.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] yml_test.go:251: test default-result yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com spf.go:308: check "t7.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [default-result] yml_test.go:251: test invalid-domain-empty-label yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com spf.go:308: check "t10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mail.example...com -all" spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] yml_test.go:251: test invalid-domain-long yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com spf.go:308: check "t11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long] yml_test.go:251: test invalid-domain-long-via-macro yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com spf.go:308: check "t12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H}.bar -all" spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:251: test modifier-charset-bad2 yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com spf.go:308: check "t4.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] yml_test.go:251: test redirect-after-mechanisms1 yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com spf.go:308: check "t5.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:162: suite: ALL mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all.] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all/8] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ?all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 all -all] yml_test.go:251: test all-dot yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -all." spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-dot] yml_test.go:251: test all-arg yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:251: test all-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all/8" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-cidr] yml_test.go:251: test all-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [all-neutral] yml_test.go:251: test all-double yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 all -all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [all-double] yml_test.go:162: suite: PTR mechanism syntax yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ptr/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] yml_test.go:167: 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 yml_test.go:169: PTR: [e3.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [mail.Example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [CAFE:BABE::1] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.Com -all] yml_test.go:167: domain loop.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:167: domain loop4.example.com yml_test.go:169: CNAME: CNAME.example.com. yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [2001:db8::1] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e3.example.com] yml_test.go:169: PTR: [e4.example.com] yml_test.go:169: PTR: [mail.example.com] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr:] yml_test.go:167: domain 4.2.0.192.in-addr.arpa yml_test.go:169: PTR: [loop4.example.com.] yml_test.go:167: domain cname.example.com yml_test.go:169: CNAMELOOP yml_test.go:251: test ptr-match-ip6 yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:251: test ptr-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:" spf.go:421: "ptr:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [ptr-empty-domain] yml_test.go:251: test ptr-case-change yml_test.go:253: checkhost 2001:db8::1 bar@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.Com -all" spf.go:591: ptr forward resolution "mail.Example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "example.Com" in ["mail.example.com."] spf.go:604: ptr match: "mail.example.com." spf.go:421: "ptr:example.Com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-case-change] yml_test.go:251: test ptr-cname-loop yml_test.go:253: checkhost 192.0.2.4 postmaster@loop.example.com spf.go:308: check "loop.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:600: ptr evaluating "loop.example.com" in [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-cname-loop] yml_test.go:251: test ptr-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr/0 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [ptr-cidr] yml_test.go:251: test ptr-match-target yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.com -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr:example.com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-target] yml_test.go:251: test ptr-match-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] yml_test.go:251: test ptr-nomatch-invalid yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:162: suite: A mechanism syntax yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 a/33 -all] yml_test.go:167: domain e8a.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24 -all] yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a//64 -all] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 a:example.-com] yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a//33 -all] yml_test.go:167: domain e8e.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24/64 -all] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] yml_test.go:167: domain foo.example.xn--zckzah yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e5a.example.com yml_test.go:169: SPF: [v=spf1 a:museum] yml_test.go:167: domain e5b.example.com yml_test.go:169: SPF: [v=spf1 a:museum.] yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24//64 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:example.com:8080] yml_test.go:167: domain foo.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a//129 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 a:] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:251: test a-dual-cidr-ip4-match yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] yml_test.go:251: test a-dual-cidr-ip6-match yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] yml_test.go:251: test a-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] yml_test.go:251: test a-dash-in-toplabel yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com spf.go:308: check "e14.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:foo.example.xn--zckzah" pass, matched a yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] yml_test.go:251: test a-dual-cidr-ip4-err yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com spf.go:308: check "e8e.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24/64 -all" spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] spf.go:406: "a/24/64" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] yml_test.go:251: test a-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a//129 -all" spf.go:747: masks on "a//129", "e7.example.com": "" [, ] spf.go:406: "a//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:251: test a-ip6-dualstack yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com spf.go:308: check "ipv6.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] spf.go:768: a match: 1234::1, 1234::1, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [a-ip6-dualstack] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a//33 -all" spf.go:747: masks on "a//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] yml_test.go:251: test a-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/33 -all" spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] spf.go:406: "a/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] yml_test.go:251: test a-dual-cidr-ip4-default yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com spf.go:308: check "e8b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//64 -all" spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] yml_test.go:251: test a-dual-cidr-ip6-default yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com spf.go:308: check "e8a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24 -all" spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] yml_test.go:251: test a-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:406: "a/0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr4-0] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip1] yml_test.go:251: test a-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip2] yml_test.go:251: test a-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-nxdomain] yml_test.go:251: test a-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] yml_test.go:251: test a-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] yml_test.go:162: suite: Include mechanism semantics and syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] yml_test.go:167: domain ip7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] yml_test.go:167: domain erehwon.example.com yml_test.go:169: TXT: [v=spfl am not an SPF record] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 include: -all] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain ip5.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] yml_test.go:251: test include-fail yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" spf.go:308: check "ip5.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" spf.go:397: all: fail spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [include-fail] yml_test.go:251: test include-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip7.example.com -all" spf.go:308: check "ip7.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" spf.go:397: all: neutral spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e6.example.com -all" spf.go:308: check "e6.example.com" 1 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror spf.go:401: "include:e6.example.com" permerror, unknown field yml_test.go:260: success: permerror, unknown field [include-permerror] yml_test.go:251: test include-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [include-syntax-error] yml_test.go:251: test include-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 include: -all" spf.go:308: check "" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] yml_test.go:251: test include-softfail yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip6.example.com all" spf.go:308: check "ip6.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.6 ~all" spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] yml_test.go:251: test include-temperror yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip8.example.com -all" spf.go:308: check "ip8.example.com" 1 0 spf.go:318: dns temp error: lookup : test timeout error spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" spf.go:874: macro contains / spf.go:401: "include:ip5.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [include-cidr] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:erehwon.example.com -all" spf.go:308: check "erehwon.example.com" 1 0 spf.go:330: dns record "" spf.go:401: "include:erehwon.example.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-none] yml_test.go:162: suite: MX mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: MX: {0 e2.example.com} yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 mx:abc.123] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 mx//33 -all] yml_test.go:167: domain foo1.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 mx//129 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:169: MX: {0 e1.example.com} yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: MX: {0 e2a.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 mx/33 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] yml_test.go:167: domain foo.example.com yml_test.go:169: MX: {0 foo1.example.com} yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: MX: {0 foo:bar/baz.example.com} yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: MX: {0 e2b.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] yml_test.go:251: test mx-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//33 -all" spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6] yml_test.go:251: test mx-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] yml_test.go:251: test mx-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:831: mx match: 1234::1, 1234::1, [, /0] spf.go:411: "mx//0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] yml_test.go:251: test mx-empty yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-empty] yml_test.go:251: test mx-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:828: mx ips: [] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-nxdomain] yml_test.go:251: test mx-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:411: "mx/0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/33 -all" spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] spf.go:411: "mx/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] yml_test.go:251: test mx-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip1] yml_test.go:251: test mx-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip2] yml_test.go:251: test mx-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:251: test mx-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//129 -all" spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] spf.go:411: "mx//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] yml_test.go:251: test mx-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:828: mx ips: [1.1.1.1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-nxdomain] yml_test.go:251: test mx-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-implicit] yml_test.go:162: suite: EXISTS mechanism syntax yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 exists] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exists:] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 exists" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [exists-implicit] yml_test.go:251: test exists-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com/24" spf.go:874: macro contains / spf.go:426: "exists:mail.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [exists-cidr] yml_test.go:251: test exists-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip4] yml_test.go:251: test exists-ip6 yml_test.go:253: checkhost cafe:babe::3 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip6] yml_test.go:251: test exists-ip6only yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-ip6only] yml_test.go:251: test exists-dnserr yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:err.example.com -all" spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] yml_test.go:251: test exists-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:" spf.go:426: "exists:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:162: suite: IP4 mechanism syntax yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip4] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] yml_test.go:251: test bare-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [bare-ip4] yml_test.go:251: test bad-ip4-port yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] yml_test.go:251: test bad-ip4-short yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3" spf.go:416: "ip4:1.2.3" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] yml_test.go:251: test cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 spf.go:416: "ip4:1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-0] yml_test.go:251: test cidr4-32 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 spf.go:416: "ip4:1.2.3.4/32" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-32] yml_test.go:251: test cidr4-33 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr4-33] yml_test.go:251: test ip4-dual-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:162: suite: IP6 mechanism syntax yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all ip6] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/0] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/129] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1//33] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip6:Cafe:Babe:8000::/33] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-0-ip4] yml_test.go:251: test cidr6-0 yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-0] yml_test.go:251: test cidr6-bad yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-bad] yml_test.go:251: test ip6-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] yml_test.go:251: test cidr6-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-129 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-129] yml_test.go:251: test cidr6-33 yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: spf.go:416: "ip6:Cafe:Babe:8000::/33" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-33] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-33-ip4] yml_test.go:162: suite: Semantics of exp and other modifiers yml_test.go:167: domain e16.example.com yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e20.example.com yml_test.go:169: SPF: [v=spf1 default=+] yml_test.go:167: domain e21.example.com yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] yml_test.go:167: domain e15.example.com yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] yml_test.go:167: domain e22.example.com yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] yml_test.go:167: domain e23.example.com yml_test.go:169: SPF: [v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] yml_test.go:167: domain e13msg.example.com yml_test.go:169: TXT: [The %{x}-files.] yml_test.go:167: domain e21msg.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e24.example.com yml_test.go:169: SPF: [v=spf1 redirect=testimplicit.example.com] yml_test.go:169: A: [192.0.2.1] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain exp4.example.com yml_test.go:169: TXT: [%{l} in implementation] yml_test.go:167: domain e11msg.example.com yml_test.go:169: TXT: [Answer a fool according to his folly.] yml_test.go:169: TXT: [Do not answer a fool according to his folly.] yml_test.go:167: domain e17.example.com yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] yml_test.go:167: domain testimplicit.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [192.0.2.2] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain exp2.example.com yml_test.go:169: TXT: [See me.] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 -all foo=%abc] yml_test.go:167: domain tworecs.example.com yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] yml_test.go:167: domain exp1.example.com yml_test.go:169: TXT: [No-see-um] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exp= -all] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] yml_test.go:167: domain twoexp.example.com yml_test.go:169: TXT: [one] yml_test.go:169: TXT: [two] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] yml_test.go:167: domain e19.example.com yml_test.go:169: SPF: [v=spf1 default=pass] yml_test.go:167: domain badexp.example.com yml_test.go:169: TXT: [Explanation] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 1up=foo] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 =all] yml_test.go:251: test invalid-modifier yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 1up=foo" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [invalid-modifier] yml_test.go:251: test empty-modifier-name yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 =all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [empty-modifier-name] yml_test.go:251: test dorky-sentinel yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [dorky-sentinel] yml_test.go:251: test explanation-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com spf.go:308: check "e13.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] yml_test.go:251: test redirect-none yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" spf.go:308: check "erehwon.example.com" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test non-ascii-exp yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com spf.go:308: check "nonascii.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-exp] yml_test.go:251: test two-exp-records yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com spf.go:308: check "tworecs.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:251: test redirect-implicit yml_test.go:253: checkhost 192.0.2.2 bar@e24.example.com spf.go:308: check "e24.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=testimplicit.example.com" spf.go:308: check "testimplicit.example.com" 1 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "testimplicit.example.com": "testimplicit.example.com" [, ] spf.go:768: a match: 192.0.2.2, 192.0.2.2, [, ] spf.go:406: "a" pass, matched a spf.go:434: "redirect=testimplicit.example.com": pass, matched a yml_test.go:260: success: pass, matched a [redirect-implicit] yml_test.go:251: test exp-no-txt yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com spf.go:308: check "e22.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-no-txt] yml_test.go:251: test exp-void yml_test.go:253: checkhost 1.2.3.4 foo@e23.example.com spf.go:308: check "e23.example.com" 0 0 spf.go:330: dns record "v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all" spf.go:747: masks on "a:erehwon.example.com", "e23.example.com": "erehwon.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:foobar.com", "e23.example.com": "foobar.com" [, ] spf.go:514: void lookup: nxdomain spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-void] yml_test.go:251: test include-ignores-exp yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 2 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-ignores-exp] yml_test.go:251: test redirect-cancels-prior-exp yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 1 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] yml_test.go:251: test exp-multiple-txt yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-multiple-txt] yml_test.go:251: test exp-dns-error yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com spf.go:308: check "e21.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-dns-error] yml_test.go:251: test redirect-cancels-exp yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" spf.go:430: exp= ignored spf.go:308: check "e2.example.com" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=e2.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-exp] yml_test.go:162: suite: Macro expansion rules yml_test.go:167: domain example.com.d.spf.example.com yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] yml_test.go:167: domain macro%percent space%20url-space.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] yml_test.go:167: domain 40.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:%{H} -all] yml_test.go:167: domain 40.218.168.192.example.com yml_test.go:169: TXT: [Connections from %{c} not authorized.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com.should.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain msg8.example.com yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] yml_test.go:167: domain exp.example.com yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] yml_test.go:167: 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 yml_test.go:169: TXT: [Congratulations! That was tricky.] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] yml_test.go:167: domain 42.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:169: PTR: [mx.e7.example.com] yml_test.go:167: domain a.spf.example.com yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] yml_test.go:167: domain o.spf.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] yml_test.go:167: domain e1t.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] yml_test.go:167: domain somewhat.long.exp.example.com yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] yml_test.go:167: domain e6msg.example.com yml_test.go:169: TXT: [connect from %{p}] yml_test.go:167: domain example.com yml_test.go:169: A: [192.168.90.76] yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] yml_test.go:167: domain msg.example.com yml_test.go:169: TXT: [This is a test.] yml_test.go:167: domain e1a.example.com yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] yml_test.go:167: domain mx.example.com yml_test.go:169: A: [192.168.218.41] yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com yml_test.go:169: A: [192.168.218.42] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] yml_test.go:167: domain msgbas2x.cos.example.com yml_test.go:169: A: [192.168.218.40] yml_test.go:167: domain _spfh.example.com yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] yml_test.go:167: domain mx.example.com.ok.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e4msg.example.com yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] yml_test.go:251: test invalid-trailing-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com spf.go:308: check "e1t.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] yml_test.go:251: test macro-mania-in-domain yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com spf.go:308: check "e1a.example.com" 0 0 spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a yml_test.go:260: success: pass, matched a [macro-mania-in-domain] yml_test.go:251: test invalid-hello-macro yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-hello-macro] yml_test.go:251: test hello-domain-literal yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [hello-domain-literal] yml_test.go:251: test trailing-dot-domain yml_test.go:253: checkhost 192.168.218.40 test@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." spf.go:308: check "example.com.d.spf.example.com." 1 0 spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" spf.go:308: check "a.spf.example.com" 2 0 spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" spf.go:308: check "o.spf.example.com." 3 0 spf.go:330: dns record "v=spf1 ip4:192.168.218.40" spf.go:536: ip match: 192.168.218.40 spf.go:416: "ip4:192.168.218.40" pass, matched ip spf.go:401: "include:o.spf.example.com." pass, matched ip spf.go:434: "redirect=a.spf.example.com": pass, matched ip spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip yml_test.go:260: success: pass, matched ip [trailing-dot-domain] yml_test.go:251: test invalid-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] yml_test.go:251: test invalid-embedded-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com spf.go:308: check "e1e.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] yml_test.go:251: test v-macro-ip4 yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip4] yml_test.go:251: test p-macro-ip4-valid yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] yml_test.go:251: test upper-macro yml_test.go:253: checkhost 192.168.218.42 ~jack&jill=up-a_b3.c@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [upper-macro] yml_test.go:251: test macro-reverse-split-on-dash yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] yml_test.go:251: test trailing-dot-exp yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com spf.go:308: check "exp.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-dot-exp] yml_test.go:251: test exp-txt-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-txt-macro-char] yml_test.go:251: test domain-name-truncation yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com spf.go:308: check "somewhat.long.exp.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [domain-name-truncation] yml_test.go:251: test v-macro-ip6 yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip6] yml_test.go:251: test undef-macro yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] spf.go:923: macro "a": [] spf.go:406: "a:%{a}.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test require-valid-helo yml_test.go:253: checkhost 1.2.3.4 test@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "_spfh.%{d2}" to "_spfh.example.com" spf.go:308: check "_spfh.example.com" 1 0 spf.go:330: dns record "v=spf1 -a:%{h} +all" spf.go:747: masks on "a:%{h}", "_spfh.example.com": "%{h}" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}" to "OEMCOMPUTER" spf.go:514: void lookup: nxdomain spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] yml_test.go:251: test p-macro-ip6-novalid yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] yml_test.go:251: test p-macro-ip6-valid yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:251: test macro-multiple-delimiters yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] yml_test.go:162: suite: Processing limits yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com] yml_test.go:169: A: [1.2.3.7] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.20] yml_test.go:167: domain inc.example.com yml_test.go:169: SPF: [v=spf1 a a a a a a a a] yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:e2.example.com] yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain 5.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e1.example.com.] yml_test.go:169: PTR: [e2.example.com.] yml_test.go:169: PTR: [e3.example.com.] yml_test.go:169: PTR: [e4.example.com.] yml_test.go:169: PTR: [example.com.] yml_test.go:169: PTR: [e6.example.com.] yml_test.go:169: PTR: [e7.example.com.] yml_test.go:169: PTR: [e8.example.com.] yml_test.go:169: PTR: [e9.example.com.] yml_test.go:169: PTR: [e10.example.com.] yml_test.go:169: PTR: [e5.example.com.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.21] yml_test.go:167: domain e12.example.com yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com ?all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example.com} yml_test.go:169: MX: {1 mail.example.com} yml_test.go:169: MX: {2 mail.example.com} yml_test.go:169: MX: {3 mail.example.com} yml_test.go:169: MX: {4 mail.example.com} yml_test.go:169: MX: {5 mail.example.com} yml_test.go:169: MX: {6 mail.example.com} yml_test.go:169: MX: {7 mail.example.com} yml_test.go:169: MX: {8 mail.example.com} yml_test.go:169: MX: {9 mail.example.com} yml_test.go:169: MX: {10 e4.example.com} yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e11.example.com yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [1.2.3.1] yml_test.go:169: A: [1.2.3.2] yml_test.go:169: A: [1.2.3.3] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: A: [1.2.3.5] yml_test.go:169: A: [1.2.3.6] yml_test.go:169: A: [1.2.3.7] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: A: [1.2.3.9] yml_test.go:169: A: [1.2.3.10] yml_test.go:169: A: [1.2.3.11] yml_test.go:169: A: [1.2.3.12] yml_test.go:251: test mech-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] yml_test.go:251: test include-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [include-at-limit] yml_test.go:251: test mx-limit yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:411: "mx" permerror, too many MX records yml_test.go:260: success: permerror, too many MX records [mx-limit] yml_test.go:251: test false-a-limit yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [false-a-limit] yml_test.go:251: test mech-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [mech-at-limit] yml_test.go:251: test include-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:308: check "inc.example.com" 2 0 spf.go:330: dns record "v=spf1 a a a a a a a a" spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:444: fallback to neutral spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] yml_test.go:251: test void-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com ?all" spf.go:747: masks on "a:err.example.com", "e12.example.com": "err.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err1.example.com", "e12.example.com": "err1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [void-at-limit] yml_test.go:251: test void-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all" spf.go:747: masks on "a:err.example.com", "e11.example.com": "err.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err1.example.com", "e11.example.com": "err1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err2.example.com", "e11.example.com": "err2.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [void-over-limit] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 2 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 3 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 4 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 5 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 6 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 7 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 8 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 9 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 10 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 11 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:373: lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 2 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 3 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 4 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 5 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 6 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 7 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 8 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 9 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 10 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 11 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:373: lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-loop] yml_test.go:251: test ptr-limit yml_test.go:253: checkhost 1.2.3.5 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "e1.example.com." -> [{"1.2.3.6" ""}] spf.go:591: ptr forward resolution "e2.example.com." -> [{"1.2.3.7" ""}] spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e4.example.com." -> [{"1.2.3.5" ""}] spf.go:591: ptr forward resolution "e6.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e7.example.com." -> [{"1.2.3.20" ""}] spf.go:591: ptr forward resolution "e8.example.com." -> [{"1.2.3.4" ""}] spf.go:591: ptr forward resolution "e9.example.com." -> [{"1.2.3.21" ""}] spf.go:591: ptr forward resolution "e10.example.com." -> [{"1.2.3.1" ""} {"1.2.3.2" ""} {"1.2.3.3" ""} {"1.2.3.4" ""} {"1.2.3.5" ""} {"1.2.3.6" ""} {"1.2.3.7" ""} {"1.2.3.8" ""} {"1.2.3.9" ""} {"1.2.3.10" ""} {"1.2.3.11" ""} {"1.2.3.12" ""}] spf.go:600: ptr evaluating "e5.example.com" in ["e1.example.com." "e2.example.com." "e3.example.com." "e4.example.com." "e6.example.com." "e7.example.com." "e8.example.com." "e9.example.com." "e10.example.com."] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-limit] yml_test.go:162: suite: Test cases from implementation bugs yml_test.go:167: domain webmail.pair.com yml_test.go:169: TXT: [v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32] yml_test.go:167: domain example.org yml_test.go:169: SPF: [v=spf1 mx redirect=_spf.example.com] yml_test.go:169: MX: {10 smtp.example.org} yml_test.go:169: MX: {10 smtp1.example.com} yml_test.go:167: domain smtp.example.org yml_test.go:169: A: [198.51.100.2] yml_test.go:169: AAAA: [2001:db8:ff0:100::3] yml_test.go:167: domain a.example.org yml_test.go:169: TXT: [Another TXT record.] yml_test.go:169: TXT: [v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all] yml_test.go:169: TXT: [More TXT records.] yml_test.go:169: TXT: [A third TXT record.] yml_test.go:169: AAAA: [2001:db8:ff0:300::4] yml_test.go:167: domain b.example.org yml_test.go:169: CNAME: a.example.org yml_test.go:167: domain relay.pair.com yml_test.go:169: TXT: [v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all] yml_test.go:169: A: [192.0.2.131] yml_test.go:167: domain smtp1.example.com yml_test.go:169: A: [192.0.2.26] yml_test.go:169: AAAA: [2001:db8:ff0:200::2] yml_test.go:167: 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 yml_test.go:169: PTR: [smtp6-v.fe.example.org] yml_test.go:167: domain smtp6-v.fe.example.org yml_test.go:169: AAAA: [2001:db8:ff0:100::2] yml_test.go:167: domain _spf.example.com yml_test.go:169: SPF: [v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all] yml_test.go:167: domain _expspf.example.org yml_test.go:169: TXT: [Sender domain not allowed from this host. Please see http://www.openspf.org/Why?s=mfrom&id=%{S}&ip=%{C}&r=%{R}] yml_test.go:167: domain mail.example.org yml_test.go:169: SPF: [v=spf1 include:a.example.org include:b.example.org -all] yml_test.go:169: A: [192.0.2.28] yml_test.go:251: test bytes-bug yml_test.go:253: checkhost 2001:db8:ff0:100::2 test@example.org spf.go:308: check "example.org" 0 0 spf.go:330: dns record "v=spf1 mx redirect=_spf.example.com" spf.go:780: masks on "mx", "example.org": "example.org" [, ] spf.go:828: mx ips: [198.51.100.2 2001:db8:ff0:100::3 192.0.2.26 2001:db8:ff0:200::2] spf.go:308: check "_spf.example.com" 2 0 spf.go:330: dns record "v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all" spf.go:591: ptr forward resolution "smtp6-v.fe.example.org." -> [{"2001:db8:ff0:100::2" ""}] spf.go:600: ptr evaluating "fe.example.org" in ["smtp6-v.fe.example.org."] spf.go:604: ptr match: "smtp6-v.fe.example.org." spf.go:421: "ptr:fe.example.org" pass, matched ptr spf.go:434: "redirect=_spf.example.com": pass, matched ptr yml_test.go:260: success: pass, matched ptr [bytes-bug] yml_test.go:251: test cname-aliasing yml_test.go:253: checkhost 192.0.2.27 test@mail.example.org spf.go:308: check "mail.example.org" 0 0 spf.go:330: dns record "v=spf1 include:a.example.org include:b.example.org -all" spf.go:308: check "a.example.org" 1 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all" spf.go:308: check "webmail.pair.com" 2 0 spf.go:330: dns record "v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32" spf.go:444: fallback to neutral spf.go:308: check "relay.pair.com" 3 0 spf.go:330: dns record "v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all" spf.go:747: masks on "a", "relay.pair.com": "relay.pair.com" [, ] spf.go:397: all: fail spf.go:397: all: fail spf.go:308: check "b.example.org" 5 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all" spf.go:308: check "webmail.pair.com" 6 0 spf.go:330: dns record "v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32" spf.go:444: fallback to neutral spf.go:308: check "relay.pair.com" 7 0 spf.go:330: dns record "v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all" spf.go:747: masks on "a", "relay.pair.com": "relay.pair.com" [, ] spf.go:397: all: fail spf.go:397: all: fail spf.go:397: all: fail yml_test.go:260: success: fail, matched all [cname-aliasing] --- PASS: TestRFC7208 (0.03s) === RUN TestPySPF yml_test.go:162: suite: yml_test.go:167: domain lyme.eater.example.co.uk.1.2.3.5.spf.example.net yml_test.go:169: A: [127.0.0.1] yml_test.go:167: domain example.co.uk yml_test.go:169: SPF: [v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all] yml_test.go:251: test exists-pass yml_test.go:253: checkhost 1.2.3.5 lyme.eater@example.co.uk spf.go:308: check "example.co.uk" 0 0 spf.go:330: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" spf.go:780: masks on "mx/26", "example.co.uk": "example.co.uk" [/26, ] spf.go:514: void lookup: nxdomain spf.go:923: macro "l": ["l" "l" "" "" ""] spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.5.spf.example.net" spf.go:640: exists match: 127.0.0.1 spf.go:426: "exists:%{l}.%{d}.%{i}.spf.example.net" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-pass] yml_test.go:251: test exists-fail yml_test.go:253: checkhost 1.2.3.4 lyme.eater@example.co.uk spf.go:308: check "example.co.uk" 0 0 spf.go:330: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" spf.go:780: masks on "mx/26", "example.co.uk": "example.co.uk" [/26, ] spf.go:514: void lookup: nxdomain spf.go:923: macro "l": ["l" "l" "" "" ""] spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.4.spf.example.net" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-fail] yml_test.go:162: suite: yml_test.go:167: domain examplea.com yml_test.go:169: SPF: [v=spf1 a mx include:b.com] yml_test.go:167: domain exampleb.com yml_test.go:169: SPF: [v=spf1 a mx include:a.com] yml_test.go:167: domain examplec.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain exampled.com yml_test.go:169: SPF: [v=spf1 a:examplea.com:8080] yml_test.go:167: domain examplee.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain examplef.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:251: test badall yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplec.com spf.go:308: check "examplec.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [badall] yml_test.go:251: test tworecs yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplef.com spf.go:308: check "examplef.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [tworecs] yml_test.go:251: test badip yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplee.com spf.go:308: check "examplee.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip] yml_test.go:251: test incloop yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplea.com spf.go:308: check "examplea.com" 0 0 spf.go:330: dns record "v=spf1 a mx include:b.com" spf.go:747: masks on "a", "examplea.com": "examplea.com" [, ] spf.go:514: void lookup: nxdomain spf.go:780: masks on "mx", "examplea.com": "examplea.com" [, ] spf.go:514: void lookup: nxdomain spf.go:308: check "b.com" 3 2 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:b.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [incloop] yml_test.go:162: suite: yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1mx] yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:162: suite: yml_test.go:167: domain c1.example.com yml_test.go:169: CNAME: c2.example.com. yml_test.go:167: domain c2.example.com yml_test.go:169: SPF: [v=spf1 a a:c1.example.com -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mx1.example.com yml_test.go:169: yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:mx1.example.com mx:mx1.example.com ~all] yml_test.go:167: domain mail.example.com yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 default=-] yml_test.go:167: domain e2.example.com yml_test.go:169: CNAME: c1.example.com. yml_test.go:251: test cname-chain yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a a:c1.example.com -all" spf.go:747: masks on "a", "e2.example.com": "e2.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [cname-chain] yml_test.go:251: test null-cname yml_test.go:253: checkhost 1.2.3.4 bar@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mx1.example.com mx:mx1.example.com ~all" spf.go:747: masks on "a:mx1.example.com", "e3.example.com": "mx1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:780: masks on "mx:mx1.example.com", "e3.example.com": "mx1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [null-cname] yml_test.go:251: test emptyMX yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [emptyMX] yml_test.go:251: test localhost yml_test.go:253: checkhost 127.0.0.1 root@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [localhost] --- PASS: TestPySPF (0.00s) PASS ok blitiri.com.ar/go/spf 0.106s ? blitiri.com.ar/go/spf/internal/dnstest [no test files] create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=golang dh_prep -O--buildsystem=golang dh_auto_install --destdir=debian/golang-blitiri-go-spf-dev/ -O--buildsystem=golang dh_installdocs -O--buildsystem=golang dh_installchangelogs -O--buildsystem=golang dh_installsystemduser -O--buildsystem=golang dh_perl -O--buildsystem=golang dh_link -O--buildsystem=golang dh_strip_nondeterminism -O--buildsystem=golang dh_compress -O--buildsystem=golang dh_fixperms -O--buildsystem=golang dh_missing -O--buildsystem=golang dh_installdeb -O--buildsystem=golang dh_golang -O--buildsystem=golang dh_gencontrol -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 -O--buildsystem=golang dh_builddeb -O--buildsystem=golang dpkg-deb: building package 'golang-blitiri-go-spf-dev' in '../golang-blitiri-go-spf-dev_1.5.1-1_all.deb'. dpkg-genbuildinfo --build=binary -O../golang-blitiri-go-spf_1.5.1-1_i386.buildinfo dpkg-genchanges --build=binary -O../golang-blitiri-go-spf_1.5.1-1_i386.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/50092 and its subdirectories I: Current time: Fri Mar 27 21:35:32 -12 2026 I: pbuilder-time-stamp: 1774690532 Sun Feb 23 03:12:34 UTC 2025 I: 1st build successful. Starting 2nd build on remote node ionos2-i386.debian.net. Sun Feb 23 03:12:34 UTC 2025 I: Preparing to do remote build '2' on ionos2-i386.debian.net. Sun Feb 23 03:12:34 UTC 2025 - checking /var/lib/jenkins/offline_nodes if ionos2-i386.debian.net is marked as down. Sun Feb 23 03:12:34 UTC 2025 - checking via ssh if ionos2-i386.debian.net is up. removed '/tmp/read-only-fs-test-88Dt8z' ==================================================================================== Sun Feb 23 03:12:35 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job /srv/jenkins/bin/reproducible_build.sh) on ionos2-i386, called using "2 golang-blitiri-go-spf unstable /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm 1.5.1-1" as arguments. Sun Feb 23 03:12:35 UTC 2025 - actually running "reproducible_build.sh" (md5sum 68e686e434c9ab7bc3ec047d8b309cbc) as "/tmp/jenkins-script-kxRpIVV9" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Sun Feb 23 03:12:36 UTC 2025 I: Downloading source for unstable/golang-blitiri-go-spf=1.5.1-1 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 93.0 kB of source archives. Get:1 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (dsc) [2212 B] Get:2 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (tar) [88.4 kB] Get:3 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (diff) [2392 B] Fetched 93.0 kB in 0s (1009 kB/s) Download complete and in download only mode 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 93.0 kB of source archives. Get:1 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (dsc) [2212 B] Get:2 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (tar) [88.4 kB] Get:3 http://deb.debian.org/debian unstable/main golang-blitiri-go-spf 1.5.1-1 (diff) [2392 B] Fetched 93.0 kB in 0s (1009 kB/s) Download complete and in download only mode ============================================================================= Re-Building golang-blitiri-go-spf in unstable on i386 on ionos2-i386 now. Date: Sun Feb 23 04:12:39 CET 2025 Date UTC: Sun Feb 23 03:12:39 UTC 2025 ============================================================================= ++ mktemp -t pbuilderrc_XXXX --tmpdir=/srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm + local TMPCFG=/srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/pbuilderrc_DNEC + case ${ARCH} in + let NUM_CPU-=3 + case $ARCH in + locale=de_CH + language=de + case "${SUITE}" in + reproducible_buildflags=+all + extra_deb_build_options= + case "${SRCPACKAGE}" in + cat + echo BUILDDIR=/build/reproducible-path + '[' golang-blitiri-go-spf = debian-installer -o golang-blitiri-go-spf = debian-installer-netboot-images ']' + pbuilder_options=() + local pbuilder_options + DEBBUILDOPTS=-b + BINARYTARGET= + '[' golang-blitiri-go-spf = u-boot ']' + case "${SRCPACKAGE}" in + PBUILDERTIMEOUT=24 + local PRESULT=0 + sudo timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/pbuilderrc_DNEC --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b2 --logfile b2/build.log golang-blitiri-go-spf_1.5.1-1.dsc W: /root/.pbuilderrc does not exist I: Logging to b2/build.log I: pbuilder: network access will be disabled during build I: Current time: Sun Feb 23 17:12:40 +14 2025 I: pbuilder-time-stamp: 1740280360 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: using eatmydata during job I: Copying source file I: copying [golang-blitiri-go-spf_1.5.1-1.dsc] I: copying [./golang-blitiri-go-spf_1.5.1.orig.tar.gz] I: copying [./golang-blitiri-go-spf_1.5.1-1.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./golang-blitiri-go-spf_1.5.1-1.dsc: unsupported subcommand dpkg-source: info: extracting golang-blitiri-go-spf in golang-blitiri-go-spf-1.5.1 dpkg-source: info: unpacking golang-blitiri-go-spf_1.5.1.orig.tar.gz dpkg-source: info: unpacking golang-blitiri-go-spf_1.5.1-1.debian.tar.xz I: Not using root during the build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D01_modify_environment starting debug: Running on ionos2-i386. I: Changing host+domainname to test build reproducibility I: Adding a custom variable just for the fun of it... I: Changing /bin/sh to bash '/bin/sh' -> '/bin/bash' lrwxrwxrwx 1 root root 9 Feb 23 03:13 /bin/sh -> /bin/bash I: Setting pbuilder2's login shell to /bin/bash I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D01_modify_environment finished I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D02_print_environment starting I: set BASH=/bin/sh BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath BASH_ALIASES=() BASH_ARGC=() BASH_ARGV=() BASH_CMDS=() BASH_LINENO=([0]="12" [1]="0") BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") BASH_VERSION='5.2.37(1)-release' BUILDDIR=/build/reproducible-path BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' BUILDUSERNAME=pbuilder2 BUILD_ARCH=i386 DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=10 ' DIRSTACK=() DISTRIBUTION=unstable EUID=0 FUNCNAME=([0]="Echo" [1]="main") GROUPS=() HOME=/root HOSTNAME=i-capture-the-hostname HOSTTYPE=i686 HOST_ARCH=i386 IFS=' ' INVOCATION_ID=7c40246b2a1e449ba6ed14539174ee7f LANG=C LANGUAGE=de_CH:de LC_ALL=C LD_LIBRARY_PATH=/usr/lib/libeatmydata LD_PRELOAD=libeatmydata.so MACHTYPE=i686-pc-linux-gnu MAIL=/var/mail/root OPTERR=1 OPTIND=1 OSTYPE=linux-gnu PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path PBCURRENTCOMMANDLINEOPERATION=build PBUILDER_OPERATION=build PBUILDER_PKGDATADIR=/usr/share/pbuilder PBUILDER_PKGLIBDIR=/usr/lib/pbuilder PBUILDER_SYSCONFDIR=/etc PIPESTATUS=([0]="0") POSIXLY_CORRECT=y PPID=59581 PS4='+ ' PWD=/ SHELL=/bin/bash SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix SHLVL=3 SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/pbuilderrc_DNEC --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b2 --logfile b2/build.log golang-blitiri-go-spf_1.5.1-1.dsc' SUDO_GID=112 SUDO_UID=107 SUDO_USER=jenkins TERM=unknown TZ=/usr/share/zoneinfo/Etc/GMT-14 UID=0 USER=root _='I: set' http_proxy=http://46.16.76.132:3128 I: uname -a Linux i-capture-the-hostname 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: i386 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), dh-golang, golang-any, golang-gopkg-yaml.v3-dev dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19761 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on dh-golang; however: Package dh-golang is not installed. pbuilder-satisfydepends-dummy depends on golang-any; however: Package golang-any is not installed. pbuilder-satisfydepends-dummy depends on golang-gopkg-yaml.v3-dev; however: Package golang-gopkg-yaml.v3-dev is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} debhelper{a} dh-autoreconf{a} dh-golang{a} dh-strip-nondeterminism{a} dwz{a} file{a} gettext{a} gettext-base{a} golang-1.24-go{a} golang-1.24-src{a} golang-any{a} golang-go{a} golang-gopkg-yaml.v3-dev{a} golang-src{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libdebhelper-perl{a} libelf1t64{a} libfile-stripnondeterminism-perl{a} libicu72{a} libmagic-mgc{a} libmagic1t64{a} libpipeline1{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2{a} m4{a} man-db{a} po-debconf{a} sensible-utils{a} The following packages are RECOMMENDED but will NOT be installed: curl libarchive-cpio-perl libltdl-dev libmail-sendmail-perl lynx pkgconf wget 0 packages upgraded, 37 newly installed, 0 to remove and 0 not upgraded. Need to get 68.1 MB of archives. After unpacking 329 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian unstable/main i386 sensible-utils all 0.0.24 [24.8 kB] Get: 2 http://deb.debian.org/debian unstable/main i386 libmagic-mgc i386 1:5.45-3+b1 [314 kB] Get: 3 http://deb.debian.org/debian unstable/main i386 libmagic1t64 i386 1:5.45-3+b1 [115 kB] Get: 4 http://deb.debian.org/debian unstable/main i386 file i386 1:5.45-3+b1 [43.2 kB] Get: 5 http://deb.debian.org/debian unstable/main i386 gettext-base i386 0.23.1-1 [245 kB] Get: 6 http://deb.debian.org/debian unstable/main i386 libuchardet0 i386 0.0.8-1+b2 [69.2 kB] Get: 7 http://deb.debian.org/debian unstable/main i386 groff-base i386 1.23.0-7 [1199 kB] Get: 8 http://deb.debian.org/debian unstable/main i386 bsdextrautils i386 2.40.4-4 [96.4 kB] Get: 9 http://deb.debian.org/debian unstable/main i386 libpipeline1 i386 1.5.8-1 [41.2 kB] Get: 10 http://deb.debian.org/debian unstable/main i386 man-db i386 2.13.0-1 [1428 kB] Get: 11 http://deb.debian.org/debian unstable/main i386 m4 i386 1.4.19-5 [301 kB] Get: 12 http://deb.debian.org/debian unstable/main i386 autoconf all 2.72-3 [493 kB] Get: 13 http://deb.debian.org/debian unstable/main i386 autotools-dev all 20220109.1 [51.6 kB] Get: 14 http://deb.debian.org/debian unstable/main i386 automake all 1:1.17-3 [862 kB] Get: 15 http://deb.debian.org/debian unstable/main i386 autopoint all 0.23.1-1 [770 kB] Get: 16 http://deb.debian.org/debian unstable/main i386 libdebhelper-perl all 13.24.1 [90.9 kB] Get: 17 http://deb.debian.org/debian unstable/main i386 libtool all 2.5.4-3 [539 kB] Get: 18 http://deb.debian.org/debian unstable/main i386 dh-autoreconf all 20 [17.1 kB] Get: 19 http://deb.debian.org/debian unstable/main i386 libarchive-zip-perl all 1.68-1 [104 kB] Get: 20 http://deb.debian.org/debian unstable/main i386 libfile-stripnondeterminism-perl all 1.14.1-2 [19.7 kB] Get: 21 http://deb.debian.org/debian unstable/main i386 dh-strip-nondeterminism all 1.14.1-2 [8620 B] Get: 22 http://deb.debian.org/debian unstable/main i386 libelf1t64 i386 0.192-4 [195 kB] Get: 23 http://deb.debian.org/debian unstable/main i386 dwz i386 0.15-1+b1 [116 kB] Get: 24 http://deb.debian.org/debian unstable/main i386 libunistring5 i386 1.3-1 [458 kB] Get: 25 http://deb.debian.org/debian unstable/main i386 libicu72 i386 72.1-6 [9582 kB] Get: 26 http://deb.debian.org/debian unstable/main i386 libxml2 i386 2.12.7+dfsg+really2.9.14-0.2+b1 [734 kB] Get: 27 http://deb.debian.org/debian unstable/main i386 gettext i386 0.23.1-1 [1714 kB] Get: 28 http://deb.debian.org/debian unstable/main i386 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 29 http://deb.debian.org/debian unstable/main i386 po-debconf all 1.0.21+nmu1 [248 kB] Get: 30 http://deb.debian.org/debian unstable/main i386 debhelper all 13.24.1 [920 kB] Get: 31 http://deb.debian.org/debian unstable/main i386 dh-golang all 1.63 [24.4 kB] Get: 32 http://deb.debian.org/debian unstable/main i386 golang-1.24-src all 1.24.0-1 [20.3 MB] Get: 33 http://deb.debian.org/debian unstable/main i386 golang-1.24-go i386 1.24.0-1 [26.8 MB] Get: 34 http://deb.debian.org/debian unstable/main i386 golang-src all 2:1.24~2 [5136 B] Get: 35 http://deb.debian.org/debian unstable/main i386 golang-go i386 2:1.24~2 [44.3 kB] Get: 36 http://deb.debian.org/debian unstable/main i386 golang-any i386 2:1.24~2 [5216 B] Get: 37 http://deb.debian.org/debian unstable/main i386 golang-gopkg-yaml.v3-dev all 3.0.1-3 [74.3 kB] Fetched 68.1 MB in 2s (33.6 MB/s) Preconfiguring packages ... Selecting previously unselected package sensible-utils. (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 ... 19761 files and directories currently installed.) Preparing to unpack .../00-sensible-utils_0.0.24_all.deb ... Unpacking sensible-utils (0.0.24) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../01-libmagic-mgc_1%3a5.45-3+b1_i386.deb ... Unpacking libmagic-mgc (1:5.45-3+b1) ... Selecting previously unselected package libmagic1t64:i386. Preparing to unpack .../02-libmagic1t64_1%3a5.45-3+b1_i386.deb ... Unpacking libmagic1t64:i386 (1:5.45-3+b1) ... Selecting previously unselected package file. Preparing to unpack .../03-file_1%3a5.45-3+b1_i386.deb ... Unpacking file (1:5.45-3+b1) ... Selecting previously unselected package gettext-base. Preparing to unpack .../04-gettext-base_0.23.1-1_i386.deb ... Unpacking gettext-base (0.23.1-1) ... Selecting previously unselected package libuchardet0:i386. Preparing to unpack .../05-libuchardet0_0.0.8-1+b2_i386.deb ... Unpacking libuchardet0:i386 (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../06-groff-base_1.23.0-7_i386.deb ... Unpacking groff-base (1.23.0-7) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../07-bsdextrautils_2.40.4-4_i386.deb ... Unpacking bsdextrautils (2.40.4-4) ... Selecting previously unselected package libpipeline1:i386. Preparing to unpack .../08-libpipeline1_1.5.8-1_i386.deb ... Unpacking libpipeline1:i386 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../09-man-db_2.13.0-1_i386.deb ... Unpacking man-db (2.13.0-1) ... Selecting previously unselected package m4. Preparing to unpack .../10-m4_1.4.19-5_i386.deb ... Unpacking m4 (1.4.19-5) ... Selecting previously unselected package autoconf. Preparing to unpack .../11-autoconf_2.72-3_all.deb ... Unpacking autoconf (2.72-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../12-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../13-automake_1%3a1.17-3_all.deb ... Unpacking automake (1:1.17-3) ... Selecting previously unselected package autopoint. Preparing to unpack .../14-autopoint_0.23.1-1_all.deb ... Unpacking autopoint (0.23.1-1) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../15-libdebhelper-perl_13.24.1_all.deb ... Unpacking libdebhelper-perl (13.24.1) ... Selecting previously unselected package libtool. Preparing to unpack .../16-libtool_2.5.4-3_all.deb ... Unpacking libtool (2.5.4-3) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../17-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../18-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../19-libfile-stripnondeterminism-perl_1.14.1-2_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.1-2) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../20-dh-strip-nondeterminism_1.14.1-2_all.deb ... Unpacking dh-strip-nondeterminism (1.14.1-2) ... Selecting previously unselected package libelf1t64:i386. Preparing to unpack .../21-libelf1t64_0.192-4_i386.deb ... Unpacking libelf1t64:i386 (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../22-dwz_0.15-1+b1_i386.deb ... Unpacking dwz (0.15-1+b1) ... Selecting previously unselected package libunistring5:i386. Preparing to unpack .../23-libunistring5_1.3-1_i386.deb ... Unpacking libunistring5:i386 (1.3-1) ... Selecting previously unselected package libicu72:i386. Preparing to unpack .../24-libicu72_72.1-6_i386.deb ... Unpacking libicu72:i386 (72.1-6) ... Selecting previously unselected package libxml2:i386. Preparing to unpack .../25-libxml2_2.12.7+dfsg+really2.9.14-0.2+b1_i386.deb ... Unpacking libxml2:i386 (2.12.7+dfsg+really2.9.14-0.2+b1) ... Selecting previously unselected package gettext. Preparing to unpack .../26-gettext_0.23.1-1_i386.deb ... Unpacking gettext (0.23.1-1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../27-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../28-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../29-debhelper_13.24.1_all.deb ... Unpacking debhelper (13.24.1) ... Selecting previously unselected package dh-golang. Preparing to unpack .../30-dh-golang_1.63_all.deb ... Unpacking dh-golang (1.63) ... Selecting previously unselected package golang-1.24-src. Preparing to unpack .../31-golang-1.24-src_1.24.0-1_all.deb ... Unpacking golang-1.24-src (1.24.0-1) ... Selecting previously unselected package golang-1.24-go. Preparing to unpack .../32-golang-1.24-go_1.24.0-1_i386.deb ... Unpacking golang-1.24-go (1.24.0-1) ... Selecting previously unselected package golang-src. Preparing to unpack .../33-golang-src_2%3a1.24~2_all.deb ... Unpacking golang-src (2:1.24~2) ... Selecting previously unselected package golang-go:i386. Preparing to unpack .../34-golang-go_2%3a1.24~2_i386.deb ... Unpacking golang-go:i386 (2:1.24~2) ... Selecting previously unselected package golang-any:i386. Preparing to unpack .../35-golang-any_2%3a1.24~2_i386.deb ... Unpacking golang-any:i386 (2:1.24~2) ... Selecting previously unselected package golang-gopkg-yaml.v3-dev. Preparing to unpack .../36-golang-gopkg-yaml.v3-dev_3.0.1-3_all.deb ... Unpacking golang-gopkg-yaml.v3-dev (3.0.1-3) ... Setting up golang-1.24-src (1.24.0-1) ... Setting up libpipeline1:i386 (1.5.8-1) ... Setting up libicu72:i386 (72.1-6) ... Setting up bsdextrautils (2.40.4-4) ... Setting up libmagic-mgc (1:5.45-3+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up golang-gopkg-yaml.v3-dev (3.0.1-3) ... Setting up libdebhelper-perl (13.24.1) ... Setting up libmagic1t64:i386 (1:5.45-3+b1) ... Setting up gettext-base (0.23.1-1) ... Setting up m4 (1.4.19-5) ... Setting up file (1:5.45-3+b1) ... Setting up libelf1t64:i386 (0.192-4) ... Setting up autotools-dev (20220109.1) ... Setting up libunistring5:i386 (1.3-1) ... Setting up autopoint (0.23.1-1) ... Setting up golang-1.24-go (1.24.0-1) ... Setting up autoconf (2.72-3) ... Setting up dwz (0.15-1+b1) ... Setting up sensible-utils (0.0.24) ... Setting up libuchardet0:i386 (0.0.8-1+b2) ... Setting up golang-src (2:1.24~2) ... Setting up libxml2:i386 (2.12.7+dfsg+really2.9.14-0.2+b1) ... Setting up automake (1:1.17-3) ... update-alternatives: using /usr/bin/automake-1.17 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.14.1-2) ... Setting up gettext (0.23.1-1) ... Setting up libtool (2.5.4-3) ... Setting up golang-go:i386 (2:1.24~2) ... Setting up golang-any:i386 (2:1.24~2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up dh-strip-nondeterminism (1.14.1-2) ... Setting up groff-base (1.23.0-7) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up man-db (2.13.0-1) ... Not building database; man-db/auto-update is not 'true'. Setting up debhelper (13.24.1) ... Setting up dh-golang (1.63) ... Processing triggers for libc-bin (2.40-7) ... Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps I: Building the package I: user script /srv/workspace/pbuilder/59581/tmp/hooks/A99_set_merged_usr starting Not re-configuring usrmerge for unstable I: user script /srv/workspace/pbuilder/59581/tmp/hooks/A99_set_merged_usr finished hostname: Name or service not known I: Running cd /build/reproducible-path/golang-blitiri-go-spf-1.5.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../golang-blitiri-go-spf_1.5.1-1_source.changes dpkg-buildpackage: info: source package golang-blitiri-go-spf dpkg-buildpackage: info: source version 1.5.1-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Alberto Bertogli dpkg-source --before-build . dpkg-buildpackage: info: host architecture i386 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 dh binary --buildsystem=golang --with=golang dh_update_autotools_config -O--buildsystem=golang dh_autoreconf -O--buildsystem=golang dh_auto_configure -O--buildsystem=golang dh_auto_build -O--buildsystem=golang cd obj-i686-linux-gnu && go install -trimpath -v -p 10 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest internal/goarch internal/unsafeheader internal/godebugs internal/goexperiment internal/coverage/rtcov internal/goos internal/profilerecord internal/byteorder internal/abi internal/cpu internal/runtime/atomic internal/asan internal/msan internal/runtime/math internal/runtime/sys internal/runtime/syscall sync/atomic math/bits internal/chacha8rand internal/itoa cmp unicode/utf8 unicode internal/nettrace internal/bytealg math internal/runtime/exithook internal/stringslite internal/race internal/runtime/maps internal/sync runtime internal/reflectlite iter weak sync slices maps internal/bisect internal/testlog internal/singleflight unique errors sort runtime/cgo internal/oserror vendor/golang.org/x/net/dns/dnsmessage strconv io path syscall internal/godebug bytes strings reflect net/netip regexp/syntax internal/syscall/execenv internal/syscall/unix time regexp context io/fs internal/poll internal/filepathlite os internal/fmtsort fmt net net/url blitiri.com.ar/go/spf/internal/dnstest blitiri.com.ar/go/spf dh_auto_test -O--buildsystem=golang cd obj-i686-linux-gnu && go test -vet=off -v -p 10 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest === RUN TestBasic spf.go:308: check "domain" 0 0 spf.go:330: dns record "" spf.go:308: check "domain" 0 0 spf.go:330: dns record "" spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 " spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 -" spf.go:437: unknown field, permerror spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exp=blah +all" spf.go:430: exp= ignored spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 -all " spf.go:397: all: fail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ~all" spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a ~all" spf.go:747: masks on "a", "domain": "domain" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a/24" spf.go:747: masks on "a/24", "domain": "domain" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/24" spf.go:747: masks on "a:d1110/24", "domain": "d1110" [/24, ] spf.go:768: a match: 1.1.1.1, 1.1.1.0, [/24, ] spf.go:406: "a:d1110/24" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/montoto" spf.go:747: masks on "a:d1110/montoto", "domain": "" [, ] spf.go:406: "a:d1110/montoto" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/99" spf.go:747: masks on "a:d1110/99", "domain": "" [, ] spf.go:406: "a:d1110/99" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110/32" spf.go:747: masks on "a:d1110/32", "domain": "d1110" [/32, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1110" spf.go:747: masks on "a:d1110", "domain": "d1110" [, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d1111" spf.go:747: masks on "a:d1111", "domain": "d1111" [, ] spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:d1111" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:nothing/24" spf.go:747: masks on "a:nothing/24", "domain": "nothing" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "domain": "domain" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx/24" spf.go:780: masks on "mx/24", "domain": "domain" [/24, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:a/montoto ~all" spf.go:780: masks on "mx:a/montoto", "domain": "" [, ] spf.go:411: "mx:a/montoto" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24 ~all" spf.go:780: masks on "mx:d1110/24", "domain": "d1110" [/24, ] spf.go:828: mx ips: [1.1.1.0] spf.go:831: mx match: 1.1.1.1, 1.1.1.0, [/24, ] spf.go:411: "mx:d1110/24" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24//100 ~all" spf.go:780: masks on "mx:d1110/24//100", "domain": "d1110" [/24, /100] spf.go:828: mx ips: [1.1.1.0] spf.go:831: mx match: 1.1.1.1, 1.1.1.0, [/24, /100] spf.go:411: "mx:d1110/24//100" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24//129 ~all" spf.go:780: masks on "mx:d1110/24//129", "domain": "" [/24, ] spf.go:411: "mx:d1110/24//129" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/24/100 ~all" spf.go:780: masks on "mx:d1110/24/100", "domain": "" [, ] spf.go:411: "mx:d1110/24/100" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d1110/99 ~all" spf.go:780: masks on "mx:d1110/99", "domain": "" [, ] spf.go:411: "mx:d1110/99" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4 ~all" spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:12 ~all" spf.go:416: "ip6:12" permerror, invalid ipX value spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 -all" spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/24 -all" spf.go:527: ip match: 1.1.1.0/24 contains 1.1.1.1 spf.go:416: "ip4:1.1.1.1/24" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/lala -all" spf.go:416: "ip4:1.1.1.1/lala" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/33 -all" spf.go:416: "ip4:1.1.1.1/33" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:doesnotexist" permerror, no DNS record found spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "domain" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "xx.domain." spf.go:421: "ptr" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:d1111 -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "d1111" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "d1111." spf.go:421: "ptr:d1111" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:lalala -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "lalala" in ["lalala." "xx.domain." "d1111."] spf.go:604: ptr match: "lalala." spf.go:421: "ptr:lalala" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:doesnotexist -all" spf.go:591: ptr forward resolution "lalala." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "xx.domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d1111." -> [{"1.1.1.1" ""}] spf.go:600: ptr evaluating "doesnotexist" in ["lalala." "xx.domain." "d1111."] spf.go:397: all: fail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 blah" spf.go:437: unknown field, permerror spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exists:d1111 -all" spf.go:640: exists match: 1.1.1.1 spf.go:426: "exists:d1111" pass, matched exists spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=" spf.go:434: "redirect=": permerror, invalid domain --- PASS: TestBasic (0.02s) === RUN TestIPv6 spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a ~all" spf.go:747: masks on "a", "domain": "domain" [, ] spf.go:397: all: softfail spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a/24" spf.go:747: masks on "a/24", "domain": "domain" [/24, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660//24" spf.go:747: masks on "a:d6660//24", "domain": "d6660" [, /24] spf.go:768: a match: 2001:db8::68, 2001:db8::, [, /24] spf.go:406: "a:d6660//24" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660/24//100" spf.go:747: masks on "a:d6660/24//100", "domain": "d6660" [/24, /100] spf.go:768: a match: 2001:db8::68, 2001:db8::, [/24, /100] spf.go:406: "a:d6660/24//100" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6660" spf.go:747: masks on "a:d6660", "domain": "d6660" [, ] spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:d6666" spf.go:747: masks on "a:d6666", "domain": "d6666" [, ] spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:d6666" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:nothing//24" spf.go:747: masks on "a:nothing//24", "domain": "nothing" [, /24] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660//24 ~all" spf.go:780: masks on "mx:d6660//24", "domain": "d6660" [, /24] spf.go:828: mx ips: [2001:db8::] spf.go:831: mx match: 2001:db8::68, 2001:db8::, [, /24] spf.go:411: "mx:d6660//24" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660/24//100 ~all" spf.go:780: masks on "mx:d6660/24//100", "domain": "d6660" [/24, /100] spf.go:828: mx ips: [2001:db8::] spf.go:831: mx match: 2001:db8::68, 2001:db8::, [/24, /100] spf.go:411: "mx:d6660/24//100" pass, matched mx spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:d6660/24/100 ~all" spf.go:780: masks on "mx:d6660/24/100", "domain": "" [, ] spf.go:411: "mx:d6660/24/100" permerror, invalid mask spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::68 ~all" spf.go:536: ip match: 2001:db8::68 spf.go:416: "ip6:2001:db8::68" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::1/24 ~all" spf.go:527: ip match: 2001:d00::/24 contains 2001:db8::68 spf.go:416: "ip6:2001:db8::1/24" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ip6:2001:db8::1/100 ~all" spf.go:527: ip match: 2001:db8::/100 contains 2001:db8::68 spf.go:416: "ip6:2001:db8::1/100" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "domain" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "domain." spf.go:421: "ptr" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:d6666 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "d6666" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "d6666." spf.go:421: "ptr:d6666" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:sonlas6 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "sonlas6" in ["sonlas6." "domain." "d6666."] spf.go:604: ptr match: "sonlas6." spf.go:421: "ptr:sonlas6" pass, matched ptr spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:sonlas7 -all" spf.go:591: ptr forward resolution "sonlas6." -> [{"2001:db8::68" ""}] spf.go:591: ptr forward resolution "domain." -> [{"1.1.1.1" ""}] spf.go:591: ptr forward resolution "d6666." -> [{"2001:db8::68" ""}] spf.go:600: ptr evaluating "sonlas7" in ["sonlas6." "domain." "d6666."] spf.go:397: all: fail --- PASS: TestIPv6 (0.00s) === RUN TestInclude spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "" spf.go:401: "include:domain2" permerror, no DNS record found spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain2 ip4:1.1.1.1" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip --- PASS: TestInclude (0.00s) === RUN TestRecursionLimit spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 1 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 2 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 3 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 4 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 5 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 6 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 7 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 8 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 9 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 10 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:308: check "domain" 11 0 spf.go:330: dns record "v=spf1 include:domain ~all" spf.go:373: lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached spf.go:401: "include:domain" permerror, lookup limit reached --- PASS: TestRecursionLimit (0.00s) === RUN TestRedirect spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 -all" spf.go:536: ip match: 1.1.1.1 spf.go:416: "ip4:1.1.1.1" pass, matched ip spf.go:434: "redirect=domain2": pass, matched ip --- PASS: TestRedirect (0.00s) === RUN TestInvalidRedirect spf.go:308: check "doesnotexist" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=doesnotexist": permerror, no DNS record found --- PASS: TestInvalidRedirect (0.00s) === RUN TestRedirectOrder spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=faildom" spf.go:308: check "faildom" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=faildom": fail, matched all spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=faildom all" spf.go:397: all: pass --- PASS: TestRedirectOrder (0.00s) === RUN TestNoRecord spf.go:308: check "d1" 0 0 spf.go:330: dns record "" spf.go:308: check "d2" 0 0 spf.go:330: dns record "" spf.go:308: check "d3" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:308: check "nospf" 0 0 spf.go:314: dns domain not found: lookup : record not found for testing --- PASS: TestNoRecord (0.00s) === RUN TestDNSTemporaryErrors spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:tmperr" spf.go:308: check "tmperr" 1 0 spf.go:318: dns temp error: lookup : temporary error for testing spf.go:401: "include:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:tmperr" spf.go:747: masks on "a:tmperr", "domain": "tmperr" [, ] spf.go:406: "a:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:tmperr" spf.go:780: masks on "mx:tmperr", "domain": "tmperr" [, ] spf.go:411: "mx:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:tmperr" spf.go:421: "ptr:tmperr" temperror, lookup : temporary error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:tmpmx" spf.go:780: masks on "mx:tmpmx", "domain": "tmpmx" [, ] spf.go:411: "mx:tmpmx" temperror, lookup : temporary error for testing --- PASS: TestDNSTemporaryErrors (0.00s) === RUN TestDNSPermanentErrors spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 include:permerr" spf.go:308: check "permerr" 1 0 spf.go:327: dns perm error: lookup : permanent error for testing spf.go:401: "include:permerr" permerror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:permerr" spf.go:747: masks on "a:permerr", "domain": "permerr" [, ] spf.go:406: "a:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:permerr" spf.go:780: masks on "mx:permerr", "domain": "permerr" [, ] spf.go:411: "mx:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:permerr" spf.go:421: "ptr:permerr" temperror, lookup : permanent error for testing spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:permmx" spf.go:780: masks on "mx:permmx", "domain": "permmx" [, ] spf.go:411: "mx:permmx" temperror, lookup : permanent error for testing --- PASS: TestDNSPermanentErrors (0.00s) === RUN TestMXWithInvalidRecord spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:dom2 -all" spf.go:780: masks on "mx:dom2", "domain": "dom2" [, ] spf.go:828: mx ips: [1.1.1.1] spf.go:831: mx match: 1.1.1.1, 1.1.1.1, [, ] spf.go:411: "mx:dom2" pass, matched mx --- PASS: TestMXWithInvalidRecord (0.00s) === RUN TestMacros spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 ptr:%{fff} -all" spf.go:923: macro "fff": [] spf.go:421: "ptr:%{fff}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 mx:%{fff} -all" spf.go:780: masks on "mx:%{fff}", "domain": "%{fff}" [, ] spf.go:923: macro "fff": [] spf.go:411: "mx:%{fff}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=%{fff}" spf.go:923: macro "fff": [] spf.go:434: "redirect=%{fff}": permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:%{o0}" spf.go:747: masks on "a:%{o0}", "domain": "%{o0}" [, ] spf.go:923: macro "o0": ["o0" "o" "0" "" ""] spf.go:406: "a:%{o0}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:sss-%{s}-sss" spf.go:747: masks on "a:sss-%{s}-sss", "domain": "sss-%{s}-sss" [, ] spf.go:923: macro "s": ["s" "s" "" "" ""] spf.go:1020: macro expanded "sss-%{s}-sss" to "sss-user@domain-sss" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:sss-%{s}-sss" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ooo-%{o}-ooo" spf.go:747: masks on "a:ooo-%{o}-ooo", "domain": "ooo-%{o}-ooo" [, ] spf.go:923: macro "o": ["o" "o" "" "" ""] spf.go:1020: macro expanded "ooo-%{o}-ooo" to "ooo-domain-ooo" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ooo-%{o}-ooo" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:OOO-%{O}-OOO" spf.go:747: masks on "a:OOO-%{O}-OOO", "domain": "OOO-%{O}-OOO" [, ] spf.go:923: macro "O": ["O" "O" "" "" ""] spf.go:1020: macro expanded "OOO-%{O}-OOO" to "OOO-domain-OOO" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:OOO-%{O}-OOO" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ppp-%{p}-ppp" spf.go:747: masks on "a:ppp-%{p}-ppp", "domain": "ppp-%{p}-ppp" [, ] spf.go:923: macro "p": ["p" "p" "" "" ""] spf.go:1020: macro expanded "ppp-%{p}-ppp" to "ppp-unknown-ppp" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ppp-%{p}-ppp" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:hhh-%{h}-hhh" spf.go:747: masks on "a:hhh-%{h}-hhh", "domain": "hhh-%{h}-hhh" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "hhh-%{h}-hhh" to "hhh-helo-hhh" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:hhh-%{h}-hhh" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:vvv-%{v}-vvv" spf.go:747: masks on "a:vvv-%{v}-vvv", "domain": "vvv-%{v}-vvv" [, ] spf.go:923: macro "v": ["v" "v" "" "" ""] spf.go:1020: macro expanded "vvv-%{v}-vvv" to "vvv-ip6-vvv" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:vvv-%{v}-vvv" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 a:%{x}" spf.go:747: masks on "a:%{x}", "domain": "%{x}" [, ] spf.go:923: macro "x": [] spf.go:406: "a:%{x}" permerror, invalid macro spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 +a:ooo-%{o7}-ooo" spf.go:747: masks on "a:ooo-%{o7}-ooo", "domain": "ooo-%{o7}-ooo" [, ] spf.go:923: macro "o7": ["o7" "o" "7" "" ""] spf.go:1020: macro expanded "ooo-%{o7}-ooo" to "ooo-domain-ooo" spf.go:768: a match: 2001:db8::68, 2001:db8::68, [, ] spf.go:406: "a:ooo-%{o7}-ooo" pass, matched a spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 exists:%{ir}.vvv -all" spf.go:923: macro "ir": ["ir" "i" "" "r" ""] spf.go:1020: macro expanded "%{ir}.vvv" to "8.6.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.vvv" spf.go:640: exists match: 1.1.1.1 spf.go:426: "exists:%{ir}.vvv" pass, matched exists --- PASS: TestMacros (0.01s) === RUN TestMacrosV4 spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:sr-%{sr}-sr" spf.go:747: masks on "a:sr-%{sr}-sr", "domain.com": "sr-%{sr}-sr" [, ] spf.go:923: macro "sr": ["sr" "s" "" "r" ""] spf.go:1020: macro expanded "sr-%{sr}-sr" to "sr-com.user@domain-sr" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:sr-%{sr}-sr" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:sra-%{sr.}-sra" spf.go:747: masks on "a:sra-%{sr.}-sra", "domain.com": "sra-%{sr.}-sra" [, ] spf.go:923: macro "sr.": ["sr." "s" "" "r" "."] spf.go:1020: macro expanded "sra-%{sr.}-sra" to "sra-com.user@domain-sra" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:sra-%{sr.}-sra" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o7-%{o7}-o7" spf.go:747: masks on "a:o7-%{o7}-o7", "domain.com": "o7-%{o7}-o7" [, ] spf.go:923: macro "o7": ["o7" "o" "7" "" ""] spf.go:1020: macro expanded "o7-%{o7}-o7" to "o7-domain.com-o7" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o7-%{o7}-o7" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o1-%{o1}-o1" spf.go:747: masks on "a:o1-%{o1}-o1", "domain.com": "o1-%{o1}-o1" [, ] spf.go:923: macro "o1": ["o1" "o" "1" "" ""] spf.go:1020: macro expanded "o1-%{o1}-o1" to "o1-com-o1" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o1-%{o1}-o1" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:o1r-%{o1r}-o1r" spf.go:747: masks on "a:o1r-%{o1r}-o1r", "domain.com": "o1r-%{o1r}-o1r" [, ] spf.go:923: macro "o1r": ["o1r" "o" "1" "r" ""] spf.go:1020: macro expanded "o1r-%{o1r}-o1r" to "o1r-domain-o1r" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:o1r-%{o1r}-o1r" pass, matched a spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:vvv-%{v}-vvv" spf.go:747: masks on "a:vvv-%{v}-vvv", "domain.com": "vvv-%{v}-vvv" [, ] spf.go:923: macro "v": ["v" "v" "" "" ""] spf.go:1020: macro expanded "vvv-%{v}-vvv" to "vvv-in-addr-vvv" spf.go:768: a match: 1.1.1.1, 1.1.1.1, [, ] spf.go:406: "a:vvv-%{v}-vvv" pass, matched a --- PASS: TestMacrosV4 (0.00s) === RUN TestIPMatchHelper --- PASS: TestIPMatchHelper (0.00s) === RUN TestInvalidMacro spf.go:923: macro "x": [] spf.go:923: macro "z": [] spf.go:923: macro "c": ["c" "c" "" "" ""] spf.go:923: macro "r": ["r" "r" "" "" ""] spf.go:923: macro "t": ["t" "t" "" "" ""] --- PASS: TestInvalidMacro (0.00s) === RUN TestNullTrace --- PASS: TestNullTrace (0.00s) === RUN TestOverrideLookupLimit spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 include:domain3" spf.go:308: check "domain3" 2 0 spf.go:330: dns record "v=spf1 include:domain4" spf.go:308: check "domain4" 3 0 spf.go:330: dns record "v=spf1 +all" spf.go:373: lookup limit reached spf.go:401: "include:domain4" permerror, lookup limit reached spf.go:401: "include:domain3" permerror, lookup limit reached spf.go:401: "include:domain2" permerror, lookup limit reached --- PASS: TestOverrideLookupLimit (0.00s) === RUN TestOverrideVoidLookupLimit spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached spf.go:401: "include:domain3" permerror, void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:514: void lookup: nxdomain spf.go:308: check "domain4" 6 3 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:514: void lookup: nxdomain spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:503: void lookup: no answers spf.go:378: void lookup limit reached spf.go:401: "include:domain3" permerror, void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:308: check "domain3" 4 2 spf.go:330: dns record "v=spf1 exists:%{i}.three include:domain4" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.three" to "1.1.1.1.three" spf.go:503: void lookup: no answers spf.go:308: check "domain4" 6 3 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain4" pass, matched all spf.go:401: "include:domain3" pass, matched all spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.one include:domain2" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.one" to "1.1.1.1.one" spf.go:503: void lookup: no answers spf.go:308: check "domain2" 2 1 spf.go:330: dns record "v=spf1 exists:%{i}.two include:domain3" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{i}.two" to "1.1.1.1.two" spf.go:503: void lookup: no answers spf.go:378: void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached --- PASS: TestOverrideVoidLookupLimit (0.01s) === RUN TestWithContext spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all spf.go:308: check "domain1" 0 0 spf.go:327: dns perm error: context canceled --- PASS: TestWithContext (0.00s) === RUN TestWithResolver spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" spf.go:308: check "domain2" 1 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass spf.go:401: "include:domain2" pass, matched all --- PASS: TestWithResolver (0.00s) === RUN TestBadResolverResponse spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 a:domain1 -all" spf.go:747: masks on "a:domain1", "domain1": "domain1" [, ] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 a:domain1//24 -all" spf.go:747: masks on "a:domain1//24", "domain1": "domain1" [, /24] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 mx:domain1 -all" spf.go:780: masks on "mx:domain1", "domain1": "domain1" [, ] spf.go:828: mx ips: [] spf.go:397: all: fail spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 mx:domain1//24 -all" spf.go:780: masks on "mx:domain1//24", "domain1": "domain1" [, /24] spf.go:828: mx ips: [] spf.go:397: all: fail --- PASS: TestBadResolverResponse (0.00s) === RUN TestWithTraceFunc spf_test.go:698: tracing check "domain1" 0 0 spf_test.go:698: tracing dns record "v=spf1 include:domain2" spf_test.go:698: tracing check "domain2" 1 0 spf_test.go:698: tracing dns record "v=spf1 +all" spf_test.go:698: tracing all: pass spf_test.go:698: tracing "include:domain2" pass, matched all --- PASS: TestWithTraceFunc (0.00s) === RUN TestOurs yml_test.go:162: suite: Simple successes yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:251: test test2 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [test2] yml_test.go:251: test test1 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [test1] yml_test.go:162: suite: Simple failures yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:251: test test2 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [test2] yml_test.go:251: test test1 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [test1] yml_test.go:162: suite: Regexp edge cases for "a", "mx" and "ptr" yml_test.go:167: domain expmx.net yml_test.go:169: SPF: [v=spf1 exp=mx:mymx.com ~all] yml_test.go:169: MX: {10 mymx.com} yml_test.go:167: domain mymx.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain expptr.net yml_test.go:169: SPF: [v=spf1 exp=ptr:lalala.com ~all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [ptr:lalala.com.] yml_test.go:167: domain ptr:lalala.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain a1.net yml_test.go:169: SPF: [v=spf1 ip6:a::a ~all] yml_test.go:167: domain a2.net yml_test.go:169: SPF: [v=spf1 ip6:1a0a:cccc::/29 ~all] yml_test.go:251: test ipv6-with-a yml_test.go:253: checkhost a::a foobar@a1.net spf.go:308: check "a1.net" 0 0 spf.go:330: dns record "v=spf1 ip6:a::a ~all" spf.go:536: ip match: a::a spf.go:416: "ip6:a::a" pass, matched ip yml_test.go:260: success: pass, matched ip [ipv6-with-a] yml_test.go:251: test bad-a-mask yml_test.go:253: checkhost 2001:db8:ff0:100::2 foobar@a2.net spf.go:308: check "a2.net" 0 0 spf.go:330: dns record "v=spf1 ip6:1a0a:cccc::/29 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [bad-a-mask] yml_test.go:251: test exp-contains-mx yml_test.go:253: checkhost 1.2.3.4 foobar@expmx.net spf.go:308: check "expmx.net" 0 0 spf.go:330: dns record "v=spf1 exp=mx:mymx.com ~all" spf.go:430: exp= ignored spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [exp-contains-mx] yml_test.go:251: test exp-contains-ptr yml_test.go:253: checkhost 1.2.3.4 foobar@expptr.net spf.go:308: check "expptr.net" 0 0 spf.go:330: dns record "v=spf1 exp=ptr:lalala.com ~all" spf.go:430: exp= ignored spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [exp-contains-ptr] yml_test.go:162: suite: Error on PTR forward resolution yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [lalala.com] yml_test.go:167: domain lalala.com yml_test.go:169: TIMEOUT yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 ptr:lalala.com ~all] yml_test.go:251: test broken-ptr-forward yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 ptr:lalala.com ~all" spf.go:600: ptr evaluating "lalala.com" in [] spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [broken-ptr-forward] yml_test.go:162: suite: Permanent error on 'exists' resolution yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 exists:lalala.com ~all] yml_test.go:167: domain lalala.com yml_test.go:169: SERVFAIL yml_test.go:251: test exists-perm-error yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 exists:lalala.com ~all" spf.go:426: "exists:lalala.com" temperror, lookup : test servfail error yml_test.go:260: success: temperror, lookup : test servfail error [exists-perm-error] yml_test.go:162: suite: Resolve H macros correctly yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 exists:%{h}.com ~all] yml_test.go:167: domain holahola.com yml_test.go:169: A: [127.0.0.2] yml_test.go:251: test resolve-h-macros yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 exists:%{h}.com ~all" spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}.com" to "holahola.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{h}.com" pass, matched exists yml_test.go:260: success: pass, matched exists [resolve-h-macros] yml_test.go:162: suite: Only include the first 10 PTR results yml_test.go:167: domain dom07.com yml_test.go:169: A: [127.0.0.7] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [dom01.com] yml_test.go:169: PTR: [dom02.com] yml_test.go:169: PTR: [dom03.com] yml_test.go:169: PTR: [dom04.com] yml_test.go:169: PTR: [dom05.com] yml_test.go:169: PTR: [dom06.com] yml_test.go:169: PTR: [dom07.com] yml_test.go:169: PTR: [dom08.com] yml_test.go:169: PTR: [dom09.com] yml_test.go:169: PTR: [dom10.com] yml_test.go:169: PTR: [domain.net] yml_test.go:167: domain dom02.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain dom04.com yml_test.go:169: A: [127.0.0.4] yml_test.go:167: domain dom05.com yml_test.go:169: A: [127.0.0.5] yml_test.go:167: domain dom08.com yml_test.go:169: A: [127.0.0.8] yml_test.go:167: domain dom09.com yml_test.go:169: A: [127.0.0.9] yml_test.go:167: domain dom10.com yml_test.go:169: A: [127.0.0.10] yml_test.go:167: domain domain.net yml_test.go:169: A: [127.0.0.1] yml_test.go:169: SPF: [v=spf1 ptr ~all] yml_test.go:167: domain dom01.com yml_test.go:169: A: [127.0.0.1] yml_test.go:167: domain dom03.com yml_test.go:169: A: [127.0.0.3] yml_test.go:167: domain dom06.com yml_test.go:169: A: [127.0.0.6] yml_test.go:251: test only-first-10-ptr yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 spf.go:330: dns record "v=spf1 ptr ~all" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "dom01.com." -> [{"127.0.0.1" ""}] spf.go:591: ptr forward resolution "dom02.com." -> [{"127.0.0.2" ""}] spf.go:591: ptr forward resolution "dom03.com." -> [{"127.0.0.3" ""}] spf.go:591: ptr forward resolution "dom04.com." -> [{"127.0.0.4" ""}] spf.go:591: ptr forward resolution "dom05.com." -> [{"127.0.0.5" ""}] spf.go:591: ptr forward resolution "dom06.com." -> [{"127.0.0.6" ""}] spf.go:591: ptr forward resolution "dom07.com." -> [{"127.0.0.7" ""}] spf.go:591: ptr forward resolution "dom08.com." -> [{"127.0.0.8" ""}] spf.go:591: ptr forward resolution "dom09.com." -> [{"127.0.0.9" ""}] spf.go:591: ptr forward resolution "dom10.com." -> [{"127.0.0.10" ""}] spf.go:600: ptr evaluating "domain.net" in ["dom01.com." "dom02.com." "dom03.com." "dom04.com." "dom05.com." "dom06.com." "dom07.com." "dom08.com." "dom09.com." "dom10.com."] spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [only-first-10-ptr] yml_test.go:162: suite: Resolution limits yml_test.go:167: domain d24 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d25 yml_test.go:169: SPF: [v=spf1 all] yml_test.go:167: domain okay.com yml_test.go:169: SPF: [v=spf1 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain d00 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d11 yml_test.go:169: SPF: [v=spf1 include:d21 ~all] yml_test.go:167: domain d14 yml_test.go:169: SPF: [v=spf1 include:d24 ~all] yml_test.go:167: domain d15 yml_test.go:169: SPF: [v=spf1 include:d25 ~all] yml_test.go:167: domain d23 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain bad.com yml_test.go:169: SPF: [v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain d12 yml_test.go:169: SPF: [v=spf1 include:d22 ~all] yml_test.go:167: domain d13 yml_test.go:169: SPF: [v=spf1 include:d23 ~all] yml_test.go:167: domain d21 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d22 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:251: test resolution-with-10-lookups yml_test.go:253: checkhost 1.2.3.4 foo@okay.com spf.go:308: check "okay.com" 0 0 spf.go:330: dns record "v=spf1 include:d11 include:d12 include:d13 include:d14 include:d15 -all" spf.go:308: check "d11" 1 0 spf.go:330: dns record "v=spf1 include:d21 ~all" spf.go:308: check "d21" 2 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d12" 3 0 spf.go:330: dns record "v=spf1 include:d22 ~all" spf.go:308: check "d22" 4 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d13" 5 0 spf.go:330: dns record "v=spf1 include:d23 ~all" spf.go:308: check "d23" 6 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d14" 7 0 spf.go:330: dns record "v=spf1 include:d24 ~all" spf.go:308: check "d24" 8 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d15" 9 0 spf.go:330: dns record "v=spf1 include:d25 ~all" spf.go:308: check "d25" 10 0 spf.go:330: dns record "v=spf1 all" spf.go:397: all: pass spf.go:401: "include:d25" pass, matched all spf.go:401: "include:d15" pass, matched all yml_test.go:260: success: pass, matched all [resolution-with-10-lookups] yml_test.go:251: test resolution-with-11-lookups yml_test.go:253: checkhost 1.2.3.4 foo@bad.com spf.go:308: check "bad.com" 0 0 spf.go:330: dns record "v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all" spf.go:308: check "d00" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:308: check "d11" 2 0 spf.go:330: dns record "v=spf1 include:d21 ~all" spf.go:308: check "d21" 3 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d12" 4 0 spf.go:330: dns record "v=spf1 include:d22 ~all" spf.go:308: check "d22" 5 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d13" 6 0 spf.go:330: dns record "v=spf1 include:d23 ~all" spf.go:308: check "d23" 7 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d14" 8 0 spf.go:330: dns record "v=spf1 include:d24 ~all" spf.go:308: check "d24" 9 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:397: all: softfail spf.go:308: check "d15" 10 0 spf.go:330: dns record "v=spf1 include:d25 ~all" spf.go:308: check "d25" 11 0 spf.go:330: dns record "v=spf1 all" spf.go:373: lookup limit reached spf.go:401: "include:d25" permerror, lookup limit reached spf.go:401: "include:d15" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [resolution-with-11-lookups] yml_test.go:162: suite: MX resolution limits yml_test.go:167: domain mx10 yml_test.go:169: SPF: [v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all] yml_test.go:167: domain mx11 yml_test.go:169: SPF: [v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all] yml_test.go:167: domain domain yml_test.go:169: MX: {1 blah1} yml_test.go:169: MX: {2 blah2} yml_test.go:169: MX: {3 blah3} yml_test.go:251: test mx-resolution-10-terms yml_test.go:253: checkhost 1.2.3.4 foo@mx10 spf.go:308: check "mx10" 0 0 spf.go:330: dns record "v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all" spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx10": "domain" [, ] spf.go:828: mx ips: [] spf.go:397: all: pass yml_test.go:260: success: pass, matched all [mx-resolution-10-terms] yml_test.go:251: test mx-resolution-11-terms yml_test.go:253: checkhost 1.2.3.4 foo@mx11 spf.go:308: check "mx11" 0 0 spf.go:330: dns record "v=spf1 mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain mx:domain all" spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:780: masks on "mx:domain", "mx11": "domain" [, ] spf.go:828: mx ips: [] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [mx-resolution-11-terms] yml_test.go:162: suite: NXDOMAIN tests yml_test.go:167: domain d02 yml_test.go:169: SPF: [v=spf1 include:doesnotexist all] yml_test.go:167: domain d03 yml_test.go:169: SPF: [v=spf1 redirect=doesnotexist] yml_test.go:167: domain sender yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain d00 yml_test.go:169: SPF: [v=spf1 mx -all] yml_test.go:169: MX: {10 doesnotexist} yml_test.go:169: MX: {20 sender} yml_test.go:167: domain d01 yml_test.go:169: SPF: [v=spf1 mx ip4:1.2.3.4 -all] yml_test.go:169: MX: {10 doesnotexist} yml_test.go:169: MX: {20 doesnotexist} yml_test.go:251: test include-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d02 spf.go:308: check "d02" 0 0 spf.go:330: dns record "v=spf1 include:doesnotexist all" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:doesnotexist" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-not-found] yml_test.go:251: test redirect-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d03 spf.go:308: check "d03" 0 0 spf.go:330: dns record "v=spf1 redirect=doesnotexist" spf.go:308: check "doesnotexist" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=doesnotexist": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-not-found] yml_test.go:251: test one-mx-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d00 spf.go:308: check "d00" 0 0 spf.go:330: dns record "v=spf1 mx -all" spf.go:780: masks on "mx", "d00": "d00" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [one-mx-not-found] yml_test.go:251: test all-mx-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d01 spf.go:308: check "d01" 0 0 spf.go:330: dns record "v=spf1 mx ip4:1.2.3.4 -all" spf.go:780: masks on "mx", "d01": "d01" [, ] spf.go:828: mx ips: [] spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [all-mx-not-found] yml_test.go:251: test domain-not-found yml_test.go:253: checkhost 1.2.3.4 foo@doesnotexist spf.go:308: check "doesnotexist" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-not-found] --- PASS: TestOurs (0.02s) === RUN TestRFC4408 yml_test.go:162: suite: Initial processing yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain a.example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] yml_test.go:167: domain hosed2.example.com yml_test.go:169: SPF: [v=spf1 €a:example.net -all] yml_test.go:167: domain hosed3.example.com yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain fine.example.com yml_test.go:169: TXT: [v=spf1 a -all] yml_test.go:167: domain example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] yml_test.go:167: domain nothosed.example.com yml_test.go:169: SPF: [v=spf1 a:example.net -all] yml_test.go:169: SPF: [–] yml_test.go:251: test helo-domain-literal yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-domain-literal] yml_test.go:251: test nolocalpart yml_test.go:253: checkhost 1.2.3.4 @example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp.example.net" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test non-ascii-result yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com spf.go:308: check "hosed3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net \u0096all" spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [non-ascii-result] yml_test.go:251: test two-spaces yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com spf.go:308: check "fine.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-spaces] yml_test.go:251: test toolonglabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [toolonglabel] yml_test.go:251: test longlabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [longlabel] yml_test.go:251: test emptylabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com spf.go:308: check "A...example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [emptylabel] yml_test.go:251: test helo-not-fqdn yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] yml_test.go:251: test domain-literal yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-literal] yml_test.go:251: test non-ascii-non-spf yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com spf.go:308: check "nothosed.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net -all" spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-non-spf] yml_test.go:162: suite: Record lookup yml_test.go:167: domain spfonly.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:167: domain spftimeout.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TIMEOUT yml_test.go:167: domain txttimeout.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain nospftxttimeout.example.net yml_test.go:169: SPF: [v=spf3 !a:yahoo.com -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT yml_test.go:167: domain both.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain txtonly.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:251: test nospftxttimeout yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net spf.go:308: check "nospftxttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:251: test alltimeout yml_test.go:253: checkhost 1.2.3.4 foo@alltimeout.example.net spf.go:308: check "alltimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [alltimeout] yml_test.go:251: test both yml_test.go:253: checkhost 1.2.3.4 foo@both.example.net spf.go:308: check "both.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [both] yml_test.go:251: test txtonly yml_test.go:253: checkhost 1.2.3.4 foo@txtonly.example.net spf.go:308: check "txtonly.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [txtonly] yml_test.go:251: test spfonly yml_test.go:253: checkhost 1.2.3.4 foo@spfonly.example.net spf.go:308: check "spfonly.example.net" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [spfonly] yml_test.go:251: test spftimeout yml_test.go:253: checkhost 1.2.3.4 foo@spftimeout.example.net spf.go:308: check "spftimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [spftimeout] yml_test.go:251: test txttimeout yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net spf.go:308: check "txttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:162: suite: Selecting records yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf10] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain example6.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [V=sPf1 +all] yml_test.go:167: domain example8.com yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain example9.com yml_test.go:169: SPF: [v=SpF1 ~all] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:251: test spfoverride yml_test.go:253: checkhost 1.2.3.4 foo@example4.com spf.go:308: check "example4.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [spfoverride] yml_test.go:251: test multitxt2 yml_test.go:253: checkhost 1.2.3.4 foo@example6.com spf.go:308: check "example6.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test multispf1 yml_test.go:253: checkhost 1.2.3.4 foo@example7.com spf.go:308: check "example7.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multispf1] yml_test.go:251: test multispf2 yml_test.go:253: checkhost 1.2.3.4 foo@example8.com spf.go:308: check "example8.com" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [multispf2] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test multitxt1 yml_test.go:253: checkhost 1.2.3.4 foo@example5.com spf.go:308: check "example5.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test case-insensitive yml_test.go:253: checkhost 1.2.3.4 foo@example9.com spf.go:308: check "example9.com" 0 0 spf.go:330: dns record "v=SpF1 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:162: suite: Record evaluation yml_test.go:167: domain t6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] yml_test.go:167: domain t7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:167: domain t10.example.com yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] yml_test.go:167: domain t9.example.com yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] yml_test.go:167: domain t11.example.com yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t2.example.com yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] yml_test.go:251: test modifier-charset-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com spf.go:308: check "t3.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] yml_test.go:251: test modifier-charset-bad2 yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com spf.go:308: check "t4.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] yml_test.go:251: test redirect-after-mechanisms1 yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com spf.go:308: check "t5.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:251: test default-result yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com spf.go:308: check "t7.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [default-result] yml_test.go:251: test invalid-domain-empty-label yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com spf.go:308: check "t10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mail.example...com -all" spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] yml_test.go:251: test invalid-domain-long yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com spf.go:308: check "t11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long] yml_test.go:251: test invalid-domain-long-via-macro yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com spf.go:308: check "t12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H}.bar -all" spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:162: suite: ALL mechanism syntax yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all/8] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ?all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 all -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all.] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:251: test all-arg yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:251: test all-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all/8" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-cidr] yml_test.go:251: test all-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [all-neutral] yml_test.go:251: test all-double yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 all -all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [all-double] yml_test.go:251: test all-dot yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -all." spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-dot] yml_test.go:162: suite: PTR mechanism syntax yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e3.example.com] yml_test.go:169: PTR: [e4.example.com] yml_test.go:169: PTR: [mail.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [e3.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [CAFE:BABE::1] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr:] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ptr/0 -all] yml_test.go:251: test ptr-nomatch-invalid yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:251: test ptr-match-ip6 yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:251: test ptr-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:" spf.go:421: "ptr:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [ptr-empty-domain] yml_test.go:251: test ptr-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr/0 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [ptr-cidr] yml_test.go:251: test ptr-match-target yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.com -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr:example.com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-target] yml_test.go:251: test ptr-match-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] yml_test.go:162: suite: A mechanism syntax yml_test.go:167: domain e8a.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:example.com:8080] yml_test.go:167: domain foo.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain foo.example.xn--zckzah yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 a:] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a//129 -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e5a.example.com yml_test.go:169: SPF: [v=spf1 a:museum] yml_test.go:167: domain e5b.example.com yml_test.go:169: SPF: [v=spf1 a:museum.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a//33 -all] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 a/33 -all] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24//64 -all] yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a//64 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 a:example.-com] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e8e.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24/64 -all] yml_test.go:251: test a-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-dual-cidr-ip4-match yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] yml_test.go:251: test a-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:406: "a/0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr4-0] yml_test.go:251: test a-dual-cidr-ip4-err yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com spf.go:308: check "e8e.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24/64 -all" spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] spf.go:406: "a/24/64" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-dual-cidr-ip6-match yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] yml_test.go:251: test a-dual-cidr-ip6-default yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com spf.go:308: check "e8a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24 -all" spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip1] yml_test.go:251: test a-ip6-dualstack yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com spf.go:308: check "ipv6.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] spf.go:768: a match: 1234::1, 1234::1, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [a-ip6-dualstack] yml_test.go:251: test a-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a//129 -all" spf.go:747: masks on "a//129", "e7.example.com": "" [, ] spf.go:406: "a//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a//33 -all" spf.go:747: masks on "a//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] yml_test.go:251: test a-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/33 -all" spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] spf.go:406: "a/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] yml_test.go:251: test a-dual-cidr-ip4-default yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com spf.go:308: check "e8b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//64 -all" spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] yml_test.go:251: test a-dash-in-toplabel yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com spf.go:308: check "e14.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:foo.example.xn--zckzah" pass, matched a yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] yml_test.go:251: test a-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-nxdomain] yml_test.go:251: test a-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] yml_test.go:251: test a-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] yml_test.go:251: test a-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] yml_test.go:251: test a-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip2] yml_test.go:162: suite: Include mechanism semantics and syntax yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 include: -all] yml_test.go:167: domain ip5.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] yml_test.go:167: domain ip7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] yml_test.go:167: domain erehwon.example.com yml_test.go:169: TXT: [v=spfl am not an SPF record] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e6.example.com -all" spf.go:308: check "e6.example.com" 1 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror spf.go:401: "include:e6.example.com" permerror, unknown field yml_test.go:260: success: permerror, unknown field [include-permerror] yml_test.go:251: test include-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [include-syntax-error] yml_test.go:251: test include-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" spf.go:874: macro contains / spf.go:401: "include:ip5.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [include-cidr] yml_test.go:251: test include-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 include: -all" spf.go:308: check "" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] yml_test.go:251: test include-temperror yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip8.example.com -all" spf.go:308: check "ip8.example.com" 1 0 spf.go:318: dns temp error: lookup : test timeout error spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:erehwon.example.com -all" spf.go:308: check "erehwon.example.com" 1 0 spf.go:330: dns record "" spf.go:401: "include:erehwon.example.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-none] yml_test.go:251: test include-fail yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" spf.go:308: check "ip5.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" spf.go:397: all: fail spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [include-fail] yml_test.go:251: test include-softfail yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip6.example.com all" spf.go:308: check "ip6.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.6 ~all" spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] yml_test.go:251: test include-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip7.example.com -all" spf.go:308: check "ip7.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" spf.go:397: all: neutral spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:162: suite: MX mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 mx//33 -all] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 mx/33 -all] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: MX: {0 e2a.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 mx:abc.123] yml_test.go:167: domain foo.example.com yml_test.go:169: MX: {0 foo1.example.com} yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: MX: {0 e2.example.com} yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: MX: {0 e2b.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 mx//129 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain foo1.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: MX: {0 foo:bar/baz.example.com} yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:169: MX: {0 e1.example.com} yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:251: test mx-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:831: mx match: 1234::1, 1234::1, [, /0] spf.go:411: "mx//0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] yml_test.go:251: test mx-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] yml_test.go:251: test mx-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//129 -all" spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] spf.go:411: "mx//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] yml_test.go:251: test mx-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:411: "mx/0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip1] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:828: mx ips: [1.1.1.1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-nxdomain] yml_test.go:251: test mx-empty yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-empty] yml_test.go:251: test mx-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-implicit] yml_test.go:251: test mx-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] yml_test.go:251: test mx-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//33 -all" spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6] yml_test.go:251: test mx-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/33 -all" spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] spf.go:411: "mx/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] yml_test.go:251: test mx-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip2] yml_test.go:251: test mx-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:828: mx ips: [] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-nxdomain] yml_test.go:251: test mx-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:162: suite: EXISTS mechanism syntax yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 exists] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exists:] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 exists" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [exists-implicit] yml_test.go:251: test exists-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com/24" spf.go:874: macro contains / spf.go:426: "exists:mail.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [exists-cidr] yml_test.go:251: test exists-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip4] yml_test.go:251: test exists-ip6 yml_test.go:253: checkhost cafe:babe::3 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip6] yml_test.go:251: test exists-ip6only yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-ip6only] yml_test.go:251: test exists-dnserr yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:err.example.com -all" spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] yml_test.go:251: test exists-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:" spf.go:426: "exists:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:162: suite: IP4 mechanism syntax yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip4] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:251: test cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 spf.go:416: "ip4:1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-0] yml_test.go:251: test cidr4-32 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 spf.go:416: "ip4:1.2.3.4/32" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-32] yml_test.go:251: test bad-ip4-short yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3" spf.go:416: "ip4:1.2.3" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] yml_test.go:251: test ip4-dual-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:251: test cidr4-33 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr4-33] yml_test.go:251: test bare-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [bare-ip4] yml_test.go:251: test bad-ip4-port yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] yml_test.go:162: suite: IP6 mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all ip6] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/0] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/129] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1//33] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip6:CAFE:BABE:8000::/33] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:251: test cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-0-ip4] yml_test.go:251: test cidr6-129 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-129] yml_test.go:251: test cidr6-bad yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-bad] yml_test.go:251: test cidr6-33 yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: spf.go:416: "ip6:CAFE:BABE:8000::/33" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-33] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-33-ip4] yml_test.go:251: test ip6-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] yml_test.go:251: test cidr6-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-0 yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-0] yml_test.go:162: suite: Semantics of exp and other modifiers yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 =all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 -all foo=%abc] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] yml_test.go:167: domain e15.example.com yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] yml_test.go:167: domain e17.example.com yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 1up=foo] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] yml_test.go:167: domain e11msg.example.com yml_test.go:169: TXT: [Answer a fool according to his folly.] yml_test.go:169: TXT: [Do not answer a fool according to his folly.] yml_test.go:167: domain e16.example.com yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e21msg.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e22.example.com yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] yml_test.go:167: domain badexp.example.com yml_test.go:169: TXT: [Explanation] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] yml_test.go:167: domain exp1.example.com yml_test.go:169: TXT: [No-see-um] yml_test.go:167: domain exp4.example.com yml_test.go:169: TXT: [%{l} in implementation] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] yml_test.go:167: domain e13msg.example.com yml_test.go:169: TXT: [The %{x}-files.] yml_test.go:167: domain e21.example.com yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] yml_test.go:167: domain twoexp.example.com yml_test.go:169: TXT: [one] yml_test.go:169: TXT: [two] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exp= -all] yml_test.go:167: domain e19.example.com yml_test.go:169: SPF: [v=spf1 default=pass] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] yml_test.go:167: domain e20.example.com yml_test.go:169: SPF: [v=spf1 default=+] yml_test.go:167: domain tworecs.example.com yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] yml_test.go:167: domain exp2.example.com yml_test.go:169: TXT: [See me.] yml_test.go:251: test include-ignores-exp yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 2 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-ignores-exp] yml_test.go:251: test dorky-sentinel yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [dorky-sentinel] yml_test.go:251: test exp-dns-error yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com spf.go:308: check "e21.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-dns-error] yml_test.go:251: test invalid-modifier yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 1up=foo" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [invalid-modifier] yml_test.go:251: test empty-modifier-name yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 =all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [empty-modifier-name] yml_test.go:251: test exp-no-txt yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com spf.go:308: check "e22.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-no-txt] yml_test.go:251: test non-ascii-exp yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com spf.go:308: check "nonascii.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-exp] yml_test.go:251: test redirect-none yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" spf.go:308: check "erehwon.example.com" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test redirect-cancels-exp yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" spf.go:430: exp= ignored spf.go:308: check "e2.example.com" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=e2.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-exp] yml_test.go:251: test redirect-cancels-prior-exp yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 1 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] yml_test.go:251: test two-exp-records yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com spf.go:308: check "tworecs.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:251: test exp-multiple-txt yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-multiple-txt] yml_test.go:251: test explanation-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com spf.go:308: check "e13.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:162: suite: Macro expansion rules yml_test.go:167: domain example.com yml_test.go:169: A: [192.168.90.76] yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] yml_test.go:167: domain macro%percent space%20url-space.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] yml_test.go:167: domain e6msg.example.com yml_test.go:169: TXT: [connect from %{p}] yml_test.go:167: domain example.com.d.spf.example.com yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] yml_test.go:167: domain msgbas2x.cos.example.com yml_test.go:169: A: [192.168.218.40] yml_test.go:167: domain exp.example.com yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] yml_test.go:167: domain 42.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:169: PTR: [mx.e7.example.com] yml_test.go:167: domain mx.example.com.ok.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain _spfh.example.com yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] yml_test.go:167: domain e1a.example.com yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain mx.example.com yml_test.go:169: A: [192.168.218.41] yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain 40.218.168.192.example.com yml_test.go:169: TXT: [Connections from %{c} not authorized.] yml_test.go:167: domain somewhat.long.exp.example.com yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] yml_test.go:167: domain e4msg.example.com yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] yml_test.go:167: domain mx.e7.example.com.should.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain a.spf.example.com yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] yml_test.go:167: domain msg.example.com yml_test.go:169: TXT: [This is a test.] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] yml_test.go:167: domain 40.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com yml_test.go:169: A: [192.168.218.42] yml_test.go:167: domain o.spf.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] yml_test.go:167: domain e1t.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] yml_test.go:167: 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 yml_test.go:169: TXT: [Congratulations! That was tricky.] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] yml_test.go:167: domain msg8.example.com yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:%{H} -all] yml_test.go:251: test trailing-dot-exp yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com spf.go:308: check "exp.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-dot-exp] yml_test.go:251: test domain-name-truncation yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com spf.go:308: check "somewhat.long.exp.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [domain-name-truncation] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] yml_test.go:251: test p-macro-ip6-novalid yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] yml_test.go:251: test hello-domain-literal yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [hello-domain-literal] yml_test.go:251: test macro-multiple-delimiters yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] yml_test.go:251: test invalid-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] yml_test.go:251: test invalid-trailing-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com spf.go:308: check "e1t.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] yml_test.go:251: test macro-mania-in-domain yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com spf.go:308: check "e1a.example.com" 0 0 spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a yml_test.go:260: success: pass, matched a [macro-mania-in-domain] yml_test.go:251: test v-macro-ip6 yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip6] yml_test.go:251: test p-macro-ip6-valid yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:251: test trailing-dot-domain yml_test.go:253: checkhost 192.168.218.40 test@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." spf.go:308: check "example.com.d.spf.example.com." 1 0 spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" spf.go:308: check "a.spf.example.com" 2 0 spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" spf.go:308: check "o.spf.example.com." 3 0 spf.go:330: dns record "v=spf1 ip4:192.168.218.40" spf.go:536: ip match: 192.168.218.40 spf.go:416: "ip4:192.168.218.40" pass, matched ip spf.go:401: "include:o.spf.example.com." pass, matched ip spf.go:434: "redirect=a.spf.example.com": pass, matched ip spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip yml_test.go:260: success: pass, matched ip [trailing-dot-domain] yml_test.go:251: test invalid-embedded-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com spf.go:308: check "e1e.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] yml_test.go:251: test exp-txt-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-txt-macro-char] yml_test.go:251: test p-macro-ip4-valid yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] yml_test.go:251: test invalid-hello-macro yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-hello-macro] yml_test.go:251: test macro-reverse-split-on-dash yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] yml_test.go:251: test v-macro-ip4 yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip4] yml_test.go:251: test undef-macro yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] spf.go:923: macro "a": [] spf.go:406: "a:%{a}.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test upper-macro yml_test.go:253: checkhost 192.168.218.42 jack&jill=up@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [upper-macro] yml_test.go:251: test require-valid-helo yml_test.go:253: checkhost 1.2.3.4 test@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "_spfh.%{d2}" to "_spfh.example.com" spf.go:308: check "_spfh.example.com" 1 0 spf.go:330: dns record "v=spf1 -a:%{h} +all" spf.go:747: masks on "a:%{h}", "_spfh.example.com": "%{h}" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}" to "OEMCOMPUTER" spf.go:514: void lookup: nxdomain spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] yml_test.go:162: suite: Processing limits yml_test.go:167: domain 5.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e1.example.com.] yml_test.go:169: PTR: [e2.example.com.] yml_test.go:169: PTR: [e3.example.com.] yml_test.go:169: PTR: [e4.example.com.] yml_test.go:169: PTR: [example.com.] yml_test.go:169: PTR: [e6.example.com.] yml_test.go:169: PTR: [e7.example.com.] yml_test.go:169: PTR: [e8.example.com.] yml_test.go:169: PTR: [e9.example.com.] yml_test.go:169: PTR: [e10.example.com.] yml_test.go:169: PTR: [e5.example.com.] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.20] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain inc.example.com yml_test.go:169: SPF: [v=spf1 a a a a a a a a] yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.21] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com] yml_test.go:169: A: [1.2.3.7] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:e2.example.com] yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [1.2.3.1] yml_test.go:169: A: [1.2.3.2] yml_test.go:169: A: [1.2.3.3] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: A: [1.2.3.5] yml_test.go:169: A: [1.2.3.6] yml_test.go:169: A: [1.2.3.7] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: A: [1.2.3.9] yml_test.go:169: A: [1.2.3.10] yml_test.go:169: A: [1.2.3.11] yml_test.go:169: A: [1.2.3.12] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example.com} yml_test.go:169: MX: {1 mail.example.com} yml_test.go:169: MX: {2 mail.example.com} yml_test.go:169: MX: {3 mail.example.com} yml_test.go:169: MX: {4 mail.example.com} yml_test.go:169: MX: {5 mail.example.com} yml_test.go:169: MX: {6 mail.example.com} yml_test.go:169: MX: {7 mail.example.com} yml_test.go:169: MX: {8 mail.example.com} yml_test.go:169: MX: {9 mail.example.com} yml_test.go:169: MX: {10 e4.example.com} yml_test.go:169: A: [1.2.3.5] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 2 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 3 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 4 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 5 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 6 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 7 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 8 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 9 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 10 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 11 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:373: lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] yml_test.go:251: test mech-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [mech-at-limit] yml_test.go:251: test mech-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] yml_test.go:251: test include-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:308: check "inc.example.com" 2 0 spf.go:330: dns record "v=spf1 a a a a a a a a" spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:444: fallback to neutral spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 2 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 3 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 4 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 5 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 6 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 7 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 8 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 9 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 10 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 11 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:373: lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-loop] yml_test.go:251: test mx-limit yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:411: "mx" permerror, too many MX records yml_test.go:260: success: permerror, too many MX records [mx-limit] yml_test.go:251: test ptr-limit yml_test.go:253: checkhost 1.2.3.5 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "e1.example.com." -> [{"1.2.3.6" ""}] spf.go:591: ptr forward resolution "e2.example.com." -> [{"1.2.3.7" ""}] spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e4.example.com." -> [{"1.2.3.5" ""}] spf.go:591: ptr forward resolution "e6.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e7.example.com." -> [{"1.2.3.20" ""}] spf.go:591: ptr forward resolution "e8.example.com." -> [{"1.2.3.4" ""}] spf.go:591: ptr forward resolution "e9.example.com." -> [{"1.2.3.21" ""}] spf.go:591: ptr forward resolution "e10.example.com." -> [{"1.2.3.1" ""} {"1.2.3.2" ""} {"1.2.3.3" ""} {"1.2.3.4" ""} {"1.2.3.5" ""} {"1.2.3.6" ""} {"1.2.3.7" ""} {"1.2.3.8" ""} {"1.2.3.9" ""} {"1.2.3.10" ""} {"1.2.3.11" ""} {"1.2.3.12" ""}] spf.go:600: ptr evaluating "e5.example.com" in ["e1.example.com." "e2.example.com." "e3.example.com." "e4.example.com." "e6.example.com." "e7.example.com." "e8.example.com." "e9.example.com." "e10.example.com."] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-limit] yml_test.go:251: test false-a-limit yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [false-a-limit] yml_test.go:251: test include-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [include-at-limit] --- PASS: TestRFC4408 (0.08s) === RUN TestRFC7208 yml_test.go:162: suite: Initial processing yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed2.example.com yml_test.go:169: SPF: [v=spf1 €a:example.net -all] yml_test.go:167: domain hosed3.example.com yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain nothosed.example.com yml_test.go:169: SPF: [v=spf1 a:example.net -all] yml_test.go:169: SPF: [–] yml_test.go:167: domain ctrl.example.com yml_test.go:169: SPF: [v=spf1 a:ctrl.example.com ptr -all] yml_test.go:169: A: [192.0.2.3] yml_test.go:167: domain fine.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain a.example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] yml_test.go:167: domain trail.example.com yml_test.go:169: SPF: [v=spf1 a -all ] yml_test.go:167: domain null.example.com yml_test.go:169: SPF: [v=spf1 ip4: 192.0.2.5 -all] yml_test.go:169: yml_test.go:167: domain badip.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.0.2.5 include:spf.protection.outlook.com ~all] yml_test.go:251: test longlabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [longlabel] yml_test.go:251: test helo-not-fqdn yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] yml_test.go:251: test non-ascii-result yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com spf.go:308: check "hosed3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net \u0096all" spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [non-ascii-result] yml_test.go:251: test null-text yml_test.go:253: checkhost 192.0.2.5 silly@null.example.com spf.go:308: check "null.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.5 -all" spf.go:536: ip match: 192.0.2.5 spf.go:416: "ip4:192.0.2.5" pass, matched ip yml_test.go:260: success: pass, matched ip [null-text] yml_test.go:251: test badip4 yml_test.go:253: checkhost 192.0.2.5 oops@badip.example.com spf.go:308: check "badip.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.5\n include:spf.protection.outlook.com ~all" spf.go:416: "ip4:192.0.2.5\n" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip4] yml_test.go:251: test emptylabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com spf.go:308: check "A...example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [emptylabel] yml_test.go:251: test trailing-space yml_test.go:253: checkhost 192.0.2.5 silly@trail.example.com spf.go:308: check "trail.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all " spf.go:747: masks on "a", "trail.example.com": "trail.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-space] yml_test.go:251: test toolonglabel yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [toolonglabel] yml_test.go:251: test helo-domain-literal yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-domain-literal] yml_test.go:251: test nolocalpart yml_test.go:253: checkhost 1.2.3.4 @example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp.example.net" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test two-spaces yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com spf.go:308: check "fine.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-spaces] yml_test.go:251: test domain-literal yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-literal] yml_test.go:251: test non-ascii-non-spf yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com spf.go:308: check "nothosed.example.com" 0 0 spf.go:330: dns record "v=spf1 a:example.net -all" spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-non-spf] yml_test.go:162: suite: Record lookup yml_test.go:167: domain both.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain txtonly.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain spfonly.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:167: domain spftimeout.example.net yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TIMEOUT yml_test.go:167: domain txttimeout.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain nospftxttimeout.example.net yml_test.go:169: SPF: [v=spf3 !a:yahoo.com -all] yml_test.go:169: TXT: [NONE] yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT yml_test.go:251: test nospftxttimeout yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net spf.go:308: check "nospftxttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:251: test alltimeout yml_test.go:253: checkhost 1.2.3.4 foo@alltimeout.example.net spf.go:308: check "alltimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [alltimeout] yml_test.go:251: test both yml_test.go:253: checkhost 1.2.3.4 foo@both.example.net spf.go:308: check "both.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [both] yml_test.go:251: test txtonly yml_test.go:253: checkhost 1.2.3.4 foo@txtonly.example.net spf.go:308: check "txtonly.example.net" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [txtonly] yml_test.go:251: test spfonly yml_test.go:253: checkhost 1.2.3.4 foo@spfonly.example.net spf.go:308: check "spfonly.example.net" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [spfonly] yml_test.go:251: test txttimeout yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net spf.go:308: check "txttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:162: suite: Selecting records yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf10] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain example6.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [V=sPf1 +all] yml_test.go:167: domain example9.com yml_test.go:169: SPF: [v=SpF1 ~all] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain example8.com yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:251: test spfoverride yml_test.go:253: checkhost 1.2.3.4 foo@example4.com spf.go:308: check "example4.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [spfoverride] yml_test.go:251: test multitxt1 yml_test.go:253: checkhost 1.2.3.4 foo@example5.com spf.go:308: check "example5.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test multitxt2 yml_test.go:253: checkhost 1.2.3.4 foo@example6.com spf.go:308: check "example6.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test multispf1 yml_test.go:253: checkhost 1.2.3.4 foo@example7.com spf.go:308: check "example7.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multispf1] yml_test.go:251: test multispf2 yml_test.go:253: checkhost 1.2.3.4 foo@example8.com spf.go:308: check "example8.com" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [multispf2] yml_test.go:251: test case-insensitive yml_test.go:253: checkhost 1.2.3.4 foo@example9.com spf.go:308: check "example9.com" 0 0 spf.go:330: dns record "v=SpF1 ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:162: suite: Record evaluation yml_test.go:167: domain t7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:167: domain t9.example.com yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] yml_test.go:167: domain t10.example.com yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] yml_test.go:167: domain t11.example.com yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] yml_test.go:167: domain t8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] yml_test.go:167: domain t2.example.com yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] yml_test.go:251: test invalid-domain-long-via-macro yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com spf.go:308: check "t12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H}.bar -all" spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:251: test modifier-charset-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com spf.go:308: check "t3.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] yml_test.go:251: test invalid-domain-empty-label yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com spf.go:308: check "t10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mail.example...com -all" spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] yml_test.go:251: test modifier-charset-bad2 yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com spf.go:308: check "t4.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] yml_test.go:251: test redirect-after-mechanisms1 yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com spf.go:308: check "t5.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:251: test default-result yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com spf.go:308: check "t7.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [default-result] yml_test.go:251: test invalid-domain-long yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com spf.go:308: check "t11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long] yml_test.go:162: suite: ALL mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all.] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all/8] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ?all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 all -all] yml_test.go:251: test all-dot yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -all." spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-dot] yml_test.go:251: test all-arg yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:251: test all-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all/8" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-cidr] yml_test.go:251: test all-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ?all" spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [all-neutral] yml_test.go:251: test all-double yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 all -all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [all-double] yml_test.go:162: suite: PTR mechanism syntax yml_test.go:167: domain loop4.example.com yml_test.go:169: CNAME: CNAME.example.com. yml_test.go:167: domain cname.example.com yml_test.go:169: CNAMELOOP yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [2001:db8::1] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] yml_test.go:167: 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 yml_test.go:169: PTR: [e3.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [CAFE:BABE::1] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr:] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.Com -all] yml_test.go:167: domain loop.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ptr/0 -all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e3.example.com] yml_test.go:169: PTR: [e4.example.com] yml_test.go:169: PTR: [mail.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [mail.Example.com] yml_test.go:167: domain 4.2.0.192.in-addr.arpa yml_test.go:169: PTR: [loop4.example.com.] yml_test.go:251: test ptr-match-target yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.com -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr:example.com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-target] yml_test.go:251: test ptr-match-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] yml_test.go:251: test ptr-nomatch-invalid yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:251: test ptr-match-ip6 yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr -all" spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:251: test ptr-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:" spf.go:421: "ptr:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [ptr-empty-domain] yml_test.go:251: test ptr-case-change yml_test.go:253: checkhost 2001:db8::1 bar@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr:example.Com -all" spf.go:591: ptr forward resolution "mail.Example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] spf.go:600: ptr evaluating "example.Com" in ["mail.example.com."] spf.go:604: ptr match: "mail.example.com." spf.go:421: "ptr:example.Com" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-case-change] yml_test.go:251: test ptr-cname-loop yml_test.go:253: checkhost 192.0.2.4 postmaster@loop.example.com spf.go:308: check "loop.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:600: ptr evaluating "loop.example.com" in [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-cname-loop] yml_test.go:251: test ptr-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr/0 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [ptr-cidr] yml_test.go:162: suite: A mechanism syntax yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a//129 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:example.com:8080] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 a:example.-com] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 a:] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a//33 -all] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 a/33 -all] yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24//64 -all] yml_test.go:167: domain e8a.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24 -all] yml_test.go:167: domain foo.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e5a.example.com yml_test.go:169: SPF: [v=spf1 a:museum] yml_test.go:167: domain e5b.example.com yml_test.go:169: SPF: [v=spf1 a:museum.] yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a//64 -all] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] yml_test.go:167: domain foo.example.xn--zckzah yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] yml_test.go:167: domain e8e.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24/64 -all] yml_test.go:251: test a-dual-cidr-ip4-err yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com spf.go:308: check "e8e.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24/64 -all" spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] spf.go:406: "a/24/64" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-dash-in-toplabel yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com spf.go:308: check "e14.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:foo.example.xn--zckzah" pass, matched a yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] yml_test.go:251: test a-dual-cidr-ip6-default yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com spf.go:308: check "e8a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24 -all" spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] yml_test.go:251: test a-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:406: "a/0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr4-0] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a//33 -all" spf.go:747: masks on "a//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] yml_test.go:251: test a-dual-cidr-ip6-match yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] yml_test.go:251: test a-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-nxdomain] yml_test.go:251: test a-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 a/33 -all" spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] spf.go:406: "a/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] yml_test.go:251: test a-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] yml_test.go:251: test a-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip1] yml_test.go:251: test a-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a:foo.example.com/24" spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip2] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] yml_test.go:251: test a-ip6-dualstack yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com spf.go:308: check "ipv6.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] spf.go:768: a match: 1234::1, 1234::1, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [a-ip6-dualstack] yml_test.go:251: test a-dual-cidr-ip4-match yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a/24//64 -all" spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] yml_test.go:251: test a-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 a//0 -all" spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] yml_test.go:251: test a-dual-cidr-ip4-default yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com spf.go:308: check "e8b.example.com" 0 0 spf.go:330: dns record "v=spf1 a//64 -all" spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] yml_test.go:251: test a-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a//129 -all" spf.go:747: masks on "a//129", "e7.example.com": "" [, ] spf.go:406: "a//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:162: suite: Include mechanism semantics and syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] yml_test.go:167: domain ip7.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] yml_test.go:167: domain ip5.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] yml_test.go:167: domain erehwon.example.com yml_test.go:169: TXT: [v=spfl am not an SPF record] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 include: -all] yml_test.go:251: test include-temperror yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip8.example.com -all" spf.go:308: check "ip8.example.com" 1 0 spf.go:318: dns temp error: lookup : test timeout error spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e6.example.com -all" spf.go:308: check "e6.example.com" 1 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror spf.go:401: "include:e6.example.com" permerror, unknown field yml_test.go:260: success: permerror, unknown field [include-permerror] yml_test.go:251: test include-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" spf.go:874: macro contains / spf.go:401: "include:ip5.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [include-cidr] yml_test.go:251: test include-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 include: -all" spf.go:308: check "" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] yml_test.go:251: test include-softfail yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip6.example.com all" spf.go:308: check "ip6.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.6 ~all" spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] yml_test.go:251: test include-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 include +all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [include-syntax-error] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:erehwon.example.com -all" spf.go:308: check "erehwon.example.com" 1 0 spf.go:330: dns record "" spf.go:401: "include:erehwon.example.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-none] yml_test.go:251: test include-fail yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" spf.go:308: check "ip5.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" spf.go:397: all: fail spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [include-fail] yml_test.go:251: test include-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 include:ip7.example.com -all" spf.go:308: check "ip7.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" spf.go:397: all: neutral spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:162: suite: MX mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain foo.example.com yml_test.go:169: MX: {0 foo1.example.com} yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:169: MX: {0 e1.example.com} yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] yml_test.go:169: MX: {0 e2.example.com} yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 mx:abc.123] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 mx//129 -all] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: MX: {0 foo:bar/baz.example.com} yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: MX: {0 e2a.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 mx/33 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: MX: {0 e2b.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 mx//33 -all] yml_test.go:167: domain foo1.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:251: test mx-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//33 -all" spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6] yml_test.go:251: test mx-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/33 -all" spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] spf.go:411: "mx/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] yml_test.go:251: test mx-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip1] yml_test.go:251: test mx-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 mx:foo.example.com/24" spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] spf.go:828: mx ips: [1.1.1.1 1.2.3.5] spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip2] yml_test.go:251: test mx-cidr4-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:251: test mx-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] yml_test.go:251: test mx-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:831: mx match: 1234::1, 1234::1, [, /0] spf.go:411: "mx//0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] yml_test.go:251: test mx-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//129 -all" spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] spf.go:411: "mx//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] yml_test.go:251: test mx-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:411: "mx/0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:828: mx ips: [1.1.1.1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-nxdomain] yml_test.go:251: test mx-cidr6-0-ip4mapped yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 spf.go:330: dns record "v=spf1 mx//0 -all" spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:828: mx ips: [1234::1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] yml_test.go:251: test mx-empty yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-empty] yml_test.go:251: test mx-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-implicit] yml_test.go:251: test mx-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 mx/0 -all" spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] spf.go:828: mx ips: [] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-nxdomain] yml_test.go:162: suite: EXISTS mechanism syntax yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exists:] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 exists] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT yml_test.go:251: test exists-ip6only yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-ip6only] yml_test.go:251: test exists-dnserr yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:err.example.com -all" spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] yml_test.go:251: test exists-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:" spf.go:426: "exists:" permerror, invalid domain yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 exists" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [exists-implicit] yml_test.go:251: test exists-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com/24" spf.go:874: macro contains / spf.go:426: "exists:mail.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [exists-cidr] yml_test.go:251: test exists-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip4] yml_test.go:251: test exists-ip6 yml_test.go:253: checkhost cafe:babe::3 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:mail.example.com" spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip6] yml_test.go:162: suite: IP4 mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip4] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] yml_test.go:251: test cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 spf.go:416: "ip4:1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-0] yml_test.go:251: test ip4-dual-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4" spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] yml_test.go:251: test cidr4-32 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 spf.go:416: "ip4:1.2.3.4/32" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-32] yml_test.go:251: test cidr4-33 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr4-33] yml_test.go:251: test bare-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [bare-ip4] yml_test.go:251: test bad-ip4-port yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] yml_test.go:251: test bad-ip4-short yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3" spf.go:416: "ip4:1.2.3" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] yml_test.go:162: suite: IP6 mechanism syntax yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all ip6] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/0] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1/129] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1//33] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip6:Cafe:Babe:8000::/33] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test cidr6-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-0 yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-0] yml_test.go:251: test cidr6-129 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-129] yml_test.go:251: test cidr6-33 yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: spf.go:416: "ip6:Cafe:Babe:8000::/33" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-33] yml_test.go:251: test cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-0-ip4] yml_test.go:251: test cidr6-bad yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-bad] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-33-ip4] yml_test.go:251: test ip6-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] yml_test.go:162: suite: Semantics of exp and other modifiers yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] yml_test.go:167: domain e14.example.com yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] yml_test.go:167: domain e16.example.com yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e17.example.com yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] yml_test.go:167: domain e21msg.example.com yml_test.go:169: TIMEOUT yml_test.go:167: domain e22.example.com yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] yml_test.go:167: domain exp2.example.com yml_test.go:169: TXT: [See me.] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 -all foo=%abc] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] yml_test.go:167: domain e19.example.com yml_test.go:169: SPF: [v=spf1 default=pass] yml_test.go:167: domain e21.example.com yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] yml_test.go:167: domain e23.example.com yml_test.go:169: SPF: [v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain exp1.example.com yml_test.go:169: TXT: [No-see-um] yml_test.go:167: domain exp4.example.com yml_test.go:169: TXT: [%{l} in implementation] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 =all] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] yml_test.go:167: domain e13msg.example.com yml_test.go:169: TXT: [The %{x}-files.] yml_test.go:167: domain e15.example.com yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] yml_test.go:167: domain e24.example.com yml_test.go:169: SPF: [v=spf1 redirect=testimplicit.example.com] yml_test.go:169: A: [192.0.2.1] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 1up=foo] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] yml_test.go:167: domain e20.example.com yml_test.go:169: SPF: [v=spf1 default=+] yml_test.go:167: domain badexp.example.com yml_test.go:169: TXT: [Explanation] yml_test.go:167: domain twoexp.example.com yml_test.go:169: TXT: [one] yml_test.go:169: TXT: [two] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain tworecs.example.com yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] yml_test.go:167: domain testimplicit.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [192.0.2.2] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] yml_test.go:167: domain e11msg.example.com yml_test.go:169: TXT: [Answer a fool according to his folly.] yml_test.go:169: TXT: [Do not answer a fool according to his folly.] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exp= -all] yml_test.go:251: test exp-void yml_test.go:253: checkhost 1.2.3.4 foo@e23.example.com spf.go:308: check "e23.example.com" 0 0 spf.go:330: dns record "v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all" spf.go:747: masks on "a:erehwon.example.com", "e23.example.com": "erehwon.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:foobar.com", "e23.example.com": "foobar.com" [, ] spf.go:514: void lookup: nxdomain spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-void] yml_test.go:251: test redirect-cancels-exp yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" spf.go:430: exp= ignored spf.go:308: check "e2.example.com" 1 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail spf.go:434: "redirect=e2.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-exp] yml_test.go:251: test invalid-modifier yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 1up=foo" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [invalid-modifier] yml_test.go:251: test exp-multiple-txt yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-multiple-txt] yml_test.go:251: test exp-no-txt yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com spf.go:308: check "e22.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-no-txt] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] yml_test.go:251: test non-ascii-exp yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com spf.go:308: check "nonascii.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-exp] yml_test.go:251: test redirect-implicit yml_test.go:253: checkhost 192.0.2.2 bar@e24.example.com spf.go:308: check "e24.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=testimplicit.example.com" spf.go:308: check "testimplicit.example.com" 1 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "testimplicit.example.com": "testimplicit.example.com" [, ] spf.go:768: a match: 192.0.2.2, 192.0.2.2, [, ] spf.go:406: "a" pass, matched a spf.go:434: "redirect=testimplicit.example.com": pass, matched a yml_test.go:260: success: pass, matched a [redirect-implicit] yml_test.go:251: test redirect-none yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" spf.go:308: check "erehwon.example.com" 1 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test include-ignores-exp yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 2 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-ignores-exp] yml_test.go:251: test exp-dns-error yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com spf.go:308: check "e21.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-dns-error] yml_test.go:251: test explanation-syntax-error yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com spf.go:308: check "e13.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:251: test redirect-cancels-prior-exp yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored spf.go:308: check "e4.example.com" 1 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] yml_test.go:251: test empty-modifier-name yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 =all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [empty-modifier-name] yml_test.go:251: test dorky-sentinel yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [dorky-sentinel] yml_test.go:251: test two-exp-records yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com spf.go:308: check "tworecs.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:162: suite: Macro expansion rules yml_test.go:167: domain somewhat.long.exp.example.com yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] yml_test.go:167: domain e6msg.example.com yml_test.go:169: TXT: [connect from %{p}] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:%{H} -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] yml_test.go:167: 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 yml_test.go:169: TXT: [Congratulations! That was tricky.] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] yml_test.go:167: domain e4msg.example.com yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.e7.example.com yml_test.go:169: A: [192.168.218.42] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain o.spf.example.com yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] yml_test.go:167: domain example.com yml_test.go:169: A: [192.168.90.76] yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] yml_test.go:167: domain exp.example.com yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] yml_test.go:167: domain e1a.example.com yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain macro%percent space%20url-space.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] yml_test.go:167: domain 40.218.168.192.example.com yml_test.go:169: TXT: [Connections from %{c} not authorized.] yml_test.go:167: domain example.com.d.spf.example.com yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] yml_test.go:167: domain 42.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:169: PTR: [mx.e7.example.com] yml_test.go:167: domain mx.e7.example.com.should.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] yml_test.go:167: domain msg8.example.com yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] yml_test.go:167: domain _spfh.example.com yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] yml_test.go:167: domain mx.example.com yml_test.go:169: A: [192.168.218.41] yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] yml_test.go:167: domain 40.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: domain mx.example.com.ok.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] yml_test.go:167: domain e1t.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain a.spf.example.com yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] yml_test.go:167: domain msgbas2x.cos.example.com yml_test.go:169: A: [192.168.218.40] yml_test.go:167: domain msg.example.com yml_test.go:169: TXT: [This is a test.] yml_test.go:251: test macro-mania-in-domain yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com spf.go:308: check "e1a.example.com" 0 0 spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a yml_test.go:260: success: pass, matched a [macro-mania-in-domain] yml_test.go:251: test exp-txt-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-txt-macro-char] yml_test.go:251: test v-macro-ip4 yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip4] yml_test.go:251: test v-macro-ip6 yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip6] yml_test.go:251: test require-valid-helo yml_test.go:253: checkhost 1.2.3.4 test@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all" spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "_spfh.%{d2}" to "_spfh.example.com" spf.go:308: check "_spfh.example.com" 1 0 spf.go:330: dns record "v=spf1 -a:%{h} +all" spf.go:747: masks on "a:%{h}", "_spfh.example.com": "%{h}" [, ] spf.go:923: macro "h": ["h" "h" "" "" ""] spf.go:1020: macro expanded "%{h}" to "OEMCOMPUTER" spf.go:514: void lookup: nxdomain spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] yml_test.go:251: test undef-macro yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] spf.go:923: macro "a": [] spf.go:406: "a:%{a}.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] yml_test.go:251: test p-macro-ip4-valid yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] yml_test.go:251: test p-macro-ip6-novalid yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] yml_test.go:251: test p-macro-ip6-valid yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:251: test invalid-hello-macro yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-hello-macro] yml_test.go:251: test macro-multiple-delimiters yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] yml_test.go:251: test trailing-dot-domain yml_test.go:253: checkhost 192.168.218.40 test@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." spf.go:308: check "example.com.d.spf.example.com." 1 0 spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" spf.go:308: check "a.spf.example.com" 2 0 spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" spf.go:308: check "o.spf.example.com." 3 0 spf.go:330: dns record "v=spf1 ip4:192.168.218.40" spf.go:536: ip match: 192.168.218.40 spf.go:416: "ip4:192.168.218.40" pass, matched ip spf.go:401: "include:o.spf.example.com." pass, matched ip spf.go:434: "redirect=a.spf.example.com": pass, matched ip spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip yml_test.go:260: success: pass, matched ip [trailing-dot-domain] yml_test.go:251: test trailing-dot-exp yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com spf.go:308: check "exp.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-dot-exp] yml_test.go:251: test invalid-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] yml_test.go:251: test invalid-trailing-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com spf.go:308: check "e1t.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] yml_test.go:251: test domain-name-truncation yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com spf.go:308: check "somewhat.long.exp.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [domain-name-truncation] yml_test.go:251: test upper-macro yml_test.go:253: checkhost 192.168.218.42 ~jack&jill=up-a_b3.c@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [upper-macro] yml_test.go:251: test hello-domain-literal yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [hello-domain-literal] yml_test.go:251: test macro-reverse-split-on-dash yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] yml_test.go:251: test invalid-embedded-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com spf.go:308: check "e1e.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] yml_test.go:162: suite: Processing limits yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example.com} yml_test.go:169: MX: {1 mail.example.com} yml_test.go:169: MX: {2 mail.example.com} yml_test.go:169: MX: {3 mail.example.com} yml_test.go:169: MX: {4 mail.example.com} yml_test.go:169: MX: {5 mail.example.com} yml_test.go:169: MX: {6 mail.example.com} yml_test.go:169: MX: {7 mail.example.com} yml_test.go:169: MX: {8 mail.example.com} yml_test.go:169: MX: {9 mail.example.com} yml_test.go:169: MX: {10 e4.example.com} yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 include:e3.example.com] yml_test.go:169: A: [1.2.3.7] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:e2.example.com] yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.20] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [1.2.3.1] yml_test.go:169: A: [1.2.3.2] yml_test.go:169: A: [1.2.3.3] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: A: [1.2.3.5] yml_test.go:169: A: [1.2.3.6] yml_test.go:169: A: [1.2.3.7] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: A: [1.2.3.9] yml_test.go:169: A: [1.2.3.10] yml_test.go:169: A: [1.2.3.11] yml_test.go:169: A: [1.2.3.12] yml_test.go:167: domain e11.example.com yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain 5.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e1.example.com.] yml_test.go:169: PTR: [e2.example.com.] yml_test.go:169: PTR: [e3.example.com.] yml_test.go:169: PTR: [e4.example.com.] yml_test.go:169: PTR: [example.com.] yml_test.go:169: PTR: [e6.example.com.] yml_test.go:169: PTR: [e7.example.com.] yml_test.go:169: PTR: [e8.example.com.] yml_test.go:169: PTR: [e9.example.com.] yml_test.go:169: PTR: [e10.example.com.] yml_test.go:169: PTR: [e5.example.com.] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} yml_test.go:167: domain inc.example.com yml_test.go:169: SPF: [v=spf1 a a a a a a a a] yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.21] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com ?all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 1 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 2 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 3 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 4 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 5 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 6 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 7 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 8 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 9 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 10 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:308: check "e1.example.com" 11 0 spf.go:330: dns record "v=spf1 ip4:1.1.1.1 redirect=e1.example.com" spf.go:373: lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] yml_test.go:251: test mx-limit yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] spf.go:411: "mx" permerror, too many MX records yml_test.go:260: success: permerror, too many MX records [mx-limit] yml_test.go:251: test mech-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] yml_test.go:251: test include-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [include-at-limit] yml_test.go:251: test void-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e12.example.com spf.go:308: check "e12.example.com" 0 0 spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com ?all" spf.go:747: masks on "a:err.example.com", "e12.example.com": "err.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err1.example.com", "e12.example.com": "err1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: neutral yml_test.go:260: success: neutral, matched all [void-at-limit] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 1 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 2 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 3 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 4 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 5 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 6 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 7 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 8 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 9 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:308: check "e2.example.com" 10 0 spf.go:330: dns record "v=spf1 include:e3.example.com" spf.go:308: check "e3.example.com" 11 0 spf.go:330: dns record "v=spf1 include:e2.example.com" spf.go:373: lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached spf.go:401: "include:e2.example.com" permerror, lookup limit reached spf.go:401: "include:e3.example.com" permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-loop] yml_test.go:251: test ptr-limit yml_test.go:253: checkhost 1.2.3.5 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ptr" spf.go:579: ptr names trimmed 11 down to 10 spf.go:591: ptr forward resolution "e1.example.com." -> [{"1.2.3.6" ""}] spf.go:591: ptr forward resolution "e2.example.com." -> [{"1.2.3.7" ""}] spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e4.example.com." -> [{"1.2.3.5" ""}] spf.go:591: ptr forward resolution "e6.example.com." -> [{"1.2.3.8" ""}] spf.go:591: ptr forward resolution "e7.example.com." -> [{"1.2.3.20" ""}] spf.go:591: ptr forward resolution "e8.example.com." -> [{"1.2.3.4" ""}] spf.go:591: ptr forward resolution "e9.example.com." -> [{"1.2.3.21" ""}] spf.go:591: ptr forward resolution "e10.example.com." -> [{"1.2.3.1" ""} {"1.2.3.2" ""} {"1.2.3.3" ""} {"1.2.3.4" ""} {"1.2.3.5" ""} {"1.2.3.6" ""} {"1.2.3.7" ""} {"1.2.3.8" ""} {"1.2.3.9" ""} {"1.2.3.10" ""} {"1.2.3.11" ""} {"1.2.3.12" ""}] spf.go:600: ptr evaluating "e5.example.com" in ["e1.example.com." "e2.example.com." "e3.example.com." "e4.example.com." "e6.example.com." "e7.example.com." "e8.example.com." "e9.example.com." "e10.example.com."] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-limit] yml_test.go:251: test false-a-limit yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 spf.go:330: dns record "v=spf1 a -all" spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [false-a-limit] yml_test.go:251: test mech-at-limit yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] spf.go:828: mx ips: [1.2.3.8] spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" pass, matched ip yml_test.go:260: success: pass, matched ip [mech-at-limit] yml_test.go:251: test include-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:308: check "inc.example.com" 2 0 spf.go:330: dns record "v=spf1 a a a a a a a a" spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] spf.go:444: fallback to neutral spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] yml_test.go:251: test void-over-limit yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com spf.go:308: check "e11.example.com" 0 0 spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all" spf.go:747: masks on "a:err.example.com", "e11.example.com": "err.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err1.example.com", "e11.example.com": "err1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:747: masks on "a:err2.example.com", "e11.example.com": "err2.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:378: void lookup limit reached yml_test.go:260: success: permerror, void lookup limit reached [void-over-limit] yml_test.go:162: suite: Test cases from implementation bugs yml_test.go:167: domain a.example.org yml_test.go:169: TXT: [Another TXT record.] yml_test.go:169: TXT: [v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all] yml_test.go:169: TXT: [More TXT records.] yml_test.go:169: TXT: [A third TXT record.] yml_test.go:169: AAAA: [2001:db8:ff0:300::4] yml_test.go:167: domain b.example.org yml_test.go:169: CNAME: a.example.org yml_test.go:167: domain mail.example.org yml_test.go:169: SPF: [v=spf1 include:a.example.org include:b.example.org -all] yml_test.go:169: A: [192.0.2.28] yml_test.go:167: domain smtp6-v.fe.example.org yml_test.go:169: AAAA: [2001:db8:ff0:100::2] yml_test.go:167: domain _expspf.example.org yml_test.go:169: TXT: [Sender domain not allowed from this host. Please see http://www.openspf.org/Why?s=mfrom&id=%{S}&ip=%{C}&r=%{R}] yml_test.go:167: domain webmail.pair.com yml_test.go:169: TXT: [v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32] yml_test.go:167: domain relay.pair.com yml_test.go:169: TXT: [v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all] yml_test.go:169: A: [192.0.2.131] yml_test.go:167: domain example.org yml_test.go:169: SPF: [v=spf1 mx redirect=_spf.example.com] yml_test.go:169: MX: {10 smtp.example.org} yml_test.go:169: MX: {10 smtp1.example.com} yml_test.go:167: domain smtp.example.org yml_test.go:169: A: [198.51.100.2] yml_test.go:169: AAAA: [2001:db8:ff0:100::3] yml_test.go:167: domain smtp1.example.com yml_test.go:169: A: [192.0.2.26] yml_test.go:169: AAAA: [2001:db8:ff0:200::2] yml_test.go:167: 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 yml_test.go:169: PTR: [smtp6-v.fe.example.org] yml_test.go:167: domain _spf.example.com yml_test.go:169: SPF: [v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all] yml_test.go:251: test bytes-bug yml_test.go:253: checkhost 2001:db8:ff0:100::2 test@example.org spf.go:308: check "example.org" 0 0 spf.go:330: dns record "v=spf1 mx redirect=_spf.example.com" spf.go:780: masks on "mx", "example.org": "example.org" [, ] spf.go:828: mx ips: [198.51.100.2 2001:db8:ff0:100::3 192.0.2.26 2001:db8:ff0:200::2] spf.go:308: check "_spf.example.com" 2 0 spf.go:330: dns record "v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all" spf.go:591: ptr forward resolution "smtp6-v.fe.example.org." -> [{"2001:db8:ff0:100::2" ""}] spf.go:600: ptr evaluating "fe.example.org" in ["smtp6-v.fe.example.org."] spf.go:604: ptr match: "smtp6-v.fe.example.org." spf.go:421: "ptr:fe.example.org" pass, matched ptr spf.go:434: "redirect=_spf.example.com": pass, matched ptr yml_test.go:260: success: pass, matched ptr [bytes-bug] yml_test.go:251: test cname-aliasing yml_test.go:253: checkhost 192.0.2.27 test@mail.example.org spf.go:308: check "mail.example.org" 0 0 spf.go:330: dns record "v=spf1 include:a.example.org include:b.example.org -all" spf.go:308: check "a.example.org" 1 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all" spf.go:308: check "webmail.pair.com" 2 0 spf.go:330: dns record "v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32" spf.go:444: fallback to neutral spf.go:308: check "relay.pair.com" 3 0 spf.go:330: dns record "v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all" spf.go:747: masks on "a", "relay.pair.com": "relay.pair.com" [, ] spf.go:397: all: fail spf.go:397: all: fail spf.go:308: check "b.example.org" 5 0 spf.go:330: dns record "v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all" spf.go:308: check "webmail.pair.com" 6 0 spf.go:330: dns record "v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32" spf.go:444: fallback to neutral spf.go:308: check "relay.pair.com" 7 0 spf.go:330: dns record "v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all" spf.go:747: masks on "a", "relay.pair.com": "relay.pair.com" [, ] spf.go:397: all: fail spf.go:397: all: fail spf.go:397: all: fail yml_test.go:260: success: fail, matched all [cname-aliasing] --- PASS: TestRFC7208 (0.18s) === RUN TestPySPF yml_test.go:162: suite: yml_test.go:167: domain lyme.eater.example.co.uk.1.2.3.5.spf.example.net yml_test.go:169: A: [127.0.0.1] yml_test.go:167: domain example.co.uk yml_test.go:169: SPF: [v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all] yml_test.go:251: test exists-pass yml_test.go:253: checkhost 1.2.3.5 lyme.eater@example.co.uk spf.go:308: check "example.co.uk" 0 0 spf.go:330: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" spf.go:780: masks on "mx/26", "example.co.uk": "example.co.uk" [/26, ] spf.go:514: void lookup: nxdomain spf.go:923: macro "l": ["l" "l" "" "" ""] spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.5.spf.example.net" spf.go:640: exists match: 127.0.0.1 spf.go:426: "exists:%{l}.%{d}.%{i}.spf.example.net" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-pass] yml_test.go:251: test exists-fail yml_test.go:253: checkhost 1.2.3.4 lyme.eater@example.co.uk spf.go:308: check "example.co.uk" 0 0 spf.go:330: dns record "v=spf1 mx/26 exists:%{l}.%{d}.%{i}.spf.example.net -all" spf.go:780: masks on "mx/26", "example.co.uk": "example.co.uk" [/26, ] spf.go:514: void lookup: nxdomain spf.go:923: macro "l": ["l" "l" "" "" ""] spf.go:923: macro "d": ["d" "d" "" "" ""] spf.go:923: macro "i": ["i" "i" "" "" ""] spf.go:1020: macro expanded "%{l}.%{d}.%{i}.spf.example.net" to "lyme.eater.example.co.uk.1.2.3.4.spf.example.net" spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exists-fail] yml_test.go:162: suite: yml_test.go:167: domain examplea.com yml_test.go:169: SPF: [v=spf1 a mx include:b.com] yml_test.go:167: domain exampleb.com yml_test.go:169: SPF: [v=spf1 a mx include:a.com] yml_test.go:167: domain examplec.com yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain exampled.com yml_test.go:169: SPF: [v=spf1 a:examplea.com:8080] yml_test.go:167: domain examplee.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain examplef.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:251: test incloop yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplea.com spf.go:308: check "examplea.com" 0 0 spf.go:330: dns record "v=spf1 a mx include:b.com" spf.go:747: masks on "a", "examplea.com": "examplea.com" [, ] spf.go:514: void lookup: nxdomain spf.go:780: masks on "mx", "examplea.com": "examplea.com" [, ] spf.go:514: void lookup: nxdomain spf.go:308: check "b.com" 3 2 spf.go:314: dns domain not found: lookup : domain not found (for testing) spf.go:401: "include:b.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [incloop] yml_test.go:251: test badall yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplec.com spf.go:308: check "examplec.com" 0 0 spf.go:330: dns record "v=spf1 -all:foobar" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [badall] yml_test.go:251: test tworecs yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplef.com spf.go:308: check "examplef.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [tworecs] yml_test.go:251: test badip yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplee.com spf.go:308: check "examplee.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip] yml_test.go:162: suite: yml_test.go:167: domain mail.example1.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1mx] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] spf.go:828: mx ips: [1.2.3.4] spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] yml_test.go:251: test nospace1 yml_test.go:253: checkhost 1.2.3.4 foo@example2.com spf.go:308: check "example2.com" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [nospace1] yml_test.go:251: test empty yml_test.go:253: checkhost 1.2.3.4 foo@example1.com spf.go:308: check "example1.com" 0 0 spf.go:330: dns record "v=spf1" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:162: suite: yml_test.go:167: domain mail.example.com yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:167: domain example.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 default=-] yml_test.go:167: domain e2.example.com yml_test.go:169: CNAME: c1.example.com. yml_test.go:167: domain c1.example.com yml_test.go:169: CNAME: c2.example.com. yml_test.go:167: domain c2.example.com yml_test.go:169: SPF: [v=spf1 a a:c1.example.com -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mx1.example.com yml_test.go:169: yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 a:mx1.example.com mx:mx1.example.com ~all] yml_test.go:251: test emptyMX yml_test.go:253: checkhost 1.2.3.4 spf.go:308: check "mail.example.com" 0 0 spf.go:330: dns record "v=spf1 mx" spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [emptyMX] yml_test.go:251: test localhost yml_test.go:253: checkhost 127.0.0.1 root@example.com spf.go:308: check "example.com" 0 0 spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [localhost] yml_test.go:251: test cname-chain yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a a:c1.example.com -all" spf.go:747: masks on "a", "e2.example.com": "e2.example.com" [, ] spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [cname-chain] yml_test.go:251: test null-cname yml_test.go:253: checkhost 1.2.3.4 bar@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 a:mx1.example.com mx:mx1.example.com ~all" spf.go:747: masks on "a:mx1.example.com", "e3.example.com": "mx1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:780: masks on "mx:mx1.example.com", "e3.example.com": "mx1.example.com" [, ] spf.go:514: void lookup: nxdomain spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [null-cname] --- PASS: TestPySPF (0.02s) PASS ok blitiri.com.ar/go/spf 0.396s ? blitiri.com.ar/go/spf/internal/dnstest [no test files] create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=golang dh_prep -O--buildsystem=golang dh_auto_install --destdir=debian/golang-blitiri-go-spf-dev/ -O--buildsystem=golang dh_installdocs -O--buildsystem=golang dh_installchangelogs -O--buildsystem=golang dh_installsystemduser -O--buildsystem=golang dh_perl -O--buildsystem=golang dh_link -O--buildsystem=golang dh_strip_nondeterminism -O--buildsystem=golang dh_compress -O--buildsystem=golang dh_fixperms -O--buildsystem=golang dh_missing -O--buildsystem=golang dh_installdeb -O--buildsystem=golang dh_golang -O--buildsystem=golang dh_gencontrol -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 -O--buildsystem=golang dh_builddeb -O--buildsystem=golang dpkg-deb: building package 'golang-blitiri-go-spf-dev' in '../golang-blitiri-go-spf-dev_1.5.1-1_all.deb'. dpkg-genbuildinfo --build=binary -O../golang-blitiri-go-spf_1.5.1-1_i386.buildinfo dpkg-genchanges --build=binary -O../golang-blitiri-go-spf_1.5.1-1_i386.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build . dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration I: user script /srv/workspace/pbuilder/59581/tmp/hooks/B01_cleanup starting I: user script /srv/workspace/pbuilder/59581/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env I: removing directory /srv/workspace/pbuilder/59581 and its subdirectories I: Current time: Sun Feb 23 17:15:40 +14 2025 I: pbuilder-time-stamp: 1740280540 + false + set +x Sun Feb 23 03:15:40 UTC 2025 I: Signing ./b2/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo as golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc Sun Feb 23 03:15:41 UTC 2025 I: Signed ./b2/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo as ./b2/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc Sun Feb 23 03:15:41 UTC 2025 - build #2 for golang-blitiri-go-spf/unstable/i386 on ionos2-i386 done. Starting cleanup. All cleanup done. Sun Feb 23 03:15:41 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-kxRpIVV9, removing. /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm: total 308 drwxr-xr-x 2 jenkins jenkins 4096 Feb 23 03:12 b1 drwxr-xr-x 2 jenkins jenkins 4096 Feb 23 03:15 b2 -rw-r--r-- 1 jenkins jenkins 2212 Sep 2 2022 golang-blitiri-go-spf_1.5.1-1.dsc -rw------- 1 jenkins jenkins 296150 Feb 23 03:12 rbuildlog.FX6wdxe /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b1: total 456 -rw-r--r-- 1 jenkins jenkins 292459 Feb 23 03:12 build.log -rw-r--r-- 1 jenkins jenkins 37120 Feb 23 03:12 golang-blitiri-go-spf-dev_1.5.1-1_all.deb -rw-r--r-- 1 jenkins jenkins 2392 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1.debian.tar.xz -rw-r--r-- 1 jenkins jenkins 2212 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1.dsc -rw-r--r-- 1 jenkins jenkins 4814 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo -rw-r--r-- 1 jenkins jenkins 5696 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc -rw-r--r-- 1 jenkins jenkins 1244 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_i386.changes -rw-r--r-- 1 jenkins jenkins 1694 Feb 23 03:12 golang-blitiri-go-spf_1.5.1-1_source.changes -rw-r--r-- 1 jenkins jenkins 88384 Feb 23 03:12 golang-blitiri-go-spf_1.5.1.orig.tar.gz /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b2: total 448 -rw-r--r-- 1 jenkins jenkins 294367 Feb 23 03:15 build.log -rw-r--r-- 1 jenkins jenkins 37120 Feb 23 03:15 golang-blitiri-go-spf-dev_1.5.1-1_all.deb -rw-r--r-- 1 jenkins jenkins 2392 Feb 23 03:15 golang-blitiri-go-spf_1.5.1-1.debian.tar.xz -rw-r--r-- 1 jenkins jenkins 2212 Feb 23 03:15 golang-blitiri-go-spf_1.5.1-1.dsc -rw-r--r-- 1 jenkins jenkins 4814 Feb 23 03:15 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo -rw-r--r-- 1 jenkins jenkins 5696 Feb 23 03:15 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc -rw-r--r-- 1 jenkins jenkins 1244 Feb 23 03:15 golang-blitiri-go-spf_1.5.1-1_i386.changes -rw-r--r-- 1 jenkins jenkins 1694 Feb 23 03:15 golang-blitiri-go-spf_1.5.1-1_source.changes -rw-r--r-- 1 jenkins jenkins 88384 Feb 23 03:15 golang-blitiri-go-spf_1.5.1.orig.tar.gz Sun Feb 23 03:15:41 UTC 2025 I: Deleting $TMPDIR on ionos2-i386.debian.net. Sun Feb 23 03:15:42 UTC 2025 I: golang-blitiri-go-spf_1.5.1-1_i386.changes: Format: 1.8 Date: Fri, 02 Sep 2022 16:39:47 +0100 Source: golang-blitiri-go-spf Binary: golang-blitiri-go-spf-dev Architecture: all Version: 1.5.1-1 Distribution: unstable Urgency: medium Maintainer: Debian Go Packaging Team Changed-By: Alberto Bertogli Description: golang-blitiri-go-spf-dev - SPF (Sender Policy Framework) implementation in Go Changes: golang-blitiri-go-spf (1.5.1-1) unstable; urgency=medium . * New upstream release (1.5.1) * Update golang-gopkg-yaml dependency from v2 to v3 * Add debian/watch file Checksums-Sha1: 8fd4c578d7fe08932709bea9794c686a3dd4a456 37120 golang-blitiri-go-spf-dev_1.5.1-1_all.deb abd27b3344aead860541df53db310aa187b07219 4814 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo Checksums-Sha256: 6e86ad909f55c29d1c662f31e8978ba95b1be87fccbbec6b5b1c526a37bbcfcd 37120 golang-blitiri-go-spf-dev_1.5.1-1_all.deb f1cdf9b98aceda7ee34f58828935d228d1eeef2f2d1990b2e6c63eca89612638 4814 golang-blitiri-go-spf_1.5.1-1_i386.buildinfo Files: 1eea499081b0e14cd45f765cdfce815c 37120 golang optional golang-blitiri-go-spf-dev_1.5.1-1_all.deb f0c57ebe0839a03655af10efbf913f34 4814 golang optional golang-blitiri-go-spf_1.5.1-1_i386.buildinfo removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/i386/golang-blitiri-go-spf_1.5.1-1.rbuild.log' removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/i386/golang-blitiri-go-spf_1.5.1-1.rbuild.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/logs/unstable/i386/golang-blitiri-go-spf_1.5.1-1.build1.log.gz' Diff of the two buildlogs: -- --- b1/build.log 2025-02-23 03:12:34.107450101 +0000 +++ b2/build.log 2025-02-23 03:15:41.690988356 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Fri Mar 27 21:34:50 -12 2026 -I: pbuilder-time-stamp: 1774690490 +I: Current time: Sun Feb 23 17:12:40 +14 2025 +I: pbuilder-time-stamp: 1740280360 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/unstable-reproducible-base.tgz] I: copying local configuration @@ -23,54 +23,86 @@ dpkg-source: info: unpacking golang-blitiri-go-spf_1.5.1-1.debian.tar.xz I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/50092/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D01_modify_environment starting +debug: Running on ionos2-i386. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Feb 23 03:13 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='i386' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=22 ' - DISTRIBUTION='unstable' - HOME='/root' - HOST_ARCH='i386' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="i686-pc-linux-gnu") + BASH_VERSION='5.2.37(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=i386 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=10 ' + DIRSTACK=() + DISTRIBUTION=unstable + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=i686 + HOST_ARCH=i386 IFS=' ' - INVOCATION_ID='9cc14c348e3341ce9963f1bf245479e4' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - LD_LIBRARY_PATH='/usr/lib/libeatmydata' - LD_PRELOAD='libeatmydata.so' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='50092' - PS1='# ' - PS2='> ' + INVOCATION_ID=7c40246b2a1e449ba6ed14539174ee7f + LANG=C + LANGUAGE=de_CH:de + LC_ALL=C + LD_LIBRARY_PATH=/usr/lib/libeatmydata + LD_PRELOAD=libeatmydata.so + MACHTYPE=i686-pc-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=59581 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/pbuilderrc_x3CL --distribution unstable --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b1 --logfile b1/build.log golang-blitiri-go-spf_1.5.1-1.dsc' - SUDO_GID='112' - SUDO_UID='107' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://213.165.73.152:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/pbuilderrc_DNEC --distribution unstable --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/unstable-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b2 --logfile b2/build.log golang-blitiri-go-spf_1.5.1-1.dsc' + SUDO_GID=112 + SUDO_UID=107 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://46.16.76.132:3128 I: uname -a - Linux ionos16-i386 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-31-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.128-1 (2025-02-07) x86_64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Nov 22 2024 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/50092/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -149,7 +181,7 @@ Get: 35 http://deb.debian.org/debian unstable/main i386 golang-go i386 2:1.24~2 [44.3 kB] Get: 36 http://deb.debian.org/debian unstable/main i386 golang-any i386 2:1.24~2 [5216 B] Get: 37 http://deb.debian.org/debian unstable/main i386 golang-gopkg-yaml.v3-dev all 3.0.1-3 [74.3 kB] -Fetched 68.1 MB in 0s (142 MB/s) +Fetched 68.1 MB in 2s (33.6 MB/s) Preconfiguring packages ... Selecting previously unselected package sensible-utils. (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 ... 19761 files and directories currently installed.) @@ -312,7 +344,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/golang-blitiri-go-spf-1.5.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../golang-blitiri-go-spf_1.5.1-1_source.changes +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for unstable +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/golang-blitiri-go-spf-1.5.1/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../golang-blitiri-go-spf_1.5.1-1_source.changes dpkg-buildpackage: info: source package golang-blitiri-go-spf dpkg-buildpackage: info: source version 1.5.1-1 dpkg-buildpackage: info: source distribution unstable @@ -330,63 +366,63 @@ dh_autoreconf -O--buildsystem=golang dh_auto_configure -O--buildsystem=golang dh_auto_build -O--buildsystem=golang - cd obj-i686-linux-gnu && go install -trimpath -v -p 22 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest -internal/coverage/rtcov + cd obj-i686-linux-gnu && go install -trimpath -v -p 10 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest internal/goarch -internal/msan -internal/nettrace internal/unsafeheader -unicode/utf8 -internal/asan -sync/atomic -internal/byteorder internal/godebugs -internal/runtime/atomic -unicode -cmp -internal/runtime/syscall -internal/profilerecord -internal/itoa -math/bits +internal/goexperiment +internal/coverage/rtcov internal/goos +internal/profilerecord +internal/byteorder +internal/abi internal/cpu -internal/goexperiment +internal/runtime/atomic +internal/asan +internal/msan internal/runtime/math -internal/abi internal/runtime/sys +internal/runtime/syscall +sync/atomic +math/bits internal/chacha8rand -math +internal/itoa +cmp +unicode/utf8 +unicode +internal/nettrace internal/bytealg +math internal/runtime/exithook internal/stringslite internal/race -internal/sync internal/runtime/maps +internal/sync runtime -weak -iter internal/reflectlite +iter +weak sync -maps slices +maps internal/bisect -internal/singleflight internal/testlog +internal/singleflight unique -runtime/cgo errors -internal/oserror -internal/godebug sort +runtime/cgo +internal/oserror +vendor/golang.org/x/net/dns/dnsmessage strconv -path io -vendor/golang.org/x/net/dns/dnsmessage +path syscall +internal/godebug bytes strings -net/netip reflect +net/netip regexp/syntax internal/syscall/execenv internal/syscall/unix @@ -395,16 +431,16 @@ context io/fs internal/poll -internal/fmtsort internal/filepathlite os +internal/fmtsort fmt net net/url blitiri.com.ar/go/spf/internal/dnstest blitiri.com.ar/go/spf dh_auto_test -O--buildsystem=golang - cd obj-i686-linux-gnu && go test -vet=off -v -p 22 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest + cd obj-i686-linux-gnu && go test -vet=off -v -p 10 blitiri.com.ar/go/spf blitiri.com.ar/go/spf/internal/dnstest === RUN TestBasic spf.go:308: check "domain" 0 0 spf.go:330: dns record "" @@ -583,7 +619,7 @@ spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 redirect=" spf.go:434: "redirect=": permerror, invalid domain ---- PASS: TestBasic (0.00s) +--- PASS: TestBasic (0.02s) === RUN TestIPv6 spf.go:308: check "domain" 0 0 spf.go:330: dns record "v=spf1 all" @@ -915,7 +951,7 @@ spf.go:1020: macro expanded "%{ir}.vvv" to "8.6.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.vvv" spf.go:640: exists match: 1.1.1.1 spf.go:426: "exists:%{ir}.vvv" pass, matched exists ---- PASS: TestMacros (0.00s) +--- PASS: TestMacros (0.01s) === RUN TestMacrosV4 spf.go:308: check "domain.com" 0 0 spf.go:330: dns record "v=spf1 +a:sr-%{sr}-sr" @@ -1112,7 +1148,7 @@ spf.go:503: void lookup: no answers spf.go:378: void lookup limit reached spf.go:401: "include:domain2" permerror, void lookup limit reached ---- PASS: TestOverrideVoidLookupLimit (0.00s) +--- PASS: TestOverrideVoidLookupLimit (0.01s) === RUN TestWithContext spf.go:308: check "domain1" 0 0 spf.go:330: dns record "v=spf1 include:domain2" @@ -1163,18 +1199,18 @@ yml_test.go:162: suite: Simple successes yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 +all] - yml_test.go:251: test test1 + yml_test.go:251: test test2 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass - yml_test.go:260: success: pass, matched all [test1] - yml_test.go:251: test test2 + yml_test.go:260: success: pass, matched all [test2] + yml_test.go:251: test test1 yml_test.go:253: checkhost 1.2.3.4 foobar@example.net spf.go:308: check "example.net" 0 0 spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass - yml_test.go:260: success: pass, matched all [test2] + yml_test.go:260: success: pass, matched all [test1] yml_test.go:162: suite: Simple failures yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all] @@ -1191,10 +1227,6 @@ spf.go:397: all: fail yml_test.go:260: success: fail, matched all [test1] yml_test.go:162: suite: Regexp edge cases for "a", "mx" and "ptr" - yml_test.go:167: domain a1.net - yml_test.go:169: SPF: [v=spf1 ip6:a::a ~all] - yml_test.go:167: domain a2.net - yml_test.go:169: SPF: [v=spf1 ip6:1a0a:cccc::/29 ~all] yml_test.go:167: domain expmx.net yml_test.go:169: SPF: [v=spf1 exp=mx:mymx.com ~all] yml_test.go:169: MX: {10 mymx.com} @@ -1206,6 +1238,10 @@ yml_test.go:169: PTR: [ptr:lalala.com.] yml_test.go:167: domain ptr:lalala.com yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain a1.net + yml_test.go:169: SPF: [v=spf1 ip6:a::a ~all] + yml_test.go:167: domain a2.net + yml_test.go:169: SPF: [v=spf1 ip6:1a0a:cccc::/29 ~all] yml_test.go:251: test ipv6-with-a yml_test.go:253: checkhost a::a foobar@a1.net spf.go:308: check "a1.net" 0 0 @@ -1234,12 +1270,12 @@ spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [exp-contains-ptr] yml_test.go:162: suite: Error on PTR forward resolution + yml_test.go:167: domain 4.3.2.1.in-addr.arpa + yml_test.go:169: PTR: [lalala.com] yml_test.go:167: domain lalala.com yml_test.go:169: TIMEOUT yml_test.go:167: domain domain.net yml_test.go:169: SPF: [v=spf1 ptr:lalala.com ~all] - yml_test.go:167: domain 4.3.2.1.in-addr.arpa - yml_test.go:169: PTR: [lalala.com] yml_test.go:251: test broken-ptr-forward yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 @@ -1273,12 +1309,8 @@ spf.go:426: "exists:%{h}.com" pass, matched exists yml_test.go:260: success: pass, matched exists [resolve-h-macros] yml_test.go:162: suite: Only include the first 10 PTR results - yml_test.go:167: domain dom06.com - yml_test.go:169: A: [127.0.0.6] - yml_test.go:167: domain dom08.com - yml_test.go:169: A: [127.0.0.8] - yml_test.go:167: domain dom09.com - yml_test.go:169: A: [127.0.0.9] + yml_test.go:167: domain dom07.com + yml_test.go:169: A: [127.0.0.7] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [dom01.com] yml_test.go:169: PTR: [dom02.com] @@ -1293,8 +1325,14 @@ yml_test.go:169: PTR: [domain.net] yml_test.go:167: domain dom02.com yml_test.go:169: A: [127.0.0.2] - yml_test.go:167: domain dom07.com - yml_test.go:169: A: [127.0.0.7] + yml_test.go:167: domain dom04.com + yml_test.go:169: A: [127.0.0.4] + yml_test.go:167: domain dom05.com + yml_test.go:169: A: [127.0.0.5] + yml_test.go:167: domain dom08.com + yml_test.go:169: A: [127.0.0.8] + yml_test.go:167: domain dom09.com + yml_test.go:169: A: [127.0.0.9] yml_test.go:167: domain dom10.com yml_test.go:169: A: [127.0.0.10] yml_test.go:167: domain domain.net @@ -1304,10 +1342,8 @@ yml_test.go:169: A: [127.0.0.1] yml_test.go:167: domain dom03.com yml_test.go:169: A: [127.0.0.3] - yml_test.go:167: domain dom04.com - yml_test.go:169: A: [127.0.0.4] - yml_test.go:167: domain dom05.com - yml_test.go:169: A: [127.0.0.5] + yml_test.go:167: domain dom06.com + yml_test.go:169: A: [127.0.0.6] yml_test.go:251: test only-first-10-ptr yml_test.go:253: checkhost 1.2.3.4 foo@domain.net spf.go:308: check "domain.net" 0 0 @@ -1327,32 +1363,32 @@ spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [only-first-10-ptr] yml_test.go:162: suite: Resolution limits + yml_test.go:167: domain d24 + yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:167: domain d25 + yml_test.go:169: SPF: [v=spf1 all] yml_test.go:167: domain okay.com yml_test.go:169: SPF: [v=spf1 include:d11 include:d12 include:d13 include:d14 include:d15 -all] - yml_test.go:167: domain bad.com - yml_test.go:169: SPF: [v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain d00 yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain d11 yml_test.go:169: SPF: [v=spf1 include:d21 ~all] - yml_test.go:167: domain d13 - yml_test.go:169: SPF: [v=spf1 include:d23 ~all] yml_test.go:167: domain d14 yml_test.go:169: SPF: [v=spf1 include:d24 ~all] yml_test.go:167: domain d15 yml_test.go:169: SPF: [v=spf1 include:d25 ~all] - yml_test.go:167: domain d21 + yml_test.go:167: domain d23 yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:167: domain bad.com + yml_test.go:169: SPF: [v=spf1 include:d00 include:d11 include:d12 include:d13 include:d14 include:d15 -all] yml_test.go:167: domain d12 yml_test.go:169: SPF: [v=spf1 include:d22 ~all] - yml_test.go:167: domain d22 - yml_test.go:169: SPF: [v=spf1 -all] - yml_test.go:167: domain d23 + yml_test.go:167: domain d13 + yml_test.go:169: SPF: [v=spf1 include:d23 ~all] + yml_test.go:167: domain d21 yml_test.go:169: SPF: [v=spf1 -all] - yml_test.go:167: domain d24 + yml_test.go:167: domain d22 yml_test.go:169: SPF: [v=spf1 -all] - yml_test.go:167: domain d25 - yml_test.go:169: SPF: [v=spf1 all] yml_test.go:251: test resolution-with-10-lookups yml_test.go:253: checkhost 1.2.3.4 foo@okay.com spf.go:308: check "okay.com" 0 0 @@ -1492,10 +1528,6 @@ spf.go:373: lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [mx-resolution-11-terms] yml_test.go:162: suite: NXDOMAIN tests - yml_test.go:167: domain d01 - yml_test.go:169: SPF: [v=spf1 mx ip4:1.2.3.4 -all] - yml_test.go:169: MX: {10 doesnotexist} - yml_test.go:169: MX: {20 doesnotexist} yml_test.go:167: domain d02 yml_test.go:169: SPF: [v=spf1 include:doesnotexist all] yml_test.go:167: domain d03 @@ -1506,6 +1538,26 @@ yml_test.go:169: SPF: [v=spf1 mx -all] yml_test.go:169: MX: {10 doesnotexist} yml_test.go:169: MX: {20 sender} + yml_test.go:167: domain d01 + yml_test.go:169: SPF: [v=spf1 mx ip4:1.2.3.4 -all] + yml_test.go:169: MX: {10 doesnotexist} + yml_test.go:169: MX: {20 doesnotexist} + yml_test.go:251: test include-not-found + yml_test.go:253: checkhost 1.2.3.4 foo@d02 + spf.go:308: check "d02" 0 0 + spf.go:330: dns record "v=spf1 include:doesnotexist all" + spf.go:308: check "doesnotexist" 1 0 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + spf.go:401: "include:doesnotexist" permerror, no DNS record found + yml_test.go:260: success: permerror, no DNS record found [include-not-found] + yml_test.go:251: test redirect-not-found + yml_test.go:253: checkhost 1.2.3.4 foo@d03 + spf.go:308: check "d03" 0 0 + spf.go:330: dns record "v=spf1 redirect=doesnotexist" + spf.go:308: check "doesnotexist" 1 0 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + spf.go:434: "redirect=doesnotexist": permerror, no DNS record found + yml_test.go:260: success: permerror, no DNS record found [redirect-not-found] yml_test.go:251: test one-mx-not-found yml_test.go:253: checkhost 1.2.3.4 foo@d00 spf.go:308: check "d00" 0 0 @@ -1529,46 +1581,41 @@ spf.go:308: check "doesnotexist" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [domain-not-found] - yml_test.go:251: test include-not-found - yml_test.go:253: checkhost 1.2.3.4 foo@d02 - spf.go:308: check "d02" 0 0 - spf.go:330: dns record "v=spf1 include:doesnotexist all" - spf.go:308: check "doesnotexist" 1 0 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - spf.go:401: "include:doesnotexist" permerror, no DNS record found - yml_test.go:260: success: permerror, no DNS record found [include-not-found] - yml_test.go:251: test redirect-not-found - yml_test.go:253: checkhost 1.2.3.4 foo@d03 - spf.go:308: check "d03" 0 0 - spf.go:330: dns record "v=spf1 redirect=doesnotexist" - spf.go:308: check "doesnotexist" 1 0 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - spf.go:434: "redirect=doesnotexist": permerror, no DNS record found - yml_test.go:260: success: permerror, no DNS record found [redirect-not-found] --- PASS: TestOurs (0.02s) === RUN TestRFC4408 yml_test.go:162: suite: Initial processing yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] + yml_test.go:167: domain a.example.net + yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] - yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com - yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:167: domain hosed2.example.com + yml_test.go:169: SPF: [v=spf1 €a:example.net -all] yml_test.go:167: domain hosed3.example.com yml_test.go:169: SPF: [v=spf1 a:example.net –all] - yml_test.go:167: domain nothosed.example.com - yml_test.go:169: SPF: [v=spf1 a:example.net -all] - yml_test.go:169: SPF: [–] + yml_test.go:167: domain fine.example.com + yml_test.go:169: TXT: [v=spf1 a -all] yml_test.go:167: domain example.com yml_test.go:169: TIMEOUT - yml_test.go:167: domain a.example.net - yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] + yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com + yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] - yml_test.go:167: domain hosed2.example.com - yml_test.go:169: SPF: [v=spf1 €a:example.net -all] - yml_test.go:167: domain fine.example.com - yml_test.go:169: TXT: [v=spf1 a -all] + yml_test.go:167: domain nothosed.example.com + yml_test.go:169: SPF: [v=spf1 a:example.net -all] + yml_test.go:169: SPF: [–] + yml_test.go:251: test helo-domain-literal + yml_test.go:253: checkhost 1.2.3.5 + spf.go:308: check "[1.2.3.5]" 0 0 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + yml_test.go:260: success: none, no DNS record found [helo-domain-literal] + yml_test.go:251: test nolocalpart + yml_test.go:253: checkhost 1.2.3.4 @example.net + spf.go:308: check "example.net" 0 0 + spf.go:330: dns record "v=spf1 -all exp=exp.example.net" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test non-ascii-result yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com spf.go:308: check "hosed3.example.com" 0 0 @@ -1606,12 +1653,6 @@ spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] - yml_test.go:251: test nolocalpart - yml_test.go:253: checkhost 1.2.3.4 @example.net - spf.go:308: check "example.net" 0 0 - spf.go:330: dns record "v=spf1 -all exp=exp.example.net" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [nolocalpart] yml_test.go:251: test domain-literal yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] spf.go:308: check "[1.2.3.5]" 0 0 @@ -1625,17 +1666,7 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-non-spf] - yml_test.go:251: test helo-domain-literal - yml_test.go:253: checkhost 1.2.3.5 - spf.go:308: check "[1.2.3.5]" 0 0 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - yml_test.go:260: success: none, no DNS record found [helo-domain-literal] yml_test.go:162: suite: Record lookup - yml_test.go:167: domain both.example.net - yml_test.go:169: TXT: [v=spf1 -all] - yml_test.go:169: SPF: [v=spf1 -all] - yml_test.go:167: domain txtonly.example.net - yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:167: domain spfonly.example.net yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [NONE] @@ -1652,6 +1683,16 @@ yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT + yml_test.go:167: domain both.example.net + yml_test.go:169: TXT: [v=spf1 -all] + yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:167: domain txtonly.example.net + yml_test.go:169: TXT: [v=spf1 -all] + yml_test.go:251: test nospftxttimeout + yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net + spf.go:308: check "nospftxttimeout.example.net" 0 0 + spf.go:318: dns temp error: lookup : test timeout error + yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:251: test alltimeout yml_test.go:253: checkhost 1.2.3.4 foo@alltimeout.example.net spf.go:308: check "alltimeout.example.net" 0 0 @@ -1684,14 +1725,13 @@ spf.go:308: check "txttimeout.example.net" 0 0 spf.go:318: dns temp error: lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] - yml_test.go:251: test nospftxttimeout - yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net - spf.go:308: check "nospftxttimeout.example.net" 0 0 - spf.go:318: dns temp error: lookup : test timeout error - yml_test.go:260: success: temperror, lookup : test timeout error [nospftxttimeout] yml_test.go:162: suite: Selecting records - yml_test.go:167: domain mail.example1.com - yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain example3.com + yml_test.go:169: SPF: [v=spf10] + yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:169: MX: {0 mail.example1.com} + yml_test.go:167: domain example1.com + yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] @@ -1702,16 +1742,10 @@ yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] - yml_test.go:167: domain example9.com - yml_test.go:169: SPF: [v=SpF1 ~all] - yml_test.go:167: domain example3.com - yml_test.go:169: SPF: [v=spf10] - yml_test.go:169: SPF: [v=spf1 mx] - yml_test.go:169: MX: {0 mail.example1.com} - yml_test.go:167: domain example1.com - yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:167: domain mail.example1.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] @@ -1719,20 +1753,14 @@ yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] - yml_test.go:251: test nospace1 - yml_test.go:253: checkhost 1.2.3.4 foo@example2.com - spf.go:308: check "example2.com" 0 0 - spf.go:330: dns record "" - yml_test.go:260: success: none, no DNS record found [nospace1] - yml_test.go:251: test nospace2 - yml_test.go:253: checkhost 1.2.3.4 foo@example3.com - spf.go:308: check "example3.com" 0 0 - spf.go:330: dns record "v=spf1 mx" - spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] - spf.go:828: mx ips: [1.2.3.4] - spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] - spf.go:411: "mx" pass, matched mx - yml_test.go:260: success: pass, matched mx [nospace2] + yml_test.go:167: domain example9.com + yml_test.go:169: SPF: [v=SpF1 ~all] + yml_test.go:251: test empty + yml_test.go:253: checkhost 1.2.3.4 foo@example1.com + spf.go:308: check "example1.com" 0 0 + spf.go:330: dns record "v=spf1" + spf.go:444: fallback to neutral + yml_test.go:260: success: neutral, [empty] yml_test.go:251: test spfoverride yml_test.go:253: checkhost 1.2.3.4 foo@example4.com spf.go:308: check "example4.com" 0 0 @@ -1755,22 +1783,30 @@ spf.go:330: dns record "v=spf1 +all" spf.go:397: all: pass yml_test.go:260: success: pass, matched all [multispf2] - yml_test.go:251: test empty - yml_test.go:253: checkhost 1.2.3.4 foo@example1.com - spf.go:308: check "example1.com" 0 0 - spf.go:330: dns record "v=spf1" - spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [empty] - yml_test.go:251: test multitxt1 - yml_test.go:253: checkhost 1.2.3.4 foo@example5.com - spf.go:308: check "example5.com" 0 0 - spf.go:322: multiple dns records - yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] + yml_test.go:251: test nospace1 + yml_test.go:253: checkhost 1.2.3.4 foo@example2.com + spf.go:308: check "example2.com" 0 0 + spf.go:330: dns record "" + yml_test.go:260: success: none, no DNS record found [nospace1] + yml_test.go:251: test nospace2 + yml_test.go:253: checkhost 1.2.3.4 foo@example3.com + spf.go:308: check "example3.com" 0 0 + spf.go:330: dns record "v=spf1 mx" + spf.go:780: masks on "mx", "example3.com": "example3.com" [, ] + spf.go:828: mx ips: [1.2.3.4] + spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] + spf.go:411: "mx" pass, matched mx + yml_test.go:260: success: pass, matched mx [nospace2] + yml_test.go:251: test multitxt1 + yml_test.go:253: checkhost 1.2.3.4 foo@example5.com + spf.go:308: check "example5.com" 0 0 + spf.go:322: multiple dns records + yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] yml_test.go:251: test case-insensitive yml_test.go:253: checkhost 1.2.3.4 foo@example9.com spf.go:308: check "example9.com" 0 0 @@ -1778,38 +1814,64 @@ spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:162: suite: Record evaluation - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] - yml_test.go:167: domain t8.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] - yml_test.go:167: domain t9.example.com - yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] + yml_test.go:167: domain t7.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:167: domain t10.example.com yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] - yml_test.go:167: domain t11.example.com - yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] - yml_test.go:167: domain t2.example.com - yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] + yml_test.go:167: domain t8.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] + yml_test.go:167: domain t9.example.com + yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] + yml_test.go:167: domain t11.example.com + yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] + yml_test.go:167: domain t2.example.com + yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] - yml_test.go:167: domain t7.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] + yml_test.go:251: test modifier-charset-bad1 + yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com + spf.go:308: check "t3.example.com" 0 0 + spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] + yml_test.go:251: test modifier-charset-bad2 + yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com + spf.go:308: check "t4.example.com" 0 0 + spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] + yml_test.go:251: test redirect-after-mechanisms1 + yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com + spf.go:308: check "t5.example.com" 0 0 + spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" + spf.go:397: all: softfail + yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:251: test default-result yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com spf.go:308: check "t7.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [default-result] + yml_test.go:251: test invalid-domain-empty-label + yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com + spf.go:308: check "t10.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:mail.example...com -all" + spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] yml_test.go:251: test invalid-domain-long yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com spf.go:308: check "t11.example.com" 0 0 @@ -1828,45 +1890,25 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] - yml_test.go:251: test modifier-charset-bad1 - yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com - spf.go:308: check "t3.example.com" 0 0 - spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] - yml_test.go:251: test modifier-charset-bad2 - yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com - spf.go:308: check "t4.example.com" 0 0 - spf.go:330: dns record "v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [modifier-charset-bad2] - yml_test.go:251: test invalid-domain-empty-label - yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com - spf.go:308: check "t10.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:mail.example...com -all" - spf.go:747: masks on "a:mail.example...com", "t10.example.com": "mail.example...com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] - yml_test.go:251: test redirect-after-mechanisms1 - yml_test.go:253: checkhost 1.2.3.4 foo@t5.example.com - spf.go:308: check "t5.example.com" 0 0 - spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" - spf.go:397: all: softfail - yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] yml_test.go:162: suite: ALL mechanism syntax - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 -all.] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 -all:foobar] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 -all/8] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 ?all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 all -all] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 -all.] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 -all:foobar] + yml_test.go:251: test all-arg + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all:foobar" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:251: test all-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 @@ -1891,13 +1933,15 @@ spf.go:330: dns record "v=spf1 -all." spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [all-dot] - yml_test.go:251: test all-arg - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all:foobar" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [all-arg] yml_test.go:162: suite: PTR mechanism syntax + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] + yml_test.go:167: domain 4.3.2.1.in-addr.arpa + yml_test.go:169: PTR: [e3.example.com] + yml_test.go:169: PTR: [e4.example.com] + yml_test.go:169: PTR: [mail.example.com] + yml_test.go:167: 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 + yml_test.go:169: PTR: [e3.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] @@ -1910,14 +1954,24 @@ yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ptr/0 -all] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] - yml_test.go:167: domain 4.3.2.1.in-addr.arpa - yml_test.go:169: PTR: [e3.example.com] - yml_test.go:169: PTR: [e4.example.com] - yml_test.go:169: PTR: [mail.example.com] - yml_test.go:167: 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 - yml_test.go:169: PTR: [e3.example.com] + yml_test.go:251: test ptr-nomatch-invalid + yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 ptr -all" + spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] + spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] + spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] + yml_test.go:251: test ptr-match-ip6 + yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com + spf.go:308: check "e3.example.com" 0 0 + spf.go:330: dns record "v=spf1 ptr -all" + spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] + spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] + spf.go:604: ptr match: "e3.example.com." + spf.go:421: "ptr" pass, matched ptr + yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:251: test ptr-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 @@ -1950,69 +2004,53 @@ spf.go:604: ptr match: "e3.example.com." spf.go:421: "ptr" pass, matched ptr yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] - yml_test.go:251: test ptr-nomatch-invalid - yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 ptr -all" - spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] - spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""}] - spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] - yml_test.go:251: test ptr-match-ip6 - yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 ptr -all" - spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] - spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com."] - spf.go:604: ptr match: "e3.example.com." - spf.go:421: "ptr" pass, matched ptr - yml_test.go:260: success: pass, matched ptr [ptr-match-ip6] yml_test.go:162: suite: A mechanism syntax + yml_test.go:167: domain e8a.example.com + yml_test.go:169: A: [1.2.3.5] + yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] + yml_test.go:169: SPF: [v=spf1 a/24 -all] + yml_test.go:167: domain e9.example.com + yml_test.go:169: SPF: [v=spf1 a:example.com:8080] + yml_test.go:167: domain foo.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: A: [1.2.3.5] + yml_test.go:167: domain foo.example.xn--zckzah + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] - yml_test.go:167: domain e5a.example.com - yml_test.go:169: SPF: [v=spf1 a:museum] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 a//129 -all] - yml_test.go:167: domain e9.example.com - yml_test.go:169: SPF: [v=spf1 a:example.com:8080] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e13.example.com yml_test.go:169: SPF: [v=spf1 a:] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 a//129 -all] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 a/0 -all] + yml_test.go:167: domain e5a.example.com + yml_test.go:169: SPF: [v=spf1 a:museum] + yml_test.go:167: domain e5b.example.com + yml_test.go:169: SPF: [v=spf1 a:museum.] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 a//33 -all] yml_test.go:167: domain e6a.example.com yml_test.go:169: SPF: [v=spf1 a/33 -all] + yml_test.go:167: domain e11.example.com + yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] + yml_test.go:167: domain e14.example.com + yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e2.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: AAAA: [1234::2] - yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] - yml_test.go:167: domain e2b.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: SPF: [v=spf1 a//0 -all] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] - yml_test.go:167: domain e11.example.com - yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] - yml_test.go:167: domain foo.example.xn--zckzah - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 a/0 -all] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24//64 -all] - yml_test.go:167: domain e8a.example.com - yml_test.go:169: A: [1.2.3.5] - yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] - yml_test.go:169: SPF: [v=spf1 a/24 -all] yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] @@ -2023,36 +2061,49 @@ yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 a:example.-com] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 a:abc.123] - yml_test.go:167: domain e5b.example.com - yml_test.go:169: SPF: [v=spf1 a:museum.] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 a//33 -all] + yml_test.go:167: domain e2.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: AAAA: [1234::2] + yml_test.go:169: SPF: [v=spf1 a/0 -all] + yml_test.go:167: domain e2b.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: SPF: [v=spf1 a//0 -all] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e8e.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] yml_test.go:169: SPF: [v=spf1 a/24/64 -all] - yml_test.go:167: domain foo.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: A: [1.2.3.5] - yml_test.go:167: domain e14.example.com - yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] - yml_test.go:251: test a-dash-in-toplabel - yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com - spf.go:308: check "e14.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" - spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] - spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] - spf.go:406: "a:foo.example.xn--zckzah" pass, matched a - yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] - yml_test.go:251: test a-bad-cidr6 - yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com - spf.go:308: check "e7.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//129 -all" - spf.go:747: masks on "a//129", "e7.example.com": "" [, ] - spf.go:406: "a//129" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] + yml_test.go:251: test a-cidr6-0-ip4mapped + yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com + spf.go:308: check "e2a.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//0 -all" + spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] + yml_test.go:251: test a-dual-cidr-ip4-match + yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/24//64 -all" + spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] + spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] + spf.go:406: "a/24//64" pass, matched a + yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] + yml_test.go:251: test a-cidr4-0 + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/0 -all" + spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] + spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] + spf.go:406: "a/0" pass, matched a + yml_test.go:260: success: pass, matched a [a-cidr4-0] + yml_test.go:251: test a-dual-cidr-ip4-err + yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com + spf.go:308: check "e8e.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/24/64 -all" + spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] + spf.go:406: "a/24/64" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-dual-cidr-ip6-match yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 @@ -2061,6 +2112,13 @@ spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] spf.go:406: "a/24//64" pass, matched a yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] + yml_test.go:251: test a-dual-cidr-ip6-default + yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com + spf.go:308: check "e8a.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/24 -all" + spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 @@ -2069,43 +2127,21 @@ spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip1] - yml_test.go:251: test a-dual-cidr-ip4-default - yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com - spf.go:308: check "e8b.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//64 -all" - spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] - yml_test.go:251: test a-multi-ip2 - yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com - spf.go:308: check "e10.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:foo.example.com/24" - spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] - spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] - spf.go:406: "a:foo.example.com/24" pass, matched a - yml_test.go:260: success: pass, matched a [a-multi-ip2] - yml_test.go:251: test a-cidr4-0-ip6 - yml_test.go:253: checkhost 1234::1 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/0 -all" - spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] - yml_test.go:251: test a-dual-cidr-ip4-match - yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/24//64 -all" - spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] - spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] - spf.go:406: "a/24//64" pass, matched a - yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] - yml_test.go:251: test a-cidr6-0-nxdomain - yml_test.go:253: checkhost 1234::1 foo@e2b.example.com - spf.go:308: check "e2b.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//0 -all" - spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] + yml_test.go:251: test a-ip6-dualstack + yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com + spf.go:308: check "ipv6.example.com" 0 0 + spf.go:330: dns record "v=spf1 a -all" + spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] + spf.go:768: a match: 1234::1, 1234::1, [, ] + spf.go:406: "a" pass, matched a + yml_test.go:260: success: pass, matched a [a-ip6-dualstack] + yml_test.go:251: test a-bad-cidr6 + yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com + spf.go:308: check "e7.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//129 -all" + spf.go:747: masks on "a//129", "e7.example.com": "" [, ] + spf.go:406: "a//129" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 @@ -2114,6 +2150,28 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] + yml_test.go:251: test a-bad-cidr4 + yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com + spf.go:308: check "e6a.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/33 -all" + spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] + spf.go:406: "a/33" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] + yml_test.go:251: test a-dual-cidr-ip4-default + yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com + spf.go:308: check "e8b.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//64 -all" + spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] + yml_test.go:251: test a-dash-in-toplabel + yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com + spf.go:308: check "e14.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:foo.example.xn--zckzah -all" + spf.go:747: masks on "a:foo.example.xn--zckzah", "e14.example.com": "foo.example.xn--zckzah" [, ] + spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] + spf.go:406: "a:foo.example.xn--zckzah" pass, matched a + yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] yml_test.go:251: test a-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 @@ -2129,35 +2187,6 @@ spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] - yml_test.go:251: test a-bad-cidr4 - yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com - spf.go:308: check "e6a.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/33 -all" - spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] - spf.go:406: "a/33" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] - yml_test.go:251: test a-dual-cidr-ip4-err - yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com - spf.go:308: check "e8e.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/24/64 -all" - spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] - spf.go:406: "a/24/64" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] - yml_test.go:251: test a-cidr4-0 - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/0 -all" - spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] - spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] - spf.go:406: "a/0" pass, matched a - yml_test.go:260: success: pass, matched a [a-cidr4-0] - yml_test.go:251: test a-cidr6-0-ip4mapped - yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com - spf.go:308: check "e2a.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//0 -all" - spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 @@ -2166,52 +2195,59 @@ spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] - yml_test.go:251: test a-dual-cidr-ip6-default - yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com - spf.go:308: check "e8a.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/24 -all" - spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] + yml_test.go:251: test a-cidr6-0-nxdomain + yml_test.go:253: checkhost 1234::1 foo@e2b.example.com + spf.go:308: check "e2b.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//0 -all" + spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] - yml_test.go:251: test a-ip6-dualstack - yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com - spf.go:308: check "ipv6.example.com" 0 0 - spf.go:330: dns record "v=spf1 a -all" - spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] - spf.go:768: a match: 1234::1, 1234::1, [, ] - spf.go:406: "a" pass, matched a - yml_test.go:260: success: pass, matched a [a-ip6-dualstack] + yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] + yml_test.go:251: test a-cidr4-0-ip6 + yml_test.go:253: checkhost 1234::1 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/0 -all" + spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] + yml_test.go:251: test a-multi-ip2 + yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com + spf.go:308: check "e10.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:foo.example.com/24" + spf.go:747: masks on "a:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] + spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] + spf.go:406: "a:foo.example.com/24" pass, matched a + yml_test.go:260: success: pass, matched a [a-multi-ip2] yml_test.go:162: suite: Include mechanism semantics and syntax - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 include: -all] + yml_test.go:167: domain ip5.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] + yml_test.go:167: domain ip7.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT - yml_test.go:167: domain erehwon.example.com - yml_test.go:169: TXT: [v=spfl am not an SPF record] - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] - yml_test.go:167: domain ip5.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] - yml_test.go:167: domain ip7.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 include: -all] + yml_test.go:167: domain erehwon.example.com + yml_test.go:169: TXT: [v=spfl am not an SPF record] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 @@ -2234,6 +2270,22 @@ spf.go:874: macro contains / spf.go:401: "include:ip5.example.com/24" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [include-cidr] + yml_test.go:251: test include-empty-domain + yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 include: -all" + spf.go:308: check "" 1 0 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + spf.go:401: "include:" permerror, no DNS record found + yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] + yml_test.go:251: test include-temperror + yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 include:ip8.example.com -all" + spf.go:308: check "ip8.example.com" 1 0 + spf.go:318: dns temp error: lookup : test timeout error + spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error + yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 @@ -2260,22 +2312,6 @@ spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] - yml_test.go:251: test include-temperror - yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 include:ip8.example.com -all" - spf.go:308: check "ip8.example.com" 1 0 - spf.go:318: dns temp error: lookup : test timeout error - spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error - yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] - yml_test.go:251: test include-empty-domain - yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 include: -all" - spf.go:308: check "" 1 0 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - spf.go:401: "include:" permerror, no DNS record found - yml_test.go:260: success: permerror, no DNS record found [include-empty-domain] yml_test.go:251: test include-neutral yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 @@ -2286,10 +2322,23 @@ spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:162: suite: MX mechanism syntax - yml_test.go:167: domain e12.example.com - yml_test.go:169: SPF: [v=spf1 mx:example.-com] - yml_test.go:167: domain e13.example.com - yml_test.go:169: SPF: [v=spf1 mx: -all] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] + yml_test.go:169: MX: {0 } + yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 mx//33 -all] + yml_test.go:167: domain e6a.example.com + yml_test.go:169: SPF: [v=spf1 mx/33 -all] + yml_test.go:167: domain e2a.example.com + yml_test.go:169: AAAA: [1234::1] + yml_test.go:169: MX: {0 e2a.example.com} + yml_test.go:169: SPF: [v=spf1 mx//0 -all] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 mx:abc.123] yml_test.go:167: domain foo.example.com yml_test.go:169: MX: {0 foo1.example.com} yml_test.go:167: domain e2.example.com @@ -2297,68 +2346,33 @@ yml_test.go:169: AAAA: [1234::2] yml_test.go:169: MX: {0 e2.example.com} yml_test.go:169: SPF: [v=spf1 mx/0 -all] + yml_test.go:167: domain e2b.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: MX: {0 e2b.example.com} + yml_test.go:169: SPF: [v=spf1 mx//0 -all] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 mx//129 -all] + yml_test.go:167: domain e10.example.com + yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain foo1.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: A: [1.2.3.5] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 mx] - yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e11.example.com yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: MX: {0 foo:bar/baz.example.com} yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 mx//129 -all] - yml_test.go:167: domain e9.example.com - yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] - yml_test.go:167: domain e10.example.com - yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:169: MX: {0 } - yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:167: domain e12.example.com + yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 mx/0 -all] yml_test.go:169: MX: {0 e1.example.com} - yml_test.go:167: domain e2a.example.com - yml_test.go:169: AAAA: [1234::1] - yml_test.go:169: MX: {0 e2a.example.com} - yml_test.go:169: SPF: [v=spf1 mx//0 -all] - yml_test.go:167: domain e2b.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: MX: {0 e2b.example.com} - yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 mx//33 -all] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 mx:abc.123] - yml_test.go:167: domain e6a.example.com - yml_test.go:169: SPF: [v=spf1 mx/33 -all] - yml_test.go:251: test mx-bad-cidr4 - yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com - spf.go:308: check "e6a.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx/33 -all" - spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] - spf.go:411: "mx/33" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] - yml_test.go:251: test mx-bad-cidr6 - yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com - spf.go:308: check "e7.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx//129 -all" - spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] - spf.go:411: "mx//129" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] - yml_test.go:251: test mx-cidr6-0-ip4 - yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com - spf.go:308: check "e2a.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx//0 -all" - spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] - spf.go:828: mx ips: [1234::1] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] + yml_test.go:167: domain e9.example.com + yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] + yml_test.go:167: domain e13.example.com + yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:251: test mx-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 @@ -2368,31 +2382,21 @@ spf.go:831: mx match: 1234::1, 1234::1, [, /0] spf.go:411: "mx//0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] - yml_test.go:251: test mx-implicit - yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx" - spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [mx-implicit] - yml_test.go:251: test mx-cidr6 - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx//33 -all" - spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] - spf.go:514: void lookup: nxdomain + yml_test.go:251: test mx-cidr6-0-ip4 + yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com + spf.go:308: check "e2a.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx//0 -all" + spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] + spf.go:828: mx ips: [1234::1] spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [mx-cidr6] - yml_test.go:251: test mx-multi-ip1 - yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com - spf.go:308: check "e10.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx:foo.example.com/24" - spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] - spf.go:828: mx ips: [1.1.1.1 1.2.3.5] - spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] - spf.go:411: "mx:foo.example.com/24" pass, matched mx - yml_test.go:260: success: pass, matched mx [mx-multi-ip1] + yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] + yml_test.go:251: test mx-bad-cidr6 + yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com + spf.go:308: check "e7.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx//129 -all" + spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] + spf.go:411: "mx//129" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] yml_test.go:251: test mx-cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 @@ -2402,6 +2406,15 @@ spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] spf.go:411: "mx/0" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-cidr4-0] + yml_test.go:251: test mx-multi-ip1 + yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com + spf.go:308: check "e10.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx:foo.example.com/24" + spf.go:780: masks on "mx:foo.example.com/24", "e10.example.com": "foo.example.com" [/24, ] + spf.go:828: mx ips: [1.1.1.1 1.2.3.5] + spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] + spf.go:411: "mx:foo.example.com/24" pass, matched mx + yml_test.go:260: success: pass, matched mx [mx-multi-ip1] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 @@ -2418,6 +2431,37 @@ spf.go:828: mx ips: [] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-empty] + yml_test.go:251: test mx-implicit + yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx" + spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:444: fallback to neutral + yml_test.go:260: success: neutral, [mx-implicit] + yml_test.go:251: test mx-cidr6-0-ip4mapped + yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com + spf.go:308: check "e2a.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx//0 -all" + spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] + spf.go:828: mx ips: [1234::1] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] + yml_test.go:251: test mx-cidr6 + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx//33 -all" + spf.go:780: masks on "mx//33", "e6.example.com": "e6.example.com" [, /33] + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [mx-cidr6] + yml_test.go:251: test mx-bad-cidr4 + yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com + spf.go:308: check "e6a.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx/33 -all" + spf.go:780: masks on "mx/33", "e6a.example.com": "" [, ] + spf.go:411: "mx/33" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr4] yml_test.go:251: test mx-multi-ip2 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 @@ -2427,14 +2471,6 @@ spf.go:831: mx match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:411: "mx:foo.example.com/24" pass, matched mx yml_test.go:260: success: pass, matched mx [mx-multi-ip2] - yml_test.go:251: test mx-cidr4-0-ip6 - yml_test.go:253: checkhost 1234::1 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx/0 -all" - spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] - spf.go:828: mx ips: [1.1.1.1 1234::2] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:251: test mx-nxdomain yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 @@ -2443,39 +2479,33 @@ spf.go:828: mx ips: [] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-nxdomain] - yml_test.go:251: test mx-cidr6-0-ip4mapped - yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com - spf.go:308: check "e2a.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx//0 -all" - spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] - spf.go:828: mx ips: [1234::1] + yml_test.go:251: test mx-cidr4-0-ip6 + yml_test.go:253: checkhost 1234::1 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx/0 -all" + spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] + spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] + yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] yml_test.go:162: suite: EXISTS mechanism syntax + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 exists] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 exists:] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 exists] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] - yml_test.go:251: test exists-empty-domain - yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:" - spf.go:426: "exists:" permerror, invalid domain - yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 @@ -2515,45 +2545,33 @@ spf.go:330: dns record "v=spf1 exists:err.example.com -all" spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] + yml_test.go:251: test exists-empty-domain + yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:" + spf.go:426: "exists:" permerror, invalid domain + yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:162: suite: IP4 mechanism syntax - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 ip4] - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 ip4] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:251: test cidr4-33 - yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" - spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [cidr4-33] - yml_test.go:251: test bad-ip4-port - yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" - spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value - yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] - yml_test.go:251: test bad-ip4-short - yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com - spf.go:308: check "e9.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3" - spf.go:416: "ip4:1.2.3" permerror, invalid ipX value - yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:251: test cidr4-0 yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 @@ -2561,18 +2579,43 @@ spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 spf.go:416: "ip4:1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr4-0] - yml_test.go:251: test bare-ip4 - yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com - spf.go:308: check "e5.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [bare-ip4] + yml_test.go:251: test cidr4-32 + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" + spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 + spf.go:416: "ip4:1.2.3.4/32" pass, matched ip + yml_test.go:260: success: pass, matched ip [cidr4-32] + yml_test.go:251: test bad-ip4-short + yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com + spf.go:308: check "e9.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3" + spf.go:416: "ip4:1.2.3" permerror, invalid ipX value + yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] yml_test.go:251: test ip4-dual-cidr yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] + yml_test.go:251: test cidr4-33 + yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com + spf.go:308: check "e3.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" + spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [cidr4-33] + yml_test.go:251: test bare-ip4 + yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com + spf.go:308: check "e5.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [bare-ip4] + yml_test.go:251: test bad-ip4-port + yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" + spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value + yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-port] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 @@ -2580,16 +2623,7 @@ spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] - yml_test.go:251: test cidr4-32 - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" - spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 - spf.go:416: "ip4:1.2.3.4/32" pass, matched ip - yml_test.go:260: success: pass, matched ip [cidr4-32] yml_test.go:162: suite: IP6 mechanism syntax - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com @@ -2602,25 +2636,33 @@ yml_test.go:169: SPF: [v=spf1 ip6:::1.1.1.1//33] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip6:CAFE:BABE:8000::/33] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:251: test cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-0-ip4] - yml_test.go:251: test cidr6-0 - yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" - spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee - spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip - yml_test.go:260: success: pass, matched ip [cidr6-0] + yml_test.go:251: test cidr6-129 + yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com + spf.go:308: check "e3.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" + spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [cidr6-129] yml_test.go:251: test cidr6-bad yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [cidr6-bad] + yml_test.go:251: test cidr6-33 + yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com + spf.go:308: check "e5.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" + spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: + spf.go:416: "ip6:CAFE:BABE:8000::/33" pass, matched ip + yml_test.go:260: success: pass, matched ip [cidr6-33] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 @@ -2639,132 +2681,136 @@ spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-ip4] - yml_test.go:251: test cidr6-129 - yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/129" - spf.go:416: "ip6:::1.1.1.1/129" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [cidr6-129] - yml_test.go:251: test cidr6-33 - yml_test.go:253: checkhost cafe:babe:8000:: foo@e5.example.com - spf.go:308: check "e5.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip6:CAFE:BABE:8000::/33" - spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: - spf.go:416: "ip6:CAFE:BABE:8000::/33" pass, matched ip - yml_test.go:260: success: pass, matched ip [cidr6-33] + yml_test.go:251: test cidr6-0 + yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" + spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee + spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip + yml_test.go:260: success: pass, matched ip [cidr6-0] yml_test.go:162: suite: Semantics of exp and other modifiers - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] - yml_test.go:167: domain e13msg.example.com - yml_test.go:169: TXT: [The %{x}-files.] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 =all] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] + yml_test.go:167: domain e9.example.com + yml_test.go:169: SPF: [v=spf1 -all foo=%abc] + yml_test.go:167: domain e14.example.com + yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] + yml_test.go:167: domain e15.example.com + yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] + yml_test.go:167: domain e17.example.com + yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 1up=foo] + yml_test.go:167: domain e11.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] + yml_test.go:167: domain e11msg.example.com + yml_test.go:169: TXT: [Answer a fool according to his folly.] + yml_test.go:169: TXT: [Do not answer a fool according to his folly.] yml_test.go:167: domain e16.example.com yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e21msg.example.com yml_test.go:169: TIMEOUT - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] - yml_test.go:167: domain e11.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] - yml_test.go:167: domain e20.example.com - yml_test.go:169: SPF: [v=spf1 default=+] yml_test.go:167: domain e22.example.com yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] - yml_test.go:167: domain tworecs.example.com - yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:167: domain badexp.example.com + yml_test.go:169: TXT: [Explanation] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] + yml_test.go:167: domain exp1.example.com + yml_test.go:169: TXT: [No-see-um] + yml_test.go:167: domain exp4.example.com + yml_test.go:169: TXT: [%{l} in implementation] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] - yml_test.go:167: domain e11msg.example.com - yml_test.go:169: TXT: [Answer a fool according to his folly.] - yml_test.go:169: TXT: [Do not answer a fool according to his folly.] - yml_test.go:167: domain e15.example.com - yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] - yml_test.go:167: domain exp2.example.com - yml_test.go:169: TXT: [See me.] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 1up=foo] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 =all] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] + yml_test.go:167: domain e13.example.com + yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] + yml_test.go:167: domain e13msg.example.com + yml_test.go:169: TXT: [The %{x}-files.] yml_test.go:167: domain e21.example.com yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] - yml_test.go:167: domain badexp.example.com - yml_test.go:169: TXT: [Explanation] yml_test.go:167: domain twoexp.example.com yml_test.go:169: TXT: [one] yml_test.go:169: TXT: [two] - yml_test.go:167: domain e9.example.com - yml_test.go:169: SPF: [v=spf1 -all foo=%abc] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exp= -all] + yml_test.go:167: domain e19.example.com + yml_test.go:169: SPF: [v=spf1 default=pass] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] - yml_test.go:167: domain e13.example.com - yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] - yml_test.go:167: domain exp1.example.com - yml_test.go:169: TXT: [No-see-um] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] - yml_test.go:167: domain exp4.example.com - yml_test.go:169: TXT: [%{l} in implementation] - yml_test.go:167: domain e14.example.com - yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] - yml_test.go:167: domain e17.example.com - yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] - yml_test.go:167: domain e19.example.com - yml_test.go:169: SPF: [v=spf1 default=pass] + yml_test.go:167: domain e20.example.com + yml_test.go:169: SPF: [v=spf1 default=+] + yml_test.go:167: domain tworecs.example.com + yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] - yml_test.go:251: test invalid-modifier - yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com - spf.go:308: check "e5.example.com" 0 0 - spf.go:330: dns record "v=spf1 1up=foo" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [invalid-modifier] + yml_test.go:167: domain exp2.example.com + yml_test.go:169: TXT: [See me.] + yml_test.go:251: test include-ignores-exp + yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com + spf.go:308: check "e7.example.com" 0 0 + spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" + spf.go:308: check "e3.example.com" 1 0 + spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" + spf.go:430: exp= ignored + spf.go:308: check "e4.example.com" 2 0 + spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" + spf.go:397: all: fail + spf.go:434: "redirect=e4.example.com": fail, matched all + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [include-ignores-exp] yml_test.go:251: test dorky-sentinel yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com spf.go:308: check "e8.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [dorky-sentinel] - yml_test.go:251: test exp-multiple-txt - yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com - spf.go:308: check "e11.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-multiple-txt] - yml_test.go:251: test explanation-syntax-error - yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com - spf.go:308: check "e13.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" + yml_test.go:251: test exp-dns-error + yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com + spf.go:308: check "e21.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [explanation-syntax-error] - yml_test.go:251: test two-exp-records - yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com - spf.go:308: check "tworecs.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" + yml_test.go:260: success: fail, matched all [exp-dns-error] + yml_test.go:251: test invalid-modifier + yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com + spf.go:308: check "e5.example.com" 0 0 + spf.go:330: dns record "v=spf1 1up=foo" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [invalid-modifier] + yml_test.go:251: test empty-modifier-name + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 =all" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [empty-modifier-name] + yml_test.go:251: test exp-no-txt + yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com + spf.go:308: check "e22.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [two-exp-records] - yml_test.go:251: test redirect-cancels-prior-exp - yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" + yml_test.go:260: success: fail, matched all [exp-no-txt] + yml_test.go:251: test non-ascii-exp + yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com + spf.go:308: check "nonascii.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" spf.go:430: exp= ignored - spf.go:308: check "e4.example.com" 1 0 - spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail - spf.go:434: "redirect=e4.example.com": fail, matched all - yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] + yml_test.go:260: success: fail, matched all [non-ascii-exp] yml_test.go:251: test redirect-none yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 @@ -2783,191 +2829,208 @@ spf.go:397: all: fail spf.go:434: "redirect=e2.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-exp] - yml_test.go:251: test include-ignores-exp - yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com - spf.go:308: check "e7.example.com" 0 0 - spf.go:330: dns record "v=spf1 include:e3.example.com -all exp=exp3.example.com" - spf.go:308: check "e3.example.com" 1 0 + yml_test.go:251: test redirect-cancels-prior-exp + yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com + spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e4.example.com" spf.go:430: exp= ignored - spf.go:308: check "e4.example.com" 2 0 + spf.go:308: check "e4.example.com" 1 0 spf.go:330: dns record "v=spf1 -all exp=exp2.example.com" spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [include-ignores-exp] - yml_test.go:251: test empty-modifier-name - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 =all" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [empty-modifier-name] + yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] - yml_test.go:251: test non-ascii-exp - yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com - spf.go:308: check "nonascii.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=badexp.example.com -all" + yml_test.go:251: test two-exp-records + yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com + spf.go:308: check "tworecs.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [non-ascii-exp] - yml_test.go:251: test exp-no-txt - yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com - spf.go:308: check "e22.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=mail.example.com -all" - spf.go:430: exp= ignored + yml_test.go:260: success: fail, matched all [two-exp-records] + yml_test.go:251: test exp-multiple-txt + yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com + spf.go:308: check "e11.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-no-txt] - yml_test.go:251: test exp-dns-error - yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com - spf.go:308: check "e21.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" + yml_test.go:260: success: fail, matched all [exp-multiple-txt] + yml_test.go:251: test explanation-syntax-error + yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com + spf.go:308: check "e13.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-dns-error] + yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:162: suite: Macro expansion rules - yml_test.go:167: domain msgbas2x.cos.example.com - yml_test.go:169: A: [192.168.218.40] yml_test.go:167: domain example.com yml_test.go:169: A: [192.168.90.76] yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] - yml_test.go:167: domain somewhat.long.exp.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] + yml_test.go:167: domain e10.example.com + yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] + yml_test.go:167: domain macro%percent space%20url-space.example.com + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] + yml_test.go:167: domain e6msg.example.com + yml_test.go:169: TXT: [connect from %{p}] + yml_test.go:167: domain example.com.d.spf.example.com + yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] + yml_test.go:167: domain msgbas2x.cos.example.com + yml_test.go:169: A: [192.168.218.40] + yml_test.go:167: domain exp.example.com + yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] + yml_test.go:167: domain 42.218.168.192.in-addr.arpa + yml_test.go:169: PTR: [mx.example.com] + yml_test.go:169: PTR: [mx.e7.example.com] + yml_test.go:167: domain mx.example.com.ok.example.com + yml_test.go:169: A: [127.0.0.2] + yml_test.go:167: domain _spfh.example.com + yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] + yml_test.go:167: domain e11.example.com + yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] + yml_test.go:167: domain e1a.example.com + yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain mx.example.com yml_test.go:169: A: [192.168.218.41] yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] - yml_test.go:167: domain e6msg.example.com - yml_test.go:169: TXT: [connect from %{p}] - yml_test.go:167: 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 + yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] - yml_test.go:167: domain mx.e7.example.com - yml_test.go:169: A: [192.168.218.42] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] + yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com + yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] - yml_test.go:167: domain exp.example.com - yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] - yml_test.go:167: domain 40.218.168.192.example.com - yml_test.go:169: TXT: [Connections from %{c} not authorized.] - yml_test.go:167: 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 - yml_test.go:169: TXT: [Congratulations! That was tricky.] - yml_test.go:167: domain 40.218.168.192.in-addr.arpa - yml_test.go:169: PTR: [mx.example.com] - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] - yml_test.go:167: domain e10.example.com - yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] - yml_test.go:167: domain msg.example.com - yml_test.go:169: TXT: [This is a test.] - yml_test.go:167: domain e1a.example.com - yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] - yml_test.go:167: domain 42.218.168.192.in-addr.arpa - yml_test.go:169: PTR: [mx.example.com] - yml_test.go:169: PTR: [mx.e7.example.com] - yml_test.go:167: domain _spfh.example.com - yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] + yml_test.go:167: domain 40.218.168.192.example.com + yml_test.go:169: TXT: [Connections from %{c} not authorized.] + yml_test.go:167: domain somewhat.long.exp.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] yml_test.go:167: domain e4msg.example.com yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] + yml_test.go:167: domain mx.e7.example.com.should.example.com + yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] - yml_test.go:167: domain mx.example.com.ok.example.com - yml_test.go:169: A: [127.0.0.2] - yml_test.go:167: domain msg8.example.com - yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] - yml_test.go:167: domain example.com.d.spf.example.com - yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] - yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com - yml_test.go:169: A: [127.0.0.2] + yml_test.go:167: domain a.spf.example.com + yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] + yml_test.go:167: domain msg.example.com + yml_test.go:169: TXT: [This is a test.] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] + yml_test.go:167: domain 40.218.168.192.in-addr.arpa + yml_test.go:169: PTR: [mx.example.com] + yml_test.go:167: domain mx.e7.example.com + yml_test.go:169: A: [192.168.218.42] + yml_test.go:167: domain o.spf.example.com + yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] yml_test.go:167: domain e1t.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] - yml_test.go:167: domain e11.example.com - yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] - yml_test.go:167: domain a.spf.example.com - yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] - yml_test.go:167: domain macro%percent space%20url-space.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: 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 + yml_test.go:167: 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 + yml_test.go:169: TXT: [Congratulations! That was tricky.] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] + yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] - yml_test.go:167: domain mx.e7.example.com.should.example.com - yml_test.go:169: A: [127.0.0.2] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] + yml_test.go:167: domain msg8.example.com + yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a:%{H} -all] - yml_test.go:167: domain o.spf.example.com - yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] - yml_test.go:251: test macro-reverse-split-on-dash - yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com - spf.go:308: check "e11.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" - spf.go:923: macro "i": ["i" "i" "" "" ""] - spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] - spf.go:923: macro "d2": ["d2" "d" "2" "" ""] - spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" - spf.go:640: exists match: 127.0.0.2 - spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists - yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] - yml_test.go:251: test invalid-trailing-macro-char - yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com - spf.go:308: check "e1t.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" - spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] - yml_test.go:251: test exp-txt-macro-char - yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" + yml_test.go:251: test trailing-dot-exp + yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com + spf.go:308: check "exp.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" + spf.go:430: exp= ignored spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-txt-macro-char] - yml_test.go:251: test v-macro-ip4 - yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" + yml_test.go:260: success: fail, matched all [trailing-dot-exp] + yml_test.go:251: test domain-name-truncation + yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com + spf.go:308: check "somewhat.long.exp.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [v-macro-ip4] + yml_test.go:260: success: fail, matched all [domain-name-truncation] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] - yml_test.go:251: test p-macro-ip4-valid - yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com + yml_test.go:251: test p-macro-ip6-novalid + yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] - yml_test.go:251: test invalid-hello-macro + yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] + yml_test.go:251: test hello-domain-literal yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] - spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" + spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" spf.go:514: void lookup: nxdomain spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [invalid-hello-macro] + yml_test.go:260: success: fail, matched all [hello-domain-literal] + yml_test.go:251: test macro-multiple-delimiters + yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com + spf.go:308: check "e12.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" + spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] + spf.go:923: macro "d2": ["d2" "d" "2" "" ""] + spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" + spf.go:640: exists match: 127.0.0.2 + spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists + yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] + yml_test.go:251: test invalid-macro-char + yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" + spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] + yml_test.go:251: test invalid-trailing-macro-char + yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com + spf.go:308: check "e1t.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" + spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] + yml_test.go:251: test macro-mania-in-domain + yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com + spf.go:308: check "e1a.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" + spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] + spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" + spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] + spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a + yml_test.go:260: success: pass, matched a [macro-mania-in-domain] + yml_test.go:251: test v-macro-ip6 + yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [v-macro-ip6] + yml_test.go:251: test p-macro-ip6-valid + yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:251: test trailing-dot-domain yml_test.go:253: checkhost 192.168.218.40 test@example.com spf.go:308: check "example.com" 0 0 @@ -2986,61 +3049,59 @@ spf.go:434: "redirect=a.spf.example.com": pass, matched ip spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip yml_test.go:260: success: pass, matched ip [trailing-dot-domain] - yml_test.go:251: test invalid-macro-char - yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" - spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] yml_test.go:251: test invalid-embedded-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com spf.go:308: check "e1e.example.com" 0 0 spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] - yml_test.go:251: test macro-mania-in-domain - yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com - spf.go:308: check "e1a.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all" - spf.go:747: masks on "a:macro%%percent%_%_space%-url-space.example.com", "e1a.example.com": "macro%%percent%_%_space%-url-space.example.com" [, ] - spf.go:1020: macro expanded "macro%%percent%_%_space%-url-space.example.com" to "macro%percent space%20url-space.example.com" - spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] - spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a - yml_test.go:260: success: pass, matched a [macro-mania-in-domain] - yml_test.go:251: test undef-macro - yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com - spf.go:308: check "e5.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" - spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] - spf.go:923: macro "a": [] - spf.go:406: "a:%{a}.example.com" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [undef-macro] - yml_test.go:251: test hello-domain-literal + yml_test.go:251: test exp-txt-macro-char + yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com + spf.go:308: check "e3.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [exp-txt-macro-char] + yml_test.go:251: test p-macro-ip4-valid + yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] + yml_test.go:251: test invalid-hello-macro yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com spf.go:308: check "e9.example.com" 0 0 spf.go:330: dns record "v=spf1 a:%{H} -all" spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] spf.go:923: macro "H": ["H" "H" "" "" ""] - spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" + spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" spf.go:514: void lookup: nxdomain spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [hello-domain-literal] - yml_test.go:251: test macro-multiple-delimiters - yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com - spf.go:308: check "e12.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:%{l2r+-}.user.%{d2}" - spf.go:923: macro "l2r+-": ["l2r+-" "l" "2" "r" "+-"] + yml_test.go:260: success: fail, matched all [invalid-hello-macro] + yml_test.go:251: test macro-reverse-split-on-dash + yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com + spf.go:308: check "e11.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" + spf.go:923: macro "i": ["i" "i" "" "" ""] + spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] spf.go:923: macro "d2": ["d2" "d" "2" "" ""] - spf.go:1020: macro expanded "%{l2r+-}.user.%{d2}" to "bar.foo.user.example.com" + spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" spf.go:640: exists match: 127.0.0.2 - spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists - yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] - yml_test.go:251: test domain-name-truncation - yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com - spf.go:308: check "somewhat.long.exp.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" + spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists + yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] + yml_test.go:251: test v-macro-ip4 + yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [domain-name-truncation] + yml_test.go:260: success: fail, matched all [v-macro-ip4] + yml_test.go:251: test undef-macro + yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com + spf.go:308: check "e5.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" + spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] + spf.go:923: macro "a": [] + spf.go:406: "a:%{a}.example.com" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test upper-macro yml_test.go:253: checkhost 192.168.218.42 jack&jill=up@e8.example.com spf.go:308: check "e8.example.com" 0 0 @@ -3062,46 +3123,37 @@ spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] - yml_test.go:251: test trailing-dot-exp - yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com - spf.go:308: check "exp.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" - spf.go:430: exp= ignored - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [trailing-dot-exp] - yml_test.go:251: test v-macro-ip6 - yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [v-macro-ip6] - yml_test.go:251: test p-macro-ip6-novalid - yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [p-macro-ip6-novalid] - yml_test.go:251: test p-macro-ip6-valid - yml_test.go:253: checkhost cafe:babe::3 test@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] yml_test.go:162: suite: Processing limits - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 mx] - yml_test.go:169: MX: {0 mail.example.com} - yml_test.go:169: MX: {1 mail.example.com} - yml_test.go:169: MX: {2 mail.example.com} - yml_test.go:169: MX: {3 mail.example.com} - yml_test.go:169: MX: {4 mail.example.com} - yml_test.go:169: MX: {5 mail.example.com} - yml_test.go:169: MX: {6 mail.example.com} - yml_test.go:169: MX: {7 mail.example.com} - yml_test.go:169: MX: {8 mail.example.com} - yml_test.go:169: MX: {9 mail.example.com} - yml_test.go:169: MX: {10 e4.example.com} - yml_test.go:169: A: [1.2.3.5] + yml_test.go:167: domain 5.3.2.1.in-addr.arpa + yml_test.go:169: PTR: [e1.example.com.] + yml_test.go:169: PTR: [e2.example.com.] + yml_test.go:169: PTR: [e3.example.com.] + yml_test.go:169: PTR: [e4.example.com.] + yml_test.go:169: PTR: [example.com.] + yml_test.go:169: PTR: [e6.example.com.] + yml_test.go:169: PTR: [e7.example.com.] + yml_test.go:169: PTR: [e8.example.com.] + yml_test.go:169: PTR: [e9.example.com.] + yml_test.go:169: PTR: [e10.example.com.] + yml_test.go:169: PTR: [e5.example.com.] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] + yml_test.go:169: A: [1.2.3.20] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain inc.example.com + yml_test.go:169: SPF: [v=spf1 a a a a a a a a] + yml_test.go:169: A: [1.2.3.10] + yml_test.go:167: domain e9.example.com + yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] + yml_test.go:169: A: [1.2.3.21] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 include:e3.example.com] + yml_test.go:169: A: [1.2.3.7] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 include:e2.example.com] + yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] @@ -3109,12 +3161,6 @@ yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e9.example.com - yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] - yml_test.go:169: A: [1.2.3.21] yml_test.go:167: domain e10.example.com yml_test.go:169: SPF: [v=spf1 a -all] yml_test.go:169: A: [1.2.3.1] @@ -3129,43 +3175,25 @@ yml_test.go:169: A: [1.2.3.10] yml_test.go:169: A: [1.2.3.11] yml_test.go:169: A: [1.2.3.12] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 include:e3.example.com] - yml_test.go:169: A: [1.2.3.7] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 include:e2.example.com] - yml_test.go:169: A: [1.2.3.8] - yml_test.go:167: domain 5.3.2.1.in-addr.arpa - yml_test.go:169: PTR: [e1.example.com.] - yml_test.go:169: PTR: [e2.example.com.] - yml_test.go:169: PTR: [e3.example.com.] - yml_test.go:169: PTR: [e4.example.com.] - yml_test.go:169: PTR: [example.com.] - yml_test.go:169: PTR: [e6.example.com.] - yml_test.go:169: PTR: [e7.example.com.] - yml_test.go:169: PTR: [e8.example.com.] - yml_test.go:169: PTR: [e9.example.com.] - yml_test.go:169: PTR: [e10.example.com.] - yml_test.go:169: PTR: [e5.example.com.] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] - yml_test.go:169: A: [1.2.3.20] - yml_test.go:167: domain inc.example.com - yml_test.go:169: SPF: [v=spf1 a a a a a a a a] - yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] - yml_test.go:251: test include-at-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" - spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] - spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] - spf.go:406: "a" pass, matched a - yml_test.go:260: success: pass, matched a [include-at-limit] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:169: MX: {0 mail.example.com} + yml_test.go:169: MX: {1 mail.example.com} + yml_test.go:169: MX: {2 mail.example.com} + yml_test.go:169: MX: {3 mail.example.com} + yml_test.go:169: MX: {4 mail.example.com} + yml_test.go:169: MX: {5 mail.example.com} + yml_test.go:169: MX: {6 mail.example.com} + yml_test.go:169: MX: {7 mail.example.com} + yml_test.go:169: MX: {8 mail.example.com} + yml_test.go:169: MX: {9 mail.example.com} + yml_test.go:169: MX: {10 e4.example.com} + yml_test.go:169: A: [1.2.3.5] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 @@ -3205,6 +3233,61 @@ spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] + yml_test.go:251: test mech-at-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:536: ip match: 1.2.3.4 + spf.go:416: "ip4:1.2.3.4" pass, matched ip + yml_test.go:260: success: pass, matched ip [mech-at-limit] + yml_test.go:251: test mech-over-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com + spf.go:308: check "e7.example.com" 0 0 + spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" + spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] + spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] + spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] + spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:378: void lookup limit reached + yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] + yml_test.go:251: test include-over-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com + spf.go:308: check "e9.example.com" 0 0 + spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" + spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] + spf.go:308: check "inc.example.com" 2 0 + spf.go:330: dns record "v=spf1 a a a a a a a a" + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:444: fallback to neutral + spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] + spf.go:373: lookup limit reached + yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 @@ -3276,77 +3359,27 @@ spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] spf.go:406: "a" pass, matched a yml_test.go:260: success: pass, matched a [false-a-limit] - yml_test.go:251: test mech-at-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:536: ip match: 1.2.3.4 - spf.go:416: "ip4:1.2.3.4" pass, matched ip - yml_test.go:260: success: pass, matched ip [mech-at-limit] - yml_test.go:251: test mech-over-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com - spf.go:308: check "e7.example.com" 0 0 - spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" - spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] - spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] - spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] - spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:378: void lookup limit reached - yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] - yml_test.go:251: test include-over-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com - spf.go:308: check "e9.example.com" 0 0 - spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" - spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] - spf.go:308: check "inc.example.com" 2 0 - spf.go:330: dns record "v=spf1 a a a a a a a a" - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:444: fallback to neutral - spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] - spf.go:373: lookup limit reached - yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] ---- PASS: TestRFC4408 (0.03s) + yml_test.go:251: test include-at-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" + spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] + spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] + spf.go:406: "a" pass, matched a + yml_test.go:260: success: pass, matched a [include-at-limit] +--- PASS: TestRFC4408 (0.08s) === RUN TestRFC7208 yml_test.go:162: suite: Initial processing - yml_test.go:167: domain badip.example.com - yml_test.go:169: SPF: [v=spf1 ip4:192.0.2.5 - include:spf.protection.outlook.com ~all] - yml_test.go:167: domain example.com - yml_test.go:169: TIMEOUT yml_test.go:167: domain example.net yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] - yml_test.go:167: domain a.example.net - yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain exp.example.net yml_test.go:169: TXT: [%{l}] + yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com + yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:167: domain hosed2.example.com yml_test.go:169: SPF: [v=spf1 €a:example.net -all] + yml_test.go:167: domain hosed3.example.com + yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain nothosed.example.com yml_test.go:169: SPF: [v=spf1 a:example.net -all] yml_test.go:169: SPF: [–] @@ -3355,48 +3388,39 @@ yml_test.go:169: A: [192.0.2.3] yml_test.go:167: domain fine.example.com yml_test.go:169: SPF: [v=spf1 a -all] - yml_test.go:167: domain a12345678901234567890123456789012345678901234567890123456789012.example.com - yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:167: domain example.com + yml_test.go:169: TIMEOUT + yml_test.go:167: domain a.example.net + yml_test.go:169: SPF: [v=spf1 -all exp=exp.example.net] yml_test.go:167: domain hosed.example.com yml_test.go:169: SPF: [v=spf1 a:garbage.example.net -all] - yml_test.go:167: domain hosed3.example.com - yml_test.go:169: SPF: [v=spf1 a:example.net –all] yml_test.go:167: domain trail.example.com yml_test.go:169: SPF: [v=spf1 a -all ] yml_test.go:167: domain null.example.com yml_test.go:169: SPF: [v=spf1 ip4: 192.0.2.5 -all] yml_test.go:169: + yml_test.go:167: domain badip.example.com + yml_test.go:169: SPF: [v=spf1 ip4:192.0.2.5 + include:spf.protection.outlook.com ~all] + yml_test.go:251: test longlabel + yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com + spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [longlabel] yml_test.go:251: test helo-not-fqdn yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "A2345678" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-not-fqdn] - yml_test.go:251: test two-spaces - yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com - spf.go:308: check "fine.example.com" 0 0 - spf.go:330: dns record "v=spf1 a -all" - spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [two-spaces] - yml_test.go:251: test toolonglabel - yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com - spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - yml_test.go:260: success: none, no DNS record found [toolonglabel] - yml_test.go:251: test domain-literal - yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] - spf.go:308: check "[1.2.3.5]" 0 0 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - yml_test.go:260: success: none, no DNS record found [domain-literal] - yml_test.go:251: test non-ascii-non-spf - yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com - spf.go:308: check "nothosed.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:example.net -all" - spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] + yml_test.go:251: test non-ascii-result + yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com + spf.go:308: check "hosed3.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:example.net \u0096all" + spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [non-ascii-non-spf] + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [non-ascii-result] yml_test.go:251: test null-text yml_test.go:253: checkhost 192.0.2.5 silly@null.example.com spf.go:308: check "null.example.com" 0 0 @@ -3410,20 +3434,11 @@ spf.go:330: dns record "v=spf1 ip4:192.0.2.5\n include:spf.protection.outlook.com ~all" spf.go:416: "ip4:192.0.2.5\n" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip4] - yml_test.go:251: test nolocalpart - yml_test.go:253: checkhost 1.2.3.4 @example.net - spf.go:308: check "example.net" 0 0 - spf.go:330: dns record "v=spf1 -all exp=exp.example.net" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [nolocalpart] - yml_test.go:251: test non-ascii-result - yml_test.go:253: checkhost 1.2.3.4 foobar@hosed3.example.com - spf.go:308: check "hosed3.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:example.net \u0096all" - spf.go:747: masks on "a:example.net", "hosed3.example.com": "example.net" [, ] - spf.go:514: void lookup: nxdomain - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [non-ascii-result] + yml_test.go:251: test emptylabel + yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com + spf.go:308: check "A...example.com" 0 0 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + yml_test.go:260: success: none, no DNS record found [emptylabel] yml_test.go:251: test trailing-space yml_test.go:253: checkhost 192.0.2.5 silly@trail.example.com spf.go:308: check "trail.example.com" 0 0 @@ -3432,22 +3447,43 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [trailing-space] - yml_test.go:251: test longlabel - yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A12345678901234567890123456789012345678901234567890123456789012.example.com - spf.go:308: check "A12345678901234567890123456789012345678901234567890123456789012.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [longlabel] - yml_test.go:251: test emptylabel - yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A...example.com - spf.go:308: check "A...example.com" 0 0 + yml_test.go:251: test toolonglabel + yml_test.go:253: checkhost 1.2.3.5 lyme.eater@A123456789012345678901234567890123456789012345678901234567890123.example.com + spf.go:308: check "A123456789012345678901234567890123456789012345678901234567890123.example.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) - yml_test.go:260: success: none, no DNS record found [emptylabel] + yml_test.go:260: success: none, no DNS record found [toolonglabel] yml_test.go:251: test helo-domain-literal yml_test.go:253: checkhost 1.2.3.5 spf.go:308: check "[1.2.3.5]" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [helo-domain-literal] + yml_test.go:251: test nolocalpart + yml_test.go:253: checkhost 1.2.3.4 @example.net + spf.go:308: check "example.net" 0 0 + spf.go:330: dns record "v=spf1 -all exp=exp.example.net" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [nolocalpart] + yml_test.go:251: test two-spaces + yml_test.go:253: checkhost 1.2.3.4 actually@fine.example.com + spf.go:308: check "fine.example.com" 0 0 + spf.go:330: dns record "v=spf1 a -all" + spf.go:747: masks on "a", "fine.example.com": "fine.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [two-spaces] + yml_test.go:251: test domain-literal + yml_test.go:253: checkhost 1.2.3.5 foo@[1.2.3.5] + spf.go:308: check "[1.2.3.5]" 0 0 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + yml_test.go:260: success: none, no DNS record found [domain-literal] + yml_test.go:251: test non-ascii-non-spf + yml_test.go:253: checkhost 1.2.3.4 foobar@nothosed.example.com + spf.go:308: check "nothosed.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:example.net -all" + spf.go:747: masks on "a:example.net", "nothosed.example.com": "example.net" [, ] + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [non-ascii-non-spf] yml_test.go:162: suite: Record lookup yml_test.go:167: domain both.example.net yml_test.go:169: TXT: [v=spf1 -all] @@ -3470,11 +3506,6 @@ yml_test.go:169: TIMEOUT yml_test.go:167: domain alltimeout.example.net yml_test.go:169: TIMEOUT - yml_test.go:251: test txttimeout - yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net - spf.go:308: check "txttimeout.example.net" 0 0 - spf.go:318: dns temp error: lookup : test timeout error - yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:251: test nospftxttimeout yml_test.go:253: checkhost 1.2.3.4 foo@nospftxttimeout.example.net spf.go:308: check "nospftxttimeout.example.net" 0 0 @@ -3502,21 +3533,34 @@ spf.go:308: check "spfonly.example.net" 0 0 spf.go:330: dns record "" yml_test.go:260: success: none, no DNS record found [spfonly] + yml_test.go:251: test txttimeout + yml_test.go:253: checkhost 1.2.3.4 foo@txttimeout.example.net + spf.go:308: check "txttimeout.example.net" 0 0 + spf.go:318: dns temp error: lookup : test timeout error + yml_test.go:260: success: temperror, lookup : test timeout error [txttimeout] yml_test.go:162: suite: Selecting records - yml_test.go:167: domain example9.com - yml_test.go:169: SPF: [v=SpF1 ~all] + yml_test.go:167: domain example3.com + yml_test.go:169: SPF: [v=spf10] + yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:169: MX: {0 mail.example1.com} yml_test.go:167: domain example1.com yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example4.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] + yml_test.go:167: domain example6.com + yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:169: SPF: [V=sPf1 +all] + yml_test.go:167: domain example9.com + yml_test.go:169: SPF: [v=SpF1 ~all] + yml_test.go:167: domain example2.com + yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:167: domain mail.example1.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example5.com yml_test.go:169: SPF: [v=spf1 +all] yml_test.go:169: TXT: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] - yml_test.go:167: domain example6.com - yml_test.go:169: SPF: [v=spf1 -all] - yml_test.go:169: SPF: [V=sPf1 +all] yml_test.go:167: domain example7.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] @@ -3524,42 +3568,38 @@ yml_test.go:169: SPF: [V=spf1 -all] yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: TXT: [v=spf1 +all] - yml_test.go:167: domain example3.com - yml_test.go:169: SPF: [v=spf10] - yml_test.go:169: SPF: [v=spf1 mx] - yml_test.go:169: MX: {0 mail.example1.com} - yml_test.go:167: domain example2.com - yml_test.go:169: SPF: [v=spf1 mx] - yml_test.go:167: domain mail.example1.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:251: test empty - yml_test.go:253: checkhost 1.2.3.4 foo@example1.com - spf.go:308: check "example1.com" 0 0 - spf.go:330: dns record "v=spf1" - spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [empty] + yml_test.go:251: test nospace1 + yml_test.go:253: checkhost 1.2.3.4 foo@example2.com + spf.go:308: check "example2.com" 0 0 + spf.go:330: dns record "" + yml_test.go:260: success: none, no DNS record found [nospace1] + yml_test.go:251: test spfoverride + yml_test.go:253: checkhost 1.2.3.4 foo@example4.com + spf.go:308: check "example4.com" 0 0 + spf.go:330: dns record "v=spf1 -all" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [spfoverride] yml_test.go:251: test multitxt1 yml_test.go:253: checkhost 1.2.3.4 foo@example5.com spf.go:308: check "example5.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multitxt1] - yml_test.go:251: test multispf2 - yml_test.go:253: checkhost 1.2.3.4 foo@example8.com - spf.go:308: check "example8.com" 0 0 - spf.go:330: dns record "v=spf1 +all" - spf.go:397: all: pass - yml_test.go:260: success: pass, matched all [multispf2] + yml_test.go:251: test multitxt2 + yml_test.go:253: checkhost 1.2.3.4 foo@example6.com + spf.go:308: check "example6.com" 0 0 + spf.go:322: multiple dns records + yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test nospf yml_test.go:253: checkhost 1.2.3.4 foo@mail.example1.com spf.go:308: check "mail.example1.com" 0 0 spf.go:314: dns domain not found: lookup : domain not found (for testing) yml_test.go:260: success: none, no DNS record found [nospf] - yml_test.go:251: test case-insensitive - yml_test.go:253: checkhost 1.2.3.4 foo@example9.com - spf.go:308: check "example9.com" 0 0 - spf.go:330: dns record "v=SpF1 ~all" - spf.go:397: all: softfail - yml_test.go:260: success: softfail, matched all [case-insensitive] + yml_test.go:251: test empty + yml_test.go:253: checkhost 1.2.3.4 foo@example1.com + spf.go:308: check "example1.com" 0 0 + spf.go:330: dns record "v=spf1" + spf.go:444: fallback to neutral + yml_test.go:260: success: neutral, [empty] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 @@ -3569,66 +3609,66 @@ spf.go:831: mx match: 1.2.3.4, 1.2.3.4, [, ] spf.go:411: "mx" pass, matched mx yml_test.go:260: success: pass, matched mx [nospace2] - yml_test.go:251: test spfoverride - yml_test.go:253: checkhost 1.2.3.4 foo@example4.com - spf.go:308: check "example4.com" 0 0 - spf.go:330: dns record "v=spf1 -all" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [spfoverride] - yml_test.go:251: test multitxt2 - yml_test.go:253: checkhost 1.2.3.4 foo@example6.com - spf.go:308: check "example6.com" 0 0 - spf.go:322: multiple dns records - yml_test.go:260: success: permerror, multiple matching DNS records [multitxt2] yml_test.go:251: test multispf1 yml_test.go:253: checkhost 1.2.3.4 foo@example7.com spf.go:308: check "example7.com" 0 0 spf.go:322: multiple dns records yml_test.go:260: success: permerror, multiple matching DNS records [multispf1] - yml_test.go:251: test nospace1 - yml_test.go:253: checkhost 1.2.3.4 foo@example2.com - spf.go:308: check "example2.com" 0 0 - spf.go:330: dns record "" - yml_test.go:260: success: none, no DNS record found [nospace1] + yml_test.go:251: test multispf2 + yml_test.go:253: checkhost 1.2.3.4 foo@example8.com + spf.go:308: check "example8.com" 0 0 + spf.go:330: dns record "v=spf1 +all" + spf.go:397: all: pass + yml_test.go:260: success: pass, matched all [multispf2] + yml_test.go:251: test case-insensitive + yml_test.go:253: checkhost 1.2.3.4 foo@example9.com + spf.go:308: check "example9.com" 0 0 + spf.go:330: dns record "v=SpF1 ~all" + spf.go:397: all: softfail + yml_test.go:260: success: softfail, matched all [case-insensitive] yml_test.go:162: suite: Record evaluation + yml_test.go:167: domain t7.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] yml_test.go:167: domain t9.example.com yml_test.go:169: SPF: [v=spf1 a:foo-bar -all] - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain t2.example.com - yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] + yml_test.go:167: domain t10.example.com + yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] + yml_test.go:167: domain t11.example.com + yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t3.example.com yml_test.go:169: SPF: [v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t4.example.com yml_test.go:169: SPF: [v=spf1 moo.cow:far_out=man:dog/cat ip4:1.2.3.4 -all] + yml_test.go:167: domain t6.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] yml_test.go:167: domain t8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect:t2.example.com] - yml_test.go:167: domain t10.example.com - yml_test.go:169: SPF: [v=spf1 a:mail.example...com -all] - yml_test.go:167: domain t11.example.com - yml_test.go:169: SPF: [v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all] yml_test.go:167: domain t12.example.com yml_test.go:169: SPF: [v=spf1 a:%{H}.bar -all] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain t1.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 -all moo] + yml_test.go:167: domain t2.example.com + yml_test.go:169: SPF: [v=spf1 moo.cow-far_out=man:dog/cat ip4:1.2.3.4 -all] yml_test.go:167: domain t5.example.com yml_test.go:169: SPF: [v=spf1 redirect=t5.example.com ~all] - yml_test.go:167: domain t6.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4 redirect=t2.example.com] - yml_test.go:167: domain t7.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4] + yml_test.go:251: test invalid-domain-long-via-macro + yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com + spf.go:308: check "t12.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:%{H}.bar -all" + spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] + spf.go:923: macro "H": ["H" "H" "" "" ""] + spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:251: test modifier-charset-bad1 yml_test.go:253: checkhost 1.2.3.4 foo@t3.example.com spf.go:308: check "t3.example.com" 0 0 spf.go:330: dns record "v=spf1 moo.cow/far_out=man:dog/cat ip4:1.2.3.4 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [modifier-charset-bad1] - yml_test.go:251: test default-result - yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com - spf.go:308: check "t7.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.4" - spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [default-result] yml_test.go:251: test invalid-domain-empty-label yml_test.go:253: checkhost 1.2.3.4 foo@t10.example.com spf.go:308: check "t10.example.com" 0 0 @@ -3637,24 +3677,6 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [invalid-domain-empty-label] - yml_test.go:251: test invalid-domain-long - yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com - spf.go:308: check "t11.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" - spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [invalid-domain-long] - yml_test.go:251: test invalid-domain-long-via-macro - yml_test.go:253: checkhost 1.2.3.4 foo@t12.example.com - spf.go:308: check "t12.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:%{H}.bar -all" - spf.go:747: masks on "a:%{H}.bar", "t12.example.com": "%{H}.bar" [, ] - spf.go:923: macro "H": ["H" "H" "" "" ""] - spf.go:1020: macro expanded "%{H}.bar" to "%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25%25.bar" - spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [invalid-domain-long-via-macro] yml_test.go:251: test modifier-charset-bad2 yml_test.go:253: checkhost 1.2.3.4 foo@t4.example.com spf.go:308: check "t4.example.com" 0 0 @@ -3667,6 +3689,20 @@ spf.go:330: dns record "v=spf1 redirect=t5.example.com ~all" spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [redirect-after-mechanisms1] + yml_test.go:251: test default-result + yml_test.go:253: checkhost 1.2.3.5 foo@t7.example.com + spf.go:308: check "t7.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.4" + spf.go:444: fallback to neutral + yml_test.go:260: success: neutral, [default-result] + yml_test.go:251: test invalid-domain-long + yml_test.go:253: checkhost 1.2.3.4 foo@t11.example.com + spf.go:308: check "t11.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:a123456789012345678901234567890123456789012345678901234567890123.example.com -all" + spf.go:747: masks on "a:a123456789012345678901234567890123456789012345678901234567890123.example.com", "t11.example.com": "a123456789012345678901234567890123456789012345678901234567890123.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [invalid-domain-long] yml_test.go:162: suite: ALL mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] @@ -3711,39 +3747,68 @@ spf.go:397: all: pass yml_test.go:260: success: pass, matched all [all-double] yml_test.go:162: suite: PTR mechanism syntax - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 ptr/0 -all] + yml_test.go:167: domain loop4.example.com + yml_test.go:169: CNAME: CNAME.example.com. + yml_test.go:167: domain cname.example.com + yml_test.go:169: CNAMELOOP + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] + yml_test.go:169: AAAA: [2001:db8::1] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.com -all] yml_test.go:167: 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 yml_test.go:169: PTR: [e3.example.com] - yml_test.go:167: 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 - yml_test.go:169: PTR: [mail.Example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ptr -all] yml_test.go:169: A: [1.2.3.4] yml_test.go:169: AAAA: [CAFE:BABE::1] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 ptr -all] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 ptr:] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ptr:example.Com -all] yml_test.go:167: domain loop.example.com yml_test.go:169: SPF: [v=spf1 ptr] - yml_test.go:167: domain loop4.example.com - yml_test.go:169: CNAME: CNAME.example.com. - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:169: AAAA: [2001:db8::1] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 ptr/0 -all] yml_test.go:167: domain 4.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e3.example.com] yml_test.go:169: PTR: [e4.example.com] yml_test.go:169: PTR: [mail.example.com] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 ptr -all] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 ptr:] + yml_test.go:167: 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 + yml_test.go:169: PTR: [mail.Example.com] yml_test.go:167: domain 4.2.0.192.in-addr.arpa yml_test.go:169: PTR: [loop4.example.com.] - yml_test.go:167: domain cname.example.com - yml_test.go:169: CNAMELOOP + yml_test.go:251: test ptr-match-target + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 ptr:example.com -all" + spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] + spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] + spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] + spf.go:604: ptr match: "e3.example.com." + spf.go:421: "ptr:example.com" pass, matched ptr + yml_test.go:260: success: pass, matched ptr [ptr-match-target] + yml_test.go:251: test ptr-match-implicit + yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com + spf.go:308: check "e3.example.com" 0 0 + spf.go:330: dns record "v=spf1 ptr -all" + spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] + spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] + spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] + spf.go:604: ptr match: "e3.example.com." + spf.go:421: "ptr" pass, matched ptr + yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] + yml_test.go:251: test ptr-nomatch-invalid + yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 ptr -all" + spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] + spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] + spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:251: test ptr-match-ip6 yml_test.go:253: checkhost cafe:babe::1 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 @@ -3781,128 +3846,83 @@ spf.go:330: dns record "v=spf1 ptr/0 -all" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [ptr-cidr] - yml_test.go:251: test ptr-match-target - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 ptr:example.com -all" - spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] - spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] - spf.go:600: ptr evaluating "example.com" in ["e3.example.com." "mail.example.com."] - spf.go:604: ptr match: "e3.example.com." - spf.go:421: "ptr:example.com" pass, matched ptr - yml_test.go:260: success: pass, matched ptr [ptr-match-target] - yml_test.go:251: test ptr-match-implicit - yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 ptr -all" - spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] - spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] - spf.go:600: ptr evaluating "e3.example.com" in ["e3.example.com." "mail.example.com."] - spf.go:604: ptr match: "e3.example.com." - spf.go:421: "ptr" pass, matched ptr - yml_test.go:260: success: pass, matched ptr [ptr-match-implicit] - yml_test.go:251: test ptr-nomatch-invalid - yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 ptr -all" - spf.go:591: ptr forward resolution "e3.example.com." -> [{"1.2.3.4" ""} {"cafe:babe::1" ""}] - spf.go:591: ptr forward resolution "mail.example.com." -> [{"1.2.3.4" ""} {"2001:db8::1" ""}] - spf.go:600: ptr evaluating "e4.example.com" in ["e3.example.com." "mail.example.com."] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [ptr-nomatch-invalid] yml_test.go:162: suite: A mechanism syntax - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 a:abc.123] - yml_test.go:167: domain e6a.example.com - yml_test.go:169: SPF: [v=spf1 a/33 -all] - yml_test.go:167: domain e8a.example.com - yml_test.go:169: A: [1.2.3.5] - yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] - yml_test.go:169: SPF: [v=spf1 a/24 -all] - yml_test.go:167: domain e8b.example.com - yml_test.go:169: A: [1.2.3.5] - yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] - yml_test.go:169: SPF: [v=spf1 a//64 -all] - yml_test.go:167: domain e12.example.com - yml_test.go:169: SPF: [v=spf1 a:example.-com] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 a/0 -all] yml_test.go:167: domain ipv6.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: A: [1.1.1.1] yml_test.go:169: SPF: [v=spf1 a -all] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 a:foo.example.com] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 a//129 -all] + yml_test.go:167: domain e9.example.com + yml_test.go:169: SPF: [v=spf1 a:example.com:8080] + yml_test.go:167: domain e11.example.com + yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] + yml_test.go:167: domain e12.example.com + yml_test.go:169: SPF: [v=spf1 a:example.-com] + yml_test.go:167: domain e13.example.com + yml_test.go:169: SPF: [v=spf1 a:] + yml_test.go:167: domain e2b.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: SPF: [v=spf1 a//0 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 a//33 -all] - yml_test.go:167: domain e8e.example.com + yml_test.go:167: domain e6a.example.com + yml_test.go:169: SPF: [v=spf1 a/33 -all] + yml_test.go:167: domain e8.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] - yml_test.go:169: SPF: [v=spf1 a/24/64 -all] - yml_test.go:167: domain e11.example.com - yml_test.go:169: SPF: [v=spf1 a:foo:bar/baz.example.com] - yml_test.go:167: domain e14.example.com - yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] - yml_test.go:167: domain foo.example.xn--zckzah + yml_test.go:169: SPF: [v=spf1 a/24//64 -all] + yml_test.go:167: domain e8a.example.com + yml_test.go:169: A: [1.2.3.5] + yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] + yml_test.go:169: SPF: [v=spf1 a/24 -all] + yml_test.go:167: domain foo.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: A: [1.2.3.5] + yml_test.go:167: domain foo:bar/baz.example.com yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e1.example.com + yml_test.go:167: domain e2.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: AAAA: [1234::2] yml_test.go:169: SPF: [v=spf1 a/0 -all] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 a:abc.123] yml_test.go:167: domain e5a.example.com yml_test.go:169: SPF: [v=spf1 a:museum] yml_test.go:167: domain e5b.example.com yml_test.go:169: SPF: [v=spf1 a:museum.] - yml_test.go:167: domain e8.example.com + yml_test.go:167: domain e8b.example.com yml_test.go:169: A: [1.2.3.5] yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] - yml_test.go:169: SPF: [v=spf1 a/24//64 -all] - yml_test.go:167: domain e9.example.com - yml_test.go:169: SPF: [v=spf1 a:example.com:8080] - yml_test.go:167: domain foo.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: A: [1.2.3.5] - yml_test.go:167: domain foo:bar/baz.example.com + yml_test.go:169: SPF: [v=spf1 a//64 -all] + yml_test.go:167: domain e10.example.com + yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] + yml_test.go:167: domain e14.example.com + yml_test.go:169: SPF: [v=spf1 a:foo.example.xn--zckzah -all] + yml_test.go:167: domain foo.example.xn--zckzah yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: SPF: [v=spf1 a//0 -all] - yml_test.go:167: domain e2b.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: SPF: [v=spf1 a//0 -all] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 a:foo.example.com] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 a:111.222.33.44] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 a//129 -all] - yml_test.go:167: domain e10.example.com - yml_test.go:169: SPF: [v=spf1 a:foo.example.com/24] - yml_test.go:167: domain e13.example.com - yml_test.go:169: SPF: [v=spf1 a:] - yml_test.go:167: domain e2.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: AAAA: [1234::2] - yml_test.go:169: SPF: [v=spf1 a/0 -all] - yml_test.go:251: test a-dual-cidr-ip4-match - yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/24//64 -all" - spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] - spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] - spf.go:406: "a/24//64" pass, matched a - yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] - yml_test.go:251: test a-dual-cidr-ip6-match - yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/24//64 -all" - spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] - spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] - spf.go:406: "a/24//64" pass, matched a - yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] - yml_test.go:251: test a-cidr6-0-nxdomain - yml_test.go:253: checkhost 1234::1 foo@e2b.example.com - spf.go:308: check "e2b.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//0 -all" - spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] + yml_test.go:167: domain e8e.example.com + yml_test.go:169: A: [1.2.3.5] + yml_test.go:169: AAAA: [2001:db8:1234::dead:beef] + yml_test.go:169: SPF: [v=spf1 a/24/64 -all] + yml_test.go:251: test a-dual-cidr-ip4-err + yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com + spf.go:308: check "e8e.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/24/64 -all" + spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] + spf.go:406: "a/24/64" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] yml_test.go:251: test a-dash-in-toplabel yml_test.go:253: checkhost 1.2.3.4 foo@e14.example.com spf.go:308: check "e14.example.com" 0 0 @@ -3911,35 +3931,21 @@ spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:foo.example.xn--zckzah" pass, matched a yml_test.go:260: success: pass, matched a [a-dash-in-toplabel] - yml_test.go:251: test a-dual-cidr-ip4-err - yml_test.go:253: checkhost 1.2.3.4 foo@e8e.example.com - spf.go:308: check "e8e.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/24/64 -all" - spf.go:747: masks on "a/24/64", "e8e.example.com": "" [, ] - spf.go:406: "a/24/64" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [a-dual-cidr-ip4-err] - yml_test.go:251: test a-cidr4-0-ip6 - yml_test.go:253: checkhost 1234::1 foo@e2.example.com + yml_test.go:251: test a-dual-cidr-ip6-default + yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com + spf.go:308: check "e8a.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/24 -all" + spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] + yml_test.go:251: test a-cidr4-0 + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] - yml_test.go:251: test a-bad-cidr6 - yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com - spf.go:308: check "e7.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//129 -all" - spf.go:747: masks on "a//129", "e7.example.com": "" [, ] - spf.go:406: "a//129" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] - yml_test.go:251: test a-ip6-dualstack - yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com - spf.go:308: check "ipv6.example.com" 0 0 - spf.go:330: dns record "v=spf1 a -all" - spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] - spf.go:768: a match: 1234::1, 1234::1, [, ] - spf.go:406: "a" pass, matched a - yml_test.go:260: success: pass, matched a [a-ip6-dualstack] + spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] + spf.go:406: "a/0" pass, matched a + yml_test.go:260: success: pass, matched a [a-cidr4-0] yml_test.go:251: test a-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 @@ -3948,6 +3954,22 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6] + yml_test.go:251: test a-dual-cidr-ip6-match + yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/24//64 -all" + spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] + spf.go:768: a match: 2001:db8:1234::cafe:babe, 2001:db8:1234::dead:beef, [/24, /64] + spf.go:406: "a/24//64" pass, matched a + yml_test.go:260: success: pass, matched a [a-dual-cidr-ip6-match] + yml_test.go:251: test a-nxdomain + yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/0 -all" + spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-nxdomain] yml_test.go:251: test a-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 @@ -3955,28 +3977,27 @@ spf.go:747: masks on "a/33", "e6a.example.com": "" [, ] spf.go:406: "a/33" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [a-bad-cidr4] - yml_test.go:251: test a-dual-cidr-ip4-default - yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com - spf.go:308: check "e8b.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//64 -all" - spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] + yml_test.go:251: test a-cidr6-0-ip4mapped + yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com + spf.go:308: check "e2a.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//0 -all" + spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] - yml_test.go:251: test a-dual-cidr-ip6-default - yml_test.go:253: checkhost 2001:db8:1234::cafe:babe foo@e8a.example.com - spf.go:308: check "e8a.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/24 -all" - spf.go:747: masks on "a/24", "e8a.example.com": "e8a.example.com" [/24, ] + yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] + yml_test.go:251: test a-cidr6-0-nxdomain + yml_test.go:253: checkhost 1234::1 foo@e2b.example.com + spf.go:308: check "e2b.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//0 -all" + spf.go:747: masks on "a//0", "e2b.example.com": "e2b.example.com" [, /0] spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-dual-cidr-ip6-default] - yml_test.go:251: test a-cidr4-0 - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + yml_test.go:260: success: fail, matched all [a-cidr6-0-nxdomain] + yml_test.go:251: test a-cidr4-0-ip6 + yml_test.go:253: checkhost 1234::1 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 a/0 -all" spf.go:747: masks on "a/0", "e2.example.com": "e2.example.com" [/0, ] - spf.go:768: a match: 1.2.3.4, 1.1.1.1, [/0, ] - spf.go:406: "a/0" pass, matched a - yml_test.go:260: success: pass, matched a [a-cidr4-0] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-cidr4-0-ip6] yml_test.go:251: test a-multi-ip1 yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com spf.go:308: check "e10.example.com" 0 0 @@ -3993,21 +4014,6 @@ spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, ] spf.go:406: "a:foo.example.com/24" pass, matched a yml_test.go:260: success: pass, matched a [a-multi-ip2] - yml_test.go:251: test a-nxdomain - yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 a/0 -all" - spf.go:747: masks on "a/0", "e1.example.com": "e1.example.com" [/0, ] - spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-nxdomain] - yml_test.go:251: test a-cidr6-0-ip4mapped - yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com - spf.go:308: check "e2a.example.com" 0 0 - spf.go:330: dns record "v=spf1 a//0 -all" - spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4mapped] yml_test.go:251: test a-cidr6-0-ip6 yml_test.go:253: checkhost 1234::1 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 @@ -4016,6 +4022,22 @@ spf.go:768: a match: 1234::1, 1234::1, [, /0] spf.go:406: "a//0" pass, matched a yml_test.go:260: success: pass, matched a [a-cidr6-0-ip6] + yml_test.go:251: test a-ip6-dualstack + yml_test.go:253: checkhost 1234::1 foo@ipv6.example.com + spf.go:308: check "ipv6.example.com" 0 0 + spf.go:330: dns record "v=spf1 a -all" + spf.go:747: masks on "a", "ipv6.example.com": "ipv6.example.com" [, ] + spf.go:768: a match: 1234::1, 1234::1, [, ] + spf.go:406: "a" pass, matched a + yml_test.go:260: success: pass, matched a [a-ip6-dualstack] + yml_test.go:251: test a-dual-cidr-ip4-match + yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 a/24//64 -all" + spf.go:747: masks on "a/24//64", "e8.example.com": "e8.example.com" [/24, /64] + spf.go:768: a match: 1.2.3.4, 1.2.3.5, [/24, /64] + spf.go:406: "a/24//64" pass, matched a + yml_test.go:260: success: pass, matched a [a-dual-cidr-ip4-match] yml_test.go:251: test a-cidr6-0-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com spf.go:308: check "e2a.example.com" 0 0 @@ -4023,55 +4045,59 @@ spf.go:747: masks on "a//0", "e2a.example.com": "e2a.example.com" [, /0] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [a-cidr6-0-ip4] + yml_test.go:251: test a-dual-cidr-ip4-default + yml_test.go:253: checkhost 1.2.3.4 foo@e8b.example.com + spf.go:308: check "e8b.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//64 -all" + spf.go:747: masks on "a//64", "e8b.example.com": "e8b.example.com" [, /64] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [a-dual-cidr-ip4-default] + yml_test.go:251: test a-bad-cidr6 + yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com + spf.go:308: check "e7.example.com" 0 0 + spf.go:330: dns record "v=spf1 a//129 -all" + spf.go:747: masks on "a//129", "e7.example.com": "" [, ] + spf.go:406: "a//129" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [a-bad-cidr6] yml_test.go:162: suite: Include mechanism semantics and syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] + yml_test.go:167: domain ip7.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com ~all] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 include:ip5.example.com/24 -all] - yml_test.go:167: domain ip7.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.7 ?all] - yml_test.go:167: domain erehwon.example.com - yml_test.go:169: TXT: [v=spfl am not an SPF record] - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 include: -all] yml_test.go:167: domain ip6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.6 ~all] yml_test.go:167: domain ip8.example.com yml_test.go:169: TIMEOUT - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 include:ip8.example.com -all] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 include:e6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 include +all] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] yml_test.go:167: domain ip5.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.5 -all] + yml_test.go:167: domain erehwon.example.com + yml_test.go:169: TXT: [v=spfl am not an SPF record] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 include:ip6.example.com all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 include:ip7.example.com -all] - yml_test.go:251: test include-fail - yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" - spf.go:308: check "ip5.example.com" 1 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" - spf.go:397: all: fail - spf.go:397: all: softfail - yml_test.go:260: success: softfail, matched all [include-fail] - yml_test.go:251: test include-neutral - yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 include:ip7.example.com -all" - spf.go:308: check "ip7.example.com" 1 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" - spf.go:397: all: neutral - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [include-neutral] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 include:erehwon.example.com -all] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 include: -all] + yml_test.go:251: test include-temperror + yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 include:ip8.example.com -all" + spf.go:308: check "ip8.example.com" 1 0 + spf.go:318: dns temp error: lookup : test timeout error + spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error + yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] yml_test.go:251: test include-permerror yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 @@ -4081,12 +4107,13 @@ spf.go:437: unknown field, permerror spf.go:401: "include:e6.example.com" permerror, unknown field yml_test.go:260: success: permerror, unknown field [include-permerror] - yml_test.go:251: test include-syntax-error - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 include +all" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [include-syntax-error] + yml_test.go:251: test include-cidr + yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com + spf.go:308: check "e9.example.com" 0 0 + spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" + spf.go:874: macro contains / + spf.go:401: "include:ip5.example.com/24" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [include-cidr] yml_test.go:251: test include-empty-domain yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com spf.go:308: check "e8.example.com" 0 0 @@ -4104,21 +4131,12 @@ spf.go:397: all: softfail spf.go:397: all: pass yml_test.go:260: success: pass, matched all [include-softfail] - yml_test.go:251: test include-temperror - yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 include:ip8.example.com -all" - spf.go:308: check "ip8.example.com" 1 0 - spf.go:318: dns temp error: lookup : test timeout error - spf.go:401: "include:ip8.example.com" temperror, lookup : test timeout error - yml_test.go:260: success: temperror, lookup : test timeout error [include-temperror] - yml_test.go:251: test include-cidr - yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com - spf.go:308: check "e9.example.com" 0 0 - spf.go:330: dns record "v=spf1 include:ip5.example.com/24 -all" - spf.go:874: macro contains / - spf.go:401: "include:ip5.example.com/24" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [include-cidr] + yml_test.go:251: test include-syntax-error + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 include +all" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [include-syntax-error] yml_test.go:251: test include-none yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 @@ -4127,11 +4145,34 @@ spf.go:330: dns record "" spf.go:401: "include:erehwon.example.com" permerror, no DNS record found yml_test.go:260: success: permerror, no DNS record found [include-none] + yml_test.go:251: test include-fail + yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 include:ip5.example.com ~all" + spf.go:308: check "ip5.example.com" 1 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.5 -all" + spf.go:397: all: fail + spf.go:397: all: softfail + yml_test.go:260: success: softfail, matched all [include-fail] + yml_test.go:251: test include-neutral + yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com + spf.go:308: check "e3.example.com" 0 0 + spf.go:330: dns record "v=spf1 include:ip7.example.com -all" + spf.go:308: check "ip7.example.com" 1 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.7 ?all" + spf.go:397: all: neutral + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [include-neutral] yml_test.go:162: suite: MX mechanism syntax yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:167: domain foo.example.com + yml_test.go:169: MX: {0 foo1.example.com} + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 mx/0 -all] + yml_test.go:169: MX: {0 e1.example.com} yml_test.go:167: domain e2.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: AAAA: [1234::2] @@ -4142,18 +4183,13 @@ yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 mx:abc.123] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 mx//33 -all] - yml_test.go:167: domain foo1.example.com - yml_test.go:169: A: [1.1.1.1] - yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 mx//129 -all] - yml_test.go:167: domain e10.example.com - yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 mx/0 -all] - yml_test.go:169: MX: {0 e1.example.com} + yml_test.go:167: domain foo:bar/baz.example.com + yml_test.go:169: MX: {0 foo:bar/baz.example.com} + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e12.example.com + yml_test.go:169: SPF: [v=spf1 mx:example.-com] yml_test.go:167: domain e2a.example.com yml_test.go:169: AAAA: [1234::1] yml_test.go:169: MX: {0 e2a.example.com} @@ -4162,23 +4198,23 @@ yml_test.go:169: SPF: [v=spf1 mx/33 -all] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 mx:example.com:8080] - yml_test.go:167: domain foo.example.com - yml_test.go:169: MX: {0 foo1.example.com} - yml_test.go:167: domain foo:bar/baz.example.com - yml_test.go:169: MX: {0 foo:bar/baz.example.com} - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e12.example.com - yml_test.go:169: SPF: [v=spf1 mx:example.-com] - yml_test.go:167: domain e13.example.com - yml_test.go:169: SPF: [v=spf1 mx: -all] + yml_test.go:167: domain e11.example.com + yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] + yml_test.go:167: domain e10.example.com + yml_test.go:169: SPF: [v=spf1 mx:foo.example.com/24] yml_test.go:167: domain e2b.example.com yml_test.go:169: A: [1.1.1.1] yml_test.go:169: MX: {0 e2b.example.com} yml_test.go:169: SPF: [v=spf1 mx//0 -all] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 mx:foo.example.com] - yml_test.go:167: domain e11.example.com - yml_test.go:169: SPF: [v=spf1 mx:foo:bar/baz.example.com] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 mx//33 -all] + yml_test.go:167: domain foo1.example.com + yml_test.go:169: A: [1.1.1.1] + yml_test.go:169: A: [1.2.3.5] + yml_test.go:167: domain e13.example.com + yml_test.go:169: SPF: [v=spf1 mx: -all] yml_test.go:251: test mx-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com spf.go:308: check "e6.example.com" 0 0 @@ -4187,48 +4223,6 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6] - yml_test.go:251: test mx-cidr6-0-ip4 - yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com - spf.go:308: check "e2a.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx//0 -all" - spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] - spf.go:828: mx ips: [1234::1] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] - yml_test.go:251: test mx-cidr6-0-ip6 - yml_test.go:253: checkhost 1234::1 foo@e2a.example.com - spf.go:308: check "e2a.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx//0 -all" - spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] - spf.go:828: mx ips: [1234::1] - spf.go:831: mx match: 1234::1, 1234::1, [, /0] - spf.go:411: "mx//0" pass, matched mx - yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] - yml_test.go:251: test mx-empty - yml_test.go:253: checkhost 1.2.3.4 - spf.go:308: check "mail.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx" - spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] - spf.go:828: mx ips: [] - spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [mx-empty] - yml_test.go:251: test mx-nxdomain - yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx/0 -all" - spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] - spf.go:828: mx ips: [] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [mx-nxdomain] - yml_test.go:251: test mx-cidr4-0 - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx/0 -all" - spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] - spf.go:828: mx ips: [1.1.1.1 1234::2] - spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] - spf.go:411: "mx/0" pass, matched mx - yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-bad-cidr4 yml_test.go:253: checkhost 1.2.3.4 foo@e6a.example.com spf.go:308: check "e6a.example.com" 0 0 @@ -4262,6 +4256,23 @@ spf.go:828: mx ips: [1.1.1.1 1234::2] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr4-0-ip6] + yml_test.go:251: test mx-cidr6-0-ip4 + yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com + spf.go:308: check "e2a.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx//0 -all" + spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] + spf.go:828: mx ips: [1234::1] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4] + yml_test.go:251: test mx-cidr6-0-ip6 + yml_test.go:253: checkhost 1234::1 foo@e2a.example.com + spf.go:308: check "e2a.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx//0 -all" + spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] + spf.go:828: mx ips: [1234::1] + spf.go:831: mx match: 1234::1, 1234::1, [, /0] + spf.go:411: "mx//0" pass, matched mx + yml_test.go:260: success: pass, matched mx [mx-cidr6-0-ip6] yml_test.go:251: test mx-bad-cidr6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 @@ -4269,14 +4280,15 @@ spf.go:780: masks on "mx//129", "e7.example.com": "" [, ] spf.go:411: "mx//129" permerror, invalid mask yml_test.go:260: success: permerror, invalid mask [mx-bad-cidr6] - yml_test.go:251: test mx-cidr6-0-ip4mapped - yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com - spf.go:308: check "e2a.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx//0 -all" - spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] - spf.go:828: mx ips: [1234::1] - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] + yml_test.go:251: test mx-cidr4-0 + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx/0 -all" + spf.go:780: masks on "mx/0", "e2.example.com": "e2.example.com" [/0, ] + spf.go:828: mx ips: [1.1.1.1 1234::2] + spf.go:831: mx match: 1.2.3.4, 1.1.1.1, [/0, ] + spf.go:411: "mx/0" pass, matched mx + yml_test.go:260: success: pass, matched mx [mx-cidr4-0] yml_test.go:251: test mx-cidr6-0-nxdomain yml_test.go:253: checkhost 1234::1 foo@e2b.example.com spf.go:308: check "e2b.example.com" 0 0 @@ -4285,6 +4297,22 @@ spf.go:828: mx ips: [1.1.1.1] spf.go:397: all: fail yml_test.go:260: success: fail, matched all [mx-cidr6-0-nxdomain] + yml_test.go:251: test mx-cidr6-0-ip4mapped + yml_test.go:253: checkhost 1.2.3.4 foo@e2a.example.com + spf.go:308: check "e2a.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx//0 -all" + spf.go:780: masks on "mx//0", "e2a.example.com": "e2a.example.com" [, /0] + spf.go:828: mx ips: [1234::1] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [mx-cidr6-0-ip4mapped] + yml_test.go:251: test mx-empty + yml_test.go:253: checkhost 1.2.3.4 + spf.go:308: check "mail.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx" + spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] + spf.go:828: mx ips: [] + spf.go:444: fallback to neutral + yml_test.go:260: success: neutral, [mx-empty] yml_test.go:251: test mx-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com spf.go:308: check "e4.example.com" 0 0 @@ -4293,25 +4321,51 @@ spf.go:514: void lookup: nxdomain spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [mx-implicit] + yml_test.go:251: test mx-nxdomain + yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx/0 -all" + spf.go:780: masks on "mx/0", "e1.example.com": "e1.example.com" [/0, ] + spf.go:828: mx ips: [] + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [mx-nxdomain] yml_test.go:162: suite: EXISTS mechanism syntax + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 exists:mail.example.com] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 exists:err.example.com -all] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 exists:] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 exists] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 exists:mail6.example.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain mail6.example.com yml_test.go:169: AAAA: [CAFE:BABE::4] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 exists] yml_test.go:167: domain err.example.com yml_test.go:169: TIMEOUT - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 exists:] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 exists:mail.example.com/24] + yml_test.go:251: test exists-ip6only + yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com + spf.go:308: check "e5.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [exists-ip6only] + yml_test.go:251: test exists-dnserr + yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:err.example.com -all" + spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error + yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] + yml_test.go:251: test exists-empty-domain + yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:" + spf.go:426: "exists:" permerror, invalid domain + yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:251: test exists-implicit yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 @@ -4339,45 +4393,40 @@ spf.go:640: exists match: 1.2.3.4 spf.go:426: "exists:mail.example.com" pass, matched exists yml_test.go:260: success: pass, matched exists [exists-ip6] - yml_test.go:251: test exists-ip6only - yml_test.go:253: checkhost cafe:babe::3 foo@e5.example.com - spf.go:308: check "e5.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:mail6.example.com -all" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exists-ip6only] - yml_test.go:251: test exists-dnserr - yml_test.go:253: checkhost cafe:babe::3 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:err.example.com -all" - spf.go:426: "exists:err.example.com" temperror, lookup : test timeout error - yml_test.go:260: success: temperror, lookup : test timeout error [exists-dnserr] - yml_test.go:251: test exists-empty-domain - yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:" - spf.go:426: "exists:" permerror, invalid domain - yml_test.go:260: success: permerror, invalid domain [exists-empty-domain] yml_test.go:162: suite: IP4 mechanism syntax + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/32 -all] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e6.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4//32] - yml_test.go:167: domain mail.example.com - yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/33 -all] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4/032 -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ip4] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 -ip4:1.2.3.4 ip6:::FFFF:1.2.3.4] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3.4:8080] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 ip4:1.2.3] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1/0 -all] + yml_test.go:251: test cidr4-0 + yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" + spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 + spf.go:416: "ip4:1.1.1.1/0" pass, matched ip + yml_test.go:260: success: pass, matched ip [cidr4-0] + yml_test.go:251: test ip4-dual-cidr + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" + spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:251: test ip4-mapped-ip6 yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 @@ -4385,6 +4434,19 @@ spf.go:536: ip match: 1.2.3.4 spf.go:416: "ip4:1.2.3.4" fail, matched ip yml_test.go:260: success: fail, matched ip [ip4-mapped-ip6] + yml_test.go:251: test cidr4-32 + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" + spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 + spf.go:416: "ip4:1.2.3.4/32" pass, matched ip + yml_test.go:260: success: pass, matched ip [cidr4-32] + yml_test.go:251: test cidr4-33 + yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com + spf.go:308: check "e3.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" + spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [cidr4-33] yml_test.go:251: test bare-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 @@ -4403,32 +4465,6 @@ spf.go:330: dns record "v=spf1 ip4:1.2.3" spf.go:416: "ip4:1.2.3" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [bad-ip4-short] - yml_test.go:251: test cidr4-0 - yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.1.1.1/0 -all" - spf.go:527: ip match: 0.0.0.0/0 contains 1.2.3.4 - spf.go:416: "ip4:1.1.1.1/0" pass, matched ip - yml_test.go:260: success: pass, matched ip [cidr4-0] - yml_test.go:251: test cidr4-32 - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.4/32 -all" - spf.go:527: ip match: 1.2.3.4/32 contains 1.2.3.4 - spf.go:416: "ip4:1.2.3.4/32" pass, matched ip - yml_test.go:260: success: pass, matched ip [cidr4-32] - yml_test.go:251: test cidr4-33 - yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com - spf.go:308: check "e3.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.4/33 -all" - spf.go:416: "ip4:1.2.3.4/33" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [cidr4-33] - yml_test.go:251: test ip4-dual-cidr - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip4:1.2.3.4//32" - spf.go:416: "ip4:1.2.3.4//32" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [ip4-dual-cidr] yml_test.go:162: suite: IP6 mechanism syntax yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -all ip6] @@ -4444,12 +4480,12 @@ yml_test.go:169: SPF: [v=spf1 ip6::CAFE::BABE] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] - yml_test.go:251: test cidr6-0-ip4 + yml_test.go:251: test cidr6-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [cidr6-0-ip4] + yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-0 yml_test.go:253: checkhost deaf:babe::cab:fee foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 @@ -4457,24 +4493,6 @@ spf.go:527: ip match: ::/0 contains deaf:babe::cab:fee spf.go:416: "ip6:::1.1.1.1/0" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-0] - yml_test.go:251: test cidr6-bad - yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" - spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask - yml_test.go:260: success: permerror, invalid mask [cidr6-bad] - yml_test.go:251: test ip6-bad1 - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" - spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value - yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] - yml_test.go:251: test cidr6-ip4 - yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com - spf.go:308: check "e2.example.com" 0 0 - spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" - spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [cidr6-ip4] yml_test.go:251: test cidr6-129 yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 @@ -4488,130 +4506,155 @@ spf.go:527: ip match: cafe:babe:8000::/33 contains cafe:babe:8000:: spf.go:416: "ip6:Cafe:Babe:8000::/33" pass, matched ip yml_test.go:260: success: pass, matched ip [cidr6-33] + yml_test.go:251: test cidr6-0-ip4 + yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com + spf.go:308: check "e2.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip6:::1.1.1.1/0" + spf.go:444: fallback to neutral + yml_test.go:260: success: neutral, [cidr6-0-ip4] + yml_test.go:251: test cidr6-bad + yml_test.go:253: checkhost 1.2.3.4 foo@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip6:::1.1.1.1//33" + spf.go:416: "ip6:::1.1.1.1//33" permerror, invalid mask + yml_test.go:260: success: permerror, invalid mask [cidr6-bad] yml_test.go:251: test cidr6-33-ip4 yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 ip6:Cafe:Babe:8000::/33" spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [cidr6-33-ip4] + yml_test.go:251: test ip6-bad1 + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 ip6::CAFE::BABE" + spf.go:416: "ip6::CAFE::BABE" permerror, invalid ipX value + yml_test.go:260: success: permerror, invalid ipX value [ip6-bad1] yml_test.go:162: suite: Semantics of exp and other modifiers - yml_test.go:167: domain e16.example.com - yml_test.go:169: SPF: [v=spf1 exp=-all] - yml_test.go:167: domain e20.example.com - yml_test.go:169: SPF: [v=spf1 default=+] - yml_test.go:167: domain e21.example.com - yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] - yml_test.go:167: domain e15.example.com - yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] - yml_test.go:167: domain e22.example.com - yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] - yml_test.go:167: domain e23.example.com - yml_test.go:169: SPF: [v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain e3.example.com yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e4.example.com] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] - yml_test.go:167: domain e10.example.com - yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] - yml_test.go:167: domain e13msg.example.com - yml_test.go:169: TXT: [The %{x}-files.] - yml_test.go:167: domain e21msg.example.com - yml_test.go:169: TIMEOUT - yml_test.go:167: domain e24.example.com - yml_test.go:169: SPF: [v=spf1 redirect=testimplicit.example.com] - yml_test.go:169: A: [192.0.2.1] - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 -all] - yml_test.go:167: domain exp4.example.com - yml_test.go:169: TXT: [%{l} in implementation] - yml_test.go:167: domain e11msg.example.com - yml_test.go:169: TXT: [Answer a fool according to his folly.] - yml_test.go:169: TXT: [Do not answer a fool according to his folly.] + yml_test.go:167: domain e13.example.com + yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] + yml_test.go:167: domain e14.example.com + yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] + yml_test.go:167: domain e16.example.com + yml_test.go:169: SPF: [v=spf1 exp=-all] yml_test.go:167: domain e17.example.com yml_test.go:169: SPF: [v=spf1 redirect=-all ?all] + yml_test.go:167: domain e21msg.example.com + yml_test.go:169: TIMEOUT + yml_test.go:167: domain e22.example.com + yml_test.go:169: SPF: [v=spf1 exp=mail.example.com -all] yml_test.go:167: domain nonascii.example.com yml_test.go:169: SPF: [v=spf1 exp=badexp.example.com -all] - yml_test.go:167: domain testimplicit.example.com - yml_test.go:169: SPF: [v=spf1 a -all] - yml_test.go:169: A: [192.0.2.2] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 exp=exp1.example.com redirect=e2.example.com] yml_test.go:167: domain exp2.example.com yml_test.go:169: TXT: [See me.] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 -all foo=%abc] - yml_test.go:167: domain tworecs.example.com - yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] - yml_test.go:167: domain exp1.example.com - yml_test.go:169: TXT: [No-see-um] - yml_test.go:167: domain e11.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] - yml_test.go:167: domain e12.example.com - yml_test.go:169: SPF: [v=spf1 exp= -all] - yml_test.go:167: domain e13.example.com - yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all] - yml_test.go:167: domain twoexp.example.com - yml_test.go:169: TXT: [one] - yml_test.go:169: TXT: [two] - yml_test.go:167: domain e14.example.com - yml_test.go:169: SPF: [v=spf1 exp=e13msg.example.com -all exp=e11msg.example.com] yml_test.go:167: domain e18.example.com yml_test.go:169: SPF: [v=spf1 ?all redirect=] yml_test.go:167: domain e19.example.com yml_test.go:169: SPF: [v=spf1 default=pass] - yml_test.go:167: domain badexp.example.com - yml_test.go:169: TXT: [Explanation] + yml_test.go:167: domain e21.example.com + yml_test.go:169: SPF: [v=spf1 exp=e21msg.example.com -all] + yml_test.go:167: domain e23.example.com + yml_test.go:169: SPF: [v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all] yml_test.go:167: domain mail.example.com yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain exp1.example.com + yml_test.go:169: TXT: [No-see-um] + yml_test.go:167: domain exp4.example.com + yml_test.go:169: TXT: [%{l} in implementation] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 =all] + yml_test.go:167: domain e11.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=e11msg.example.com] + yml_test.go:167: domain e13msg.example.com + yml_test.go:169: TXT: [The %{x}-files.] + yml_test.go:167: domain e15.example.com + yml_test.go:169: SPF: [v=spf1 redirect=e12.example.com -all redirect=e12.example.com] + yml_test.go:167: domain e24.example.com + yml_test.go:169: SPF: [v=spf1 redirect=testimplicit.example.com] + yml_test.go:169: A: [192.0.2.1] + yml_test.go:167: domain e5.example.com + yml_test.go:169: SPF: [v=spf1 1up=foo] yml_test.go:167: domain e4.example.com yml_test.go:169: SPF: [v=spf1 -all exp=exp2.example.com] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=exp4.example.com] + yml_test.go:167: domain e10.example.com + yml_test.go:169: SPF: [v=spf1 redirect=erehwon.example.com] + yml_test.go:167: domain e20.example.com + yml_test.go:169: SPF: [v=spf1 default=+] + yml_test.go:167: domain badexp.example.com + yml_test.go:169: TXT: [Explanation] + yml_test.go:167: domain twoexp.example.com + yml_test.go:169: TXT: [one] + yml_test.go:169: TXT: [two] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 -all] + yml_test.go:167: domain tworecs.example.com + yml_test.go:169: SPF: [v=spf1 exp=twoexp.example.com -all] + yml_test.go:167: domain testimplicit.example.com + yml_test.go:169: SPF: [v=spf1 a -all] + yml_test.go:169: A: [192.0.2.2] yml_test.go:167: domain exp3.example.com yml_test.go:169: TXT: [Correct!] - yml_test.go:167: domain e5.example.com - yml_test.go:169: SPF: [v=spf1 1up=foo] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 =all] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 include:e3.example.com -all exp=exp3.example.com] + yml_test.go:167: domain e11msg.example.com + yml_test.go:169: TXT: [Answer a fool according to his folly.] + yml_test.go:169: TXT: [Do not answer a fool according to his folly.] + yml_test.go:167: domain e12.example.com + yml_test.go:169: SPF: [v=spf1 exp= -all] + yml_test.go:251: test exp-void + yml_test.go:253: checkhost 1.2.3.4 foo@e23.example.com + spf.go:308: check "e23.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all" + spf.go:747: masks on "a:erehwon.example.com", "e23.example.com": "erehwon.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a:foobar.com", "e23.example.com": "foobar.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:430: exp= ignored + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [exp-void] + yml_test.go:251: test redirect-cancels-exp + yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" + spf.go:430: exp= ignored + spf.go:308: check "e2.example.com" 1 0 + spf.go:330: dns record "v=spf1 -all" + spf.go:397: all: fail + spf.go:434: "redirect=e2.example.com": fail, matched all + yml_test.go:260: success: fail, matched all [redirect-cancels-exp] yml_test.go:251: test invalid-modifier yml_test.go:253: checkhost 1.2.3.4 foo@e5.example.com spf.go:308: check "e5.example.com" 0 0 spf.go:330: dns record "v=spf1 1up=foo" spf.go:437: unknown field, permerror yml_test.go:260: success: permerror, unknown field [invalid-modifier] - yml_test.go:251: test empty-modifier-name - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 =all" - spf.go:437: unknown field, permerror - yml_test.go:260: success: permerror, unknown field [empty-modifier-name] - yml_test.go:251: test dorky-sentinel - yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" + yml_test.go:251: test exp-multiple-txt + yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com + spf.go:308: check "e11.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [dorky-sentinel] - yml_test.go:251: test explanation-syntax-error - yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com - spf.go:308: check "e13.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" + yml_test.go:260: success: fail, matched all [exp-multiple-txt] + yml_test.go:251: test exp-no-txt + yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com + spf.go:308: check "e22.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=mail.example.com -all" spf.go:430: exp= ignored spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [explanation-syntax-error] + yml_test.go:260: success: fail, matched all [exp-no-txt] yml_test.go:251: test redirect-twice yml_test.go:253: checkhost 1.2.3.4 foo@e15.example.com spf.go:308: check "e15.example.com" 0 0 spf.go:330: dns record "v=spf1 redirect=e12.example.com -all redirect=e12.example.com" spf.go:353: too many redirects yml_test.go:260: success: permerror, invalid domain [redirect-twice] - yml_test.go:251: test redirect-none - yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com - spf.go:308: check "e10.example.com" 0 0 - spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" - spf.go:308: check "erehwon.example.com" 1 0 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found - yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test non-ascii-exp yml_test.go:253: checkhost 1.2.3.4 foobar@nonascii.example.com spf.go:308: check "nonascii.example.com" 0 0 @@ -4619,13 +4662,6 @@ spf.go:430: exp= ignored spf.go:397: all: fail yml_test.go:260: success: fail, matched all [non-ascii-exp] - yml_test.go:251: test two-exp-records - yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com - spf.go:308: check "tworecs.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" - spf.go:430: exp= ignored - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:251: test redirect-implicit yml_test.go:253: checkhost 192.0.2.2 bar@e24.example.com spf.go:308: check "e24.example.com" 0 0 @@ -4637,24 +4673,14 @@ spf.go:406: "a" pass, matched a spf.go:434: "redirect=testimplicit.example.com": pass, matched a yml_test.go:260: success: pass, matched a [redirect-implicit] - yml_test.go:251: test exp-no-txt - yml_test.go:253: checkhost 1.2.3.4 foo@e22.example.com - spf.go:308: check "e22.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=mail.example.com -all" - spf.go:430: exp= ignored - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-no-txt] - yml_test.go:251: test exp-void - yml_test.go:253: checkhost 1.2.3.4 foo@e23.example.com - spf.go:308: check "e23.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:erehwon.example.com a:foobar.com exp=nxdomain.com -all" - spf.go:747: masks on "a:erehwon.example.com", "e23.example.com": "erehwon.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a:foobar.com", "e23.example.com": "foobar.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:430: exp= ignored - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-void] + yml_test.go:251: test redirect-none + yml_test.go:253: checkhost 1.2.3.4 foo@e10.example.com + spf.go:308: check "e10.example.com" 0 0 + spf.go:330: dns record "v=spf1 redirect=erehwon.example.com" + spf.go:308: check "erehwon.example.com" 1 0 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + spf.go:434: "redirect=erehwon.example.com": permerror, no DNS record found + yml_test.go:260: success: permerror, no DNS record found [redirect-none] yml_test.go:251: test include-ignores-exp yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com spf.go:308: check "e7.example.com" 0 0 @@ -4668,6 +4694,20 @@ spf.go:434: "redirect=e4.example.com": fail, matched all spf.go:397: all: fail yml_test.go:260: success: fail, matched all [include-ignores-exp] + yml_test.go:251: test exp-dns-error + yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com + spf.go:308: check "e21.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" + spf.go:430: exp= ignored + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [exp-dns-error] + yml_test.go:251: test explanation-syntax-error + yml_test.go:253: checkhost 1.2.3.4 foo@e13.example.com + spf.go:308: check "e13.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=e13msg.example.com -all" + spf.go:430: exp= ignored + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [explanation-syntax-error] yml_test.go:251: test redirect-cancels-prior-exp yml_test.go:253: checkhost 1.2.3.4 foo@e3.example.com spf.go:308: check "e3.example.com" 0 0 @@ -4678,92 +4718,88 @@ spf.go:397: all: fail spf.go:434: "redirect=e4.example.com": fail, matched all yml_test.go:260: success: fail, matched all [redirect-cancels-prior-exp] - yml_test.go:251: test exp-multiple-txt - yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com - spf.go:308: check "e11.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e11msg.example.com" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-multiple-txt] - yml_test.go:251: test exp-dns-error - yml_test.go:253: checkhost 1.2.3.4 foo@e21.example.com - spf.go:308: check "e21.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=e21msg.example.com -all" - spf.go:430: exp= ignored + yml_test.go:251: test empty-modifier-name + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 =all" + spf.go:437: unknown field, permerror + yml_test.go:260: success: permerror, unknown field [empty-modifier-name] + yml_test.go:251: test dorky-sentinel + yml_test.go:253: checkhost 1.2.3.4 Macro Error@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=exp4.example.com" spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [exp-dns-error] - yml_test.go:251: test redirect-cancels-exp - yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=exp1.example.com redirect=e2.example.com" + yml_test.go:260: success: fail, matched all [dorky-sentinel] + yml_test.go:251: test two-exp-records + yml_test.go:253: checkhost 1.2.3.4 foobar@tworecs.example.com + spf.go:308: check "tworecs.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=twoexp.example.com -all" spf.go:430: exp= ignored - spf.go:308: check "e2.example.com" 1 0 - spf.go:330: dns record "v=spf1 -all" spf.go:397: all: fail - spf.go:434: "redirect=e2.example.com": fail, matched all - yml_test.go:260: success: fail, matched all [redirect-cancels-exp] + yml_test.go:260: success: fail, matched all [two-exp-records] yml_test.go:162: suite: Macro expansion rules - yml_test.go:167: domain example.com.d.spf.example.com - yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] - yml_test.go:167: domain macro%percent space%20url-space.example.com - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] + yml_test.go:167: domain somewhat.long.exp.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] + yml_test.go:167: domain e6msg.example.com + yml_test.go:169: TXT: [connect from %{p}] + yml_test.go:167: domain e9.example.com + yml_test.go:169: SPF: [v=spf1 a:%{H} -all] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 a:%{a}.example.com -all] - yml_test.go:167: domain 40.218.168.192.in-addr.arpa - yml_test.go:169: PTR: [mx.example.com] yml_test.go:167: 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 yml_test.go:169: PTR: [mx.example.com] - yml_test.go:167: domain e7.example.com - yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] - yml_test.go:167: domain e9.example.com - yml_test.go:169: SPF: [v=spf1 a:%{H} -all] - yml_test.go:167: domain 40.218.168.192.example.com - yml_test.go:169: TXT: [Connections from %{c} not authorized.] - yml_test.go:167: domain e6.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] + yml_test.go:167: domain e10.example.com + yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] + yml_test.go:167: 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 + yml_test.go:169: TXT: [Congratulations! That was tricky.] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=e4msg.example.com] + yml_test.go:167: domain e4msg.example.com + yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] yml_test.go:167: domain 41.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] - yml_test.go:167: domain mx.e7.example.com.should.example.com - yml_test.go:169: A: [127.0.0.2] - yml_test.go:167: domain msg8.example.com - yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] - yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com - yml_test.go:169: A: [127.0.0.2] + yml_test.go:167: domain mx.e7.example.com + yml_test.go:169: A: [192.168.218.42] + yml_test.go:167: domain e8.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] yml_test.go:167: domain e12.example.com yml_test.go:169: SPF: [v=spf1 exists:%{l2r+-}.user.%{d2}] + yml_test.go:167: 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 + yml_test.go:169: PTR: [mx.example.com] + yml_test.go:167: domain o.spf.example.com + yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] + yml_test.go:167: domain example.com + yml_test.go:169: A: [192.168.90.76] + yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] yml_test.go:167: domain exp.example.com yml_test.go:169: SPF: [v=spf1 exp=msg.example.com. -all] + yml_test.go:167: domain e1a.example.com + yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] + yml_test.go:167: domain macro%percent space%20url-space.example.com + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] + yml_test.go:167: domain 40.218.168.192.example.com + yml_test.go:169: TXT: [Connections from %{c} not authorized.] + yml_test.go:167: domain example.com.d.spf.example.com + yml_test.go:169: SPF: [v=spf1 redirect=a.spf.example.com] yml_test.go:167: domain e1.example.com yml_test.go:169: SPF: [v=spf1 -exists:%(ir).sbl.example.com ?all] - yml_test.go:167: 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 - yml_test.go:169: TXT: [Congratulations! That was tricky.] - yml_test.go:167: domain e11.example.com - yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] yml_test.go:167: domain 42.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] yml_test.go:169: PTR: [mx.e7.example.com] - yml_test.go:167: domain a.spf.example.com - yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] - yml_test.go:167: domain o.spf.example.com - yml_test.go:169: SPF: [v=spf1 ip4:192.168.218.40] + yml_test.go:167: domain mx.e7.example.com.should.example.com + yml_test.go:169: A: [127.0.0.2] + yml_test.go:167: domain e7.example.com + yml_test.go:169: SPF: [v=spf1 exists:%{p}.should.example.com ~exists:%{p}.ok.example.com] + yml_test.go:167: domain msg8.example.com + yml_test.go:169: TXT: [http://example.com/why.html?l=%{L}] + yml_test.go:167: domain _spfh.example.com + yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] + yml_test.go:167: domain 1.2.3.4.gladstone.philip.user.example.com + yml_test.go:169: A: [127.0.0.2] yml_test.go:167: domain e1e.example.com yml_test.go:169: SPF: [v=spf1 exists:foo%(ir).sbl.example.com ?all] - yml_test.go:167: domain e1t.example.com - yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=%{ir}.example.com] - yml_test.go:167: domain somewhat.long.exp.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com] - yml_test.go:167: domain e6msg.example.com - yml_test.go:169: TXT: [connect from %{p}] - yml_test.go:167: domain example.com - yml_test.go:169: A: [192.168.90.76] - yml_test.go:169: SPF: [v=spf1 redirect=%{d}.d.spf.example.com.] - yml_test.go:167: domain msg.example.com - yml_test.go:169: TXT: [This is a test.] - yml_test.go:167: domain e1a.example.com - yml_test.go:169: SPF: [v=spf1 a:macro%%percent%_%_space%-url-space.example.com -all] yml_test.go:167: domain e2.example.com yml_test.go:169: SPF: [v=spf1 -all exp=%{r}.example.com] yml_test.go:167: domain mx.example.com @@ -4771,30 +4807,24 @@ yml_test.go:169: A: [192.168.218.42] yml_test.go:169: AAAA: [CAFE:BABE::2] yml_test.go:169: AAAA: [CAFE:BABE::3] - yml_test.go:167: 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 + yml_test.go:167: domain 40.218.168.192.in-addr.arpa yml_test.go:169: PTR: [mx.example.com] - yml_test.go:167: domain mx.e7.example.com - yml_test.go:169: A: [192.168.218.42] - yml_test.go:167: domain e8.example.com - yml_test.go:169: SPF: [v=spf1 -all exp=msg8.%{D2}] - yml_test.go:167: domain msgbas2x.cos.example.com - yml_test.go:169: A: [192.168.218.40] - yml_test.go:167: domain _spfh.example.com - yml_test.go:169: SPF: [v=spf1 -a:%{h} +all] yml_test.go:167: domain mx.example.com.ok.example.com yml_test.go:169: A: [127.0.0.2] + yml_test.go:167: domain e6.example.com + yml_test.go:169: SPF: [v=spf1 -all exp=e6msg.example.com] + yml_test.go:167: domain e11.example.com + yml_test.go:169: SPF: [v=spf1 exists:%{i}.%{l2r-}.user.%{d2}] + yml_test.go:167: domain e1t.example.com + yml_test.go:169: SPF: [v=spf1 exists:foo%.sbl.example.com ?all] yml_test.go:167: domain bar.foo.user.example.com yml_test.go:169: A: [127.0.0.2] - yml_test.go:167: domain e4msg.example.com - yml_test.go:169: TXT: [%{c} is queried as %{ir}.%{v}.arpa] - yml_test.go:167: domain e10.example.com - yml_test.go:169: SPF: [v=spf1 -include:_spfh.%{d2} ip4:1.2.3.0/24 -all] - yml_test.go:251: test invalid-trailing-macro-char - yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com - spf.go:308: check "e1t.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" - spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] + yml_test.go:167: domain a.spf.example.com + yml_test.go:169: SPF: [v=spf1 include:o.spf.example.com. ~all] + yml_test.go:167: domain msgbas2x.cos.example.com + yml_test.go:169: A: [192.168.218.40] + yml_test.go:167: domain msg.example.com + yml_test.go:169: TXT: [This is a test.] yml_test.go:251: test macro-mania-in-domain yml_test.go:253: checkhost 1.2.3.4 test@e1a.example.com spf.go:308: check "e1a.example.com" 0 0 @@ -4804,118 +4834,24 @@ spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] spf.go:406: "a:macro%%percent%_%_space%-url-space.example.com" pass, matched a yml_test.go:260: success: pass, matched a [macro-mania-in-domain] - yml_test.go:251: test invalid-hello-macro - yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com - spf.go:308: check "e9.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:%{H} -all" - spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] - spf.go:923: macro "H": ["H" "H" "" "" ""] - spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" - spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [invalid-hello-macro] - yml_test.go:251: test hello-domain-literal - yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com - spf.go:308: check "e9.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:%{H} -all" - spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] - spf.go:923: macro "H": ["H" "H" "" "" ""] - spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" - spf.go:514: void lookup: nxdomain - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [hello-domain-literal] - yml_test.go:251: test trailing-dot-domain - yml_test.go:253: checkhost 192.168.218.40 test@example.com - spf.go:308: check "example.com" 0 0 - spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." - spf.go:923: macro "d": ["d" "d" "" "" ""] - spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." - spf.go:308: check "example.com.d.spf.example.com." 1 0 - spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" - spf.go:308: check "a.spf.example.com" 2 0 - spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" - spf.go:308: check "o.spf.example.com." 3 0 - spf.go:330: dns record "v=spf1 ip4:192.168.218.40" - spf.go:536: ip match: 192.168.218.40 - spf.go:416: "ip4:192.168.218.40" pass, matched ip - spf.go:401: "include:o.spf.example.com." pass, matched ip - spf.go:434: "redirect=a.spf.example.com": pass, matched ip - spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip - yml_test.go:260: success: pass, matched ip [trailing-dot-domain] - yml_test.go:251: test invalid-macro-char - yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com - spf.go:308: check "e1.example.com" 0 0 - spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" - spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] - yml_test.go:251: test invalid-embedded-macro-char - yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com - spf.go:308: check "e1e.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" - spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] - yml_test.go:251: test v-macro-ip4 - yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [v-macro-ip4] - yml_test.go:251: test p-macro-ip4-valid - yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] - yml_test.go:251: test upper-macro - yml_test.go:253: checkhost 192.168.218.42 ~jack&jill=up-a_b3.c@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [upper-macro] - yml_test.go:251: test macro-reverse-split-on-dash - yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com - spf.go:308: check "e11.example.com" 0 0 - spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" - spf.go:923: macro "i": ["i" "i" "" "" ""] - spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] - spf.go:923: macro "d2": ["d2" "d" "2" "" ""] - spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" - spf.go:640: exists match: 127.0.0.2 - spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists - yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] - yml_test.go:251: test trailing-dot-exp - yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com - spf.go:308: check "exp.example.com" 0 0 - spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" - spf.go:430: exp= ignored - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [trailing-dot-exp] yml_test.go:251: test exp-txt-macro-char yml_test.go:253: checkhost 192.168.218.40 test@e3.example.com spf.go:308: check "e3.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=%{ir}.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [exp-txt-macro-char] - yml_test.go:251: test domain-name-truncation - yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com - spf.go:308: check "somewhat.long.exp.example.com" 0 0 - spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" + yml_test.go:251: test v-macro-ip4 + yml_test.go:253: checkhost 192.168.218.40 test@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [domain-name-truncation] + yml_test.go:260: success: fail, matched all [v-macro-ip4] yml_test.go:251: test v-macro-ip6 yml_test.go:253: checkhost cafe:babe::1 test@e4.example.com spf.go:308: check "e4.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e4msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [v-macro-ip6] - yml_test.go:251: test undef-macro - yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com - spf.go:308: check "e5.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" - spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] - spf.go:923: macro "a": [] - spf.go:406: "a:%{a}.example.com" permerror, invalid macro - yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test require-valid-helo yml_test.go:253: checkhost 1.2.3.4 test@e10.example.com spf.go:308: check "e10.example.com" 0 0 @@ -4931,12 +4867,26 @@ spf.go:397: all: pass spf.go:401: "include:_spfh.%{d2}" fail, matched all yml_test.go:260: success: fail, matched all [require-valid-helo] + yml_test.go:251: test undef-macro + yml_test.go:253: checkhost cafe:babe::c0a8:da28 test@e5.example.com + spf.go:308: check "e5.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:%{a}.example.com -all" + spf.go:747: masks on "a:%{a}.example.com", "e5.example.com": "%{a}.example.com" [, ] + spf.go:923: macro "a": [] + spf.go:406: "a:%{a}.example.com" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [undef-macro] yml_test.go:251: test p-macro-ip4-novalid yml_test.go:253: checkhost 192.168.218.40 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip4-novalid] + yml_test.go:251: test p-macro-ip4-valid + yml_test.go:253: checkhost 192.168.218.41 test@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [p-macro-ip4-valid] yml_test.go:251: test p-macro-ip6-novalid yml_test.go:253: checkhost cafe:babe::1 test@e6.example.com spf.go:308: check "e6.example.com" 0 0 @@ -4949,6 +4899,16 @@ spf.go:330: dns record "v=spf1 -all exp=e6msg.example.com" spf.go:397: all: fail yml_test.go:260: success: fail, matched all [p-macro-ip6-valid] + yml_test.go:251: test invalid-hello-macro + yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com + spf.go:308: check "e9.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:%{H} -all" + spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] + spf.go:923: macro "H": ["H" "H" "" "" ""] + spf.go:1020: macro expanded "%{H}" to "JUMPIN%27+JUPITER" + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [invalid-hello-macro] yml_test.go:251: test macro-multiple-delimiters yml_test.go:253: checkhost 1.2.3.4 foo-bar+zip+quux@e12.example.com spf.go:308: check "e12.example.com" 0 0 @@ -4959,27 +4919,127 @@ spf.go:640: exists match: 127.0.0.2 spf.go:426: "exists:%{l2r+-}.user.%{d2}" pass, matched exists yml_test.go:260: success: pass, matched exists [macro-multiple-delimiters] + yml_test.go:251: test trailing-dot-domain + yml_test.go:253: checkhost 192.168.218.40 test@example.com + spf.go:308: check "example.com" 0 0 + spf.go:330: dns record "v=spf1 redirect=%{d}.d.spf.example.com." + spf.go:923: macro "d": ["d" "d" "" "" ""] + spf.go:1020: macro expanded "%{d}.d.spf.example.com." to "example.com.d.spf.example.com." + spf.go:308: check "example.com.d.spf.example.com." 1 0 + spf.go:330: dns record "v=spf1 redirect=a.spf.example.com" + spf.go:308: check "a.spf.example.com" 2 0 + spf.go:330: dns record "v=spf1 include:o.spf.example.com. ~all" + spf.go:308: check "o.spf.example.com." 3 0 + spf.go:330: dns record "v=spf1 ip4:192.168.218.40" + spf.go:536: ip match: 192.168.218.40 + spf.go:416: "ip4:192.168.218.40" pass, matched ip + spf.go:401: "include:o.spf.example.com." pass, matched ip + spf.go:434: "redirect=a.spf.example.com": pass, matched ip + spf.go:434: "redirect=%{d}.d.spf.example.com.": pass, matched ip + yml_test.go:260: success: pass, matched ip [trailing-dot-domain] + yml_test.go:251: test trailing-dot-exp + yml_test.go:253: checkhost 192.168.218.40 test@exp.example.com + spf.go:308: check "exp.example.com" 0 0 + spf.go:330: dns record "v=spf1 exp=msg.example.com. -all" + spf.go:430: exp= ignored + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [trailing-dot-exp] + yml_test.go:251: test invalid-macro-char + yml_test.go:253: checkhost 192.168.218.40 test@e1.example.com + spf.go:308: check "e1.example.com" 0 0 + spf.go:330: dns record "v=spf1 -exists:%(ir).sbl.example.com ?all" + spf.go:426: "exists:%(ir).sbl.example.com" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [invalid-macro-char] + yml_test.go:251: test invalid-trailing-macro-char + yml_test.go:253: checkhost 192.168.218.40 test@e1t.example.com + spf.go:308: check "e1t.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:foo%.sbl.example.com ?all" + spf.go:426: "exists:foo%.sbl.example.com" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [invalid-trailing-macro-char] + yml_test.go:251: test domain-name-truncation + yml_test.go:253: checkhost 192.168.218.40 test@somewhat.long.exp.example.com + spf.go:308: check "somewhat.long.exp.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=foobar.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.%{o}.example.com" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [domain-name-truncation] + yml_test.go:251: test upper-macro + yml_test.go:253: checkhost 192.168.218.42 ~jack&jill=up-a_b3.c@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 -all exp=msg8.%{D2}" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [upper-macro] + yml_test.go:251: test hello-domain-literal + yml_test.go:253: checkhost 192.168.218.40 test@e9.example.com + spf.go:308: check "e9.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:%{H} -all" + spf.go:747: masks on "a:%{H}", "e9.example.com": "%{H}" [, ] + spf.go:923: macro "H": ["H" "H" "" "" ""] + spf.go:1020: macro expanded "%{H}" to "%5B192.168.218.40%5D" + spf.go:514: void lookup: nxdomain + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [hello-domain-literal] + yml_test.go:251: test macro-reverse-split-on-dash + yml_test.go:253: checkhost 1.2.3.4 philip-gladstone-test@e11.example.com + spf.go:308: check "e11.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:%{i}.%{l2r-}.user.%{d2}" + spf.go:923: macro "i": ["i" "i" "" "" ""] + spf.go:923: macro "l2r-": ["l2r-" "l" "2" "r" "-"] + spf.go:923: macro "d2": ["d2" "d" "2" "" ""] + spf.go:1020: macro expanded "%{i}.%{l2r-}.user.%{d2}" to "1.2.3.4.gladstone.philip.user.example.com" + spf.go:640: exists match: 127.0.0.2 + spf.go:426: "exists:%{i}.%{l2r-}.user.%{d2}" pass, matched exists + yml_test.go:260: success: pass, matched exists [macro-reverse-split-on-dash] + yml_test.go:251: test invalid-embedded-macro-char + yml_test.go:253: checkhost 192.168.218.40 test@e1e.example.com + spf.go:308: check "e1e.example.com" 0 0 + spf.go:330: dns record "v=spf1 exists:foo%(ir).sbl.example.com ?all" + spf.go:426: "exists:foo%(ir).sbl.example.com" permerror, invalid macro + yml_test.go:260: success: permerror, invalid macro [invalid-embedded-macro-char] yml_test.go:162: suite: Processing limits - yml_test.go:167: domain e2.example.com - yml_test.go:169: SPF: [v=spf1 include:e3.example.com] - yml_test.go:169: A: [1.2.3.7] + yml_test.go:167: domain e4.example.com + yml_test.go:169: SPF: [v=spf1 mx] + yml_test.go:169: MX: {0 mail.example.com} + yml_test.go:169: MX: {1 mail.example.com} + yml_test.go:169: MX: {2 mail.example.com} + yml_test.go:169: MX: {3 mail.example.com} + yml_test.go:169: MX: {4 mail.example.com} + yml_test.go:169: MX: {5 mail.example.com} + yml_test.go:169: MX: {6 mail.example.com} + yml_test.go:169: MX: {7 mail.example.com} + yml_test.go:169: MX: {8 mail.example.com} + yml_test.go:169: MX: {9 mail.example.com} + yml_test.go:169: MX: {10 e4.example.com} + yml_test.go:169: A: [1.2.3.5] yml_test.go:167: domain e5.example.com yml_test.go:169: SPF: [v=spf1 ptr] yml_test.go:169: A: [1.2.3.5] + yml_test.go:167: domain e2.example.com + yml_test.go:169: SPF: [v=spf1 include:e3.example.com] + yml_test.go:169: A: [1.2.3.7] + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 include:e2.example.com] + yml_test.go:169: A: [1.2.3.8] yml_test.go:167: domain e7.example.com yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.20] - yml_test.go:167: domain inc.example.com - yml_test.go:169: SPF: [v=spf1 a a a a a a a a] - yml_test.go:169: A: [1.2.3.10] - yml_test.go:167: domain mail.example.com + yml_test.go:167: domain e10.example.com + yml_test.go:169: SPF: [v=spf1 a -all] + yml_test.go:169: A: [1.2.3.1] + yml_test.go:169: A: [1.2.3.2] + yml_test.go:169: A: [1.2.3.3] yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e1.example.com - yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] + yml_test.go:169: A: [1.2.3.5] yml_test.go:169: A: [1.2.3.6] - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 include:e2.example.com] + yml_test.go:169: A: [1.2.3.7] yml_test.go:169: A: [1.2.3.8] + yml_test.go:169: A: [1.2.3.9] + yml_test.go:169: A: [1.2.3.10] + yml_test.go:169: A: [1.2.3.11] + yml_test.go:169: A: [1.2.3.12] + yml_test.go:167: domain e11.example.com + yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all] + yml_test.go:167: domain mail.example.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain 5.3.2.1.in-addr.arpa yml_test.go:169: PTR: [e1.example.com.] yml_test.go:169: PTR: [e2.example.com.] @@ -4996,144 +5056,20 @@ yml_test.go:169: SPF: [v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.8] yml_test.go:169: MX: {10 e6.example.com} + yml_test.go:167: domain inc.example.com + yml_test.go:169: SPF: [v=spf1 a a a a a a a a] + yml_test.go:169: A: [1.2.3.10] yml_test.go:167: domain e9.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all] yml_test.go:169: A: [1.2.3.21] - yml_test.go:167: domain e12.example.com - yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com ?all] - yml_test.go:167: domain e4.example.com - yml_test.go:169: SPF: [v=spf1 mx] - yml_test.go:169: MX: {0 mail.example.com} - yml_test.go:169: MX: {1 mail.example.com} - yml_test.go:169: MX: {2 mail.example.com} - yml_test.go:169: MX: {3 mail.example.com} - yml_test.go:169: MX: {4 mail.example.com} - yml_test.go:169: MX: {5 mail.example.com} - yml_test.go:169: MX: {6 mail.example.com} - yml_test.go:169: MX: {7 mail.example.com} - yml_test.go:169: MX: {8 mail.example.com} - yml_test.go:169: MX: {9 mail.example.com} - yml_test.go:169: MX: {10 e4.example.com} - yml_test.go:169: A: [1.2.3.5] - yml_test.go:167: domain e11.example.com - yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all] yml_test.go:167: domain e8.example.com yml_test.go:169: SPF: [v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all] yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain e10.example.com - yml_test.go:169: SPF: [v=spf1 a -all] - yml_test.go:169: A: [1.2.3.1] - yml_test.go:169: A: [1.2.3.2] - yml_test.go:169: A: [1.2.3.3] - yml_test.go:169: A: [1.2.3.4] - yml_test.go:169: A: [1.2.3.5] + yml_test.go:167: domain e12.example.com + yml_test.go:169: TXT: [v=spf1 a:err.example.com a:err1.example.com ?all] + yml_test.go:167: domain e1.example.com + yml_test.go:169: SPF: [v=spf1 ip4:1.1.1.1 redirect=e1.example.com] yml_test.go:169: A: [1.2.3.6] - yml_test.go:169: A: [1.2.3.7] - yml_test.go:169: A: [1.2.3.8] - yml_test.go:169: A: [1.2.3.9] - yml_test.go:169: A: [1.2.3.10] - yml_test.go:169: A: [1.2.3.11] - yml_test.go:169: A: [1.2.3.12] - yml_test.go:251: test mech-over-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com - spf.go:308: check "e7.example.com" 0 0 - spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" - spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] - spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] - spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] - spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:378: void lookup limit reached - yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] - yml_test.go:251: test include-at-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com - spf.go:308: check "e8.example.com" 0 0 - spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" - spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] - spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] - spf.go:406: "a" pass, matched a - yml_test.go:260: success: pass, matched a [include-at-limit] - yml_test.go:251: test mx-limit - yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com - spf.go:308: check "e4.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx" - spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] - spf.go:411: "mx" permerror, too many MX records - yml_test.go:260: success: permerror, too many MX records [mx-limit] - yml_test.go:251: test false-a-limit - yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com - spf.go:308: check "e10.example.com" 0 0 - spf.go:330: dns record "v=spf1 a -all" - spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] - spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] - spf.go:406: "a" pass, matched a - yml_test.go:260: success: pass, matched a [false-a-limit] - yml_test.go:251: test mech-at-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com - spf.go:308: check "e6.example.com" 0 0 - spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] - spf.go:828: mx ips: [1.2.3.8] - spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:536: ip match: 1.2.3.4 - spf.go:416: "ip4:1.2.3.4" pass, matched ip - yml_test.go:260: success: pass, matched ip [mech-at-limit] - yml_test.go:251: test include-over-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com - spf.go:308: check "e9.example.com" 0 0 - spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" - spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] - spf.go:308: check "inc.example.com" 2 0 - spf.go:330: dns record "v=spf1 a a a a a a a a" - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] - spf.go:444: fallback to neutral - spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] - spf.go:373: lookup limit reached - yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] - yml_test.go:251: test void-at-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e12.example.com - spf.go:308: check "e12.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com ?all" - spf.go:747: masks on "a:err.example.com", "e12.example.com": "err.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a:err1.example.com", "e12.example.com": "err1.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:397: all: neutral - yml_test.go:260: success: neutral, matched all [void-at-limit] - yml_test.go:251: test void-over-limit - yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com - spf.go:308: check "e11.example.com" 0 0 - spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all" - spf.go:747: masks on "a:err.example.com", "e11.example.com": "err.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a:err1.example.com", "e11.example.com": "err1.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:747: masks on "a:err2.example.com", "e11.example.com": "err2.example.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:378: void lookup limit reached - yml_test.go:260: success: permerror, void lookup limit reached [void-over-limit] yml_test.go:251: test redirect-loop yml_test.go:253: checkhost 1.2.3.4 foo@e1.example.com spf.go:308: check "e1.example.com" 0 0 @@ -5173,6 +5109,46 @@ spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached spf.go:434: "redirect=e1.example.com": permerror, lookup limit reached yml_test.go:260: success: permerror, lookup limit reached [redirect-loop] + yml_test.go:251: test mx-limit + yml_test.go:253: checkhost 1.2.3.5 foo@e4.example.com + spf.go:308: check "e4.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx" + spf.go:780: masks on "mx", "e4.example.com": "e4.example.com" [, ] + spf.go:411: "mx" permerror, too many MX records + yml_test.go:260: success: permerror, too many MX records [mx-limit] + yml_test.go:251: test mech-over-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e7.example.com + spf.go:308: check "e7.example.com" 0 0 + spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr a ip4:1.2.3.4 -all" + spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] + spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] + spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a", "e7.example.com": "e7.example.com" [, ] + spf.go:780: masks on "mx", "e7.example.com": "e7.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:378: void lookup limit reached + yml_test.go:260: success: permerror, void lookup limit reached [mech-over-limit] + yml_test.go:251: test include-at-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e8.example.com + spf.go:308: check "e8.example.com" 0 0 + spf.go:330: dns record "v=spf1 a include:inc.example.com ip4:1.2.3.4 mx -all" + spf.go:747: masks on "a", "e8.example.com": "e8.example.com" [, ] + spf.go:768: a match: 1.2.3.4, 1.2.3.4, [, ] + spf.go:406: "a" pass, matched a + yml_test.go:260: success: pass, matched a [include-at-limit] + yml_test.go:251: test void-at-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e12.example.com + spf.go:308: check "e12.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com ?all" + spf.go:747: masks on "a:err.example.com", "e12.example.com": "err.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a:err1.example.com", "e12.example.com": "err1.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:397: all: neutral + yml_test.go:260: success: neutral, matched all [void-at-limit] yml_test.go:251: test include-loop yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 @@ -5229,16 +5205,67 @@ spf.go:600: ptr evaluating "e5.example.com" in ["e1.example.com." "e2.example.com." "e3.example.com." "e4.example.com." "e6.example.com." "e7.example.com." "e8.example.com." "e9.example.com." "e10.example.com."] spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [ptr-limit] + yml_test.go:251: test false-a-limit + yml_test.go:253: checkhost 1.2.3.12 foo@e10.example.com + spf.go:308: check "e10.example.com" 0 0 + spf.go:330: dns record "v=spf1 a -all" + spf.go:747: masks on "a", "e10.example.com": "e10.example.com" [, ] + spf.go:768: a match: 1.2.3.12, 1.2.3.12, [, ] + spf.go:406: "a" pass, matched a + yml_test.go:260: success: pass, matched a [false-a-limit] + yml_test.go:251: test mech-at-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e6.example.com + spf.go:308: check "e6.example.com" 0 0 + spf.go:330: dns record "v=spf1 a mx a mx a mx a mx a ptr ip4:1.2.3.4 -all" + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:780: masks on "mx", "e6.example.com": "e6.example.com" [, ] + spf.go:828: mx ips: [1.2.3.8] + spf.go:747: masks on "a", "e6.example.com": "e6.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:536: ip match: 1.2.3.4 + spf.go:416: "ip4:1.2.3.4" pass, matched ip + yml_test.go:260: success: pass, matched ip [mech-at-limit] + yml_test.go:251: test include-over-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e9.example.com + spf.go:308: check "e9.example.com" 0 0 + spf.go:330: dns record "v=spf1 a include:inc.example.com a ip4:1.2.3.4 -all" + spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] + spf.go:308: check "inc.example.com" 2 0 + spf.go:330: dns record "v=spf1 a a a a a a a a" + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:747: masks on "a", "inc.example.com": "inc.example.com" [, ] + spf.go:444: fallback to neutral + spf.go:747: masks on "a", "e9.example.com": "e9.example.com" [, ] + spf.go:373: lookup limit reached + yml_test.go:260: success: permerror, lookup limit reached [include-over-limit] + yml_test.go:251: test void-over-limit + yml_test.go:253: checkhost 1.2.3.4 foo@e11.example.com + spf.go:308: check "e11.example.com" 0 0 + spf.go:330: dns record "v=spf1 a:err.example.com a:err1.example.com a:err2.example.com ?all" + spf.go:747: masks on "a:err.example.com", "e11.example.com": "err.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a:err1.example.com", "e11.example.com": "err1.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:747: masks on "a:err2.example.com", "e11.example.com": "err2.example.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:378: void lookup limit reached + yml_test.go:260: success: permerror, void lookup limit reached [void-over-limit] yml_test.go:162: suite: Test cases from implementation bugs - yml_test.go:167: domain webmail.pair.com - yml_test.go:169: TXT: [v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32] - yml_test.go:167: domain example.org - yml_test.go:169: SPF: [v=spf1 mx redirect=_spf.example.com] - yml_test.go:169: MX: {10 smtp.example.org} - yml_test.go:169: MX: {10 smtp1.example.com} - yml_test.go:167: domain smtp.example.org - yml_test.go:169: A: [198.51.100.2] - yml_test.go:169: AAAA: [2001:db8:ff0:100::3] yml_test.go:167: domain a.example.org yml_test.go:169: TXT: [Another TXT record.] yml_test.go:169: TXT: [v=spf1 ip4:192.0.2.225 ?include:webmail.pair.com ?include:relay.pair.com -all] @@ -5247,23 +5274,32 @@ yml_test.go:169: AAAA: [2001:db8:ff0:300::4] yml_test.go:167: domain b.example.org yml_test.go:169: CNAME: a.example.org + yml_test.go:167: domain mail.example.org + yml_test.go:169: SPF: [v=spf1 include:a.example.org include:b.example.org -all] + yml_test.go:169: A: [192.0.2.28] + yml_test.go:167: domain smtp6-v.fe.example.org + yml_test.go:169: AAAA: [2001:db8:ff0:100::2] + yml_test.go:167: domain _expspf.example.org + yml_test.go:169: TXT: [Sender domain not allowed from this host. Please see http://www.openspf.org/Why?s=mfrom&id=%{S}&ip=%{C}&r=%{R}] + yml_test.go:167: domain webmail.pair.com + yml_test.go:169: TXT: [v=spf1 ip4:66.39.3.0/24 ip4:209.68.6.94/32] yml_test.go:167: domain relay.pair.com yml_test.go:169: TXT: [v=spf1 ip4:209.68.5.9/32 ip4:209.68.5.15/32 a -all] yml_test.go:169: A: [192.0.2.131] + yml_test.go:167: domain example.org + yml_test.go:169: SPF: [v=spf1 mx redirect=_spf.example.com] + yml_test.go:169: MX: {10 smtp.example.org} + yml_test.go:169: MX: {10 smtp1.example.com} + yml_test.go:167: domain smtp.example.org + yml_test.go:169: A: [198.51.100.2] + yml_test.go:169: AAAA: [2001:db8:ff0:100::3] yml_test.go:167: domain smtp1.example.com yml_test.go:169: A: [192.0.2.26] yml_test.go:169: AAAA: [2001:db8:ff0:200::2] yml_test.go:167: 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 yml_test.go:169: PTR: [smtp6-v.fe.example.org] - yml_test.go:167: domain smtp6-v.fe.example.org - yml_test.go:169: AAAA: [2001:db8:ff0:100::2] yml_test.go:167: domain _spf.example.com yml_test.go:169: SPF: [v=spf1 ptr:fe.example.org ptr:sgp.example.com exp=_expspf.example.org -all] - yml_test.go:167: domain _expspf.example.org - yml_test.go:169: TXT: [Sender domain not allowed from this host. Please see http://www.openspf.org/Why?s=mfrom&id=%{S}&ip=%{C}&r=%{R}] - yml_test.go:167: domain mail.example.org - yml_test.go:169: SPF: [v=spf1 include:a.example.org include:b.example.org -all] - yml_test.go:169: A: [192.0.2.28] yml_test.go:251: test bytes-bug yml_test.go:253: checkhost 2001:db8:ff0:100::2 test@example.org spf.go:308: check "example.org" 0 0 @@ -5304,7 +5340,7 @@ spf.go:397: all: fail spf.go:397: all: fail yml_test.go:260: success: fail, matched all [cname-aliasing] ---- PASS: TestRFC7208 (0.03s) +--- PASS: TestRFC7208 (0.18s) === RUN TestPySPF yml_test.go:162: suite: yml_test.go:167: domain lyme.eater.example.co.uk.1.2.3.5.spf.example.net @@ -5351,6 +5387,18 @@ yml_test.go:167: domain examplef.com yml_test.go:169: SPF: [v=spf1 -all] yml_test.go:169: SPF: [v=spf1 +all] + yml_test.go:251: test incloop + yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplea.com + spf.go:308: check "examplea.com" 0 0 + spf.go:330: dns record "v=spf1 a mx include:b.com" + spf.go:747: masks on "a", "examplea.com": "examplea.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:780: masks on "mx", "examplea.com": "examplea.com" [, ] + spf.go:514: void lookup: nxdomain + spf.go:308: check "b.com" 3 2 + spf.go:314: dns domain not found: lookup : domain not found (for testing) + spf.go:401: "include:b.com" permerror, no DNS record found + yml_test.go:260: success: permerror, no DNS record found [incloop] yml_test.go:251: test badall yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplec.com spf.go:308: check "examplec.com" 0 0 @@ -5368,19 +5416,9 @@ spf.go:330: dns record "v=spf1 ip4:1.2.3.4:8080" spf.go:416: "ip4:1.2.3.4:8080" permerror, invalid ipX value yml_test.go:260: success: permerror, invalid ipX value [badip] - yml_test.go:251: test incloop - yml_test.go:253: checkhost 66.150.186.79 chuckvsr@examplea.com - spf.go:308: check "examplea.com" 0 0 - spf.go:330: dns record "v=spf1 a mx include:b.com" - spf.go:747: masks on "a", "examplea.com": "examplea.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:780: masks on "mx", "examplea.com": "examplea.com" [, ] - spf.go:514: void lookup: nxdomain - spf.go:308: check "b.com" 3 2 - spf.go:314: dns domain not found: lookup : domain not found (for testing) - spf.go:401: "include:b.com" permerror, no DNS record found - yml_test.go:260: success: permerror, no DNS record found [incloop] yml_test.go:162: suite: + yml_test.go:167: domain mail.example1.com + yml_test.go:169: A: [1.2.3.4] yml_test.go:167: domain example3.com yml_test.go:169: SPF: [v=spf1 mx] yml_test.go:169: SPF: [v=spf1 mx] @@ -5389,8 +5427,6 @@ yml_test.go:169: SPF: [v=spf1] yml_test.go:167: domain example2.com yml_test.go:169: SPF: [v=spf1mx] - yml_test.go:167: domain mail.example1.com - yml_test.go:169: A: [1.2.3.4] yml_test.go:251: test nospace2 yml_test.go:253: checkhost 1.2.3.4 foo@example3.com spf.go:308: check "example3.com" 0 0 @@ -5412,15 +5448,6 @@ spf.go:444: fallback to neutral yml_test.go:260: success: neutral, [empty] yml_test.go:162: suite: - yml_test.go:167: domain c1.example.com - yml_test.go:169: CNAME: c2.example.com. - yml_test.go:167: domain c2.example.com - yml_test.go:169: SPF: [v=spf1 a a:c1.example.com -all] - yml_test.go:169: A: [1.2.3.4] - yml_test.go:167: domain mx1.example.com - yml_test.go:169: - yml_test.go:167: domain e3.example.com - yml_test.go:169: SPF: [v=spf1 a:mx1.example.com mx:mx1.example.com ~all] yml_test.go:167: domain mail.example.com yml_test.go:169: MX: {0 } yml_test.go:169: SPF: [v=spf1 mx] @@ -5430,6 +5457,29 @@ yml_test.go:169: SPF: [v=spf1 default=-] yml_test.go:167: domain e2.example.com yml_test.go:169: CNAME: c1.example.com. + yml_test.go:167: domain c1.example.com + yml_test.go:169: CNAME: c2.example.com. + yml_test.go:167: domain c2.example.com + yml_test.go:169: SPF: [v=spf1 a a:c1.example.com -all] + yml_test.go:169: A: [1.2.3.4] + yml_test.go:167: domain mx1.example.com + yml_test.go:169: + yml_test.go:167: domain e3.example.com + yml_test.go:169: SPF: [v=spf1 a:mx1.example.com mx:mx1.example.com ~all] + yml_test.go:251: test emptyMX + yml_test.go:253: checkhost 1.2.3.4 + spf.go:308: check "mail.example.com" 0 0 + spf.go:330: dns record "v=spf1 mx" + spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] + spf.go:828: mx ips: [] + spf.go:444: fallback to neutral + yml_test.go:260: success: neutral, [emptyMX] + yml_test.go:251: test localhost + yml_test.go:253: checkhost 127.0.0.1 root@example.com + spf.go:308: check "example.com" 0 0 + spf.go:330: dns record "v=spf1 -all" + spf.go:397: all: fail + yml_test.go:260: success: fail, matched all [localhost] yml_test.go:251: test cname-chain yml_test.go:253: checkhost 1.2.3.4 foo@e2.example.com spf.go:308: check "e2.example.com" 0 0 @@ -5448,23 +5498,9 @@ spf.go:514: void lookup: nxdomain spf.go:397: all: softfail yml_test.go:260: success: softfail, matched all [null-cname] - yml_test.go:251: test emptyMX - yml_test.go:253: checkhost 1.2.3.4 - spf.go:308: check "mail.example.com" 0 0 - spf.go:330: dns record "v=spf1 mx" - spf.go:780: masks on "mx", "mail.example.com": "mail.example.com" [, ] - spf.go:828: mx ips: [] - spf.go:444: fallback to neutral - yml_test.go:260: success: neutral, [emptyMX] - yml_test.go:251: test localhost - yml_test.go:253: checkhost 127.0.0.1 root@example.com - spf.go:308: check "example.com" 0 0 - spf.go:330: dns record "v=spf1 -all" - spf.go:397: all: fail - yml_test.go:260: success: fail, matched all [localhost] ---- PASS: TestPySPF (0.00s) +--- PASS: TestPySPF (0.02s) PASS -ok blitiri.com.ar/go/spf 0.106s +ok blitiri.com.ar/go/spf 0.396s ? blitiri.com.ar/go/spf/internal/dnstest [no test files] create-stamp debian/debhelper-build-stamp dh_testroot -O--buildsystem=golang @@ -5493,12 +5529,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: including full source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/59581/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/50092 and its subdirectories -I: Current time: Fri Mar 27 21:35:32 -12 2026 -I: pbuilder-time-stamp: 1774690532 +I: removing directory /srv/workspace/pbuilder/59581 and its subdirectories +I: Current time: Sun Feb 23 17:15:40 +14 2025 +I: pbuilder-time-stamp: 1740280540 Compressing the 2nd log... /var/lib/jenkins/userContent/reproducible/debian/logdiffs/unstable/i386/golang-blitiri-go-spf_1.5.1-1.diff: 89.7% -- replaced with /var/lib/jenkins/userContent/reproducible/debian/logdiffs/unstable/i386/golang-blitiri-go-spf_1.5.1-1.diff.gz b2/build.log: 89.8% -- replaced with stdout Compressing the 1st log... b1/build.log: 90.0% -- replaced with stdout Sun Feb 23 03:15:43 UTC 2025 I: diffoscope 288 will be used to compare the two builds: ++ date -u +%s + DIFFOSCOPE_STAMP=/var/log/reproducible-builds/diffoscope_stamp_golang-blitiri-go-spf_unstable_i386_1740280543 + touch /var/log/reproducible-builds/diffoscope_stamp_golang-blitiri-go-spf_unstable_i386_1740280543 + RESULT=0 + systemd-run '--description=diffoscope on golang-blitiri-go-spf/1.5.1-1 in unstable/i386' --slice=rb-build-diffoscope.slice -u rb-diffoscope-i386_4-53660 '--property=SuccessExitStatus=1 124' --user --send-sighup --pipe --wait -E TMPDIR timeout 155m nice schroot --directory /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm --run-session -c jenkins-reproducible-unstable-diffoscope-e6451542-51c6-4cd7-bb64-4f9113d6cbc7 -- sh -c 'export TMPDIR=/srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/dbd-tmp-qzSeRPI ; timeout 150m diffoscope --timeout 7200 --html /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/golang-blitiri-go-spf_1.5.1-1.diffoscope.html --text /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/golang-blitiri-go-spf_1.5.1-1.diffoscope.txt --json /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/golang-blitiri-go-spf_1.5.1-1.diffoscope.json --profile=- /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b1/golang-blitiri-go-spf_1.5.1-1_i386.changes /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b2/golang-blitiri-go-spf_1.5.1-1_i386.changes' + false + set +x Running as unit: rb-diffoscope-i386_4-53660.service # Profiling output for: /usr/bin/diffoscope --timeout 7200 --html /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/golang-blitiri-go-spf_1.5.1-1.diffoscope.html --text /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/golang-blitiri-go-spf_1.5.1-1.diffoscope.txt --json /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/golang-blitiri-go-spf_1.5.1-1.diffoscope.json --profile=- /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b1/golang-blitiri-go-spf_1.5.1-1_i386.changes /srv/reproducible-results/rbuild-debian/r-b-build.a6GsC5rm/b2/golang-blitiri-go-spf_1.5.1-1_i386.changes ## command (total time: 0.000s) 0.000s 1 call cmp (internal) ## has_same_content_as (total time: 0.000s) 0.000s 1 call diffoscope.comparators.binary.FilesystemFile ## main (total time: 0.004s) 0.003s 2 calls outputs 0.000s 1 call cleanup Finished with result: success Main processes terminated with: code=exited/status=0 Service runtime: 256ms CPU time consumed: 253ms _ _ _ _ _ _ _ __ _ ___ | | __ _ _ __ __ _ | |__ | (_) |_(_)_ __(_) __ _ / _` |/ _ \| |/ _` | '_ \ / _` |_____| '_ \| | | __| | '__| |_____ / _` | | (_| | (_) | | (_| | | | | (_| |_____| |_) | | | |_| | | | |_____| (_| | \__, |\___/|_|\__,_|_| |_|\__, | |_.__/|_|_|\__|_|_| |_| \__, | |___/ |___/ |___/ __ ___ ___ _ __ / _| / _ \ _____/ __| '_ \| |_ | (_) |_____\__ \ |_) | _| \___/ |___/ .__/|_| |_| Sun Feb 23 03:15:44 UTC 2025 I: diffoscope 288 found no differences in the changes files, and a .buildinfo file also exists. Sun Feb 23 03:15:44 UTC 2025 I: golang-blitiri-go-spf from unstable built successfully and reproducibly on i386. INSERT 0 1 INSERT 0 1 DELETE 1 [2025-02-23 03:15:44] INFO: Starting at 2025-02-23 03:15:44.927366 [2025-02-23 03:15:44] INFO: Generating the pages of 1 package(s) [2025-02-23 03:15:45] CRITICAL: https://tests.reproducible-builds.org/debian/unstable/i386/golang-blitiri-go-spf didn't produce a buildlog, even though it has been built. [2025-02-23 03:15:45] INFO: Finished at 2025-02-23 03:15:45.321178, took: 0:00:00.393821 Sun Feb 23 03:15:45 UTC 2025 - successfully updated the database and updated https://tests.reproducible-builds.org/debian/rb-pkg/unstable/i386/golang-blitiri-go-spf.html Sun Feb 23 03:15:45 UTC 2025 I: Submitting .buildinfo files to external archives: Sun Feb 23 03:15:45 UTC 2025 I: Submitting 8.0K b1/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc https://buildinfo.debian.net/abd27b3344aead860541df53db310aa187b07219/golang-blitiri-go-spf_1.5.1-1_all Sun Feb 23 03:15:49 UTC 2025 I: Submitting 8.0K b2/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc https://buildinfo.debian.net/a056eab835e5680f64df7f446488ecb4df701a29/golang-blitiri-go-spf_1.5.1-1_all Sun Feb 23 03:15:53 UTC 2025 I: Done submitting .buildinfo files to http://buildinfo.debian.net/api/submit. Sun Feb 23 03:15:53 UTC 2025 I: Done submitting .buildinfo files. Sun Feb 23 03:15:53 UTC 2025 I: Removing signed golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc files: removed './b1/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc' removed './b2/golang-blitiri-go-spf_1.5.1-1_i386.buildinfo.asc' 1740280553 i386 unstable golang-blitiri-go-spf Starting cleanup. /var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/i386/golang-blitiri-go-spf_1.5.1-1.rbuild.log: 89.2% -- replaced with /var/lib/jenkins/userContent/reproducible/debian/rbuild/unstable/i386/golang-blitiri-go-spf_1.5.1-1.rbuild.log.gz [2025-02-23 03:15:53] INFO: Starting at 2025-02-23 03:15:53.554509 [2025-02-23 03:15:53] INFO: Generating the pages of 1 package(s) [2025-02-23 03:15:53] INFO: Finished at 2025-02-23 03:15:53.973713, took: 0:00:00.419216 All cleanup done. Sun Feb 23 03:15:54 UTC 2025 - total duration: 0h 4m 3s. Sun Feb 23 03:15:54 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-sV42Dgvc, removing. Finished with result: success Main processes terminated with: code=exited/status=0 Service runtime: 4min 13.228s CPU time consumed: 7.635s