pax_global_header00006660000000000000000000000064141600225450014511gustar00rootroot0000000000000052 comment=9cebf724d601452d1a671ed5331551dbc18df83a OpenDMARC-rel-opendmarc-1-4-2/000077500000000000000000000000001416002254500157115ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/.editorconfig000066400000000000000000000002221416002254500203620ustar00rootroot00000000000000root = true [*] indent_style = tab indent_size = 8 end_of_line = lf charset = utf-8 trim_trailing_whitespace = false insert_final_newline = true OpenDMARC-rel-opendmarc-1-4-2/.gitattributes000066400000000000000000000000551416002254500206040ustar00rootroot00000000000000*.sh -crlf *.ac -crlf *.am -crlf OpenDMARC-rel-opendmarc-1-4-2/.gitignore000066400000000000000000000004611416002254500177020ustar00rootroot00000000000000aclocal.m4 Makefile Makefile.in autom4te.cache/ configure build-config.h build-config.h.in build-config.h.in~ config.log config.status config.cache stamp-h.in stamp-h1 libtool opendmarc-[0-9].[0-9].[0-9] opendmarc*.gz opendmarc*.gz.sha1 opendmarc*.gz.md5 opendmarc*.gz.asc *.orig *.rej HOURS tags .vscode OpenDMARC-rel-opendmarc-1-4-2/AutoBuild.sh000077500000000000000000000011371416002254500201420ustar00rootroot00000000000000#!/bin/sh perform() { $* status=$? if [ $status != 0 ] then echo Fatal ERROR: "\"$*\" failed." exit 1 fi } case $1 in clean) echo "Cleaning" if [ -f Makefile ] then perform "make -s clean" fi rm -f config.log rm -f config.status rm -f *.gz exit 0 ;; dist) # Put extras here. if [ -f Makefile ] then make dist fi exit 0 ;; *) ;; esac echo "Building opendmarc" if [ ! -f config.h.in -a -f config.h.in~ ]; then perform "cp config.h.in~ config.h.in" fi autoreconf -v -i CONF="./configure -q --with-wall -C --with-spf" echo ${CONF} perform "$CONF" perform "make -s" exit 0 OpenDMARC-rel-opendmarc-1-4-2/CONTRIBUTING000066400000000000000000000065001416002254500175440ustar00rootroot00000000000000# Contributing to OpenDMARC This document attempts to list some things potential contributors can do to offer contributions to the OpenDMARC and other Trusted Domain Project projects. An active user community is the basis for many open source projects, and while open source is often thankless, and the developers have busy lives, we aim for regular, consistent releases that contain all the features suggested in the relevant RFCs and specifications, and that work on a good variety of operating systems. ## Things you can do * Our sourceforge projects are going away, but many issues have either been duplicated or obsoleted by code that has been contributed since the move to github. Helping to triage remaining issues, and adding comments to the Sourceforge issues is incredibly helpful. * We use the "needs-testing" tag on our GitHub issues to indicate issues that we believe resolved, but want to confirm are fixed for the original reporter. If you run an environment similar to the reporter, and can reproduce the failure mode, more testing is useful, especially in the case where the origninal reporter has not responded. * Reporting compiler warnings on your platform (along with the platform and version) is helpful. Our goal is for a zero-warnings compile on most platforms. * If you find an OS packager is patching OpenDMARC after our releases, open an issue to let us know how we can include those fixes in our main release. * Our code has some unit tests which are useful, but more are always helpful. There are both "live" tests which fire up a copy of opendmarc and fire test messages against it, as well as unit tests which test individual functions in the code. * If you wish to run a testing version (built from the github "develop") branch in production, this can often expose new issues. If you do this, you may want to run with extended logging, keep copies of messages, and perhaps disable reporting. * The code has the start of a PLATFORM_NOTES file where we attempt to document weirdnesses about various platforms. (e.g. FooOS uses the MUSL c libraries by default, BarOS does not have stringfunc.blah). We welcome more knowledge about this. ## Contributing code guidelines * The opendmarc code is in Autoconf, Automake, M4, and C, with the reporting functions in perl, and some of the unit tests written in Lua. If you find that there are more consistent standards that some of these languages use, we would like to know about it via a GitHub Issue, or, preferably, a pull request. * There is a file called ".editorconfig" in the top level of our GitHub repository. It contains preferences for editors to use, but not all editors know how to use this file out of the box. * The best way to offer contributions is by submitted a GitHub pull request. Specifically, you should clone the "develop" branch, as "master" reflects the most recent release, but pending work happens in "develop". Pull requests should target this branch. * If you clone our GitHub repo for your own use, please create a new branch for each enhancement. While it is possible to "cherry-pick" multiple commits out of a merge request, the GitHub web UI doesn't make it particularly easy. It's way easier to do this if commits are one-branch-per-issue on the "requesting" or "contributing" side. OpenDMARC-rel-opendmarc-1-4-2/HowToRelease000066400000000000000000000032661416002254500202040ustar00rootroot00000000000000Release procedures for OpenDMARC 0) Run "./copyright-check" to ensure anything updated in the current year has a current copyright notice in it. 1) Edit configure.ac so that the new release number is formed with the VERSION_RELEASE* macros. 2) In the root build directory, do these things: % make distclean % autoreconf % ./configure % make % make distcheck This will produce an opendmarc-(version).tar.gz tarball after running all unit tests. 3) Commit changes made to RELEASE_NOTES to the SourceForge git repository. Be sure to include any open feature requests, patches or bug fixes from the SourceForge trackers. 4) Prepare a release announcement by using the file "announcement" from git as your template. Change the From: to the name and address of the person making the announcement. Make sure that address has permissions to post to opendmarc-users and opendmarc-announce. There should be a paragraph or two at the top highlighting the interesting changes and indicating what the main focus of this release is (new features, bug fixes, etc.), and then the full RELEASE_NOTES block for the new release. Commit this to git. 5) Merge the "develop" branch to the "master" branch, as follows: % git checkout master % git merge develop [massage in and commit any conflicts] % git push 6) Deploy all needed files to SourceForge by doing 'make push'. This will also place the release tag. 7) Via the SourceForge UI, make the latest tarball the default download for all operating systems. 8) Send the release announcement: % sendmail -t < announcement 9) Mark any bug fixes or feature requests, etc. as closed if this release contained them. OpenDMARC-rel-opendmarc-1-4-2/INSTALL000066400000000000000000000075651416002254500167570ustar00rootroot00000000000000 INSTALLING OPENDMARC OVERVIEW ======== In order to install the opendkim as a milter to an MTA you will need to perform the following steps: * Compile the opendmarc program itself. * Configure the opendmarc filter. * Install the opendmarc and configure your MTA to use it. Note that there is a difference between "OpenDMARC" and "opendmarc". "OpenDMARC" is a package containing a library, a filter and some tools to be used in testing and using your DMARC installation. "opendmarc" is the filter program contained in the "OpenDMARC" package. libopendmarc is a library available as an API for programmers everywhere. That API is described in a set of HTML files in the OpenDMARC source code package. The opendmarc filter program incorporates the libopendmarc library and works with recent versions of sendmail and Postfix or any other MTA that supports "milter". For more information about milter, see . Sendmail is available at and Postfix is available at . OPTIONAL PACKAGES ================= OpenDMARC supports a few optional packages that can be included in the build to provide additional services. A few of these become mandatory when enabling certain features below. Specifying only the "--with-xxx" parameter to the "configure" command (described below) enables the package and makes a guess at where it might be installed on your system. If the configure script doesn't find it, you will need to specify the location with "--with-xxx=location". --with-milter Sendmail's "milter" include file and library. Required unless compilation of the filter is disabled (see below). Enabled by default. --with-sql-backend Names the SQL backend in use on your system. The default is "mysql". You can also specify "--without-sql-backend" to suppres building of SQL support. FEATURES ======== There are several compile-time features you may select. Some of these are present but unsupported while others are fully-supported. Read the FEATURES file for a description of the unsupported features. The supported features are as follows. The can be turned on at compile time by adding "--enable-xxx" to the "configure" command line (described below), where "xxx" is the name of the feature. filter Compile the opendmarc filter. Requires libmilter (see "--with-milter" above). This is on by default; if you don't want the filter, specify "--disable-filter". filter-tests Includes filter unit tests when doing "make check". Requires the "miltertest" program, which is available as part of the OpenDKIM package (see http://www.opendkim.org). COMPILING ========= The opendmarc filter requires either sendmail v8.13.0 or Postfix v2.3 or later for required milter protocol enhancements. As Postfix currently does not provide the milter library, you need to have sendmail sources or development package installed. See http://www.postfix.org/MILTER_README.html You can view the configuration options with the following command (once you have built the configure script (see step 3, below)): ./configure --help The commands shown below assume a UNIX system with standard build tools installed. Steps to compiling the library and the milter: (1) Download the source from github git clone https://github.com/trusteddomainproject/OpenDMARC.git (2) Change directories to the repository directory that was created in step 2. cd opendmarc- (3) Run gnu autoreconf to generate the configure and make files. autoreconf -v -i (4) Run the "configure" script to configure the package for your operating system. ./configure (5) Compile the package. make (6) Install the output of the build. You probably need to become the superuser to run this step. make install CONFIGURING OPENDMARC ===================== The README document (in the opendmarc directory) covers the installation and configuration of opendmarc. OpenDMARC-rel-opendmarc-1-4-2/LICENSE000066400000000000000000000042761416002254500167270ustar00rootroot00000000000000Copyright (c) 2009, 2010, 2012, 2013, The Trusted Domain Project. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of The Trusted Domain Project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. Portions of this project are also covered by the Sendmail Open Source License, available in this distribution in the file "LICENSE.Sendmail". See the copyright notice(s) in each file to determine whether it is covered by either or both of the licenses. For example: Copyright (c) Sendmail, Inc. and its suppliers. All rights reserved. Files bearing the banner above are covered under the Sendmail Open Source License (see LICENSE.Sendmail). Copyright (c) , The Trusted Domain Project. All rights reserved. Files bearing the banner above are covered under the Trusted Domain Project License (above). Files bearing both banners are covered under both sets of license terms. THIS SOFTWARE IS PROVIDED BY THE TRUSTED DOMAIN PROJECT ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE TRUSTED DOMAIN PROJECT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. OpenDMARC-rel-opendmarc-1-4-2/LICENSE.Sendmail000066400000000000000000000104371416002254500204560ustar00rootroot00000000000000 SENDMAIL OPEN SOURCE LICENSE The following license terms and conditions apply to this open source software ("Software"), unless a different license is obtained directly from Sendmail, Inc. ("Sendmail") located at 6475 Christie Ave, Suite 350, Emeryville, CA 94608, USA. Use, modification and redistribution (including distribution of any modified or derived work) of the Software in source and binary forms is permitted only if each of the following conditions of 1-6 are met: 1. Redistributions of the Software qualify as "freeware" or "open source software" under one of the following terms: (a) Redistributions are made at no charge beyond the reasonable cost of materials and delivery; or (b) Redistributions are accompanied by a copy of the modified Source Code (on an acceptable machine-readable medium) or by an irrevocable offer to provide a copy of the modified Source Code (on an acceptable machine-readable medium) for up to three years at the cost of materials and delivery. Such redistributions must allow further use, modification, and redistribution of the Source Code under substantially the same terms as this license. For the purposes of redistribution "Source Code" means the complete human-readable, compilable, linkable, and operational source code of the redistributed module(s) including all modifications. 2. Redistributions of the Software Source Code must retain the copyright notices as they appear in each Source Code file, these license terms and conditions, and the disclaimer/limitation of liability set forth in paragraph 6 below. Redistributions of the Software Source Code must also comply with the copyright notices and/or license terms and conditions imposed by contributors on embedded code. The contributors' license terms and conditions and/or copyright notices are contained in the Source Code distribution. 3. Redistributions of the Software in binary form must reproduce the Copyright Notice described below, these license terms and conditions, and the disclaimer/limitation of liability set forth in paragraph 6 below, in the documentation and/or other materials provided with the binary distribution. For the purposes of binary distribution, "Copyright Notice" refers to the following language: "Copyright (c) 1998-2009 Sendmail, Inc. All rights reserved." 4. Neither the name, trademark or logo of Sendmail, Inc. (including without limitation its subsidiaries or affiliates) or its contributors may be used to endorse or promote products, or software or services derived from this Software without specific prior written permission. The name "sendmail" is a registered trademark and service mark of Sendmail, Inc. 5. We reserve the right to cancel this license if you do not comply with the terms. This license is governed by California law and both of us agree that for any dispute arising out of or relating to this Software, that jurisdiction and venue is proper in San Francisco or Alameda counties. These license terms and conditions reflect the complete agreement for the license of the Software (which means this supercedes prior or contemporaneous agreements or representations). If any term or condition under this license is found to be invalid, the remaining terms and conditions still apply. 6. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY SENDMAIL AND ITS CONTRIBUTORS "AS IS" WITHOUT WARRANTY OF ANY KIND AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY DISCLAIMED. IN NO EVENT SHALL SENDMAIL OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING WITHOUT LIMITATION NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. $Revision: 1.1 $ $Date: 2009/07/16 18:43:18 $ OpenDMARC-rel-opendmarc-1-4-2/Makefile.am000066400000000000000000000034311416002254500177460ustar00rootroot00000000000000ACLOCAL_AMFLAGS = -I m4 libdir=@LIBDMARC_DIR@/lib includedir=@LIBDMARC_DIR@/include SUBDIRS = contrib db libopendmarc reports if BUILD_FILTER SUBDIRS += opendmarc endif auxdir = @ac_aux_dir@ AUX_DIST = $(auxdir)/install-sh $(auxdir)/missing \ $(auxdir)/mkinstalldirs \ $(auxdir)/config.guess $(auxdir)/build \ $(auxdir)/dh.m4 AUTOMAKE_OPTIONS = foreign MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure \ $(AUX_DIST) ACLOCAL = aclocal -I $(auxdir) dist_doc_DATA = LICENSE LICENSE.Sendmail DISTCLEANFILES = opendmarc-@VERSION@.tar.gz DISTCHECK_CONFIGURE_FLAGS=--enable-filter-tests dist-hook: [ -f $(distdir)/libopendmarc/dmarc.h ] && rm -f $(distdir)/libopendmarc/dmarc.h sed -e '/OPENDMARC_LIB_VERSION/s/0x[0-9]*/0x@HEX_VERSION@/' < $(srcdir)/libopendmarc/dmarc.h > $(distdir)/libopendmarc/dmarc.h echo "looking to see if @VERSION@ is in the RELEASE_NOTES" fgrep @VERSION@ $(srcdir)/RELEASE_NOTES sed -e 's|\(@VERSION@[ \t]*\)[0-9?]\{4\}\(/[0-9?]\{2\}\)\{2\}|\1'`date +%Y/%m/%d`'|' < $(srcdir)/RELEASE_NOTES > $(distdir)/RELEASE_NOTES $(DIST_ARCHIVES): distcheck $(DIST_ARCHIVES).md5: $(DIST_ARCHIVES) md5 $? > $@ || md5sum $? > $@ $(DIST_ARCHIVES).sha1: $(DIST_ARCHIVES) sha1 $? > $@ || sha1sum $? > $@ $(DIST_ARCHIVES).asc: $(DIST_ARCHIVES) gpg -a -u security@trusteddomain.org --detach-sign $? push: $(DIST_ARCHIVES) $(DIST_ARCHIVES).sha1 $(DIST_ARCHIVES).md5 $(DIST_ARCHIVES).asc @echo "Are you sure you want to tag and release $(DIST_ARCHIVES)? (y/n)" @read confirm && [ $$confirm = 'y' ] git tag rel-opendmarc-`echo $(VERSION) | sed 's/\./-/g'` git push --tags scp $(DIST_ARCHIVES) $(DIST_ARCHIVES).sha1 $(DIST_ARCHIVES).md5 $(DIST_ARCHIVES).asc RELEASE_NOTES cm-msk,opendmarc@frs.sourceforge.net:/home/frs/project/o/op/opendmarc/ .PHONY: push OpenDMARC-rel-opendmarc-1-4-2/PLATFORM_NOTES000066400000000000000000000010331416002254500200250ustar00rootroot00000000000000### Compiling on OpenBSD * Need to set specific environment variables for AUTOCONF_VERSION and AUTOMAKE_VERSION * For testing: * You need OpenDKIM installed from source for "miltertest" * You need to install Lua first, and modify OpenDKIM's configure.ac to find the lua libs in /usr/local/lib/lua/5.1 * You need to fully install OpenDKIM, as miltertest needs an OpenDKIM lib. ./configure --with-spf --with-spf2-include=/usr/local/include/spf2 --with-spf2-lib=/usr/local/lib --enable-live-tests --enable-filter-tests USE_SPF=TRUE OpenDMARC-rel-opendmarc-1-4-2/README000066400000000000000000000205271416002254500165770ustar00rootroot00000000000000 This directory has the latest open source DMARC software from The Trusted Domain Project. There is a web site at http://www.trusteddomain.org/opendmarc that is home for the latest updates. +--------------+ | INTRODUCTION | +--------------+ The OpenDMARC project is a community effort to develop and maintain an open source package for providing DMARC report generation and policy enforcement services. In simple terms, DMARC takes the results of ARC, SPF and DKIM checks, done by either upstream filters, or SPF checks that opendmarc performs itself, and uses these to make a "pass or fail" decision. A domain owner may put a record in the DNS to determine what should happen to a failing record: No negative action (typically for testing), message quarantining, or outright rejection at SMTP acceptance time. Additionally, records placed in the DNS allow a domain owner to receive reports back on when messages are received that fail DMARC, as well as specifying what percentage of messages should be evaluated. This README is not intended to be a full explanation of how the DMARC protocol works, but at the very least, some software that does DKIM checks should be available in your mail stream in order to use this software. This package includes a library for handling DMARC record parsing, a database schema and tools for aggregating and processing transaction history to produce DMARC reports, and a filter that ties it all together with an MTA using the milter protocol. "milter" is a portmanteau of "mail filter" and refers to a protocol and API for communicating mail traffic information between MTAs and mail filtering plug-in applications. It was originally invented at Sendmail, Inc. but has also been adapted to other MTAs. Note that the implementation is called "OpenDMARC" but contains a program, called "opendmarc", all lower case. +--------------+ | DEPENDENCIES | +--------------+ To compile and operate, this package requires the following: o sendmail v8.13.0 (or later), or Postfix 2.3, (or later) and libmilter. (These are only required if you are building the filter.) o glib (GLib) headers and libraries 2.48.2 (or greater) o some systems (Linux at least) do not natively have the strlcpy() function. Under Arch Linux, this is provided by the "libbsd" package. o Access to a working nameserver (required only for signature verification). o A perl interpreter. o If you are interested in tinkering with the build and packaging structure, you may need to upgrade to these versions of GNU's "autotools" components: autoconf (GNU Autoconf) 2.61 automake (GNU automake) 1.7 (or 1.9 to avoid warnings) ltmain.sh (GNU libtool) 2.2.6 (or 1.5.26 after make maintainer-clean) o LibSFF2 (https://www.libspf2.org) is optional, but can be used for improved SPF parsing inside the opendmarc filter. Note that this will be a requirement in a future version, if SPF checking is desired. Actual use requires a mail server that speaks the "milter" protocol, as well as some DKIM checking service that acts on messages before they reach the opendmarc milter (such as the Trusted Domain Project's "OpenDKIM"). A filter that performs SPF checking is optional, but OpenDMARC may be compiled to link against LibSPF2, and thus do SPF checks on its own. Some components (such as the report parser) can opeerate without being joined to a mail server, but using that portion alone is generally atypical. +-----------------------+ | RELATED DOCUMENTATION | +-----------------------+ The man page for opendmarc (the actual filter program) is present in the opendmarc directory of this source distribution. There is additional information in the INSTALL and FEATURES files, and in the README file in the opendmarc directory. Changes are documented in the RELEASE_NOTES file. HTML-style documentation for libopendmarc is available in libopendmarc/docs in this source distribution. General information about DMARC can be found at http://www.dmarc.org Mailing lists discussing and supporting the DMARC software found in this package are maintained via a list server at trusteddomain.org. Visit http://www.trusteddomain.org to subscribe or browse archives. The available lists are: opendmarc-announce (moderated) Release announcements. opendmarc-users General OpenDMARC user questions and answers. opendmarc-dev Chatter among OpenDMARC developers. opendmarc-code Automated source code change announcements. Bug tracking is done via the trackers on SourceForge at http://sourceforge.net/projects/opendmarc. You can enter new bug reports there, but please check first for older bugs already open, or even already closed, before opening a new issue. +---------------------+ | DIRECTORY STRUCTURE | +---------------------+ contrib A collection of user contributed scripts that may be useful. db Database schema and tools for generating DMARC reports based upon accumulated data. docs A collection of RFCs and drafts related to opendmarc. libopendmarc A library that implements the proposed DMARC standard. libopendmarc/docs HTML documentation describing the API provided by libopendmarc. opendmarc A milter-based filter application which uses libopendmarc (and optionally libar) to provide DMARC service via an MTA using the milter protocol. +----------------+ | RUNTIME ISSUES | +----------------+ WARNING: symbol 'X' not available The filter attempted to get some information from the MTA that the MTA did not provide. At various points in the interaction between the MTA and the filter, certain macros containing information about the job in progress or the connection being handled are passed from the MTA to the filter. In the case of sendmail, the names of the macros the MTA should pass to the filter are defined by the "Milter.macros" settings in sendmail.cf, e.g. "Milter.macros.connect", "Milter.macros.envfrom", etc. This message indicates that the filter needed the contents of macro X, but that macro was not passed down from the MTA. Typically the values needed by this filter are passed from the MTA if the sendmail.cf was generated by the usual m4 method. If you do not have those options defined in your sendmail.cf, make sure your M4 configuration files are current and rebuild your sendmail.cf to get appropriate lines added to your sendmail.cf, and then restart sendmail. MTA timeouts By default, the MTA is configured to wait up to ten seconds for a response from a filter before giving up. When querying remote nameservers for key and policy data, the DMARC filter may not get a response from the resolver within that time frame, and thus this MTA timeout will occur. This can cause messages to be rejected, temp-failed or delivered without verification, depending on the failure mode selected for the filter. When using the standard resolver library provided with your system, the DNS timeout cannot be adjusted. If you encounter this problem, you must increase the time the MTA waits for replies. See the documentation in the sendmail open source distribution (libmilter/README in particular) for instructions on changing these timeouts. When using the provided asynchronous resolver library, you can use the "-T" command line option to change the timeout so that it is shorter than the MTA timeout. Other OpenDMARC issues: Report any bugs to the email address opendmarc-users@trusteddomain.org or to the SourceForge issue tracker accessible at: http://sourceforge.net/p/opendmarc/tickets/ +-----------------+ | FURTHER READING | +-----------------+ As DMARC adoption becomes more common, any list of links placed in the README of a single implementation will invariably grow out of date. Using your favorite search engine, or the mailing lists for your operating system or MTA is not an unreasonable path forward. As a start, however, the RFC's that define SPF, DKIM, and DMARC present a fairly comprehensive, if technical, understanding of the underlying protocols. Although there is not much information involving marrying them to a specific mail server. At the time of this writing, the following are the most recent RFC's for the protocols involved (although many other RFC's are referenced, of course). https://tools.ietf.org/html/rfc6376 (DKIM) https://tools.ietf.org/html/rfc7208 (SPF) https://tools.ietf.org/html/rfc7489 (DMARC) https://tools.ietf.org/html/rfc8617 (ARC) -- Copyright (c) 2012, 2016, 2018, 2021, The Trusted Domain Project. All rights reserved. OpenDMARC-rel-opendmarc-1-4-2/README.md000066400000000000000000000167431416002254500172030ustar00rootroot00000000000000# README for OpenDMARC This directory has the latest open source DMARC software from The Trusted Domain Project. There is a web site at http://www.trusteddomain.org/opendmarc that is home for the latest updates. On GitHub, the "Master" branch follows the latest released version, while continued development happens on the "develop" branch. ## Introduction The OpenDMARC project is a community effort to develop and maintain an open source package for providing DMARC report generation and policy enforcement services. It includes a library for handling DMARC record parsing, a database schema and tools for aggregating and processing transaction history to produce DMARC reports, and a filter that ties it all together with an MTA using the milter protocol. In simple terms, DMARC takes the results of ARC, SPF and DKIM checks, done by either upstream filters, or SPF checks that opendmarc performs itself, and uses these to make a "pass or fail" decision. A domain owner may put a record in the DNS to determine what should happen to a failing record: No negative action (typically for testing), message quarantining, or outright rejection at SMTP acceptance time. Additionally, records placed in the DNS allow a domain owner to receive reports back on when messages are received that fail DMARC, as well as specifying what percentage of messages should be evaluated. This README is not intended to be a full explanation of how the DMARC protocol works, but at the very least, some software that does DKIM checks should be available in your mail stream in order to use this software. The word "milter" is a portmanteau of "mail filter" and refers to a protocol and API for communicating mail traffic information between MTAs and mail filtering plug-in applications. It was originally invented at Sendmail, Inc. but has also been adapted to other MTAs. ## Dependencies To compile and operate, this package requires the following: * sendmail v8.13.0 (or later), or Postfix 2.3, (or later) and libmilter. (These are only required if you are building the filter.) * glib (GLib) headers and libraries 2.48.2 (or greater) * Access to a working nameserver (required only for signature verification). * A perl interpreter (required for sending or receiving and interpreting reports). * If you are interested in tinkering with the build and packaging structure, you may need to upgrade to these versions of GNU's "autotools" components: * autoconf (GNU Autoconf) 2.61 * automake (GNU automake) 1.7 (or 1.9 to avoid warnings) * ltmain.sh (GNU libtool) 2.2.6 (or 1.5.26 after make maintainer-clean) ## Related Documentation The man page for opendmarc (the actual filter program) is present in the opendmarc directory of this source distribution. There is additional information in the `INSTALL` and `FEATURES` files, and in the `README` file in the opendmarc directory. Changes are documented in the `RELEASE_NOTES` file. HTML-style documentation for libopendmarc is available in libopendmarc/docs in this source distribution. General information about DMARC can be found at http://www.dmarc.org Mailing lists discussing and supporting the DMARC software found in this package are maintained via a list server at trusteddomain.org. Visit http://www.trusteddomain.org to subscribe or browse archives. The available lists are: * opendmarc-announce (moderated) Release announcements. * opendmarc-users General OpenDMARC user questions and answers. * opendmarc-dev Chatter among OpenDMARC developers. * opendmarc-code Automated source code change announcements. Bug tracking is done via the trackers on GitHub at: https://github.com/trusteddomainproject/OpenDMARC/issues You can enter new bug reports there, but please check first for older bugs already open, or even already closed, before opening a new issue. Note that development is being moved away from SourceForge, Freshmeat, or other sites. ## Directory Structure * `contrib`: A collection of user contributed scripts that may be useful. * `db`: Database schema and tools for generating DMARC reports based upon accumulated data. * `libopendmarc`:A library that implements the DMARC standard. * `libopendmarc/docs`: HTML documentation describing the API provided by libopendmarc. * `opendmarc`: A milter-based filter application which uses libopendmarc (and optionally libar) to provide DMARC service via an MTA using the milter protocol. ## Runtime Issues ### Missing symbols You may receive the warning: `WARNING: symbol 'X' not available` This indicates that the filter attempted to get some information from the MTA that the MTA did not provide. At various points in the interaction between the MTA and the filter, certain macros containing information about the job in progress or the connection being handled are passed from the MTA to the filter. In the case of sendmail, the names of the macros the MTA should pass to the filter are defined by the `Milter.macros` settings in sendmail.cf, e.g.`Milter.macros.connect`, `Milter.macros.envfrom`, etc. This message indicates that the filter needed the contents of macro X, but that macro was not passed down from the MTA. Typically the values needed by this filter are passed from the MTA if the `sendmail.cf` was generated by the usual m4 method. If you do not have those options defined in your `sendmail.cf`, make sure your M4 configuration files are current and rebuild your `sendmail.cf` to get appropriate lines added to your `sendmail.cf`, and then restart sendmail. ### MTA timeouts By default, the MTA is configured to wait up to ten seconds for a response from a filter before giving up. When querying remote nameservers for key and policy data, the DMARC filter may not get a response from the resolver within that time frame, and thus this MTA timeout will occur. This can cause messages to be rejected, temp-failed or delivered without verification, depending on the failure mode selected for the filter. When using the standard resolver library provided with your system, the DNS timeout cannot be adjusted. If you encounter this problem, you must increase the time the MTA waits for replies. See the documentation in the sendmail open source distribution (`libmilter/README` in particular) for instructions on changing these timeouts. When using the provided asynchronous resolver library, you can use the `-T` command line option to change the timeout so that it is shorter than the MTA timeout. ### Other OpenDMARC issues: Bug tracking is done via the trackers on GitHub at: https://github.com/trusteddomainproject/OpenDMARC/issues Please report them there, after checking for prior reports. ## Further Reading As DMARC adoption becomes more common, any list of links placed in the README of a single implementation will invariably grow out of date. Using your favorite search engine, or the mailing lists for your operating system or MTA is not an unreasonable path forward. As a start, however, the RFC's that define SPF, DKIM, and DMARC present a fairly comprehensive, if technical, understanding of the underlying protocols. Although there is not much information involving marrying them to a specific mail server. At the time of this writing, the following are the most recent RFC's for the protocols involved (although many other RFC's are referenced, of course). * https://tools.ietf.org/html/rfc6376 (DKIM) * https://tools.ietf.org/html/rfc7208 (SPF) * https://tools.ietf.org/html/rfc7489 (DMARC) * https://tools.ietf.org/html/rfc8617 (ARC) -- Copyright (c) 2012, 2016, 2018, 2021, The Trusted Domain Project. All rights reserved. OpenDMARC-rel-opendmarc-1-4-2/RELEASE_NOTES000066400000000000000000000607201416002254500176710ustar00rootroot00000000000000 OPENDMARC RELEASE NOTES This listing shows the versions of the OpenDMARC package, the date of release, and a summary of the changes in that release. 1.4.2 2021/12/19 Fix issue #175: Don't reject a multi-valued From when all of the domains match. Fix issue #179: Don't crash when a value in a multi-valued From field is missing a domain name. Resolves CVE-2021-34555. 1.4.1 2021/04/29 NOTE: In response to CVE-2019-20790, opendmarc has changed how it evaluates headers added by previous SPF milters. Users are encouraged to read the CVE-2019-20790 file in the "SECURITY" folder for more details. (#49, #158). Originally reported by Jianjun Chen, feedback by Simon Wilson and David Bürgin . NOTE: OpenDMARC's internal SPF handling will be removed in a future version. Users are encouraged to build linked against libspf2. Many pre-built packages provided by OS packagers already do this. (See https://www.libspf2.org) Addition of defines for MUSL C Library. (#129/#133). Patches by Marco Rebhan. Updated opendmarc.conf manpage and opendmarc.conf.sample to point to https://publicsuffix.org/list/. Added a CONTRIBUTING document. Fix two #ifdefs in arc functions for strlcpy. (#138). Reported by Leo Bicknell. Fixes to MySQL Schema (#98/#99). Patch by Bond Keevil. LIBSPF2 calls would not compile on OpenBSD due to OpenBSD not having the ns_type definition in arpa/resolv.h. Added detection to configure script. (#134) Reworked hcreate_r calls to use hcreate, to compile natively on OpenBSD and MacOS. (Part of #94) Reported by Rupert Gallagher. Add compatibility with AutoConf 2.70. (#95) Documentation updates about SourceForge being deprecated. (#101) Only accept results from Received-SPF fields that indicate clearly which identifier was being evaluated, since DMARC specifically only wants results based on MAIL FROM. Many build-time fixes (#100, #91, #90, #86, #85, #84, #83, #82, #81) Patches provided by Rupert Gallagher (ruga@protonmail.com) Added config option HoldQuarantinedMessages (default false), which controls if messages with p=quarantine will be passed on to the mail stream (if False) or placed in the MTA's "hold" queue (if True). Issue #105. Patch by Marcos Moraes, on the OpenDMARC mailing list. Remove "--with-wall" from "configure". Suggested by Leo Bicknell. LIBOPENDMARC: Fix bug #50: Ignore all RRTYPEs other than TXT. Problem reported by Jan Bouwhuis. LIBOPENDMARC: Fix bug #89: Repair absurd RRTYPE test in SPF code. LIBOPENDMARC: Fix bug #104: Fix bogus header field parsing code. LIBOPENDMARC: Fix bug #161: Don't pass the client IP address through htonl() since it's already in network byte order. This was causing SPF errors when the internal SPF implementation was in use. LIBOPENDMARC: Fix numerous problems with the internal SPF implementation. 1.4.0 2021/01/28 Add ARC support. Extensive work contributed by ValiMail, with patches by Jonathan Kamens. Add "DomainWhitelist" and "DomainWhitelistFile" config options. Extract client IP address for ARC reports when provided via Authentication-Results. Update SQL schema to support new reporting functionality for DKIM selectors and ARC local policy overrides (refer to the example schema.mysql file). Add experimental support for reporting of ARC local policy overrides. Add support for recording and reporting of DKIM selectors. Override a DMARC "fail" if an ARC "pass" is recorded in conjunction with an ARC policy pass. Add "RejectMultiValueFrom" configuration option to reject messages with multi-valued From fields, unless all domains in that field are the same. Fix bug #137: Handle base64 inside AR tokens that are values. Problem reported by Joseph Coffland. Fix Authentication-Results tokenizing. Patch from Dilyan Palauzov. LIBOPENDMARC: Fix bug #203: Reject DMARC records that have duplicate tags in them. Reported by Dirk Stoecker. LIBOPENDMARC: Pull request #70: For a non-pass DKIM outcome, discard unaligned domain. Patch from Andreas Weigel. LIBOPENDMARC: Pull request #67: Fix resource leakage on systems using res_ndestroy(). Patch from Emmanuel Dreyfus. LIBOPENDMARC: In opendmarc_xml_parse(), ensure NULL-termination of the buffer passed to opendmarc_xml(). LIBOPENDMARC: Add opendmarc_policy_fetch_from_domain(). Patch from Andreas Weigel. LIBOPENDMARC: Fix handling of long or malformed DMARC records. Patch from Joel Teichroeb. LIBOPENDMARC: Enable opendmarc_policy_store_dkim() to report a missing From domain. Patch from Joel Teichroeb. REPORTS: Feature request #146: Add option to pull input from a file. REPORTS: Fix bug #153: Suppress duplicate results from the same domain. Patch from Tomki Camp. 1.3.2 2017/03/04 Feature request #86: Change meaning of "RequiredHeaders" such that header validity is always checked, but messages are only rejected on that basis when the flag is set. Based on a patch from Andreas Schulze. Feature request #127: Log SPF results when rejecting. Requested by Patrick Wagner; patch from Andreas Schulze, follow-up patch from Juri Haberland. Feature request #138: Inculde policy and disposition information in an Authentication-Results comment. Based on a patch from Juri Haberland. Feature request #139: Include the client host name if known in failure reports. Suggested by Roland Turner; patch by Andreas Schulze. Fix bug #95: Assume IPv6 for SPF operations. Patch from Juri Haberland. Fix bug #120: Fix control logic around the SPF result. Reported by Christophe Wolfhugel; patch from Andreas Schulze. Fix bug #122: Don't skip the HELO milter phase when SPF is enabled. Reported by Christophe Wolfhugel. Fix bug #157: Fix logging of implicit authserv-ids. Reported by Andreas Schulze; patch from Juri Haberland. Fix bug #158: Log ignored connections. Patch from Andreas Schulze. Fix bug #160: Fix "SyslogFacility" handling. Patch from Juri Haberland. Fix bug #163: Use a larger buffer for the raw MAIL FROM value. Based on a patch from Andreas Schulze. Fix bug #174: Trim "!" suffixes from reporting addresses. Problem noted by Juri Haberland. Fix bug #186: When reloading the configuration file, the public suffix list was read in with the wrong comment indicator. Patch from Federico Omoto. Fix bug #194: Fix inappropriate DMARC status when "p=none" is discovered. Patch from Juri Haberland. Fix bug #195: When parsing Received-SPF, use the correct constants in the history file entries. Patch from Juri Haberland. LIBOPENDMARC: Fix bug #115: Fix type mismatch. Patch from Sebastian A. Siewior via Scott Kitterman. LIBOPENDMARC: Fix bug #121: Fix IPv6 CIDR matching in SPF code. Patch from Christophe Wolfhugel. LIBOPENDMARC: Fix bug #125: Compile time IPv6 fix. Reported by Christophe Wolfhugel. LIBOPENDMARC: Fix bug #131: Fix alignment bug. Patch from Andreas Schulze. LIBOPENDMARC: Fix bug #147: Fix stripping of whitespace from DMARC DNS records. Based on a patch from Job Noorman. LIBOPENDMARC: Fix bug #149: Apply "sp" setting, if present and applicable. Patch from Petr Novak. LIBOPENDMARC: Fix bug #154: Fix "rf" and "fo" processing logic. LIBOPENDMARC: Fix bug #156: Fix variable name. Patch by Andreas Schulze. LIBOPENDMARC: Fix bug #165: Fix logic in checking which SPF identifier was used. Patches from Marco Favero and Juri Haberland. LIBOPENDMARC: Fix bug #167: Don't return "fail" when we should return "none". Patch from Marco Favero. REPORTS: Fix bug #134: Handle SMTP errors correctly. Patch from Andreas Schulze. REPORTS: Fix bug #141: Set the HELO parameter correctly. Reported by Alan Smith; patch from Andreas Schulze. REPORTS: Fix bug #143: Fix logic in table truncation. Reported by Wayne Andersen; patch from Juri Haberland. REPORTS: Fix bug #162: Always report "sp" in aggregate reports. Patch from Juri Haberland. REPORTS: Fix bug #166: Fix report start/end time logic. Patch from Juri Haberland. REPORTS: Fix bug #188: Don't delete inputs too early in opendmarc-reports. Patch from Juri Haberland. TOOLS: Fix bug #161: "Forensic" reports were renamed "Failure" reports. Patch from Andreas Schulze. TOOLS: Fix bug #164: Handle IPv6 test addresses. Reported by Andreas Schulze; patch from Juri Haberland. DOCS: Patch #189: Replace the DMARC RFC with an HTML page referencing the relevant specs, since Debian doesn't consider RFCs to be "free". Patch from Scott Kitterman via Juri Haberland. 1.3.1 2015/02/23 Fix bug #97: Add ability to change envelope sender, client IP address, client hostname, and HELO value used in test mode, via environment variables. This can be turned into something more formal in a later release. Suggested by Andreas Schulze. Fix bug #102: Don't lose SPF results and output the "-1" default. Reported by Kurt Roeckx. Fix bug #103: Fix IgnoreAuthenticatedClients by requesting the right macro value from the MTA. Fix bug #113: Remove "TemporaryDirectory" (unused). Patch from Andreas Schulze. LIBOPENDMARC: Fix bug #104: Include and in so that MAXPATHLEN and MAXNS get defined consistently. Reported by Frank J. Lhota. LIBOPENDMARC: Fix bug #105: Get the h_errno definition from rather than declaring it. Problem noted by Frank J. Lhota. LIBOPENDMARC: Fix bug #106: Clean up issues with the types passed to opendmarc_policy_library_dns_hook(). Noted by Frank J. Lhota. DOCS: Fix bug #99: Update list of constraints on opendmarc_policy_fetch_alignment(). Reported by Frank J. Lhota. REPORTS: Fix bug #108: Handle malformed mailto URIs in DMARC records (e.g., just "mailto:"). Reported by Andreas Schulze. REPORTS: Fix bug #110: Support SQL backend selection in opendmarc-expire. Reported by Mark Reidenbach. 1.3.0 2014/07/31 Integrated SPF checking is now available through the new SPFSelfValidate and SPFIgnoreResults settings. Feature request #79: Optionally ignore clients that authenticated using SMTP AUTH. Fix bug #60, part II: Default AuthservID to the name provided by the MTA, not the local host name, which is consistent with what OpenDKIM does. Suggested by Robbert Klarenbeek. Fix bug #72: Don't crash when From fields are absent. Patch from Andreas Schulze. Fix bug #74: Change "Forensic" to "Failure" just about everywhere to match the language now being used in the base DMARC draft. Note that this also changes some names in the configuration file. Fix bug #75: Correct typo in MIME of forensic reports. Reported by Julian Mehnle. Fix bug #76: Repair damage with respect to Authentication-Results header field selection. Reported by Todd Lyons. Fix bug #77: Request quarantine from the MTA during option negotiation. Reported by Richard Platel. Fix bug #78: Add missing newline in forensic report header. Fix bug #90: Make "--with-sql-backend" without any value do the right thing. Reported by Scott Kitterman. Fix bug #93: Honor size limits in URIs. Patch from Tomki Camp. Make "smime" and "rrvs" legal Authentication-Results methods. Provide better logging when pclose() for a forensic report returns non-zero. Problem noted by Michael Nausch. Add configuration support for internal SPF checks. Includes hooks in the milter to check that SPF is configured to do so. This can use a private SPF implementation or libspf2. Fix strlcat() and strlcpy() support for Debian. Patch from Scott Kitterman. REPORTS: Feature request #80: Generate aggregate reports on UTC day boundaries. Requested by Tomki Camp. REPORTS: Feature request #84: Optionally expire old data from lower-growth tables. Requested by Christoph Steindl. REPORTS: Fix bug #70: Fix date range generation in reports. Patch from Karol Augustin. REPORTS: Fix bug #82: Fix recording of report timestamp to avoid lost records. Reported by Christoph Steindl. REPORTS: Fix bug #83: When expiring data, truncate the signatures table if all messages were expired. Reported by Christoph Steindl. REPORTS: Fix bug #85: Report subdomain policy. Patch from Christoph Steindl. LIBOPENDMARC: Fix bug #71: Fix "rua" extraction from DMARC records Problem noted by Karol Augustin. LIBOPENDMARC: Added support for milter to perform own spf checks. Three new files: opendmarc_spf.c, opendmard_spf_dns.c and test/test_spf.cl, allow integrated SPF support. Support for use of libspf2 is also provided. 1.2.0 2014/03/14 Feature request #44: Allow override of the From: field on forensic reports. Requested by Scott Kitterman. Feature request #45: Log the host portion of ignored Authentication-Results fields at "debug" level. Suggested by Andreas Schulze. Feature request #56: Add "RequiredHeaders" setting to enforce syntax checks against a message and reject those that don't comply. Suggested by Franck Martin; additional code from Andreas Schulze. Feature request #65: Add "ForensicReportsBcc". Requested by Franck Martin. Fix bug #46: Charitable tweak to a couple of log messages. Requested by Andreas Schulze. Fix bug #55: The "SoftwareHeader" setting wasn't being set properly. Problem noted by Birta Levente. Fix bug #58: The "smtp.mailfrom" part of an Authentication-Results field might contain only a domain name. Problem noted by Scott Kitterman. Fix bug #60: Default AuthservID to the name provided by the MTA, not the local host name, which is consistent with what OpenDKIM does. Suggested by Robbert Klarenbeek. Merge request #2: Validate external recipients before adding them to report recipient lists. Code from Will Orr. Record all DKIM results to the history file, rather than only passing results. BUILD: Fix bug #50: Check libbsd for strlcat() and strlcpy() so we don't make our own when we don't need to. Requested by Scott Kitterman. CONTRIB: Fix bug #52: Update path to draft RFC in contrib/spec. Problem noted by Kevin San Diego. CONTRIB: Fix bug #59: Allow database name, userid and password to be specified on the command line rather than hard-coding them. Problem noted by Scott Kitterman. DOCS: Fix bug #48: Add a libopendmarc use overview page. DOCS: Fix bug #53: Add man page for opendmarc-importstats. Requested by Scott Kitterman. REPORTS: Fix bug #51: Check status after every phase of SMTP when sending reports. Suggested by Todd Lyons. REPORTS: Fix DKIM status importing. LIBOPENDMARC: Fix bug #68: Fix strict/relaxed checking logic when a public suffix list is available. Reported by Andreas Schulze. LIBOPENDMARC: Fixed a bug where in some instances the fetch of the orgainizational domain could wrongly return the from domain. LIBOPENDMARC: Fix call to missing function. Patch from William Orr. 1.1.3 2013/04/13 Fix reporting of nonexistent SPF results. Problem noted by Andrei Ioachim. Fix extraction of data from Received-SPF. Problem noted by Todd Lyons. LIBOPENDMARC: Fix bug #47: Make sure that opendmarc_policy_fetch_utilized_domain() returns the organizational domain if that's the domain whose policy was selected. Reported by John Mears. 1.1.2 2013/03/27 Do Authentication-Results keyword parsing in a case-insensitive manner. Problem noted by Chris Meidinger. If the Authentication-Results for SPF didn't include one of the two expected properties, don't crash. Problem noted by Chris Meidinger. Fix a data load problem with TestDNSData. 1.1.1 2013/03/18 Don't crash when postfix reports no IP address. Problem reported by Andrei Ioachim. Add "TemporaryDirectory" to the list of valid config file items. 1.1.0 2013/03/08 Feature request #34: Add support for local DNS overrides to enable testing without Internet access. Requested by Scott Kitterman. Feature request #35: Add "ForensicReportsOnNone". Requested by Scott Kitterman. Feature request #41: Log the domain name with the result. Requested by Scott Kitterman. Don't fail to start on empty or null configuration files. Problem noted by Steve Jenkins. LIBOPENDMARC: Fix bug #38: Avoid huge retry loops when parsing non-DMARC TXT records, such as wildcards. Problem noted by Andreas Schulze. LIBOPENDMARC: Add opendmarc_policy_fetch_fo(), opendmarc_policy_fetch_rf(), and opendmarc_policy_to_buf(). REPORTING: Feature request #39: Add a MySQL script for setting up the reporting tables. Suggested by Scott Kitterman. 1.0.1 2012/11/16 Fall back to lockf() if flock() support isn't available. Fix faulty SPF error logging. Problem noted by Benny Pedersen. REPORTING: Improve temporary file cleanup in opendmarc-reports. CONTRIB: Fixes to configuration file generation in the spec file. Problem noted by Steve Mays. 1.0.0 2012/10/25 Rename "AlwaysDeliver" to "RejectFailures" and flip the logic. Feature request #26: Don't overload "AuthservID"; instead, the list of trusted authserv-ids is now specified by a new "TrustedAuthservIDs" setting. Requested by Andreas Schulze. Feature request #28: Add "CopyFailuresTo" which adds the specified recipient to the message when DMARC failures occur. Requested by Andreas Schulze. Feature request #30: Improve logging by indicating what the return path was when a parse failure occurred, and what the final DMARC result was. Requested by Andreas Schulze. Evaluate based on the envelope sender reported by Authentication-Results and not on what was in the actual envelope. REPORTING: Feature request #27: Add "--nodomain" to opendmarc-reports to skip report generation for specific domains. LIBOPENDMARC: Fix bug #31: Improve From: field parsing. Problem reported by Todd Lyons. 0.2.2 2012/09/14 Fix bug #25: Use locks to co-ordinate between the filter writing to the history file and opendmarc-import consuming it. Problem noted by Marcos Vieira. Don't use dmarcf_dstring_printf() where dmarcf_dstring_cat() suffices. Add Authentication-Results fields honouring AuthservIDWithJobID. Problem noted by Andreas Schulze. Improve logic that identifies usable Authentication-Results fields. Problem noted by Andreas Schulze. REPORTING: Handle multiple "rua" values in both reporting scripts. Problem noted by Andreas Schulze. REPORTING: Get the date range right on reports. Problem noted by Todd Lyons and Andreas Schulze. 0.2.1 2012/08/31 Don't crash during shutdown by accessing freed memory. Problem reported by Todd Lyons. Update the command line usage message, which was terribly outdated. Fix handling of an SPF pass when the envelope doesn't contain a usable domain name. Fix a crash problem having to do with default authserv-ids. Fix an off-by-one string length comparison error when checking for relevant authentication results. 0.2.0 2012/08/24 Feature request #15: If there's no SPF Authentication-Results field, look for a Received-SPF field to get SPF results. Feature request #16: Add "RecordAllMessages" setting to record all messages (the previous default). The new default is to record only those messages whose From: domains had a published DMARC record. Feature request #19: Add "IgnoreMailFrom" setting, allowing mail from specific domains to be ignored. Feature request #20: Allow "AuthservID" to be a comma-separated list of authserv-ids to trust as local. The first one is used in header field generation. Suggested by Andreas Schulze. Fix bug #18: Pass the absence of a "rua" field in a DMARC record to the history file and into the "requests" table. Prevent crashes when parsing horribly malformed From: fields. Problem noted by Todd Lyons. Don't apply a default IgnoreHosts list in test mode. Problem noted by Marcos Vieira. Don't expire request records for stuff that's never been generated yet. Problem noted by Todd Lyons. Register the filter with SMFIF_ADDHDRS not SMFIF_CHGHDRS. Problem noted by Todd Lyons. Fix bounds checking in dmarcf_dstring_printf(). Problem noted by Marcos Vieira. Arrays created in-place from strings don't need to have their elements freed. Problem noted by Andreas Schulze. BUILD: Install non-user scripts under sbin instead of bin. Problem noted by Andreas Schulze. CONTRIB: Add contrib/init/redhat and contents. Provided by Todd Lyons. CONTRIB: Add contrib/spec and contents. Provided by Todd Lyons. DB: Add some indexes to optimize operations. Suggested by Todd Lyons. LIBOPENDMARC: Fix bug #22: Minimal solution to alignment checks when no public suffix list is provided. Problem noted by Todd Lyons. REPORTING: Feature request #17: Add "opendmarc-params" tool, and tie it to opendmarc-import, so that administrators can force reports for specific domains to go to specific destinations regardless of DMARC record contents. REPORTING: Feature request #21: Add "--test" and "--keepfiles" options to opendmarc-reports. Patch from Todd Lyons. REPORTING: Add opendmarc-importstats. REPORTING: Variable verbose levels in opendmarc-report. Patch from Todd Lyons. TOOLS: Feature request #14: Add "openmarc-check" command line tool for translating DMARC records found in the DNS. 0.1.8 2012/07/30 Fix Linux build issue. REPORTING: Patch #13: Have report generation use SMTP directly. Patch from Andreas Schulze. 0.1.7 2012/07/26 Fix bug #5: Add "IgnoreHosts" setting. Fix bug #9: Honour "pct" setting (or its default). REPORTING: Fix bug #6: Add opendmarc-expire script. LIBOPENDMARC: Fix bug #7: Chase down CNAMEs if the resolver doesn't do it for you. Problem noted by Tim Draegen. LIBOPENDMARC: Fix bug #10: When DKIM is in alignment, don't short-circuit past SPF alignment tests. Problem noted by Mike Adkins and Steve Jones. LIBOPENDMARC: Fix bug #12: Fix a false positive alignment problem in the "relaxed" case. CONTRIB: Add a start/stop script. Contributed by Steve Mays. 0.1.6 2012/07/20 Don't report false passes for SPF. Problem noted by Tim Draegen. When opendmarc_policy_query_dmarc() fails, log the domain that was being checked. LIBOPENDMARC: Return DMARC_POLICY_NONE from opendmarc_get_policy_to_enforce() when "p=none" was found. DMARC_POLICY_PASS is only returned if alignment was discovered. REPORTING: Bug #4: Use report begin/end times based on message timestamps rather than last report's time/current time. Reported by Julian Mehnle. 0.1.5 2012/07/19 Add "Auth-Failure" field to forensic reports. LIBOPENDMARC: Fix a bug in "ri" parsing. 0.1.4 2012/07/15 LIBOPENDMARC: Fix a bug in dmarc_dns_get_record(). Reported by Andreas Schulze. LIBOPENDMARC: Fix library build for C++ compilers. Reported by Andrew Birchall. DB: Delete domains.lastsent, as it is unused. REPORTING: Fix column name error in opendmarc-reports. Reported by Andreas Schulze. REPORTING: Fix generated aggregate report header. Patch by Andreas Schulze. REPORTING: Call setlocale() in opendmarc-reports. Requested by Andreas Schulze. CONTRIB: Pull down a new version of rddmarc. From John Levine. 0.1.3 2012/07/14 Fix up the MIME syntax in AFRF reports. Patch from Andreas Schulze. Fix bug #2: Remove dmarcf_dkim_select(); logic has been moved into libopendmarc. Fix Authentication-Results field syntax. Don't generate an AFRF report on other than "reject" and "quarantine" results. Fix a test mode crash condition, and initialize a few minor things before entering test mode so AFRFs come out cleaner. Add "ReportCommand" to the valid configuration file item list. Ignore "header.i" when parsing DKIM authentication results. We only care about "header.d". Check for return status of opendmarc_policy_query_dmarc() and do the right thing with it. BUILD: Include the "db" directory. REPORTING: Fix bug #3: Drop XML::Generator and do it by hand, since we need to generate the array of DKIM signature data (there can be more than one) as a sub-query. LIBOPENDMARC: If the From: domain didn't have a DMARC policy and there's no Organizational Domain available, return the correct result code. 0.1.2 2012/07/11 LIBOPENDMARC: Use strlcat()/strlcpy(). BUILD: Add -lresolv where needed in more places (libopendmarc unit tests this time). Problem noted by Andreas Schulze. BUILD: Split filter checks and live library checks into different "--enable" flags. Problem noted by Andreas Schulze. BUILD: Actually do something with "--disable-filter". Problem noted by Andrew Birchall. 0.1.1 2012/07/10 LIBOPENDMARC: Add strlcat() and strlcpy() if not provided in libc. Problem noted by Andreas Schulze. REPORTS: Fix generated XML format ("auth_results" is a sibling of "row", not a child of it). Reported by John Levine. BUILD: Add -lresolv where needed. Problem noted by Andreas Schulze. BUILD: Clean up an errant "configure" line. Problem noted by Andreas Schulze. 0.1.0 2012/07/09 Initial Beta release. OpenDMARC-rel-opendmarc-1-4-2/SECURITY/000077500000000000000000000000001416002254500171605ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/SECURITY/CVE-2019-16378000066400000000000000000000066371416002254500206130ustar00rootroot00000000000000CVE-2019-16378 - OpenDMARC through 1.3.2 and 1.4.x through 1.4.0-Beta1 is prone to a signature-bypass vulnerability with multiple From: addresses, which might affect applications that consider a domain name to be relevant to the origin of an e-mail message. Link: https://nvd.nist.gov/vuln/detail/CVE-2019-16378 Background Details: When it was written, the DMARC RFC (RFC 7489) assumed that emails with multiple addresses in the From: field would be rejected by the receiving MTA (RFC 7489 Section 6.6.1), and moreover that emails containing such a header field would be rare in practice. In the case where such a message is received, the RFC recommends (in the same section) that all domains be tested, and the strictest policy be applied. However, having even two distinct administrative domains in the same From: header field (for example, a@gmail.com, b@hotmail.com) leads to an issue: * For SPF, mail can only be delivered to a receiving system from one IP address. Unless that IP address is (coincidentally or intentionally) in both domains' SPF records (or the domains "include:" each other), then the SPF check will fail (forged HELO's notwithstanding). * For DKIM, there can only be one selector/domain in a given DKIM-Signature, referencing a single "From:" header field. So in the case where either domain specifies a DMARC policy of either p=reject or p=quarantine, the result will be a failure. The message would have to bear valid signatures from both domains. In practice, citing the example above, a message cannot have been signed as being delivered to a receiving system immediately after originating from both gmail.com and hotmail.com. While it's possible to have a message relayed *through* one system via another, this is not what DMARC attempts to solve, and is what ARC (RFC 8617) is for. RFC 7489 also states (Section 3.1.1): Note that a single email can contain multiple DKIM signatures, and it is considered to be a DMARC "pass" if any DKIM signature is aligned and verifies. The behavior in the case of multiple distinct domains does not appear to have been considered by this section, as it seems to apply to multiple signing agents inside a single administrative domain. There are additional concerns. A filter that attempts to perform a full DMARC evaluation of every domain found in a multi-valued From could be used to amplify a denial of service attack either against the system running the filter or against other nameservers by intentionally listing a large number of domains in the From field. The specification does not provide guidance to mitigate such abuse. Resolution: Doing all of the DMARC checks for every domain in the From: of a message adds additional complexity, and opens a vector for abuse. In the case where a message contains two or more From: addresses from the same domain (for example, "From: professor@science.edu, student@science.edu"), both processed and signed by science.edu's mail server, these messages will be processed as normal, so long as there is only one unique domain. For all other cases, OpenDMARC has added an option to outright reject messages containing a multi-valued From: field. If set, messages can be rejected at receipt-time. If unset, messages will be ignored by the filter. (They will not pass, but they will not fail.) The Authentication-Results header field added for the DMARC check in this case will have a result of "dmarc=permerror". OpenDMARC-rel-opendmarc-1-4-2/SECURITY/CVE-2019-20790000066400000000000000000000054211416002254500205720ustar00rootroot00000000000000CVE-2019-20790 - OpenDMARC through 1.3.2 and 1.4.x, when used with pypolicyd-spf 2.0.2, allows attacks that bypass SPF and DMARC authentication in situations where the HELO field is inconsistent with the MAIL FROM field. Link: https://nvd.nist.gov/vuln/detail/CVE-2019-20790 Summary: opendmarc has added options to validate the Received-SPF: and spf-based Authentication-Results: headers as are added by some SPF validating implementations. Details: For the Received-SPF header field, opendmarc will not accept a result delivered via a discovered Received-SPF header field unless, in addition to stating "pass": (a) it includes the "identity" key AND its value is "mailfrom", AND (b) it includes the "envelope-from" key AND its value matches the envelope sender that was passed via the milter protocol. AND (c) per RFC 7208, that it is the topmost header field of its kind. If any of those tests fails, a "pass" or a "fail" is interpreted as "neutral". This is necessary to be compliant with RFC 7489 Section 4.1, which says the SPF evaluation of MAIL FROM is what DMARC consumes. For the Authentication-Results header field, in addition to requiring a "spf=pass" key/value, we now require that: (a) The smtp.mailfrom key be present AND (b) The domain portion of the value of the above key matches the envelope sender as above. Caveats: Note carefully that many elements of both of the above header fields that are relied upon for opendmarc to validate SPF processing by an earlier filter in the chain are not mandated by the RFC (they are listed) as things tools SHOULD do, not MUST. Some filters can set smtp.mailfrom=user@example.com, others can set smtp.mailfrom=example.com. RFC 8601, which defines the Authentication-Results header field allows both. The opendmarc milter will only compare the "domain" portion of this value. In fact, even the presence of a Received-SPF or Authentication-Results header field at all is not required to be added by a checking agent. Admins are encouraged to carefully evaluate which header fields and keys/values their milters add, and that it provides enough information for opendmarc to make a decision. Note that some mail filters may generate an SPF pass based on the HELO result, which OpenDMARC will not accept. This can result in the presence of a header which indicates that SPF passed, but via an identity that DMARC does not consider, which may be misleading to both users and admins. Even if you are validating SPF earlier in your mail stream, for example to hard-reject mail from SPF-failing domains which set "-all", you may wish to have OpenDMARC do its own SPF lookups, which requires enabling at compile-time. See the options "SPFIgnoreResults" and "SPFSelfValidate" in either opendmarc.conf.sample or the opendmarc.conf manpage. OpenDMARC-rel-opendmarc-1-4-2/SECURITY/CVE-2020-12272000066400000000000000000000014251416002254500205560ustar00rootroot00000000000000CVE-2020-12272 - OpenDMARC through 1.3.2 and 1.4.x allows attacks that inject authentication results to provide false information about the domain that originated an e-mail message. This is caused by incorrect parsing and interpretation of SPF/DKIM authentication results, as demonstrated by the "example.net(.example.com" substring. Link: https://nvd.nist.gov/vuln/detail/CVE-2020-12272 Resolution: OpenDMARC has added checking to validate that the domain element in both SPF and DKIM header fields being inspected contains only valid domain name characters. This has been fixed as of OpenDMARC 1.4.1 (April 2021). While not mentioned in the CVE, fixes are in a soon-to-be released branch of OpenDKIM as well so that a signature bearing such a domain will be considered invalid. OpenDMARC-rel-opendmarc-1-4-2/SECURITY/CVE-2020-12460000066400000000000000000000010411416002254500205470ustar00rootroot00000000000000CVE-2020-12460 - OpenDMARC through 1.3.2 and 1.4.x through 1.4.0-Beta1 has improper null termination in the function opendmarc_xml_parse that can result in a one-byte heap overflow in opendmarc_xml when parsing a specially crafted DMARC aggregate report. This can cause remote memory corruption when a '\0' byte overwrites the heap metadata of the next chunk and its PREV_INUSE flag. Link: https://nvd.nist.gov/vuln/detail/CVE-2020-12460 Resolution: OpenDMARC has repaired the function in question, as of OpenDMARC 1.4.0 (January 2021). OpenDMARC-rel-opendmarc-1-4-2/SECURITY/CVE-2021-34555000066400000000000000000000006441416002254500205710ustar00rootroot00000000000000CVE-2020-12460 - OpenDMARC 1.4.1 and 1.4.1.1 include a bug where a multi-valued from field can, if improperly formed, cause the OpenDMARC milter to crash. Link: https://nvd.nist.gov/vuln/detail/CVE-2021-34555 Resolution: OpenDMARC has repaired the function in question, as of OpenDMARC 1.4.2 (December 2021). The dmarcf_mail_parse_multi() function now returns the number of addresses to walk and checks all of them. OpenDMARC-rel-opendmarc-1-4-2/TESTS000066400000000000000000000012241416002254500165350ustar00rootroot00000000000000DKIM properties: - messages not signed - messages signed by the From: domain - messages signed by a parent domain - messages signed by some other domain SPF properties: - no "pass" - "pass" for From: domain - "pass" for parent of From: domain - "pass" for some other domain Organizational Domain computation: - various test cases (.com, .org.uk, etc.) DMARC policies, mixed with each of the above groupings: - p=none - p=quarantine - p=reject - sp=none - sp=quarantine - sp=reject - use "reject" and set "pct" to some value, ensure rejected message count is in that ballpark REPORTING: - ensure correct output for each case above when HistoryFile is set OpenDMARC-rel-opendmarc-1-4-2/announcement000066400000000000000000000020751416002254500203320ustar00rootroot00000000000000From: Murray S. Kucherawy To: opendmarc-announce@trusteddomain.org, opendmarc-users@trusteddomain.org Subject: OpenDMARC v1.4.2 released The Trusted Domain Project is pleased to announce the availability of OpenDMARC v1.4.2 now available for download from GitHub. This is a bug fix release. Upgrade is recommended. The full RELEASE_NOTES for this version, showing changes since the last release: 1.4.2 2021/12/19 Fix issue #175: Don't reject a multi-valued From when all of the domains match. Fix issue #179: Don't crash when a value in a multi-valued From field is missing a domain name. Resolves CVE-2021-34555. Please use the trackers on GitHub at: https://github.com/trusteddomainproject/OpenDMARC/issues to file problem reports, or the mailing lists for more general discussion and questions. Older versions of this project used SourceForge and/or Freshmeat, which are officially deprecated. If you had submitted an issue there, please see if it is still relevant and consider re-filing it as a GitHub issue. The Trusted Domain Project OpenDMARC-rel-opendmarc-1-4-2/build-aux/000077500000000000000000000000001416002254500176035ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/build-aux/.gitignore000066400000000000000000000000121416002254500215640ustar00rootroot00000000000000[cdilmt]* OpenDMARC-rel-opendmarc-1-4-2/build-aux/README000066400000000000000000000002231416002254500204600ustar00rootroot00000000000000$Id: README,v 1.1 2009/11/23 05:47:01 cm-msk Exp $ This directory is a placeholder for scripts generated during or required by the build process. OpenDMARC-rel-opendmarc-1-4-2/conf_refcnt000066400000000000000000000310131416002254500201200ustar00rootroot00000000000000m4/ac_pthread.m4:# http://www.gnu.org/software/autoconf-archive/ax_pthread.html opendmarc/opendmarc.c: conf->conf_authservid = strdup(myhostname); opendmarc/opendmarc.c: conf->conf_authservid = strdup(str); opendmarc/opendmarc.c: dmarcf_mkarray(str, ",", &conf->conf_trustedauthservids); opendmarc/opendmarc.c: dmarcf_mkarray(str, ",", &conf->conf_ignoredomains); opendmarc/opendmarc.c: &conf->conf_authservidwithjobid, opendmarc/opendmarc.c: sizeof conf->conf_authservidwithjobid); opendmarc/opendmarc.c: &conf->conf_copyfailsto, opendmarc/opendmarc.c: sizeof conf->conf_copyfailsto); opendmarc/opendmarc.c: if (conf->conf_dnstimeout == DEFTIMEOUT) opendmarc/opendmarc.c: &conf->conf_dnstimeout, opendmarc/opendmarc.c: sizeof conf->conf_dnstimeout); opendmarc/opendmarc.c: &conf->conf_enablecores, opendmarc/opendmarc.c: sizeof conf->conf_enablecores); opendmarc/opendmarc.c: &conf->conf_spfignoreresults, opendmarc/opendmarc.c: sizeof conf->conf_spfignoreresults); opendmarc/opendmarc.c: &conf->conf_spfselfvalidate, opendmarc/opendmarc.c: sizeof conf->conf_spfselfvalidate); opendmarc/opendmarc.c: &conf->conf_rejectfail, opendmarc/opendmarc.c: sizeof conf->conf_rejectfail); opendmarc/opendmarc.c: &conf->conf_reqhdrs, opendmarc/opendmarc.c: sizeof conf->conf_reqhdrs); opendmarc/opendmarc.c: &conf->conf_afrf, opendmarc/opendmarc.c: sizeof conf->conf_afrf); opendmarc/opendmarc.c: &conf->conf_reject_multi_from, opendmarc/opendmarc.c: sizeof conf->conf_reject_multi_from); opendmarc/opendmarc.c: &conf->conf_afrfnone, opendmarc/opendmarc.c: sizeof conf->conf_afrfnone); opendmarc/opendmarc.c: &conf->conf_afrfas, opendmarc/opendmarc.c: sizeof conf->conf_afrfas); opendmarc/opendmarc.c: &conf->conf_afrfbcc, opendmarc/opendmarc.c: sizeof conf->conf_afrfbcc); opendmarc/opendmarc.c: &conf->conf_recordall, opendmarc/opendmarc.c: sizeof conf->conf_recordall); opendmarc/opendmarc.c: &conf->conf_holdquarantinedmessages, opendmarc/opendmarc.c: sizeof conf->conf_holdquarantinedmessages); opendmarc/opendmarc.c: &conf->conf_ignoreauthclients, opendmarc/opendmarc.c: sizeof conf->conf_ignoreauthclients); opendmarc/opendmarc.c: &conf->conf_reportcmd, opendmarc/opendmarc.c: sizeof conf->conf_reportcmd); opendmarc/opendmarc.c: &conf->conf_pslist, opendmarc/opendmarc.c: sizeof conf->conf_pslist); opendmarc/opendmarc.c: if (!conf->conf_dolog) opendmarc/opendmarc.c: (void) config_get(data, "Syslog", &conf->conf_dolog, opendmarc/opendmarc.c: sizeof conf->conf_dolog); opendmarc/opendmarc.c: if (!conf->conf_addswhdr) opendmarc/opendmarc.c: &conf->conf_addswhdr, opendmarc/opendmarc.c: sizeof conf->conf_addswhdr); opendmarc/opendmarc.c: &conf->conf_historyfile, opendmarc/opendmarc.c: sizeof conf->conf_historyfile); opendmarc/opendmarc.c: if (conf->conf_trustedauthservids == NULL && opendmarc/opendmarc.c: conf->conf_authservid != NULL) opendmarc/opendmarc.c: dmarcf_mkarray(conf->conf_authservid, ",", opendmarc/opendmarc.c: &conf->conf_trustedauthservids); opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: conf->conf_domainwhitelisthashcount = 0; opendmarc/opendmarc.c: if (!dmarcf_addlist_csv(whitelist, ",", &conf->conf_domainwhitelist)) opendmarc/opendmarc.c: &conf->conf_domainwhitelist)) opendmarc/opendmarc.c: for (cur = conf->conf_domainwhitelist; opendmarc/opendmarc.c: conf->conf_domainwhitelisthashcount++; opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_refcnt == 0) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: curconf->conf_refcnt++; opendmarc/opendmarc.c: if (conf->conf_copyfailsto != NULL) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: conf->conf_refcnt--; opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: curconf->conf_refcnt++; opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (!conf->conf_spfselfvalidate) opendmarc/opendmarc.c: if (conf->conf_ignoreauthclients && opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (no_i_whine && conf->conf_dolog) opendmarc/opendmarc.c: authservid = conf->conf_authservid; opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_reqhdrs && reqhdrs_error != NULL) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_reject_multi_from) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_reqhdrs) opendmarc/opendmarc.c: if (conf->conf_ignoredomains != NULL && opendmarc/opendmarc.c: dmarcf_match(domain, conf->conf_ignoredomains, TRUE)) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: (conf->conf_trustedauthservids == NULL || opendmarc/opendmarc.c: !dmarcf_match(ar.ares_host, conf->conf_trustedauthservids, opendmarc/opendmarc.c: if (!conf->conf_authservidwithjobid) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: (conf->conf_trustedauthservids == NULL || opendmarc/opendmarc.c: conf->conf_trustedauthservids, opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: && !conf->conf_spfignoreresults opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: conf->conf_domainwhitelisthashcount > 0) opendmarc/opendmarc.c: && !conf->conf_spfignoreresults opendmarc/opendmarc.c: if (conf->conf_spfselfvalidate) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: (conf->conf_afrfnone && policy == DMARC_POLICY_NONE)) && opendmarc/opendmarc.c: conf->conf_afrf && opendmarc/opendmarc.c: (conf->conf_afrfbcc != NULL || ruv != NULL)) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_afrfas != NULL) opendmarc/opendmarc.c: conf->conf_afrfas); opendmarc/opendmarc.c: if (conf->conf_afrfbcc != NULL) opendmarc/opendmarc.c: conf->conf_afrfbcc); opendmarc/opendmarc.c: if (ruv != NULL && conf->conf_afrfbcc != NULL) opendmarc/opendmarc.c: conf->conf_afrfbcc); opendmarc/opendmarc.c: out = popen(conf->conf_reportcmd, "w"); opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (status != 0 && conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_rejectfail && opendmarc/opendmarc.c: if (status != MI_SUCCESS && conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_copyfailsto != NULL) opendmarc/opendmarc.c: status = dmarcf_addrcpt(ctx, conf->conf_copyfailsto); opendmarc/opendmarc.c: if (status != MI_SUCCESS && conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_rejectfail && conf->conf_holdquarantinedmessages && random() % 100 < pct) opendmarc/opendmarc.c: if (status != MI_SUCCESS && conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_copyfailsto != NULL) opendmarc/opendmarc.c: status = dmarcf_addrcpt(ctx, conf->conf_copyfailsto); opendmarc/opendmarc.c: if (status != MI_SUCCESS && conf->conf_dolog) opendmarc/opendmarc.c: conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: conf->conf_authservidwithjobid ? "/" : "", opendmarc/opendmarc.c: conf->conf_authservidwithjobid ? dfc->mctx_jobid : "", opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: if (conf->conf_historyfile != NULL && opendmarc/opendmarc.c: (conf->conf_recordall || ostatus != DMARC_DNS_ERROR_NO_RECORD)) opendmarc/opendmarc.c: f = fopen(conf->conf_historyfile, "a"); opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: conf->conf_historyfile, opendmarc/opendmarc.c: conf->conf_historyfile, opendmarc/opendmarc.c: if (ferror(f) && conf->conf_dolog) opendmarc/opendmarc.c: conf->conf_historyfile, opendmarc/opendmarc.c: conf->conf_historyfile, opendmarc/opendmarc.c: if (conf->conf_addswhdr) opendmarc/opendmarc.c: if (conf->conf_dolog) opendmarc/opendmarc.c: assert(conf->conf_refcnt == 0); opendmarc/opendmarc.c: if (conf->conf_data != NULL) opendmarc/opendmarc.c: config_free(conf->conf_data); opendmarc/opendmarc.c: if (conf->conf_ignoredomains != NULL) opendmarc/opendmarc.c: dmarcf_freearray(conf->conf_ignoredomains); opendmarc/opendmarc.c: if (conf->conf_trustedauthservids != NULL) opendmarc/opendmarc.c: dmarcf_freearray(conf->conf_trustedauthservids); opendmarc/opendmarc.c: if (conf->conf_authservid != NULL) opendmarc/opendmarc.c: free(conf->conf_authservid); opendmarc/opendmarc.c: if (conf->conf_domainwhitelisthashcount > 0) opendmarc/opendmarc.c: dmarcf_freelist(conf->conf_domainwhitelist); opendmarc/opendmarc.c: curconf->conf_dolog = TRUE; opendmarc/opendmarc.c: dolog = curconf->conf_dolog; opendmarc/opendmarc.c: curconf->conf_data = cfg; opendmarc/opendmarc.c: curconf->conf_dolog = FALSE; opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_enablecores) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: curconf->conf_dolog); opendmarc/opendmarc.c: curconf->conf_dolog); opendmarc/opendmarc.c: if (wpid != -1 && curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_pslist != NULL) opendmarc/opendmarc.c: strncpy(libopendmarc.tld_source_file, curconf->conf_pslist, opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: curconf->conf_trustedauthservids != NULL && opendmarc/opendmarc.c: curconf->conf_trustedauthservids[c] != NULL; opendmarc/opendmarc.c: curconf->conf_trustedauthservids[c], opendmarc/opendmarc.c: curconf->conf_trustedauthservids[c], opendmarc/opendmarc.c: if (curconf->conf_dolog) opendmarc/opendmarc.c: if (curconf->conf_dolog) OpenDMARC-rel-opendmarc-1-4-2/configure.ac000066400000000000000000000346731416002254500202140ustar00rootroot00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. # # Copyright (c) 2012-2017, 2018, 2021, The Trusted Domain Project. # All rights reserved. # SPF support: # Define --with-spf to include either internal OR libspf2 support. For libspf2 # support, also define these: # --with-spf2-include=path # --with-spf2-lib=path # # Setup # AC_CONFIG_AUX_DIR([build-aux]) AC_PREREQ(2.61) # # Package version # m4_define([VERSION_RELEASE], 1) m4_define([VERSION_MAJOR_REV], 4) m4_define([VERSION_MINOR_REV], 2) m4_define([VERSION_PATCH], 0) # # Library version # - bump "current" and reset "revision" with API changes # - bump "revision" with internal source code changes # m4_define([LIBVERSION_CURRENT], 2) m4_define([LIBVERSION_REVISION], 3) m4_define([LIBVERSION_AGE], 0) # # Autotools setup # AC_INIT([OpenDMARC], [VERSION_RELEASE.VERSION_MAJOR_REV.VERSION_MINOR_REV], [msk@trusteddomain.org]) AC_CONFIG_AUX_DIR(build-aux) AC_CONFIG_AUX_DIR([build-aux]) AC_CANONICAL_TARGET AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR([.]) AC_CONFIG_HEADERS(build-config.h) AC_CONFIG_MACRO_DIR([m4]) AC_HEADER_RESOLV AC_CHECK_TYPES([ns_type], [], [], [[ #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_NETINET_IN_H # include /* inet_ functions / structs */ #endif #ifdef HAVE_ARPA_NAMESER_H # include /* DNS HEADER struct */ #endif #ifdef HAVE_NETDB_H # include #endif #include ]]) # # Hexadecimal version, for use in generating dmarc.h # HEX_VERSION=$(printf %08x $(( ((VERSION_RELEASE << 8 | VERSION_MAJOR_REV) << 8 | VERSION_MINOR_REV) << 8 | VERSION_PATCH ))) AC_SUBST([HEX_VERSION]) # # version string for GitHub assets # https://github.com/trusteddomainproject/OpenDMARC/archive/rel-opendmarc-1-4-0.tar.gz # https://github.com/trusteddomainproject/OpenDMARC/archive/rel-opendmarc-1-4-0-Beta1.tar.gz # Beta tag is passed to RPM by downstream packagers and expanded there. # GITHUB_VERSION=$(printf %d-%d-%d VERSION_RELEASE VERSION_MAJOR_REV VERSION_MINOR_REV) AC_SUBST([GITHUB_VERSION]) # # library version, passed to libtool # LIBOPENDMARC_VERSION_INFO=$(printf %d:%d:%d LIBVERSION_CURRENT LIBVERSION_REVISION LIBVERSION_AGE) AC_SUBST([LIBOPENDMARC_VERSION_INFO]) # # Checks for programs # AC_PROG_CC AM_PROG_CC_C_O LT_INIT PKG_PROG_PKG_CONFIG AC_ARG_WITH([installdir], AS_HELP_STRING([--with-installdir=/path], [(default =/usr/local)]), LIBDMARC_BASE=$withval, LIBDMARC_BASE=/usr/local/) AC_SUBST(LIBDMARC_DIR, $LIBDMARC_BASE) # # Check for how to compile threaded stuff # AX_PTHREAD AC_CHECK_HEADERS(stdio.h) AC_CHECK_HEADERS(syslog.h) AC_CHECK_HEADERS(sysexits.h) AC_CHECK_HEADERS(poll.h) AC_CHECK_HEADERS(time.h) AC_CHECK_HEADERS(netdb.h) AC_CHECK_HEADERS(errno.h) AC_CHECK_HEADERS(ctype.h) AC_CHECK_HEADERS(fcntl.h) AC_CHECK_HEADERS(string.h) AC_CHECK_HEADERS(sys/param.h) AC_CHECK_HEADERS(sys/socket.h) AC_CHECK_HEADERS(sys/types.h) AC_CHECK_HEADERS(sys/types.h) AC_CHECK_HEADERS(arpa/inet.h sys/socket.h netdb.h sys/ioctl.h) AC_CHECK_HEADERS(iso/limits_iso.h) AC_CHECK_HEADERS([netinet/in.h], [], [], [#if HAVE_SYS_TYPES_H # include #endif ]) AC_CHECK_HEADERS([arpa/nameser.h], [], [], [#if HAVE_SYS_TYPES_H # include #endif ]) AC_CHECK_HEADERS([resolv.h], [], [], [#if HAVE_SYS_TYPES_H # include #endif #if HAVE_NETINET_IN_H # include #endif #if HAVE_ARPA_NAMESER_H # include #endif ]) AC_CHECK_LIB(socket, connect) AC_CHECK_LIB(resolv, hstrerror, , , [-lnsl -lsocket]) AC_CHECK_LIB(resolv, inet_aton, , , [-lnsl -lsocket]) # You might find res_ninit() in system libraries or in libresolv or not # at all. The way AC_LANG_CALL finds out is it declares res_ninit() so # it can call it, then it sees if linking fails because of unresolved # symbols. Great, except glibc doesn't export res_ninit() -- it exports # __res_ninit() -- res_ninit() is a macro in resolv.h. So unless we # include resolv.h, we won't find res_ninit(), but when we do include # it, it conflicts with AC_LANG_CALL's redeclaration. Hmm. I guess the # only thing for it is to include resolv.h, don't redeclare res_ninit(), # and use the proper type signature when calling it. m4_rename([AC_LANG_CALL], [saved_AC_LANG_CALL]) m4_define([AC_LANG_CALL], [AC_LANG_PROGRAM([#include ], [return res_ninit(NULL);])]) AC_SEARCH_LIBS(res_ninit, resolv, AC_DEFINE(HAVE_RES_NINIT, 1, [Define to 1 if you have the `res_ninit()' function.])) # Same as above, but for res_ndestroy. m4_define([AC_LANG_CALL], [AC_LANG_PROGRAM([#include ], [res_ndestroy(NULL);])]) AC_SEARCH_LIBS(res_ndestroy, resolv, AC_DEFINE(HAVE_RES_NDESTROY, 1, [Define to 1 if you have the `res_ndestroy()' function.])) m4_rename_force([saved_AC_LANG_CALL], [AC_LANG_CALL]) AC_CHECK_LIB(idn, idn_free) AC_CHECK_LIB(rt, nanosleep) AC_SEARCH_LIBS(inet_addr, nsl) AC_SEARCH_LIBS(freehostent, resolv) AC_SEARCH_LIBS(inet_pton, resolv, AC_DEFINE(HAVE_INET_PTON, 1, [Define to 1 if you have the `inet_pton()' function.])) AC_SEARCH_LIBS(inet_ntop, resolv, AC_DEFINE(HAVE_INET_NTOP, 1, [Define to 1 if you have the `inet_ntop()' function.])) AC_SEARCH_LIBS(getipnodebyname, resolv, AC_DEFINE(HAVE_GETADDRINFO, 1, [Define to 1 if you have the `getipnodebyname()' function.])) AC_HEADER_RESOLV AC_C_BIGENDIAN AC_STRUCT_TM AC_C_CONST AC_TYPE_SIZE_T AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(int) AC_CHECK_SIZEOF(short) AC_CHECK_SIZEOF(char) AC_CHECK_SIZEOF(size_t) AC_CHECK_SIZEOF(long long) AC_CHECK_SIZEOF(unsigned long long) AC_CHECK_SIZEOF(void *) AC_FUNC_MALLOC AC_FUNC_REALLOC AC_SEARCH_LIBS(strlcat, bsd strl, AC_DEFINE(HAVE_STRLCAT, 1, [Define to 1 if you have the `strlcat()' function.])) AC_SEARCH_LIBS(strlcpy, bsd strl, AC_DEFINE(HAVE_STRLCPY, 1, [Define to 1 if you have the `strlcpy()' function.])) AC_CHECK_FUNCS(basename) AC_CHECK_FUNCS(syslog) AC_CHECK_FUNCS(cuserid) AC_CHECK_FUNCS(memset bzero, break) AC_CHECK_FUNCS(memcpy bcopy, break) AC_CHECK_FUNCS(strerror) AC_CHECK_FUNCS(strchr) AC_CHECK_FUNCS(strrchr) AC_CHECK_FUNCS(strdup) AC_CHECK_FUNCS(strpbrk) AC_CHECK_FUNCS(inet_ntoa) AC_CHECK_FUNCS(strcasecmp) AC_CHECK_FUNCS(strncasecmp) AC_CHECK_HEADERS(signal.h) AC_CHECK_HEADERS(regex.h) bsdstrl_h_found="no" strl_h_found="no" AC_CHECK_HEADERS([bsd/string.h], [bsdstrl_h_found="yes"]) AC_CHECK_HEADERS([strl.h], [strl_h_found="yes"]) # we need to include if an installed strl.h was found and no # bsd/string.h was found if test x"$strl_h_found" = x"yes" -a x"$bsdstrl_h_found" = x"no" then AC_DEFINE([USE_STRL_H], 1, [Define to 1 if you need to include to get the `strlcat()' and `strlcpy()' functions.]) fi if test x"$bsdstrl_h_found" = x"yes" then AC_DEFINE([USE_BSD_H], 1, [Define to 1 if you need to include to get the `strlcat()' and `strlcpy()' functions.]) fi # Use opendmarc strl if neither a system strl nor libbsd are found if test x"$strl_h_found" = x"no" -a x"$bsdstrl_h_found" = x"no" then AC_DEFINE([USE_DMARCSTRL_H], 1, [Define to 1 if you need to include to get the `strlcat()' and `strlcpy()' functions.]) fi AC_PROG_LN_S AC_CHECK_PROG(miltertest, miltertest, "yes", "no") AC_SUBST(ac_aux_dir) # # See if we will need -lresolv # dnscheck=' #include "confdefs.h" #include #include #include #include int main() { res_mkquery (0, 0, 0, 0, 0, 0, 0, 0, 0); dn_expand (0, 0, 0, 0, 0); dn_skipname (0, 0); dn_comp (0, 0, 0, 0, 0); return 0; }' AC_MSG_CHECKING([whether the resolver works without -lresolv]) LIBRESOLV= AC_LINK_IFELSE([AC_LANG_SOURCE([ $dnscheck ])] , [ AC_MSG_RESULT(yes) ] , [ AC_MSG_RESULT(no) AC_MSG_CHECKING([whether the resolver works with -lresolv]) saved_LIBS="$LIBS" LIBS=-lresolv AC_LINK_IFELSE([AC_LANG_SOURCE([ $dnscheck ])] , [ AC_MSG_RESULT(yes) LIBRESOLV=-lresolv ] , [ AC_MSG_RESULT(no) AC_MSG_ERROR([need workable resolver library]) ]) LIBS="$saved_LIBS" ]) AC_SUBST([LIBRESOLV]) # # --with-sql-backend -- configures some defaults for DB access # AC_ARG_WITH([sql-backend], AS_HELP_STRING([--with-sql-backend], [selection of SQL backend in use]), [SQL_BACKEND="$withval"], [SQL_BACKEND="mysql"]) if test x"$SQL_BACKEND" = x"yes" then SQL_BACKEND="mysql" fi AC_SUBST(SQL_BACKEND) AC_DEFINE_UNQUOTED(SQL_BACKEND, "$SQL_BACKEND", [default SQL back-end]) AC_ARG_WITH([spf], AS_HELP_STRING([--with-spf], [enable SPF checking]), AC_DEFINE(WITH_SPF, 1, [Define to 1 if you want SPF support.]), []) AC_ARG_WITH([spf2-include], AS_HELP_STRING([--with-spf2-include], [path to libspf2 includes]), SPF2_INCLUDE="$withval", []) AC_ARG_WITH([spf2-lib], AS_HELP_STRING([--with-spf2-lib], [path to libspf2 libraries]), SPF2_LIB="$withval", []) use_spf="no" if test "x$SPF2_INCLUDE" != "x" -a "x$SPF2_LIB" != "x" then use_spf="yes" if test -f ${SPF2_INCLUDE}/spf.h then AC_DEFINE(HAVE_SPF2_H, 1, [Define to 1 if you have libspf2's `spf.h']) spf2_include="-I $SPF2_INCLUDE" saved_CFLAGS="$CFLAGS" saved_LDFLAGS="$LDFLAGS" CFLAGS="$spf2_include $saved_CFLAGS" LDFLAGS="$saved_LDFLAGS -L${SPF2_LIB}" fi AC_SEARCH_LIBS(SPF_record_new, spf2) AC_SEARCH_LIBS(SPF_server_new, spf2) fi AM_CONDITIONAL([TEST_SPF], [test x"$with_spf" = x"yes"]) # # opendmarc # AC_ARG_ENABLE([filter], AS_HELP_STRING([--disable-filter], [do not compile the opendmarc filter]), [enable_filter=$enableval], [enable_filter=yes]) AM_CONDITIONAL([BUILD_FILTER], [test x"$enable_filter" != x"no"]) AC_ARG_ENABLE([live-tests], AS_HELP_STRING([--enable-live-tests], [enable live unit tests]), [enable_live_tests=$enableval], [enable_live_tests=no]) AM_CONDITIONAL([LIVE_TESTS], [test x"$enable_live_tests" = x"yes"]) AC_ARG_ENABLE([filter-tests], AS_HELP_STRING([--enable-filter-tests], [enable Lua-based filter unit tests]), [enable_filter_tests=$enableval], [enable_filter_tests=no]) AM_CONDITIONAL([FILTER_TESTS], [test x"$enable_filter_tests" = x"yes"]) if test x"$enable_filter_tests" = x"yes" -a x"$miltertest" != x"yes" then AC_MSG_ERROR([miltertest is required for filter tests]) fi AC_CHECK_HEADERS(math.h, [], [AC_MSG_FAILURE([missing header '$ac_header'])]) AC_SEARCH_LIBS([floor], [m]) AC_CHECK_FUNCS([floor], [], [AC_MSG_FAILURE([missing function '$ac_func'])]) # # libmilter # AC_MSG_CHECKING([for milter library and includes]) AC_ARG_WITH([milter], AS_HELP_STRING([--with-milter], [location of milter includes and library]), [milterpath="$withval"], [milterpath="auto"]) if test x"$enable_filter" = x"no" then milterpath="no" fi if test "$milterpath" = "auto" -o "$milterpath" = "yes" then milterdirs="/usr/local /opt/local /usr" for d in $milterdirs do if test -f $d/include/libmilter/mfapi.h then milterpath=$d break fi done fi case "$milterpath" in no) if test x"$enable_filter" = x"yes" then AC_MSG_ERROR([milter is required]) fi AC_MSG_RESULT(disabled) ;; auto) AC_MSG_ERROR([milter not found]) ;; */*) if ! test -f $milterpath/include/libmilter/mfapi.h then AC_MSG_ERROR([milter includes not found at $milterpath]) fi AC_MSG_RESULT([$milterpath]) ;; *) AC_MSG_ERROR([milter not found]) ;; esac LIBMILTER_INCDIRS="" LIBMILTER_LIBDIRS="" LIBMILTER_LIBS="" if test x"$milterpath" != x"no" then LIBMILTER_INCDIRS="-I$milterpath/include" saved_CC="$CC" saved_CFLAGS="$CFLAGS" saved_CPPFLAGS="$CPPFLAGS" saved_LDFLAGS="$LDFLAGS" saved_LIBS="$LIBS" CC="$PTHREAD_CC" LIBS="$PTHREAD_LIBS $saved_LIBS" CPPFLAGS="$LIBMILTER_INCDIRS $saved_CPPFLAGS" CFLAGS="$PTHREAD_CFLAGS $saved_CFLAGS" LDFLAGS="$PTHREAD_CFLAGS $saved_LDFLAGS" breakloop="no" for d in lib lib/libmilter do unset ac_cv_search_smfi_register LDFLAGS="$PTHREAD_CFLAGS -L$milterpath/$d $saved_LDFLAGS" AC_SEARCH_LIBS([smfi_register], [milter], [ LIBMILTER_LIBDIRS="-L$milterpath/$d" LIBMILTER_LIBS="-lmilter" breakloop="yes" ]) AC_CHECK_FUNC([smfi_insheader], AC_DEFINE([HAVE_SMFI_INSHEADER], 1, [Define if libmilter has smfi_insheader()])) AC_CHECK_FUNC([smfi_opensocket], AC_DEFINE([HAVE_SMFI_OPENSOCKET], 1, [Define if libmilter has smfi_opensocket()])) AC_CHECK_FUNC([smfi_progress], AC_DEFINE([HAVE_SMFI_PROGRESS], 1, [Define if libmilter has smfi_progress()])) AC_CHECK_FUNC([smfi_setsymlist], AC_DEFINE([HAVE_SMFI_SETSYMLIST], 1, [Define if libmilter has smfi_setsymlist()])) AC_CHECK_FUNC([smfi_version], AC_DEFINE([HAVE_SMFI_VERSION], 1, [Define if libmilter has smfi_version()])) if test x"$breakloop" = x"yes" then break fi done if test x"$LIBMILTER_LIBDIRS" = x"" then AC_MSG_WARN([libmilter not found]) fi CC="$saved_CC" CPPFLAGS="$saved_CPPFLAGS" CFLAGS="$saved_CFLAGS" LDFLAGS="$saved_LDFLAGS" LIBS="$saved_LIBS" fi AC_SUBST(LIBMILTER_INCDIRS) AC_SUBST(LIBMILTER_LIBDIRS) AC_SUBST(LIBMILTER_LIBS) # # Final substitutions # CPPFLAGS="$CPPFLAGS -DCONFIG_BASE=\\\"$sysconfdir\\\"" test "x$prefix" = xNONE && prefix=$ac_default_prefix SYSCONFDIR=`eval echo "$sysconfdir"` AC_SUBST([SYSCONFDIR]) # # Generate files # AC_CONFIG_FILES([ Makefile contrib/Makefile contrib/init/Makefile contrib/init/generic/Makefile contrib/init/redhat/Makefile contrib/init/redhat/opendmarc contrib/rddmarc/Makefile contrib/service/Makefile contrib/service/opendmarc.service contrib/spec/Makefile contrib/spec/opendmarc.spec db/Makefile libopendmarc/Makefile libopendmarc/tests/Makefile libopendmarc/tests/testfiles/Makefile libopendmarc/docs/Makefile opendmarc/Makefile opendmarc/opendmarc.conf.5 opendmarc/opendmarc.8 opendmarc/opendmarc-check.8 opendmarc/tests/Makefile reports/Makefile reports/opendmarc-expire reports/opendmarc-expire.8 reports/opendmarc-import reports/opendmarc-import.8 reports/opendmarc-importstats.8 reports/opendmarc-params reports/opendmarc-params.8 reports/opendmarc-reports reports/opendmarc-reports.8 ]) AC_OUTPUT() # @end1 OpenDMARC-rel-opendmarc-1-4-2/contrib/000077500000000000000000000000001416002254500173515ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/contrib/Makefile.am000066400000000000000000000002051416002254500214020ustar00rootroot00000000000000# Copyright (c) 2012, The Trusted Domain Project. All rights reserved. SUBDIRS = init rddmarc service spec dist_doc_DATA = README OpenDMARC-rel-opendmarc-1-4-2/contrib/README000066400000000000000000000010071416002254500202270ustar00rootroot00000000000000This "contrib" directory of the OpenDMARC package and its subdirectories contain files contributed by members of the community that provide functions not directly supported by the project team. The copyrights on the files in and/or below this directory are owned by the files' owners and not by The Trusted Domain Project. Support for files contained here are provided only on a best-effort basis by the project team and by the files' owners. -- Copyright (c) 2012, The Trusted Domain Project. All rights reserved. OpenDMARC-rel-opendmarc-1-4-2/contrib/init/000077500000000000000000000000001416002254500203145ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/contrib/init/Makefile.am000066400000000000000000000001761416002254500223540ustar00rootroot00000000000000# Copyright (c) 2012, The Trusted Domain Project. All rights reserved. AUTOMAKE_OPTIONS = foreign SUBDIRS = generic redhat OpenDMARC-rel-opendmarc-1-4-2/contrib/init/generic/000077500000000000000000000000001416002254500217305ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/contrib/init/generic/Makefile.am000066400000000000000000000001431416002254500237620ustar00rootroot00000000000000# Copyright (c) 2012, The Trusted Domain Project. All rights reserved. dist_doc_DATA = opendmarc OpenDMARC-rel-opendmarc-1-4-2/contrib/init/generic/opendmarc000066400000000000000000000034501416002254500236250ustar00rootroot00000000000000#!/bin/bash # # opendmarc Start and stop OpenDMARC # chkconfig: - 41 59 # description: OpenDMARC implements the DMARC milter spec for domain auth # processname: opendmarc # pidfile: /var/run/opendmarc/opendmarc.pid ### BEGIN INIT INFO # Provides: opendmarc # Short-Description: Start and stop OpenDMARC # Description: OpenDMARC implements the DMARC milter spec for domain auth ### END INIT INFO # OpenDMARC startup script v1.0 for RHEL/CentOS/Fedora # by Steve Mays (steve@messagebus.com) - 7-23-2012 # Based on a script by Steve Jenkins (SteveJenkins.com) - 9-22-2011 for opendkim . /etc/rc.d/init.d/functions prefix=/usr/local exec_prefix=${prefix} RETVAL=0 prog="opendmarc" DAEMON=${exec_prefix}/sbin/$prog CONF_FILE=${prefix}/etc/$prog.conf PID_FILE=${prefix}/var/run/$prog/$prog.pid if [ -f /etc/sysconfig/opendmarc ]; then . /etc/sysconfig/opendmarc fi start() { echo -n $"Starting OpenDMARC Milter: " if [ -f $PID_FILE ]; then PID=`cat $PID_FILE` echo OpenDMARC already running as pid $PID exit 2; else daemon $DAEMON -c $CONF_FILE -P $PID_FILE RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/opendmarc echo return $RETVAL fi } stop() { echo -n $"Stopping OpenDMARC Milter: " killproc -p $PID_FILE opendmarc RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/opendmarc return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading OpenDMARC Milter configuration: " killproc -p $PID_FILE opendmarc -SIGUSR1 RETVAL=$? echo return $RETVAL } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; status) status -p $PID_FILE opendmarc ;; condrestart) [ -f /var/lock/subsys/opendmarc ] && restart || : ;; *) echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}" exit 1 esac exit $? OpenDMARC-rel-opendmarc-1-4-2/contrib/init/redhat/000077500000000000000000000000001416002254500215635ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/contrib/init/redhat/.gitignore000066400000000000000000000000261416002254500235510ustar00rootroot00000000000000opendmarc Makefile.in OpenDMARC-rel-opendmarc-1-4-2/contrib/init/redhat/Makefile.am000066400000000000000000000001431416002254500236150ustar00rootroot00000000000000# Copyright (c) 2012, The Trusted Domain Project. All rights reserved. dist_doc_DATA = opendmarc OpenDMARC-rel-opendmarc-1-4-2/contrib/init/redhat/opendmarc.in000066400000000000000000000037251416002254500240720ustar00rootroot00000000000000#!/bin/bash # # opendmarc Start and stop OpenDMARC # chkconfig: - 41 59 # description: OpenDMARC implements the DMARC milter spec for domain auth # processname: opendmarc # pidfile: @localstatedir@/run/opendmarc/opendmarc.pid ### BEGIN INIT INFO # Provides: opendmarc # Required-Start: opendmarc # Required-Stop: opendmarc # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop OpenDMARC # Description: OpenDMARC implements the DMARC milter spec for domain auth ### END INIT INFO # OpenDMARC startup script v1.0 for RHEL/CentOS/Fedora # By Todd Lyons (tlyons@ivenue.com) - 8-12-2012 # Based on a scrypt by Steve Mays (steve@messagebus.com) - 7-23-2012 # Based on a script by Steve Jenkins (SteveJenkins.com) - 9-22-2011 for opendkim . /etc/rc.d/init.d/functions prefix=@prefix@ exec_prefix=@exec_prefix@ RETVAL=0 prog="opendmarc" DAEMON=@sbindir@/$prog CONF_FILE=@sysconfdir@/$prog.conf PID_FILE=@localstatedir@/run/$prog/$prog.pid if [ -f /etc/sysconfig/opendmarc ]; then . /etc/sysconfig/opendmarc fi start() { echo -n $"Starting OpenDMARC Milter: " if [ -f $PID_FILE ]; then PID=`cat $PID_FILE` echo OpenDMARC already running as pid $PID exit 2; else daemon $DAEMON -c $CONF_FILE -P $PID_FILE RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/opendmarc echo return $RETVAL fi } stop() { echo -n $"Stopping OpenDMARC Milter: " killproc -p $PID_FILE opendmarc RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/opendmarc return $RETVAL } restart() { stop start } reload() { echo -n $"Reloading OpenDMARC Milter configuration: " killproc -p $PID_FILE opendmarc -SIGUSR1 RETVAL=$? echo return $RETVAL } case "$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; status) status -p $PID_FILE opendmarc ;; condrestart) [ -f /var/lock/subsys/opendmarc ] && restart || : ;; *) echo $"Usage: $0 {start|stop|status|reload|restart|condrestart}" exit 1 esac exit $? OpenDMARC-rel-opendmarc-1-4-2/contrib/rddmarc/000077500000000000000000000000001416002254500207655ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/contrib/rddmarc/Makefile.am000066400000000000000000000002351416002254500230210ustar00rootroot00000000000000# Copyright (c) 2012, The Trusted Domain Project. All rights reserved. dist_doc_DATA = README.rddmarc \ dmarcfail.py \ mkdmarc \ mysql_ip6.c \ rddmarc OpenDMARC-rel-opendmarc-1-4-2/contrib/rddmarc/README.rddmarc000066400000000000000000000031171416002254500232620ustar00rootroot00000000000000These are little scripts to parse DMARC reports. The first, rddmarc, is a perl script that take an incoming DMARC summary report email, extracts and unpacks the gzip or ZIP file, parses the XML, and puts the parts about received mail into a MySQL database. The database is set up to handle reports about multiple domains from multiple reporters. It's handling reports from Google, Yahoo, xs4all and Netease. It expects filenames on the command line, each of which contains a mail message, but it'd easy enough to adjust it to read stdin or anywhere else. It works great on FreeBSD, can probably be made to work on linux with modest effort, no clue about other systems. It needs the MIME::Parser, XML::Simple, and DBI perl modules and the freeware unzip program to extract stuff from the gzip or ZIP file. It now handles both IPv4 and IPv6 addresses. If you have been running the ipv4 version, see mkdmarc for instructions on how to update your database. The file mysql_ip6.c is a plugin for a mysql server to add some IPv6 formatting functions that can be handy when analyzing the reports. It's not needed for rddmarc. The second is a python script to parse failure reports. It expects file names on the command line, or if no arguments, it reads stdin. It needs the usual MySQLdb module. It handles reports from Netease, which are currently the only ones I'm getting. mkdmarc - SQL to create the tables rddmarc - the script to parse summary reports (Perl) dmarcfail.py - the script to parse failure reports (python) mysql_ip6.c - C language source for MySQL plugin for IPv6 formatting functions OpenDMARC-rel-opendmarc-1-4-2/contrib/rddmarc/dmarcfail.py000066400000000000000000000104271416002254500232650ustar00rootroot00000000000000#!/usr/local/bin/python # $Header: /home/johnl/hack/dmarc/RCS/dmarcfail.py,v 1.1 2012/07/12 03:59:29 johnl Exp $ # parse DMARC failure reports, add it to the mysql database # optional arguments are names of files containing ARF messages, # otherwise it reads stdin # Copyright 2012, Taughannock Networks. All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. import re import email import time import MySQLdb def dmfail(db,h,f): e = email.message_from_file(h) if(e.get_content_type() != "multipart/report"): print f,"is not a report" return for p in e.get_payload(): if(p.get_content_type() == "message/feedback-report"): r = email.parser.Parser() fr = r.parsestr(p.get_payload()[0].as_string(), True) fx = re.search(r'<(.+?)@(.+?)>', fr['original-mail-from']) origbox,origdom = fx.group(1,2) arr = int(email.utils.mktime_tz(email.utils.parsedate_tz(fr['arrival-date']))) elif(p.get_content_type() == "message/rfc822" or p.get_content_type() == "text/rfc822-headers"): m = email.message_from_string(p.get_payload()) frombox = fromdom = None fx = re.search(r'<(.+?)@(.+?)>', m['from']) if(fx): frombox,fromdom = fx.group(1,2) else: t = re.sub(m['from'],r"\s+|\([^)]*\)","") fx = re.match(r'(.+?)@(.+?)', t) if(fx): frombox,fromdom = fx.group(1,2) # OK, parsed it, now add an entry to the database c = db.cursor() c.execute("""INSERT INTO failure(serial,org,bouncedomain,bouncebox,fromdomain, frombox,arrival,sourceip,headers) VALUES(NULL,%s,%s,%s,%s,%s,FROM_UNIXTIME(%s),INET_ATON(%s),%s)""", (fr['reported-domain'],origdom,origbox,fromdom,frombox,arr,fr['source-ip'],m.as_string())) print "Inserted failure report %s" % c.lastrowid c.close() ################################################################################################# if __name__ == "__main__": import sys import argparse parser = argparse.ArgumentParser(description="process DMARC failures") parser.add_argument("-n", "--dbname", dest="dbname", action="store", type="string", help="database name", default="opendmarc") parser.add_argument("-p", "--dbpasswd", dest="dbpasswd", action="store", type="string", help="database password", default="opendmarc") parser.add_argument("-u", "--dbuser", dest="dbuser", action="store", type="string", help="database user", default="opendmarc") parser.add_argument("file", nargs="*") args = parser.parse_args() db = MySQLdb.connect(user=args.dbuser, passwd=args.dbpasswd, db=args.dbname, use_unicode=True) MySQLdb.paramstyle='format' if(len(args.file) == 0): dmfail(db,sys.stdin,"stdin"); else: for f in args.file: h = open(f) dmfail(db,h,f) h.close() OpenDMARC-rel-opendmarc-1-4-2/contrib/rddmarc/mkdmarc000066400000000000000000000064561416002254500223410ustar00rootroot00000000000000-- Create database for DMARC data -- Copyright 2012, Taughannock Networks. All rights reserved. -- Redistribution and use in source and binary forms, with or without -- modification, are permitted provided that the following conditions -- are met: -- Redistributions of source code must retain the above copyright -- notice, this list of conditions and the following disclaimer. -- Redistributions in binary form must reproduce the above copyright -- notice, this list of conditions and the following disclaimer in the -- documentation and/or other materials provided with the distribution. -- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -- INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -- BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS -- OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED -- AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY -- WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -- POSSIBILITY OF SUCH DAMAGE. USE dmarc CREATE TABLE report ( serial int(10) unsigned NOT NULL AUTO_INCREMENT, mindate timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, maxdate timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', domain varchar(255) NOT NULL, org varchar(255) NOT NULL, reportid varchar(255) NOT NULL, PRIMARY KEY (serial), UNIQUE KEY domain (domain,reportid) ); -- Use these commands to change the old IPv4 only DMARC table to the new one /*** alter table rptrecord modify ip int(10) unsigned; alter table rptrecord add column ip6 binary(16) after ip; alter table rptrecord add key serial6(serial,ip6); ***/ -- Use these commands to load in the optional IPv6 formatting functions /*** CREATE FUNCTION inet_6top RETURNS STRING SONAME 'mysql_ip6.so'; CREATE FUNCTION inet_pto6 RETURNS STRING SONAME 'mysql_ip6.so'; ***/ CREATE TABLE rptrecord ( serial int(10) unsigned NOT NULL, ip int(10) unsigned, ip6 binary(16), rcount int(10) unsigned NOT NULL, disposition enum('none','quarantine','reject'), reason varchar(255), dkimdomain varchar(255), dkimresult enum('none','pass','fail','neutral','policy','temperror','permerror'), spfdomain varchar(255), spfresult enum('none','neutral','pass','fail','softfail','temperror','permerror'), KEY serial (serial,ip), KEY serial6 (serial,ip6) ) ENGINE=MyISAM; CREATE TABLE failure ( serial int(10) unsigned NOT NULL AUTO_INCREMENT, org varchar(255) NOT NULL, -- reported-domain bouncedomain varchar(255), -- MAIL FROM bouncebox@bouncedomain bouncebox varchar(255), fromdomain varchar(255), -- From: frombox@fromdomain frombox varchar(255), arrival TIMESTAMP, sourceip int unsigned, -- inet_aton(source-ip) sourceip6 BINARY(16), -- inet_6top(source-ip) headers TEXT, PRIMARY KEY(serial), KEY(sourceip), KEY(fromdomain), KEY(bouncedomain) ) charset=utf8; GRANT all on dmarc.* to dmarc identified by 'xxx'; GRANT all on dmarc.* to dmarc@localhost identified by 'xxx'; OpenDMARC-rel-opendmarc-1-4-2/contrib/rddmarc/mysql_ip6.c000066400000000000000000000056061416002254500230630ustar00rootroot00000000000000/* * $Id: mysql_ip6.c,v 1.1 2010/01/25 17:29:14 johnl Exp $ * MySQL library functions for ipv6 conversion * * v6 internal format is 16 byte string or binary * * string = inet_6top(bin16) turn binary address into string rep * bin16 = inet_pto6(string) turn string rep of address into binary * * cc -I/usr/local/include/mysql -fPIC -shared -o mysql_ip6.so mysql_ip6.c */ #include #include #include #include #include #include #include #include #include my_bool inet_6top_init(UDF_INIT *initid, UDF_ARGS *args, char *message); char *inet_6top(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error); my_bool inet_pto6_init(UDF_INIT *initid, UDF_ARGS *args, char *message); char *inet_pto6(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error); /* * INET_6TOP( binary 16 ) -> string */ my_bool inet_6top_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if (args->arg_count != 1 || args->arg_type[0] != STRING_RESULT) { strcpy(message,"INET_6TOP() takes one 16-byte argument"); return 1; } initid->max_length = 40; /* max length of v6 string address */ return 0; } char * inet_6top(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { char *p; if (args->arg_count != 1 || args->arg_type[0] != STRING_RESULT || (args->args[0] && args->lengths[0] != 16) ) { *error = 1; return NULL; } if(!args->args[0]) { /* NULL argument */ *is_null = 1; return NULL; } p = (char *)inet_ntop(AF_INET6, args->args[0], result, 255); /* result buffer is at least that long */ if(!p) { *error = 1; return NULL; } *length = strlen(result); return result; } /* * INET_PTO6( string ) -> binary 16 */ my_bool inet_pto6_init(UDF_INIT *initid, UDF_ARGS *args, char *message) { if (args->arg_count != 1 || args->arg_type[0] != STRING_RESULT) { strcpy(message,"INET_PTO6() takes one string argument"); return 1; } initid->max_length = 16; /* length of v6 address */ return 0; } char * inet_pto6(UDF_INIT *initid, UDF_ARGS *args, char *result, unsigned long *length, char *is_null, char *error) { int i; char buf[256]; if (args->arg_count != 1 || args->arg_type[0] != STRING_RESULT) { *error = 1; return NULL; } if(!args->args[0]) { /* NULL argument */ *is_null = 1; return NULL; } if(args->lengths[0] >= sizeof(buf)) { /* ridiculous argument */ *error = 1; return NULL; } /* need nul terminated string */ strncpy(buf, args->args[0], args->lengths[0]); buf[args->lengths[0]] = 0; i = inet_pton(AF_INET6, buf, result); if(i != 1) { /* bad input */ *is_null = 1; return NULL; } *length = 16; return result; } OpenDMARC-rel-opendmarc-1-4-2/contrib/rddmarc/rddmarc000066400000000000000000000167311416002254500223340ustar00rootroot00000000000000#!/usr/bin/perl # -*- perl -*- # $Header: /home/johnl/hack/dmarc/RCS/rddmarc,v 1.5 2013/05/12 17:08:20 johnl Exp johnl $ # # Script to read DMARC aggregate reports and put summary info # into a database # Options: # -d print debug info # -x read XML files rather than mail messages # -r replace existing report rather than failing # -u database user # -p database password # -n database name # Copyright 2012-2013, Taughannock Networks. All rights reserved. # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS # OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY # WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. use strict; use Getopt::Std; use MIME::Parser; use MIME::Words qw(:all); use XML::Simple; use DBI; use Socket qw{:addrinfo inet_ntop inet_pton AF_INET6 AF_INET}; use PerlIO::gzip; use vars qw{$opt_d $opt_r $opt_x $opt_u $opt_p $opt_n}; getopts('drxu:p:n:'); if (!defined($opt_u)) { $opt_u = "opendmarc"; } if (!defined($opt_p)) { $opt_p = "opendmarc"; } if (!defined($opt_n)) { $opt_n = "opendmarc"; } my $dbh = DBI->connect("DBI:mysql:database=$opt_n", $opt_u, $opt_p) or die "Cannot connect to database\n"; foreach my $i (@ARGV) { my ($zip, $ent, $isgzip); print "parsing $i\n"; if($opt_x) { open(XML, $i) or die "Cannot open XML file $i"; } else { my $parser = new MIME::Parser; $parser->output_dir("/tmp"); $ent = $parser->parse_open($i); my $body = $ent->bodyhandle; $zip = $body; my $mtype = $ent->mime_type; my $subj = decode_mimewords($ent->get('subject')); print " $subj"; # if multipart/whatever, look through the parts to find a ZIP if(lc $mtype =~ "multipart/") { print "Look through $mtype\n"; $zip = undef; my $npart = $ent->parts; for my $n (0..($npart-1)) { my $part = $ent->parts($n); if(lc $part->mime_type eq "application/gzip") { $zip = $part->bodyhandle; $isgzip = 1; last; } elsif(lc $part->mime_type eq "application/zip" or lc $part->mime_type eq "application/x-zip-compressed" or lc $part->mime_type eq "application/octet-stream") { $zip = $part->bodyhandle; last; } else { $part->bodyhandle->purge; # not useful } } die "no zip" unless $zip; } elsif(lc $mtype ne "application/zip") { print "don't understand $mtype\n"; next; } if(defined($zip->path)) { print "body is in " . $zip->path . "\n" if $opt_d; } else { print "body is nowhere\n"; next; } if($isgzip) { open(XML, "<:gzip", $zip->path) or die "cannot ungzip $zip->path"; } else { open(XML,"unzip -p " . $zip->path . " |") or die "cannot unzip $zip->path"; } } my $xml = ""; $xml .= $_ while ; close XML; $ent->purge if $ent; $zip->purge if $zip; my $xs = XML::Simple->new(); print "XML is ======\n$xml\n=====\n" if $opt_d; my $ref = $xs->XMLin($xml); my %xml = %{$ref}; #print join "\n",keys %xml; #print "\n"; my $from = $xml{'report_metadata'}->{'date_range'}->{'begin'}; my $to = $xml{'report_metadata'}->{'date_range'}->{'end'}; my $org = $xml{'report_metadata'}->{'org_name'}; my $id = $xml{'report_metadata'}->{'report_id'}; my $domain = $xml{'policy_published'}->{'domain'}; print "report $org ($id) $from to $to for $domain\n" if $opt_d; # see if already stored my ($xorg, $xid, $serial) = $dbh->selectrow_array(qq{SELECT org,reportid,serial FROM report WHERE reportid=?}, undef, $id); if($xorg) { if($opt_r) { print "Replacing $xorg $xid\n"; $dbh->do(qq{DELETE from rptrecord WHERE serial=?}, undef, $serial) or die "cannot delete old records" . $dbh->errstr; } else { print "Already have $xorg $xid, skipped\n"; next; } } my $sql = qq{INSERT INTO report(serial,mindate,maxdate,domain,org,reportid) VALUES(NULL,FROM_UNIXTIME(?),FROM_UNIXTIME(?),?,?,?)}; $sql = qq{REPLACE INTO report(serial,mindate,maxdate,domain,org,reportid) VALUES('$serial',FROM_UNIXTIME(?),FROM_UNIXTIME(?),?,?,?)} if $xorg; $dbh->do($sql, undef, $from, $to, $domain, $org, $id) or die "cannot make report" . $dbh->errstr; $serial = $dbh->{'mysql_insertid'} || $dbh->{'insertid'} unless $xorg; print " serial $serial "; my $record = $xml{'record'}; sub dorow($$) { my ($serial,$recp) = @_; my %r = %$recp; my $ip = $r{'row'}->{'source_ip'}; my $count = $r{'row'}->{'count'}; my $disp = $r{'row'}->{'policy_evaluated'}->{'disposition'}; print "\nip $ip, count $count, disp $disp" if $opt_d; my ($dkim, $dkimresult, $spf, $spfresult, $reason); my $rp = $r{'auth_results'}->{'dkim'}; printf " rp $rp\n" if $opt_d; if(ref $rp eq "HASH") { $dkim = $rp->{'domain'}; $dkim = undef if ref $dkim eq "HASH"; $dkimresult = $rp->{'result'}; } else { # array # glom sigs together, report first result $dkim = join '/',map { my $d = $_->{'domain'}; ref $d eq "HASH"?"": $d } @$rp; $dkimresult = $rp->[0]->{'result'}; } $rp = $r{'auth_results'}->{'spf'}; if(ref $rp eq "HASH") { $spf = $rp->{'domain'}; $spfresult = $rp->{'result'}; } else { # array # glom domains together, report first result $spf = join '/',map { my $d = $_->{'domain'}; ref $d eq "HASH"? "": $d } @$rp; $spfresult = $rp->[0]->{'result'}; } $rp = $r{'row'}->{'policy_evaluated'}->{'reason'}; if(ref $rp eq "HASH") { $reason = $rp->{'type'}; } else { $reason = join '/',map { $_->{'type'} } @$rp; } #print "ip=$ip, count=$count, disp=$disp, r=$reason,"; #print "dkim=$dkim/$dkimresult, spf=$spf/$spfresult\n"; # figure out if it's IPv4 or IPv6 my ($nip, $iptype, $ipval); if($nip = inet_pton(AF_INET, $ip)) { $ipval = unpack "N", $nip; $iptype = "ip"; } elsif($nip = inet_pton(AF_INET6, $ip)) { $ipval = "X'" . unpack("H*",$nip) . "'"; $iptype = "ip6"; } else { print "??? mystery ip $ip\n"; next; } print "$iptype = $ipval\n" if $opt_d; $dbh->do(qq{INSERT INTO rptrecord(serial,$iptype,rcount,disposition,reason,dkimdomain,dkimresult,spfdomain,spfresult) VALUES(?,$ipval,?,?,?,?,?,?,?)},undef, $serial,$count,$disp,$reason,$dkim,$dkimresult,$spf,$spfresult) or die "cannot insert record " . $dbh->{'mysql_error'}; } # dorow if(ref $record eq "HASH") { print "single record\n"; dorow($serial,$record); } elsif(ref $record eq "ARRAY") { print "multi record\n"; foreach my $row (@$record) { dorow($serial,$row); } } else { print "mystery type " . ref($record) . "\n"; } } OpenDMARC-rel-opendmarc-1-4-2/contrib/service/000077500000000000000000000000001416002254500210115ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/contrib/service/.gitignore000066400000000000000000000000221416002254500227730ustar00rootroot00000000000000opendmarc.service OpenDMARC-rel-opendmarc-1-4-2/contrib/service/Makefile.am000066400000000000000000000002521416002254500230440ustar00rootroot00000000000000# Copyright (c) 2015, The Trusted Domain Project. All rights reserved. AUTOMAKE_OPTIONS = foreign dist_doc_DATA = opendmarc.service.in EXTRA_DIST = opendmarc.service OpenDMARC-rel-opendmarc-1-4-2/contrib/service/opendmarc.service.in000066400000000000000000000010601416002254500247450ustar00rootroot00000000000000[Unit] Description=Domain-based Message Authentication, Reporting & Conformance (DMARC) Milter Documentation=man:opendmarc(8) man:opendmarc.conf(5) man:opendmarc-import(8) man:opendmarc-reports(8) http://www.trusteddomain.org/opendmarc/ After=network.target nss-lookup.target syslog.target [Service] Type=forking PIDFile=@localstatedir@/run/opendmarc/opendmarc.pid EnvironmentFile=-@sysconfdir@/sysconfig/opendmarc ExecStart=@sbindir@/opendmarc $OPTIONS ExecReload=/bin/kill -USR1 $MAINPID User=opendmarc Group=opendmarc [Install] WantedBy=multi-user.target OpenDMARC-rel-opendmarc-1-4-2/contrib/spec/000077500000000000000000000000001416002254500203035ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/contrib/spec/.gitignore000066400000000000000000000000171416002254500222710ustar00rootroot00000000000000opendmarc.spec OpenDMARC-rel-opendmarc-1-4-2/contrib/spec/Makefile.am000066400000000000000000000002461416002254500223410ustar00rootroot00000000000000# Copyright (c) 2012, The Trusted Domain Project. All rights reserved. # AUTOMAKE_OPTIONS = foreign dist_doc_DATA = opendmarc.spec.in EXTRA_DIST = opendmarc.spec OpenDMARC-rel-opendmarc-1-4-2/contrib/spec/opendmarc.spec.in000066400000000000000000000100471416002254500235360ustar00rootroot00000000000000# Pass --define "BETA 3" to build name-version.0.Beta3.1.arch %define BetaTag %{?BETA:.Beta%{BETA}} Summary: DMARC milter and library Name: opendmarc Version: @VERSION@ Release: %{?BETA:0%{BetaTag}.}1%{?dist} License: BSD and Sendmail URL: http://http://www.trusteddomain.org/opendmarc.html Group: System Environment/Daemons Requires: lib%{name} = %{version}-%{release} Requires (pre): shadow-utils Requires (post): chkconfig Requires (preun): chkconfig, initscripts Requires (postun): initscripts BuildRequires: sendmail-devel, openssl-devel, libtool, pkgconfig BuildRequires: mysql-devel Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}%{BetaTag}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) %description OpenDMARC (Domain-based Message Authentication, Reporting & Conformance) provides an open source library that implements the DMARC verification service plus a milter-based filter application that can plug in to any milter-aware MTA, including sendmail, Postfix, or any other MTA that supports the milter protocol. The DMARC sender authentication system is still a draft standard, working towards RFC status. %package -n libopendmarc Summary: An open source DMARC library Group: System Environment/Libraries %description -n libopendmarc This package contains the library files required for running services built using libopendmarc. %package -n libopendmarc-devel Summary: Development files for libopendmarc Group: Development/Libraries Requires: libopendmarc = %{version}-%{release} %description -n libopendmarc-devel This package contains the static libraries, headers, and other support files required for developing applications against libopendmarc. %prep %setup -q %build # Always use system libtool instead of opendkim provided one %global LIBTOOL LIBTOOL=`which libtool` %configure make DESTDIR=%{buildroot} %{?_smp_mflags} %{LIBTOOL} %install rm -rf %{buildroot} make DESTDIR=%{buildroot} install %{?_smp_mflags} %{LIBTOOL} mkdir -p %{buildroot}%{_sysconfdir} mkdir -p %{buildroot}%{_initrddir} install -m 0755 contrib/init/redhat/%{name} %{buildroot}%{_initrddir}/%{name} install -m 0755 opendmarc/%{name}.conf.sample %{buildroot}%{_sysconfdir}/%{name}.conf perl -pi -e 's|^# (HistoryFile /var/run)/(opendmarc.dat)|$1/opendmarc/$2|; s|^# (Socket )|$1|; s|^# (UserID )|$1|; ' %{buildroot}%{_sysconfdir}/%{name}.conf install -p -d %{buildroot}%{_sysconfdir}/tmpfiles.d cat > %{buildroot}%{_sysconfdir}/tmpfiles.d/%{name}.conf </dev/null || groupadd -r %{name} getent passwd %{name} >/dev/null || \ useradd -r -g %{name} -G mail -d %{_localstatedir}/run/%{name} -s /sbin/nologin \ -c "OpenDMARC Milter" %{name} exit 0 %post /sbin/chkconfig --add %{name} || : %post -n libopendmarc -p /sbin/ldconfig %preun if [ $1 -eq 0 ]; then service %{name} stop >/dev/null || : /sbin/chkconfig --del %{name} || : fi exit 0 %postun if [ "$1" -ge "1" ] ; then /sbin/service %{name} condrestart >/dev/null 2>&1 || : fi exit 0 %postun -n libopendmarc -p /sbin/ldconfig %clean rm -rf %{buildroot} %files %defattr(-,root,root) %doc INSTALL README RELEASE_NOTES %doc db/README.schema db/schema.mysql %config(noreplace) %{_sysconfdir}/%{name}.conf %config(noreplace) %{_sysconfdir}/tmpfiles.d/%{name}.conf %{_initrddir}/%{name} %{_sbindir}/* %{_mandir}/*/* %dir %attr(-,%{name},%{name}) %{_localstatedir}/spool/%{name} %dir %attr(-,%{name},%{name}) %{_localstatedir}/run/%{name} %files -n libopendmarc %defattr(-,root,root) %{_libdir}/libopendmarc.so.* %files -n libopendmarc-devel %defattr(-,root,root) %doc libopendmarc/docs/*.html %{_includedir}/%{name} %{_libdir}/*.so OpenDMARC-rel-opendmarc-1-4-2/copyright-check000077500000000000000000000005741416002254500207300ustar00rootroot00000000000000#!/bin/sh # # Copyright (c) 2011, 2012, The Trusted Domain Project. All rights reserved. # YEAR=`date +%Y` LASTYEAR=$(($YEAR - 1)) for i in `git diff develop --name-only @{$LASTYEAR-12-31} | fgrep -v .jpg | fgrep -v contrib/ | fgrep -v docs/` do if test -f $i then if grep -q Copyright $i then if ! grep -q Copyright.\*$YEAR $i then echo $i fi fi fi done OpenDMARC-rel-opendmarc-1-4-2/db/000077500000000000000000000000001416002254500162765ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/db/Makefile.am000066400000000000000000000001641416002254500203330ustar00rootroot00000000000000# Copyright (c) 2012, The Trusted Domain Project. All rights reserved. dist_doc_DATA = README.schema schema.mysql OpenDMARC-rel-opendmarc-1-4-2/db/README.schema000066400000000000000000000037011416002254500204160ustar00rootroot00000000000000This directory contains the OpenDMARC schema plus any related files. The tables in this schema are populated by the opendmarc filter as it processes messages and downloads policies. The rows are then consumed by the scripts in the "reports" directory to generate regular aggregate reports. The tables are summarized here: domains A table that maps domain names to unique integer IDs. Automatically tracks a "first seen" timestamp, and includes a column to record when the last report was sent. selectors A table that maps selector names to unique integer IDs. Automatically tracks a "first seen" timestamp. Also references the foreign key (into the domains table) for the domain that owns the selector. reporters A table mapping reporting hosts to unique integer IDs. Intended for use by multi-MX systems so it's possible to tell where an inbound message landed. ipaddr A table mapping IP addresses (as strings) to unique IDs. Also tracks the "first seen" timestamp for each. messages A table tracking salient properties of all messages received. A messages is uniquely identified by a {date, jobid, reporter} tuple. Includes references to the "domains" table to track the RFC5321.MailFrom domain, the RFC5322.From domain. Also records the count of DKIM signatures, the SPF result, and whether or not the SPF result was aligned with the RFC5322.From domain. signatures A table tracking DKIM signatures, each of which refers to a row in the "messages" table. Tracks the signing domain, whether the signature passed, whether there was a verification error other than a broken signature, and whether or not the signing domain aligned with the RFC5322.From domain. requests A table containing a cache of DMARC reporting requests. For each domain, the destination reporting URI for aggregate reports is recorded along with a "last report sent" timestamp. -- Copyright (c) 2012, 2018, The Trusted Domain Project. All rights reserved. OpenDMARC-rel-opendmarc-1-4-2/db/schema.mysql000066400000000000000000000070311416002254500206260ustar00rootroot00000000000000-- OpenDMARC database schema -- -- Copyright (c) 2012, 2016, 2018, 2021, The Trusted Domain Project. -- All rights reserved. CREATE DATABASE IF NOT EXISTS opendmarc; USE opendmarc; -- A table for mapping domain names and their DMARC policies to IDs CREATE TABLE IF NOT EXISTS domains ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, firstseen TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id), UNIQUE KEY(name) ); -- A table for logging encountered ARC selectors CREATE TABLE IF NOT EXISTS selectors ( id INT NOT NULL AUTO_INCREMENT, domain INT NOT NULL, name VARCHAR(255) NOT NULL, firstseen TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id), KEY(name), UNIQUE KEY(name, domain) ); -- A table for logging ARC-Authentication-Results information CREATE TABLE IF NOT EXISTS arcauthresults ( id INT NOT NULL AUTO_INCREMENT, message INT UNSIGNED NOT NULL, instance INT UNSIGNED NOT NULL, arc_client_addr VARCHAR(64) NOT NULL DEFAULT '', PRIMARY KEY(id), KEY(message), UNIQUE KEY(message, instance) ); -- A table for logging ARC-Seal information CREATE TABLE IF NOT EXISTS arcseals ( id INT NOT NULL AUTO_INCREMENT, message INT UNSIGNED NOT NULL, domain INT UNSIGNED NOT NULL, selector INT UNSIGNED NOT NULL, instance INT UNSIGNED NOT NULL, firstseen TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id), KEY(message), UNIQUE KEY(message, domain, selector, instance) ); -- A table for logging reporting requests CREATE TABLE IF NOT EXISTS requests ( id INT NOT NULL AUTO_INCREMENT, domain INT NOT NULL, repuri VARCHAR(255) NOT NULL DEFAULT '', adkim TINYINT NOT NULL DEFAULT '0', aspf TINYINT NOT NULL DEFAULT '0', policy TINYINT NOT NULL DEFAULT '0', spolicy TINYINT NOT NULL DEFAULT '0', pct TINYINT NOT NULL DEFAULT '0', locked TINYINT NOT NULL DEFAULT '0', firstseen TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, lastsent TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00', PRIMARY KEY(id), KEY(lastsent), UNIQUE KEY(domain) ); -- A table for reporting hosts CREATE TABLE IF NOT EXISTS reporters ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, firstseen TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id), UNIQUE KEY(name) ); -- A table for connecting client IP addresses CREATE TABLE IF NOT EXISTS ipaddr ( id INT NOT NULL AUTO_INCREMENT, addr VARCHAR(64) NOT NULL, firstseen TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY(id), UNIQUE KEY(addr) ); -- A table for messages CREATE TABLE IF NOT EXISTS messages ( id INT NOT NULL AUTO_INCREMENT, date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, jobid VARCHAR(128) NOT NULL, reporter INT UNSIGNED NOT NULL, policy TINYINT UNSIGNED NOT NULL, disp TINYINT UNSIGNED NOT NULL, ip INT UNSIGNED NOT NULL, env_domain INT UNSIGNED NOT NULL, from_domain INT UNSIGNED NOT NULL, policy_domain INT UNSIGNED NOT NULL, spf TINYINT NOT NULL, align_dkim TINYINT UNSIGNED NOT NULL, align_spf TINYINT UNSIGNED NOT NULL, sigcount TINYINT UNSIGNED NOT NULL, arc TINYINT UNSIGNED NOT NULL, arc_policy TINYINT UNSIGNED NOT NULL, PRIMARY KEY(id), KEY(date), UNIQUE KEY(reporter, date, jobid) ); -- A table for signatures CREATE TABLE IF NOT EXISTS signatures ( id INT NOT NULL AUTO_INCREMENT, message INT UNSIGNED NOT NULL, domain INT UNSIGNED NOT NULL, selector INT UNSIGNED NOT NULL, pass TINYINT UNSIGNED NOT NULL, error TINYINT UNSIGNED NOT NULL, PRIMARY KEY(id), KEY(message) ); -- CREATE USER 'opendmarc'@'localhost' IDENTIFIED BY 'changeme'; -- GRANT ALL ON opendmarc.* to 'opendmarc'@'localhost'; OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/000077500000000000000000000000001416002254500203505ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/.gitignore000066400000000000000000000001511416002254500223350ustar00rootroot00000000000000THOUGHTS TODO .deps .libs Makefile Makefile.in libopendmarc.la libopendmarc.a libtool tags *.o *.lo core OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/Makefile.am000066400000000000000000000011621416002254500224040ustar00rootroot00000000000000SUBDIRS=tests docs AM_CPPFLAGS = -I. -I.. LDADD = ./libopendmarc.la lib_LTLIBRARIES = libopendmarc.la libopendmarc_la_SOURCES = dmarc.h \ opendmarc_dns.c \ opendmarc_xml.c \ opendmarc_tld.c \ opendmarc_policy.c \ opendmarc_util.c \ opendmarc_hash.c \ opendmarc_strl.c \ opendmarc_strl.h \ opendmarc_spf.c \ opendmarc_spf_dns.c \ opendmarc_internal.h libopendmarc_la_LDFLAGS = -version-info $(LIBOPENDMARC_VERSION_INFO) libopendmarc_includedir = $(includedir)/opendmarc libopendmarc_include_HEADERS = dmarc.h OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/dmarc.h000066400000000000000000000172771416002254500216250ustar00rootroot00000000000000/* ** Copyright (c) 2012-2016, 2018, 2021, The Trusted Domain Project. ** All rights reserved. */ #ifndef DMARC_H #define DMARC_H #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #include #include #include #include #include #define OPENDMARC_LIB_VERSION 0x00000000 #define DMARC_MAXHOSTNAMELEN (256) # define DMARC_POLICY_IP_TYPE_IPV4 (4) # define DMARC_POLICY_IP_TYPE_IPV6 (6) # define DMARC_POLICY_SPF_ORIGIN_MAILFROM (1) # define DMARC_POLICY_SPF_ORIGIN_HELO (2) # define DMARC_POLICY_SPF_OUTCOME_NONE (0) # define DMARC_POLICY_SPF_OUTCOME_PASS (1) # define DMARC_POLICY_SPF_OUTCOME_FAIL (2) # define DMARC_POLICY_SPF_OUTCOME_TMPFAIL (3) # define DMARC_POLICY_SPF_ALIGNMENT_PASS (4) # define DMARC_POLICY_SPF_ALIGNMENT_FAIL (5) # define DMARC_POLICY_DKIM_OUTCOME_NONE (0) # define DMARC_POLICY_DKIM_OUTCOME_PASS (1) # define DMARC_POLICY_DKIM_OUTCOME_FAIL (2) # define DMARC_POLICY_DKIM_OUTCOME_TMPFAIL (3) # define DMARC_POLICY_DKIM_ALIGNMENT_PASS (4) # define DMARC_POLICY_DKIM_ALIGNMENT_FAIL (5) #define DMARC_RECORD_A_UNSPECIFIED ('\0') /* adkim and aspf */ #define DMARC_RECORD_A_STRICT ('s') /* adkim and aspf */ #define DMARC_RECORD_A_RELAXED ('r') /* adkim and aspf */ #define DMARC_RECORD_P_UNSPECIFIED ('\0') /* p and sp */ #define DMARC_RECORD_P_NONE ('n') /* p and sp */ #define DMARC_RECORD_P_QUARANTINE ('q') /* p and sp */ #define DMARC_RECORD_P_REJECT ('r') /* p and sp */ #define DMARC_RECORD_RF_UNSPECIFIED (0x0) /* rf, a bitmap */ #define DMARC_RECORD_RF_AFRF (0x1) /* rf, a bitmap */ #define DMARC_RECORD_RF_IODEF (0x2) /* rf, a bitmap */ #define DMARC_RECORD_FO_UNSPECIFIED (0x0) /* fo, a bitmap */ #define DMARC_RECORD_FO_0 (0x1) /* fo, a bitmap */ #define DMARC_RECORD_FO_1 (0x2) /* fo, a bitmap */ #define DMARC_RECORD_FO_D (0x4) /* fo, a bitmap */ #define DMARC_RECORD_FO_S (0x8) /* fo, a bitmap */ #define DMARC_PARSE_OKAY (0) /* Okay to continue */ #define DMARC_PARSE_ERROR_EMPTY (1) /* Nothing to parse */ #define DMARC_PARSE_ERROR_NULL_CTX (2) /* Got a NULL context */ #define DMARC_PARSE_ERROR_BAD_VERSION (3) /* Such as v=DBOB1 */ #define DMARC_PARSE_ERROR_BAD_VALUE (4) /* Bad token value like p=bob */ #define DMARC_PARSE_ERROR_NO_REQUIRED_P (5) /* Required p= missing */ #define DMARC_PARSE_ERROR_NO_DOMAIN (6) /* No domain, e.g. <> */ #define DMARC_PARSE_ERROR_NO_ALLOC (7) /* Memory Allocation Faliure */ #define DMARC_PARSE_ERROR_BAD_SPF_MACRO (8) /* Was not a macro from above */ #define DMARC_PARSE_ERROR_BAD_DKIM_MACRO DMARC_PARSE_ERROR_BAD_SPF_MACRO #define DMARC_DNS_ERROR_NO_RECORD (9) /* No DMARC record was found */ #define DMARC_DNS_ERROR_NXDOMAIN (10) /* No such domain exists */ #define DMARC_DNS_ERROR_TMPERR (11) /* Recoverable DNS error */ #define DMARC_TLD_ERROR_UNKNOWN (12) /* Undefined TLD type */ #define DMARC_FROM_DOMAIN_ABSENT (13) /* No From: domain was supplied */ #define DMARC_POLICY_ABSENT (14) /* Policy up to you. No DMARC record found */ #define DMARC_POLICY_PASS (15) /* Policy OK so accept message */ #define DMARC_POLICY_REJECT (16) /* Policy says to reject message */ #define DMARC_POLICY_QUARANTINE (17) /* Policy says to quarantine message */ #define DMARC_POLICY_NONE (18) /* Policy says to monitor and report */ #define DMARC_USED_POLICY_IS_P (19) /* Domain policy taken (aka 'p')*/ #define DMARC_USED_POLICY_IS_SP (20) /* Sub-domain policy taken (aka 'sp')*/ #ifndef OPENDMARC_POLICY_C typedef struct dmarc_policy_t DMARC_POLICY_T; #endif #define OPENDMARC_STATUS_T int #ifndef MAXPATHLEN # define MAXPATHLEN (2048) #endif #ifndef MAXNS # define MAXNS (3) #endif #define OPENDMARC_MAX_NSADDRLIST (8) typedef struct { int tld_type; u_char tld_source_file[MAXPATHLEN]; int nscount; struct sockaddr_in nsaddr_list[MAXNS]; } OPENDMARC_LIB_T; #define OPENDMARC_TLD_TYPE_NONE (0) /* Will not use a tld file */ #define OPENDMARC_TLD_TYPE_MOZILLA (1) /* mozilla.org effective_tld_names.dat */ /* * Library one time initialization. */ OPENDMARC_STATUS_T opendmarc_policy_library_init(OPENDMARC_LIB_T *lib_init); OPENDMARC_STATUS_T opendmarc_policy_library_shutdown(OPENDMARC_LIB_T *lib_init); /* * Context management. */ DMARC_POLICY_T * opendmarc_policy_connect_init(u_char *ip_addr, int ip_type); DMARC_POLICY_T * opendmarc_policy_connect_clear(DMARC_POLICY_T *pctx); DMARC_POLICY_T * opendmarc_policy_connect_rset(DMARC_POLICY_T *pctx); DMARC_POLICY_T * opendmarc_policy_connect_shutdown(DMARC_POLICY_T *pctx); /* * Store information routines. */ OPENDMARC_STATUS_T opendmarc_policy_store_from_domain(DMARC_POLICY_T *pctx, u_char *domain); OPENDMARC_STATUS_T opendmarc_policy_store_dkim(DMARC_POLICY_T *pctx, u_char *domain, u_char *selector, int result, u_char *human_result); OPENDMARC_STATUS_T opendmarc_policy_store_spf(DMARC_POLICY_T *pctx, u_char *domain, int result, int origin, u_char *human_result); /* * The DMARC record itself. */ OPENDMARC_STATUS_T opendmarc_policy_query_dmarc(DMARC_POLICY_T *pctx, u_char *domain); OPENDMARC_STATUS_T opendmarc_policy_parse_dmarc(DMARC_POLICY_T *pctx, u_char *domain, u_char *record); OPENDMARC_STATUS_T opendmarc_policy_store_dmarc(DMARC_POLICY_T *pctx, u_char *dmarc_record, u_char *domain, u_char *organizationaldomain); /* * Access to parts of the DMARC record. */ OPENDMARC_STATUS_T opendmarc_get_policy_to_enforce(DMARC_POLICY_T *pctx); OPENDMARC_STATUS_T opendmarc_policy_fetch_alignment(DMARC_POLICY_T *pctx, int *dkim_alignment, int *spf_alignment); OPENDMARC_STATUS_T opendmarc_policy_fetch_pct(DMARC_POLICY_T *pctx, int *pctp); OPENDMARC_STATUS_T opendmarc_policy_fetch_adkim(DMARC_POLICY_T *pctx, int *adkim); OPENDMARC_STATUS_T opendmarc_policy_fetch_aspf(DMARC_POLICY_T *pctx, int *aspf); OPENDMARC_STATUS_T opendmarc_policy_fetch_p(DMARC_POLICY_T *pctx, int *p); OPENDMARC_STATUS_T opendmarc_policy_fetch_sp(DMARC_POLICY_T *pctx, int *sp); u_char ** opendmarc_policy_fetch_rua(DMARC_POLICY_T *pctx, u_char *list_buf, size_t size_of_buf, int constant); u_char ** opendmarc_policy_fetch_ruf(DMARC_POLICY_T *pctx, u_char *list_buf, size_t size_of_buf, int constant); OPENDMARC_STATUS_T opendmarc_policy_fetch_utilized_domain(DMARC_POLICY_T *pctx, u_char *buf, size_t buflen); OPENDMARC_STATUS_T opendmarc_policy_fetch_from_domain(DMARC_POLICY_T *pctx, u_char *buf, size_t buflen); OPENDMARC_STATUS_T opendmarc_policy_query_dmarc_xdomain(DMARC_POLICY_T *pctx, u_char *uri); OPENDMARC_STATUS_T opendmarc_get_policy_token_used(DMARC_POLICY_T *pctx); /* * TLD processing */ int opendmarc_tld_read_file(char *path_fname, char *commentstring, char *drop, char *except); void opendmarc_tld_shutdown(void); /* * XML Parsing */ u_char ** opendmarc_xml(char *b, size_t blen, char *e, size_t elen); u_char ** opendmarc_xml_parse(char *fname, char *err_buf, size_t err_len); /* * Utility routines */ void opendmarc_dns_fake_record(const char *name, const char *answer); u_char ** opendmarc_util_clearargv(u_char **ary); const char * opendmarc_policy_status_to_str(OPENDMARC_STATUS_T status); int opendmarc_policy_check_alignment(u_char *subdomain, u_char *tld, int mode); int opendmarc_policy_to_buf(DMARC_POLICY_T *pctx, char *buf, size_t buflen); /* * SPF Processing */ int opendmarc_spf_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int soft_fail_as_pass, char *human_readable, size_t human_readable_len, int *use_mailfrom); int opendmarc_spf2_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int softfail_okay_flag, char *human_readable, size_t human_readable_len, int *used_mfrom); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* DMARC_H */ OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/000077500000000000000000000000001416002254500213005ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/Makefile.am000066400000000000000000000024231416002254500233350ustar00rootroot00000000000000dist_doc_DATA = index.html \ dmarc_policy_t.html \ opendmarc_dns_fake_record.html \ opendmarc_get_policy_to_enforce.html \ opendmarc_lib_t.html \ opendmarc_policy_connect_clear.html \ opendmarc_policy_connect_init.html \ opendmarc_policy_connect_rset.html \ opendmarc_policy_connect_shutdown.html \ opendmarc_policy_fetch_adkim.html \ opendmarc_policy_fetch_alignment.html \ opendmarc_policy_fetch_aspf.html \ opendmarc_policy_fetch_fo.html \ opendmarc_policy_fetch_p.html \ opendmarc_policy_fetch_pct.html \ opendmarc_policy_fetch_rf.html \ opendmarc_policy_fetch_rua.html \ opendmarc_policy_fetch_ruf.html \ opendmarc_policy_fetch_sp.html \ opendmarc_policy_fetch_utilized_domain.html \ opendmarc_policy_library_init.html \ opendmarc_policy_library_shutdown.html \ opendmarc_policy_parse_dmarc.html \ opendmarc_policy_query_dmarc.html \ opendmarc_policy_status_to_str.html \ opendmarc_policy_store_dkim.html \ opendmarc_policy_store_dmarc.html \ opendmarc_policy_store_from_domain.html \ opendmarc_policy_store_spf.html \ opendmarc_policy_to_buf.html \ opendmarc_spf_test.html \ opendmarc_status_t.html \ opendmarc_tld_read_file.html \ opendmarc_tld_shutdown.html \ opendmarc_util_clearargv.html \ opendmarc_xml.html \ opendmarc_xml_parse.html \ overview.html OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/dmarc_policy_t.html000066400000000000000000000043631416002254500251640ustar00rootroot00000000000000 DMARC_POLICY_T

DMARC_POLICY_T

[back to index]

DESCRIPTION
Purpose The DMARC_POLICY_T is an opaque structure used to communicate on a per message basis with the library. It is to enter information into policy and to receive information from policy.
Synopsis
#include <dmarc.h>

DMARC_POLICY_T *pctx;

DMARC_POLICY_T This opaque data type must be initialized using opendmarc_policy_connect_init() and later freed using opendmarc_policy_connect_shutdown().

In generally you may initialize it when the connection is first accepted and keep it active until the remote client disconnects. If there are multiple envelopes per envelope, you may call opendmarc_policy_connect_rset() to reset the opaque structure for re-use with the next message.

Usage Each connection from a client to your SMTP server will require its own DMARC_POLICY_T pointer. Be certain to free this structure by calling when the connection is discontinued to avoid a memory leak.
NOTES
  • DMARC_POLICY_T is thread safe provided it is not used concurrently by two or more threads. There should be a minimum of one DMARC_POLICY_T pointer per thread.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/index.html000066400000000000000000000212531416002254500233000ustar00rootroot00000000000000 OpenDMARC Library (libopendmarc)

OpenDMARC Library (libopendmarc)

Introduction

DMARC stands for "Domain-based Message Authentication, Reporting & Conformance". It is a technical specification created by a group of organizations to help reduce the potential for email-based abuse by solving long-standing operational, deployment, and reporting issues related to the existing email authentication protocols of DKIM and SPF. More information about DMARC can be found at the dmarc.org website.

This API (libopendmarc) at its current release, allows an application to look up DMARC records and to apply policy to application supplied DKIM and SPF results. An implementation of a filter, using Sendmail's milter package, uses this libopendmarc library.

Data Types

Data Type Description
OPENDMARC_LIB_T The structure used to initialize the library at startup
DMARC_POLICY_T The context used per in-bound envelope.
OPENDMARC_STATUS_T The type returned by many library functions.

Functions

Function Description
Program Startup/Shutdown
opendmarc_policy_library_init() Initialize the library on program startup.
opendmarc_policy_library_shutdown() Shut down the library to free resources.
Per-Envelope Context Functions
opendmarc_policy_connect_init() Allocate a new context for an in-bound envelope.
opendmarc_policy_connect_clear() Clears (zeros) a context for reuse.
opendmarc_policy_connect_rset() Partially clears the context as part of an SMTP RSET.
opendmarc_policy_connect_shutdown() Deallocate and free a context to conclude its use.
Information Storage Functions
opendmarc_policy_store_from_domain() Give the policy processor the From: header's domain.
opendmarc_policy_store_dkim() Give the policy processor the results of DKIM processing.
opendmarc_policy_store_spf() Give the policy processor the results of SPF processing.
DMARC Record Functions
opendmarc_policy_query_dmarc() DNS lookup a DMARC record and parse it.
opendmarc_policy_parse_dmarc() Parse a user supplied DMARC record.
opendmarc_policy_store_dmarc() The user process looked up the DMARC record and provides it to the library in one gulp.
DMARC Result Functions
opendmarc_get_policy_to_enforce() Returns the policy for the MTA to enforce.
opendmarc_policy_fetch_pct() Fetch the value of the pct= DMARC setting to determine sampling rate.
opendmarc_policy_fetch_adkim() Fetch the value of the adkim= DMARC setting to determine alignment policy.
opendmarc_policy_fetch_aspf() Fetch the value of the aspf= DMARC setting to determine alignment policy.
opendmarc_policy_fetch_p() Fetch the value of the p= DMARC setting to determine desired policy.
opendmarc_policy_fetch_sp() Fetch the value of the sp= DMARC setting to determine desired subdomain policy.
opendmarc_policy_fetch_rua() Fetch a list of the rua= DMARC URI stating where to send reports.
opendmarc_policy_fetch_ruf() Fetch a list of the ruf= DMARC URI stating where to send failed messages notifications.
opendmarc_policy_fetch_fo() Fetch a bitmap that shows how/when that RUF reports should be sent.
opendmarc_policy_fetch_rf() Fetch a bitmap that shows which format (arfrf versus iodef) should be used.
opendmarc_policy_fetch_alignment() Fetch the result of SPF and DKIM alignment checks.
opendmarc_policy_fetch_utilized_domain() Fetch the domain that was used to find the DMARC record.
TLD Functions
opendmarc_tld_read_file() Read and re-read a TLD file for library use. (See also opendmarc_policy_library_init())
opendmarc_tld_shutdown() Deallocate the cached TLD information as part of program shutdown.
XML File Functions
opendmarc_xml() Parse an XML Report file that was read into a memory buffer and produce CSV output.
opendmarc_xml_parse() Read an XML Report file from disk and parse it into CSV output.
SPF Checking Functions
opendmarc_spf_test() Look up an SPF record and determine if it is a pass or fail.
Handy Utility Functions
opendmarc_dns_fake_record() Hard-code some DNS replies. Intended for use during unit tests.
opendmarc_util_clearargv() Free a NULL terminated array of strings.
opendmarc_policy_status_to_str() Fetch a human readable string correspoding to a OPENDMARC_STATUS_T value returned by a function.
opendmarc_policy_to_buf() Fetch a human readable copy of the opaque DMARC_POLICY_T into a text buffer.


Copyright (c) 2012, 2014, 2021 The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_dns_fake_record.html000066400000000000000000000031341416002254500273270ustar00rootroot00000000000000 opendmarc_dns_fake_record()

opendmarc_dns_fake_record()

[back to index]

SYNOPSIS
#include <dmarc.h>
voidopendmarc_dns_fake_record(
	char *name,
	char *answer
);
Updates a list of hard-coded DNS replies. Intended for by unit tests.
DESCRIPTION
Called When opendmarc_dns_fake_record() may be called at any time.
ARGUMENTS
ArgumentDescription
name The name of a DNS TXT record whose response should be hard-coded.
answer The content that should be returned in place of live content for the named record.
RETURN VALUES
  • None.

Copyright (c) 2013, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_get_policy_to_enforce.html000066400000000000000000000056511416002254500305660ustar00rootroot00000000000000 opendmarc_get_policy_to_enforce()

opendmarc_get_policy_to_enforce()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_get_policy_to_enforce(
	DMARC_POLICY_T *pctx
);
Query the library to find the policy to follow.
DESCRIPTION
Called When opendmarc_get_policy_to_enforce() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
RETURN VALUES
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a pctx value that was NULL.
  • DMARC_POLICY_ABSENT -- No DMARC record was found.
  • DMARC_FROM_DOMAIN_ABSENT -- No From: domain was ever supplied to look up.
  • DMARC_POLICY_NONE -- Accept (only if other policy allows)
  • DMARC_POLICY_REJECT -- Policy advises to reject the message.
  • DMARC_POLICY_QUARANTINE -- Policy advises to quarantine the message.
  • DMARC_POLICY_PASS -- Policy advises to accept the message
NOTES
  • Call this function only after a DMARC record was fetched and parsed with opendmarc_policy_query_dmarc() or supplied to the library with opendmarc_policy_store_dmarc().
  • The "pct" value of the DMARC policy record is not applied by this function. That is, the applicable policy is always returned, and the caller must apply the semantics requested by a "pct" value other than 100.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_lib_t.html000066400000000000000000000063461416002254500253200ustar00rootroot00000000000000 OPENDMARC_LIB_T

OPENDMARC_LIB_T

[back to index]

DESCRIPTION
Purpose The OPENDMARC_LIB_T is used to pass startup information into the library. It is designed to require that nothing inside it needs to ever be allocated nor freed.
Synopsis
#include <dmarc.h>

OPENDMARC_LIB_T lib;

OPENDMARC_LIB_T The items inside the OPENDMARC_LIB_T structure, and their legal values are:

int tld_type

Can be assigned one of two possible values:
  • OPENDMARC_TLD_TYPE_NONE -- If you do not want to use any TLD file to resolve the organizational domain
  • OPENDMARC_TLD_TYPE_MOZILLA -- If you will supply a current version of the effective_tld_names.dat file from https://publicsuffixlist.org (formerly mozilla.org).
u_char tld_source_file[MAXPATHLEN]
The full or relative path to the TLD file to parse and use.

NOTE:
If and only if your resolver library lacks the res_setservers() interface, the following hooks are avaliable as a substitute.

int nscount

If you want the dmarc records looked up by other than the name servers listed in /etc/resolv.conf and your resolver library lacks the res_setservers() interface. This is the count of the number of entries in nsaddr_list.
struct sockaddr_in nsaddr_list[MAXNS]
If your resolver library lacks the res_setservers() interface, this is an array of IP addresses of name servers to use converted to the type struct sockaddr_in.
Usage When your program first starts to run, it should pass a pointer to this OPENDMARC_LIB_T structure to the opendmarc_policy_library_init function, and when your program finally shuts down, it should pass a pointer to this OPENDMARC_LIB_T structure to the opendmarc_policy_library_shutdown function.
NOTES
  • OPENDMARC_LIB_T is not thread safe. It must only be used once from inside the main thread for startup and shutdown purposes. Multiple threads must not independently attempt to start/stop the library with separate settings.

Copyright (c) 2012, 2021 The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_connect_clear.html000066400000000000000000000043031416002254500303740ustar00rootroot00000000000000 opendmarc_policy_connect_clear()

opendmarc_policy_connect_clear()

[back to index]

SYNOPSIS
#include <dmarc.h>
DMARC_POLICY_T * opendmarc_policy_connect_clear(
	DMARC_POLICY_T * pctx
);
Clears an already allocated opaque context to all NULLs and zeros. This is appropriate for a program that wishes to preallocate a fixed number of opaque contexts and to clear and reuse them as needed.
DESCRIPTION
Called When opendmarc_policy_connect_clear() may be called anytime you want to completely clear an opaque context.
ARGUMENTS
ArgumentDescription
pctx A pointer to type DMARC_POLICY_T.
RETURN VALUES
  • DMARC_POLICY_T * -- on success
  • NULL -- Only if the pointer passed into it is NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_connect_init.html000066400000000000000000000046651416002254500302640ustar00rootroot00000000000000 opendmarc_policy_connect_init()

opendmarc_policy_connect_init()

[back to index]

SYNOPSIS
#include <dmarc.h>
DMARC_POLICY_T * opendmarc_policy_connect_init(
	u_char *ip_addr, int is_ipv6
);
Start processing a connection by fetching a pointer of type DMARC_POLICY_T. Pre-fill the opaque structure behind that pointer with the connecting IP address and whether or not it is an IPv6 address.
DESCRIPTION
Called When opendmarc_policy_connect_init() may be called after the initial client connection, but before you use any of the library routines that require the DMARC_POLICY_T pointer type as input.
ARGUMENTS
ArgumentDescription
ip_addr A string containing the IP address of the connecting client.
is_ipv6 An integer of value 0 if the address in ip_addr is an IPv4 address. Or the value non-zero if the address in ip_addr is an IPv6 address.
RETURN VALUES
NOTES
  • If this function returns NULL it means that no more memory could be allocated.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_connect_rset.html000066400000000000000000000043531416002254500302700ustar00rootroot00000000000000 opendmarc_policy_connect_rset()

opendmarc_policy_connect_rset()

[back to index]

SYNOPSIS
#include <dmarc.h>
DMARC_POLICY_T * opendmarc_policy_connect_rset(
	DMARC_POLICY_T * pctx
);
Partly clears the opaque context for reuse on the same connection, perhaps as a result of an SMTP RSET. The IP address and address type are preserved but everything else is freed and zeroed.
DESCRIPTION
Called When opendmarc_policy_connect_rset() may be called anytime you want to partly reset an opaque context such as a result of an SMTP RSET.
ARGUMENTS
ArgumentDescription
pctx A pointer to type DMARC_POLICY_T.
RETURN VALUES
  • DMARC_POLICY_T * -- on success
  • NULL -- Only if the pointer passed into it is NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_connect_shutdown.html000066400000000000000000000041021416002254500311560ustar00rootroot00000000000000 opendmarc_policy_connect_shutdown()

opendmarc_policy_connect_shutdown()

[back to index]

SYNOPSIS
#include <dmarc.h>
DMARC_POLICY_T * opendmarc_policy_connect_shutdown(
	DMARC_POLICY_T * pctx
);
Clear and completely free the the opaque context. Once freed it can never be reused.
DESCRIPTION
Called When opendmarc_policy_connect_shutdown() may be called as part of shutting down the current client connection.
ARGUMENTS
ArgumentDescription
pctx A pointer to type DMARC_POLICY_T.
RETURN VALUES
  • NULL -- Always
NOTES
  • For each context you get with opendmarc_policy_connect_init(), you should have exactly one corresponding call to this shutdown function.
  • Passing NULL is allowed and has no effect.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_adkim.html000066400000000000000000000053501416002254500300360ustar00rootroot00000000000000 opendmarc_policy_fetch_adkim()

opendmarc_policy_fetch_adkim()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_adkim(
	DMARC_POLICY_T *pctx,
	int *adkim
);
Query the library to find the adkim= value from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_adkim() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
adkim The address of an integer to receive the value following the adkim=, a value of:
DMARC_RECORD_A_UNSPECIFIED if the adkim= was absent or
DMARC_RECORD_A_STRICT if adkim=s or
DMARC_RECORD_A_RELAXED if adkim=r.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_EMPTY -- The pctp pointer was NULL.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a adkim value that was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_alignment.html000066400000000000000000000065131416002254500307310ustar00rootroot00000000000000 opendmarc_policy_fetch_alignment()

opendmarc_policy_fetch_alignment()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_alignment(
	DMARC_POLICY_T *pctx,
	int *dkim_alignment, int *spf_alignment
);
Find out the Alignment results for the SPF and DKIM checks.
DESCRIPTION
Called When opendmarc_policy_fetch_alignment() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
dkim_alignment The address of an integer that will be set to either
DMARC_POLICY_DKIM_ALIGNMENT_PASS or
DMARC_POLICY_DKIM_ALIGNMENT_FAIL
spf_alignment The address of an integer that will be set to either
DMARC_POLICY_SPF_ALIGNMENT_PASS or
DMARC_POLICY_SPF_ALIGNMENT_FAIL
RETURN VALUES
  • DMARC_PARSE_OKAY -- Success.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a pctx value that was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_aspf.html000066400000000000000000000053331416002254500277030ustar00rootroot00000000000000 opendmarc_policy_fetch_aspf()

opendmarc_policy_fetch_aspf()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_aspf(
	DMARC_POLICY_T *pctx,
	int *aspf
);
Query the library to find the aspf= value from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_aspf() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
aspf The address of an integer to receive the value following the aspf=, a value of:
DMARC_RECORD_A_UNSPECIFIED if the aspf= was absent or
DMARC_RECORD_A_STRICT if aspf=s or
DMARC_RECORD_A_RELAXED if aspf=r.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_EMPTY -- The pctp pointer was NULL.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a aspf value that was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_fo.html000066400000000000000000000055101416002254500273530ustar00rootroot00000000000000 opendmarc_policy_fetch_fo()

opendmarc_policy_fetch_fo()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_fo(
	DMARC_POLICY_T *pctx,
	int *fo
);
Query the library to find the fo= value from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_fo() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
fo The address of an integer to receive the value following the fo=, a value (a bitmap) of:
DMARC_RECORD_FO_UNSPECIFIED if the fo= was absent or if no ruf= was specified.
DMARC_RECORD_FO_0 if fo=0.
DMARC_RECORD_FO_1 if fo=1.
DMARC_RECORD_FO_D if fo=d.
DMARC_RECORD_FO_S if fo=s.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_EMPTY -- The pctp pointer was NULL.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a fo pointer value that was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_p.html000066400000000000000000000053751416002254500272170ustar00rootroot00000000000000 opendmarc_policy_fetch_p()

opendmarc_policy_fetch_p()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_p(
	DMARC_POLICY_T *pctx,
	int *p
);
Query the library to find the p= value from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_p() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
p The address of an integer to receive the value following the p=, a value of:
DMARC_RECORD_P_UNSPECIFIED if the p= was absent or
DMARC_RECORD_P_NONE if p=none or
DMARC_RECORD_P_QUARANTINE if p=quarantine or
DMARC_RECORD_P_REJECT if p=reject.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_EMPTY -- The pctp pointer was NULL.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a p value that was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_pct.html000066400000000000000000000050301416002254500275320ustar00rootroot00000000000000 opendmarc_policy_fetch_pct()

opendmarc_policy_fetch_pct()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_pct(
	DMARC_POLICY_T *pctx,
	int *pctp
);
Query the library to find the pct= value from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_pct() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
pctp The address of an integer to receive the value following the pct=, a value 0-100.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a pctx value that was NULL.
  • DMARC_PARSE_ERROR_EMPTY -- The pctp pointer was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_rf.html000066400000000000000000000053621416002254500273630ustar00rootroot00000000000000 opendmarc_policy_fetch_rf()

opendmarc_policy_fetch_rf()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_rf(
	DMARC_POLICY_T *pctx,
	int *rf
);
Query the library to find the rf= value from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_rf() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
rf The address of an integer to receive the value following the rf=, a value (a bitmap) of:
DMARC_RECORD_RF_UNSPECIFIED if the rf= was absent or if no ruf= was specified.
DMARC_RECORD_RF_AFRF if rf=afrf.
DMARC_RECORD_RF_IODEF if rf=iodef.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_EMPTY -- The pctp pointer was NULL.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a rf pointer value that was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_rua.html000066400000000000000000000062601416002254500275410ustar00rootroot00000000000000 opendmarc_policy_fetch_rua()

opendmarc_policy_fetch_rua()

[back to index]

SYNOPSIS
#include <dmarc.h>
u_char ** opendmarc_policy_fetch_rua(
	DMARC_POLICY_T *pctx,
	u_char *list_buf, size_t size_of_buf, int constant
);
Query the library to find the list of rua= values from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_rua() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
list_buf If not NULL, the address of a buffer to receive a comma delimited list as a single string.
size_of_buf If list_buf was not NULL, the the length of that buffer in bytes.
constant This function returns an argv-style array of stings. Set this to 0 if you will free that array when you are finished with it. Set this to 1 if you want to treat that array as const and have the library magically free it for you.
RETURN VALUES
  • != NULL -- On success.
  • NULL -- The pctp pointer was NULL.
  • NULL -- If the DMARC record contained no rua=
NOTES
  • If you set constant to 1, you must not free the array returned. To do so will have unpredictable results.
  • Call this function only after a DMARC record was fetched and parsed with opendmarc_policy_query_dmarc() or supplied to the library with opendmarc_policy_store_dmarc().
  • Note that each returned record is looked up using DNS to find if it is accepting reports for the from_domain. If not, it is eliminated from the returned list.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_ruf.html000066400000000000000000000062601416002254500275460ustar00rootroot00000000000000 opendmarc_policy_fetch_ruf()

opendmarc_policy_fetch_ruf()

[back to index]

SYNOPSIS
#include <dmarc.h>
u_char ** opendmarc_policy_fetch_ruf(
	DMARC_POLICY_T *pctx,
	u_char *list_buf, size_t size_of_buf, int constant
);
Query the library to find the list of ruf= values from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_ruf() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
list_buf If not NULL, the address of a buffer to receive a comma delimited list as a single string.
size_of_buf If list_buf was not NULL, the the length of that buffer in bytes.
constant This function returns an argv-style array of stings. Set this to 0 if you will free that array when you are finished with it. Set this to 1 if you want to treat that array as const and have the library magically free it for you.
RETURN VALUES
  • != NULL -- On success.
  • NULL -- The pctp pointer was NULL.
  • NULL -- If the DMARC record contained no ruf=
NOTES
  • If you set constant to 1, you must not free the array returned. To do so will have unpredictable results.
  • Call this function only after a DMARC record was fetched and parsed with opendmarc_policy_query_dmarc() or supplied to the library with opendmarc_policy_store_dmarc().
  • Note that each returned record is looked up using DNS to find if it is accepting reports for the from_domain. If not, it is eliminated from the returned list.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_sp.html000066400000000000000000000054121416002254500273720ustar00rootroot00000000000000 opendmarc_policy_fetch_sp()

opendmarc_policy_fetch_sp()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_sp(
	DMARC_POLICY_T *pctx,
	int *p
);
Query the library to find the sp= value from the DMARC record.
DESCRIPTION
Called When opendmarc_policy_fetch_sp() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
sp The address of an integer to receive the value following the sp=, a value of:
DMARC_RECORD_P_UNSPECIFIED if the sp= was absent or
DMARC_RECORD_P_NONE if sp=none or
DMARC_RECORD_P_QUARANTINE if sp=quarantine or
DMARC_RECORD_P_REJECT if sp=reject.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_EMPTY -- The pctp pointer was NULL.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a sp value that was NULL.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_fetch_utilized_domain.html000066400000000000000000000053521416002254500321330ustar00rootroot00000000000000 opendmarc_policy_fetch_utilized_domain()

opendmarc_policy_fetch_utilized_domain()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_fetch_utilized_domain(
	DMARC_POLICY_T *pctx,
	u_char* buf, size_t buflen
);
Query the library to find the domain that was actually used to find the DMARC record. Either the From: domain or the organizational domain.
DESCRIPTION
Called When opendmarc_policy_fetch_utilized_domain() is called after the DMARC record has been fetched and parsed.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
buf The address of a buffer to receive the domain.
buflen The size of the buffer in bytes.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a pctx value that was NULL.
  • DMARC_PARSE_ERROR_EMPTY -- The buf was NULL or buflen was 0.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_library_init.html000066400000000000000000000051321416002254500302650ustar00rootroot00000000000000 opendmarc_policy_library_init()

opendmarc_policy_library_init()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_library_init(
	OPENDMARC_LIB_T *lib
);
One time initialization of the library for use at program startup.
DESCRIPTION
Called When opendmarc_policy_library_init() is called after the program starts and before multi-threading operation begins.
ARGUMENTS
ArgumentDescription
lib The address of a structure of type OPENDMARC_LIB_T that your code has filled out with appropriate values.
RETURN VALUES
  • DMARC_PARSE_OKAY -- Success.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a lib value that was NULL.
  • DMARC_TLD_ERROR_UNKNOWN -- If the tld_type specified is not one that the library knows about.
  • Other possible return values various errno values set by failure to read the TLD file.
NOTES
  • This function is not thread safe and must only be called once and only once when the program starts and before multi-threading begins.
  • If you fail to use a TLD file, the library will not be able to perform a second lookup for a DMARC record by converting a subdomain into an organizational domain. So will only perform the first lookup of the subdomain, possibly missing a valid DMARC record.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_library_shutdown.html000066400000000000000000000042361416002254500312010ustar00rootroot00000000000000 opendmarc_policy_library_shutdown()

opendmarc_policy_library_shutdown()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_library_shutdown(
	OPENDMARC_LIB_T *lib
);
Final shutdown of the library for use at program conclusion.
DESCRIPTION
Called When opendmarc_policy_library_shutdown() is called after multi-threading operation cease and before the program terminates.
ARGUMENTS
ArgumentDescription
lib The address of a structure of type OPENDMARC_LIB_T that your code has filled out with appropriate values.
RETURN VALUES
  • DMARC_PARSE_OKAY -- Always.
NOTES
  • This function is not thread safe and must only be called once and only once after multi-threading ceases and before the program terminates.
  • If you used a TLD file, the library will free any recourses allocated for that use.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_parse_dmarc.html000066400000000000000000000060241416002254500300570ustar00rootroot00000000000000 opendmarc_policy_parse_dmarc()

opendmarc_policy_parse_dmarc()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_parse_dmarc(
	DMARC_POLICY_T *pctx,
	u_char *domain, u_char *record
);
Provide the library with a DMARC record to parse.
DESCRIPTION
Called When opendmarc_policy_parse_dmarc() must be called before you call opendmarc_get_policy_to_enforce().
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
domain A string containing the domain for which you looked up the DMARC record.
record A string containing the DMARC record that the library should parse.
RETURN VALUES
  • DMARC_PARSE_OKAY -- Success.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a pctx value that was NULL.
  • DMARC_PARSE_ERROR_BAD_VERSION -- If the DMARC record's v= was bad.
  • DMARC_PARSE_ERROR_BAD_VALUE -- If a value following an = was bad or illegal.
  • DMARC_PARSE_ERROR_NO_REQUIRED_P -- The required p= was absent.
NOTES
  • In general, avoid calling this function directly. Instead call opendmarc_policy_store_dmarc() instead.
  • This function expects the DMARC record to be supplied as a single line of text. If the record appeared in DNS as a collection of quoted parts, you must assemble those parts into a single string before calling this function.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_query_dmarc.html000066400000000000000000000061601416002254500301130ustar00rootroot00000000000000 opendmarc_policy_query_dmarc()

opendmarc_policy_query_dmarc()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_query_dmarc(
	DMARC_POLICY_T *pctx,
	u_char *domain
);
Cause the DMARC record to be looked up using DNS.
DESCRIPTION
Called When opendmarc_policy_query_dmarc() may be called either before you have stored the From: domain, or in place of storing that domain.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
domain A string containing the domain to look up. If not NULL, should be the domain from the From: header. If NULL, you must already have stored the From: domain using opendmarc_policy_store_from_domain().
RETURN VALUES
  • DMARC_PARSE_OKAY -- Success.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a pctx value that was NULL.
  • DMARC_PARSE_ERROR_EMPTY -- if domain was NULL and there was no From: domain.
  • DMARC_PARSE_ERROR_NO_DOMAIN -- if domain wasn't really a domain name.
  • DMARC_DNS_ERROR_NXDOMAIN -- No such domain found in DNS.
  • DMARC_DNS_ERROR_TMPERR -- DNS returned a temporary failure.
  • DMARC_DNS_ERROR_NO_RECORD -- The domain exists but no DMARC record was found, either at that domain or a found organizational domain.
NOTES
  • If the DMARC record is found it is parsed, so this function can also return the values of opendmarc_policy_parse_dmarc().
  • This function uses the standard resolver library. As of this release there are no hooks for an asynchronous resolver library.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_status_to_str.html000066400000000000000000000036561416002254500305240ustar00rootroot00000000000000 opendmarc_policy_status_to_str()

opendmarc_policy_status_to_str()

[back to index]

SYNOPSIS
#include <dmarc.h>
const char * opendmarc_policy_status_to_str(
	OPENDMARC_STATUS_T status
);
Get a human readable string from a returned status value.
DESCRIPTION
Called When opendmarc_policy_status_to_str() is called anytime
ARGUMENTS
ArgumentDescription
status Value of OPENDMARC_STATUS_T returned by a call to a library fuction.
RETURN VALUES
  • const char * -- Success.
  • "Undefine Value" -- If the status is outside the known range of values.
NOTES
  • The return value is a string constant and should never be free()'d.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_store_dkim.html000066400000000000000000000066161416002254500277460ustar00rootroot00000000000000 opendmarc_policy_store_dkim()

opendmarc_policy_store_dkim()

[back to index]

SYNOPSIS
#include <dmarc.h>
DMARC_POLICY_T * opendmarc_policy_store_dkim(
	DMARC_POLICY_T * pctx,
	u_char *d_equal_domain, int dkim_result, u_char *human_result
);
Once you have found the outcome of each DKIM check, no matter how many, you may call this function to prepare it for a DMARC policy decision.
DESCRIPTION
Called When opendmarc_policy_store_dkim() may be called after each DKIM signature in the message is verified. That is, this function may be called one, or many times.
ARGUMENTS
ArgumentDescription
pctx A pointer to type DMARC_POLICY_T.
d_equal_domain A pointer to an unsigned string containing the domain found in the d= record of the DKIM signature.
dkim_result Integer specifying the result of the DKIM check. Choose from one of: DMARC_POLICY_DKIM_OUTCOME_NONE if there was no DKIM signature; DMARC_POLICY_DKIM_OUTCOME_PASS if the DKIM check passed; DMARC_POLICY_DKIM_OUTCOME_FAIL if the DKIM check failed; or DMARC_POLICY_DKIM_OUTCOME_TMPFAIL if the check returned a temporary failure.
human_result If not NULL, is a string containing an arbitrary, human readable and friendly DKIM result.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success
  • DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL
  • DMARC_PARSE_ERROR_EMPTY -- If domain was NULL or zero length
  • DMARC_PARSE_ERROR_NO_DOMAIN -- If domain did not contain a domain, e.g. "<>"
  • DMARC_PARSE_ERROR_NO_ALLOC -- If memory allocation failed
NOTES
  • You may feed this function results from multiple DKIM signatures. This function will select the most successful check from among those that align with the header From: domain.
  • You should not call this function if there were no DKIM signatures, because the library presumes there will be none unless told otherwise.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_store_dmarc.html000066400000000000000000000064341416002254500301060ustar00rootroot00000000000000 opendmarc_policy_store_dmarc()

opendmarc_policy_store_dmarc()

[back to index]

SYNOPSIS
#include <dmarc.h>
OPENDMARC_STATUS_T opendmarc_policy_store_dmarc(
	DMARC_POLICY_T *pctx,
	u_char *dmarc_record, u_char *domain, u_char *organizationaldomain
);
Provide the library with a DMARC record with which to determine policy.
DESCRIPTION
Called When opendmarc_policy_store_dmarc() must be called before you call opendmarc_get_policy_to_enforce().
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
dmarc_record A string containing the DMARC record that the library should parse.
domain A string containing the domain for which you looked up the DMARC record.
organizationaldomain If you found the record using the Organizational Domain instead of the From: domain, provide that domain here. Else leave as NULL.
RETURN VALUES
  • DMARC_PARSE_OKAY -- Success.
  • DMARC_PARSE_ERROR_NULL_CTX -- If you passed in a pctx value that was NULL.
  • DMARC_PARSE_ERROR_EMPTY -- If the DMARC record was NULL.
  • DMARC_PARSE_ERROR_NO_DOMAIN -- If the domain was NULL.
  • DMARC_PARSE_ERROR_BAD_VERSION -- If the DMARC record's v= was bad.
  • DMARC_PARSE_ERROR_BAD_VALUE -- If a value following an = was bad or illegal.
  • DMARC_PARSE_ERROR_NO_REQUIRED_P -- The required p= was absent.
NOTES
  • This function expects the DMARC record to be supplied as a single line of text. If the record appeared in DNS as a collection of quoted parts, you must assemble those parts into a single string before calling this function.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_store_from_domain.html000066400000000000000000000047401416002254500313100ustar00rootroot00000000000000 opendmarc_policy_store_from_domain()

opendmarc_policy_store_from_domain()

[back to index]

SYNOPSIS
#include <dmarc.h>
DMARC_POLICY_T * opendmarc_policy_store_from_domain(
	DMARC_POLICY_T * pctx,
	u_char *from_domain
);
As soon as possible after you have located the first From: header, you should pass the value of that header to this function.
DESCRIPTION
Called When opendmarc_policy_store_from_domain() may be called while processing headers or after all headers have been processed.
ARGUMENTS
ArgumentDescription
pctx A pointer to type DMARC_POLICY_T.
from_domain A pointer to a string containing unsigned characters.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success
  • DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL
  • DMARC_PARSE_ERROR_EMPTY -- If from_domain was NULL or zero length
  • DMARC_PARSE_ERROR_NO_DOMAIN -- If from_domain did not contain a domain, e.g. "<>"
NOTES
  • You may pass the whole From: header to this function, or the value of the From: header or just the domain you parsed from that address. This function will correctly handle whatever you feed it.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_store_spf.html000066400000000000000000000075361416002254500276140ustar00rootroot00000000000000 opendmarc_policy_store_spf()

opendmarc_policy_store_spf()

[back to index]

SYNOPSIS
#include <dmarc.h>
DMARC_POLICY_T * opendmarc_policy_store_spf(
	DMARC_POLICY_T * pctx,
	u_char *domain, int result, int origin, u_char *human_readable
);
One you have found the outcome of the SPF check you may call this function to prepare it for a DMARC policy decision.
DESCRIPTION
Called When opendmarc_policy_store_spf() may be called as soon as you have made an SPF decision. If you have no way of validating SPF, you may ignore this function.
ARGUMENTS
ArgumentDescription
pctx A pointer to type DMARC_POLICY_T.
domain A pointer to an unsigned string containing the domain used to check SPF. This may be the domain from the SMTP MAIL From: command or, if that contained no domain, the domain from the SMTP HELO/EHLO command.
result Integer specifying the result of the SPF check. Choose from one of: DMARC_POLICY_SPF_OUTCOME_NONE if there was no SPF record; DMARC_POLICY_SPF_OUTCOME_PASS if the SPF check passed; DMARC_POLICY_SPF_OUTCOME_FAIL if the SPF check failed; or DMARC_POLICY_SPF_OUTCOME_TMPFAIL if the check returned a temporary failure.
origin Integer specifying the which part of the SMTP session contained the domain to check. Select from one of: DMARC_POLICY_SPF_ORIGIN_MAILFROM if the domain came from the SMTP MAIL From: command; or DMARC_POLICY_SPF_ORIGIN_HELO if the domain came from the SMTP HELO/EHLO command.
human_readable If not NULL, is a string containing an arbitrary, human readable and friendly SPF result.
RETURN VALUES
  • DMARC_PARSE_OKAY -- On success
  • DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL
  • DMARC_PARSE_ERROR_EMPTY -- If domain was NULL or zero length
  • DMARC_PARSE_ERROR_NO_DOMAIN -- If domain did not contain a domain, e.g. "<>"
NOTES
  • You may pass the whole SMTP MAIL From: command to this function, or the value of the SMTP MAIL From: command inside angle braces or just the domain you parsed from that address. This function will correctly handle whatever you feed it.
  • If you lack access to an SPF outcome, you may safely omit calling this function, because the library presumes there will be no SPF outcome unless told otherwise.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_policy_to_buf.html000066400000000000000000000054751416002254500270660ustar00rootroot00000000000000 opendmarc_policy_to_buf()

opendmarc_policy_to_buf()

[back to index]

SYNOPSIS
#include <dmarc.h>
intopendmarc_policy_to_buf(
	DMARC_POLICY_T *pctx,
	char *buf, size_t buflen
);
Fills out buf with the contents of DMARC_POLICY_T *pctx.
DESCRIPTION
Called When opendmarc_policy_to_buf() may be called anytime DMARC_POLICY_T *pctx has data to examine.
ARGUMENTS
ArgumentDescription
pctx The address of a structure of type DMARC_POLICY_T as returned from opendmarc_policy_connect_init().
buf A buffer big enough.
buflen The size in bytes of the buffer.
RETURN VALUES
  • 0 -- Success.
  • EINVAL -- If you passed in a pctx, buf that was NULL, or a buflen of zero.
  • E2BIG -- The buf was too small.
NOTES A successfully filled out buf will contain mutilple LF delimited lines of text like the following:
IP_ADDR=1.2.3.4
IP_TYPE=IPv4
SPF_DOMAIN=
SPF_ORIGIN=
SPF_OUTCOME=NONE
SPF_HUMAN_OUTCOME=
DKIM_FINAL=FALSE
DKIM_DOMAIN=
DKIM_OUTOME=NONE
DKIM_HUMAN_OUTCOME=
DKIM_ALIGNMENT=FAIL
SPF_ALIGNMENT=FAIL
H_ERRNO=
ADKIM=RELAXED
ASPF=RELAXED
P=NONE
SP=UNSPECIFIED
PCT=100
RF=AFRF,IODEF
RI=86400
RUA=mailto:dmarc-a@abuse.net
RUF=mailto:dmarc-f@abuse.net
FO=1:d:s:

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_spf_test.html000066400000000000000000000074471416002254500260610ustar00rootroot00000000000000 opendmarc_spf_test()

opendmarc_spf_test()

[back to index]

SYNOPSIS
#include <dmarc.h>
int opendmarc_spf_test(
	char *ip_address, char *mail_from_domain, char *helo_domain,
	char *spf_record, int softfail_okay_flag, char *human_readable,
	size_t human_readable_len, int *used_mfrom
);
Validate a passed in SPF record or look up one and validate it.
DESCRIPTION
Called When opendmarc_spf_test() May be called anytime all its needed information is gathered. The envelope sender (MAIL From: or mlfi_envfrom) is the earliest it can be called. The mlfi_eom() is the optimum time because that is the only routine that can add a header.
ARGUMENTS
ArgumentDescription
ip_address A pointer to a string representation of an IPv4 or IPv6 address.
mail_from_domain This can be the domain itself, or the full sender address or even the angle brace enclosed address. Any of of those will work, including the empty address <> and the literal MAILER_DAEMON.
helo_domain This is the domain specified with the HELO command. This domain is ignored if the mail_from_domain contains an actual domain.
spf_record If not NULL, is a string containing the SPF record to validate. If NULL, the record will be looked up based on either the mail_from_domain or helo_domain/.
softfail_okay_flag If zero softfails (~all and ?all) are treated the same as if the are hard fails. If non-zero, softfails are threated as a pass.
human_readable If not NULL, is the address of a string buffer into which to scribble a human readble reason for any result.
human_readable_len The sizeof() or number of characters available in human_readable.
used_mfrom Address of an integer into which either TRUE or FALSE will be written. If TRUE, the mail_from_domain was used to validate the SPF record. If FALSE, the helo_domain was used to validate the SPF record.
RETURN VALUES
  • DMARC_POLICY_SPF_OUTCOME_PASS -- On success
  • DMARC_POLICY_SPF_OUTCOME_FAIL -- If the SPF record check failed.
  • DMARC_POLICY_SPF_OUTCOME_TMPFAIL -- If there was as recoverable failure.
  • DMARC_POLICY_SPF_OUTCOME_NONE -- If domain did not have an spf record.
NOTES
  • This spf record check performs it own DNS lookups. There are no hooks provided to subsitute your own DNS lookup routines at this time.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_status_t.html000066400000000000000000000060771416002254500260760ustar00rootroot00000000000000 OPENDMARC_STATUS_T

OPENDMARC_STATUS_T

[back to index]

DESCRIPTION
Purpose The OPENDMARC_STATUS_T is the type returned by many of the functions in this library.
Synopsis
#include <dmarc.h>

OPENDMARC_STATUS_T return_value;

OPENDMARC_STATUS_T The values that can be returned from functions that return OPENDMARC_STATUS_T include:
  • DMARC_PARSE_OKAY -- Success.
  • DMARC_PARSE_ERROR_EMPTY -- An argument was empty or NULL or zero length.
  • DMARC_PARSE_ERROR_NULL_CTX -- Received a NULL pointer as the context or library initializer.
  • DMARC_PARSE_ERROR_BAD_VERSION -- DMARC record contained a bad v=.
  • DMARC_PARSE_ERROR_BAD_VALUE -- DMARC record a bad value, e.g. p=bob.
  • DMARC_PARSE_ERROR_NO_REQUIRED_P -- DMARC record lacked a required p=.
  • DMARC_PARSE_ERROR_NO_DOMAIN -- Parsing required a domain but got <>.
  • DMARC_PARSE_ERROR_NO_ALLOC -- Memory allocation error. Also sets errno to ENOMEM.
  • DMARC_PARSE_ERROR_BAD_SPF_MACRO -- Bad value given to opendmarc_policy_store_dkim().
  • DMARC_DNS_ERROR_NO_RECORD -- No DMARC record was found.
  • DMARC_DNS_ERROR_NXDOMAIN -- No such domain exists.
  • DMARC_DNS_ERROR_TMPERR -- Lookup of DMARC record got a recoverable error. Try again later.
  • DMARC_TLD_ERROR_UNKNOWN -- Type of TLD file was not a known type.
  • DMARC_FROM_DOMAIN_ABSENT -- Expected a From: domain but it was absent.
Usage
  • Individual functions return specific values. Only check for those documented per function.
  • You may used these macros anywhere an integer expression may be used.
NOTES
  • You should use these macros rather than looking for particular integers, such as zero.
  • These underlying values currently conflict with some errno values and may be changed in the future.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_tld_read_file.html000066400000000000000000000046151416002254500270010ustar00rootroot00000000000000 opendmarc_tld_read_file()

opendmarc_tld_read_file()

[back to index]

SYNOPSIS
#include <dmarc.h>
int opendmarc_tld_read_file(
	char* path_fname, char *commentstring, char *drop, char *except
);
Load in a TLD (Top Level Domain) file for use by the library.
DESCRIPTION
Called When opendmarc_tld_read_file() is called once before the program begins to run multi-threaded.
ARGUMENTS
ArgumentDescription
path_fname The full or relative pathname to the file containing the TLD information.
commentstring If not NULL, a string that is used to define commentary lines in the file. If NULL, defaults to "//".
drop If not NULL, a string prefix that is used to define an absolute top level, such as ".com".
except If not NULL, a string prefix that is used to define an exceptional top level, such as ".reseller.example.com".
RETURN VALUES
  • 0 -- On success.
  • !=0 -- And sets errno on failure.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_tld_shutdown.html000066400000000000000000000032331416002254500267350ustar00rootroot00000000000000 opendmarc_tld_shutdown()

opendmarc_tld_shutdown()

[back to index]

SYNOPSIS
#include <dmarc.h>
void opendmarc_tld_shutdown();
De-allocate resources used to store the TLD list internally.
DESCRIPTION
Called When opendmarc_tld_shutdown() is called once after the program concludes running multi-threaded.
ARGUMENTS
none
RETURN VALUES
  • none -- Returns nothing
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_util_clearargv.html000066400000000000000000000032371416002254500272260ustar00rootroot00000000000000 opendmarc_util_clearargv()

opendmarc_util_clearargv()

[back to index]

SYNOPSIS
#include <dmarc.h>
u_char ** opendmarc_util_clearargv(
		u_char **ary
);
Clears an already allocated NULL-terminated array of strings.
DESCRIPTION
Called When opendmarc_util_clearargv() may be called anytime.
ARGUMENTS
ArgumentDescription
ary The NULL-terminated array of strings to deallocate.
RETURN VALUES
  • NULL -- Always.
NOTES
  • This frees each of the strings first, then frees the array.

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_xml.html000066400000000000000000000044661416002254500250300ustar00rootroot00000000000000 opendmarc_xml()

opendmarc_xml()

[back to index]

SYNOPSIS
#include <dmarc.h>
u_char ** opendmarc_xml(
	char *b, size_t blen, char *e, size_t elen)
);
Parse and XML Report that was stored in a memory buffer. Returns a NULL termiated array of strings as lines of CSV data.
DESCRIPTION
Called When opendmarc_xml() Any time you have received a DMARC report, and have already extracted it from its zip file.
ARGUMENTS
ArgumentDescription
b The address of the memory buffer containing the XML report.
blen The size of the buffer b in bytes.
e A buffer to contain any returned human-readable error message.
elen The size of the buffer e in bytes.
RETURN VALUES
  • u_char ** -- On success, a NULL terminated array of CSV data lines.
  • NULL -- Failure, with the reason in the e buffer.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/opendmarc_xml_parse.html000066400000000000000000000042651416002254500262170ustar00rootroot00000000000000 opendmarc_xml_parse()

opendmarc_xml_parse()

[back to index]

SYNOPSIS
#include <dmarc.h>
u_char ** opendmarc_xml_parse(
	char *fname, char *err_buf, size_t err_len
);
Parse and XML Report by reading it from a file.
DESCRIPTION
Called When opendmarc_xml_parse() Any time you have received a DMARC report, and have already extracted it from its zip file.
ARGUMENTS
ArgumentDescription
fname The full or relative path name of the file to read.
err_buf The size of a buffer in bytes to recieve error messages.
err_len The size of the buffer err_buf in bytes.
RETURN VALUES
  • u_char ** -- On success, a NULL terminated array of CSV data lines.
  • NULL -- Failure, with the reason in the err_buf buffer.
NOTES

Copyright (c) 2012, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the license.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/docs/overview.html000066400000000000000000000065061416002254500240430ustar00rootroot00000000000000 Overview

Overview

[back to index]

For basic processig of an arriving message under Domain-Based Message Authentication, Reporting and Conformance ("DMARC"), make the following calls:
  1. opendmarc_policy_library_init(&lib);
    • initialize an instance of the library
    • this must be done once before any of the other calls are made
    • this needs to be called once when the application is started, but its result can be reused at the start of processing of each message
  2. dmarc = opendmarc_policy_connect_init(ip-address, ip-version);
    • initialize a handle set up for signing all messages from a new connection
    • establishes the context needed for evaluating SPF
    • the handle returned here can be used for all messages that arrive from the given IP address; simply call opendmarc_policy_connect_rset() between each message
    • each thread must request its own handle for processing messages
  3. opendmarc_policy_store_from_domain(dmarc, domain);
    • store the domain name found in the From: field of an arriving message
  4. opendmarc_policy_store_spf(dmarc, ...);
    • stores the SPF result details for the current message once they are available from some other API
  5. opendmarc_policy_store_dkim(dmarc, ...);
    • stores a set of DKIM result details for the current message once they are available from some other API
    • this can be called multiple times per message since a single message can have multiple DKIM signatures attached to it
  6. opendmarc_policy_query_dmarc(dmarc);
    • performs DMARC policy query and evaluation on the message based on details provided above
  7. opendmarc_get_policy_to_enforce(dmarc);
    • report the policy in effect over the From: domain found in the message; indicates what the final disposition of the current message should be
  8. opendmarc_policy_connect_shutdown(dmarc);
    • shuts down the previously allocated handle
  9. opendmarc_policy_library_shutdown(lib);
    • free resources related to the library



Copyright (c) 2013, The Trusted Domain Project. All rights reserved.
By using this file, you agree to the terms and conditions set forth in the respective licenses.
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_dns.c000066400000000000000000000176011416002254500233350ustar00rootroot00000000000000/*********************************************************************** ** OPENDMARC_DNS.C ** DMARC_DNS_GET_RECORD -- looks up and returns the txt record ** DMARC_DNS_TEST_RECORD -- hook to test ** ** Copyright (c) 2012-2016, 2021, The Trusted Domain Project. ** All rights reserved. ************************************************************************/ #ifndef BIND_8_COMPAT # define BIND_8_COMPAT #endif /* ! BIND_8_COMPAT */ #include #include "opendmarc_internal.h" #ifndef MAXPACKET # define MAXPACKET (8192) #endif struct fake_dns_data { const char * fdns_name; const char * fdns_answer; struct fake_dns_data * fdns_next; }; static struct fake_dns_data * fake_dns = NULL; static struct fake_dns_data * fake_dns_tail = NULL; /************************************************************************* ** OPENDMARC_DNS_FAKE_RECORD -- store a fake DNS reply ** ** Arguments: ** name -- name of fake record to add ** answer -- answer to fake record ** ** Return Values: ** None. ** ** Side Effects: ** Calls to dmarc_dns_get_record() will check this list for an answer ** rather than using live DNS. This is intended to be used by test ** harnesses that have no DNS access. *************************************************************************/ void opendmarc_dns_fake_record(const char *name, const char *answer) { struct fake_dns_data *new; if (name == NULL) return; new = malloc(sizeof *new); if (new != NULL) { new->fdns_name = strdup(name); if (new->fdns_name == NULL) { free(new); return; } new->fdns_answer = strdup(answer); if (new->fdns_answer == NULL) { free((void *) new->fdns_name); free(new); return; } new->fdns_next = NULL; if (fake_dns == NULL) { fake_dns = new; fake_dns_tail = new; } else { fake_dns_tail->fdns_next = new; fake_dns_tail = new; } } } /************************************************************************* ** DMARC_DNS_GET_RECORD -- looks up and returns the txt record ** ** Arguments: ** domain -- the domain name to look up. ** reply -- pointer to an integer to get query status ** got_txtbuf -- where to scribble the found txt record ** got_txtlen -- size of txt record buffer ** ** Return Values: ** got_txtbuf -- pointer to got_txtbuf on success ** NULL -- otherise, and place the h_errno error into reply ** ** Side Effects: ** Makes a connection to the local (or specified) ** name server and and may block waiting for a reply. ** *************************************************************************/ char * dmarc_dns_get_record(char *domain, int *reply, char *got_txtbuf, size_t got_txtlen) { u_char * end_ptr = NULL; u_char * cur_ptr = NULL; u_char * got_ptr = NULL; u_char * gote_ptr = NULL; int ch = 0; short cur_len = 0; HEADER header; int acnt = -1; int qdcnt = -1; uint16_t class = 0; uint16_t type = 0; uint32_t ttl = 0; char * bp = NULL; int fake_reply = 0; int * reply_ptr = NULL; u_char answer_buf[MAXPACKET]; int answer_len; char hbuf[MAXDNSHOSTNAME]; char namebuf[MAXDNSHOSTNAME + 1]; #if HAVE_RES_NINIT struct __res_state resp; #endif /* HAVE_RES_NINIT */ /* * Short circuit the return "reply" if no variable provided. */ if (reply == NULL) reply_ptr = &fake_reply; else reply_ptr = reply; /* * If a null or empy domain was given to us, just say that it * was not found. */ *reply_ptr = 0; if (domain == NULL || *domain == '\0') { *reply_ptr = HOST_NOT_FOUND; return NULL; } /* * If no buffer was supplied to return the txt record, * pretend nothing was found. */ if (got_txtbuf == NULL || got_txtlen == 0) { *reply_ptr = HOST_NOT_FOUND; return NULL; } /* * Pull the answer from the fake DNS table if there is one. */ if (fake_dns != NULL) { struct fake_dns_data *cur; for (cur = fake_dns; cur != NULL; cur = cur->fdns_next) { if (strcasecmp(cur->fdns_name, domain) == 0) { strncpy(got_txtbuf, cur->fdns_answer, got_txtlen - 1); *reply_ptr = NETDB_SUCCESS; return got_txtbuf; } } *reply_ptr = NO_DATA; return NULL; } /* * Copy the domain so we can scribble on it. The orginal * may point to a static string. * We should use strlcpy(), but not all systems have it. */ (void) memset(hbuf, '\0', sizeof hbuf); (void) strncpy(hbuf, domain, sizeof hbuf - 1); bp = hbuf; /* * Make sure host ends in a dot to short circuit lookups */ bp = hbuf + strlen(hbuf) - 1; if (*bp != '.') *++bp = '.'; *++bp = '\0'; /* * Make user host does not begin with a dot. */ bp = hbuf; while (*bp == '.') ++bp; #ifdef HAVE_RES_NINIT res_ninit(&resp); #ifdef RES_USE_DNSSEC resp.options |= RES_USE_DNSSEC; #endif (void) opendmarc_policy_library_dns_hook(&resp.nscount, &resp.nsaddr_list[0]); answer_len = res_nquery(&resp, bp, C_IN, T_TXT, answer_buf, sizeof answer_buf); #ifdef HAVE_RES_NDESTROY res_ndestroy(&resp); #else res_nclose(&resp); #endif #else /* HAVE_RES_NINIT */ res_init(); #ifdef RES_USE_DNSSEC _res.options |= RES_USE_DNSSEC; #endif (void) opendmarc_policy_library_dns_hook(&_res.nscount, _res.nsaddr_list); answer_len = res_query(bp, C_IN, T_TXT, answer_buf, sizeof answer_buf); #endif /* HAVE_RES_NINIT */ if (answer_len < 0) { if (h_errno == NETDB_SUCCESS) h_errno = NO_DATA; *reply_ptr = h_errno; return NULL; } /* * Truncate answer if it is too big. */ if (answer_len > sizeof answer_buf) answer_len = sizeof answer_buf; (void) memcpy(&header, answer_buf, sizeof header); cur_ptr = (u_char *)&answer_buf + HFIXEDSZ; end_ptr = (u_char *)&answer_buf + answer_len; (void) memset(namebuf, '\0', sizeof namebuf); /* skip question part of response -- we know what we asked */ for (qdcnt = ntohs(header.qdcount); qdcnt > 0; qdcnt--) { (void) dn_expand((unsigned char *) &answer_buf, end_ptr, cur_ptr, namebuf, sizeof namebuf); if ((answer_len = dn_skipname(cur_ptr, end_ptr)) < 0) { *reply_ptr = NO_DATA; return NULL; } cur_ptr += answer_len; if (cur_ptr + INT16SZ + INT16SZ > end_ptr) { *reply_ptr = NO_DATA; return NULL; } GETSHORT(type, cur_ptr); GETSHORT(class, cur_ptr); } if (header.rcode != NOERROR) { *reply_ptr = NO_DATA; return NULL; } acnt = ntohs((unsigned short) header.ancount); if (acnt == 0) { *reply_ptr = NO_DATA; return NULL; } while (--acnt >= 0 && cur_ptr < end_ptr) { if ((answer_len = dn_expand((unsigned char *) &answer_buf, end_ptr, cur_ptr, namebuf, sizeof namebuf)) < 0) { *reply_ptr = NO_DATA; return NULL; } cur_ptr += answer_len; if (cur_ptr + INT16SZ + INT16SZ > end_ptr) { /* corrupt answer */ *reply_ptr = NO_DATA; return NULL; } GETSHORT(type, cur_ptr); GETSHORT(class, cur_ptr); GETLONG(ttl, cur_ptr); if (type != T_TXT) { /* skip RRTYPEs we don't know */ GETSHORT(answer_len, cur_ptr); cur_ptr += answer_len; continue; } if (cur_ptr + INT16SZ > end_ptr) { /* * Yikes. No payload length */ *reply_ptr = NO_DATA; return NULL; } GETSHORT(cur_len, cur_ptr); if (cur_ptr + cur_len > end_ptr) { /* * If the payload length greater than remaining buffer */ *reply_ptr = NO_DATA; return NULL; } (void) memset(got_txtbuf, '\0', got_txtlen); /* copy the returned record into got_txtbuf */ got_ptr = (u_char *)got_txtbuf; gote_ptr = (u_char *)got_txtbuf + got_txtlen -1; while (cur_len > 0 && got_ptr < gote_ptr) { ch = *cur_ptr++; cur_len--; while (ch > 0 && got_ptr < gote_ptr) { *got_ptr++ = *cur_ptr++; ch--; cur_len--; } } if (strstr(got_txtbuf, "v=DMARC") != NULL) { *reply_ptr = NETDB_SUCCESS; return got_txtbuf; } *got_txtbuf = '\0'; cur_ptr += cur_len; cur_ptr += answer_len; continue; } *reply_ptr = NO_DATA; return NULL; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_hash.c000066400000000000000000000266511416002254500235010ustar00rootroot00000000000000/*************************************************** ** $Id: opendmarc_hash.c,v 1.2 2010/12/03 23:06:48 bcx Exp $ ** Code contributed by Bryan Costales ****************************************************/ #include "opendmarc_internal.h" /******************************************************************** ** OPENDMARC_HASH_SET_CALLBACK -- Set the callback for freeing the data ** ** Parameters: ** ctx -- Hash table context ** callback -- address of freeing function ** Returns: ** void -- nothing ** Side Effects: ** None. ** Notes: ** The free function must be declared as: ** void *funct(void *arg); */ void opendmarc_hash_set_callback(OPENDMARC_HASH_CTX *hctx, void (*callback)(void *)) { if (hctx == NULL) return; hctx->freefunct = callback; return; } /******************************************************************** ** OPENDMARC_HASH_STRING -- Convert a string into its hash value. ** ** Parameters: ** string -- string to hash ** limit -- size of the hash table ** Returns: ** unsigned integer of hash value ** if str == NULL hashes "" ** Side Effects: ** None. ** Notes: ** Generally for internal use only. */ static size_t opendmarc_hash_string(char *str, size_t limit) { size_t hash; size_t highorder; int c; char * s; if (str == NULL) s = ""; else s = str; /* * Changed to a more modern CRC hash. */ hash = 5381; highorder = hash & 0xf8000000; do { c = (int)(*s); if (c == 0) break; hash = hash << 5; hash = hash ^ (highorder >> 27); hash = hash ^ c; highorder = hash & 0xf8000000; ++s; } while (c != 0); return hash % limit; } /******************************************************************** ** OPENDMARC_HASH_INIT -- Allocate and receive a context pointer ** ** Parameters: ** tablesize -- size of the internal hash table ** Returns: ** Address of type OPENDMARC_HASH_CTX * ** NULL on error and sets errno. ** Side Effects: ** Allocates memory. ** Initializes tablesize number of mutexes ** Notes: ** If tablesize is zero, defaults to (2048) ** Tablesize should be a power of two, if not, it ** is silently adjusted to a power of two. ** If you want a callback to free your data, call ** opendmarc_hash_set_callback() immediately after this call. */ OPENDMARC_HASH_CTX * opendmarc_hash_init(size_t tablesize) { size_t i; unsigned int p2; OPENDMARC_HASH_CTX *hctx; hctx = malloc(sizeof(OPENDMARC_HASH_CTX)); if (hctx == NULL) { if (errno == 0) errno = ENOMEM; return NULL; } if (tablesize == 0) hctx->tablesize = OPENDMARC_DEFAULT_HASH_TABLESIZE; else hctx->tablesize = tablesize; hctx->freefunct = NULL; /* * If buckets is too small, make it min sized. */ if (hctx->tablesize < OPENDMARC_MIN_SHELVES) hctx->tablesize = OPENDMARC_MIN_SHELVES; /* * If it's too large, cap it. */ if (hctx->tablesize > OPENDMARC_MAX_SHELVES) hctx->tablesize = OPENDMARC_MAX_SHELVES; /* * If it's is not a power of two in size, round up. */ if ((hctx->tablesize & (hctx->tablesize - 1)) != 0) { for (p2 = 0; hctx->tablesize != 0; p2++) hctx->tablesize >>= 1; if (p2 <= OPENDMARC_MAX_SHELVES_LG2) hctx->tablesize = OPENDMARC_DEFAULT_HASH_TABLESIZE; else hctx->tablesize = 1 << p2; } hctx->table = calloc(hctx->tablesize, sizeof(OPENDMARC_HASH_SHELF)); if (hctx->table == NULL) { if (errno == 0) errno = ENOMEM; (void) free(hctx); return NULL; } for (i = 0; i < hctx->tablesize; i++) { # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_init(&(hctx->table[i].mutex), NULL); # endif hctx->table[i].bucket = NULL; } return hctx; } /******************************************************************** ** OPENDMARC_HASH_FREEBUCKET -- Free a bucket. ** ** Parameters: ** b -- pointer to a bucket ** Returns: ** NULL always. ** errno is non-zero on error ** Side Effects: ** Frees memory. ** Notes: ** Intended for internal use only. ** Does not unlink b from linked list. ** NO NOT mutex lock here. */ static OPENDMARC_HASH_BUCKET * ghash_freebucket(OPENDMARC_HASH_CTX *hctx, OPENDMARC_HASH_BUCKET *b) { if (b == NULL) return NULL; if (b->key != NULL) { (void) free(b->key); b->key = NULL; } if (b->data != NULL) { if (hctx != NULL && hctx->freefunct != NULL) { (hctx->freefunct)(b->data); b->data = NULL; } else { (void) free(b->data); b->data = NULL; } } (void) free(b); b = NULL; return NULL; } /******************************************************************** ** OPENDMARC_HASH_SHUTDOWN -- Give up and free a hash table. ** ** Parameters: ** hctx -- A hash context from ghash_init() ** Returns: ** NULL always. ** errno is non-zero on error ** Side Effects: ** Frees memory. ** Notes: ** None */ OPENDMARC_HASH_CTX * opendmarc_hash_shutdown(OPENDMARC_HASH_CTX *hctx) { int i; OPENDMARC_HASH_BUCKET *t, *b; if (hctx == NULL) { errno = EINVAL; return NULL; } if (hctx->table == NULL || hctx->tablesize == 0) { errno = EINVAL; return NULL; } for (i = 0; i < hctx->tablesize; i++) { # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_destroy(&(hctx->table[i].mutex)); # endif if ((hctx->table[i].bucket) == NULL) continue; b = hctx->table[i].bucket; do { t = b->next; b = ghash_freebucket(hctx, b); b = t; } while (b != NULL); } (void) free(hctx->table); hctx->table = NULL; (void) free(hctx); hctx = NULL; errno = 0; return NULL; } /******************************************************************** ** OPENDMARC_HASH_LOOKUP -- Look up a key and get its data ** ** Parameters: ** hctx -- A hash context from ghash_init() ** string -- The string to lookup ** data -- Data for update only (NULL for plain lookup) ** datalen -- Size in bytes of the data blob ** Returns: ** Address of data on success (search or update) ** NULL and sets non-zero errno on error ** Side Effects: ** Allocates memory on update. ** Notes: ** If data is NULL, just lookup string and return data if found. ** If data not NULL, insert if string not found, but if found, ** replace the old data with the new. */ void * opendmarc_hash_lookup(OPENDMARC_HASH_CTX *hctx, char *string, void *data, size_t datalen) { uint32_t hashval; OPENDMARC_HASH_BUCKET *b, *n; if (data != NULL && datalen == 0) { errno = EINVAL; return NULL; } if (string == NULL) { errno = EINVAL; return NULL; } if (hctx == NULL || hctx->table == NULL || hctx->tablesize == 0) { errno = EINVAL; return NULL; } hashval = opendmarc_hash_string(string, hctx->tablesize); # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&(hctx->table[hashval].mutex)); # endif b = hctx->table[hashval].bucket; if (b != NULL) { do { if (b->key != NULL && strcasecmp(string, b->key) == 0) { if (data != NULL) { if (hctx->freefunct != NULL) (hctx->freefunct)(b->data); else (void) free(b->data); b->data = calloc(1, datalen); if (b->data == NULL) { # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = ENOMEM; return NULL; } memcpy(b->data, data, datalen); (void) time(&(b->timestamp)); } # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = 0; return b->data; } b = b->next; } while (b != NULL); } if (data == NULL) { # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = 0; return NULL; } /* * Not found, so we inert it. */ n = calloc(1, sizeof(OPENDMARC_HASH_BUCKET)); if (n == NULL) { # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = ENOMEM; return NULL; } n->next = n->previous = NULL; n->key = strdup(string); if (n->key == NULL) { (void) free(n); n = NULL; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = ENOMEM; return NULL; } n->data = calloc(1, datalen); if (n->data == NULL) { (void) free(n->key); n->key = NULL; (void) free(n); n = NULL; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = ENOMEM; return NULL; } memcpy(n->data, data, datalen); (void) time(&(n->timestamp)); b = hctx->table[hashval].bucket; if (b == NULL) { hctx->table[hashval].bucket = n; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = 0; return n->data; } while (b->next != NULL) b = b->next; b->next = n; n->previous = b; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif errno = 0; return n->data; } /******************************************************************** ** OPENDMARC_HASH_DROP -- Remove a key/data from the hash table ** ** Parameters: ** hctx -- A hash context from ghash_init() ** string -- The string to remove ** Returns: ** Zero on success ** Returns non-zero errno on error ** Side Effects: ** Frees memory ** Notes: ** If string not in the table, returns zero anyway. */ int opendmarc_hash_drop(OPENDMARC_HASH_CTX *hctx, char *string) { uint32_t hashval; OPENDMARC_HASH_BUCKET *b; if (string == NULL) { return errno = EINVAL; } if (hctx == NULL || hctx->table == NULL || hctx->tablesize == 0) { return errno = EINVAL; } hashval = opendmarc_hash_string(string, hctx->tablesize); # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&(hctx->table[hashval].mutex)); # endif b = hctx->table[hashval].bucket; if (b != NULL) { do { if (b->key != NULL && strcmp(string, b->key) == 0) { if (b->previous != NULL) b->previous->next = b->next; if (b->next != NULL) b->next->previous = b->previous; b = ghash_freebucket(hctx, b); # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif return errno = 0; } b = b->next; } while (b != NULL); } # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[hashval].mutex)); # endif return errno = 0; } /******************************************************************** ** OPENDMARC_HASH_EXPIRE -- Remove old data from the hash table ** ** Parameters: ** hctx -- A hash context from ghash_init() ** age -- Maximum age to retain ** Returns: ** Zero on success ** Returns non-zero errno on error ** Side Effects: ** Frees memory ** Notes: ** The age is in seconds. All entries older than ** age are removed from the table. */ int opendmarc_hash_expire(OPENDMARC_HASH_CTX *hctx, time_t age) { OPENDMARC_HASH_BUCKET *b, *t; time_t now; int i; if (age == 0) { return errno = EINVAL; } if (hctx == NULL || hctx->table == NULL || hctx->tablesize == 0) { return errno = EINVAL; } (void) time(&now); for (i = 0; i < hctx->tablesize; i++) { # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&(hctx->table[i].mutex)); # endif b = hctx->table[i].bucket; if (b != NULL) { do { t = b->next; if ((now - b->timestamp) > age) { if (b->previous != NULL) b->previous->next = b->next; if (b->next != NULL) b->next->previous = b->previous; if (b == hctx->table[i].bucket) hctx->table[i].bucket = t; b = ghash_freebucket(hctx, b); } b = t; } while (b != NULL); } # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&(hctx->table[i].mutex)); # endif } return errno = 0; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_internal.h000066400000000000000000000223301416002254500243650ustar00rootroot00000000000000/* ** Copyright (c) 2012-2015, 2018, 2021, The Trusted Domain Project. ** All rights reserved. */ #ifndef OPENDMARC_INTERNAL_H #define OPENDMARC_INTERNAL_H #if HAVE_CONFIG_H # include "build-config.h" #endif # if HAVE_CTYPE_H # include # endif # if HAVE_ERRNO_H # include # endif # if HAVE_POLL_H # include # endif # if HAVE_FCNTL_H # include # endif # ifdef sun # include # endif # if HAVE_MEMORY_H # include # endif # if HAVE_STDIO_H # include # endif # if HAVE_STDLIB_H # include # endif # if HAVE_STRING_H # include # endif # if HAVE_SYS_SOCKET_H # include # endif # if HAVE_SYS_STAT_H # include # endif # if HAVE_SYS_TYPES_H # include # endif # if HAVE_SYSEXITS_H # include # endif # if HAVE_SYSLOG_H # include # endif # if TM_IN_SYS_TIME # include # else # include # endif # if TIME_WITH_SYS_TIME && TM_IN_SYS_TIME # include # endif # if HAVE_UNISTD_H # include # endif # if HAVE_NETDB_H # include # endif # if HAVE_NETINET_IN_H # include # endif # if HAVE_SYS_PARAM_H # include # endif # if HAVE_ARPA_INET_H # include # endif # if HAVE_ARPA_NAMESER_H # include # endif # if HAVE_ARPA_NAMESER_COMPAT_H # include # endif # if HAVE_RESOLV_H # include # endif # if HAVE_SIGNAL_H # include # endif # if HAVE_PTHREAD_H || HAVE_PTHREAD # include # endif # ifndef UNDEFINED # define UNDEFINED (-1) # endif # ifndef TRUE # define TRUE (1) # endif # ifndef FALSE # define FALSE (0) # endif # ifndef MAYBE # define MAYBE (2) # endif # define bool int #ifndef NETDB_INTERNAL # define NETDB_INTERNAL (-1) #endif #ifndef NETDB_SUCCESS # define NETDB_SUCCESS (0) #endif /* ** Beware that some Linux versions incorrectly define ** MAXHOSTNAMELEN as 64, but DNS lookups require a length ** of 255. So we don't use MAXHOSTNAMELEN here. Instead ** we use our own MAXDNSHOSTNAME. */ #define MAXDNSHOSTNAME 256 /* ** Maximum number of DNS retries when resolving CNAMES, etc. */ #define DNS_MAX_RETRIES 6 /***************************************************************************** ** DMARC_POLICY_T -- The opaque context for the library. ** Memory needs to be allocated and freed. *****************************************************************************/ typedef struct dmarc_policy_t { /* * Supplied information */ u_char * ip_addr; /* Input: connected IPV4 or IPV6 address */ int ip_type; /* Input: IPv4 or IPv6 */ u_char * spf_domain; /* Input: Domain used to verify SPF */ int spf_origin; /* Input: was domain MAIL From: or HELO for SPF check */ int spf_outcome; /* Input: What was the outcome of the SPF check */ u_char * spf_human_outcome; /* Input: What was the outcome of the SPF check in human readable form */ int dkim_final; /* This is the best record found */ u_char * dkim_domain; /* Input: The d= domain */ u_char * dkim_selector; /* Input: The s= selector */ int dkim_outcome; /* Input: What was the outcome of the DKIM check */ u_char * dkim_human_outcome; /* Input: What was the outcome of the DKIM check in human readable form */ /* * Computed outcomes */ int dkim_alignment; int spf_alignment; /* * Computed Organizational domain, if subdomain lacked a record. */ u_char * from_domain; /* Input: From: header domain */ u_char * organizational_domain; /* * Found in the _dmarc record or supplied to us. */ int h_error; /* Zero if found, else DNS error */ int adkim; int aspf; int p; int sp; int pct; int rf; uint32_t ri; int rua_cnt; u_char ** rua_list; int ruf_cnt; u_char ** ruf_list; int fo; } DMARC_POLICY_T; #ifndef OPENDMARC_POLICY_C # define OPENDMARC_POLICY_C 1 #endif /* ! OPENDMARC_POLICY_C */ /* dmarc_dns.c */ char * dmarc_dns_get_record(char *domain, int *reply, char *got_txtbuf, size_t got_txtlen); /* opendmarc_hash.c */ typedef struct entry_bucket { struct entry_bucket *previous; struct entry_bucket *next; char *key; void *data; time_t timestamp; } OPENDMARC_HASH_BUCKET; typedef struct { OPENDMARC_HASH_BUCKET *bucket; # if HAVE_PTHREAD_H || HAVE_PTHREAD pthread_mutex_t mutex; # endif } OPENDMARC_HASH_SHELF; #define OPENDMARC_MIN_SHELVES_LG2 4 #define OPENDMARC_MIN_SHELVES (1 << OPENDMARC_MIN_SHELVES_LG2) /* * max * sizeof internal_entry must fit into size_t. * assumes internal_entry is <= 32 (2^5) bytes. */ #define OPENDMARC_MAX_SHELVES_LG2 (sizeof (size_t) * 8 - 1 - 5) #define OPENDMARC_MAX_SHELVES ((size_t)1 << OPENDMARC_MAX_SHELVES_LG2) typedef struct { OPENDMARC_HASH_SHELF *table; size_t tablesize; void (*freefunct)(void *); } OPENDMARC_HASH_CTX; #define OPENDMARC_DEFAULT_HASH_TABLESIZE (2048) OPENDMARC_HASH_CTX * opendmarc_hash_init(size_t tablesize); OPENDMARC_HASH_CTX * opendmarc_hash_shutdown(OPENDMARC_HASH_CTX *hctx); void opendmarc_hash_set_callback(OPENDMARC_HASH_CTX *hctx, void (*callback)(void *)); void * opendmarc_hash_lookup(OPENDMARC_HASH_CTX *hctx, char *string, void *data, size_t datalen); int opendmarc_hash_drop(OPENDMARC_HASH_CTX *hctx, char *string); int opendmarc_hash_expire(OPENDMARC_HASH_CTX *hctx, time_t age); /* opendmarc_tld.c */ int opendmarc_tld_read_file(char *path_fname, char *commentstring, char *drop, char *except); int opendmarc_get_tld(u_char *domain, u_char *tld, size_t tld_len); int opendmarc_reverse_domain(u_char *domain, u_char *buf, size_t buflen); void opendmarc_tld_shutdown(void); /* opendmarc_util.c */ u_char ** opendmarc_util_pushargv(u_char *str, u_char **ary, int *cnt); u_char ** opendmarc_util_clearargv(u_char **ary); u_char ** opendmarc_util_dupe_argv(u_char **ary); u_char * opendmarc_util_cleanup(u_char *str, u_char *buf, size_t buflen); u_char * opendmarc_util_finddomain(u_char *raw, u_char *buf, size_t buflen); char ** opendmarc_util_freenargv(char **ary, int *num); char ** opendmarc_util_pushnargv(char *str, char **ary, int *num); char * opendmarc_util_ultoa(unsigned long val, char *buffer, size_t bufferlen); /* opendmarc_policy.c */ void opendmarc_policy_library_dns_hook(int *nscountp, struct sockaddr_in *nsaddr_list); #if WITH_SPF #if HAVE_SPF2_H #include "spf.h" typedef struct spf_context_struct { SPF_server_t * spf_server; SPF_request_t * spf_request; SPF_response_t * spf_response; SPF_result_t spf_result; char mailfrom_addr[512]; char mailfrom_domain[256]; char helo_domain[256]; } SPF_CTX_T; int opendmarc_spf2_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int softfail_okay_flag, char *human_readable, size_t human_readable_len, int *used_mfrom); #else /* not HAVE_SPF2_H */ /* opendmarc_spf.c and opendmarc_spf_dns.c */ #define MAX_SPF_RECURSION (10) typedef struct spf_context_struct { int nlines; char * lines[MAX_SPF_RECURSION+2]; int status; int in_token; char mailfrom_addr[512]; char helo_domain[256]; char mailfrom_domain[256]; char validated_domain[256]; char ip_address[32]; char spf_record[BUFSIZ *2]; char ** iplist; int ipcount; char exp_buf[512]; int did_get_exp; } SPF_CTX_T; int opendmarc_spf_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int softfail_okay_flag, char *human_readable, size_t human_readable_len, int *used_mfrom); char ** opendmarc_spf_dns_lookup_a(char *domain, char **ary, int *cnt); char ** opendmarc_spf_dns_lookup_mx(char *domain, char **ary, int *cnt); char ** opendmarc_spf_dns_lookup_mx_domain(char *domain, char **ary, int *cnt); char ** opendmarc_spf_dns_lookup_ptr(char *ip, char **ary, int *cnt); int opendmarc_spf_dns_cidr_address(char *addr, u_long *hi, u_long *lo); int opendmarc_spf_dns_does_domain_exist(char *domain, int *reply); char * opendmarc_spf_dns_get_record(char *domain, int *reply, char *txt, size_t txtlen, char *cname, size_t cnamelen, int spfcheck); int opendmarc_spf_dns_does_domain_exist(char *domain, int *reply); char * opendmarc_spf_dns_get_record(char *domain, int *reply, char *txt, size_t txtlen, char *cname, size_t cnamelen, int spfcheck); int opendmarc_spf_ipv6_cidr_check(char *ipv6_str, char *cidr_string); int opendmarc_spf_cidr_address(uint32_t ip, char *cidr_addr); SPF_CTX_T * opendmarc_spf_alloc_ctx(); SPF_CTX_T * opendmarc_spf_free_ctx(SPF_CTX_T *spfctx); int opendmarc_spf_status_to_pass(int status, int none_pass); int opendmarc_spf_specify_mailfrom(SPF_CTX_T *spfctx, char *mailfrom, size_t mailfrom_len, int *use_domain); int opendmarc_spf_specify_helo_domain(SPF_CTX_T *spfctx, char *helo_domain, size_t helo_domain_len); int opendmarc_spf_specify_ip_address(SPF_CTX_T *spfctx, char *ip_address, size_t ip_address_len); int opendmarc_spf_specify_record(SPF_CTX_T *spfctx, char *spf_record, size_t spf_record_length); int opendmarc_spf_parse(SPF_CTX_T *spfctx, int dns_count, char *xbuf, size_t xbuf_len); const char * opendmarc_spf_status_to_msg(SPF_CTX_T *spfctx, int status); #endif /* HAVE_SPF2_H */ #endif /* WITH_SPF */ #endif /* OPENDMARC_INTERNAL_H */ OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_policy.c000066400000000000000000001570011416002254500240470ustar00rootroot00000000000000/************************************************************************* ** The user interface to the rest of this library. ** ** Copyright (c) 2012-2016, 2018, 2021, The Trusted Domain Project. ** All rights reserved. **************************************************************************/ #include #include "opendmarc_internal.h" #include "dmarc.h" /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* ** CHECK_DOMAIN -- check for syntactical validity of a domain name ** ** Parameters: ** domain -- domain name to check ** ** Return value: ** TRUE if the syntax was fine, FALSE otherwise. */ bool check_domain(u_char *domain) { u_char *dp; for (dp = domain; *dp != '\0'; dp++) { if (!(isalpha(*dp) || isdigit(*dp) || *dp == '.' || *dp == '-' || *dp == '_')) return FALSE; } return TRUE; } /************************************************************************** ** OPENDMARC_POLICY_LIBRARY_INIT -- Initialize The Library ** Parameters: ** lib_init -- Address of a filled in DMARC_LIB_T structure ** Returns: ** DMARC_PARSE_OKAY -- on success ** DMARC_PARSE_ERROR_NULL_CTX -- if lib_init is null ** DMARC_TLD_ERROR_UNKNOWN -- If lip_init->tld_type is undefined ** Side Effects: ** Sets a global pointer ** Warning: ** This function is not thread safe so only call once on ** startup. ***************************************************************************/ static OPENDMARC_LIB_T *Opendmarc_Libp = NULL; static OPENDMARC_LIB_T Opendmarc_Lib; OPENDMARC_STATUS_T opendmarc_policy_library_init(OPENDMARC_LIB_T *lib_init) { int ret = DMARC_PARSE_OKAY; if (lib_init == NULL) return DMARC_PARSE_ERROR_NULL_CTX; (void) memcpy(&Opendmarc_Lib, lib_init, sizeof(OPENDMARC_LIB_T)); Opendmarc_Libp = &Opendmarc_Lib; errno = 0; if ((Opendmarc_Libp->tld_source_file)[0] != '\0') { switch (Opendmarc_Libp->tld_type) { case OPENDMARC_TLD_TYPE_MOZILLA: ret = opendmarc_tld_read_file(Opendmarc_Libp->tld_source_file, "//", "*.", "!"); if (ret != 0) ret = errno; break; default: return DMARC_TLD_ERROR_UNKNOWN; } } return ret; } /************************************************************************** ** OPENDMARC_POLICY_LIBRARY_SHUTDOWN -- Shutdown The Libarary ** Parameters: ** lib_init -- The prior DMARC_LIB_T strucgture ** Returns: ** DMARC_PARSE_OKAY -- always ** Side Effects: ** May free memory ** Warning: ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_library_shutdown(OPENDMARC_LIB_T *lib_init) { (void) opendmarc_tld_shutdown(); return DMARC_PARSE_OKAY; } /************************************************************************** ** OPENDMARC_POLICY_CONNECT_INIT -- Get policy context for connection ** Parameters: ** ip_addr -- An IP addresss in string form. ** is_ipv6 -- Zero for IPv4, non-zero for IPv6 ** Returns: ** pctx -- An allocated and initialized context pointer. ** NULL -- On failure and sets errno ** Side Effects: ** Allocates memory. ***************************************************************************/ DMARC_POLICY_T * opendmarc_policy_connect_init(u_char *ip_addr, int is_ipv6) { DMARC_POLICY_T *pctx; int xerrno; if (ip_addr == NULL) { errno = EINVAL; return NULL; } pctx = malloc(sizeof(DMARC_POLICY_T)); if (pctx == NULL) { return NULL; } (void) memset(pctx, '\0', sizeof(DMARC_POLICY_T)); pctx->p = DMARC_RECORD_P_UNSPECIFIED; pctx->sp = DMARC_RECORD_P_UNSPECIFIED; pctx->ip_addr = (u_char *)strdup((char *)ip_addr); if (pctx->ip_addr == NULL) { xerrno = errno; (void) free(pctx); errno = xerrno; return NULL; } if (is_ipv6 == 0) pctx->ip_type = DMARC_POLICY_IP_TYPE_IPV4; else pctx->ip_type = DMARC_POLICY_IP_TYPE_IPV6; return pctx; } /************************************************************************** ** OPENDMARC_POLICY_CONNECT_CLEAR -- Zero the policy context but doesn't ** free it ** ** Parameters: ** pctx -- The context to zero. ** Returns: ** pctx -- Zeroed but still allocated context ** NULL -- On failure and sets errno ** Side Effects: ** Frees memory. ***************************************************************************/ DMARC_POLICY_T * opendmarc_policy_connect_clear(DMARC_POLICY_T *pctx) { if (pctx == NULL) { errno = EINVAL; return NULL; } if (pctx->ip_addr != NULL) (void) free(pctx->ip_addr); if (pctx->from_domain != NULL) (void) free(pctx->from_domain); if (pctx->spf_domain != NULL) (void) free(pctx->spf_domain); if (pctx->dkim_domain != NULL) (void) free(pctx->dkim_domain); if (pctx->dkim_selector != NULL) (void) free(pctx->dkim_selector); if (pctx->spf_human_outcome != NULL) (void) free(pctx->spf_human_outcome); if (pctx->dkim_human_outcome != NULL) (void) free(pctx->dkim_human_outcome); if (pctx->organizational_domain != NULL) (void) free(pctx->organizational_domain); pctx->rua_list = opendmarc_util_clearargv(pctx->rua_list); pctx->rua_cnt = 0; pctx->ruf_list = opendmarc_util_clearargv(pctx->ruf_list); pctx->ruf_cnt = 0; pctx->fo = 0; (void) memset(pctx, '\0', sizeof(DMARC_POLICY_T)); pctx->p = DMARC_RECORD_P_UNSPECIFIED; return pctx; } /************************************************************************** ** OPENDMARC_POLICY_CONNECT_RSET -- Rset for another message ** Usefull if there is more than a single envelope per connection. ** Usefull during an SMTP RSET ** ** Parameters: ** pctx -- The context to rset. ** Returns: ** pctx -- RSET context ** NULL -- On failure and sets errno ** Side Effects: ** Frees memory. ** Preserves the IP address and type ***************************************************************************/ DMARC_POLICY_T * opendmarc_policy_connect_rset(DMARC_POLICY_T *pctx) { u_char *ip_save; int ip_type; if (pctx == NULL) { errno = EINVAL; return NULL; } ip_save = pctx->ip_addr; pctx->ip_addr = NULL; ip_type = pctx->ip_type; pctx->ip_type = -1; pctx = opendmarc_policy_connect_clear(pctx); if (pctx == NULL) return NULL; pctx->ip_addr = ip_save; pctx->ip_type = ip_type; return pctx; } /************************************************************************** ** OPENDMARC_POLICY_CONNECT_SHUTDOWN -- Free the policy context ** Frees and deallocates the context ** ** Parameters: ** pctx -- The context to free and deallocate. ** Returns: ** NULL -- Always ** Side Effects: ** Frees memory. ***************************************************************************/ DMARC_POLICY_T * opendmarc_policy_connect_shutdown(DMARC_POLICY_T *pctx) { if (pctx != NULL) { pctx = opendmarc_policy_connect_clear(pctx); (void) free(pctx); pctx = NULL; } return pctx; } int opendmarc_policy_check_alignment(u_char *subdomain, u_char *tld, int mode) { u_char rev_sub[512]; u_char rev_tld[512]; u_char tld_buf[512]; u_char *ep; int ret; if (subdomain == NULL) return EINVAL; if (tld == NULL) return EINVAL; if (mode== DMARC_RECORD_A_UNSPECIFIED) mode= DMARC_RECORD_A_RELAXED; (void) memset(tld_buf, '\0', sizeof tld_buf); (void) strlcpy(tld_buf, tld, sizeof tld_buf); (void) memset(rev_sub, '\0', sizeof rev_sub); (void) opendmarc_reverse_domain(subdomain, rev_sub, sizeof rev_sub); ep = rev_sub + strlen(rev_sub) -1; if (*ep != '.') (void) strlcat((char *)rev_sub, ".", sizeof rev_sub); (void) memset(rev_tld, '\0', sizeof rev_tld); (void) opendmarc_reverse_domain(tld_buf, rev_tld, sizeof rev_tld); ep = rev_tld + strlen(rev_tld) -1; if (*ep != '.') (void) strlcat((char *)rev_tld, ".", sizeof rev_tld); /* * Perfect match is aligned irrespective of relaxed or strict. */ if (strcasecmp(rev_tld, rev_sub) == 0) return 0; ret = strncasecmp(rev_tld, rev_sub, strlen(rev_tld)); if (ret == 0 && mode == DMARC_RECORD_A_RELAXED) return 0; ret = strncasecmp(rev_sub, rev_tld, strlen(rev_sub)); if (ret == 0 && mode == DMARC_RECORD_A_RELAXED) return 0; ret = opendmarc_get_tld(tld, tld_buf, sizeof tld_buf); if (ret != 0) return -1; (void) memset(rev_tld, '\0', sizeof rev_tld); (void) opendmarc_reverse_domain(tld_buf, rev_tld, sizeof rev_tld); ep = rev_tld + strlen(rev_tld) -1; if (*ep != '.') (void) strlcat((char *)rev_tld, ".", sizeof rev_tld); /* * Perfect match is aligned irrespective of relaxed or strict. */ if (strcasecmp(rev_tld, rev_sub) == 0) return 0; ret = strncasecmp(rev_tld, rev_sub, strlen(rev_tld)); if (ret == 0 && mode == DMARC_RECORD_A_RELAXED) return 0; ret = strncasecmp(rev_sub, rev_tld, strlen(rev_sub)); if (ret == 0 && mode == DMARC_RECORD_A_RELAXED) return 0; return -1; } /************************************************************************** ** OPENDMARC_POLICY_STORE_FROM_DOMAIN -- Store domain from the From: header. ** If the domain is an address parse the domain from it. ** The domain is needed to perform alignment checks. ** Parameters: ** pctx -- The context to uptdate ** from_domain -- A string ** Returns: ** DMARC_PARSE_OKAY -- On success ** DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL ** DMARC_PARSE_ERROR_EMPTY -- if from_domain NULL or zero ** DMARC_PARSE_ERROR_NO_DOMAIN -- No domain in from_domain ** Side Effects: ** Allocates memory. ** Note: ** Does not check to insure that the found domain is a ** syntactically valid domain. It is okay for domain to ** puney decoded into 8-bit data. ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_store_from_domain(DMARC_POLICY_T *pctx, u_char *from_domain) { char domain_buf[256]; char *dp; if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (from_domain == NULL || strlen((char *)from_domain) == 0) return DMARC_PARSE_ERROR_EMPTY; dp = opendmarc_util_finddomain(from_domain, domain_buf, sizeof domain_buf); if (dp == NULL) return DMARC_PARSE_ERROR_NO_DOMAIN; pctx->from_domain = strdup((char *)dp); if (pctx->from_domain == NULL) return DMARC_PARSE_ERROR_NO_ALLOC; return DMARC_PARSE_OKAY; } /************************************************************************** ** OPENDMARC_POLICY_STORE_SPF -- Store spf results ** Okay to supply the raw MAIL From: data ** ** Parameters: ** pctx -- The context to uptdate ** domain -- The domain used to verify SPF ** result -- DMARC_POLICY_SPF_OUTCOME_NONE ** or DMARC_POLICY_SPF_OUTCOME_PASS ** or DMARC_POLICY_SPF_OUTCOME_FAIL ** or DMARC_POLICY_SPF_OUTCOME_TMPFAIL ** origin -- DMARC_POLICY_SPF_ORIGIN_MAILFROM ** or DMARC_POLICY_SPF_ORIGIN_HELO ** human_readable -- A human readable reason for failure ** Returns: ** DMARC_PARSE_OKAY -- On success ** DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL ** DMARC_PARSE_ERROR_EMPTY -- if domain NULL or zero ** DMARC_PARSE_ERROR_NO_DOMAIN -- No domain in domain ** Side Effects: ** Allocates memory. ** Note: ** Does not check to insure that the domain is a ** syntactically valid domain. It is okay for domain to ** puney decoded into 8-bit data. ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_store_spf(DMARC_POLICY_T *pctx, u_char *domain, int result, int origin, u_char *human_readable) { char domain_buf[256]; char *dp; if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (domain == NULL || strlen((char *)domain) == 0) return DMARC_PARSE_ERROR_EMPTY; dp = opendmarc_util_finddomain(domain, domain_buf, sizeof domain_buf); if (dp == NULL) return DMARC_PARSE_ERROR_NO_DOMAIN; if (!check_domain(dp)) return DMARC_PARSE_ERROR_BAD_VALUE; if (human_readable != NULL) pctx->spf_human_outcome = strdup((char *)human_readable); pctx->spf_domain = strdup((char *)dp); if (pctx->spf_domain == NULL) return DMARC_PARSE_ERROR_NO_ALLOC; switch (result) { case DMARC_POLICY_SPF_OUTCOME_NONE: case DMARC_POLICY_SPF_OUTCOME_PASS: case DMARC_POLICY_SPF_OUTCOME_FAIL: case DMARC_POLICY_SPF_OUTCOME_TMPFAIL: pctx->spf_outcome = result; break; default: return DMARC_PARSE_ERROR_BAD_SPF_MACRO; } switch (origin) { case DMARC_POLICY_SPF_ORIGIN_MAILFROM: case DMARC_POLICY_SPF_ORIGIN_HELO: pctx->spf_origin = origin; break; default: return DMARC_PARSE_ERROR_BAD_SPF_MACRO; } return DMARC_PARSE_OKAY; } /************************************************************************** ** OPENDMARC_POLICY_STORE_DKIM -- Store dkim results ** ** Parameters: ** pctx -- The context to update ** d_equal_domain -- The the domain from the d= ** s_equal_selector -- The selector from the s= ** dkim_result -- DMARC_POLICY_DKIM_OUTCOME_NONE ** or DMARC_POLICY_DKIM_OUTCOME_PASS ** or DMARC_POLICY_DKIM_OUTCOME_FAIL ** or DMARC_POLICY_DKIM_OUTCOME_TMPFAIL ** human_result -- A human readable reason for failure ** Returns: ** DMARC_PARSE_OKAY -- On success ** DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL ** DMARC_PARSE_ERROR_EMPTY -- if domain NULL or zero ** DMARC_PARSE_ERROR_NO_DOMAIN -- No domain in domain ** DMARC_PARSE_ERROR_NO_ALLOC -- Memory allocation failed ** DMARC_FROM_DOMAIN_ABSENT -- No From: domain ** Side Effects: ** Allocates memory. ** Note: ** Does not check to insure that the domain is a ** syntactically valid domain. It is okay for domain to ** puney decoded into 8-bit data. ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_store_dkim(DMARC_POLICY_T *pctx, u_char *d_equal_domain, u_char *s_equal_selector, int dkim_result, u_char *human_result) { char domain_buf[256]; u_char *dp; int result = DMARC_POLICY_DKIM_OUTCOME_NONE; if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (d_equal_domain == NULL || strlen((char *)d_equal_domain) == 0) return DMARC_PARSE_ERROR_EMPTY; if (pctx->from_domain == NULL) return DMARC_FROM_DOMAIN_ABSENT; if (!check_domain(d_equal_domain)) return DMARC_PARSE_ERROR_BAD_VALUE; switch (dkim_result) { case DMARC_POLICY_DKIM_OUTCOME_NONE: case DMARC_POLICY_DKIM_OUTCOME_PASS: case DMARC_POLICY_DKIM_OUTCOME_FAIL: case DMARC_POLICY_DKIM_OUTCOME_TMPFAIL: result = dkim_result; break; default: return DMARC_PARSE_ERROR_BAD_DKIM_MACRO; } if (pctx->dkim_final == TRUE) return DMARC_PARSE_OKAY; dp = opendmarc_util_finddomain(d_equal_domain, domain_buf, sizeof domain_buf); if (dp == NULL || strlen(dp) == 0) return DMARC_PARSE_ERROR_NO_DOMAIN; /* * If the d= domain is an exact match to the from_domain * select this one as the domain of choice. * If the outcome is pass, make this the final choice. */ if (strcasecmp((char *)dp, pctx->from_domain) == 0) { if (pctx->dkim_domain != NULL) { (void) free(pctx->dkim_domain); pctx->dkim_domain = NULL; } if (pctx->dkim_selector != NULL) { (void) free(pctx->dkim_selector); pctx->dkim_selector = NULL; } if (result == DMARC_POLICY_DKIM_OUTCOME_PASS) { pctx->dkim_final = TRUE; goto set_final; } if (pctx->dkim_outcome == DMARC_POLICY_DKIM_OUTCOME_PASS) return DMARC_PARSE_OKAY; goto set_final; } /* * See if the d= is a superset of the from domain. * If so and if we have not already found * a best match, make this the temporary best match. */ if (opendmarc_policy_check_alignment(dp, pctx->from_domain, pctx->adkim) == 0) { if (pctx->dkim_domain != NULL) { (void) free(pctx->dkim_domain); pctx->dkim_domain = NULL; } if (pctx->dkim_selector != NULL) { (void) free(pctx->dkim_selector); pctx->dkim_selector = NULL; } if (result == DMARC_POLICY_DKIM_OUTCOME_PASS) goto set_final; } /* * If we found any record so far that passed, preserve it; if the new entry * is not aligned, only replace an existing one by an unaligned one if it was * not a pass, but make sure to update the domain in that case! */ if (pctx->dkim_outcome == DMARC_POLICY_DKIM_OUTCOME_PASS) { return DMARC_PARSE_OKAY; } else { (void) free(pctx->dkim_domain); pctx->dkim_domain = NULL; } set_final: if (pctx->dkim_domain == NULL) pctx->dkim_domain = strdup((char *)dp); if (pctx->dkim_domain == NULL) return DMARC_PARSE_ERROR_NO_ALLOC; if (pctx->dkim_selector == NULL && s_equal_selector != NULL) pctx->dkim_selector = strdup((char *)s_equal_selector); if (human_result != NULL) { if (pctx->dkim_human_outcome != NULL) (void) free(pctx->dkim_human_outcome); pctx->dkim_human_outcome = strdup((char *)human_result); } pctx->dkim_outcome = result; return DMARC_PARSE_OKAY; } /************************************************************************** ** OPENDMARC_POLICY_QUERY_DMARC_XDOMAIN -- Verify that we have permission ** to send to domain ** Parameters: ** pctx -- The context to uptdate ** uri -- URI listed in DMARC record ** Returns: ** DMARC_PARSE_OKAY -- On success, and fills pctx ** DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL ** DMARC_PARSE_ERROR_EMPTY -- if domain NULL or zero ** DMARC_PARSE_ERROR_NO_DOMAIN -- No domain in domain ** DMARC_DNS_ERROR_TMPERR -- No domain, try again later ** DMARC_DNS_ERROR_NO_RECORD -- No DMARC record found. ** Side Effects: ** Performs one or more DNS lookups ** ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_query_dmarc_xdomain(DMARC_POLICY_T *pctx, u_char *uri) { u_char buf[BUFSIZ]; u_char copy[256]; u_char domain[256]; u_char domain_tld[256]; u_char uri_tld[256]; u_char *ret = NULL; int dns_reply = 0; int i = 0; int err = 0; if (pctx == NULL || pctx->from_domain == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (uri == NULL) return DMARC_PARSE_ERROR_EMPTY; memset(buf, '\0', sizeof buf); memset(copy, '\0', sizeof copy); memset(domain, '\0', sizeof domain); memset(domain_tld, '\0', sizeof domain_tld); memset(uri_tld, '\0', sizeof uri_tld); /* Get out domain from our URI */ if (strncasecmp(uri, "mailto:", 7) == 0) uri += 7; if (opendmarc_util_finddomain(uri, domain, sizeof domain) == NULL) return DMARC_PARSE_ERROR_NO_DOMAIN; /* Ensure that we're not doing a cross-domain check */ err = 0; err = opendmarc_get_tld(domain, uri_tld, sizeof uri_tld); err += opendmarc_get_tld(pctx->from_domain, domain_tld, sizeof domain_tld); if (err != 0) return DMARC_DNS_ERROR_NO_RECORD; if (strncasecmp((char *) uri_tld, (char *) domain_tld, sizeof uri_tld) == 0) return DMARC_PARSE_OKAY; strlcpy((char *) copy, (char *) pctx->from_domain, sizeof copy); strlcat((char *) copy, "._report._dmarc.", sizeof copy); strlcat((char *) copy, (char *) domain, sizeof copy); /* Query DNS */ for (i = 0; i < DNS_MAX_RETRIES && ret == NULL; i++) { ret = (u_char *) dmarc_dns_get_record((char *) copy, &dns_reply, (char *) buf, sizeof buf); if (ret != 0 || dns_reply == HOST_NOT_FOUND) break; /* requery if didn't resolve CNAME */ if (ret == NULL && *buf != '\0') { strlcpy((char *) copy, (char *) buf, sizeof copy); continue; } } if (dns_reply == NETDB_SUCCESS && strcmp( buf, "&" ) != 0) { /* Must include DMARC version */ if (strncasecmp((char *)buf, "v=DMARC1", sizeof buf) == 0) { return DMARC_PARSE_OKAY; } } /* ** Retry with a * literal. */ strlcpy((char *) copy, (char *) "*", sizeof copy); strlcat((char *) copy, "._report._dmarc.", sizeof copy); strlcat((char *) copy, (char *) domain, sizeof copy); for (i = 0; i < DNS_MAX_RETRIES && ret == NULL; i++) { ret = (u_char *) dmarc_dns_get_record((char *) copy, &dns_reply, (char *) buf, sizeof buf); if (ret != 0 || dns_reply == HOST_NOT_FOUND) break; /* requery if didn't resolve CNAME */ if (ret == NULL && *buf != '\0') { strlcpy((char *) copy, (char *) buf, sizeof copy); continue; } } if (dns_reply == NETDB_SUCCESS && strcmp( buf, "&" ) != 0) { /* Must include DMARC version */ if (strncasecmp((char *)buf, "v=DMARC1", sizeof buf) == 0) { return DMARC_PARSE_OKAY; } else { return DMARC_DNS_ERROR_NO_RECORD; } } switch (dns_reply) { case HOST_NOT_FOUND: case NO_DATA: case NO_RECOVERY: return DMARC_DNS_ERROR_NO_RECORD; case TRY_AGAIN: case NETDB_INTERNAL: return DMARC_DNS_ERROR_TMPERR; default: return DMARC_DNS_ERROR_NO_RECORD; } } /************************************************************************** ** OPENDMARC_POLICY_QUERY_DMARC -- Look up the _dmarc record for the ** specified domain. If not found ** try the organizational domain. ** Parameters: ** pctx -- The context to uptdate ** domain -- The domain for which to lookup the DMARC record ** Returns: ** DMARC_PARSE_OKAY -- On success, and fills pctx ** DMARC_PARSE_ERROR_NULL_CTX -- If pctx was NULL ** DMARC_PARSE_ERROR_EMPTY -- if domain NULL or zero ** DMARC_PARSE_ERROR_NO_DOMAIN -- No domain in domain ** DMARC_DNS_ERROR_NXDOMAIN -- No domain found in DNS ** DMARC_DNS_ERROR_TMPERR -- No domain, try again later ** DMARC_DNS_ERROR_NO_RECORD -- No DMARC record found. ** Side Effects: ** Performs one or more DNS lookups ** Allocates memory. ** Note: ** Does not check to insure that the domain is a ** syntactically valid domain. ** Looks up domain first. If that fails, finds the tld and ** looks up topmost domain under tld. If this later is found ** updates pctx->organizational_domain with the result. ** Warning: ** If no TLD file has been loaded, will silenty not do that ** fallback lookup. ** ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_query_dmarc(DMARC_POLICY_T *pctx, u_char *domain) { u_char buf[BUFSIZ]; u_char copy[256]; u_char tld[256]; u_char * bp = NULL; int dns_reply = 0; int tld_reply = 0; int loop_count = DNS_MAX_RETRIES; if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (domain == NULL || strlen(domain) == 0) { if (pctx->from_domain != NULL) domain = pctx->from_domain; else return DMARC_PARSE_ERROR_EMPTY; } (void) strlcpy(copy, "_dmarc.", sizeof copy); (void) strlcat(copy, domain, sizeof copy); query_again: (void) memset(buf, '\0', sizeof buf); bp = dmarc_dns_get_record(copy, &dns_reply, buf, sizeof buf); if (bp != NULL) { if (dns_reply != HOST_NOT_FOUND) goto got_record; } /* * Was a CNAME was found that the resolver did * not follow on its own? */ if (bp == NULL && *buf != '\0') { (void) strlcpy(copy, buf, sizeof copy); if (--loop_count != 0) goto query_again; } (void) memset(tld, '\0', sizeof tld); tld_reply = opendmarc_get_tld(domain, tld, sizeof tld); if (tld_reply != 0) goto dns_failed; if (strlen(tld) > 0) { pctx->organizational_domain = strdup(tld); loop_count = DNS_MAX_RETRIES; (void) strlcpy(copy, "_dmarc.", sizeof copy); (void) strlcat(copy, tld, sizeof copy); query_again2: (void) memset(buf, '\0', sizeof buf); bp = dmarc_dns_get_record(copy, &dns_reply, buf, sizeof buf); if (bp != NULL) goto got_record; /* * Was a CNAME was found that the resolver did * not follow on its own? */ if (bp == NULL && *buf != '\0') { (void) strlcpy(copy, buf, sizeof copy); if (--loop_count != 0) goto query_again2; } } dns_failed: switch (dns_reply) { case HOST_NOT_FOUND: case NO_DATA: case NO_RECOVERY: return DMARC_DNS_ERROR_NO_RECORD; case TRY_AGAIN: case NETDB_INTERNAL: return DMARC_DNS_ERROR_TMPERR; default: return DMARC_DNS_ERROR_NO_RECORD; } got_record: return opendmarc_policy_parse_dmarc(pctx, domain, buf); } /************************************************************************** ** OPENDMARC_GET_POLICY_TO_ENFORCE -- What to do with this message. i.e. allow ** possible delivery, quarantine, or reject. ** Parameters: ** pctx -- A Policy context ** Returns: ** DMARC_PARSE_ERROR_NULL_CTX -- pctx == NULL ** DMARC_POLICY_ABSENT -- No DMARC record found ** DMARC_FROM_DOMAIN_ABSENT -- No From: domain ** DMARC_POLICY_NONE -- Accept if other policy allows ** DMARC_POLICY_REJECT -- Policy advises to reject the message ** DMARC_POLICY_QUARANTINE -- Policy advises to quarantine the message ** DMARC_POLICY_PASS -- Policy advises to accept the message ** Side Effects: ** Checks for domain alignment. ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_get_policy_to_enforce(DMARC_POLICY_T *pctx) { if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (pctx->p == DMARC_RECORD_P_UNSPECIFIED) return DMARC_POLICY_ABSENT; if (pctx->from_domain == NULL) return DMARC_FROM_DOMAIN_ABSENT; pctx->dkim_alignment = DMARC_POLICY_DKIM_ALIGNMENT_FAIL; pctx->spf_alignment = DMARC_POLICY_SPF_ALIGNMENT_FAIL; /* check for DKIM alignment */ if (pctx->dkim_domain != NULL && pctx->dkim_outcome == DMARC_POLICY_DKIM_OUTCOME_PASS) { if (opendmarc_policy_check_alignment(pctx->from_domain, pctx->dkim_domain, pctx->adkim) == 0) pctx->dkim_alignment = DMARC_POLICY_DKIM_ALIGNMENT_PASS; } /* check for SPF alignment */ if (pctx->spf_domain != NULL && pctx->spf_outcome == DMARC_POLICY_SPF_OUTCOME_PASS) { if (opendmarc_policy_check_alignment(pctx->from_domain, pctx->spf_domain, pctx->aspf) == 0) pctx->spf_alignment = DMARC_POLICY_SPF_ALIGNMENT_PASS; } /* * If dkim passes and dkim aligns OR spf passes and spf aligns * Accept the message. */ if (pctx->spf_alignment == DMARC_POLICY_SPF_ALIGNMENT_PASS || pctx->dkim_alignment == DMARC_POLICY_DKIM_ALIGNMENT_PASS) return DMARC_POLICY_PASS; if (pctx->organizational_domain != NULL) { switch (pctx->sp) { case DMARC_RECORD_P_REJECT: return DMARC_POLICY_REJECT; case DMARC_RECORD_P_QUARANTINE: return DMARC_POLICY_QUARANTINE; case DMARC_RECORD_P_NONE: return DMARC_POLICY_NONE; } } switch (pctx->p) { case DMARC_RECORD_P_REJECT: return DMARC_POLICY_REJECT; case DMARC_RECORD_P_QUARANTINE: return DMARC_POLICY_QUARANTINE; case DMARC_RECORD_P_NONE: return DMARC_POLICY_NONE; default: /* XXX -- shouldn't be possible */ return DMARC_POLICY_PASS; } } /******************************************************************************* ** OPENDMARC_PARSE_DMARC -- Parse a DMARC record ** ** Parameters: ** pctx -- A Policy context ** domain -- The domain looked up to get this DMARC record ** record -- The DMARC record to parse ** Returns: ** DMARC_PARSE_ERROR_EMPTY -- if any argument is NULL ** DMARC_PARSE_ERROR_BAD_VERSION -- if v= was bad ** DMARC_PARSE_ERROR_BAD_VALUE -- if value following = was bad ** DMARC_PARSE_ERROR_NO_REQUIRED_P -- if p= was absent ** DMARC_PARSE_OKAY -- On Success ** Side Effects: ** Allocates memory. *********************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_parse_dmarc(DMARC_POLICY_T *pctx, u_char *domain, u_char *record) { u_char *cp, *eqp, *ep, *sp, *vp; u_char copy[BUFSIZ]; u_char cbuf[512]; u_char vbuf[512]; if (pctx == NULL || domain == NULL || record == NULL || strlen((char *)record) == 0) { return DMARC_PARSE_ERROR_EMPTY; } /* * Set the defaults to detect missing required items. */ pctx->pct = -1; pctx->ri = -1; (void) memset((char *)copy, '\0', sizeof copy); (void) strlcpy((char *)copy, (char *)record, sizeof copy); ep = copy + strlen((char *)copy); for (cp = copy; cp != NULL && cp <= ep; ) { sp = (u_char *)strchr(cp, ';'); if (sp != NULL) *sp++ = '\0'; eqp = (u_char *)strchr((char *)cp, '='); if (eqp == NULL) { cp = sp; continue; } *eqp = '\0'; vp = eqp + 1; cp = opendmarc_util_cleanup(cp, cbuf, sizeof cbuf); if (cp == NULL || strlen((char *)cp) == 0) { cp = sp; continue; } vp = opendmarc_util_cleanup(vp, vbuf, sizeof vbuf); if (vp == NULL || strlen((char *)vp) == 0) { cp = sp; continue; } /* * cp nwo points to the token, and * vp now points to the token's value * both with all surronding whitepace removed. */ if (strcasecmp((char *)cp, "v") == 0) { /* * Yes, this is required to be first, but why * reject it if it is not first? */ if (strcasecmp((char *)vp, "DMARC1") != 0) { return DMARC_PARSE_ERROR_BAD_VERSION; } } else if (strcasecmp((char *)cp, "p") == 0) { /* * Be generous. Accept, for example, "p=r, p=rej, or any * left match of "reject". */ if (strncasecmp((char *)vp, "reject", strlen((char *)vp)) == 0) pctx->p = DMARC_RECORD_P_REJECT; else if (strncasecmp((char *)vp, "none", strlen((char *)vp)) == 0) pctx->p = DMARC_RECORD_P_NONE; else if (strncasecmp((char *)vp, "quarantine", strlen((char *)vp)) == 0) pctx->p = DMARC_RECORD_P_QUARANTINE; else { /* A totaly unknown value */ return DMARC_PARSE_ERROR_BAD_VALUE; } } else if (strcasecmp((char *)cp, "sp") == 0) { /* * Be generous. Accept, for example, "sp=r, p=rej, or any * left match of "reject". */ if (strncasecmp((char *)vp, "reject", strlen((char *)vp)) == 0) pctx->sp = DMARC_RECORD_P_REJECT; else if (strncasecmp((char *)vp, "none", strlen((char *)vp)) == 0) pctx->sp = DMARC_RECORD_P_NONE; else if (strncasecmp((char *)vp, "quarantine", strlen((char *)vp)) == 0) pctx->sp = DMARC_RECORD_P_QUARANTINE; else { /* A totaly unknown value */ return DMARC_PARSE_ERROR_BAD_VALUE; } } else if (strcasecmp((char *)cp, "adkim") == 0) { /* * Be generous. Accept, for example, "adkim=s, adkim=strict or any * left match of "strict". */ if (strncasecmp((char *)vp, "strict", strlen((char *)vp)) == 0) pctx->adkim = DMARC_RECORD_A_STRICT; else if (strncasecmp((char *)vp, "relaxed", strlen((char *)vp)) == 0) pctx->adkim = DMARC_RECORD_A_RELAXED; else { /* A totaly unknown value */ return DMARC_PARSE_ERROR_BAD_VALUE; } } else if (strcasecmp((char *)cp, "aspf") == 0) { /* * Be generous. Accept, for example, "aspf=s, aspf=strict or any * left match of "strict". */ if (strncasecmp((char *)vp, "strict", strlen((char *)vp)) == 0) pctx->aspf = DMARC_RECORD_A_STRICT; else if (strncasecmp((char *)vp, "relaxed", strlen((char *)vp)) == 0) pctx->aspf = DMARC_RECORD_A_RELAXED; else { /* A totaly unknown value */ return DMARC_PARSE_ERROR_BAD_VALUE; } } else if (strcasecmp((char *)cp, "pct") == 0) { errno = 0; pctx->pct = strtoul(vp, NULL, 10); if (pctx->pct < 0 || pctx->pct > 100) { return DMARC_PARSE_ERROR_BAD_VALUE; } if (errno == EINVAL || errno == ERANGE) { return DMARC_PARSE_ERROR_BAD_VALUE; } } else if (strcasecmp((char *)cp, "ri") == 0) { char *xp; for (xp = vp; *xp != '\0'; ++xp) { if (! isdigit((int)*xp)) return DMARC_PARSE_ERROR_BAD_VALUE; } errno = 0; pctx->ri = strtoul(vp, NULL, 10); if (errno == EINVAL || errno == ERANGE) { return DMARC_PARSE_ERROR_BAD_VALUE; } } else if (strcasecmp((char *)cp, "rf") == 0) { char *xp, *yp; /* * The list may be a comma delimilted list of choices. */ for (xp = vp; *xp != '\0'; ) { u_char xbuf[32]; yp = strchr(xp, ','); if (yp != NULL) *yp = '\0'; xp = opendmarc_util_cleanup(xp, xbuf, sizeof xbuf); if (xp != NULL && strlen((char *)xp) > 0) { /* * Be generous. Accept, for example, "rf=a, aspf=afrf or any * left match of "afrf". */ if (strncasecmp((char *)xp, "afrf", strlen((char *)xp)) == 0) pctx->rf |= DMARC_RECORD_RF_AFRF; else if (strncasecmp((char *)xp, "iodef", strlen((char *)xp)) == 0) pctx->aspf |= DMARC_RECORD_RF_IODEF; else { /* A totaly unknown value */ return DMARC_PARSE_ERROR_BAD_VALUE; } } else { return DMARC_PARSE_ERROR_BAD_VALUE; } if (yp != NULL) xp = yp+1; else break; } } else if (strcasecmp((char *)cp, "rua") == 0) { char *xp, *yp; /* * A possibly comma delimited list of URI of where to send reports. */ if (pctx->rua_list != NULL) return DMARC_PARSE_ERROR_BAD_VALUE; for (xp = vp; *xp != '\0'; ) { u_char xbuf[256]; yp = strchr(xp, ','); if (yp != NULL) *yp = '\0'; xp = opendmarc_util_cleanup(xp, xbuf, sizeof xbuf); if (xp != NULL && strlen((char *)xp) > 0) { pctx->rua_list = opendmarc_util_pushargv(xp, pctx->rua_list, &(pctx->rua_cnt)); } else { return DMARC_PARSE_ERROR_BAD_VALUE; } if (yp != NULL) xp = yp+1; else break; } } else if (strcasecmp((char *)cp, "ruf") == 0) { char *xp, *yp; /* * A possibly comma delimited list of URI of where to send * MARF reports. */ if (pctx->ruf_list != NULL) return DMARC_PARSE_ERROR_BAD_VALUE; for (xp = vp; *xp != '\0'; ) { u_char xbuf[256]; yp = strchr(xp, ','); if (yp != NULL) *yp = '\0'; xp = opendmarc_util_cleanup(xp, xbuf, sizeof xbuf); if (xp != NULL && strlen((char *)xp) > 0) { pctx->ruf_list = opendmarc_util_pushargv(xp, pctx->ruf_list, &(pctx->ruf_cnt)); } else { return DMARC_PARSE_ERROR_BAD_VALUE; } if (yp != NULL) xp = yp+1; else break; } } else if (strcasecmp((char *)cp, "fo") == 0) { char *xp, *yp; /* * A possibly colon delimited list of on character settings. */ for (xp = vp; *xp != '\0'; ) { u_char xbuf[256]; yp = strchr(xp, ':'); if (yp != NULL) *yp = '\0'; xp = opendmarc_util_cleanup(xp, xbuf, sizeof xbuf); if (xp != NULL && strlen((char *)xp) > 0) { switch ((int)*xp) { case '0': pctx->fo |= DMARC_RECORD_FO_0; break; case '1': pctx->fo |= DMARC_RECORD_FO_1; break; case 'd': case 'D': pctx->fo |= DMARC_RECORD_FO_D; break; case 's': case 'S': pctx->fo |= DMARC_RECORD_FO_S; break; default: return DMARC_PARSE_ERROR_BAD_VALUE; } } else { return DMARC_PARSE_ERROR_BAD_VALUE; } if (yp != NULL) xp = yp+1; else break; } } cp = sp; } if (pctx->p == DMARC_RECORD_P_UNSPECIFIED) { return DMARC_PARSE_ERROR_NO_REQUIRED_P; } /* * Set defaults for unspecifed tokens. */ if (pctx->adkim == DMARC_RECORD_A_UNSPECIFIED) pctx->adkim = DMARC_RECORD_A_RELAXED; if (pctx->aspf == DMARC_RECORD_A_UNSPECIFIED) pctx->aspf = DMARC_RECORD_A_RELAXED; if (pctx->pct < 0) pctx->pct = 100; if (pctx->rf == DMARC_RECORD_RF_UNSPECIFIED) pctx->rf = DMARC_RECORD_RF_AFRF; if (pctx->ri == -1) pctx->ri = 86400; if (pctx->fo == DMARC_RECORD_FO_UNSPECIFIED) pctx->fo = DMARC_RECORD_FO_0; if (pctx->from_domain == NULL) pctx->from_domain = strdup(domain); return DMARC_PARSE_OKAY; } /************************************************************************** ** OPENDMARC_POLICY_STORE_DMARC -- The application looked up the dmarc record ** and hands it to us here. ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_store_dmarc(DMARC_POLICY_T *pctx, u_char *dmarc_record, u_char *domain, u_char *organizationaldomain) { OPENDMARC_STATUS_T status; if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (dmarc_record == NULL) return DMARC_PARSE_ERROR_EMPTY; if (domain == NULL) return DMARC_PARSE_ERROR_NO_DOMAIN; status = opendmarc_policy_parse_dmarc(pctx, domain , dmarc_record); if (status != DMARC_PARSE_OKAY) return status; if (pctx->from_domain != NULL) (void) free(pctx->from_domain); pctx->from_domain = strdup(domain); if (organizationaldomain != NULL) { if (pctx->organizational_domain != NULL) (void) free(pctx->organizational_domain); pctx->organizational_domain = (u_char *)strdup(organizationaldomain); } return DMARC_PARSE_OKAY; } /************************************************************************** ** DMARC LOOKUP HOOKS ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_policy_fetch_pct(DMARC_POLICY_T *pctx, int *pctp) { if (pctx == NULL) { return DMARC_PARSE_ERROR_NULL_CTX; } if (pctp == NULL) { return DMARC_PARSE_ERROR_EMPTY; } *pctp = pctx->pct; return DMARC_PARSE_OKAY; } OPENDMARC_STATUS_T opendmarc_policy_fetch_adkim(DMARC_POLICY_T *pctx, int *adkim) { if (pctx == NULL) { return DMARC_PARSE_ERROR_NULL_CTX; } if (adkim == NULL) { return DMARC_PARSE_ERROR_EMPTY; } *adkim = pctx->adkim; return DMARC_PARSE_OKAY; } OPENDMARC_STATUS_T opendmarc_policy_fetch_aspf(DMARC_POLICY_T *pctx, int *aspf) { if (pctx == NULL) { return DMARC_PARSE_ERROR_NULL_CTX; } if (aspf == NULL) { return DMARC_PARSE_ERROR_EMPTY; } *aspf = pctx->aspf; return DMARC_PARSE_OKAY; } OPENDMARC_STATUS_T opendmarc_policy_fetch_p(DMARC_POLICY_T *pctx, int *p) { if (pctx == NULL) { return DMARC_PARSE_ERROR_NULL_CTX; } if (p == NULL) { return DMARC_PARSE_ERROR_EMPTY; } *p = pctx->p; return DMARC_PARSE_OKAY; } OPENDMARC_STATUS_T opendmarc_policy_fetch_sp(DMARC_POLICY_T *pctx, int *sp) { if (pctx == NULL) { return DMARC_PARSE_ERROR_NULL_CTX; } if (sp == NULL) { return DMARC_PARSE_ERROR_EMPTY; } *sp = pctx->sp; return DMARC_PARSE_OKAY; } u_char ** opendmarc_policy_fetch_rua(DMARC_POLICY_T *pctx, u_char *list_buf, size_t size_of_buf, int constant) { u_char *sp, *ep, *rp; int i; int ret; if (pctx == NULL) { return NULL; } if (list_buf != NULL && size_of_buf > 0) { (void) memset(list_buf, '\0', size_of_buf); sp = list_buf; ep = list_buf + size_of_buf; for (i = 0; i < pctx->rua_cnt; i++) { ret = opendmarc_policy_query_dmarc_xdomain(pctx, pctx->rua_list[i]); if (ret != DMARC_PARSE_OKAY) continue; for (rp = (pctx->rua_list)[i]; *rp != '\0'; ++rp) { *sp++ = *rp; if (sp >= (ep - 2)) break; } if (sp >= (ep - 2)) break; if (i != (pctx->rua_cnt -1)) *sp++ = ','; if (sp >= (ep - 2)) break; } } if (constant != 0) return pctx->rua_list; return opendmarc_util_dupe_argv(pctx->rua_list); } OPENDMARC_STATUS_T opendmarc_policy_fetch_alignment(DMARC_POLICY_T *pctx, int *dkim_alignment, int *spf_alignment) { if (pctx == NULL) { return DMARC_PARSE_ERROR_NULL_CTX; } if (dkim_alignment != NULL) { *dkim_alignment = pctx->dkim_alignment; } if (spf_alignment != NULL) { *spf_alignment = pctx->spf_alignment; } return DMARC_PARSE_OKAY; } u_char ** opendmarc_policy_fetch_ruf(DMARC_POLICY_T *pctx, u_char *list_buf, size_t size_of_buf, int constant) { u_char *sp, *ep, *rp; int i; int ret; if (pctx == NULL) { return NULL; } if (list_buf != NULL || size_of_buf > 0) { (void) memset(list_buf, '\0', size_of_buf); sp = list_buf; ep = list_buf + size_of_buf; for (i = 0; i < pctx->ruf_cnt; i++) { ret = opendmarc_policy_query_dmarc_xdomain(pctx, pctx->ruf_list[i]); if (ret != DMARC_PARSE_OKAY) continue; for (rp = (pctx->ruf_list)[i]; *rp != '\0'; ++rp) { *sp++ = *rp; if (sp >= (ep - 2)) break; } if (sp >= (ep - 2)) break; if (i != (pctx->ruf_cnt -1)) *sp++ = ','; if (sp >= (ep - 2)) break; } } if (constant != 0) return pctx->ruf_list; return opendmarc_util_dupe_argv(pctx->ruf_list); } OPENDMARC_STATUS_T opendmarc_policy_fetch_fo(DMARC_POLICY_T *pctx, int *fo) { if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (fo == NULL) return DMARC_PARSE_ERROR_EMPTY; if (pctx->ruf_list == NULL) *fo = DMARC_RECORD_FO_UNSPECIFIED; else *fo = pctx->fo; return DMARC_PARSE_OKAY; } OPENDMARC_STATUS_T opendmarc_policy_fetch_rf(DMARC_POLICY_T *pctx, int *rf) { if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (rf == NULL) return DMARC_PARSE_ERROR_EMPTY; if (pctx->ruf_list == NULL) *rf = DMARC_RECORD_RF_UNSPECIFIED; else *rf = pctx->rf; return DMARC_PARSE_OKAY; } /************************************************************************************************** ** OPENDMARC_POLICY_FETCH_UTILIZED_DOMAIN -- Return domain used to get the dmarc record ** Either the From: domain or the organizational domain ** Arguments ** pctx -- Address of a policy context ** buf -- Where to scribble result ** buflen -- Size of buffer ** Returns ** DMARC_PARSE_OKAY -- On success ** DMARC_PARSE_ERROR_NULL_CTX -- If context NULL ** DMARC_PARSE_ERROR_EMPTY -- If buf null or buflen 0 sized ** DMARC_PARSE_ERROR_NO_DOMAIN -- If neigher address is available **/ OPENDMARC_STATUS_T opendmarc_policy_fetch_utilized_domain(DMARC_POLICY_T *pctx, u_char *buf, size_t buflen) { u_char *which = NULL; if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (buf == NULL || buflen == 0) return DMARC_PARSE_ERROR_EMPTY; if (pctx->organizational_domain != NULL) which = pctx->organizational_domain; else if (pctx->from_domain != NULL) which = pctx->from_domain; if (which == NULL) return DMARC_PARSE_ERROR_NO_DOMAIN; # if HAVE_STRLCPY (void) strlcpy((char *)buf, (char *)which, buflen); # else (void) strncpy((char *)buf, (char *)which, buflen); # endif return DMARC_PARSE_OKAY; } /************************************************************************************************** ** OPENDMARC_POLICY_FETCH_FROM_DOMAIN -- Return domain parsed from stored From: header ** Arguments ** pctx -- Address of a policy context ** buf -- Where to scribble result ** buflen -- Size of buffer ** Returns ** DMARC_PARSE_OKAY -- On success ** DMARC_PARSE_ERROR_NULL_CTX -- If context NULL ** DMARC_PARSE_ERROR_EMPTY -- If buf null or buflen 0 sized ** DMARC_PARSE_ERROR_NO_DOMAIN -- If neigher address is available **/ OPENDMARC_STATUS_T opendmarc_policy_fetch_from_domain(DMARC_POLICY_T *pctx, u_char *buf, size_t buflen) { u_char *which = NULL; if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (buf == NULL || buflen == 0) return DMARC_PARSE_ERROR_EMPTY; if (pctx->from_domain != NULL) which = pctx->from_domain; if (which == NULL) return DMARC_PARSE_ERROR_NO_DOMAIN; # if HAVE_STRLCPY (void) strlcpy((char *)buf, (char *)which, buflen); # else (void) strncpy((char *)buf, (char *)which, buflen); # endif return DMARC_PARSE_OKAY; } /************************************************************************** ** OPENDMARC_GET_POLICY_TOKEN_USED -- Which policy was actually used ** ** Parameters: ** pctx -- A Policy context ** Returns: ** DMARC_PARSE_ERROR_NULL_CTX -- pctx == NULL ** DMARC_USED_POLICY_IS_P -- Domain policy is used ** DMARC_USED_POLICY_IS_SP -- Sub-domain policy is used ***************************************************************************/ OPENDMARC_STATUS_T opendmarc_get_policy_token_used(DMARC_POLICY_T *pctx) { if (pctx == NULL) return DMARC_PARSE_ERROR_NULL_CTX; if (pctx->organizational_domain != NULL && pctx->sp != DMARC_RECORD_P_UNSPECIFIED) return DMARC_USED_POLICY_IS_SP; else return DMARC_USED_POLICY_IS_P; } /****************************************************************************** ** OPENDMARC_POLICY_LIBRARY_DNS_HOOK -- Internal hook for dmarc_dns_get_record *******************************************************************************/ void opendmarc_policy_library_dns_hook(int *nscountp, struct sockaddr_in *nsaddr_list) { int i; if (nscountp == NULL || nsaddr_list == NULL) return; if (Opendmarc_Libp == NULL) return; if (Opendmarc_Libp->nscount == 0 || Opendmarc_Libp->nscount >= MAXNS) return; for (i = 0; i < Opendmarc_Libp->nscount; i++) { nsaddr_list[i] = Opendmarc_Libp->nsaddr_list[i]; } *nscountp = i; return; } /************************************************************************** ** OPENDMARC_POLICY_STATUS_TO_STR -- Convert the integer return ** of type OPENDMARC_STATUS_T into ** a human readable string. ** Parameters: ** status -- The status for which to return a string ** Returns: ** NULL -- On error ** const char * -- On success ***************************************************************************/ const char * opendmarc_policy_status_to_str(OPENDMARC_STATUS_T status) { char *msg = "Undefine Value"; switch (status) { case DMARC_PARSE_OKAY: msg = "Success. No Errors"; break; case DMARC_PARSE_ERROR_EMPTY: msg = "Function called with nothing to parse"; break; case DMARC_PARSE_ERROR_NULL_CTX: msg ="Function called with NULL Context"; break; case DMARC_PARSE_ERROR_BAD_VERSION: msg = "Found DMARC record contained a bad v= value"; break; case DMARC_PARSE_ERROR_BAD_VALUE: msg = "Found DMARC record contained a bad token value"; break; case DMARC_PARSE_ERROR_NO_REQUIRED_P: msg = "Found DMARC record lacked a required p= entry"; break; case DMARC_PARSE_ERROR_NO_DOMAIN: msg = "Function found the domain empty, e.g. \"<>\""; break; case DMARC_PARSE_ERROR_NO_ALLOC: msg = "Memory allocation error"; break; case DMARC_PARSE_ERROR_BAD_SPF_MACRO: msg = "Attempt to store an illegal value"; break; case DMARC_DNS_ERROR_NO_RECORD: msg = "Looked up domain lacked a DMARC record"; break; case DMARC_DNS_ERROR_NXDOMAIN: msg = "Looked up domain did not exist"; break; case DMARC_DNS_ERROR_TMPERR: msg = "DNS lookup of domain tempfailed"; break; case DMARC_TLD_ERROR_UNKNOWN: msg = "Attempt to load an unknown TLD file type"; break; case DMARC_FROM_DOMAIN_ABSENT: msg = "No From: domain was supplied"; break; case DMARC_POLICY_ABSENT: msg = "Policy up to you. No DMARC record found"; break; case DMARC_POLICY_PASS: msg = "Policy OK so accept message"; break; case DMARC_POLICY_REJECT: msg = "Policy says to reject message"; break; case DMARC_POLICY_QUARANTINE: msg = "Policy says to quarantine message"; break; case DMARC_POLICY_NONE: msg = "Policy says to monitor and report"; break; } return msg; } /******************************************************************************* ** OPENDMARC_POLICY_TO_BUF -- Dump the DMARC_POLICY_T to a user supplied buffer ** Arguments: ** pctx A pointer to a filled in DMARC_POLICY_T sttucture ** buf A char * buffer ** buflen The size of the char * buffer ** Returns: ** 0 On success ** >0 On failure, and fills errno with the error ** Side Effects: ** Blindly overwrites buffer. *******************************************************************************/ int opendmarc_policy_to_buf(DMARC_POLICY_T *pctx, char *buf, size_t buflen) { char nbuf[32]; int i; if (pctx == NULL || buf == NULL || buflen == 0) return errno = EINVAL; (void) memset(buf, '\0', buflen); if (strlcat(buf, "IP_ADDR=", buflen) >= buflen) return E2BIG; if (pctx->ip_addr != NULL) if (strlcat(buf, pctx->ip_addr, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "IP_TYPE=", buflen) >= buflen) return E2BIG; if (pctx->ip_addr != NULL) { if (pctx->ip_type == DMARC_POLICY_IP_TYPE_IPV4) { if (strlcat(buf, "IPv4", buflen) >= buflen) return E2BIG; } else if (pctx->ip_type == DMARC_POLICY_IP_TYPE_IPV6) { if (strlcat(buf, "IPv6", buflen) >= buflen) return E2BIG; } } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "SPF_DOMAIN=", buflen) >= buflen) return E2BIG; if (pctx->spf_domain != NULL) if (strlcat(buf, pctx->spf_domain, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "SPF_ORIGIN=", buflen) >= buflen) return E2BIG; if (pctx->spf_origin != 0) { if (pctx->spf_origin == DMARC_POLICY_SPF_ORIGIN_MAILFROM) { if (strlcat(buf, "MAILFROM", buflen) >= buflen) return E2BIG; } else if (pctx->spf_origin == DMARC_POLICY_SPF_ORIGIN_HELO) { if (strlcat(buf, "HELO", buflen) >= buflen) return E2BIG; } } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "SPF_OUTCOME=", buflen) >= buflen) return E2BIG; switch (pctx->spf_outcome) { default: case DMARC_POLICY_DKIM_OUTCOME_NONE: if (strlcat(buf, "NONE", buflen) >= buflen) return E2BIG; break; case DMARC_POLICY_DKIM_OUTCOME_PASS: if (strlcat(buf, "PASS", buflen) >= buflen) return E2BIG; break; case DMARC_POLICY_DKIM_OUTCOME_FAIL: if (strlcat(buf, "FAIL", buflen) >= buflen) return E2BIG; break; case DMARC_POLICY_DKIM_OUTCOME_TMPFAIL: if (strlcat(buf, "TMPFAIL", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "SPF_HUMAN_OUTCOME=", buflen) >= buflen) return E2BIG; if (pctx->spf_human_outcome != NULL) if (strlcat(buf, pctx->spf_human_outcome, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "DKIM_FINAL=", buflen) >= buflen) return E2BIG; switch (pctx->dkim_final) { case TRUE: if (strlcat(buf, "TRUE", buflen) >= buflen) return E2BIG; break; default: case FALSE: if (strlcat(buf, "FALSE", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "DKIM_DOMAIN=", buflen) >= buflen) return E2BIG; if (pctx->dkim_domain != NULL) if (strlcat(buf, pctx->dkim_domain, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "DKIM_SELECTOR=", buflen) >= buflen) return E2BIG; if (pctx->dkim_selector != NULL) if (strlcat(buf, pctx->dkim_selector, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "DKIM_OUTOME=", buflen) >= buflen) return E2BIG; switch (pctx->dkim_outcome) { default: case DMARC_POLICY_DKIM_OUTCOME_NONE: if (strlcat(buf, "NONE", buflen) >= buflen) return E2BIG; break; case DMARC_POLICY_DKIM_OUTCOME_PASS: if (strlcat(buf, "PASS", buflen) >= buflen) return E2BIG; break; case DMARC_POLICY_DKIM_OUTCOME_FAIL: if (strlcat(buf, "FAIL", buflen) >= buflen) return E2BIG; break; case DMARC_POLICY_DKIM_OUTCOME_TMPFAIL: if (strlcat(buf, "TMPFAIL", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "DKIM_HUMAN_OUTCOME=", buflen) >= buflen) return E2BIG; if (pctx->dkim_human_outcome != NULL) if (strlcat(buf, pctx->dkim_human_outcome, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "DKIM_ALIGNMENT=", buflen) >= buflen) return E2BIG; switch (pctx->dkim_alignment) { case DMARC_POLICY_DKIM_ALIGNMENT_PASS: if (strlcat(buf, "PASS", buflen) >= buflen) return E2BIG; break; default: case DMARC_POLICY_DKIM_ALIGNMENT_FAIL: if (strlcat(buf, "FAIL", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "SPF_ALIGNMENT=", buflen) >= buflen) return E2BIG; switch (pctx->spf_alignment) { case DMARC_POLICY_SPF_ALIGNMENT_PASS: if (strlcat(buf, "PASS", buflen) >= buflen) return E2BIG; break; default: case DMARC_POLICY_SPF_ALIGNMENT_FAIL: if (strlcat(buf, "FAIL", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "H_ERRNO=", buflen) >= buflen) return E2BIG; switch (pctx->h_error) { case HOST_NOT_FOUND: if (strlcat(buf, "HOST_NOT_FOUND", buflen) >= buflen) return E2BIG; break; case TRY_AGAIN: if (strlcat(buf, "TRY_AGAIN", buflen) >= buflen) return E2BIG; break; case NO_RECOVERY: if (strlcat(buf, "NO_RECOVERY", buflen) >= buflen) return E2BIG; break; case NO_DATA: if (strlcat(buf, "NO_DATA", buflen) >= buflen) return E2BIG; break; case NETDB_INTERNAL: if (strlcat(buf, "NETDB_INTERNAL", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "ADKIM=", buflen) >= buflen) return E2BIG; switch (pctx->adkim) { case DMARC_RECORD_A_UNSPECIFIED: if (strlcat(buf, "UNSPECIFIED", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_A_STRICT: if (strlcat(buf, "STRICT", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_A_RELAXED: if (strlcat(buf, "RELAXED", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "ASPF=", buflen) >= buflen) return E2BIG; switch (pctx->aspf) { case DMARC_RECORD_A_UNSPECIFIED: if (strlcat(buf, "UNSPECIFIED", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_A_STRICT: if (strlcat(buf, "STRICT", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_A_RELAXED: if (strlcat(buf, "RELAXED", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "P=", buflen) >= buflen) return E2BIG; switch (pctx->p) { case DMARC_RECORD_A_UNSPECIFIED: if (strlcat(buf, "UNSPECIFIED", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_P_NONE: if (strlcat(buf, "NONE", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_P_QUARANTINE: if (strlcat(buf, "QUARANTINE", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_P_REJECT: if (strlcat(buf, "REJECT", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "SP=", buflen) >= buflen) return E2BIG; switch (pctx->sp) { case DMARC_RECORD_A_UNSPECIFIED: if (strlcat(buf, "UNSPECIFIED", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_P_NONE: if (strlcat(buf, "NONE", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_P_QUARANTINE: if (strlcat(buf, "QUARANTINE", buflen) >= buflen) return E2BIG; break; case DMARC_RECORD_P_REJECT: if (strlcat(buf, "REJECT", buflen) >= buflen) return E2BIG; break; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "PCT=", buflen) >= buflen) return E2BIG; (void) snprintf(nbuf, sizeof nbuf, "%d", pctx->pct); if (strlcat(buf, nbuf, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "RF=", buflen) >= buflen) return E2BIG; if (pctx->rf == 0) { if (strlcat(buf, "UNSPECIFIED", buflen) >= buflen) return E2BIG; } if ((pctx->rf&DMARC_RECORD_RF_AFRF) != 0) { if (strlcat(buf, "AFRF", buflen) >= buflen) return E2BIG; } if ((pctx->rf&DMARC_RECORD_RF_IODEF) != 0 && (pctx->rf&DMARC_RECORD_RF_AFRF) != 0) { if (strlcat(buf, ",", buflen) >= buflen) return E2BIG; } if ((pctx->rf&DMARC_RECORD_RF_IODEF) != 0) { if (strlcat(buf, "IODEF", buflen) >= buflen) return E2BIG; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "RI=", buflen) >= buflen) return E2BIG; (void) snprintf(nbuf, sizeof nbuf, "%d", pctx->ri); if (strlcat(buf, nbuf, buflen) >= buflen) return E2BIG; if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "RUA=", buflen) >= buflen) return E2BIG; for (i = 0; i < pctx->rua_cnt; ++i) { if (i > 0) { if (strlcat(buf, ",", buflen) >= buflen) return E2BIG; } if (strlcat(buf, (pctx->rua_list)[i], buflen) >= buflen) return E2BIG; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "RUF=", buflen) >= buflen) return E2BIG; for (i = 0; i < pctx->ruf_cnt; ++i) { if (i > 0) { if (strlcat(buf, ",", buflen) >= buflen) return E2BIG; } if (strlcat(buf, (pctx->ruf_list)[i], buflen) >= buflen) return E2BIG; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; if (strlcat(buf, "FO=", buflen) >= buflen) return E2BIG; if (pctx->ruf_list == NULL || pctx->fo == DMARC_RECORD_FO_UNSPECIFIED) { if (strlcat(buf, "UNSPECIFIED", buflen) >= buflen) return E2BIG; } if ((pctx->fo&DMARC_RECORD_FO_0) != 0) { if (strlcat(buf, "0:", buflen) >= buflen) return E2BIG; } if ((pctx->fo&DMARC_RECORD_FO_1) != 0) { if (strlcat(buf, "1:", buflen) >= buflen) return E2BIG; } if ((pctx->fo&DMARC_RECORD_FO_D) != 0) { if (strlcat(buf, "d:", buflen) >= buflen) return E2BIG; } if ((pctx->fo&DMARC_RECORD_FO_S) != 0) { if (strlcat(buf, "s:", buflen) >= buflen) return E2BIG; } if (strlcat(buf, "\n", buflen) >= buflen) return E2BIG; return 0; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_spf.c000066400000000000000000001500311416002254500233340ustar00rootroot00000000000000/******************************************************************** ** OPENDMARC_SPF.C -- Process the spf record of the inbound message **********************************************************************/ # include "opendmarc_internal.h" /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ # include "dmarc.h" #if WITH_SPF #if HAVE_SPF2_H // Here we have spf.h, so libspf2 is available. SPF_CTX_T * opendmarc_spf2_alloc_ctx() { SPF_CTX_T *spfctx = NULL; spfctx = malloc(sizeof(SPF_CTX_T)); if (spfctx == NULL) return NULL; (void) memset(spfctx, '\0', sizeof(SPF_CTX_T)); spfctx->spf_server = SPF_server_new(SPF_DNS_CACHE, 0); spfctx->spf_request = SPF_request_new(spfctx->spf_server); return spfctx; } SPF_CTX_T * opendmarc_spf2_free_ctx(SPF_CTX_T *spfctx) { if (spfctx == NULL) return spfctx; if (spfctx->spf_response != NULL) SPF_response_free(spfctx->spf_response); if (spfctx->spf_request != NULL) SPF_request_free(spfctx->spf_request); if (spfctx->spf_server != NULL) SPF_server_free(spfctx->spf_server); (void) free(spfctx); spfctx = NULL; return spfctx; } int opendmarc_spf2_find_mailfrom_domain(SPF_CTX_T *spfctx, char *raw_address, char *mailfrom, size_t mailfrom_len, int *use_flag) { char copy[sizeof spfctx->mailfrom_addr]; char *cp; char *ep; if (use_flag != NULL) *use_flag = FALSE; if (spfctx == NULL) return EINVAL; if (mailfrom == NULL || raw_address == NULL) return EINVAL; (void) memset(copy, '\0', sizeof copy); (void) strlcpy(copy, raw_address, sizeof copy); cp = strrchr(copy, '<'); if (cp == NULL) cp = copy; else ++cp; ep = strchr(cp, '>'); if (ep != NULL) *ep = '\0'; ep = strchr(cp, '@'); if (ep != NULL) { cp = ep+1; if (use_flag != NULL) *use_flag = TRUE; } if (strcasecmp(cp, "MAILER_DAEMON") == 0) cp = ""; (void) memset(mailfrom, '\0', mailfrom_len); (void) strlcpy(mailfrom, cp, mailfrom_len); return 0; } int opendmarc_spf2_specify_ip_address(SPF_CTX_T *spfctx, char *ip_address, size_t ip_address_len) { if (spfctx == NULL) return EINVAL; if (ip_address == NULL) return EINVAL; /* * we don't care at this point if it is ipv6 or ipv4 */ SPF_request_set_ipv4_str(spfctx->spf_request, ip_address); SPF_request_set_ipv6_str(spfctx->spf_request, ip_address); return 0; } int opendmarc_spf2_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int softfail_okay_flag, char *human_readable, size_t human_readable_len, int *used_mfrom) { SPF_CTX_T * ctx; int ret; char xbuf[BUFSIZ]; char helo[512]; char mfrom[512]; if (used_mfrom != NULL) *used_mfrom = FALSE; (void) memset(xbuf, '\0', sizeof xbuf); ctx = opendmarc_spf2_alloc_ctx(); if (ctx == NULL) { if (human_readable != NULL) (void) strlcpy(human_readable, strerror(errno), human_readable_len); return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } if (ip_address == NULL) { if (human_readable != NULL) (void) strlcpy(human_readable, "No IP address available", human_readable_len); ctx = opendmarc_spf2_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_FAIL; } if (mail_from_domain == NULL && helo_domain == NULL) { if (human_readable != NULL) (void) strlcpy(human_readable, "No Domain name available to check", human_readable_len); ctx = opendmarc_spf2_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_FAIL; } ret = opendmarc_spf2_specify_ip_address(ctx, ip_address, strlen(ip_address)); if (ret != 0) { if (human_readable != NULL) (void) strlcpy(human_readable, strerror(errno), human_readable_len); ctx = opendmarc_spf2_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } ret = opendmarc_spf2_find_mailfrom_domain(ctx, mail_from_domain, mfrom, sizeof mfrom, used_mfrom); if (ret != 0 || *used_mfrom == FALSE) { (void) strlcpy(helo, helo_domain, sizeof helo); SPF_request_set_helo_dom(ctx->spf_request, helo); } else { SPF_request_set_env_from(ctx->spf_request, mfrom); } ctx->spf_response = NULL; SPF_request_query_mailfrom(ctx->spf_request, &(ctx->spf_response)); if (human_readable != NULL) (void) strlcpy(human_readable, SPF_strresult(SPF_response_result(ctx->spf_response)), human_readable_len); ctx->spf_result = SPF_response_result(ctx->spf_response); ret = (int) ctx->spf_result; ctx = opendmarc_spf2_free_ctx(ctx); if (ret != SPF_RESULT_PASS) { switch (ret) { case SPF_RESULT_NONE: return DMARC_POLICY_SPF_OUTCOME_NONE; case SPF_RESULT_NEUTRAL: case SPF_RESULT_SOFTFAIL: if (softfail_okay_flag == TRUE) return DMARC_POLICY_SPF_OUTCOME_PASS; else return DMARC_POLICY_SPF_OUTCOME_FAIL; break; case SPF_RESULT_TEMPERROR: return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } return DMARC_POLICY_SPF_OUTCOME_FAIL; } return DMARC_POLICY_SPF_OUTCOME_PASS; } #else /* HAVE_SPF2_H */ // No spf.h so no libspf2 to use so we use the internal spf check. #ifndef TRUE # define TRUE (1) #endif #ifndef FALSE # define FALSE (0) #endif #ifndef MAXDNSHOSTNAME # define MAXDNSHOSTNAME (256) #endif #define SPF_MAX_SPF_RECORD_LEN (4096) #define SPF_IN_TOKEN_NONE (0) #define SPF_IN_TOKEN_VERSION (1) #define SPF_IN_TOKEN_A (2) #define SPF_IN_TOKEN_MX (3) #define SPF_IN_TOKEN_IP4 (4) #define SPF_IN_TOKEN_IP6 (5) #define SPF_IN_TOKEN_PTR (6) #define SPF_IN_TOKEN_INCLUDE (7) #define SPF_IN_TOKEN_REDIRECT (8) #define SPF_IN_TOKEN_EXISTS (9) #define SPF_IN_TOKEN_EXP (10) const char * opendmarc_spf_status_to_msg(SPF_CTX_T *spfctx, int status) { const char *r; if (status != 0 && spfctx != NULL && spfctx->did_get_exp) return spfctx->exp_buf; switch (status) { #define SPF_RETURN_UNDECIDED (-1) case SPF_RETURN_UNDECIDED: r = "Undecided"; break; #define SPF_RETURN_OK_PASSED (0) case SPF_RETURN_OK_PASSED: r = "Passed"; break; #define SPF_RETURN_INTERNAL (5) case SPF_RETURN_INTERNAL: r = "No Domain To Check"; break; #define SPF_RETURN_RECORD_TOOLONG (6) case SPF_RETURN_RECORD_TOOLONG: r = "Record Too Big"; break; #define SPF_RETURN_BAD_SYNTAX_VERSION (7) case SPF_RETURN_BAD_SYNTAX_VERSION: r = "Bad Version"; break; #define SPF_RETURN_A_BUT_NO_A_RECORD (8) case SPF_RETURN_A_BUT_NO_A_RECORD: r = "Required 'A' lookup failed to find 'A' records"; break; #define SPF_RETURN_DASH_FORCED_HARD_FAIL (9) case SPF_RETURN_DASH_FORCED_HARD_FAIL: r = "Required 'A' bu no 'A' records with -a specified"; break; #define SPF_RETURN_A_BUT_BAD_SYNTAX (10) case SPF_RETURN_A_BUT_BAD_SYNTAX: r = "IP Address Badly Formed"; break; #define SPF_RETURN_BAD_SYNTAX_INCLUDE (11) case SPF_RETURN_BAD_SYNTAX_INCLUDE: r = "'INCLUDE' Syntax Error"; break; #define SPF_RETURN_INCLUDE_NO_DOMAIN (12) case SPF_RETURN_INCLUDE_NO_DOMAIN: r = "'INCLUDE' Domain Lookup Failed"; break; #define SPF_RETURN_BAD_SYNTAX_REDIRECT (13) case SPF_RETURN_BAD_SYNTAX_REDIRECT: r = "'REDIRECT' Syntax Error"; break; #define SPF_RETURN_REDIRECT_NO_DOMAIN (14) case SPF_RETURN_REDIRECT_NO_DOMAIN: r = "'REDIRECT' Domain Lookup Failed"; break; #define SPF_RETURN_DASH_ALL_HARD_FAIL (15) case SPF_RETURN_DASH_ALL_HARD_FAIL: r = "Hard Fail: Reject"; break; #define SPF_RETURN_TILDE_ALL_SOFT_FAIL (16) case SPF_RETURN_TILDE_ALL_SOFT_FAIL: r = "Soft Fail: Subject to Policy"; break; #define SPF_RETURN_QMARK_ALL_NEUTRAL (17) case SPF_RETURN_QMARK_ALL_NEUTRAL: r = "Neutral Fail: Subject to Policy"; break; #define SPF_RETURN_UNKNOWN_KEYWORD (18) case SPF_RETURN_UNKNOWN_KEYWORD: r = "Unrecognized Keyword"; break; #define SPF_RETURN_BAD_MACRO_SYNTAX (19) case SPF_RETURN_BAD_MACRO_SYNTAX: r = "Macros Used But Syntax Bad"; break; #define SPF_RETURN_NOT_EXISTS_HARDFAIL (20) case SPF_RETURN_NOT_EXISTS_HARDFAIL: r = "'A' Record lookup, No Such Host"; break; #define SPF_RETURN_BAD_SYNTAX_EXISTS (21) case SPF_RETURN_BAD_SYNTAX_EXISTS: r = "'EXISTS' Omitted A domain"; break; #define SPF_RETURN_BAD_SYNTAX_EXP (22) case SPF_RETURN_BAD_SYNTAX_EXP: r = "'EXP' Bad Syntax"; break; #define SPF_RETURN_NOT_EXP_HARDFAIL (23) case SPF_RETURN_NOT_EXP_HARDFAIL: r = "'-EXP' Hard Failure"; break; #define SPF_RETURN_TOO_MANY_DNS_QUERIES (24) case SPF_RETURN_TOO_MANY_DNS_QUERIES: r = "Too Many DNS Lookups Without Success."; break; default: #define SPF_RETURN_INTERNAL_ERROR (25) r = "Undefined Internal Error"; break; } return r; } /**************************************************************** ** SPF_STATUS_TO_PASS -- convert ctx->status into a decision ** Returns 1 for pass ** Returns 0 for fail ** Returns -1 for maybe fail (~all means you decide) ****************************************************************/ int opendmarc_spf_status_to_pass(int status, int none_pass) { int r; switch (status) { case SPF_RETURN_UNDECIDED: if (none_pass == 1) r = 1; else r = 0; break; case SPF_RETURN_OK_PASSED: r = 1; break; case SPF_RETURN_INTERNAL: r = 0; break; case SPF_RETURN_RECORD_TOOLONG: r = 0; break; case SPF_RETURN_BAD_SYNTAX_VERSION: r = 0; break; case SPF_RETURN_A_BUT_NO_A_RECORD: r = 0; break; case SPF_RETURN_DASH_FORCED_HARD_FAIL: r = 0; break; case SPF_RETURN_A_BUT_BAD_SYNTAX: r = 0; break; case SPF_RETURN_BAD_SYNTAX_INCLUDE: r = 0; break; case SPF_RETURN_INCLUDE_NO_DOMAIN: r = 0; break; case SPF_RETURN_BAD_SYNTAX_REDIRECT: r = 0; break; case SPF_RETURN_REDIRECT_NO_DOMAIN: r = 0; break; case SPF_RETURN_DASH_ALL_HARD_FAIL: r = 0; break; case SPF_RETURN_TILDE_ALL_SOFT_FAIL: r = -1; break; case SPF_RETURN_QMARK_ALL_NEUTRAL: r = 1; break; case SPF_RETURN_UNKNOWN_KEYWORD: r = 0; break; case SPF_RETURN_BAD_MACRO_SYNTAX: r = 0; break; case SPF_RETURN_NOT_EXISTS_HARDFAIL: r = 0; break; case SPF_RETURN_BAD_SYNTAX_EXISTS: r = 0; break; case SPF_RETURN_BAD_SYNTAX_EXP: r = 0; break; case SPF_RETURN_TOO_MANY_DNS_QUERIES: r = 0; break; case SPF_RETURN_INTERNAL_ERROR: r = 0; break; default: r = 0; break; } return r; } /* ** OPENDMARC_SPF_CIDR_ADDRESS -- see if an IP address is covered by a CIDR ** expression ** ** Parameters: ** ip -- IP address to test, in network byte order ** cidr_addr -- CIDR expression to which to compare it ** ** Return value: ** TRUE iff "ip" is inside (or equal to) "cidr_addr". */ int opendmarc_spf_cidr_address(uint32_t ip, char *cidr_addr) { char *cidr; char *cp, *ep; char buf[BUFSIZ]; uint32_t i; uint32_t bits; uint32_t mask; uint32_t high, low; struct sockaddr_in sin; if (cidr_addr == NULL) return FALSE; (void) memset(buf, '\0', sizeof buf); (void) strlcpy(buf, cidr_addr, sizeof buf); cidr = strchr(buf, '/'); if (cidr == NULL) { if (inet_aton(cidr_addr, &sin.sin_addr) != 0) { (void)memcpy(&low, &sin.sin_addr.s_addr, sizeof(sin.sin_addr.s_addr)); (void)memcpy(&high, &sin.sin_addr.s_addr, sizeof(sin.sin_addr.s_addr)); if (ip >= low && ip <= high) return TRUE; } return FALSE; } *cidr++ = '\0'; bits = strtoul(cidr, NULL, 10); cp = buf; ep = strchr(buf, '.'); if (ep == NULL) return FALSE; *ep++ = '\0'; i = strtoul(cp, NULL, 10) << 24; cp = ep; ep = strchr(cp, '.'); if (ep == NULL) return FALSE; *ep++ = '\0'; i += strtoul(cp, NULL, 10) << 16; cp = ep; ep = strchr(cp, '.'); if (ep == NULL) return FALSE; *ep++ = '\0'; i += strtoul(cp, NULL, 10) << 8; cp = ep; i += strtoul(cp, NULL, 10); mask = (bits == 0) ? 0 : ~(u_long)0 << (32 - bits); low = i & mask; high = i | (~mask & 0xFFFFFFFF); ip = ntohl(ip); if (ip >= low && ip <= high) return TRUE; return FALSE; } /************************************************************** ** opendmarc_spf_reverse -- Reverse doman name on dot or ip address ** on dot or colon boundaries ** e.g. a.b.c becomes c.b.a ** and FFFF::EEEE becomes EEEE::FFFF ** and 12.34.56.78 becomes 78.56.34.12 ** Input: ** str -- the string to reverse ** buf -- buffer to hold the reversed string ** buflen -- size in bytes of the buffer ** Returns: ** NULL On error ** buf On success ** Side Effects: ** Overwrites previous contents of buf ****************************************************************/ static char * opendmarc_spf_reverse(char *str, char *buf, size_t buflen) { char * sp; char * ep; char * dotp; int dotorcolon = 0; char dotorcolon_str[2]; char dupe[BUFSIZ]; if (str == NULL || buf == NULL || buflen == 0) return NULL; if (buflen > BUFSIZ) buflen = BUFSIZ; (void) memset(buf, '\0', buflen); (void) memset(dupe, '\0', buflen + 1); (void) strlcpy(dupe, str, buflen + 1); dotp = strchr(dupe, '.'); if (dotp != NULL) dotorcolon = '.'; else { dotp = strchr(dupe, ':'); if (dotp != NULL) dotorcolon = ':'; } if (dotorcolon == 0) return NULL; dotorcolon_str[0] = dotorcolon; dotorcolon_str[1] = '\0'; ep = dupe + strlen(dupe); /* * strip tailing dotorcolons. */ do { for (sp = ep; sp >= dupe; --sp) if (*sp == dotorcolon) break; if (sp < dupe) { strlcat(buf, sp+1, buflen); break; } ep = sp; if (*sp == dotorcolon) ++sp; if (*sp != '\0') strlcat(buf, sp, buflen); if (*ep == dotorcolon) { strlcat(buf, dotorcolon_str, buflen); *ep = '\0'; --ep; } } while (sp >= dupe); return buf; } typedef struct { u_int values[8]; int nvalues; } INT_ARY_T; typedef struct { char strs[8][32]; int nstrs; } TXT_ARY_T; static int opendmarc_spf_ipv6_cidr_populate(TXT_ARY_T *lp, INT_ARY_T *ap) { int i, f; int dots; /* * Populate the base, expected variations are: * ::ipv4 * :FFFF:ipv4 * :hex::hex: ... */ /* Clear to zero in case we got an auto array */ for (i = 0; i < 8; ++i) ap->values[i] = 0; f = 0; /* index into the output array of values. */ for (i = 0; i < lp->nstrs; ++i) { int value; int value2; char *cp = NULL; dots = 0; if (i == 0) { char *dp; /* * The rightmost address might be IPv4 */ for (dp = lp->strs[0]; *dp != '\0'; ++dp) if (*dp == '.') ++dots; } if (i >= 0 || dots == 0) { /* * No dots or not the rightmost value, then * a hexedecimal value. */ if (lp->strs[i] != NULL) { ap->values[f] = strtoul(lp->strs[i], NULL, 16); f = f + 1; } continue; } /* * From here down deals with the special case of * an ipv4 address at the righthand side. */ if (dots > 3) { return errno = EINVAL; } if (dots) { cp = strrchr(lp->strs[0], '.'); value2 = strtoul(cp+1, NULL, 10); for (cp = cp-1; cp > lp->strs[0]; --cp) if (*cp == '.') break; if (*cp == '.') value = strtoul(cp+1, NULL, 10); else value = strtoul(cp, NULL, 10); value <<= 8; value &= 0xFFFF; value += value2; ap->values[0] = value; ap->values[1] = 0; } if (dots > 1) { for (cp = cp-1; cp > lp->strs[0]; --cp) if (*cp == '.') break; if (*cp == '.') value = strtoul(cp+1, NULL, 10); else value = strtoul(cp+1, NULL, 10); ap->values[1] = value; } if (dots > 2) { cp = lp->strs[0]; value = strtoul(cp, NULL, 10); value <<= 8; ap->values[1] += value; } f += 2; continue; } ap->nvalues = f; return 0; } static int opendmarc_spf_ipv6_explode(char *str, TXT_ARY_T *ap) { char *cp, *ep; int i; int ncolons; char copy[128]; if (str == NULL || ap == NULL) return errno = EINVAL; (void) memset(ap, '\0', sizeof(TXT_ARY_T)); (void) memset(copy, '\0', sizeof copy); (void) strlcpy(copy, str, sizeof copy); ncolons = 0; for (cp = copy; *cp != '\0'; ++cp) if (*cp == ':') ++ncolons; ncolons = 7 - ncolons; cp = copy; for (i = 7; i >= 0; i--) { ep = strchr(cp, ':'); if (ep != NULL) *ep = '\0'; if (strlen(cp) == 0) { (void) strlcpy((char *)ap->strs[i], "0", sizeof ap->strs[i]); } else { (void) strlcpy((char *)ap->strs[i], cp, sizeof ap->strs[i]); } if (ep && *(ep + 1) == ':' && ncolons > 0) { for (i--; i >= 0 && ncolons != 0; --ncolons, --i) { (void) strlcpy((char *)ap->strs[i], "0", sizeof ap->strs[i]); } i+= 1; } cp = ep+1; } ap->nstrs = 8 - i; return 0; } int opendmarc_spf_ipv6_cidr_check(char *ipv6_str, char *cidr_string) { int cidr_bits; TXT_ARY_T ipv6_ary; TXT_ARY_T cidr_ary; INT_ARY_T base_iary; INT_ARY_T low_iary; INT_ARY_T hi_iary; INT_ARY_T ip_iary; char * cp; int ret; int i; int taghi, taglo; char cidr_str[256]; if (ipv6_str == NULL || cidr_string == NULL) { return FALSE; } if (strchr(ipv6_str, ':') == NULL) return FALSE; if (strchr(cidr_string, ':') == NULL) return FALSE; (void) strlcpy(cidr_str, cidr_string, sizeof cidr_str); cp = strchr(cidr_str, '/'); if (cp == NULL) { cidr_bits = 0; } else { cidr_bits = strtoul(cp+1, NULL, 10); *cp = '\0'; cp = strchr(cidr_str, ':'); if (cp == NULL) cidr_bits = 32 - cidr_bits; else cidr_bits = 128 - cidr_bits; } ret = opendmarc_spf_ipv6_explode(ipv6_str, &ipv6_ary); if (ret != 0) { return FALSE; } ret = opendmarc_spf_ipv6_explode(cidr_str, &cidr_ary); if (ret != 0) { return FALSE; } ret = opendmarc_spf_ipv6_cidr_populate(&cidr_ary, &base_iary); if (ret != 0) { return FALSE; } ret = opendmarc_spf_ipv6_cidr_populate(&ipv6_ary, &ip_iary); if (ret != 0) { return FALSE; } if (cidr_bits == 0) { /* * Requre an exact match. */ for (i = 0; i < base_iary.nvalues; i++) { if (base_iary.values[i] != ip_iary.values[i]) { return FALSE; } } return TRUE; } (void) memcpy(&low_iary, &base_iary, sizeof(INT_ARY_T)); (void) memcpy(&hi_iary, &base_iary, sizeof(INT_ARY_T)); for (i = 0; i < 8; i++) { int twobyte_mask, tmp_mask; if (cidr_bits >= 16) { low_iary.values[i] = 0; hi_iary.values[i] = 0xFFFF; cidr_bits = cidr_bits - 16; continue; } twobyte_mask = cidr_bits % 16; tmp_mask = (0xFFFF << twobyte_mask); low_iary.values[i] = low_iary.values[i] & tmp_mask; tmp_mask = ((~tmp_mask) & 0xFFFF); hi_iary.values[i] = hi_iary.values[i] | tmp_mask; if (cidr_bits < 16) break; cidr_bits = cidr_bits - 16; } taghi = FALSE; taglo = FALSE; for (i = 7; i >= 0; --i) { if (ip_iary.values[i] == low_iary.values[i] && ip_iary.values[i] == hi_iary.values[i]) { continue; } if (ip_iary.values[i] == hi_iary.values[i]) { taghi = TRUE; continue; } if (ip_iary.values[i] == low_iary.values[i]) { taglo = TRUE; continue; } if (taghi == TRUE) { if (ip_iary.values[i] > hi_iary.values[i]) { return FALSE; } continue; } if (taglo == TRUE) { if (ip_iary.values[i] < low_iary.values[i]) { return FALSE; } continue; } if (ip_iary.values[i] < low_iary.values[i] || ip_iary.values[i] > hi_iary.values[i]) { return FALSE; } } return TRUE; } /****************************************************************** ** SPF_STRIP_DOTS -- Remove trailing and leading dots from ** a domain name. ******************************************************************/ static char * opendmarc_spf_strip_dots(char *str, char *dot, char *buf, size_t buflen) { char *cp; char dupe[BUFSIZ]; if (buflen > BUFSIZ) buflen = BUFSIZ; if (str == NULL || buf == NULL || buflen == 0) return NULL; (void) memset(buf, '\0', buflen); (void) memset(dupe, '\0', buflen); (void) strlcpy(dupe, str, buflen); for (cp = dupe + strlen(dupe) - 1; cp > dupe; --cp) { if (*cp == '.') *cp = '\0'; else break; } for (cp = dupe; *cp != '\0'; ++cp) { if (*cp != '.') break; } (void) strlcpy(buf, cp, buflen); return buf; } int opendmarc_spf_subdomain(char *dom, char *sub) { char dcopy[MAXDNSHOSTNAME]; char scopy[MAXDNSHOSTNAME]; char scratch[MAXDNSHOSTNAME]; char *cp; int dlen; int slen; if (dom == NULL || sub == NULL) return FALSE; (void) memset(dcopy, '\0', sizeof dcopy); (void) memset(scopy, '\0', sizeof scopy); (void) memset(scratch, '\0', sizeof scratch); cp = opendmarc_spf_strip_dots(dom, ".", scratch, sizeof scratch); if (cp == NULL) return FALSE; cp = opendmarc_spf_reverse(scratch, dcopy, sizeof dcopy); if (cp == NULL) return FALSE; cp = opendmarc_spf_strip_dots(sub, ".", scratch, sizeof scratch); if (cp == NULL) return FALSE; cp = opendmarc_spf_reverse(scratch, scopy, sizeof scopy); if (cp == NULL) return FALSE; (void) strlcat(dcopy, ".", sizeof dcopy); (void) strlcat(scopy, ".", sizeof scopy); dlen = strlen(dcopy); slen = strlen(scopy); if (dlen == slen) { if (strcasecmp(dcopy, scopy) == 0) return TRUE; return FALSE; } if (strncasecmp(dcopy, scopy, dlen) == 0) return TRUE; return FALSE; } static int opendmarc_spf_ptr_domain(SPF_CTX_T *spfctx, char *domain) { char ** dry = NULL; int dry_len = 0; char ** dpp; char ** ary = NULL; int ary_len = 0; char ** app; char ** nary = NULL; int nary_len = 0; char ** npp; int good = FALSE;; if (spfctx->validated_domain[0] != '\0') return TRUE; dry = opendmarc_spf_dns_lookup_ptr(spfctx->ip_address, dry, &dry_len); /* * There can be muiltple host names returned. */ for (dpp = dry; dpp != NULL && *dpp != NULL; ++dpp) { ary = opendmarc_spf_dns_lookup_a(*dpp, ary, &ary_len); if (ary == NULL) continue; /* * Compare the addresses returned for that host name * to the specified IP address and if it compares * save the host name for later. */ for (app = ary; app != NULL && *app != NULL; ++app) { if (strcasecmp(*app, spfctx->ip_address) == 0) { nary = opendmarc_util_pushnargv(*dpp, nary, &nary_len); break; } } if (nary == NULL) break; for (npp = nary; *npp != NULL; ++npp) { char *dp; if (domain == NULL) dp = spfctx->mailfrom_domain; else dp = domain; if (opendmarc_spf_subdomain(dp, *dpp) == TRUE) { (void) strlcpy(spfctx->validated_domain, *dpp, sizeof spfctx->validated_domain); good = TRUE; break; } } nary = opendmarc_util_freenargv(nary, &nary_len); if (good == TRUE) break; } dry = opendmarc_util_freenargv(dry, &dry_len); return good; } static char * opendmarc_spf_macro_expand(SPF_CTX_T *spfctx, char *str, char *buf, size_t buflen, int is_exp) { char *sp; char *xp; char *ep; char *bp; char scratch[MAXDNSHOSTNAME]; time_t t; int num; int rev; if (spfctx == NULL || str == NULL || buf == NULL || strlen(str) > buflen) { return NULL; } sp = str; ep = str + strlen(str); (void) memset(buf, '\0', buflen); bp = buf; for (sp = str; sp < ep; ) { if (*sp != '%') { *bp++ = *sp++; continue; } ++sp; switch ((int)*sp) { case '%': *bp++ = *sp++; continue; case '_': *bp++ = ' '; ++sp; continue; case '-': *bp++ = '%'; *bp++ = '2'; *bp++ = '0'; ++sp; continue; case '{': break; default: return NULL; } ++sp; num = 0; rev = FALSE; xp = sp+1; if (*xp == 'r') { rev = TRUE; ++xp; } if (isdigit((int)*xp)) { num = strtoul(xp, &xp, 10); } char * cp; switch ((int)*sp) { case 's': if (rev == TRUE) (void) opendmarc_spf_reverse(spfctx->mailfrom_domain, scratch, MAXDNSHOSTNAME); else (void) strlcpy(scratch, spfctx->mailfrom_domain, MAXDNSHOSTNAME); if (num > 0 && num < MAXDNSHOSTNAME) scratch[num] = '\0'; for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; case 'l': (void) strlcpy(scratch, spfctx->mailfrom_addr, MAXDNSHOSTNAME); cp = strchr(scratch, '@'); if (cp != NULL) *cp = '\0'; if (num > 0 && num < MAXDNSHOSTNAME) scratch[num] = '\0'; for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; case 'o': (void) strlcpy(scratch, spfctx->mailfrom_addr, MAXDNSHOSTNAME); cp = strchr(scratch, '@'); if (cp != NULL) ++cp; else cp = scratch; if (num > 0 && num < (MAXDNSHOSTNAME - (cp - scratch))) cp[num] = '\0'; for (; *cp != '\0'; ) *bp++ = *cp++; break; case 'd': if (rev == TRUE) (void) opendmarc_spf_reverse(spfctx->mailfrom_domain, scratch, MAXDNSHOSTNAME); else (void) strlcpy(scratch, spfctx->mailfrom_domain, MAXDNSHOSTNAME); if (num > 0 && num < MAXDNSHOSTNAME) scratch[num] = '\0'; for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; case 'i': if (rev == TRUE) (void) opendmarc_spf_reverse(spfctx->ip_address, scratch, MAXDNSHOSTNAME); else if (num > 0 && num < MAXDNSHOSTNAME) scratch[num] = '\0'; for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; case 'h': if (rev == TRUE) (void) opendmarc_spf_reverse(spfctx->helo_domain, scratch, MAXDNSHOSTNAME); else (void) strlcpy(scratch, spfctx->helo_domain, MAXDNSHOSTNAME); if (num > 0 && num < MAXDNSHOSTNAME) scratch[num] = '\0'; for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; case 'v': /* if ip is ipv6 use "ip6" instead */ for (cp = "in-addr"; *cp != '\0'; ) *bp++ = *cp++; break; case 'p': if (spfctx->validated_domain[0] == '\0') (void) opendmarc_spf_ptr_domain(spfctx, NULL); if (rev == TRUE) (void) opendmarc_spf_reverse(spfctx->validated_domain, scratch, MAXDNSHOSTNAME); else (void) strlcpy(scratch, spfctx->validated_domain, MAXDNSHOSTNAME); if (num > 0 && num < MAXDNSHOSTNAME) scratch[num] = '\0'; for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; case 'c': if (is_exp == FALSE) return NULL; if (rev == TRUE) (void) opendmarc_spf_reverse(spfctx->ip_address, scratch, MAXDNSHOSTNAME); else (void) strlcpy(scratch, spfctx->ip_address, MAXDNSHOSTNAME); if (num > 0 && num < MAXDNSHOSTNAME) scratch[num] = '\0'; for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; case 'r': /* do rev and num apply to this one? */ if (is_exp == FALSE) return NULL; if (gethostname(scratch, sizeof scratch) == 0) { for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; } break; case 't': /* do rev and num apply to this one? */ if (is_exp == FALSE) return NULL; t = time(NULL); (void) opendmarc_util_ultoa(t, scratch, sizeof scratch); for (cp = scratch; *cp != '\0'; ) *bp++ = *cp++; break; } if (*xp != '}') return NULL; sp = xp+1; continue; } *bp++ = '\0'; return buf; } /*************************************************************** ** libspf_parse -- parse the record ** ** Arguments: ** ctx -- SPF_CTX_T ** xbuf -- buffer into which errors are written. ** xbuf_len -- size of buffer ** ** Returns: ** spfctx->status ** ** Side Effects: ** Makes a connections to the local name server and blocks ** on each waiting for a reply. ** ***************************************************************/ #define MAX_SPF_STACK_DEPTH (10) #define MAX_SPF_DNS_LOOKUPS (10) typedef struct { char domain[MAXDNSHOSTNAME]; char spf[SPF_MAX_SPF_RECORD_LEN]; char *sp; char *ep; char *esp; } SPF_STACK_T; #define SPF_SP (stack[s].sp) #define SPF_EP (stack[s].ep) #define SPF_ESP (stack[s].esp) #define PUSHLINE i = spfctx->nlines; if (i < MAX_SPF_STACK_DEPTH) { spfctx->lines[i] = strdup(xbuf); spfctx->nlines = ++i; } int opendmarc_spf_parse(SPF_CTX_T *spfctx, int dns_count, char *xbuf, size_t xbuf_len) { char ipnum[64]; char *vp = NULL; int i; size_t len; int prefix; u_long ip = 0; int split = 0; #define SPLIT_COLON (1) #define SPLIT_EQUAL (2) #define SPLIT_SLASH (3) SPF_STACK_T stack[MAX_SPF_STACK_DEPTH]; int s = 0; int up = FALSE; int ret; spfctx->in_token = SPF_IN_TOKEN_NONE; if (spfctx == NULL) { (void) strlcat(xbuf, "Oddly the context was NULL: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_INTERNAL; } if (spfctx->mailfrom_domain[0] == '\0') { if (spfctx->helo_domain[0] == '\0') { (void) strlcat(xbuf, "Spf present but oddly no domain specified: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_INTERNAL; } (void) strlcpy(spfctx->mailfrom_domain, spfctx->helo_domain, sizeof spfctx->mailfrom_domain); } if (spfctx->spf_record[0] == '\0') { (void) strlcat(xbuf, "Spf TXT record existed, but was empty: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_INTERNAL; } if (spfctx->ip_address[0] == '\0') { (void) strlcat(xbuf, "Spf present but no IP address to check: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_INTERNAL; } len = strlen(spfctx->spf_record); if (len >= SPF_MAX_SPF_RECORD_LEN -1) { (void) strlcat(xbuf, "Spf TXT record existed, but was absurdly large: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_RECORD_TOOLONG; } (void) memset(stack[s].domain, '\0', MAXDNSHOSTNAME); (void) strlcpy(stack[s].domain, spfctx->mailfrom_domain, MAXDNSHOSTNAME); (void) memset(ipnum, '\0', sizeof ipnum); (void) strlcpy(ipnum, spfctx->ip_address, sizeof ipnum); ip = inet_addr(ipnum); (void) strlcpy(stack[s].spf, spfctx->spf_record, SPF_MAX_SPF_RECORD_LEN); SPF_SP = stack[s].spf; SPF_EP = stack[s].spf + strlen(stack[s].spf); SPF_ESP = stack[s].spf - 1; up = TRUE; while (s >= 0) { if (up == TRUE) { (void) memset(xbuf, '\0', xbuf_len); (void) strlcpy(xbuf, stack[s].domain, xbuf_len); (void) strlcat(xbuf, ": ", xbuf_len); (void) strlcat(xbuf, stack[s].spf, xbuf_len); PUSHLINE } for (;;) { if (dns_count > MAX_SPF_DNS_LOOKUPS) { (void) strlcat(xbuf, " Too Many DNS queries (10 max): FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_TOO_MANY_DNS_QUERIES; } if (SPF_ESP >= SPF_EP-1) { --s; up = FALSE; break; } SPF_SP = SPF_ESP + 1; while (isspace((int)*SPF_SP) && *SPF_SP != '\0' && SPF_SP < SPF_EP) ++SPF_SP; if (*SPF_SP == '\0' || SPF_SP >= SPF_EP) { --s; up = FALSE; break; } /* find the next space delimit point */ SPF_ESP = SPF_SP; while(! isspace((int)*SPF_ESP) && *SPF_ESP != '\0' && SPF_ESP < SPF_EP) ++SPF_ESP; if (SPF_ESP > SPF_EP) { --s; up = FALSE; break; } *SPF_ESP = '\0'; /* show each step */ (void) memset(xbuf, '\0', xbuf_len); (void) strlcpy(xbuf, stack[s].domain, xbuf_len); (void) strlcat(xbuf, ": ", xbuf_len); /* ignore the qualifiers for now */ prefix = '\0'; if (*SPF_SP == '+' || *SPF_SP == '?' || *SPF_SP == '~' || *SPF_SP == '-') { prefix = *SPF_SP; ++SPF_SP; } /* split at any =, /, or : into name=sp, value=vp */ vp = strchr(SPF_SP, '='); if (vp != NULL) { split = SPLIT_EQUAL; *vp++ = '\0'; } else { vp = strchr(SPF_SP, ':'); if (vp != NULL) { split = SPLIT_COLON; *vp++ = '\0'; } else { vp = strchr(SPF_SP, '/'); if (vp != NULL) { split = SPLIT_SLASH; *vp++ = '\0'; } else { vp = NULL; } } } if (strcasecmp(SPF_SP, "v") == 0) { spfctx->in_token = SPF_IN_TOKEN_VERSION; if (vp == NULL || strcasecmp(vp, "spf1") != 0) { (void) strlcat(xbuf, " Expected \"v=spf1\": FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_BAD_SYNTAX_VERSION; } /* version was okay */ continue; } if (strncasecmp(SPF_SP, "spf2.0", 6) == 0) continue; if (strcasecmp("a", SPF_SP) == 0 || strcasecmp("ip4", SPF_SP) == 0) { char ** ary = NULL; int ary_len = 0; char ** app; char abuf[BUFSIZ]; if (vp == NULL || split == SPLIT_SLASH) { /* * Don't know what to do with a/24. * look up the a, and do each address/24? */ if (ary != NULL) ary = opendmarc_util_freenargv(ary, &ary_len); ++dns_count; ary = opendmarc_spf_dns_lookup_a(stack[s].domain, ary, &ary_len); if (ary != NULL) { for (app = ary; *app != NULL; ++app) { (void) memset(abuf, '\0', sizeof abuf); (void) strlcpy(abuf, *app, sizeof abuf); if (vp != NULL) { (void) strlcat(abuf, "/", sizeof abuf); (void) strlcat(abuf, vp, sizeof abuf); } spfctx->iplist = opendmarc_util_pushnargv(abuf, spfctx->iplist, &(spfctx->ipcount)); if (opendmarc_spf_cidr_address(ip, abuf) == TRUE) { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " was found in ", xbuf_len); (void) strlcat(xbuf, abuf, xbuf_len); (void) strlcat(xbuf, ": PASSED", xbuf_len); PUSHLINE ary = opendmarc_util_freenargv(ary, &ary_len); return spfctx->status = SPF_RETURN_OK_PASSED; } } ary = opendmarc_util_freenargv(ary, &ary_len); continue; } (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, stack[s].domain, xbuf_len); (void) strlcat(xbuf, " had no A records: FAILED", xbuf_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } PUSHLINE return spfctx->status = SPF_RETURN_A_BUT_NO_A_RECORD; } if (strcasecmp("a", SPF_SP) == 0 && vp != NULL) { char * slashp = NULL; char ** a_ary = NULL; int a_ary_len = 0; char ** a_app = NULL; char a_abuf[BUFSIZ]; (void) opendmarc_spf_macro_expand(spfctx, vp, a_abuf, sizeof a_abuf, FALSE); ++dns_count; a_ary = (char **)opendmarc_spf_dns_lookup_a(a_abuf, a_ary, &a_ary_len); if (a_ary == NULL) { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, " had no A records: FAILED", xbuf_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } PUSHLINE return spfctx->status = SPF_RETURN_A_BUT_NO_A_RECORD; } for (a_app = a_ary; *a_app != NULL; ++a_app) { (void) memset(a_abuf, '\0', sizeof a_abuf); (void) strlcpy(a_abuf, *a_app, sizeof a_abuf); if (slashp != NULL) { (void) strlcat(a_abuf, "/", sizeof a_abuf); (void) strlcat(a_abuf, slashp+1, sizeof a_abuf); } spfctx->iplist = opendmarc_util_pushnargv(a_abuf, spfctx->iplist, &(spfctx->ipcount)); if (opendmarc_spf_cidr_address(ip, a_abuf) == TRUE) { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " was found: PASSED", xbuf_len); PUSHLINE a_ary = opendmarc_util_freenargv(a_ary, &ary_len); return spfctx->status = SPF_RETURN_OK_PASSED; } if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } } a_ary = opendmarc_util_freenargv(a_ary, &ary_len); continue; } if (strcasecmp("ip4", SPF_SP) == 0 && vp != NULL) { spfctx->iplist = opendmarc_util_pushnargv(vp, spfctx->iplist, &(spfctx->ipcount)); ret = opendmarc_spf_cidr_address(ip, vp); if (ret == TRUE) { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " was found: PASSED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_OK_PASSED; } if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } continue; } if (vp == NULL) vp = ""; (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, " Badly formed: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_A_BUT_BAD_SYNTAX; } if (strcasecmp("mx", SPF_SP) == 0) { char ** ary = NULL; int ary_len = 0; char ** app = NULL; char mxbuf[BUFSIZ]; if (vp != NULL && split != SPLIT_SLASH) (void) opendmarc_spf_macro_expand(spfctx, vp, mxbuf, sizeof mxbuf, FALSE); else (void) opendmarc_spf_macro_expand(spfctx, stack[s].domain, mxbuf, sizeof mxbuf, FALSE); ++dns_count; ary = opendmarc_spf_dns_lookup_mx(mxbuf, ary, &ary_len); if (ary == NULL) { (void) strlcat(xbuf, mxbuf, xbuf_len); (void) strlcat(xbuf, ": MX listed but no MX records", xbuf_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } PUSHLINE continue; } for (app = ary; *app != NULL; ++app) { spfctx->iplist = opendmarc_util_pushnargv(*app, spfctx->iplist, &(spfctx->ipcount)); if (opendmarc_spf_cidr_address(ip, *app) == TRUE) { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " was found: PASSED", xbuf_len); PUSHLINE ary = opendmarc_util_freenargv(ary, &ary_len); return spfctx->status = SPF_RETURN_OK_PASSED; } } ary = opendmarc_util_freenargv(ary, &ary_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } continue; } if (strcasecmp("include", SPF_SP) == 0) { char *spf_ret; char spfbuf[SPF_MAX_SPF_RECORD_LEN]; char cname[MAXDNSHOSTNAME]; char query[MAXDNSHOSTNAME]; int reply; if (vp == NULL || strlen(vp) == 0) { (void) strlcat(xbuf, "\"include:\" Lacked a domain specification.", xbuf_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } PUSHLINE return spfctx->status = SPF_RETURN_BAD_SYNTAX_INCLUDE; } (void) memset(query, '\0', sizeof query); (void) strlcpy(query, vp, sizeof query); (void) memset(cname, '\0', sizeof cname); (void) memset(spfbuf, '\0', sizeof spfbuf); ++dns_count; spf_ret = opendmarc_spf_dns_get_record(query, &reply, spfbuf, sizeof spfbuf, cname, sizeof cname, TRUE); if (spf_ret == NULL) { (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, " Lacked lacked an SPF record: FAILED", xbuf_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } PUSHLINE return spfctx->status = SPF_RETURN_INCLUDE_NO_DOMAIN; } if (s+1 >= MAX_SPF_STACK_DEPTH) { char nbuf[16]; (void) strlcat(xbuf, stack[s].domain, xbuf_len); (void) strlcat(xbuf, " Too many levels of includes, ", xbuf_len); (void) opendmarc_util_ultoa(MAX_SPF_STACK_DEPTH, nbuf, sizeof nbuf); (void) strlcat(xbuf, nbuf, xbuf_len); (void) strlcat(xbuf, " Max", xbuf_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } PUSHLINE continue; } if (s > 0) { for (i = 0; i < s; i++) { if (strcasecmp(vp, stack[i].domain) == 0) break; } if (i < s) { (void) strlcat(xbuf, query, xbuf_len); (void) strlcat(xbuf, " Include LOOP detected and supressed", xbuf_len); PUSHLINE continue; } } s += 1; up = TRUE; (void) memset(stack[s].domain, '\0', MAXDNSHOSTNAME); (void) strlcpy(stack[s].domain, vp, MAXDNSHOSTNAME); (void) memset(stack[s].spf, '\0', SPF_MAX_SPF_RECORD_LEN); (void) strlcpy(stack[s].spf, spfbuf, SPF_MAX_SPF_RECORD_LEN); SPF_SP = stack[s].spf; SPF_EP = stack[s].spf + strlen(stack[s].spf); SPF_ESP = stack[s].spf - 1; if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } break; } if (strcasecmp("all", SPF_SP) == 0) { char p[2]; p[0] = prefix; p[1] = '\0'; (void) memset(xbuf, '\0', xbuf_len); (void) strlcpy(xbuf, stack[s].domain, xbuf_len); (void) strlcat(xbuf, ": ", xbuf_len); (void) strlcat(xbuf, p, xbuf_len); (void) strlcat(xbuf, "all, status=", xbuf_len); if (s == 0) { if (prefix == '-') { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " Not found, so: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_DASH_ALL_HARD_FAIL; } if (prefix == '~') { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " Not found, so: SOFT-FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_TILDE_ALL_SOFT_FAIL; } if (prefix == '?') { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " Not found, but: NEUTRAL", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_QMARK_ALL_NEUTRAL; } else { (void) strlcat(xbuf, " ", xbuf_len); (void) strlcat(xbuf, ipnum, xbuf_len); (void) strlcat(xbuf, " Not found, but: PASS", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_OK_PASSED; } } continue; } if (strcasecmp("ip6", SPF_SP) == 0) { int ret; /* * Open issue: Should we convert an ipv4 address in spfctx->ip_address * into ipv6 for this check? e.g. 1.2.3.4 -> :FFFF:1.2.3.4 */ spfctx->iplist = opendmarc_util_pushnargv(vp, spfctx->iplist, &(spfctx->ipcount)); ret = opendmarc_spf_ipv6_cidr_check(spfctx->ip_address, vp); if (ret == TRUE) { return spfctx->status = SPF_RETURN_OK_PASSED; } if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } continue; } if (strcasecmp("ptr", SPF_SP) == 0) { int good; good = opendmarc_spf_ptr_domain(spfctx, vp); if (good == TRUE) { return spfctx->status = SPF_RETURN_OK_PASSED; } if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } continue; } if (strcasecmp("exists", SPF_SP) == 0) { char * xp; char ** ary = NULL; int ary_len = 0; char ** app; if (vp == NULL || strlen(vp) == 0) { (void) strlcpy(xbuf, "\"exists:\" Lacked a domain specification.", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_BAD_SYNTAX_EXISTS; } /* see http://old.openspf.org/macros.html for macros */ /* altavista.net uses +exists:CL.%{i}.FR.%{s}.HE.%{h}.null.spf.altavista.com */ xp = opendmarc_spf_macro_expand(spfctx, vp, xbuf, xbuf_len, TRUE); if (xp == NULL) { (void) strlcpy(xbuf, "\"exists:\" record had syntactially bad macros:" , xbuf_len); (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, ": FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_BAD_MACRO_SYNTAX; } ++dns_count; if (ary != NULL) ary = opendmarc_util_freenargv(ary, &ary_len); ary = opendmarc_spf_dns_lookup_a(xbuf, ary, &ary_len); if (ary == NULL) { /* lookup failed */ if (prefix != '-') continue; (void) strlcpy(xbuf, "\"exists:\" record lookup: ", xbuf_len); (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, ": FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_NOT_EXISTS_HARDFAIL; } for (app = ary; *app != NULL; ++app) { if (strcmp(spfctx->ip_address, *app) == 0) return spfctx->status = SPF_RETURN_OK_PASSED; } ary = opendmarc_util_freenargv(ary, &ary_len); continue; } if (strcasecmp("exp", SPF_SP) == 0) { char * xp; if (vp == NULL || strlen(vp) == 0) { (void) strlcpy(xbuf, "\"exp:\" Lacked a domain specification.", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_BAD_SYNTAX_EXP; } xp = opendmarc_spf_macro_expand(spfctx, vp, xbuf, xbuf_len, FALSE); if (xp == NULL) { (void) strlcpy(xbuf, "\"exists:\" record had syntactially bad macros:" , xbuf_len); (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, ": FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_BAD_MACRO_SYNTAX; } (void) memset(spfctx->exp_buf, '\0', sizeof spfctx->exp_buf); (void) strlcpy(spfctx->exp_buf, xp, sizeof spfctx->exp_buf); spfctx->did_get_exp = TRUE; continue; } if (strcasecmp("redirect", SPF_SP) == 0) { /* * Some people think that redirect and include are the same. * Rather than fail due to that belief, there is really no harm * in treating them the same. */ int reply; char * xp; char query[MAXDNSHOSTNAME]; char * spf_ret; char cname[128]; char spfbuf[BUFSIZ]; if (vp == NULL) { (void) strlcat(xbuf, " Lacked a domain specification: FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_REDIRECT_NO_DOMAIN; } (void) memset(query, '\0', sizeof query); xp = opendmarc_spf_macro_expand(spfctx, vp, query, sizeof query, TRUE); if (xp == NULL) { (void) strlcpy(xbuf, "\"redirect:\" record had syntactially bad macros:" , xbuf_len); (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, ": FAILED", xbuf_len); PUSHLINE return spfctx->status = SPF_RETURN_BAD_MACRO_SYNTAX; } ++dns_count; spf_ret = opendmarc_spf_dns_get_record(query, &reply, spfbuf, sizeof spfbuf, cname, sizeof cname, TRUE); if (spf_ret == NULL) { (void) strlcat(xbuf, vp, xbuf_len); (void) strlcat(xbuf, " Lacked lacked an SPF record: FAILED", xbuf_len); if (s == 0 && prefix == '-') { return spfctx->status = SPF_RETURN_DASH_FORCED_HARD_FAIL; } PUSHLINE return spfctx->status = SPF_RETURN_BAD_SYNTAX_REDIRECT; } (void) memset(stack[s].domain, '\0', MAXDNSHOSTNAME); (void) strlcpy(stack[s].domain, vp, MAXDNSHOSTNAME); (void) memset(stack[s].spf, '\0', SPF_MAX_SPF_RECORD_LEN); (void) strlcpy(stack[s].spf, spfbuf, SPF_MAX_SPF_RECORD_LEN); SPF_SP = stack[s].spf; SPF_EP = stack[s].spf + strlen(stack[s].spf); SPF_ESP = stack[s].spf - 1; up = TRUE; break; } if (strlen(SPF_SP) > 0) { (void) strlcat(xbuf, "\"", xbuf_len); (void) strlcat(xbuf, SPF_SP, xbuf_len); (void) strlcat(xbuf, "\": Unrecognized SPF keyword, WARNING", xbuf_len); PUSHLINE /* return spfctx->status = SPF_RETURN_UNKNOWN_KEYWORD; */ continue; } } } return spfctx->status; } SPF_CTX_T * opendmarc_spf_alloc_ctx() { SPF_CTX_T *spfctx = NULL; spfctx = malloc(sizeof(SPF_CTX_T)); if (spfctx == NULL) return NULL; (void) memset(spfctx, '\0', sizeof(SPF_CTX_T)); spfctx->status = SPF_RETURN_UNDECIDED; return spfctx; } SPF_CTX_T * opendmarc_spf_free_ctx(SPF_CTX_T *spfctx) { int i; if (spfctx == NULL) return spfctx; for (i = 0; i < spfctx->nlines; i++) { if (spfctx->lines[i] != NULL) (void) free(spfctx->lines[i]); } spfctx->iplist = opendmarc_util_freenargv(spfctx->iplist, &(spfctx->ipcount)); (void) free(spfctx); spfctx = NULL; return spfctx; } int opendmarc_spf_specify_ip_address(SPF_CTX_T *spfctx, char *ip_address, size_t ip_address_len) { if (spfctx == NULL) return EINVAL; if (ip_address == NULL) return EINVAL; /* * we don't care at this point if it is ipv6 or ipv4 */ (void) memset(spfctx->ip_address, '\0', sizeof spfctx->ip_address); (void) strlcpy(spfctx->ip_address, ip_address, sizeof spfctx->ip_address); return 0; } int opendmarc_spf_specify_helo_domain(SPF_CTX_T *spfctx, char *helo_domain, size_t helo_domain_len) { char copy[sizeof spfctx->mailfrom_addr]; char *cp; char *ep; if (spfctx == NULL) return EINVAL; if (helo_domain == NULL) return 0; (void) memset(copy, '\0', sizeof copy); (void) strlcpy(copy, helo_domain, sizeof copy); cp = strrchr(copy, '<'); if (cp == NULL) cp = copy; ep = strchr(cp, '>'); if (ep != NULL) *ep = '\0'; ep = strchr(cp, '@'); if (ep != NULL) cp = ep+1; (void) memset(spfctx->helo_domain, '\0', sizeof spfctx->helo_domain); (void) strlcpy(spfctx->helo_domain, cp, sizeof spfctx->helo_domain); return 0; } int opendmarc_spf_specify_mailfrom(SPF_CTX_T *spfctx, char *mailfrom, size_t mailfrom_len, int *use_flag) { char copy[sizeof spfctx->mailfrom_addr]; char *cp; char *ep; if (use_flag != NULL) *use_flag = FALSE; if (spfctx == NULL) return EINVAL; if (mailfrom == NULL) return EINVAL; (void) memset(copy, '\0', sizeof copy); (void) strlcpy(copy, mailfrom, sizeof copy); cp = strrchr(copy, '<'); if (cp == NULL) cp = copy; else ++cp; ep = strchr(cp, '>'); if (ep != NULL) *ep = '\0'; (void) memset(spfctx->mailfrom_addr, '\0', sizeof spfctx->mailfrom_addr); (void) strlcpy(spfctx->mailfrom_addr, cp, sizeof spfctx->mailfrom_addr); ep = strchr(cp, '@'); if (ep != NULL) { cp = ep+1; if (use_flag != NULL) *use_flag = TRUE; } if (strcasecmp(cp, "MAILER_DAEMON") == 0) cp = ""; (void) memset(spfctx->mailfrom_domain, '\0', sizeof spfctx->mailfrom_domain); (void) strlcpy(spfctx->mailfrom_domain, cp, sizeof spfctx->mailfrom_domain); return 0; } int opendmarc_spf_specify_record(SPF_CTX_T *spfctx, char *spf_record, size_t spf_record_length) { if (spfctx == NULL) { return EINVAL; } (void) memset(spfctx->spf_record, '\0', sizeof spfctx->spf_record); if (spf_record == NULL) { char * spf_ret; int reply; char cname[256]; char spfbuf[BUFSIZ]; /* look it up */ spf_ret = opendmarc_spf_dns_get_record(spfctx->mailfrom_domain, &reply, spfbuf, sizeof spfbuf, cname, sizeof cname, TRUE); if (spf_ret == NULL) { switch(reply) { case HOST_NOT_FOUND: case NO_DATA: return DMARC_POLICY_SPF_OUTCOME_NONE; break; case NO_RECOVERY: case TRY_AGAIN: return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; break; } return DMARC_POLICY_SPF_OUTCOME_NONE; } (void) strlcpy(spfctx->spf_record, spfbuf, sizeof spfctx->spf_record); return 0; } (void) strlcpy(spfctx->spf_record, spf_record, sizeof spfctx->spf_record); return 0; } int opendmarc_spf_test(char *ip_address, char *mail_from_domain, char *helo_domain, char *spf_record, int softfail_okay_flag, char *human_readable, size_t human_readable_len, int *used_mfrom) { SPF_CTX_T * ctx; int ret; int len; char xbuf[BUFSIZ]; if (used_mfrom != NULL) *used_mfrom = FALSE; (void) memset(xbuf, '\0', sizeof xbuf); ctx = opendmarc_spf_alloc_ctx(); if (ctx == NULL) { if (human_readable != NULL) (void) strlcpy(human_readable, strerror(errno), human_readable_len); return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } if (ip_address == NULL) { if (human_readable != NULL) (void) strlcpy(human_readable, "No IP address available", human_readable_len); ctx = opendmarc_spf_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_FAIL; } if (mail_from_domain == NULL && helo_domain == NULL) { if (human_readable != NULL) (void) strlcpy(human_readable, "No Domain name available to check", human_readable_len); ctx = opendmarc_spf_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_FAIL; } ret = opendmarc_spf_specify_mailfrom(ctx, mail_from_domain, strlen(mail_from_domain), used_mfrom); if (ret != 0) { if (human_readable != NULL) (void) strlcpy(human_readable, strerror(errno), human_readable_len); ctx = opendmarc_spf_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } ret = opendmarc_spf_specify_helo_domain(ctx, helo_domain, strlen(helo_domain)); if (ret != 0) { if (human_readable != NULL) (void) strlcpy(human_readable, strerror(errno), human_readable_len); ctx = opendmarc_spf_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } ret = opendmarc_spf_specify_ip_address(ctx, ip_address, strlen(ip_address)); if (ret != 0) { if (human_readable != NULL) (void) strlcpy(human_readable, strerror(errno), human_readable_len); ctx = opendmarc_spf_free_ctx(ctx); return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } if (spf_record == NULL) len = 0; else len = strlen(spf_record); ret = opendmarc_spf_specify_record(ctx, spf_record, len); if (ret != 0) { if (human_readable != NULL) (void) strlcpy(human_readable, hstrerror(h_errno), human_readable_len); ctx = opendmarc_spf_free_ctx(ctx); return ret; } ret = opendmarc_spf_parse(ctx, 0, xbuf, sizeof xbuf); if (human_readable != NULL) (void) strlcpy(human_readable, opendmarc_spf_status_to_msg(ctx, ret), human_readable_len); ctx = opendmarc_spf_free_ctx(ctx); if (ret != SPF_RETURN_OK_PASSED) { switch (ret) { case SPF_RETURN_UNDECIDED: case SPF_RETURN_QMARK_ALL_NEUTRAL: case SPF_RETURN_TILDE_ALL_SOFT_FAIL: if (softfail_okay_flag == TRUE) return DMARC_POLICY_SPF_OUTCOME_PASS; else return DMARC_POLICY_SPF_OUTCOME_FAIL; break; case SPF_RETURN_INTERNAL: return DMARC_POLICY_SPF_OUTCOME_TMPFAIL; } return DMARC_POLICY_SPF_OUTCOME_FAIL; } return DMARC_POLICY_SPF_OUTCOME_PASS; } #endif /* HAVE_SPF2_H */ #endif /* WITH_SPF */ OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_spf_dns.c000066400000000000000000000445461416002254500242150ustar00rootroot00000000000000#include "opendmarc_internal.h" /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ #include #include "dmarc.h" #if WITH_SPF && ! HAVE_SPF2_H /* ** Beware that some Linux versions incorrectly define ** MAXHOSTNAMELEN as 64, but DNS lookups require a length ** of 255. So we don't use MAXHOSTNAMELEN here. */ #define MAXDNSHOSTNAME 256 #ifndef MAXPACKET # define MAXPACKET (8192) #endif #ifndef T_SPF # define T_SPF (99) #endif /*************************************************************************************************** ** opendmarc_spf_dns_lookup_a_actual -- Looks type of address that is sought ** ** Arguments: ** domain -- the domain name to look up. ** sought -- type of lookup A or AAAA ** ary -- array of strings containing list of IP addresses ** cnt -- Pointer to count of lines in array ** Returns: ** ary -- on success ** NULL -- otherise, and place the h_errno error into reply ** Side Effects: ** Makes a connection to the local name server and blocks ** waiting for a reply. ***************************************************************************************************/ char ** opendmarc_spf_dns_lookup_a_actual(char *domain, int sought, char **ary, int *cnt) { char * bp; u_char * cp; u_char * eom = NULL; char hbuf[MAXDNSHOSTNAME]; char namebuf[MAXDNSHOSTNAME + 1]; u_char a_buf[MAXPACKET]; struct in_addr in; uint32_t a; HEADER hdr; int k; short l = 0; int class = -1; int acnt = -1; int qdcnt = -1; u_short type = 0; u_long ttl = 0; #if HAVE_RES_NINIT struct __res_state resp; #endif /* HAVE_RES_NINIT */ /* * If a null or empy domain was given to us, just say it * was not found. */ if (domain == NULL || *domain == '\0') { return NULL; } #ifdef HAVE_RES_NINIT memset(&resp, '\0', sizeof resp); res_ninit(&resp); #endif /* HAVE_RES_NINIT */ /* * Copy the domain so we can scribble on it. The orginal * may point to a static string. */ (void) memcpy(hbuf, domain, sizeof hbuf); bp = hbuf; /* * Make sure host ends in a dot to short circuit lookups */ bp = hbuf + strlen(hbuf) - 1; if (*bp != '.') *++bp = '.'; *++bp = '\0'; /* * Make sure host does not begin with a dot. */ bp = hbuf; if (*bp == '.') ++bp; #ifdef HAVE_RES_NINIT k = res_nquery(&resp, bp, C_IN, sought, a_buf, sizeof a_buf); #ifdef HAVE_RES_NDESTROY res_ndestroy(&resp); #else res_nclose(&resp); #endif #else /* HAVE_RES_NINIT */ k = res_query(bp, C_IN, sought, a_buf, sizeof a_buf); #endif /* HAVE_RES_NINIT */ if (k < 0) { return NULL; } if (k > (int)(sizeof a_buf)) { k = sizeof a_buf; } (void) memcpy(&hdr, a_buf, sizeof hdr); cp = (u_char *)&a_buf + HFIXEDSZ; eom = (u_char *)&a_buf + k; (void) memset(namebuf, '\0', sizeof namebuf); /* skip question part of response -- we know what we asked */ for (qdcnt = ntohs(hdr.qdcount); qdcnt > 0; qdcnt--) { k = dn_expand((unsigned char *) &a_buf, eom, cp, namebuf, sizeof namebuf); cp += k; if (cp + INT16SZ + INT16SZ > eom) { return NULL; } GETSHORT(type, cp); GETSHORT(class, cp); } if (hdr.rcode != NOERROR) { return NULL; } acnt = ntohs((unsigned short) hdr.ancount); if (acnt == 0) { return NULL; } while (--acnt >= 0 && cp < eom) { if ((k = dn_expand((unsigned char *) &a_buf, eom, cp, namebuf, sizeof namebuf)) < 0) { break; } cp += k; GETSHORT(type, cp); GETSHORT(class, cp); GETLONG(ttl, cp); GETSHORT(l, cp); if (type == T_CNAME) { /* CNAME; walk past the expanded name and continue */ char cname[MAXDNSHOSTNAME + 1]; k = dn_expand((u_char *) &a_buf, eom, cp, cname, MAXDNSHOSTNAME); cp += k; continue; } else if (type != sought) { /* not a type we want; skip the rest and continue */ cp += l; continue; } else if (type == T_A) { GETLONG(a, cp); a = htonl(a); (void) memcpy(&in.s_addr, &a, sizeof(uint32_t)); (void) memset(hbuf, '\0', sizeof hbuf); (void) strncpy(hbuf, inet_ntoa(in), sizeof hbuf); ary = opendmarc_util_pushnargv(hbuf, ary, cnt); } #ifdef T_AAAA else if (type == T_AAAA) { struct in6_addr s6; /* just to be sure... */ if (l != sizeof s6.s6_addr) { cp += l; continue; } (void) memcpy(&s6.s6_addr, cp, sizeof s6.s6_addr); (void) memset(hbuf, '\0', sizeof hbuf); inet_ntop(AF_INET6, &s6.s6_addr, hbuf, sizeof hbuf - 1); ary = opendmarc_util_pushnargv(hbuf, ary, cnt); } #endif /* T_AAAA */ } return ary; } /*************************************************************************************************** ** opendmarc_spf_dns_lookup_a -- Looks up the IPv4 and IPv6 addresses of the domain ** ** Arguments: ** domain -- the domain name to look up. ** ary -- array of strings containing list of IP addresses ** cnt -- Pointer to count of lines in array ** Returns: ** ary -- on success ** NULL -- otherwise, and place the h_errno error into reply ** Side Effects: ** Makes a connection to the local name server and blocks ** waiting for a reply. ***************************************************************************************************/ char ** opendmarc_spf_dns_lookup_a(char *domain, char **ary, int *cnt) { bool found = FALSE; char **a_retp; char **aaaa_retp; a_retp = opendmarc_spf_dns_lookup_a_actual(domain, T_A, ary, cnt); if (a_retp != (char **) NULL) { ary = a_retp; found = TRUE; } #ifdef T_AAAA aaaa_retp = opendmarc_spf_dns_lookup_a_actual(domain, T_AAAA, ary, cnt); if (aaaa_retp != (char **) NULL) { ary = aaaa_retp; found = TRUE; } #endif /* T_AAAA */ return *cnt > 0 ? ary : NULL; } /*************************************************************************************************** ** opendmarc_spf_dns_lookup_mx -- Looks up the MX records for a domain ** ** Arguments: ** domain -- The domain name to look up. ** ary -- Array of strings containing list MX hosts ## Note that spf only cares if they exist. ** cnt -- Pointer to count of lines in array ** Returns: ** ary -- on success ** NULL -- otherise, and place the h_errno error into reply ** Side Effects: ** Makes a connection to the local name server and blocks ** waiting for a reply. ***************************************************************************************************/ char ** opendmarc_spf_dns_lookup_mx(char *domain, char **ary, int *cnt) { register u_char *eob, *cp; register int k; u_char buf[BUFSIZ]; HEADER *hp; union { HEADER h; u_char u[PACKETSZ]; } q; int acnt, qdcnt; u_short pref; u_short type; u_long ttl; #if HAVE_RES_NINIT struct __res_state resp; #endif /* HAVE_RES_NINIT */ if (domain == NULL) { return NULL; } #ifdef HAVE_RES_NINIT memset(&resp, '\0', sizeof resp); res_ninit(&resp); k = res_nquery(&resp, domain, C_IN, T_MX, (u_char *) &q, sizeof(q)); #ifdef HAVE_RES_NDESTROY res_ndestroy(&resp); #else res_nclose(&resp); #endif #else /* HAVE_RES_NINIT */ k = res_query(domain, C_IN, T_MX, (u_char *) &q, sizeof(q)); #endif /* HAVE_RES_NINIT */ if (k < 0) { return NULL; } hp = &(q.h); cp = q.u + HFIXEDSZ; eob = q.u + k; for (qdcnt = ntohs(hp->qdcount); qdcnt--; cp += k + QFIXEDSZ) if ((k = dn_skipname(cp, eob)) < 0) { return NULL; } acnt = ntohs(hp->ancount); while (--acnt >= 0 && cp < eob) { if ((k = dn_expand(q.u, eob, cp, (char *)buf, BUFSIZ-1)) < 0) break; cp += k; if (cp > eob) break; GETSHORT(type, cp); cp += INT16SZ; GETLONG(ttl, cp); GETSHORT(k, cp); if (type != T_MX) { cp += k; continue; } GETSHORT(pref, cp); if ((k = dn_expand(q.u, eob, cp, (char *)buf, BUFSIZ-1)) < 0) break; cp += k; ary = opendmarc_spf_dns_lookup_a((char *)buf, ary, cnt); } return ary; } /*************************************************************************************************** ** opendmarc_spf_dns_lookup_ptr -- Looks up IP address to get domain ** ** Arguments: ** domain -- The domain name to look up. ** ary -- Array of strings containing list MX hosts ## Note that spf only cares if they exist. ** cnt -- Pointer to count of lines in array ** Returns: ** ary -- on success ** NULL -- otherise, and place the h_errno error into reply ** Side Effects: ** Makes a connection to the local name server and blocks ** waiting for a reply. ***************************************************************************************************/ char ** opendmarc_spf_dns_lookup_ptr(char *ip, char **ary, int *cnt) { register u_char *eob, *cp; register int k; u_char buf[BUFSIZ]; char ip_buf[512]; HEADER *hp; union { HEADER h; u_char u[PACKETSZ]; } q; int acnt, qdcnt; u_short type; u_long ttl; char *icp; #if HAVE_RES_NINIT struct __res_state resp; #endif /* HAVE_RES_NINIT */ if (ip == NULL) { return NULL; } (void) memset(buf, '\0', sizeof buf); (void) memset(ip_buf, '\0', sizeof ip_buf); (void) strlcpy(ip_buf, ip, sizeof ip_buf); icp = strrchr(ip_buf, '.'); if (icp == NULL) return NULL; strlcpy((char *)buf, icp+1, sizeof buf); *icp = '\0'; icp = strrchr(ip_buf, '.'); if (icp == NULL) return NULL; strlcat((char *)buf, ".", sizeof buf); strlcat((char *)buf, icp+1, sizeof buf); *icp = '\0'; icp = strrchr(ip_buf, '.'); if (icp == NULL) return NULL; strlcat((char *)buf, ".", sizeof buf); strlcat((char *)buf, icp+1, sizeof buf); *icp = '\0'; icp = ip_buf; strlcat((char *)buf, ".", sizeof buf); strlcat((char *)buf, icp, sizeof buf); strlcat((char *)buf, ".in-addr.arpa.", sizeof buf); #ifdef HAVE_RES_NINIT memset(&resp, '\0', sizeof resp); res_ninit(&resp); k = res_nquery(&resp, (char *)buf, C_IN, T_PTR, (u_char *) &q, sizeof(q)); #ifdef HAVE_RES_NDESTROY res_ndestroy(&resp); #else res_nclose(&resp); #endif #else /* HAVE_RES_NINIT */ k = res_query((char *)buf, C_IN, T_PTR, (u_char *) &q, sizeof(q)); #endif /* HAVE_RES_NINIT */ if (k < 0) { return NULL; } hp = &(q.h); cp = q.u + HFIXEDSZ; eob = q.u + k; for (qdcnt = ntohs(hp->qdcount); qdcnt--; cp += k + QFIXEDSZ) { if ((k = dn_skipname(cp, eob)) < 0) { return NULL; } } acnt = ntohs(hp->ancount); while (--acnt >= 0 && cp < eob) { char ptr[MAXDNSHOSTNAME + 1]; if ((k = dn_expand(q.u, eob, cp, (char *)buf, BUFSIZ-1)) < 0) break; cp += k; if (cp > eob) break; GETSHORT(type, cp); cp += INT16SZ; GETLONG(ttl, cp); GETSHORT(k, cp); k = dn_expand(q.u, eob, cp, ptr, MAXDNSHOSTNAME); ary = opendmarc_util_pushnargv(ptr, ary, cnt); cp += k; continue; } return ary; } /*************************************************************** ** opendmarc_spf_dns_does_domain_exist -- does an a, aaaa, or mx record exist? ** ** Arguments: ** domain -- the domain name to look up. ** reply -- pointer to an integer ** ** Returns: ** TRUE -- if any of those records existed. ** FALSE -- otherise, and place the h_errno error ** into reply ** ** Side Effects: ** Makes a connection to the local name server and bloks ** waiting for a reply. ***************************************************************/ int opendmarc_spf_dns_does_domain_exist(char *domain, int *reply) { HEADER hdr; u_char a_q[MAXPACKET]; u_char aaaa_q[MAXPACKET]; u_char mx_q[MAXPACKET]; int r; int * rp; #if HAVE_RES_NINIT struct __res_state resp; #endif /* HAVE_RES_NINIT */ if (reply == NULL) rp = &r; else rp = reply; if (domain == NULL || *domain == '\0') { *rp = HOST_NOT_FOUND; return FALSE; } /* * Make sure the domain exists. */ #ifdef HAVE_RES_NINIT memset(&resp, '\0', sizeof resp); res_ninit(&resp); (void) res_nquery(&resp, domain, C_IN, T_A, a_q, sizeof a_q); #ifdef T_AAAA (void) res_nquery(&resp, domain, C_IN, T_AAAA, aaaa_q, sizeof aaaa_q); #endif /* T_AAAA */ (void) res_nquery(&resp, domain, C_IN, T_MX, mx_q, sizeof mx_q); #ifdef HAVE_RES_NDESTROY res_ndestroy(&resp); #else res_nclose(&resp); #endif #else /* HAVE_RES_NINIT */ (void) res_query(domain, C_IN, T_A, a_q, sizeof a_q); #ifdef T_AAAA (void) res_query(domain, C_IN, T_AAAA, aaaa_q, sizeof aaaa_q); #endif /* T_AAAA */ (void) res_query(domain, C_IN, T_MX, mx_q, sizeof mx_q); #endif /* HAVE_RES_NINIT */ memcpy(&hdr, a_q, sizeof hdr); *rp = hdr.rcode; if (hdr.rcode == NOERROR) return TRUE; memcpy(&hdr, aaaa_q, sizeof hdr); *rp = hdr.rcode; if (hdr.rcode == NOERROR) return TRUE; memcpy(&hdr, aaaa_q, sizeof hdr); *rp = hdr.rcode; if (hdr.rcode == NOERROR) return TRUE; return FALSE; } /*************************************************************************************************** ** opendmarc_dns_get_record -- looks up and returns the txt record ** ** Arguments: ** domain -- the domain name to look up. ** reply -- pointer to an integer ** txt -- where to scribble the found txt record ** txtlen -- size of txt record buffer ** cname -- buffer to hold CNAME if one found ** cnamelen -- size of cname buffer ** spfcheck -- restrict text records returned to just those beginning with v= or spf2.0 ** ** Returns: ** txt -- on success ** NULL -- otherise, and place the h_errno error ** into reply ** NULL -- if no data, but cname may still contain a hostname ** ** Side Effects: ** Makes a connection to the local name server and blocks ** waiting for a reply. ***************************************************************************************************/ char * opendmarc_spf_dns_get_record(char *domain, int *reply, char *txt, size_t txtlen, char *cname, size_t cnamelen, int spfcheck) { u_char * eom = NULL; u_char * eop = NULL; u_char * cp = NULL; int k; u_char * p = NULL; int ch = 0; short l = 0; HEADER hdr; int class = -1; int acnt = -1; int qdcnt = -1; u_short type = 0; u_long ttl = 0; char * bp = NULL; int r = 0; int * rp = NULL; u_char txt_buf[MAXPACKET]; char hbuf[MAXDNSHOSTNAME]; char namebuf[MAXDNSHOSTNAME + 1]; #if HAVE_RES_NINIT struct __res_state resp; #endif /* HAVE_RES_NINIT */ if (reply == NULL) rp = &r; else rp = reply; /* * If a null or empy domain was given to us, just say it * was not found. */ *rp = 0; if (domain == NULL || *domain == '\0') { *rp = HOST_NOT_FOUND; return NULL; } if (cname != NULL && cnamelen > 0) (void) memset(cname, '\0', cnamelen); /* * Copy the domain so we can scribble on it. The orginal * may point to a static string. */ (void) memcpy(hbuf, domain, sizeof hbuf); bp = hbuf; if (txt != NULL) (void) memset(txt, '\0', txtlen); /* * Make sure host ends in a dot to short circuit lookups */ bp = hbuf + strlen(hbuf) - 1; if (*bp != '.') *++bp = '.'; *++bp = '\0'; /* * Make user host does not begin with a dot. */ bp = hbuf; if (*bp == '.') ++bp; #ifdef HAVE_RES_NINIT memset(&resp, '\0', sizeof resp); res_ninit(&resp); k = res_nquery(&resp, bp, C_IN, T_TXT, txt_buf, sizeof txt_buf); #else /* HAVE_RES_NINIT */ k = res_query(bp, C_IN, T_TXT, txt_buf, sizeof txt_buf); #endif /* HAVE_RES_NINIT */ if (k < 0) { /* * TXT records apppear more common than SPF records, so * we fall back to SPF instead of looking up SPF first. */ if (h_errno == NO_DATA || h_errno == NXDOMAIN) { #ifdef HAVE_RES_NINIT k = res_nquery(&resp, bp, C_IN, T_SPF, txt_buf, sizeof txt_buf); #else /* HAVE_RES_NINIT */ k = res_query(bp, C_IN, T_SPF, txt_buf, sizeof txt_buf); #endif /* HAVE_RES_NINIT */ if (k >= 0) goto got_spf_record; } *rp = h_errno; #ifdef HAVE_RES_NINIT #ifdef HAVE_RES_NDESTROY res_ndestroy(&resp); #else res_nclose(&resp); #endif #endif /* HAVE_RES_NINIT */ return NULL; } got_spf_record: #ifdef HAVE_RES_NINIT #ifdef HAVE_RES_NDESTROY res_ndestroy(&resp); #else res_nclose(&resp); #endif #endif /* HAVE_RES_NINIT */ if (k > (int)(sizeof txt_buf)) k = sizeof txt_buf; (void) memcpy(&hdr, txt_buf, sizeof hdr); cp = (u_char *)&txt_buf + HFIXEDSZ; eom = (u_char *)&txt_buf + k; (void) memset(namebuf, '\0', sizeof namebuf); /* skip question part of response -- we know what we asked */ for (qdcnt = ntohs(hdr.qdcount); qdcnt > 0; qdcnt--) { (void) dn_expand((unsigned char *) &txt_buf, eom, cp, namebuf, sizeof namebuf); if ((k = dn_skipname(cp, eom)) < 0) { *rp = NO_DATA; return NULL; } cp += k; if (cp + INT16SZ + INT16SZ > eom) { *rp = NO_DATA; return NULL; } GETSHORT(type, cp); GETSHORT(class, cp); } if (hdr.rcode != NOERROR) { *rp = NO_DATA; return NULL; } acnt = ntohs((unsigned short) hdr.ancount); if (acnt == 0) { *rp = NO_DATA; return NULL; } while (--acnt >= 0 && cp < eom) { if ((k = dn_expand((unsigned char *) &txt_buf, eom, cp, namebuf, sizeof namebuf)) < 0) { *rp = NO_DATA; return NULL; } cp += k; if (cp + INT16SZ + INT16SZ > eom) { /* currupt answer */ *rp = NO_DATA; return NULL; } GETSHORT(type, cp); GETSHORT(class, cp); if (type == T_CNAME) { /* * CNAMEs are supposed to be invisible, but somtimes * a CNAME points to a TXT record that times out, so * all we get on the initial query is the CNAME. */ char xname[MAXDNSHOSTNAME + 1]; char * xp; size_t xlen; if (cname == NULL || cnamelen == 0) { xp = xname; xlen = sizeof xname; } else { xp = cname; xlen = cnamelen; } k = dn_expand((u_char *) &txt_buf, eom, (u_char *)cname, xp, xlen); cp += k; continue; } else if (type != T_TXT) { *rp = NO_DATA; return NULL; } /* we may want to cache the ttl later */ GETLONG(ttl, cp); if (cp + INT16SZ > eom) { /* no payload length */ *rp = NO_DATA; return NULL; } GETSHORT(l, cp); if (cp + l > eom) { /* payload length greater than remaining buffer */ *rp = NO_DATA; return NULL; } if (txt != NULL) { (void) memset(txt, '\0', txtlen); /* * copy the returned record into txt */ p = (u_char *)txt; eop = (u_char *)txt + txtlen -1; while (l > 0 && p < eop) { ch = *cp++; l--; while (ch > 0 && p < eop) { *p++ = *cp++; ch--; l--; } } } if (spfcheck == TRUE) { /* * Honor both SPF and Sender Identity type records * But ignore mfrom/pra, because DMARC uses only SPF records. */ if (strstr(txt, "v=spf") != NULL || strncasecmp(txt, "spf2.0", 6) == 0) { *rp = 0; return txt; } } cp += l; continue; } *rp = NO_DATA; return NULL; } #endif /* WITH_SPF && ! HAVE_SPF2_H */ OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_strl.c000066400000000000000000000057551416002254500235440ustar00rootroot00000000000000/* ** Copyright (c) 1999-2002, Sendmail Inc. and its suppliers. ** All rights reserved. ** ** By using this file, you agree to the terms and conditions set ** forth in the LICENSE file which can be found at the top level of ** the sendmail distribution. ** ** Copyright (c) 2009, 2012, 2021, The Trusted Domain Project. ** All rights reserved. */ /* system includes */ #include #include /* ** XXX the type of the length parameter has been changed ** from size_t to ssize_t to avoid theoretical problems with negative ** numbers passed into these functions. ** The real solution to this problem is to make sure that this doesn't ** happen, but for now we'll use this workaround. */ /* ** DMARC_STRLCPY -- size bounded string copy ** ** This is a bounds-checking variant of strcpy. ** If size > 0, copy up to size-1 characters from the nul terminated ** string src to dst, nul terminating the result. If size == 0, ** the dst buffer is not modified. ** Additional note: this function has been "tuned" to run fast and tested ** as such (versus versions in some OS's libc). ** ** The result is strlen(src). You can detect truncation (not all ** of the characters in the source string were copied) using the ** following idiom: ** ** char *s, buf[BUFSIZ]; ** ... ** if (dmarc_strlcpy(buf, s, sizeof(buf)) >= sizeof(buf)) ** goto overflow; ** ** Parameters: ** dst -- destination buffer ** src -- source string ** size -- size of destination buffer ** ** Returns: ** strlen(src) */ size_t dmarc_strlcpy(register char *dst, register const char *src, ssize_t size) { register ssize_t i; if (size-- <= 0) return strlen(src); for (i = 0; i < size && (dst[i] = src[i]) != 0; i++) continue; dst[i] = '\0'; if (src[i] == '\0') return i; else return i + strlen(src + i); } /* ** DMARC_STRLCAT -- size bounded string concatenation ** ** This is a bounds-checking variant of strcat. ** If strlen(dst) < size, then append at most size - strlen(dst) - 1 ** characters from the source string to the destination string, ** nul terminating the result. Otherwise, dst is not modified. ** ** The result is the initial length of dst + the length of src. ** You can detect overflow (not all of the characters in the ** source string were copied) using the following idiom: ** ** char *s, buf[BUFSIZ]; ** ... ** if (dmarc_strlcat(buf, s, sizeof(buf)) >= sizeof(buf)) ** goto overflow; ** ** Parameters: ** dst -- nul-terminated destination string buffer ** src -- nul-terminated source string ** size -- size of destination buffer ** ** Returns: ** total length of the string tried to create ** (= initial length of dst + length of src) */ size_t dmarc_strlcat(register char *dst, register const char *src, ssize_t size) { register ssize_t i, j, o; o = strlen(dst); if (size < o + 1) return o + strlen(src); size -= o + 1; for (i = 0, j = o; i < size && (dst[j] = src[i]) != 0; i++, j++) continue; dst[j] = '\0'; if (src[i] == '\0') return j; else return j + strlen(src + i); } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_strl.h000066400000000000000000000014461416002254500235420ustar00rootroot00000000000000/* ** Copyright (c) 2009, 2012, The Trusted Domain Project. All rights reserved. */ #ifndef _DMARC_STRL_H_ #define _DMARC_STRL_H_ /* system includes */ #include /* OpenDMARC includes */ #include "build-config.h" #ifdef __STDC__ # ifndef __P # define __P(x) x # endif /* ! __P */ #else /* __STDC__ */ # ifndef __P # define __P(x) () # endif /* ! __P */ #endif /* __STDC__ */ /* prototypes */ extern size_t dmarc_strlcat __P((char *, const char *, ssize_t)); extern size_t dmarc_strlcpy __P((char *, const char *, ssize_t)); /* mappings */ #if HAVE_STRLCAT == 0 # define strlcat(x,y,z) dmarc_strlcat((x), (y), (z)) #endif /* HAVE_STRLCAT == 0 */ #if HAVE_STRLCPY == 0 # define strlcpy(x,y,z) dmarc_strlcpy((x), (y), (z)) #endif /* HAVE_STRLCPY == 0 */ #endif /* _DMARC_STRL_H_ */ OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_tld.c000066400000000000000000000162001416002254500233260ustar00rootroot00000000000000/************************************************************************* ** Copyright (c) 2012, 2014, 2021, The Trusted Domain Project. ** All rights reserved. **************************************************************************/ #include "opendmarc_internal.h" /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ static OPENDMARC_HASH_CTX *TLD_hctx = NULL; static OPENDMARC_HASH_CTX *TLDbak_hctx = NULL; # if HAVE_PTHREAD_H || HAVE_PTHREAD static pthread_mutex_t TLD_hctx_mutex = PTHREAD_MUTEX_INITIALIZER; #endif static char TLDfile[MAXPATHLEN]; int opendmarc_reverse_domain(u_char *domain, u_char *buf, size_t buflen) { u_char *dp, *ep, *cp; u_char copy[MAXDNSHOSTNAME]; if (buf == NULL || buflen == 0 || domain == NULL) { return EINVAL; } (void) memset((char *)buf, '\0', buflen); /* * Strip all but one leading dot. */ for (cp = domain; *cp != '\0'; ++cp) { if (*cp != '.') break; } if (strlen(cp) == 0) { return EINVAL; } if (cp > domain) --cp; (void) memset((char *)copy, '\0', sizeof copy); (void) strlcpy((char *)copy, cp, sizeof copy); ep = copy + strlen((char *)copy); /* * Strip all trailing dots. */ for (cp = ep-1; cp > copy; --cp) { if (*cp == '.') *cp = '\0'; else break; } ep = cp+1; do { for (dp = ep; dp > copy; --dp) if (*dp == '.') break; ep = dp; if (*dp == '.') ++dp; strlcat((char *)buf, (char *)dp, buflen); if (*ep == '.') { (void) strlcat((char *)buf, ".", buflen); *ep = '\0'; --ep; } } while (dp > copy && ep > copy); return 0; } /************************************************************************************** ** OPENDMARC_TLD_READ_FILE -- Read in the file of TLDs and prepare to select against it. ** Arguments: ** path_fname -- The path and file name to read and process ** commentstring -- The leading characters that comment out a line ** drop -- Drop these leading characters but bind a dot to this TLD ** except -- Prefix that marks at TLD as a stand-alone TLD with domain. ** ** Returns: ** 0 -- On success ** != 0 -- On error and sets errno ** Side Effect: ** Opens and read a file (read-only) ** Allocates memory to store the result. ** Be certain to call opendmarc_tld_shutdown() to free allocated memory. **************************************************************************************/ int opendmarc_tld_read_file(char *path_fname, char *commentstring, char *drop, char *except) { FILE * fp; u_char buf[BUFSIZ]; char * cp; int nlines=0; int ret; u_char revbuf[MAXDNSHOSTNAME]; int adddot; int preflen; OPENDMARC_HASH_CTX *hashp; if (path_fname == NULL) { if (*TLDfile == '\0') return errno = EINVAL; path_fname = TLDfile; } else (void) strlcpy(TLDfile, path_fname, sizeof TLDfile); if (commentstring == NULL) commentstring = "//"; hashp = opendmarc_hash_init(4096 * 2); if (hashp == NULL) return (errno == 0) ? ENOMEM : errno; fp = fopen(path_fname, "r"); if (fp == NULL) return errno; errno = 0; while (fgets((char *)buf, sizeof buf, fp) != NULL) { cp = strchr((char *)buf, '\n'); if (cp != NULL) *cp = '\0'; cp = strchr((char *)buf, '\r'); if (cp != NULL) *cp = '\0'; if (strncmp(commentstring, (char *)buf, strlen(commentstring)) == 0 || *buf == '\0') { if ((cp = strstr((char *)buf, "xn-")) != NULL) { char *ep; for (ep = cp; *ep != '\0'; ++ep) { if (isspace((int)*ep)) break; } *ep = '\0'; ret = opendmarc_reverse_domain((u_char *)cp, revbuf, sizeof revbuf); adddot = TRUE; goto got_xn; } continue; } adddot = TRUE; preflen = 0; if (drop != NULL && strncasecmp(drop, (char *)buf, strlen(drop)) == 0) { preflen = strlen(drop); adddot = TRUE; } if (except != NULL && strncasecmp(except, (char *)buf, strlen(except)) == 0) { preflen = strlen(except); adddot = FALSE; } ret = opendmarc_reverse_domain(buf+preflen, revbuf, sizeof revbuf); got_xn: if (ret != 0) continue; if (adddot == TRUE) (void) strlcat((char *)revbuf, ".", sizeof revbuf); if (opendmarc_hash_lookup(hashp, revbuf, (void *)revbuf, strlen(revbuf)) == NULL) return 1; nlines++; } (void) fclose(fp); # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&TLD_hctx_mutex); # endif if (TLDbak_hctx != NULL) TLDbak_hctx = opendmarc_hash_shutdown(TLDbak_hctx); TLDbak_hctx = TLD_hctx; TLD_hctx = hashp; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&TLD_hctx_mutex); # endif return 0; } /************************************************************************************** ** OPENDMARC_TLD_SHUTDOWN -- Free the tld hash and return ** Arguments: ** none --- void agrguments ** Returns: ** 0 -- Always ** Side Effect: ** Frees memory ** Locks and sets the hash to NULL **************************************************************************************/ void opendmarc_tld_shutdown() { # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&TLD_hctx_mutex); # endif if (TLDbak_hctx != NULL) TLDbak_hctx = opendmarc_hash_shutdown(TLDbak_hctx); if (TLD_hctx != NULL) TLD_hctx = opendmarc_hash_shutdown(TLD_hctx); # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&TLD_hctx_mutex); # endif return; } int opendmarc_get_tld(u_char *domain, u_char *tld, size_t tld_len) { int ret; u_char revbuf[MAXDNSHOSTNAME]; u_char *rp; u_char save; void * vp; if (domain == NULL || tld == NULL || tld_len == 0) return errno = EINVAL; ret = opendmarc_reverse_domain(domain, revbuf, sizeof revbuf); if (ret != 0) return (errno == 0) ? EINVAL : errno; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&TLD_hctx_mutex); # endif vp = TLD_hctx; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&TLD_hctx_mutex); # endif if (vp == NULL) { /* ** No tld list was supplied so copy the domain and return. */ (void) strlcpy(tld, domain, tld_len); return 0; } for (rp = revbuf + strlen(revbuf) -1; rp > revbuf; --rp) { if (rp == revbuf) { /* no match found in the hash table. */ (void) strlcpy(tld, domain, tld_len); break; } if (*rp == '.') { save = *(rp+1); *(rp+1) = '\0'; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&TLD_hctx_mutex); # endif vp = opendmarc_hash_lookup(TLD_hctx, revbuf, NULL, 0); # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&TLD_hctx_mutex); # endif if (vp != NULL) { *(rp+1) = save; (void) opendmarc_reverse_domain(revbuf, tld, tld_len); return 0; } *(rp+1) = save; *rp = '\0'; # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_lock(&TLD_hctx_mutex); # endif vp = opendmarc_hash_lookup(TLD_hctx, revbuf, NULL, 0); # if HAVE_PTHREAD_H || HAVE_PTHREAD (void) pthread_mutex_unlock(&TLD_hctx_mutex); # endif if (vp != NULL) { char * cp = strchr(revbuf, '.'); if (cp == NULL) *rp = '.'; (void) opendmarc_reverse_domain(revbuf, tld, tld_len); return 0; } } } return 0; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_util.c000066400000000000000000000210331416002254500235200ustar00rootroot00000000000000/************************************************************************* ** Copyright (c) 2012, 2014, 2016, The Trusted Domain Project. ** All rights reserved. **************************************************************************/ #include "opendmarc_internal.h" /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /***************************************************** ** OPENDMARC_UTIL_CLEARARGV -- Free the argv array ** ** Parameters: ** ary -- Pointer to array to free ** Returns: ** NULL always ** Side Effects: ** Allocates and reallocates memory. */ u_char ** opendmarc_util_clearargv(u_char **ary) { if (ary != NULL) { u_char **arp; for (arp = ary; *arp != NULL; ++arp) { (void) free(*arp); *arp = NULL; } (void) free(ary); ary = NULL; } return ary; } /***************************************************** ** OPENDMARC_UTIL_PUSHARGV -- Add to and array of strings. ** ** Parameters: ** str -- The string to add. ** ary -- The array to extend. ** cnt -- Points to number of elements. ** Returns: ** ary on success. ** NULL on error and sets errno. ** Side Effects: ** Allocates and reallocates memory. */ u_char ** opendmarc_util_pushargv(u_char *str, u_char **ary, int *cnt) { int i; u_char **tmp; if (str == NULL) return ary; if (ary == NULL) { ary = malloc(sizeof(char **) * 2); if (ary == NULL) { return NULL; } ary[0] = strdup(str); ary[1] = NULL; if (ary[0] == NULL) { (void) free(ary); return NULL; } if (cnt != NULL) *cnt = 1; return ary; } if (cnt == NULL) { for (i = 0; ;i++) { if (ary[i] == NULL) break; } } else i = *cnt; tmp = realloc((void *)ary, sizeof(char **) * (i+2)); if (tmp == NULL) { ary = opendmarc_util_clearargv(ary); return NULL; } ary = tmp; ary[i] = strdup(str); if (ary[i] == NULL) { ary = opendmarc_util_clearargv(ary); return NULL; } ary[i+1] = NULL; if (cnt != NULL) *cnt = i + 1; return ary; } /***************************************************** ** OPENDMARC_UTIL_DUPE_ARGV -- Duplicate an argv ** ** Parameters: ** ary -- Pointer to array to dupe ** Returns: ** u_char ** -- On success ** NULL -- on error ** Side Effects: ** Allocates and reallocates memory. */ u_char ** opendmarc_util_dupe_argv(u_char **ary) { u_char **new = NULL; int new_cnt = 0; if (ary != NULL) { u_char **arp; for (arp = ary; *arp != NULL; ++arp) new = opendmarc_util_pushargv(*arp, new, &new_cnt); } return new; } /***************************************************** ** OPENDMARC_UTIL_CLEANUP -- Remove whitespace ** ** Parameters: ** str -- The string cleanup ** buf -- Where to place result ** buflen -- Length of buf ** Returns: ** buf on success. ** NULL on error and sets errno. ** Side Effects: */ u_char * opendmarc_util_cleanup(u_char *str, u_char *buf, size_t buflen) { char *sp, *ep; if (str == NULL || buf == NULL || strlen((char *)str) > buflen) { errno = EINVAL; return NULL; } (void) memset(buf, '\0', buflen); for (sp = str, ep = buf; *sp != '\0'; sp++) { if (!isascii(*sp) || !isspace(*sp)) *ep++ = *sp; } return buf; } /************************************************************ ** OPENDMARC_UTIL_FINDDOMAIN --Focus on the domain ** ** Parameters: ** raw -- The address containing domain ** buf -- Where to place result ** buflen -- Length of buf ** Returns: ** buf on success. ** NULL on error and sets errno. ** Side Effects: ** e.g. (foo) a@a.com (bar) ---> a.com ** "foo" "foo" --> a.com ** a@a.com, b@b.com, c@c.com --> a.com */ u_char * opendmarc_util_finddomain(u_char *raw, u_char *buf, size_t buflen) { u_char *a = NULL; u_char *b = NULL; u_char *ep = NULL; u_char copy[BUFSIZ]; u_char *cp = NULL; int inparen = 0; #define OPENDMARC_MAX_QUOTES (256) int quotes[OPENDMARC_MAX_QUOTES + 1]; int numquotes = 0; size_t len; if (raw == NULL) return NULL; (void) memset(copy, '\0', sizeof copy); len = strlen((char *)raw); if (len > BUFSIZ) len = BUFSIZ - 1; (void) strncpy(copy, raw, len); /* * Quoted commas do not delimit addresses. * Un-quoted ones do. */ for (cp = copy; *cp != '\0'; ++cp) { /* * <> has a higher precedence than quotes. * Prevents "From: Davide D'Marco " from breaking. */ if (*cp == '<') break; if (numquotes == 0 && *cp == ',') { *cp = '\0'; break; } if (numquotes > 0 && *cp == ')') { if (quotes[numquotes-1] == ')') { --numquotes; *cp = ' '; continue; } } if (*cp == '"' || *cp == '\'' || *cp == '(') { if (*cp == '(') *cp = ')'; if (numquotes == 0) { quotes[numquotes] = *cp; ++numquotes; *cp = ' '; continue; } if (*cp == quotes[numquotes -1]) { --numquotes; *cp = ' '; continue; } quotes[numquotes] = *cp; if (numquotes >= OPENDMARC_MAX_QUOTES) break; ++numquotes; *cp = ' '; continue; } if (numquotes > 0) *cp = ' '; } ep = copy + strlen((char *)copy); for (b = ep-1; b > copy; --b) { if (*b == '<') break; } if (*b == '<') { for (a = b; a < ep; ++a) { if (*a == '>') break; } if (*a == '>') { *a = '\0'; cp = ++b; goto strip_local_part; } } for (a = copy; a < ep; a++) { if (isspace((int)*a)) continue; if (*a == '(') { inparen = 1; continue; } if (inparen == 1 && *a != ')') continue; if (inparen == 1 && *a == ')') { inparen = 0; continue; } break; } for (b = ep -1; b > a; --b) { if (isspace((int)*b)) continue; if (*b == ')') { inparen = 1; continue; } if (inparen == 1 && *b != '(') continue; if (inparen == 1 && *b == '(') { inparen = 0; continue; } break; } *(b+1) ='\0'; cp = a; strip_local_part: if (cp == NULL) cp = copy; ep = strchr(cp, '@'); if (ep != NULL) cp = ep + 1; len = strlen((char *)cp); if (len > buflen) cp[buflen -1] = '\0'; len = strlen((char *)cp); if (len > 0) { /* * If the domain name ends in a dot, drop that dot. */ ep = cp + len -1; if (*ep == '.') *ep = '\0'; } (void) strlcpy(buf, cp, buflen); return buf; } char ** opendmarc_util_freenargv(char **ary, int *num) { if (ary != NULL) { char **ccp; for (ccp = ary; *ccp != NULL; ++ccp) { (void) free(*ccp); *ccp = NULL; } (void) free(ary); ary = NULL; } if (num != NULL) *num = 0; return NULL; } char ** opendmarc_util_pushnargv(char *str, char **ary, int *num) { int i; char **tmp; if (str != NULL) { if (ary == NULL) { ary = calloc(sizeof(char **), 2); if (ary == NULL) { if (num != NULL) *num = 0; return NULL; } *ary = strdup(str); *(ary+1) = NULL; if (*ary == NULL) { (void) free(ary); ary = NULL; if (num != NULL) *num = 0; return NULL; } if (num != NULL) *num = 1; return ary; } i = 0; if (num == NULL) { for (i = 0; ;i++) { if (ary[i] == NULL) break; } } else i = *num; tmp = realloc((void *)ary, sizeof(char **) * (i+2)); if (tmp == NULL) { ary = opendmarc_util_freenargv(ary, num); return NULL; } ary = tmp; ary[i] = strdup(str); if (ary[i] == NULL) { ary = opendmarc_util_freenargv(ary, num); return NULL; } ++i; ary[i] = NULL; if (num != NULL) *num = i; } return ary; } /* ** Convert a decimal unsigned long interger into a string. ** Returns a pointer to the passed buffer. */ char * opendmarc_util_ultoa(unsigned long val, char *buffer, size_t bufferlen) { register char *b = buffer; register size_t l = bufferlen; register unsigned long v = val; register long mod, d, digit; #define MAXDIGITS (32) int digits[MAXDIGITS]; if (b == NULL || l < 2) return NULL; if (v == 0) { *b++ = '0'; *b = '\0'; return buffer; } digit = 0; do { mod = v % 10; v = v / 10; digits[digit] = mod; ++digit; if (digit >= MAXDIGITS) break; } while(v != 0); for (d = digit-1; d >= 0; --d) { switch (digits[d]) { case 0: *b++ = '0'; --l; break; case 1: *b++ = '1'; --l; break; case 2: *b++ = '2'; --l; break; case 3: *b++ = '3'; --l; break; case 4: *b++ = '4'; --l; break; case 5: *b++ = '5'; --l; break; case 6: *b++ = '6'; --l; break; case 7: *b++ = '7'; --l; break; case 8: *b++ = '8'; --l; break; case 9: *b++ = '9'; --l; break; } if (l == 1) break; } *b = '\0'; return buffer; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/opendmarc_xml.c000066400000000000000000000431261416002254500233520ustar00rootroot00000000000000/*********************************************************************** ** OPENDMARC_XML.C ** OPENDMARC_XML -- Parse a blob of xml DMARC report data ** OPENDMARC_XML_PARSE -- Read a file into a blob ** Copyright (c) 2012-2014, The Trusted Domain Project. All rights reserved. ************************************************************************/ # include "opendmarc_internal.h" /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ static char *Taglist[] = { "adkim", "aspf", "auth_results", "begin", "comment", "count", "date_range", "disposition", "dkim", "domain", "email", "end", "extra_contact_info", "feedback", "header_from", "human_result", "identifiers", "org_name", "p", "pct", "policy_evaluated", "policy_published", "reason", "record", "report_id", "report_metadata", "result", "row", "source_ip", "sp", "spf", "type", NULL, }; static int tag_lookup(char *tag) { char **cpp; for (cpp = Taglist; *cpp != NULL; ++cpp) { if (strcasecmp(*cpp, tag) == 0) return TRUE; } return FALSE; } /*********************************************************************** ** OPENDMARC_XML -- Parse a blob of xml DMARC report data ** Arguments: ** b -- The blob of xml report data ** blen -- Size of blob ** Returns: ** Nothing yet NEED TO DESIGN OUTPUT ** Side Effects: ** Pushes and pops off local stack, no recursion. ************************************************************************/ # define MAX_STACK_DEPTH (10) # define MAX_STACK_LINE_LEN (256) # define MAX_ITEM_NAME_LEN (256) typedef char STACK[MAX_STACK_DEPTH][MAX_STACK_LINE_LEN]; u_char ** opendmarc_xml(char *b, size_t blen, char *e, size_t elen) { STACK stack; int sidx = -1; char *cp, *ep, *sp, *tagp; int i; int inside = FALSE; char org_name[MAX_ITEM_NAME_LEN]; u_char ** ary = NULL; int ary_cnt = 0; char begin[MAX_ITEM_NAME_LEN]; char end[MAX_ITEM_NAME_LEN]; char source_ip[MAX_ITEM_NAME_LEN]; char report_id[MAX_ITEM_NAME_LEN]; char email[MAX_ITEM_NAME_LEN]; char count[MAX_ITEM_NAME_LEN]; char disposition[MAX_ITEM_NAME_LEN]; char policy_eval_dkim[MAX_ITEM_NAME_LEN]; char policy_eval_spf[MAX_ITEM_NAME_LEN]; char domain[MAX_ITEM_NAME_LEN]; char reason_type[MAX_ITEM_NAME_LEN]; char reason_comment[MAX_ITEM_NAME_LEN]; char adkim[8]; char aspf[8]; char p[32]; char pct[8]; char header_from[MAX_ITEM_NAME_LEN]; char auth_dkim_domain[MAX_ITEM_NAME_LEN]; char auth_dkim_result[MAX_ITEM_NAME_LEN]; char auth_dkim_human[MAX_ITEM_NAME_LEN]; char auth_spf_domain[MAX_ITEM_NAME_LEN]; char auth_spf_result[MAX_ITEM_NAME_LEN]; char auth_spf_human[MAX_ITEM_NAME_LEN]; char obuf[BUFSIZ * 2]; char e_buf[128]; if (e == NULL) { e = e_buf; elen = sizeof e_buf; } (void) memset(auth_dkim_domain, '\0', sizeof auth_dkim_domain); (void) memset(auth_dkim_human, '\0', sizeof auth_dkim_human); (void) memset(auth_dkim_result, '\0', sizeof auth_dkim_result); (void) memset(auth_spf_domain, '\0', sizeof auth_spf_domain); (void) memset(auth_spf_human, '\0', sizeof auth_spf_human); (void) memset(auth_spf_result, '\0', sizeof auth_spf_result); (void) memset(count, '\0', sizeof count); (void) memset(disposition, '\0', sizeof disposition); (void) memset(email, '\0', sizeof email); (void) memset(header_from, '\0', sizeof header_from); (void) memset(policy_eval_dkim, '\0', sizeof policy_eval_dkim); (void) memset(policy_eval_spf, '\0', sizeof policy_eval_spf); (void) memset(source_ip, '\0', sizeof source_ip); (void) memset(stack, '\0', sizeof(STACK)); (void) memset(obuf, '\0', sizeof obuf); (void) strlcpy(obuf, "begin,end,org_name,email,domain,adkim,aspf,p,pct,source_ip,count,disposition,policy_eval_dkim,policy_eval_spf,reason_type,reason_comment,header_from,auth_dkim_domain,auth_dkim_result,auth_dkim_human,auth_spf_domain,auth_spf_result,auth_spf_human", sizeof obuf); ary = opendmarc_util_pushargv((u_char *)obuf, ary, &ary_cnt); ep = b + blen; for (cp = b; cp < ep; ++cp) { if (isspace((int) *cp)) continue; if (inside == FALSE) { if (*cp != '<') continue; ++cp; for (sp = cp; *sp != '\0'; ++sp) { if (*sp == '?') break; if (isalpha((int) *sp) || *sp == '_' ||*sp == '/') continue; break; } if (*sp == '?') continue; *sp = '\0'; if (*cp == '/') tagp = cp+1; else tagp = cp; if (tag_lookup(tagp) == FALSE) { continue; } if (*cp == '/') { if (sidx == -1) { //(void) fprintf(stderr, "<%s>: %s\n", // cp, "End token with never a start token (ignored)"); cp = sp; continue; } if (strcasecmp(cp+1, "record") == 0) { (void) memset(obuf, '\0', sizeof obuf); (void) strlcat(obuf, begin, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, end, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, org_name, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, email, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, domain, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, adkim, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, aspf, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, p, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, pct, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, source_ip, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, count, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, disposition, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, policy_eval_dkim, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, policy_eval_spf, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, reason_type, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, reason_comment, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, header_from, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, auth_dkim_domain, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, auth_dkim_result, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, auth_dkim_human, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, auth_spf_domain, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, auth_spf_result, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); (void) strlcat(obuf, auth_spf_human, sizeof obuf); (void) strlcat(obuf, ",", sizeof obuf); ary = opendmarc_util_pushargv((u_char *)obuf, ary, &ary_cnt); if (ary == NULL) { int xerror = errno; (void) strlcpy(e, "Allocate memory :", elen); (void) strlcat(e, strerror(xerror), elen); return ary; } (void) memset(count, '\0', sizeof count); (void) memset(source_ip, '\0', sizeof source_ip); (void) memset(disposition, '\0', sizeof disposition); (void) memset(policy_eval_dkim, '\0', sizeof policy_eval_dkim); (void) memset(policy_eval_spf, '\0', sizeof policy_eval_spf); (void) memset(reason_type, '\0', sizeof reason_type); (void) memset(reason_comment, '\0', sizeof reason_comment); (void) memset(header_from, '\0', sizeof header_from); (void) memset(auth_dkim_domain, '\0', sizeof auth_dkim_domain); (void) memset(auth_dkim_result, '\0', sizeof auth_dkim_result); (void) memset(auth_dkim_human, '\0', sizeof auth_dkim_human); (void) memset(auth_spf_domain, '\0', sizeof auth_spf_domain); (void) memset(auth_spf_result, '\0', sizeof auth_spf_result); (void) memset(auth_spf_human, '\0', sizeof auth_spf_human); } /* ** If matches current , pop off the stack. ** Possiblle bug here, for bad case of text ** My understanding is that XML clauses may not overlap. That is, ** the following is illegal: ** texttexttext */ if (strcasecmp(cp+1, stack[sidx]) == 0) { --sidx; cp = sp; if (sidx < -1) break; continue; } else { /* recover gracefully how? */ } for (i = sidx; i > 0; --i) { if (strcasecmp(cp+1, stack[sidx]) == 0) break; } if (i < 0) { //(void) fprintf(stderr, "<%s>: %s\n", // cp, "End token with no start token (ignored)"); cp = sp; continue; } if (sidx >= 0) --sidx; cp = sp; continue; } else { ++sidx; if (sidx >= MAX_STACK_DEPTH) { (void) strlcpy(e, "<", elen); (void) strlcat(e, cp, elen); (void) strlcat(e, ">: Too much stack depth", elen); return (ary = opendmarc_util_clearargv(ary)); } (void) strlcpy(stack[sidx], cp, MAX_STACK_LINE_LEN); cp = sp; inside = TRUE; continue; } } else { if (*cp == '<') { inside = FALSE; --cp; continue; } for(sp = cp; *sp != '\0'; ++sp) { if (*sp == '<') break; continue; } if (*sp != '<') { cp = sp-1; continue; } *sp = '\0'; if (strcasecmp(stack[sidx], "org_name") == 0) { (void) memset(org_name, '\0', sizeof org_name); (void) strlcpy(org_name, cp, sizeof org_name); } else if (strcasecmp(stack[sidx], "report_id") == 0) { (void) memset(report_id, '\0', sizeof report_id); (void) strlcpy(report_id, cp, sizeof report_id); } else if (strcasecmp(stack[sidx], "email") == 0) { (void) memset(email, '\0', sizeof email); (void) strlcpy(email, cp, sizeof email); } else if (strcasecmp(stack[sidx], "begin") == 0) { time_t t; struct tm *tm; t = strtoul(cp, NULL, 10); tm = gmtime(&t); (void) memset(begin, '\0', sizeof begin); (void) strftime(begin, sizeof begin, "%F-%H:%M:%S", tm); } else if (strcasecmp(stack[sidx], "end") == 0) { time_t t; struct tm *tm; t = strtoul(cp, NULL, 10); tm = gmtime(&t); (void) memset(end, '\0', sizeof end); (void) strftime(end, sizeof end, "%F-%H:%M:%S", tm); } else if (strcasecmp(stack[sidx], "source_ip") == 0) { (void) strlcpy(source_ip, cp, sizeof source_ip); } else if (sidx > 1 && strcasecmp(stack[sidx-2], "auth_results") == 0 && strcasecmp(stack[sidx-1], "dkim") == 0 && strcasecmp(stack[sidx], "domain") == 0) { if (*auth_dkim_domain == '\0') (void) strlcpy(auth_dkim_domain, cp, sizeof auth_dkim_domain); else { (void) strlcat(auth_dkim_domain, "|", sizeof auth_dkim_domain); (void) strlcat(auth_dkim_domain, cp, sizeof auth_dkim_domain); } } else if (sidx > 1 && strcasecmp(stack[sidx-2], "auth_results") == 0 && strcasecmp(stack[sidx-1], "dkim") == 0 && strcasecmp(stack[sidx], "result") == 0) { if (*auth_dkim_result == '\0') (void) strlcpy(auth_dkim_result, cp, sizeof auth_dkim_result); else { (void) strlcat(auth_dkim_result, "|", sizeof auth_dkim_result); (void) strlcat(auth_dkim_result, cp, sizeof auth_dkim_result); } } else if (sidx > 1 && strcasecmp(stack[sidx-2], "auth_results") == 0 && strcasecmp(stack[sidx-1], "dkim") == 0 && strcasecmp(stack[sidx], "human_result") == 0) { if (*auth_dkim_human == '\0') (void) strlcpy(auth_dkim_human, cp, sizeof auth_dkim_human); else { (void) strlcat(auth_dkim_human, "|", sizeof auth_dkim_human); (void) strlcat(auth_dkim_human, cp, sizeof auth_dkim_human); } } else if (sidx > 1 && strcasecmp(stack[sidx-2], "auth_results") == 0 && strcasecmp(stack[sidx-1], "spf") == 0 && strcasecmp(stack[sidx], "domain") == 0) { if (*auth_spf_domain == '\0') (void) strlcpy(auth_spf_domain, cp, sizeof auth_spf_domain); else { (void) strlcat(auth_spf_domain, "|", sizeof auth_spf_domain); (void) strlcat(auth_spf_domain, cp, sizeof auth_spf_domain); } } else if (sidx > 1 && strcasecmp(stack[sidx-2], "auth_results") == 0 && strcasecmp(stack[sidx-1], "spf") == 0 && strcasecmp(stack[sidx], "result") == 0) { if (*auth_spf_result == '\0') (void) strlcpy(auth_spf_result, cp, sizeof auth_spf_result); else { (void) strlcat(auth_spf_result, "|", sizeof auth_spf_result); (void) strlcat(auth_spf_result, cp, sizeof auth_spf_result); } } else if (sidx > 1 && strcasecmp(stack[sidx-2], "auth_results") == 0 && strcasecmp(stack[sidx-1], "spf") == 0 && strcasecmp(stack[sidx], "human_result") == 0) { if (*auth_spf_human == '\0') (void) strlcpy(auth_spf_human, cp, sizeof auth_spf_human); else { (void) strlcat(auth_spf_human, "|", sizeof auth_spf_human); (void) strlcat(auth_spf_human, cp, sizeof auth_spf_human); } } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_published") == 0 && strcasecmp(stack[sidx], "domain") == 0) { (void) memset(domain, '\0', sizeof domain); (void) strlcpy(domain, cp, sizeof domain); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_published") == 0 && strcasecmp(stack[sidx], "adkim") == 0) { (void) memset(adkim, '\0', sizeof adkim); (void) strlcpy(adkim, cp, sizeof adkim); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_published") == 0 && strcasecmp(stack[sidx], "aspf") == 0) { (void) memset(aspf, '\0', sizeof aspf); (void) strlcpy(aspf, cp, sizeof aspf); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_published") == 0 && strcasecmp(stack[sidx], "pct") == 0) { (void) memset(pct, '\0', sizeof pct); (void) strlcpy(pct, cp, sizeof pct); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_published") == 0 && strcasecmp(stack[sidx], "p") == 0) { (void) memset(p, '\0', sizeof p); (void) strlcpy(p, cp, sizeof p); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "reason") == 0 && strcasecmp(stack[sidx], "type") == 0) { if (strlen(reason_type) > 0) (void) strlcat(reason_type, " ", sizeof reason_type); (void) strlcat(reason_type, cp, sizeof reason_type); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "reason") == 0 && strcasecmp(stack[sidx], "comment") == 0) { if (strlen(reason_comment) > 0) (void) strlcat(reason_comment, " ", sizeof reason_comment); (void) strlcat(reason_comment, cp, sizeof reason_comment); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "identifiers") == 0 && strcasecmp(stack[sidx], "header_from") == 0) { /* * Some sites put a full address in here. * Some others list mutilple address here. */ if (*header_from == '\0') (void) strlcpy(header_from, cp, sizeof header_from); else { (void) strlcat(header_from, "|", sizeof header_from); (void) strlcat(header_from, cp, sizeof header_from); } } else if (strcasecmp(stack[sidx], "count") == 0) { (void) strlcpy(count, cp, sizeof count); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_evaluated") == 0 && strcasecmp(stack[sidx], "disposition") == 0) { (void) strlcpy(disposition, cp, sizeof disposition); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_evaluated") == 0 && strcasecmp(stack[sidx], "dkim") == 0) { (void) strlcpy(policy_eval_dkim, cp, sizeof policy_eval_dkim); } else if (sidx > 0 && strcasecmp(stack[sidx-1], "policy_evaluated") == 0 && strcasecmp(stack[sidx], "spf") == 0) { (void) strlcpy(policy_eval_spf, cp, sizeof policy_eval_spf); } *sp = '<'; cp = sp-1; inside = FALSE; continue; } } return ary; } u_char ** opendmarc_xml_parse(char *fname, char *err_buf, size_t err_len) { struct stat statb; FILE * fp; char * bufp; char e_buf[128]; int ret; u_char ** ary = NULL; int xerror; size_t rb; if (fname == NULL) { xerror = errno; (void) snprintf(err_buf, err_len, "%s", "File name was NULL"); errno = EINVAL; return NULL; } if (err_buf == NULL) { err_buf = e_buf; err_len = sizeof e_buf; } ret = lstat(fname, &statb); if (ret != 0) { xerror = errno; (void) snprintf(err_buf, err_len, "%s: %s", fname, strerror(errno)); errno = xerror; return NULL; } if (statb.st_size == 0) { xerror = errno; (void) snprintf(err_buf, err_len, "%s: %s", fname, "Empty file."); errno = xerror; return NULL; } bufp = calloc(statb.st_size + 1, 1); if (bufp == NULL) { xerror = errno; (void) snprintf(err_buf, err_len, "%s: %s", fname, strerror(errno)); errno = xerror; return NULL; } fp = fopen(fname, "r"); if (fp == NULL) { xerror = errno; (void) snprintf(err_buf, err_len, "%s: %s", fname, strerror(errno)); (void) free(bufp); errno = xerror; return NULL; } rb = fread(bufp, 1, statb.st_size, fp); if (rb != statb.st_size) { xerror = errno; (void) snprintf(err_buf, err_len, "%s: truncated read", fname); (void) free(bufp); (void) fclose(fp); errno = xerror; return NULL; } else if (ferror(fp)) { xerror = errno; (void) snprintf(err_buf, err_len, "%s: %s", fname, strerror(errno)); (void) free(bufp); (void) fclose(fp); errno = xerror; return NULL; } (void) fclose(fp); ary = opendmarc_xml(bufp, statb.st_size, err_buf, err_len); xerror = errno; (void) free(bufp); errno = xerror; return ary; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/000077500000000000000000000000001416002254500215125ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/.gitignore000066400000000000000000000002371416002254500235040ustar00rootroot00000000000000.deps core Makefile Makefile.in *.o test_dns_lookup test_tld test_finddomain test_dmarc_parse test_xml_parse test_alignment test_dmarc_fetch test_parse_to_buf OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/Makefile.am000066400000000000000000000017271416002254500235550ustar00rootroot00000000000000SUBDIRS=testfiles LDADD = ../libopendmarc.la $(LIBRESOLV) AM_CPPFLAGS = -I.. -I../.. check_PROGRAMS = test_tld \ test_finddomain \ test_dmarc_parse \ test_dmarc_fetch \ test_xml_parse \ test_parse_to_buf \ test_alignment if LIVE_TESTS #check_PROGRAMS += test_dns_lookup #test_dns_lookup_SOURCES = test_dns_lookup.c if TEST_SPF check_PROGRAMS += test_spf test_spf_SOURCES = test_spf.c endif endif test_tld_SOURCES = test_tld.c test_finddomain_SOURCES = test_finddomain.c test_dmarc_parse_SOURCES = test_dmarc_parse.c test_parse_to_buf_SOURCES = test_parse_to_buf.c test_dmarc_fetch_SOURCES = test_dmarc_fetch.c test_xml_parse_SOURCES = test_xml_parse.c test_alignment_SOURCES = test_alignment.c TESTS = $(check_PROGRAMS) EXTRA_DIST = testfiles/effective_tld_names.dat \ testfiles/good.com!example.com!1337270400!1337356799.xml \ testfiles/bad.com!example.com!1337140800!1337227200.xml OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_alignment.c000066400000000000000000000046421416002254500247010ustar00rootroot00000000000000#include "../opendmarc_internal.h" #include "../dmarc.h" #define TESTFILE "testfiles/effective_tld_names.dat" typedef struct { char * subdomain; char * tld; int mode; int outcome; } TEST_ALIGNMENT_T; int main(int argc, char **argv) { TEST_ALIGNMENT_T *alignp; TEST_ALIGNMENT_T alignm_test[] = { /* 1 */ {"a.b.c.bcx.com", "bcx.com", DMARC_RECORD_A_RELAXED, 0}, /* 2 */ {"a.b.c.edu.ar", "edr.au", DMARC_RECORD_A_STRICT, -1}, /* 3 */ {"oooo.com", "ooo.com", DMARC_RECORD_A_STRICT, -1}, /* 4 */ {"a.foo.com", "b.foo.com", DMARC_RECORD_A_RELAXED, 0}, /* 5 */ {".mac.com.", "mac.com", DMARC_RECORD_A_STRICT, 0}, /* 6 */ {"....mac.com....", "mac.com", DMARC_RECORD_A_STRICT, 0}, /* 7 */ {"mac...com", "..com", DMARC_RECORD_A_STRICT, -1}, /* 8 */ {"a.b.com", "b.com", DMARC_RECORD_A_RELAXED, 0}, /* 9 */ {"b.com", "a.b.com", DMARC_RECORD_A_RELAXED, 0}, /* 10 */ {"a.b.de", "a.b.de", DMARC_RECORD_A_STRICT, 0}, {NULL, NULL, 0}, }; int outcome; int pass, fails, count; char * srcdir; srcdir = getenv("srcdir"); if (srcdir != NULL) { if (chdir(srcdir) != 0) { perror(srcdir); return 1; } } pass = fails = count = 0; /* * First without a tld file. */ for (alignp = alignm_test; alignp != NULL && alignp->subdomain != NULL; ++alignp) { count += 1; outcome = opendmarc_policy_check_alignment(alignp->subdomain, alignp->tld, alignp->mode); if (outcome == alignp->outcome) { //printf("\tALIGNMENT No TLD file: find test: %d: PASS\n", count); pass += 1; } else { printf("\tALIGNMENT No TLD file: domain=%s versus tld=%s relaxed test No. %d: FAIL\n", alignp->subdomain, alignp->tld, count); fails += 1; } } /* * Second with a tld file. */ if (opendmarc_tld_read_file(TESTFILE, "//", "*.", "!") != 0) { printf("\tTLD find test: %s: could not read. Skipping\n", TESTFILE); return 0; } count = 0; for (alignp = alignm_test; alignp != NULL && alignp->subdomain != NULL; ++alignp) { count += 1; outcome = opendmarc_policy_check_alignment(alignp->subdomain, alignp->tld, alignp->mode); if (outcome == alignp->outcome) { //printf("\tALIGNMENT With TLD file: find test: %d: PASS\n", count); pass += 1; } else { printf("\tALIGNMENT No With file: find test: %d: FAIL\n", count); fails += 1; } } printf("ALIGNMENT find test: pass=%d, fail=%d\n", pass, fails); return fails; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_dmarc_fetch.c000066400000000000000000000040241416002254500251540ustar00rootroot00000000000000#include "../opendmarc_internal.h" #include "../dmarc.h" #define TESTFILE "testfiles/effective_tld_names.dat" int main(int argc, char **argv) { static char *record= "v=DMARC1; p=none; sp=none; adkim=s; aspf=s; pct=50; ri=300; rf=afrf; rua=mailto:dmarc-a@abuse.net; ruf=mailto:dmarc-f@abuse.net"; DMARC_POLICY_T *pctx; OPENDMARC_STATUS_T status; int pass, fails, count; int pct; int adkim; int aspf; pass = fails = count = 0; pctx = opendmarc_policy_connect_init("1.2.3.4", 0); if (pctx == NULL) { (void) fprintf(stderr, "opendmarc_policy_connect_init: %s\n", strerror(errno)); return 1; } status = opendmarc_policy_parse_dmarc(pctx, "abuse.net", record); if (status != DMARC_PARSE_OKAY) { printf("\t%s(%d): opendmarc_policy_parse_dmarc: %s: FAIL\n", __FILE__, __LINE__, opendmarc_policy_status_to_str(status)); fails += 1; } status = opendmarc_policy_fetch_pct(pctx, &pct); if (status != DMARC_PARSE_OKAY) { printf("\t%s(%d): opendmarc_policy_fetch_pct: %s: FAIL\n", __FILE__, __LINE__, opendmarc_policy_status_to_str(status)); fails += 1; } if (pct != 50) { printf("\t%s(%d): opendmarc_policy_fetch_pct: expected 50 got %d: FAIL\n", __FILE__, __LINE__, pct); fails += 1; } status = opendmarc_policy_fetch_adkim(pctx, &adkim); if (status != DMARC_PARSE_OKAY) { printf("\t%s(%d): opendmarc_policy_fetch_adkim: %s: FAIL\n", __FILE__, __LINE__, opendmarc_policy_status_to_str(status)); fails += 1; } if (adkim != DMARC_RECORD_A_STRICT) { printf("\t%s(%d): opendmarc_policy_fetch_adkim: expected %d got %d: FAIL\n", __FILE__, __LINE__, DMARC_RECORD_A_STRICT, adkim); fails += 1; } status = opendmarc_policy_fetch_aspf(pctx, &aspf); if (status != DMARC_PARSE_OKAY) { printf("\t%s(%d): opendmarc_policy_fetch_aspf: %s: FAIL\n", __FILE__, __LINE__, opendmarc_policy_status_to_str(status)); fails += 1; } if (aspf != DMARC_RECORD_A_STRICT) { printf("\t%s(%d): opendmarc_policy_fetch_adkim: expected %d got %d: FAIL\n", __FILE__, __LINE__, DMARC_RECORD_A_STRICT, aspf); fails += 1; } return fails; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_dmarc_parse.c000066400000000000000000000047301416002254500252010ustar00rootroot00000000000000#include "../opendmarc_internal.h" #ifndef OPENDMARC_POLICY_C # define OPENDMARC_POLICY_C #endif /* ! OPENDMARC_POLICY_C */ #include "../dmarc.h" #define TESTFILE "testfiles/effective_tld_names.dat" typedef struct { char *dmarc; int outcome; } TEST_DMARC_PARSE_T; int main(int argc, char **argv) { TEST_DMARC_PARSE_T *dpp; TEST_DMARC_PARSE_T dpp_test[] = { /* 1 */ {"v=DMARC1; p=none; rf=afrf; rua=mailto:dmarc-a@abuse.net; ruf=mailto:dmarc-f@abuse.net", DMARC_PARSE_OKAY}, /* 2 */ {"v=DMARC1; p=none;", DMARC_PARSE_OKAY}, /* 3 */ {"v=DMARC1; p=reject;", DMARC_PARSE_OKAY}, /* 4 */ {"v=DMARC1; p=quarantine;", DMARC_PARSE_OKAY}, /* 5 */ {"v=DMARC1; p=n;", DMARC_PARSE_OKAY}, /* 6 */ {"", DMARC_PARSE_ERROR_EMPTY}, /* 7 */ {"V=BOB", DMARC_PARSE_ERROR_BAD_VERSION}, /* 8 */ {"v=DMARC1; p=bob;", DMARC_PARSE_ERROR_BAD_VALUE}, /* 9 */ {"v=DMARC1; p=none; sp=bob;", DMARC_PARSE_ERROR_BAD_VALUE}, /* 10 */ {"v=DMARC1; p=none; adkim=bob;", DMARC_PARSE_ERROR_BAD_VALUE}, /* 11 */ {"v=DMARC1; p=none; aspf=bob;", DMARC_PARSE_ERROR_BAD_VALUE}, /* 12 */ {"v=DMARC1; p=none; rf=bob;", DMARC_PARSE_ERROR_BAD_VALUE}, /* 13 */ {"v=DMARC1; p=none; ri=bob;", DMARC_PARSE_ERROR_BAD_VALUE}, /* 14 */ {"v=DMARC1; p=none; pct=500;", DMARC_PARSE_ERROR_BAD_VALUE}, /* 15 */ {"v=DMARC1; pct=100;", DMARC_PARSE_ERROR_NO_REQUIRED_P}, /* 16 */ {"v=DMARC1; p=none; rua=ftp://abuse.com", DMARC_PARSE_OKAY}, /* 17 */ {"v=DMARC1; p=none; ruf=mailto://abuse.com", DMARC_PARSE_OKAY}, /* 18 */ {"v=DMARC1; p=none; ruf=mailto://abuse.com; foo=bar; buzz=happy;", DMARC_PARSE_OKAY}, /* 19 */ {"v=DMARC1; p=none; rf=000000000000000000000000000000000", DMARC_PARSE_ERROR_BAD_VALUE}, {NULL, 0}, }; int pass, fails, count; DMARC_POLICY_T *pctx; OPENDMARC_STATUS_T status; pass = fails = count = 0; for (dpp = dpp_test; dpp != NULL && dpp->dmarc != NULL; ++dpp) { count += 1; pctx = opendmarc_policy_connect_init("1.2.3.4", 0); if (pctx == NULL) { (void) fprintf(stderr, "opendmarc_policy_connect_init: %s\n", strerror(errno)); return 1; } status = opendmarc_policy_parse_dmarc(pctx, "abuse.net", dpp->dmarc); if (status == dpp->outcome) { //printf("\tDMARC Policy Parse: %d: PASS\n", count); pass += 1; } else { printf("\tDMARC Policy Parse: %d: \"%s\", status=%d FAIL\n", count, dpp->dmarc, status); fails += 1; } pctx = opendmarc_policy_connect_shutdown(pctx); } printf("DMARC Policy Parse: pass=%d, fail=%d\n", pass, fails); return fails; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_dns_lookup.c000066400000000000000000000116211416002254500250730ustar00rootroot00000000000000#include "../opendmarc_internal.h" #include "../dmarc.h" #define TESTFILE "testfiles/effective_tld_names.dat" typedef struct { char * domain; int cpnotnull; int replyzero; char * what; } DL; int dmarc_dns_test_record(void) { DL domain_list[] = { {"_dmarc.bcx.com", TRUE, TRUE, "DMARC record found"}, {"bcx.org._report._dmarc.bcx.com", TRUE, TRUE, "DMARC _report record found"}, {"_dmarc.mail.bcx.com", FALSE, FALSE, "Existing domain, no DMARC"}, {"*._report._dmarc.bcx.com", TRUE, TRUE, "DMARC record found"}, {"_dmarc.none.bcx.com", FALSE, FALSE, "No such domain"}, {"web.de", FALSE, FALSE, "Existing domain, no DMARC"}, /* {"_dmarc.sf1.i.bcx.com", TRUE, TRUE, "Got DMARC record via CNAME"}, */ {NULL, 0, 0, NULL}, }; DL * dp; char txt_record[2048]; int reply; char * cp; int success, failures; success = failures = 0; for (dp = domain_list; dp->domain != NULL; ++dp) { cp = dmarc_dns_get_record(dp->domain, &reply, txt_record, sizeof txt_record); if (cp == NULL) { if (dp->cpnotnull == TRUE) /* cp should be != NULL */ { printf("\t%s(%d): %s: %s: FAIL.\n", __FILE__, __LINE__, dp->domain, dp->what); ++failures; continue; } if (reply != 0 && dp->replyzero == TRUE) { printf("\t%s(%d): %s: %s: FAIL.\n", __FILE__, __LINE__, dp->domain, dp->what); ++failures; continue; } //printf("\t%s(%d): %s: %s: PASS.\n", __FILE__, __LINE__, dp->domain, dp->what); ++success; } else { if (dp->cpnotnull == FALSE) /* cp should be == NULL */ { printf("\t%s(%d): %s: %s: FAIL.\n", __FILE__, __LINE__, dp->domain, dp->what); ++failures; continue; } if (reply == 0 && dp->replyzero == FALSE) { printf("\t%s(%d): %s: %s: FAIL.\n", __FILE__, __LINE__, dp->domain, dp->what); ++failures; continue; } //printf("\t%s(%d): %s: %s: PASS.\n", __FILE__, __LINE__, dp->domain, dp->what); ++success; } } printf("Test dmarc_dns_get_record(): %d pass, %d fail\n", success, failures); return failures; } typedef struct { char * domain; int use_tld_list; int status; } DL2; int dmarc_dns_test_query(void) { DL2 domain_list[] = { {"linkedin.com",FALSE, 0}, {"mail.bcx.com",FALSE, DMARC_DNS_ERROR_NO_RECORD}, {"none.bcx.com",FALSE, DMARC_DNS_ERROR_NO_RECORD}, {"web.de", FALSE, DMARC_DNS_ERROR_NO_RECORD}, {"service3.zalando-lounge.de", TRUE, DMARC_PARSE_OKAY}, {"service3.zalando-lounge.de", FALSE, DMARC_PARSE_OKAY}, {"service3.zalando-lounge.de", TRUE, DMARC_PARSE_OKAY}, {NULL, 0}, }; DL2 * dp; int success, failures; DMARC_POLICY_T *pctx; OPENDMARC_STATUS_T status; success = failures = 0; for (dp = domain_list; dp->domain != NULL; ++dp) { pctx = opendmarc_policy_connect_init("0.0.0.0", FALSE); if (dp->use_tld_list) (void) opendmarc_tld_read_file(TESTFILE, "//", "*.", "!"); status = opendmarc_policy_query_dmarc(pctx, dp->domain); pctx = opendmarc_policy_connect_shutdown(pctx); if (status != dp->status) { printf("\t%s(%d): %s: status=%d, sought_status=%d: FAIL.\n", __FILE__, __LINE__, dp->domain, status, dp->status); ++failures; continue; } //printf("\t%s(%d): %s: status=%d, sought_status=%d: PASS.\n", __FILE__, __LINE__, dp->domain, status, dp->status); ++success; } printf("Test opendmarc_policy_query_dmarc(): %d pass, %d fail\n", success, failures); return failures; } typedef struct { char * domain; char * uri; int status; } DL3; int dmarc_dns_test_xdomain_query(void) { DL3 domain_list[] = { {"facebookmail.com", "d@ruf.agari.com", DMARC_PARSE_OKAY}, {"facebookmail.com", "postmater@facebook.com", DMARC_DNS_ERROR_NO_RECORD}, {"facebook.com", "postmater@facebook.com", DMARC_PARSE_OKAY}, {"csh.rit.edu", "postmaster@csh.rit.edu", DMARC_PARSE_OKAY}, {"csh.rit.edu", "postmaster@mail.csh.rit.edu", DMARC_PARSE_OKAY}, {"linkedin.com", "worr@csh.rit.edu", DMARC_DNS_ERROR_NO_RECORD}, {"none.bcx.com", "worr@csh.rit.edu", DMARC_DNS_ERROR_NO_RECORD}, {"none.fnnfansavasdfjashfasfsdf.csadf", "worr@csh.rit.edu", DMARC_DNS_ERROR_NO_RECORD}, {NULL, NULL, 0}, }; DL3 *dp; int successes, failures; DMARC_POLICY_T *pctx; OPENDMARC_STATUS_T status; successes = failures = 0; for (dp = domain_list; dp->domain != NULL; ++dp) { pctx = opendmarc_policy_connect_init("0.0.0.0", FALSE); pctx->from_domain = strdup(dp->domain); status = opendmarc_policy_query_dmarc_xdomain(pctx, dp->uri); pctx = opendmarc_policy_connect_shutdown(pctx); if (status != dp->status) { printf("\t%s(%d): %s, %s: %d: FAIL.\n", __FILE__, __LINE__, dp->domain, dp->uri, status); ++failures; } else { ++successes; } } printf("Test opendmarc_policy_query_dmarc_xdomain(): %d pass, %d fail\n", successes, failures); return failures; } int main(int argc, char **argv) { if (dmarc_dns_test_record() != 0) return 1; if (dmarc_dns_test_query() != 0) return 1; if (dmarc_dns_test_xdomain_query() != 0) return 1; return 0; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_finddomain.c000066400000000000000000000030361416002254500250270ustar00rootroot00000000000000#include "../opendmarc_internal.h" typedef struct { char *raw; char *should_get; } TEST_FINEDDOMAIN_T; int main(int argc, char **argv) { TEST_FINEDDOMAIN_T *domp; TEST_FINEDDOMAIN_T domain_test[] = { /* 1 */ {"Joe Johnson ", "joe.com"}, /* 2 */ {"\"Johnson, Joe \" joe@joe.com", "joe.com"}, /* 3 */ {"\"Joe Johnson\" ", "joe.com"}, /* 4 */ {"(Joe Johnson) joe@joe.com", "joe.com"}, /* 5 */ {"joe@joe.com", "joe.com"}, /* 6 */ {"<<<>>>", "joe.com"}, /* 7 */ {"Joe Johnson , ace@ace.com", "joe.com"}, /* 8 */ {"joe@joe.com, ace@ace.com", "joe.com"}, /* 9 */ {"Mail From:", "joe.com"}, /* 10 */ {"\"Mandel, Bob\" ", "joe.com"}, /* 11 */ {"(,) joe@joe.com", "joe.com"}, /* 12 */ {"\"( bob@bob.com)\" joe@joe.com", "joe.com"}, /* 12 */ {"From: Davide D'Marco ", "blah.com"}, {NULL, NULL}, }; u_char dbuf[256]; int pass, fails, count; u_char *dp; pass = fails = count = 0; for (domp = domain_test; domp != NULL && domp->raw != NULL; ++domp) { count += 1; dp = opendmarc_util_finddomain(domp->raw, dbuf, sizeof dbuf); if (dp == NULL) { (void) printf("\t%s: %s\n", domp->raw, strerror(errno)); ++fails; continue; } if (strcmp(dbuf, domp->should_get) == 0) { //printf("\tFinddomain test: %d: PASS\n", count); pass += 1; } else { printf("\tFinddomain test: %d: FAIL\n", count); fails += 1; } } printf("Finddomain test: pass=%d, fail=%d\n", pass, fails); return fails; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_parse_to_buf.c000066400000000000000000000026671416002254500254000ustar00rootroot00000000000000#include "../opendmarc_internal.h" #ifndef OPENDMARC_POLICY_C # define OPENDMARC_POLICY_C #endif /* ! OPENDMARC_POLICY_C */ #include "../dmarc.h" int main(int argc, char **argv) { char * record = "v=DMARC1; p=none; rf=afrf; fo=1:s rua=mailto:dmarc-a@abuse.net; ruf=mailto:dmarc-f@abuse.net"; int pass, fails, count; DMARC_POLICY_T *pctx; OPENDMARC_STATUS_T status; char small_buf[10]; char big_buf[BUFSIZ * 4]; pass = fails = count = 0; pctx = opendmarc_policy_connect_init("1.2.3.4", 0); if (pctx == NULL) { (void) fprintf(stderr, "opendmarc_policy_connect_init: %s\n", strerror(errno)); return 1; } status = opendmarc_policy_parse_dmarc(pctx, "abuse.net", record); if (status == DMARC_PARSE_OKAY) { pass += 1; } else { printf("\tDMARC Policy Parse: \"%s\" FAIL\n", record); fails += 1; } if (opendmarc_policy_to_buf(NULL, NULL, 0) == EINVAL) { pass += 1; } else { printf("\tDMARC Policy Parse To NULL Buffer: FAIL\n"); fails += 1; } if (opendmarc_policy_to_buf(pctx, small_buf, sizeof small_buf) == E2BIG) { pass += 1; } else { printf("\tDMARC Policy Parse To Small Buffer: FAIL\n"); fails += 1; } if (opendmarc_policy_to_buf(pctx, big_buf, sizeof big_buf) == 0) { pass += 1; } else { printf("\tDMARC Policy Parse To Big Buffer: FAIL\n"); fails += 1; } pctx = opendmarc_policy_connect_shutdown(pctx); printf("DMARC Policy Parse To Buffer: pass=%d, fail=%d\n", pass, fails); return fails; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_spf.c000066400000000000000000000217521416002254500235140ustar00rootroot00000000000000#include "opendmarc_internal.h" #include "dmarc.h" #if WITH_SPF #if HAVE_SPF2_H // Yes we have the spf.h file, so we test libspf2 typedef struct { char *helo; char *mfrom; char *ip; int outcome; } SPF2_T; int opendmarc_spf2_run_test() { SPF2_T tests[] = { /* {"gushi.org", "root@gushi.org", "149.20.68.145", DMARC_POLICY_SPF_OUTCOME_PASS}, */ {"agari.com", "root@agari.com", "2001:a60:901e::22", DMARC_POLICY_SPF_OUTCOME_FAIL}, {"agari.com", "root@agari.com", "1.2.3.4", DMARC_POLICY_SPF_OUTCOME_FAIL}, {"agari.com", "root@agari.com", "185.28.196.1", DMARC_POLICY_SPF_OUTCOME_PASS}, /* {"gushi.org", "<>", "204.14.152.227", DMARC_POLICY_SPF_OUTCOME_FAIL}, */ {NULL, NULL, NULL, 0} }; int status; char human[512]; int used_mfrom; int failures = 0; int success = 0; SPF2_T * tpp; for (tpp = tests; tpp->helo != NULL; tpp++) { (void) memset(human, '\0', sizeof human); status = opendmarc_spf2_test(tpp->ip, tpp->mfrom, tpp->helo, NULL, FALSE, human, sizeof human, &used_mfrom); if (status != tpp->outcome) { printf("Error: ip=\"%s\", mfrom=\"%s\", helo=\"%s\", error(%d)= %s\n", tpp->ip, tpp->mfrom, tpp->helo, status, human); ++failures; } else { //printf("Success: ip=\"%s\", mfrom=\"%s\", helo=\"%s\", error(%d)= %s\n", tpp->ip, tpp->mfrom, tpp->helo, status, human); ++success; } } printf("Test opendmarc_spf_ip4_tests(): %d pass, %d fail\n", success, failures); return failures; } #else /* HAVE_SPF2_H */ // No spf.h so we test the internal library. typedef struct { char * ip; char * mfrom; char * helo; char * spfrecord; int status; } SL; int opendmarc_spf_test_records(void) { SL spflist[] = { {"149.20.68.145", "", "gushi.org", "v=spf1 ip4:149.20.68.145 -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* simple pass ipv4 */ {"149.20.68.145", "", "gushi.org", "v=spf1 ip4:149.20.68.0/24 -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* simple pass ipv4 cidr */ {"149.20.68.145", "", "gushi.org", "v=spf1 ip4:149.20.69.0/24 -all", DMARC_POLICY_SPF_OUTCOME_FAIL}, /* simple fail ipv4 cidr */ {"2620:137:6000:10::145", "", "gushi.org", "v=spf1 ip6:2620:137:6000:10::145 -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* simple pass ipv6 compressed versus compressed */ {"2620:137:6000:10:0:0:0:145", "", "gushi.org", "v=spf1 ip6:2620:137:6000:10::145 -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* simple pass ipv6 compressed versus uncompressed */ {"149.20.68.142", "", "gushi.org", "v=spf1 mx -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* mx check */ {"149.20.68.145", "", "gushi.org", NULL, DMARC_POLICY_SPF_OUTCOME_PASS}, /* force a lookup */ {"149.20.68.142", "<>", "gushi.org", "v=spf1 mx -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* mx check with helo*/ {"149.20.68.142", "MAILER_DAEMON", "gushi.org", "v=spf1 mx -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* mx check with helo*/ {"149.20.68.145", "", "gushi.org", "v=spf1 -ip4:1.2.3.4 ip4:149.20.68.145 -all", DMARC_POLICY_SPF_OUTCOME_FAIL}, /* fail before success */ {"204.152.184.1", "", "gushi.org", "v=spf1 include:isc.org -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* pass with include */ {"149.20.68.145", "", "sf1.gushi.org", "v=spf1 include:gushi.org -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* pass with include */ {"149.30.68.145", "", "gushi.org", "v=spf1 include:isc.org -all", DMARC_POLICY_SPF_OUTCOME_FAIL}, /* fail with include */ {"149.20.68.145", "", "gushi.org", "v=spf1 -a", DMARC_POLICY_SPF_OUTCOME_PASS}, /* a record test pass */ {"149.20.68.145", "", "gushi.org", "v=spf1 a -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* a record test pass */ {"204.14.152.227", "", "gushi.org", "v=spf1 -a", DMARC_POLICY_SPF_OUTCOME_FAIL}, /* a record test fail */ {"149.20.68.142", "", "gushi.org", "v=spf1 a:prime.gushi.org -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* a record test pass */ {"149.20.68.145", "", "gushi.org", "v=spf1 ptr -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* ptr record test pass */ {"149.20.68.145", "", "gushi.org", "v=spf1 ptr:defaultsite.gushi.org -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* ptr record test pass */ {"149.20.68.145", "", "gushi.org", "v=spf1 exists:%s -all", DMARC_POLICY_SPF_OUTCOME_FAIL}, /* exists bad syntax */ {"149.20.68.145", "", "gushi.org", "v=spf1 exists:%{s} -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* exits good record */ {"149.20.68.145", "", "prime.gushi.org", "v=spf1 redirect:gushi.org -all", DMARC_POLICY_SPF_OUTCOME_PASS}, /* pass with redirect */ {NULL, NULL, NULL, NULL, 0}, }; SL * sp; int status; int success, failures; int use_mfrom; char human[BUFSIZ]; success = failures = 0; for (sp = spflist; sp->ip != NULL; ++sp) { status = opendmarc_spf_test(sp->ip, sp->mfrom, sp->helo, sp->spfrecord, FALSE, human, sizeof human, &use_mfrom); if (status != sp->status) { printf("Error: ip=\"%s\", mfrom=\"%s\", helo=\"%s\", spf=\"%s\", error(%d)= %s\n", sp->ip, sp->mfrom, sp->helo, sp->spfrecord == NULL ? "NULL" : sp->spfrecord, status, human); ++failures; continue; } ++success; } printf("Test opendmarc_spf_test_records(): %d pass, %d fail\n", success, failures); return failures; } int opendmarc_spf_test_exp() { SPF_CTX_T * ctx; char * mfrom = "foo@gushi.org"; char * ip = "149.20.68.145"; char * helo = "gushi.org"; char * spf = "v=spf1 ip4:1.2.3.4 exp:http://%{s}/spf -all"; char * converted = "http://gushi.org/spf"; char errbuf[BUFSIZ]; int ret; int success = 0; int failures = 0; int use_mfrom = FALSE; ctx = opendmarc_spf_alloc_ctx(); (void) opendmarc_spf_specify_mailfrom(ctx, mfrom, strlen(mfrom), &use_mfrom); (void) opendmarc_spf_specify_helo_domain(ctx, helo, strlen(helo)); (void) opendmarc_spf_specify_ip_address(ctx, ip, strlen(ip)); (void) opendmarc_spf_specify_record(ctx, spf, strlen(spf)); ret = opendmarc_spf_parse(ctx, 0, errbuf, sizeof errbuf); if (ret != 0) { if (strcasecmp(opendmarc_spf_status_to_msg(ctx, ret), converted) == 0) ++success; else ++failures; } else ++failures; ctx = opendmarc_spf_free_ctx(ctx); printf("Test opendmarc_spf_run_test(): %d pass, %d fail\n", success, failures); return failures; } typedef struct { char *connect_ip; char *record_ip; int outcome; } IP6LIST; int opendmarc_spf_ip6_tests(void) { IP6LIST ip6list[] = { {"2001:a60:901e::22", "2001:a60:901e::22", TRUE}, {"2001:a60:901e::22", "2001:a60:901e:00:00:00:00:22", TRUE}, {"2001:a60:901e::2", "2001:a60:901e::0/126", TRUE}, {"2001:a60:901e::2:0", "2001:a60:901e::0/95", TRUE}, {"50.57.199.2", "50.57.199.0/27", FALSE}, {NULL, NULL} }; IP6LIST *ipp; int success, failures; success = failures = 0; for (ipp = ip6list; ipp->connect_ip != NULL; ++ipp) { if (opendmarc_spf_ipv6_cidr_check(ipp->connect_ip, ipp->record_ip) != ipp->outcome) { printf("Error: %s compared to %s failed\n", ipp->connect_ip, ipp->record_ip); ++failures; continue; } ++success; } printf("Test opendmarc_spf_ip6_tests(): %d pass, %d fail\n", success, failures); return failures; return 0; } typedef struct { char *connect_ip; char *record_ip; int outcome; } IP4LIST; int opendmarc_spf_ip4_tests(void) { IP4LIST ip4list[] = { {"50.57.199.2", "50.57.199.0/27", TRUE}, {"51.57.199.2", "50.57.199.0/27", FALSE}, {NULL, NULL} }; IP4LIST *ipp; int success, failures; u_long ip; success = failures = 0; for (ipp = ip4list; ipp->connect_ip != NULL; ++ipp) { ip = inet_addr(ipp->connect_ip); if (opendmarc_spf_cidr_address(ip, ipp->record_ip) != ipp->outcome) { printf("Error: %s compared to %s failed\n", ipp->connect_ip, ipp->record_ip); ++failures; continue; } ++success; } printf("Test opendmarc_spf_ip4_tests(): %d pass, %d fail\n", success, failures); return failures; } #endif /* HAVE_SPF2_H */ int main(int argc, char **argv) { #if HAVE_SPF2_H if (opendmarc_spf2_run_test() != 0) #else /* HAVE_SPF2_H */ if (opendmarc_spf_ip6_tests() != 0 || opendmarc_spf_ip4_tests() != 0 || opendmarc_spf_test_records() != 0 || opendmarc_spf_test_exp() != 0) #endif /* HAVE_SPF2_H */ return 1; return 0; } #endif /* WITH_SPF */ OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_tld.c000066400000000000000000000023121416002254500234760ustar00rootroot00000000000000#include "../opendmarc_internal.h" #define TESTFILE "testfiles/effective_tld_names.dat" typedef struct { char *domain; char *tld; } TEST_TLD_T; int main(int argc, char **argv) { TEST_TLD_T *tldp; TEST_TLD_T tld_test[] = { /* 1 */ {"a.b.c.bcx.com", "bcx.com"}, /* *.com */ /* 2 */ {"a.b.c.educ.ar", "educ.ar"}, /* !educ.ar */ /* 3 */ {"a.b.c.xn--mgba3a4f16a.ir", "c.xn--mgba3a4f16a.ir"}, /* 4 */ {"a.b.c.\0xd8\0xa7\0xdb\0x8c\0xd8\0xb1\0xd8\0xa7\0xd9\0x86.ar", "c.\0xd8\0xa7\0xdb\0x8c\0xd8\0xb1\0xd8\0xa7\0xd9\0x86.ar"}, {NULL, NULL}, }; u_char tldbuf[256]; int pass, fails, count; if (opendmarc_tld_read_file(TESTFILE, "//", "*.", "!") != 0) { printf("\tTLD find test: %s: could not read. Skipping\n", TESTFILE); return 0; } pass = fails = count = 0; for (tldp = tld_test; tldp != NULL && tldp->domain != NULL; ++tldp) { count += 1; (void) opendmarc_get_tld(tldp->domain, tldbuf, sizeof tldbuf); if (memcmp(tldp->tld, tldbuf, strlen(tldp->tld)) == 0) { //printf("\tTLD find test: %d: PASS\n", count); pass += 1; } else { printf("\tTLD find test: %d: FAIL\n", count); fails += 1; } } printf("TLD find test: pass=%d, fail=%d\n", pass, fails); return fails; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/test_xml_parse.c000066400000000000000000000020161416002254500247060ustar00rootroot00000000000000#include "../opendmarc_internal.h" #include "../dmarc.h" typedef struct { char *fname; int outcome; } TEST_T; int main(int argc, char **argv) { TEST_T *xmlp; TEST_T xml_files[] = { /* 1 */ {"testfiles/nosuchfile.xml", ENOENT}, /* 2 */ {"testfiles/good.com!example.com!1337270400!1337356799.xml", 0}, /* 3 */ {"testfiles/bad.com!example.com!1337140800!1337227200.xml", 0}, {NULL, 0}, }; u_char ** ary; char * srcdir; char ebuf[256]; int pass, fails, count; srcdir = getenv("srcdir"); if (srcdir != NULL) { if (chdir(srcdir) != 0) { perror(srcdir); return 1; } } pass = fails = count = 0; for (xmlp = xml_files; xmlp != NULL && xmlp->fname != NULL; ++xmlp) { count += 1; ary = opendmarc_xml_parse(xmlp->fname, ebuf, sizeof ebuf); if (ary == NULL && errno != xmlp->outcome) { (void) printf("\t%s\n%s", xmlp->fname, ebuf); ++fails; continue; } ary = opendmarc_util_clearargv(ary); ++pass; } printf("Parse XML File test: pass=%d, fail=%d\n", pass, fails); return fails; } OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfiles/000077500000000000000000000000001416002254500235145ustar00rootroot00000000000000163.com!example.com!1337270400!1337356799.20120518163.xml000066400000000000000000001015621416002254500327210ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfiles 163.com abuse@163.com aggr_report_example.com_20120518_163.com 1337270400.0 1337356799.0 example.com r r

reject

reject 100
66.220.144.159 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.158 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.152 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 66.220.144.151 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 66.220.144.150 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.150 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 66.220.144.157 4 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.156 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.155 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.155 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.154 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.139 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 66.220.144.138 6 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.135 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.135 3 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.137 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.137 2 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 69.171.232.168 3 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.168 3 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 69.171.232.169 3 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.169 4 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.155.153 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.155.155 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 66.220.155.159 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.148 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.148 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.149 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.144 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.145 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.146 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.147 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.140 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.140 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.141 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.141 2 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 66.220.144.142 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 66.220.144.142 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 66.220.144.143 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.175 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.175 3 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 69.171.232.174 4 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.174 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 69.171.232.173 5 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.173 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 69.171.232.172 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.172 2 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror 69.171.232.171 1 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.171 4 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 69.171.232.170 2 none fail pass example.com example.com temperror signature error: temporary dns failure requesting selector example.com pass 69.171.232.154 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com temperror
OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfiles/Makefile.am000066400000000000000000000000311416002254500255420ustar00rootroot00000000000000AUTOMAKE_OPTIONS=foreign bad.com!example.com!1337140800!1337227200.xml000066400000000000000000000032031416002254500317420ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfilesAOLpostmaster@aol.comexample.com_133722720013371408001337227200 example.comrr

reject

reject100
108.166.27.220267example.comexample.compassexample.comfail 108r.166.27.22016noneexample.comexample.compassNULLnone 118.103.89.131noneexample.comexample.comfailNULLnone OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfiles/effective_tld_names.dat000066400000000000000000003446371416002254500302150ustar00rootroot00000000000000// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at http://mozilla.org/MPL/2.0/. // ===BEGIN ICANN DOMAINS=== // ac : http://en.wikipedia.org/wiki/.ac ac com.ac edu.ac gov.ac net.ac mil.ac org.ac // ad : http://en.wikipedia.org/wiki/.ad ad nom.ad // ae : http://en.wikipedia.org/wiki/.ae // see also: "Domain Name Eligibility Policy" at http://www.aeda.ae/eng/aepolicy.php ae co.ae net.ae org.ae sch.ae ac.ae gov.ae mil.ae // aero : see http://www.information.aero/index.php?id=66 aero accident-investigation.aero accident-prevention.aero aerobatic.aero aeroclub.aero aerodrome.aero agents.aero aircraft.aero airline.aero airport.aero air-surveillance.aero airtraffic.aero air-traffic-control.aero ambulance.aero amusement.aero association.aero author.aero ballooning.aero broker.aero caa.aero cargo.aero catering.aero certification.aero championship.aero charter.aero civilaviation.aero club.aero conference.aero consultant.aero consulting.aero control.aero council.aero crew.aero design.aero dgca.aero educator.aero emergency.aero engine.aero engineer.aero entertainment.aero equipment.aero exchange.aero express.aero federation.aero flight.aero freight.aero fuel.aero gliding.aero government.aero groundhandling.aero group.aero hanggliding.aero homebuilt.aero insurance.aero journal.aero journalist.aero leasing.aero logistics.aero magazine.aero maintenance.aero marketplace.aero media.aero microlight.aero modelling.aero navigation.aero parachuting.aero paragliding.aero passenger-association.aero pilot.aero press.aero production.aero recreation.aero repbody.aero res.aero research.aero rotorcraft.aero safety.aero scientist.aero services.aero show.aero skydiving.aero software.aero student.aero taxi.aero trader.aero trading.aero trainer.aero union.aero workinggroup.aero works.aero // af : http://www.nic.af/help.jsp af gov.af com.af org.af net.af edu.af // ag : http://www.nic.ag/prices.htm ag com.ag org.ag net.ag co.ag nom.ag // ai : http://nic.com.ai/ ai off.ai com.ai net.ai org.ai // al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 al com.al edu.al gov.al mil.al net.al org.al // am : http://en.wikipedia.org/wiki/.am am // an : http://www.una.an/an_domreg/default.asp an com.an net.an org.an edu.an // ao : http://en.wikipedia.org/wiki/.ao // http://www.dns.ao/REGISTR.DOC ao ed.ao gv.ao og.ao co.ao pb.ao it.ao // aq : http://en.wikipedia.org/wiki/.aq aq // ar : https://nic.ar/normativa-vigente.xhtml ar com.ar edu.ar gob.ar int.ar mil.ar net.ar org.ar tur.ar // arpa : http://en.wikipedia.org/wiki/.arpa // Confirmed by registry 2008-06-18 arpa e164.arpa in-addr.arpa ip6.arpa iris.arpa uri.arpa urn.arpa // as : http://en.wikipedia.org/wiki/.as as gov.as // asia : http://en.wikipedia.org/wiki/.asia asia // at : http://en.wikipedia.org/wiki/.at // Confirmed by registry 2008-06-17 at ac.at co.at gv.at or.at // au : http://en.wikipedia.org/wiki/.au // http://www.auda.org.au/ au // 2LDs com.au net.au org.au edu.au gov.au asn.au id.au csiro.au // Historic 2LDs (closed to new registration, but sites still exist) info.au conf.au oz.au // CGDNs - http://www.cgdn.org.au/ act.au nsw.au nt.au qld.au sa.au tas.au vic.au wa.au // 3LDs act.edu.au nsw.edu.au nt.edu.au qld.edu.au sa.edu.au tas.edu.au vic.edu.au wa.edu.au act.gov.au // nsw.gov.au Bug 547985 - Removed at request of // nt.gov.au Bug 940478 - Removed at request of Greg Connors qld.gov.au sa.gov.au tas.gov.au vic.gov.au wa.gov.au // aw : http://en.wikipedia.org/wiki/.aw aw com.aw // ax : http://en.wikipedia.org/wiki/.ax ax // az : http://en.wikipedia.org/wiki/.az az com.az net.az int.az gov.az org.az edu.az info.az pp.az mil.az name.az pro.az biz.az // ba : http://en.wikipedia.org/wiki/.ba ba org.ba net.ba edu.ba gov.ba mil.ba unsa.ba unbi.ba co.ba com.ba rs.ba // bb : http://en.wikipedia.org/wiki/.bb bb biz.bb com.bb edu.bb gov.bb info.bb net.bb org.bb store.bb // bd : http://en.wikipedia.org/wiki/.bd *.bd // be : http://en.wikipedia.org/wiki/.be // Confirmed by registry 2008-06-08 be ac.be // bf : http://en.wikipedia.org/wiki/.bf bf gov.bf // bg : http://en.wikipedia.org/wiki/.bg // https://www.register.bg/user/static/rules/en/index.html bg a.bg b.bg c.bg d.bg e.bg f.bg g.bg h.bg i.bg j.bg k.bg l.bg m.bg n.bg o.bg p.bg q.bg r.bg s.bg t.bg u.bg v.bg w.bg x.bg y.bg z.bg 0.bg 1.bg 2.bg 3.bg 4.bg 5.bg 6.bg 7.bg 8.bg 9.bg // bh : http://en.wikipedia.org/wiki/.bh bh com.bh edu.bh net.bh org.bh gov.bh // bi : http://en.wikipedia.org/wiki/.bi // http://whois.nic.bi/ bi co.bi com.bi edu.bi or.bi org.bi // biz : http://en.wikipedia.org/wiki/.biz biz // bj : http://en.wikipedia.org/wiki/.bj bj asso.bj barreau.bj gouv.bj // bm : http://www.bermudanic.bm/dnr-text.txt bm com.bm edu.bm gov.bm net.bm org.bm // bn : http://en.wikipedia.org/wiki/.bn *.bn // bo : http://www.nic.bo/ bo com.bo edu.bo gov.bo gob.bo int.bo org.bo net.bo mil.bo tv.bo // br : http://registro.br/dominio/dpn.html // Submitted by registry 2011-03-01 br adm.br adv.br agr.br am.br arq.br art.br ato.br b.br bio.br blog.br bmd.br cim.br cng.br cnt.br com.br coop.br ecn.br eco.br edu.br emp.br eng.br esp.br etc.br eti.br far.br flog.br fm.br fnd.br fot.br fst.br g12.br ggf.br gov.br imb.br ind.br inf.br jor.br jus.br leg.br lel.br mat.br med.br mil.br mus.br net.br nom.br not.br ntr.br odo.br org.br ppg.br pro.br psc.br psi.br qsl.br radio.br rec.br slg.br srv.br taxi.br teo.br tmp.br trd.br tur.br tv.br vet.br vlog.br wiki.br zlg.br // bs : http://www.nic.bs/rules.html bs com.bs net.bs org.bs edu.bs gov.bs // bt : http://en.wikipedia.org/wiki/.bt bt com.bt edu.bt gov.bt net.bt org.bt // bv : No registrations at this time. // Submitted by registry 2006-06-16 bv // bw : http://en.wikipedia.org/wiki/.bw // http://www.gobin.info/domainname/bw.doc // list of other 2nd level tlds ? bw co.bw org.bw // by : http://en.wikipedia.org/wiki/.by // http://tld.by/rules_2006_en.html // list of other 2nd level tlds ? by gov.by mil.by // Official information does not indicate that com.by is a reserved // second-level domain, but it's being used as one (see www.google.com.by and // www.yahoo.com.by, for example), so we list it here for safety's sake. com.by // http://hoster.by/ of.by // bz : http://en.wikipedia.org/wiki/.bz // http://www.belizenic.bz/ bz com.bz net.bz org.bz edu.bz gov.bz // ca : http://en.wikipedia.org/wiki/.ca ca // ca geographical names ab.ca bc.ca mb.ca nb.ca nf.ca nl.ca ns.ca nt.ca nu.ca on.ca pe.ca qc.ca sk.ca yk.ca // gc.ca: http://en.wikipedia.org/wiki/.gc.ca // see also: http://registry.gc.ca/en/SubdomainFAQ gc.ca // cat : http://en.wikipedia.org/wiki/.cat cat // cc : http://en.wikipedia.org/wiki/.cc cc // cd : http://en.wikipedia.org/wiki/.cd // see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 cd gov.cd // cf : http://en.wikipedia.org/wiki/.cf cf // cg : http://en.wikipedia.org/wiki/.cg cg // ch : http://en.wikipedia.org/wiki/.ch ch // ci : http://en.wikipedia.org/wiki/.ci // http://www.nic.ci/index.php?page=charte ci org.ci or.ci com.ci co.ci edu.ci ed.ci ac.ci net.ci go.ci asso.ci aéroport.ci int.ci presse.ci md.ci gouv.ci // ck : http://en.wikipedia.org/wiki/.ck *.ck !www.ck // cl : http://en.wikipedia.org/wiki/.cl cl gov.cl gob.cl co.cl mil.cl // cm : http://en.wikipedia.org/wiki/.cm cm gov.cm // cn : http://en.wikipedia.org/wiki/.cn // Submitted by registry 2008-06-11 cn ac.cn com.cn edu.cn gov.cn net.cn org.cn mil.cn 公司.cn 网络.cn 網絡.cn // cn geographic names ah.cn bj.cn cq.cn fj.cn gd.cn gs.cn gz.cn gx.cn ha.cn hb.cn he.cn hi.cn hl.cn hn.cn jl.cn js.cn jx.cn ln.cn nm.cn nx.cn qh.cn sc.cn sd.cn sh.cn sn.cn sx.cn tj.cn xj.cn xz.cn yn.cn zj.cn hk.cn mo.cn tw.cn // co : http://en.wikipedia.org/wiki/.co // Submitted by registry 2008-06-11 co arts.co com.co edu.co firm.co gov.co info.co int.co mil.co net.co nom.co org.co rec.co web.co // com : http://en.wikipedia.org/wiki/.com com // coop : http://en.wikipedia.org/wiki/.coop coop // cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do cr ac.cr co.cr ed.cr fi.cr go.cr or.cr sa.cr // cu : http://en.wikipedia.org/wiki/.cu cu com.cu edu.cu org.cu net.cu gov.cu inf.cu // cv : http://en.wikipedia.org/wiki/.cv cv // cw : http://www.una.cw/cw_registry/ // Confirmed by registry 2013-03-26 cw com.cw edu.cw net.cw org.cw // cx : http://en.wikipedia.org/wiki/.cx // list of other 2nd level tlds ? cx gov.cx // cy : http://en.wikipedia.org/wiki/.cy *.cy // cz : http://en.wikipedia.org/wiki/.cz cz // de : http://en.wikipedia.org/wiki/.de // Confirmed by registry (with technical // reservations) 2008-07-01 de // dj : http://en.wikipedia.org/wiki/.dj dj // dk : http://en.wikipedia.org/wiki/.dk // Confirmed by registry 2008-06-17 dk // dm : http://en.wikipedia.org/wiki/.dm dm com.dm net.dm org.dm edu.dm gov.dm // do : http://en.wikipedia.org/wiki/.do do art.do com.do edu.do gob.do gov.do mil.do net.do org.do sld.do web.do // dz : http://en.wikipedia.org/wiki/.dz dz com.dz org.dz net.dz gov.dz edu.dz asso.dz pol.dz art.dz // ec : http://www.nic.ec/reg/paso1.asp // Submitted by registry 2008-07-04 ec com.ec info.ec net.ec fin.ec k12.ec med.ec pro.ec org.ec edu.ec gov.ec gob.ec mil.ec // edu : http://en.wikipedia.org/wiki/.edu edu // ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B ee edu.ee gov.ee riik.ee lib.ee med.ee com.ee pri.ee aip.ee org.ee fie.ee // eg : http://en.wikipedia.org/wiki/.eg eg com.eg edu.eg eun.eg gov.eg mil.eg name.eg net.eg org.eg sci.eg // er : http://en.wikipedia.org/wiki/.er *.er // es : https://www.nic.es/site_ingles/ingles/dominios/index.html es com.es nom.es org.es gob.es edu.es // et : http://en.wikipedia.org/wiki/.et *.et // eu : http://en.wikipedia.org/wiki/.eu eu // fi : http://en.wikipedia.org/wiki/.fi fi // aland.fi : http://en.wikipedia.org/wiki/.ax // This domain is being phased out in favor of .ax. As there are still many // domains under aland.fi, we still keep it on the list until aland.fi is // completely removed. // TODO: Check for updates (expected to be phased out around Q1/2009) aland.fi // fj : http://en.wikipedia.org/wiki/.fj *.fj // fk : http://en.wikipedia.org/wiki/.fk *.fk // fm : http://en.wikipedia.org/wiki/.fm fm // fo : http://en.wikipedia.org/wiki/.fo fo // fr : http://www.afnic.fr/ // domaines descriptifs : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-descriptifs fr com.fr asso.fr nom.fr prd.fr presse.fr tm.fr // domaines sectoriels : http://www.afnic.fr/obtenir/chartes/nommage-fr/annexe-sectoriels aeroport.fr assedic.fr avocat.fr avoues.fr cci.fr chambagri.fr chirurgiens-dentistes.fr experts-comptables.fr geometre-expert.fr gouv.fr greta.fr huissier-justice.fr medecin.fr notaires.fr pharmacien.fr port.fr veterinaire.fr // ga : http://en.wikipedia.org/wiki/.ga ga // gb : This registry is effectively dormant // Submitted by registry 2008-06-12 gb // gd : http://en.wikipedia.org/wiki/.gd gd // ge : http://www.nic.net.ge/policy_en.pdf ge com.ge edu.ge gov.ge org.ge mil.ge net.ge pvt.ge // gf : http://en.wikipedia.org/wiki/.gf gf // gg : http://www.channelisles.net/register-domains/ // Confirmed by registry 2013-11-28 gg co.gg net.gg org.gg // gh : http://en.wikipedia.org/wiki/.gh // see also: http://www.nic.gh/reg_now.php // Although domains directly at second level are not possible at the moment, // they have been possible for some time and may come back. gh com.gh edu.gh gov.gh org.gh mil.gh // gi : http://www.nic.gi/rules.html gi com.gi ltd.gi gov.gi mod.gi edu.gi org.gi // gl : http://en.wikipedia.org/wiki/.gl // http://nic.gl gl // gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm gm // gn : http://psg.com/dns/gn/gn.txt // Submitted by registry 2008-06-17 gn ac.gn com.gn edu.gn gov.gn org.gn net.gn // gov : http://en.wikipedia.org/wiki/.gov gov // gp : http://www.nic.gp/index.php?lang=en gp com.gp net.gp mobi.gp edu.gp org.gp asso.gp // gq : http://en.wikipedia.org/wiki/.gq gq // gr : https://grweb.ics.forth.gr/english/1617-B-2005.html // Submitted by registry 2008-06-09 gr com.gr edu.gr net.gr org.gr gov.gr // gs : http://en.wikipedia.org/wiki/.gs gs // gt : http://www.gt/politicas_de_registro.html gt com.gt edu.gt gob.gt ind.gt mil.gt net.gt org.gt // gu : http://gadao.gov.gu/registration.txt *.gu // gw : http://en.wikipedia.org/wiki/.gw gw // gy : http://en.wikipedia.org/wiki/.gy // http://registry.gy/ gy co.gy com.gy net.gy // hk : https://www.hkdnr.hk // Submitted by registry 2008-06-11 hk com.hk edu.hk gov.hk idv.hk net.hk org.hk 公司.hk 教育.hk 敎育.hk 政府.hk 個人.hk 个人.hk 箇人.hk 網络.hk 网络.hk 组織.hk 網絡.hk 网絡.hk 组织.hk 組織.hk 組织.hk // hm : http://en.wikipedia.org/wiki/.hm hm // hn : http://www.nic.hn/politicas/ps02,,05.html hn com.hn edu.hn org.hn net.hn mil.hn gob.hn // hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf hr iz.hr from.hr name.hr com.hr // ht : http://www.nic.ht/info/charte.cfm ht com.ht shop.ht firm.ht info.ht adult.ht net.ht pro.ht org.ht med.ht art.ht coop.ht pol.ht asso.ht edu.ht rel.ht gouv.ht perso.ht // hu : http://www.domain.hu/domain/English/sld.html // Confirmed by registry 2008-06-12 hu co.hu info.hu org.hu priv.hu sport.hu tm.hu 2000.hu agrar.hu bolt.hu casino.hu city.hu erotica.hu erotika.hu film.hu forum.hu games.hu hotel.hu ingatlan.hu jogasz.hu konyvelo.hu lakas.hu media.hu news.hu reklam.hu sex.hu shop.hu suli.hu szex.hu tozsde.hu utazas.hu video.hu // id : https://register.pandi.or.id/ id ac.id biz.id co.id go.id mil.id my.id net.id or.id sch.id web.id // ie : http://en.wikipedia.org/wiki/.ie ie gov.ie // il : http://en.wikipedia.org/wiki/.il *.il // im : https://www.nic.im/ // Submitted by registry 2013-11-15 im ac.im co.im com.im ltd.co.im net.im org.im plc.co.im tt.im tv.im // in : http://en.wikipedia.org/wiki/.in // see also: http://www.inregistry.in/policies/ // Please note, that nic.in is not an offical eTLD, but used by most // government institutions. in co.in firm.in net.in org.in gen.in ind.in nic.in ac.in edu.in res.in gov.in mil.in // info : http://en.wikipedia.org/wiki/.info info // int : http://en.wikipedia.org/wiki/.int // Confirmed by registry 2008-06-18 int eu.int // io : http://www.nic.io/rules.html // list of other 2nd level tlds ? io com.io // iq : http://www.cmc.iq/english/iq/iqregister1.htm iq gov.iq edu.iq mil.iq com.iq org.iq net.iq // ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules // Also see http://www.nic.ir/Internationalized_Domain_Names // Two .ir entries added at request of , 2010-04-16 ir ac.ir co.ir gov.ir id.ir net.ir org.ir sch.ir // xn--mgba3a4f16a.ir (.ir, Persian YEH) ایران.ir // xn--mgba3a4fra.ir (.ir, Arabic YEH) ايران.ir // is : http://www.isnic.is/domain/rules.php // Confirmed by registry 2008-12-06 is net.is com.is edu.is gov.is org.is int.is // it : http://en.wikipedia.org/wiki/.it it gov.it edu.it // list of reserved geo-names : // http://www.nic.it/documenti/regolamenti-e-linee-guida/regolamento-assegnazione-versione-6.0.pdf // (There is also a list of reserved geo-names corresponding to Italian // municipalities : http://www.nic.it/documenti/appendice-c.pdf , but it is // not included here.) agrigento.it ag.it alessandria.it al.it ancona.it an.it aosta.it aoste.it ao.it arezzo.it ar.it ascoli-piceno.it ascolipiceno.it ap.it asti.it at.it avellino.it av.it bari.it ba.it andria-barletta-trani.it andriabarlettatrani.it trani-barletta-andria.it tranibarlettaandria.it barletta-trani-andria.it barlettatraniandria.it andria-trani-barletta.it andriatranibarletta.it trani-andria-barletta.it traniandriabarletta.it bt.it belluno.it bl.it benevento.it bn.it bergamo.it bg.it biella.it bi.it bologna.it bo.it bolzano.it bozen.it balsan.it alto-adige.it altoadige.it suedtirol.it bz.it brescia.it bs.it brindisi.it br.it cagliari.it ca.it caltanissetta.it cl.it campobasso.it cb.it carboniaiglesias.it carbonia-iglesias.it iglesias-carbonia.it iglesiascarbonia.it ci.it caserta.it ce.it catania.it ct.it catanzaro.it cz.it chieti.it ch.it como.it co.it cosenza.it cs.it cremona.it cr.it crotone.it kr.it cuneo.it cn.it dell-ogliastra.it dellogliastra.it ogliastra.it og.it enna.it en.it ferrara.it fe.it fermo.it fm.it firenze.it florence.it fi.it foggia.it fg.it forli-cesena.it forlicesena.it cesena-forli.it cesenaforli.it fc.it frosinone.it fr.it genova.it genoa.it ge.it gorizia.it go.it grosseto.it gr.it imperia.it im.it isernia.it is.it laquila.it aquila.it aq.it la-spezia.it laspezia.it sp.it latina.it lt.it lecce.it le.it lecco.it lc.it livorno.it li.it lodi.it lo.it lucca.it lu.it macerata.it mc.it mantova.it mn.it massa-carrara.it massacarrara.it carrara-massa.it carraramassa.it ms.it matera.it mt.it medio-campidano.it mediocampidano.it campidano-medio.it campidanomedio.it vs.it messina.it me.it milano.it milan.it mi.it modena.it mo.it monza.it monza-brianza.it monzabrianza.it monzaebrianza.it monzaedellabrianza.it monza-e-della-brianza.it mb.it napoli.it naples.it na.it novara.it no.it nuoro.it nu.it oristano.it or.it padova.it padua.it pd.it palermo.it pa.it parma.it pr.it pavia.it pv.it perugia.it pg.it pescara.it pe.it pesaro-urbino.it pesarourbino.it urbino-pesaro.it urbinopesaro.it pu.it piacenza.it pc.it pisa.it pi.it pistoia.it pt.it pordenone.it pn.it potenza.it pz.it prato.it po.it ragusa.it rg.it ravenna.it ra.it reggio-calabria.it reggiocalabria.it rc.it reggio-emilia.it reggioemilia.it re.it rieti.it ri.it rimini.it rn.it roma.it rome.it rm.it rovigo.it ro.it salerno.it sa.it sassari.it ss.it savona.it sv.it siena.it si.it siracusa.it sr.it sondrio.it so.it taranto.it ta.it tempio-olbia.it tempioolbia.it olbia-tempio.it olbiatempio.it ot.it teramo.it te.it terni.it tr.it torino.it turin.it to.it trapani.it tp.it trento.it trentino.it tn.it treviso.it tv.it trieste.it ts.it udine.it ud.it varese.it va.it venezia.it venice.it ve.it verbania.it vb.it vercelli.it vc.it verona.it vr.it vibo-valentia.it vibovalentia.it vv.it vicenza.it vi.it viterbo.it vt.it // je : http://www.channelisles.net/register-domains/ // Confirmed by registry 2013-11-28 je co.je net.je org.je // jm : http://www.com.jm/register.html *.jm // jo : http://www.dns.jo/Registration_policy.aspx jo com.jo org.jo net.jo edu.jo sch.jo gov.jo mil.jo name.jo // jobs : http://en.wikipedia.org/wiki/.jobs jobs // jp : http://en.wikipedia.org/wiki/.jp // http://jprs.co.jp/en/jpdomain.html // Submitted by registry 2012-05-28 jp // jp organizational type names ac.jp ad.jp co.jp ed.jp go.jp gr.jp lg.jp ne.jp or.jp // jp preficture type names aichi.jp akita.jp aomori.jp chiba.jp ehime.jp fukui.jp fukuoka.jp fukushima.jp gifu.jp gunma.jp hiroshima.jp hokkaido.jp hyogo.jp ibaraki.jp ishikawa.jp iwate.jp kagawa.jp kagoshima.jp kanagawa.jp kochi.jp kumamoto.jp kyoto.jp mie.jp miyagi.jp miyazaki.jp nagano.jp nagasaki.jp nara.jp niigata.jp oita.jp okayama.jp okinawa.jp osaka.jp saga.jp saitama.jp shiga.jp shimane.jp shizuoka.jp tochigi.jp tokushima.jp tokyo.jp tottori.jp toyama.jp wakayama.jp yamagata.jp yamaguchi.jp yamanashi.jp // jp geographic type names // http://jprs.jp/doc/rule/saisoku-1.html *.kawasaki.jp *.kitakyushu.jp *.kobe.jp *.nagoya.jp *.sapporo.jp *.sendai.jp *.yokohama.jp !city.kawasaki.jp !city.kitakyushu.jp !city.kobe.jp !city.nagoya.jp !city.sapporo.jp !city.sendai.jp !city.yokohama.jp // 4th level registration aisai.aichi.jp ama.aichi.jp anjo.aichi.jp asuke.aichi.jp chiryu.aichi.jp chita.aichi.jp fuso.aichi.jp gamagori.aichi.jp handa.aichi.jp hazu.aichi.jp hekinan.aichi.jp higashiura.aichi.jp ichinomiya.aichi.jp inazawa.aichi.jp inuyama.aichi.jp isshiki.aichi.jp iwakura.aichi.jp kanie.aichi.jp kariya.aichi.jp kasugai.aichi.jp kira.aichi.jp kiyosu.aichi.jp komaki.aichi.jp konan.aichi.jp kota.aichi.jp mihama.aichi.jp miyoshi.aichi.jp nagakute.aichi.jp nishio.aichi.jp nisshin.aichi.jp obu.aichi.jp oguchi.aichi.jp oharu.aichi.jp okazaki.aichi.jp owariasahi.aichi.jp seto.aichi.jp shikatsu.aichi.jp shinshiro.aichi.jp shitara.aichi.jp tahara.aichi.jp takahama.aichi.jp tobishima.aichi.jp toei.aichi.jp togo.aichi.jp tokai.aichi.jp tokoname.aichi.jp toyoake.aichi.jp toyohashi.aichi.jp toyokawa.aichi.jp toyone.aichi.jp toyota.aichi.jp tsushima.aichi.jp yatomi.aichi.jp akita.akita.jp daisen.akita.jp fujisato.akita.jp gojome.akita.jp hachirogata.akita.jp happou.akita.jp higashinaruse.akita.jp honjo.akita.jp honjyo.akita.jp ikawa.akita.jp kamikoani.akita.jp kamioka.akita.jp katagami.akita.jp kazuno.akita.jp kitaakita.akita.jp kosaka.akita.jp kyowa.akita.jp misato.akita.jp mitane.akita.jp moriyoshi.akita.jp nikaho.akita.jp noshiro.akita.jp odate.akita.jp oga.akita.jp ogata.akita.jp semboku.akita.jp yokote.akita.jp yurihonjo.akita.jp aomori.aomori.jp gonohe.aomori.jp hachinohe.aomori.jp hashikami.aomori.jp hiranai.aomori.jp hirosaki.aomori.jp itayanagi.aomori.jp kuroishi.aomori.jp misawa.aomori.jp mutsu.aomori.jp nakadomari.aomori.jp noheji.aomori.jp oirase.aomori.jp owani.aomori.jp rokunohe.aomori.jp sannohe.aomori.jp shichinohe.aomori.jp shingo.aomori.jp takko.aomori.jp towada.aomori.jp tsugaru.aomori.jp tsuruta.aomori.jp abiko.chiba.jp asahi.chiba.jp chonan.chiba.jp chosei.chiba.jp choshi.chiba.jp chuo.chiba.jp funabashi.chiba.jp futtsu.chiba.jp hanamigawa.chiba.jp ichihara.chiba.jp ichikawa.chiba.jp ichinomiya.chiba.jp inzai.chiba.jp isumi.chiba.jp kamagaya.chiba.jp kamogawa.chiba.jp kashiwa.chiba.jp katori.chiba.jp katsuura.chiba.jp kimitsu.chiba.jp kisarazu.chiba.jp kozaki.chiba.jp kujukuri.chiba.jp kyonan.chiba.jp matsudo.chiba.jp midori.chiba.jp mihama.chiba.jp minamiboso.chiba.jp mobara.chiba.jp mutsuzawa.chiba.jp nagara.chiba.jp nagareyama.chiba.jp narashino.chiba.jp narita.chiba.jp noda.chiba.jp oamishirasato.chiba.jp omigawa.chiba.jp onjuku.chiba.jp otaki.chiba.jp sakae.chiba.jp sakura.chiba.jp shimofusa.chiba.jp shirako.chiba.jp shiroi.chiba.jp shisui.chiba.jp sodegaura.chiba.jp sosa.chiba.jp tako.chiba.jp tateyama.chiba.jp togane.chiba.jp tohnosho.chiba.jp tomisato.chiba.jp urayasu.chiba.jp yachimata.chiba.jp yachiyo.chiba.jp yokaichiba.chiba.jp yokoshibahikari.chiba.jp yotsukaido.chiba.jp ainan.ehime.jp honai.ehime.jp ikata.ehime.jp imabari.ehime.jp iyo.ehime.jp kamijima.ehime.jp kihoku.ehime.jp kumakogen.ehime.jp masaki.ehime.jp matsuno.ehime.jp matsuyama.ehime.jp namikata.ehime.jp niihama.ehime.jp ozu.ehime.jp saijo.ehime.jp seiyo.ehime.jp shikokuchuo.ehime.jp tobe.ehime.jp toon.ehime.jp uchiko.ehime.jp uwajima.ehime.jp yawatahama.ehime.jp echizen.fukui.jp eiheiji.fukui.jp fukui.fukui.jp ikeda.fukui.jp katsuyama.fukui.jp mihama.fukui.jp minamiechizen.fukui.jp obama.fukui.jp ohi.fukui.jp ono.fukui.jp sabae.fukui.jp sakai.fukui.jp takahama.fukui.jp tsuruga.fukui.jp wakasa.fukui.jp ashiya.fukuoka.jp buzen.fukuoka.jp chikugo.fukuoka.jp chikuho.fukuoka.jp chikujo.fukuoka.jp chikushino.fukuoka.jp chikuzen.fukuoka.jp chuo.fukuoka.jp dazaifu.fukuoka.jp fukuchi.fukuoka.jp hakata.fukuoka.jp higashi.fukuoka.jp hirokawa.fukuoka.jp hisayama.fukuoka.jp iizuka.fukuoka.jp inatsuki.fukuoka.jp kaho.fukuoka.jp kasuga.fukuoka.jp kasuya.fukuoka.jp kawara.fukuoka.jp keisen.fukuoka.jp koga.fukuoka.jp kurate.fukuoka.jp kurogi.fukuoka.jp kurume.fukuoka.jp minami.fukuoka.jp miyako.fukuoka.jp miyama.fukuoka.jp miyawaka.fukuoka.jp mizumaki.fukuoka.jp munakata.fukuoka.jp nakagawa.fukuoka.jp nakama.fukuoka.jp nishi.fukuoka.jp nogata.fukuoka.jp ogori.fukuoka.jp okagaki.fukuoka.jp okawa.fukuoka.jp oki.fukuoka.jp omuta.fukuoka.jp onga.fukuoka.jp onojo.fukuoka.jp oto.fukuoka.jp saigawa.fukuoka.jp sasaguri.fukuoka.jp shingu.fukuoka.jp shinyoshitomi.fukuoka.jp shonai.fukuoka.jp soeda.fukuoka.jp sue.fukuoka.jp tachiarai.fukuoka.jp tagawa.fukuoka.jp takata.fukuoka.jp toho.fukuoka.jp toyotsu.fukuoka.jp tsuiki.fukuoka.jp ukiha.fukuoka.jp umi.fukuoka.jp usui.fukuoka.jp yamada.fukuoka.jp yame.fukuoka.jp yanagawa.fukuoka.jp yukuhashi.fukuoka.jp aizubange.fukushima.jp aizumisato.fukushima.jp aizuwakamatsu.fukushima.jp asakawa.fukushima.jp bandai.fukushima.jp date.fukushima.jp fukushima.fukushima.jp furudono.fukushima.jp futaba.fukushima.jp hanawa.fukushima.jp higashi.fukushima.jp hirata.fukushima.jp hirono.fukushima.jp iitate.fukushima.jp inawashiro.fukushima.jp ishikawa.fukushima.jp iwaki.fukushima.jp izumizaki.fukushima.jp kagamiishi.fukushima.jp kaneyama.fukushima.jp kawamata.fukushima.jp kitakata.fukushima.jp kitashiobara.fukushima.jp koori.fukushima.jp koriyama.fukushima.jp kunimi.fukushima.jp miharu.fukushima.jp mishima.fukushima.jp namie.fukushima.jp nango.fukushima.jp nishiaizu.fukushima.jp nishigo.fukushima.jp okuma.fukushima.jp omotego.fukushima.jp ono.fukushima.jp otama.fukushima.jp samegawa.fukushima.jp shimogo.fukushima.jp shirakawa.fukushima.jp showa.fukushima.jp soma.fukushima.jp sukagawa.fukushima.jp taishin.fukushima.jp tamakawa.fukushima.jp tanagura.fukushima.jp tenei.fukushima.jp yabuki.fukushima.jp yamato.fukushima.jp yamatsuri.fukushima.jp yanaizu.fukushima.jp yugawa.fukushima.jp anpachi.gifu.jp ena.gifu.jp gifu.gifu.jp ginan.gifu.jp godo.gifu.jp gujo.gifu.jp hashima.gifu.jp hichiso.gifu.jp hida.gifu.jp higashishirakawa.gifu.jp ibigawa.gifu.jp ikeda.gifu.jp kakamigahara.gifu.jp kani.gifu.jp kasahara.gifu.jp kasamatsu.gifu.jp kawaue.gifu.jp kitagata.gifu.jp mino.gifu.jp minokamo.gifu.jp mitake.gifu.jp mizunami.gifu.jp motosu.gifu.jp nakatsugawa.gifu.jp ogaki.gifu.jp sakahogi.gifu.jp seki.gifu.jp sekigahara.gifu.jp shirakawa.gifu.jp tajimi.gifu.jp takayama.gifu.jp tarui.gifu.jp toki.gifu.jp tomika.gifu.jp wanouchi.gifu.jp yamagata.gifu.jp yaotsu.gifu.jp yoro.gifu.jp annaka.gunma.jp chiyoda.gunma.jp fujioka.gunma.jp higashiagatsuma.gunma.jp isesaki.gunma.jp itakura.gunma.jp kanna.gunma.jp kanra.gunma.jp katashina.gunma.jp kawaba.gunma.jp kiryu.gunma.jp kusatsu.gunma.jp maebashi.gunma.jp meiwa.gunma.jp midori.gunma.jp minakami.gunma.jp naganohara.gunma.jp nakanojo.gunma.jp nanmoku.gunma.jp numata.gunma.jp oizumi.gunma.jp ora.gunma.jp ota.gunma.jp shibukawa.gunma.jp shimonita.gunma.jp shinto.gunma.jp showa.gunma.jp takasaki.gunma.jp takayama.gunma.jp tamamura.gunma.jp tatebayashi.gunma.jp tomioka.gunma.jp tsukiyono.gunma.jp tsumagoi.gunma.jp ueno.gunma.jp yoshioka.gunma.jp asaminami.hiroshima.jp daiwa.hiroshima.jp etajima.hiroshima.jp fuchu.hiroshima.jp fukuyama.hiroshima.jp hatsukaichi.hiroshima.jp higashihiroshima.hiroshima.jp hongo.hiroshima.jp jinsekikogen.hiroshima.jp kaita.hiroshima.jp kui.hiroshima.jp kumano.hiroshima.jp kure.hiroshima.jp mihara.hiroshima.jp miyoshi.hiroshima.jp naka.hiroshima.jp onomichi.hiroshima.jp osakikamijima.hiroshima.jp otake.hiroshima.jp saka.hiroshima.jp sera.hiroshima.jp seranishi.hiroshima.jp shinichi.hiroshima.jp shobara.hiroshima.jp takehara.hiroshima.jp abashiri.hokkaido.jp abira.hokkaido.jp aibetsu.hokkaido.jp akabira.hokkaido.jp akkeshi.hokkaido.jp asahikawa.hokkaido.jp ashibetsu.hokkaido.jp ashoro.hokkaido.jp assabu.hokkaido.jp atsuma.hokkaido.jp bibai.hokkaido.jp biei.hokkaido.jp bifuka.hokkaido.jp bihoro.hokkaido.jp biratori.hokkaido.jp chippubetsu.hokkaido.jp chitose.hokkaido.jp date.hokkaido.jp ebetsu.hokkaido.jp embetsu.hokkaido.jp eniwa.hokkaido.jp erimo.hokkaido.jp esan.hokkaido.jp esashi.hokkaido.jp fukagawa.hokkaido.jp fukushima.hokkaido.jp furano.hokkaido.jp furubira.hokkaido.jp haboro.hokkaido.jp hakodate.hokkaido.jp hamatonbetsu.hokkaido.jp hidaka.hokkaido.jp higashikagura.hokkaido.jp higashikawa.hokkaido.jp hiroo.hokkaido.jp hokuryu.hokkaido.jp hokuto.hokkaido.jp honbetsu.hokkaido.jp horokanai.hokkaido.jp horonobe.hokkaido.jp ikeda.hokkaido.jp imakane.hokkaido.jp ishikari.hokkaido.jp iwamizawa.hokkaido.jp iwanai.hokkaido.jp kamifurano.hokkaido.jp kamikawa.hokkaido.jp kamishihoro.hokkaido.jp kamisunagawa.hokkaido.jp kamoenai.hokkaido.jp kayabe.hokkaido.jp kembuchi.hokkaido.jp kikonai.hokkaido.jp kimobetsu.hokkaido.jp kitahiroshima.hokkaido.jp kitami.hokkaido.jp kiyosato.hokkaido.jp koshimizu.hokkaido.jp kunneppu.hokkaido.jp kuriyama.hokkaido.jp kuromatsunai.hokkaido.jp kushiro.hokkaido.jp kutchan.hokkaido.jp kyowa.hokkaido.jp mashike.hokkaido.jp matsumae.hokkaido.jp mikasa.hokkaido.jp minamifurano.hokkaido.jp mombetsu.hokkaido.jp moseushi.hokkaido.jp mukawa.hokkaido.jp muroran.hokkaido.jp naie.hokkaido.jp nakagawa.hokkaido.jp nakasatsunai.hokkaido.jp nakatombetsu.hokkaido.jp nanae.hokkaido.jp nanporo.hokkaido.jp nayoro.hokkaido.jp nemuro.hokkaido.jp niikappu.hokkaido.jp niki.hokkaido.jp nishiokoppe.hokkaido.jp noboribetsu.hokkaido.jp numata.hokkaido.jp obihiro.hokkaido.jp obira.hokkaido.jp oketo.hokkaido.jp okoppe.hokkaido.jp otaru.hokkaido.jp otobe.hokkaido.jp otofuke.hokkaido.jp otoineppu.hokkaido.jp oumu.hokkaido.jp ozora.hokkaido.jp pippu.hokkaido.jp rankoshi.hokkaido.jp rebun.hokkaido.jp rikubetsu.hokkaido.jp rishiri.hokkaido.jp rishirifuji.hokkaido.jp saroma.hokkaido.jp sarufutsu.hokkaido.jp shakotan.hokkaido.jp shari.hokkaido.jp shibecha.hokkaido.jp shibetsu.hokkaido.jp shikabe.hokkaido.jp shikaoi.hokkaido.jp shimamaki.hokkaido.jp shimizu.hokkaido.jp shimokawa.hokkaido.jp shinshinotsu.hokkaido.jp shintoku.hokkaido.jp shiranuka.hokkaido.jp shiraoi.hokkaido.jp shiriuchi.hokkaido.jp sobetsu.hokkaido.jp sunagawa.hokkaido.jp taiki.hokkaido.jp takasu.hokkaido.jp takikawa.hokkaido.jp takinoue.hokkaido.jp teshikaga.hokkaido.jp tobetsu.hokkaido.jp tohma.hokkaido.jp tomakomai.hokkaido.jp tomari.hokkaido.jp toya.hokkaido.jp toyako.hokkaido.jp toyotomi.hokkaido.jp toyoura.hokkaido.jp tsubetsu.hokkaido.jp tsukigata.hokkaido.jp urakawa.hokkaido.jp urausu.hokkaido.jp uryu.hokkaido.jp utashinai.hokkaido.jp wakkanai.hokkaido.jp wassamu.hokkaido.jp yakumo.hokkaido.jp yoichi.hokkaido.jp aioi.hyogo.jp akashi.hyogo.jp ako.hyogo.jp amagasaki.hyogo.jp aogaki.hyogo.jp asago.hyogo.jp ashiya.hyogo.jp awaji.hyogo.jp fukusaki.hyogo.jp goshiki.hyogo.jp harima.hyogo.jp himeji.hyogo.jp ichikawa.hyogo.jp inagawa.hyogo.jp itami.hyogo.jp kakogawa.hyogo.jp kamigori.hyogo.jp kamikawa.hyogo.jp kasai.hyogo.jp kasuga.hyogo.jp kawanishi.hyogo.jp miki.hyogo.jp minamiawaji.hyogo.jp nishinomiya.hyogo.jp nishiwaki.hyogo.jp ono.hyogo.jp sanda.hyogo.jp sannan.hyogo.jp sasayama.hyogo.jp sayo.hyogo.jp shingu.hyogo.jp shinonsen.hyogo.jp shiso.hyogo.jp sumoto.hyogo.jp taishi.hyogo.jp taka.hyogo.jp takarazuka.hyogo.jp takasago.hyogo.jp takino.hyogo.jp tamba.hyogo.jp tatsuno.hyogo.jp toyooka.hyogo.jp yabu.hyogo.jp yashiro.hyogo.jp yoka.hyogo.jp yokawa.hyogo.jp ami.ibaraki.jp asahi.ibaraki.jp bando.ibaraki.jp chikusei.ibaraki.jp daigo.ibaraki.jp fujishiro.ibaraki.jp hitachi.ibaraki.jp hitachinaka.ibaraki.jp hitachiomiya.ibaraki.jp hitachiota.ibaraki.jp ibaraki.ibaraki.jp ina.ibaraki.jp inashiki.ibaraki.jp itako.ibaraki.jp iwama.ibaraki.jp joso.ibaraki.jp kamisu.ibaraki.jp kasama.ibaraki.jp kashima.ibaraki.jp kasumigaura.ibaraki.jp koga.ibaraki.jp miho.ibaraki.jp mito.ibaraki.jp moriya.ibaraki.jp naka.ibaraki.jp namegata.ibaraki.jp oarai.ibaraki.jp ogawa.ibaraki.jp omitama.ibaraki.jp ryugasaki.ibaraki.jp sakai.ibaraki.jp sakuragawa.ibaraki.jp shimodate.ibaraki.jp shimotsuma.ibaraki.jp shirosato.ibaraki.jp sowa.ibaraki.jp suifu.ibaraki.jp takahagi.ibaraki.jp tamatsukuri.ibaraki.jp tokai.ibaraki.jp tomobe.ibaraki.jp tone.ibaraki.jp toride.ibaraki.jp tsuchiura.ibaraki.jp tsukuba.ibaraki.jp uchihara.ibaraki.jp ushiku.ibaraki.jp yachiyo.ibaraki.jp yamagata.ibaraki.jp yawara.ibaraki.jp yuki.ibaraki.jp anamizu.ishikawa.jp hakui.ishikawa.jp hakusan.ishikawa.jp kaga.ishikawa.jp kahoku.ishikawa.jp kanazawa.ishikawa.jp kawakita.ishikawa.jp komatsu.ishikawa.jp nakanoto.ishikawa.jp nanao.ishikawa.jp nomi.ishikawa.jp nonoichi.ishikawa.jp noto.ishikawa.jp shika.ishikawa.jp suzu.ishikawa.jp tsubata.ishikawa.jp tsurugi.ishikawa.jp uchinada.ishikawa.jp wajima.ishikawa.jp fudai.iwate.jp fujisawa.iwate.jp hanamaki.iwate.jp hiraizumi.iwate.jp hirono.iwate.jp ichinohe.iwate.jp ichinoseki.iwate.jp iwaizumi.iwate.jp iwate.iwate.jp joboji.iwate.jp kamaishi.iwate.jp kanegasaki.iwate.jp karumai.iwate.jp kawai.iwate.jp kitakami.iwate.jp kuji.iwate.jp kunohe.iwate.jp kuzumaki.iwate.jp miyako.iwate.jp mizusawa.iwate.jp morioka.iwate.jp ninohe.iwate.jp noda.iwate.jp ofunato.iwate.jp oshu.iwate.jp otsuchi.iwate.jp rikuzentakata.iwate.jp shiwa.iwate.jp shizukuishi.iwate.jp sumita.iwate.jp takizawa.iwate.jp tanohata.iwate.jp tono.iwate.jp yahaba.iwate.jp yamada.iwate.jp ayagawa.kagawa.jp higashikagawa.kagawa.jp kanonji.kagawa.jp kotohira.kagawa.jp manno.kagawa.jp marugame.kagawa.jp mitoyo.kagawa.jp naoshima.kagawa.jp sanuki.kagawa.jp tadotsu.kagawa.jp takamatsu.kagawa.jp tonosho.kagawa.jp uchinomi.kagawa.jp utazu.kagawa.jp zentsuji.kagawa.jp akune.kagoshima.jp amami.kagoshima.jp hioki.kagoshima.jp isa.kagoshima.jp isen.kagoshima.jp izumi.kagoshima.jp kagoshima.kagoshima.jp kanoya.kagoshima.jp kawanabe.kagoshima.jp kinko.kagoshima.jp kouyama.kagoshima.jp makurazaki.kagoshima.jp matsumoto.kagoshima.jp minamitane.kagoshima.jp nakatane.kagoshima.jp nishinoomote.kagoshima.jp satsumasendai.kagoshima.jp soo.kagoshima.jp tarumizu.kagoshima.jp yusui.kagoshima.jp aikawa.kanagawa.jp atsugi.kanagawa.jp ayase.kanagawa.jp chigasaki.kanagawa.jp ebina.kanagawa.jp fujisawa.kanagawa.jp hadano.kanagawa.jp hakone.kanagawa.jp hiratsuka.kanagawa.jp isehara.kanagawa.jp kaisei.kanagawa.jp kamakura.kanagawa.jp kiyokawa.kanagawa.jp matsuda.kanagawa.jp minamiashigara.kanagawa.jp miura.kanagawa.jp nakai.kanagawa.jp ninomiya.kanagawa.jp odawara.kanagawa.jp oi.kanagawa.jp oiso.kanagawa.jp sagamihara.kanagawa.jp samukawa.kanagawa.jp tsukui.kanagawa.jp yamakita.kanagawa.jp yamato.kanagawa.jp yokosuka.kanagawa.jp yugawara.kanagawa.jp zama.kanagawa.jp zushi.kanagawa.jp aki.kochi.jp geisei.kochi.jp hidaka.kochi.jp higashitsuno.kochi.jp ino.kochi.jp kagami.kochi.jp kami.kochi.jp kitagawa.kochi.jp kochi.kochi.jp mihara.kochi.jp motoyama.kochi.jp muroto.kochi.jp nahari.kochi.jp nakamura.kochi.jp nankoku.kochi.jp nishitosa.kochi.jp niyodogawa.kochi.jp ochi.kochi.jp okawa.kochi.jp otoyo.kochi.jp otsuki.kochi.jp sakawa.kochi.jp sukumo.kochi.jp susaki.kochi.jp tosa.kochi.jp tosashimizu.kochi.jp toyo.kochi.jp tsuno.kochi.jp umaji.kochi.jp yasuda.kochi.jp yusuhara.kochi.jp amakusa.kumamoto.jp arao.kumamoto.jp aso.kumamoto.jp choyo.kumamoto.jp gyokuto.kumamoto.jp hitoyoshi.kumamoto.jp kamiamakusa.kumamoto.jp kashima.kumamoto.jp kikuchi.kumamoto.jp kosa.kumamoto.jp kumamoto.kumamoto.jp mashiki.kumamoto.jp mifune.kumamoto.jp minamata.kumamoto.jp minamioguni.kumamoto.jp nagasu.kumamoto.jp nishihara.kumamoto.jp oguni.kumamoto.jp ozu.kumamoto.jp sumoto.kumamoto.jp takamori.kumamoto.jp uki.kumamoto.jp uto.kumamoto.jp yamaga.kumamoto.jp yamato.kumamoto.jp yatsushiro.kumamoto.jp ayabe.kyoto.jp fukuchiyama.kyoto.jp higashiyama.kyoto.jp ide.kyoto.jp ine.kyoto.jp joyo.kyoto.jp kameoka.kyoto.jp kamo.kyoto.jp kita.kyoto.jp kizu.kyoto.jp kumiyama.kyoto.jp kyotamba.kyoto.jp kyotanabe.kyoto.jp kyotango.kyoto.jp maizuru.kyoto.jp minami.kyoto.jp minamiyamashiro.kyoto.jp miyazu.kyoto.jp muko.kyoto.jp nagaokakyo.kyoto.jp nakagyo.kyoto.jp nantan.kyoto.jp oyamazaki.kyoto.jp sakyo.kyoto.jp seika.kyoto.jp tanabe.kyoto.jp uji.kyoto.jp ujitawara.kyoto.jp wazuka.kyoto.jp yamashina.kyoto.jp yawata.kyoto.jp asahi.mie.jp inabe.mie.jp ise.mie.jp kameyama.mie.jp kawagoe.mie.jp kiho.mie.jp kisosaki.mie.jp kiwa.mie.jp komono.mie.jp kumano.mie.jp kuwana.mie.jp matsusaka.mie.jp meiwa.mie.jp mihama.mie.jp minamiise.mie.jp misugi.mie.jp miyama.mie.jp nabari.mie.jp shima.mie.jp suzuka.mie.jp tado.mie.jp taiki.mie.jp taki.mie.jp tamaki.mie.jp toba.mie.jp tsu.mie.jp udono.mie.jp ureshino.mie.jp watarai.mie.jp yokkaichi.mie.jp furukawa.miyagi.jp higashimatsushima.miyagi.jp ishinomaki.miyagi.jp iwanuma.miyagi.jp kakuda.miyagi.jp kami.miyagi.jp kawasaki.miyagi.jp kesennuma.miyagi.jp marumori.miyagi.jp matsushima.miyagi.jp minamisanriku.miyagi.jp misato.miyagi.jp murata.miyagi.jp natori.miyagi.jp ogawara.miyagi.jp ohira.miyagi.jp onagawa.miyagi.jp osaki.miyagi.jp rifu.miyagi.jp semine.miyagi.jp shibata.miyagi.jp shichikashuku.miyagi.jp shikama.miyagi.jp shiogama.miyagi.jp shiroishi.miyagi.jp tagajo.miyagi.jp taiwa.miyagi.jp tome.miyagi.jp tomiya.miyagi.jp wakuya.miyagi.jp watari.miyagi.jp yamamoto.miyagi.jp zao.miyagi.jp aya.miyazaki.jp ebino.miyazaki.jp gokase.miyazaki.jp hyuga.miyazaki.jp kadogawa.miyazaki.jp kawaminami.miyazaki.jp kijo.miyazaki.jp kitagawa.miyazaki.jp kitakata.miyazaki.jp kitaura.miyazaki.jp kobayashi.miyazaki.jp kunitomi.miyazaki.jp kushima.miyazaki.jp mimata.miyazaki.jp miyakonojo.miyazaki.jp miyazaki.miyazaki.jp morotsuka.miyazaki.jp nichinan.miyazaki.jp nishimera.miyazaki.jp nobeoka.miyazaki.jp saito.miyazaki.jp shiiba.miyazaki.jp shintomi.miyazaki.jp takaharu.miyazaki.jp takanabe.miyazaki.jp takazaki.miyazaki.jp tsuno.miyazaki.jp achi.nagano.jp agematsu.nagano.jp anan.nagano.jp aoki.nagano.jp asahi.nagano.jp azumino.nagano.jp chikuhoku.nagano.jp chikuma.nagano.jp chino.nagano.jp fujimi.nagano.jp hakuba.nagano.jp hara.nagano.jp hiraya.nagano.jp iida.nagano.jp iijima.nagano.jp iiyama.nagano.jp iizuna.nagano.jp ikeda.nagano.jp ikusaka.nagano.jp ina.nagano.jp karuizawa.nagano.jp kawakami.nagano.jp kiso.nagano.jp kisofukushima.nagano.jp kitaaiki.nagano.jp komagane.nagano.jp komoro.nagano.jp matsukawa.nagano.jp matsumoto.nagano.jp miasa.nagano.jp minamiaiki.nagano.jp minamimaki.nagano.jp minamiminowa.nagano.jp minowa.nagano.jp miyada.nagano.jp miyota.nagano.jp mochizuki.nagano.jp nagano.nagano.jp nagawa.nagano.jp nagiso.nagano.jp nakagawa.nagano.jp nakano.nagano.jp nozawaonsen.nagano.jp obuse.nagano.jp ogawa.nagano.jp okaya.nagano.jp omachi.nagano.jp omi.nagano.jp ookuwa.nagano.jp ooshika.nagano.jp otaki.nagano.jp otari.nagano.jp sakae.nagano.jp sakaki.nagano.jp saku.nagano.jp sakuho.nagano.jp shimosuwa.nagano.jp shinanomachi.nagano.jp shiojiri.nagano.jp suwa.nagano.jp suzaka.nagano.jp takagi.nagano.jp takamori.nagano.jp takayama.nagano.jp tateshina.nagano.jp tatsuno.nagano.jp togakushi.nagano.jp togura.nagano.jp tomi.nagano.jp ueda.nagano.jp wada.nagano.jp yamagata.nagano.jp yamanouchi.nagano.jp yasaka.nagano.jp yasuoka.nagano.jp chijiwa.nagasaki.jp futsu.nagasaki.jp goto.nagasaki.jp hasami.nagasaki.jp hirado.nagasaki.jp iki.nagasaki.jp isahaya.nagasaki.jp kawatana.nagasaki.jp kuchinotsu.nagasaki.jp matsuura.nagasaki.jp nagasaki.nagasaki.jp obama.nagasaki.jp omura.nagasaki.jp oseto.nagasaki.jp saikai.nagasaki.jp sasebo.nagasaki.jp seihi.nagasaki.jp shimabara.nagasaki.jp shinkamigoto.nagasaki.jp togitsu.nagasaki.jp tsushima.nagasaki.jp unzen.nagasaki.jp ando.nara.jp gose.nara.jp heguri.nara.jp higashiyoshino.nara.jp ikaruga.nara.jp ikoma.nara.jp kamikitayama.nara.jp kanmaki.nara.jp kashiba.nara.jp kashihara.nara.jp katsuragi.nara.jp kawai.nara.jp kawakami.nara.jp kawanishi.nara.jp koryo.nara.jp kurotaki.nara.jp mitsue.nara.jp miyake.nara.jp nara.nara.jp nosegawa.nara.jp oji.nara.jp ouda.nara.jp oyodo.nara.jp sakurai.nara.jp sango.nara.jp shimoichi.nara.jp shimokitayama.nara.jp shinjo.nara.jp soni.nara.jp takatori.nara.jp tawaramoto.nara.jp tenkawa.nara.jp tenri.nara.jp uda.nara.jp yamatokoriyama.nara.jp yamatotakada.nara.jp yamazoe.nara.jp yoshino.nara.jp aga.niigata.jp agano.niigata.jp gosen.niigata.jp itoigawa.niigata.jp izumozaki.niigata.jp joetsu.niigata.jp kamo.niigata.jp kariwa.niigata.jp kashiwazaki.niigata.jp minamiuonuma.niigata.jp mitsuke.niigata.jp muika.niigata.jp murakami.niigata.jp myoko.niigata.jp nagaoka.niigata.jp niigata.niigata.jp ojiya.niigata.jp omi.niigata.jp sado.niigata.jp sanjo.niigata.jp seiro.niigata.jp seirou.niigata.jp sekikawa.niigata.jp shibata.niigata.jp tagami.niigata.jp tainai.niigata.jp tochio.niigata.jp tokamachi.niigata.jp tsubame.niigata.jp tsunan.niigata.jp uonuma.niigata.jp yahiko.niigata.jp yoita.niigata.jp yuzawa.niigata.jp beppu.oita.jp bungoono.oita.jp bungotakada.oita.jp hasama.oita.jp hiji.oita.jp himeshima.oita.jp hita.oita.jp kamitsue.oita.jp kokonoe.oita.jp kuju.oita.jp kunisaki.oita.jp kusu.oita.jp oita.oita.jp saiki.oita.jp taketa.oita.jp tsukumi.oita.jp usa.oita.jp usuki.oita.jp yufu.oita.jp akaiwa.okayama.jp asakuchi.okayama.jp bizen.okayama.jp hayashima.okayama.jp ibara.okayama.jp kagamino.okayama.jp kasaoka.okayama.jp kibichuo.okayama.jp kumenan.okayama.jp kurashiki.okayama.jp maniwa.okayama.jp misaki.okayama.jp nagi.okayama.jp niimi.okayama.jp nishiawakura.okayama.jp okayama.okayama.jp satosho.okayama.jp setouchi.okayama.jp shinjo.okayama.jp shoo.okayama.jp soja.okayama.jp takahashi.okayama.jp tamano.okayama.jp tsuyama.okayama.jp wake.okayama.jp yakage.okayama.jp aguni.okinawa.jp ginowan.okinawa.jp ginoza.okinawa.jp gushikami.okinawa.jp haebaru.okinawa.jp higashi.okinawa.jp hirara.okinawa.jp iheya.okinawa.jp ishigaki.okinawa.jp ishikawa.okinawa.jp itoman.okinawa.jp izena.okinawa.jp kadena.okinawa.jp kin.okinawa.jp kitadaito.okinawa.jp kitanakagusuku.okinawa.jp kumejima.okinawa.jp kunigami.okinawa.jp minamidaito.okinawa.jp motobu.okinawa.jp nago.okinawa.jp naha.okinawa.jp nakagusuku.okinawa.jp nakijin.okinawa.jp nanjo.okinawa.jp nishihara.okinawa.jp ogimi.okinawa.jp okinawa.okinawa.jp onna.okinawa.jp shimoji.okinawa.jp taketomi.okinawa.jp tarama.okinawa.jp tokashiki.okinawa.jp tomigusuku.okinawa.jp tonaki.okinawa.jp urasoe.okinawa.jp uruma.okinawa.jp yaese.okinawa.jp yomitan.okinawa.jp yonabaru.okinawa.jp yonaguni.okinawa.jp zamami.okinawa.jp abeno.osaka.jp chihayaakasaka.osaka.jp chuo.osaka.jp daito.osaka.jp fujiidera.osaka.jp habikino.osaka.jp hannan.osaka.jp higashiosaka.osaka.jp higashisumiyoshi.osaka.jp higashiyodogawa.osaka.jp hirakata.osaka.jp ibaraki.osaka.jp ikeda.osaka.jp izumi.osaka.jp izumiotsu.osaka.jp izumisano.osaka.jp kadoma.osaka.jp kaizuka.osaka.jp kanan.osaka.jp kashiwara.osaka.jp katano.osaka.jp kawachinagano.osaka.jp kishiwada.osaka.jp kita.osaka.jp kumatori.osaka.jp matsubara.osaka.jp minato.osaka.jp minoh.osaka.jp misaki.osaka.jp moriguchi.osaka.jp neyagawa.osaka.jp nishi.osaka.jp nose.osaka.jp osakasayama.osaka.jp sakai.osaka.jp sayama.osaka.jp sennan.osaka.jp settsu.osaka.jp shijonawate.osaka.jp shimamoto.osaka.jp suita.osaka.jp tadaoka.osaka.jp taishi.osaka.jp tajiri.osaka.jp takaishi.osaka.jp takatsuki.osaka.jp tondabayashi.osaka.jp toyonaka.osaka.jp toyono.osaka.jp yao.osaka.jp ariake.saga.jp arita.saga.jp fukudomi.saga.jp genkai.saga.jp hamatama.saga.jp hizen.saga.jp imari.saga.jp kamimine.saga.jp kanzaki.saga.jp karatsu.saga.jp kashima.saga.jp kitagata.saga.jp kitahata.saga.jp kiyama.saga.jp kouhoku.saga.jp kyuragi.saga.jp nishiarita.saga.jp ogi.saga.jp omachi.saga.jp ouchi.saga.jp saga.saga.jp shiroishi.saga.jp taku.saga.jp tara.saga.jp tosu.saga.jp yoshinogari.saga.jp arakawa.saitama.jp asaka.saitama.jp chichibu.saitama.jp fujimi.saitama.jp fujimino.saitama.jp fukaya.saitama.jp hanno.saitama.jp hanyu.saitama.jp hasuda.saitama.jp hatogaya.saitama.jp hatoyama.saitama.jp hidaka.saitama.jp higashichichibu.saitama.jp higashimatsuyama.saitama.jp honjo.saitama.jp ina.saitama.jp iruma.saitama.jp iwatsuki.saitama.jp kamiizumi.saitama.jp kamikawa.saitama.jp kamisato.saitama.jp kasukabe.saitama.jp kawagoe.saitama.jp kawaguchi.saitama.jp kawajima.saitama.jp kazo.saitama.jp kitamoto.saitama.jp koshigaya.saitama.jp kounosu.saitama.jp kuki.saitama.jp kumagaya.saitama.jp matsubushi.saitama.jp minano.saitama.jp misato.saitama.jp miyashiro.saitama.jp miyoshi.saitama.jp moroyama.saitama.jp nagatoro.saitama.jp namegawa.saitama.jp niiza.saitama.jp ogano.saitama.jp ogawa.saitama.jp ogose.saitama.jp okegawa.saitama.jp omiya.saitama.jp otaki.saitama.jp ranzan.saitama.jp ryokami.saitama.jp saitama.saitama.jp sakado.saitama.jp satte.saitama.jp sayama.saitama.jp shiki.saitama.jp shiraoka.saitama.jp soka.saitama.jp sugito.saitama.jp toda.saitama.jp tokigawa.saitama.jp tokorozawa.saitama.jp tsurugashima.saitama.jp urawa.saitama.jp warabi.saitama.jp yashio.saitama.jp yokoze.saitama.jp yono.saitama.jp yorii.saitama.jp yoshida.saitama.jp yoshikawa.saitama.jp yoshimi.saitama.jp aisho.shiga.jp gamo.shiga.jp higashiomi.shiga.jp hikone.shiga.jp koka.shiga.jp konan.shiga.jp kosei.shiga.jp koto.shiga.jp kusatsu.shiga.jp maibara.shiga.jp moriyama.shiga.jp nagahama.shiga.jp nishiazai.shiga.jp notogawa.shiga.jp omihachiman.shiga.jp otsu.shiga.jp ritto.shiga.jp ryuoh.shiga.jp takashima.shiga.jp takatsuki.shiga.jp torahime.shiga.jp toyosato.shiga.jp yasu.shiga.jp akagi.shimane.jp ama.shimane.jp gotsu.shimane.jp hamada.shimane.jp higashiizumo.shimane.jp hikawa.shimane.jp hikimi.shimane.jp izumo.shimane.jp kakinoki.shimane.jp masuda.shimane.jp matsue.shimane.jp misato.shimane.jp nishinoshima.shimane.jp ohda.shimane.jp okinoshima.shimane.jp okuizumo.shimane.jp shimane.shimane.jp tamayu.shimane.jp tsuwano.shimane.jp unnan.shimane.jp yakumo.shimane.jp yasugi.shimane.jp yatsuka.shimane.jp arai.shizuoka.jp atami.shizuoka.jp fuji.shizuoka.jp fujieda.shizuoka.jp fujikawa.shizuoka.jp fujinomiya.shizuoka.jp fukuroi.shizuoka.jp gotemba.shizuoka.jp haibara.shizuoka.jp hamamatsu.shizuoka.jp higashiizu.shizuoka.jp ito.shizuoka.jp iwata.shizuoka.jp izu.shizuoka.jp izunokuni.shizuoka.jp kakegawa.shizuoka.jp kannami.shizuoka.jp kawanehon.shizuoka.jp kawazu.shizuoka.jp kikugawa.shizuoka.jp kosai.shizuoka.jp makinohara.shizuoka.jp matsuzaki.shizuoka.jp minamiizu.shizuoka.jp mishima.shizuoka.jp morimachi.shizuoka.jp nishiizu.shizuoka.jp numazu.shizuoka.jp omaezaki.shizuoka.jp shimada.shizuoka.jp shimizu.shizuoka.jp shimoda.shizuoka.jp shizuoka.shizuoka.jp susono.shizuoka.jp yaizu.shizuoka.jp yoshida.shizuoka.jp ashikaga.tochigi.jp bato.tochigi.jp haga.tochigi.jp ichikai.tochigi.jp iwafune.tochigi.jp kaminokawa.tochigi.jp kanuma.tochigi.jp karasuyama.tochigi.jp kuroiso.tochigi.jp mashiko.tochigi.jp mibu.tochigi.jp moka.tochigi.jp motegi.tochigi.jp nasu.tochigi.jp nasushiobara.tochigi.jp nikko.tochigi.jp nishikata.tochigi.jp nogi.tochigi.jp ohira.tochigi.jp ohtawara.tochigi.jp oyama.tochigi.jp sakura.tochigi.jp sano.tochigi.jp shimotsuke.tochigi.jp shioya.tochigi.jp takanezawa.tochigi.jp tochigi.tochigi.jp tsuga.tochigi.jp ujiie.tochigi.jp utsunomiya.tochigi.jp yaita.tochigi.jp aizumi.tokushima.jp anan.tokushima.jp ichiba.tokushima.jp itano.tokushima.jp kainan.tokushima.jp komatsushima.tokushima.jp matsushige.tokushima.jp mima.tokushima.jp minami.tokushima.jp miyoshi.tokushima.jp mugi.tokushima.jp nakagawa.tokushima.jp naruto.tokushima.jp sanagochi.tokushima.jp shishikui.tokushima.jp tokushima.tokushima.jp wajiki.tokushima.jp adachi.tokyo.jp akiruno.tokyo.jp akishima.tokyo.jp aogashima.tokyo.jp arakawa.tokyo.jp bunkyo.tokyo.jp chiyoda.tokyo.jp chofu.tokyo.jp chuo.tokyo.jp edogawa.tokyo.jp fuchu.tokyo.jp fussa.tokyo.jp hachijo.tokyo.jp hachioji.tokyo.jp hamura.tokyo.jp higashikurume.tokyo.jp higashimurayama.tokyo.jp higashiyamato.tokyo.jp hino.tokyo.jp hinode.tokyo.jp hinohara.tokyo.jp inagi.tokyo.jp itabashi.tokyo.jp katsushika.tokyo.jp kita.tokyo.jp kiyose.tokyo.jp kodaira.tokyo.jp koganei.tokyo.jp kokubunji.tokyo.jp komae.tokyo.jp koto.tokyo.jp kouzushima.tokyo.jp kunitachi.tokyo.jp machida.tokyo.jp meguro.tokyo.jp minato.tokyo.jp mitaka.tokyo.jp mizuho.tokyo.jp musashimurayama.tokyo.jp musashino.tokyo.jp nakano.tokyo.jp nerima.tokyo.jp ogasawara.tokyo.jp okutama.tokyo.jp ome.tokyo.jp oshima.tokyo.jp ota.tokyo.jp setagaya.tokyo.jp shibuya.tokyo.jp shinagawa.tokyo.jp shinjuku.tokyo.jp suginami.tokyo.jp sumida.tokyo.jp tachikawa.tokyo.jp taito.tokyo.jp tama.tokyo.jp toshima.tokyo.jp chizu.tottori.jp hino.tottori.jp kawahara.tottori.jp koge.tottori.jp kotoura.tottori.jp misasa.tottori.jp nanbu.tottori.jp nichinan.tottori.jp sakaiminato.tottori.jp tottori.tottori.jp wakasa.tottori.jp yazu.tottori.jp yonago.tottori.jp asahi.toyama.jp fuchu.toyama.jp fukumitsu.toyama.jp funahashi.toyama.jp himi.toyama.jp imizu.toyama.jp inami.toyama.jp johana.toyama.jp kamiichi.toyama.jp kurobe.toyama.jp nakaniikawa.toyama.jp namerikawa.toyama.jp nanto.toyama.jp nyuzen.toyama.jp oyabe.toyama.jp taira.toyama.jp takaoka.toyama.jp tateyama.toyama.jp toga.toyama.jp tonami.toyama.jp toyama.toyama.jp unazuki.toyama.jp uozu.toyama.jp yamada.toyama.jp arida.wakayama.jp aridagawa.wakayama.jp gobo.wakayama.jp hashimoto.wakayama.jp hidaka.wakayama.jp hirogawa.wakayama.jp inami.wakayama.jp iwade.wakayama.jp kainan.wakayama.jp kamitonda.wakayama.jp katsuragi.wakayama.jp kimino.wakayama.jp kinokawa.wakayama.jp kitayama.wakayama.jp koya.wakayama.jp koza.wakayama.jp kozagawa.wakayama.jp kudoyama.wakayama.jp kushimoto.wakayama.jp mihama.wakayama.jp misato.wakayama.jp nachikatsuura.wakayama.jp shingu.wakayama.jp shirahama.wakayama.jp taiji.wakayama.jp tanabe.wakayama.jp wakayama.wakayama.jp yuasa.wakayama.jp yura.wakayama.jp asahi.yamagata.jp funagata.yamagata.jp higashine.yamagata.jp iide.yamagata.jp kahoku.yamagata.jp kaminoyama.yamagata.jp kaneyama.yamagata.jp kawanishi.yamagata.jp mamurogawa.yamagata.jp mikawa.yamagata.jp murayama.yamagata.jp nagai.yamagata.jp nakayama.yamagata.jp nanyo.yamagata.jp nishikawa.yamagata.jp obanazawa.yamagata.jp oe.yamagata.jp oguni.yamagata.jp ohkura.yamagata.jp oishida.yamagata.jp sagae.yamagata.jp sakata.yamagata.jp sakegawa.yamagata.jp shinjo.yamagata.jp shirataka.yamagata.jp shonai.yamagata.jp takahata.yamagata.jp tendo.yamagata.jp tozawa.yamagata.jp tsuruoka.yamagata.jp yamagata.yamagata.jp yamanobe.yamagata.jp yonezawa.yamagata.jp yuza.yamagata.jp abu.yamaguchi.jp hagi.yamaguchi.jp hikari.yamaguchi.jp hofu.yamaguchi.jp iwakuni.yamaguchi.jp kudamatsu.yamaguchi.jp mitou.yamaguchi.jp nagato.yamaguchi.jp oshima.yamaguchi.jp shimonoseki.yamaguchi.jp shunan.yamaguchi.jp tabuse.yamaguchi.jp tokuyama.yamaguchi.jp toyota.yamaguchi.jp ube.yamaguchi.jp yuu.yamaguchi.jp chuo.yamanashi.jp doshi.yamanashi.jp fuefuki.yamanashi.jp fujikawa.yamanashi.jp fujikawaguchiko.yamanashi.jp fujiyoshida.yamanashi.jp hayakawa.yamanashi.jp hokuto.yamanashi.jp ichikawamisato.yamanashi.jp kai.yamanashi.jp kofu.yamanashi.jp koshu.yamanashi.jp kosuge.yamanashi.jp minami-alps.yamanashi.jp minobu.yamanashi.jp nakamichi.yamanashi.jp nanbu.yamanashi.jp narusawa.yamanashi.jp nirasaki.yamanashi.jp nishikatsura.yamanashi.jp oshino.yamanashi.jp otsuki.yamanashi.jp showa.yamanashi.jp tabayama.yamanashi.jp tsuru.yamanashi.jp uenohara.yamanashi.jp yamanakako.yamanashi.jp yamanashi.yamanashi.jp // ke : http://www.kenic.or.ke/index.php?option=com_content&task=view&id=117&Itemid=145 *.ke // kg : http://www.domain.kg/dmn_n.html kg org.kg net.kg com.kg edu.kg gov.kg mil.kg // kh : http://www.mptc.gov.kh/dns_registration.htm *.kh // ki : http://www.ki/dns/index.html ki edu.ki biz.ki net.ki org.ki gov.ki info.ki com.ki // km : http://en.wikipedia.org/wiki/.km // http://www.domaine.km/documents/charte.doc km org.km nom.km gov.km prd.km tm.km edu.km mil.km ass.km com.km // These are only mentioned as proposed suggestions at domaine.km, but // http://en.wikipedia.org/wiki/.km says they're available for registration: coop.km asso.km presse.km medecin.km notaires.km pharmaciens.km veterinaire.km gouv.km // kn : http://en.wikipedia.org/wiki/.kn // http://www.dot.kn/domainRules.html kn net.kn org.kn edu.kn gov.kn // kp : http://www.kcce.kp/en_index.php kp com.kp edu.kp gov.kp org.kp rep.kp tra.kp // kr : http://en.wikipedia.org/wiki/.kr // see also: http://domain.nida.or.kr/eng/registration.jsp kr ac.kr co.kr es.kr go.kr hs.kr kg.kr mil.kr ms.kr ne.kr or.kr pe.kr re.kr sc.kr // kr geographical names busan.kr chungbuk.kr chungnam.kr daegu.kr daejeon.kr gangwon.kr gwangju.kr gyeongbuk.kr gyeonggi.kr gyeongnam.kr incheon.kr jeju.kr jeonbuk.kr jeonnam.kr seoul.kr ulsan.kr // kw : http://en.wikipedia.org/wiki/.kw *.kw // ky : http://www.icta.ky/da_ky_reg_dom.php // Confirmed by registry 2008-06-17 ky edu.ky gov.ky com.ky org.ky net.ky // kz : http://en.wikipedia.org/wiki/.kz // see also: http://www.nic.kz/rules/index.jsp kz org.kz edu.kz net.kz gov.kz mil.kz com.kz // la : http://en.wikipedia.org/wiki/.la // Submitted by registry 2008-06-10 la int.la net.la info.la edu.la gov.la per.la com.la org.la // lb : http://en.wikipedia.org/wiki/.lb // Submitted by registry 2008-06-17 lb com.lb edu.lb gov.lb net.lb org.lb // lc : http://en.wikipedia.org/wiki/.lc // see also: http://www.nic.lc/rules.htm lc com.lc net.lc co.lc org.lc edu.lc gov.lc // li : http://en.wikipedia.org/wiki/.li li // lk : http://www.nic.lk/seclevpr.html lk gov.lk sch.lk net.lk int.lk com.lk org.lk edu.lk ngo.lk soc.lk web.lk ltd.lk assn.lk grp.lk hotel.lk // lr : http://psg.com/dns/lr/lr.txt // Submitted by registry 2008-06-17 lr com.lr edu.lr gov.lr org.lr net.lr // ls : http://en.wikipedia.org/wiki/.ls ls co.ls org.ls // lt : http://en.wikipedia.org/wiki/.lt lt // gov.lt : http://www.gov.lt/index_en.php gov.lt // lu : http://www.dns.lu/en/ lu // lv : http://www.nic.lv/DNS/En/generic.php lv com.lv edu.lv gov.lv org.lv mil.lv id.lv net.lv asn.lv conf.lv // ly : http://www.nic.ly/regulations.php ly com.ly net.ly gov.ly plc.ly edu.ly sch.ly med.ly org.ly id.ly // ma : http://en.wikipedia.org/wiki/.ma // http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf ma co.ma net.ma gov.ma org.ma ac.ma press.ma // mc : http://www.nic.mc/ mc tm.mc asso.mc // md : http://en.wikipedia.org/wiki/.md md // me : http://en.wikipedia.org/wiki/.me me co.me net.me org.me edu.me ac.me gov.me its.me priv.me // mg : http://www.nic.mg/tarif.htm mg org.mg nom.mg gov.mg prd.mg tm.mg edu.mg mil.mg com.mg // mh : http://en.wikipedia.org/wiki/.mh mh // mil : http://en.wikipedia.org/wiki/.mil mil // mk : http://en.wikipedia.org/wiki/.mk // see also: http://dns.marnet.net.mk/postapka.php mk com.mk org.mk net.mk edu.mk gov.mk inf.mk name.mk // ml : http://www.gobin.info/domainname/ml-template.doc // see also: http://en.wikipedia.org/wiki/.ml ml com.ml edu.ml gouv.ml gov.ml net.ml org.ml presse.ml // mm : http://en.wikipedia.org/wiki/.mm *.mm // mn : http://en.wikipedia.org/wiki/.mn mn gov.mn edu.mn org.mn // mo : http://www.monic.net.mo/ mo com.mo net.mo org.mo edu.mo gov.mo // mobi : http://en.wikipedia.org/wiki/.mobi mobi // mp : http://www.dot.mp/ // Confirmed by registry 2008-06-17 mp // mq : http://en.wikipedia.org/wiki/.mq mq // mr : http://en.wikipedia.org/wiki/.mr mr gov.mr // ms : http://en.wikipedia.org/wiki/.ms ms // mt : https://www.nic.org.mt/go/policy // Submitted by registry 2013-11-19 mt com.mt edu.mt net.mt org.mt // mu : http://en.wikipedia.org/wiki/.mu mu com.mu net.mu org.mu gov.mu ac.mu co.mu or.mu // museum : http://about.museum/naming/ // http://index.museum/ museum academy.museum agriculture.museum air.museum airguard.museum alabama.museum alaska.museum amber.museum ambulance.museum american.museum americana.museum americanantiques.museum americanart.museum amsterdam.museum and.museum annefrank.museum anthro.museum anthropology.museum antiques.museum aquarium.museum arboretum.museum archaeological.museum archaeology.museum architecture.museum art.museum artanddesign.museum artcenter.museum artdeco.museum arteducation.museum artgallery.museum arts.museum artsandcrafts.museum asmatart.museum assassination.museum assisi.museum association.museum astronomy.museum atlanta.museum austin.museum australia.museum automotive.museum aviation.museum axis.museum badajoz.museum baghdad.museum bahn.museum bale.museum baltimore.museum barcelona.museum baseball.museum basel.museum baths.museum bauern.museum beauxarts.museum beeldengeluid.museum bellevue.museum bergbau.museum berkeley.museum berlin.museum bern.museum bible.museum bilbao.museum bill.museum birdart.museum birthplace.museum bonn.museum boston.museum botanical.museum botanicalgarden.museum botanicgarden.museum botany.museum brandywinevalley.museum brasil.museum bristol.museum british.museum britishcolumbia.museum broadcast.museum brunel.museum brussel.museum brussels.museum bruxelles.museum building.museum burghof.museum bus.museum bushey.museum cadaques.museum california.museum cambridge.museum can.museum canada.museum capebreton.museum carrier.museum cartoonart.museum casadelamoneda.museum castle.museum castres.museum celtic.museum center.museum chattanooga.museum cheltenham.museum chesapeakebay.museum chicago.museum children.museum childrens.museum childrensgarden.museum chiropractic.museum chocolate.museum christiansburg.museum cincinnati.museum cinema.museum circus.museum civilisation.museum civilization.museum civilwar.museum clinton.museum clock.museum coal.museum coastaldefence.museum cody.museum coldwar.museum collection.museum colonialwilliamsburg.museum coloradoplateau.museum columbia.museum columbus.museum communication.museum communications.museum community.museum computer.museum computerhistory.museum comunicações.museum contemporary.museum contemporaryart.museum convent.museum copenhagen.museum corporation.museum correios-e-telecomunicações.museum corvette.museum costume.museum countryestate.museum county.museum crafts.museum cranbrook.museum creation.museum cultural.museum culturalcenter.museum culture.museum cyber.museum cymru.museum dali.museum dallas.museum database.museum ddr.museum decorativearts.museum delaware.museum delmenhorst.museum denmark.museum depot.museum design.museum detroit.museum dinosaur.museum discovery.museum dolls.museum donostia.museum durham.museum eastafrica.museum eastcoast.museum education.museum educational.museum egyptian.museum eisenbahn.museum elburg.museum elvendrell.museum embroidery.museum encyclopedic.museum england.museum entomology.museum environment.museum environmentalconservation.museum epilepsy.museum essex.museum estate.museum ethnology.museum exeter.museum exhibition.museum family.museum farm.museum farmequipment.museum farmers.museum farmstead.museum field.museum figueres.museum filatelia.museum film.museum fineart.museum finearts.museum finland.museum flanders.museum florida.museum force.museum fortmissoula.museum fortworth.museum foundation.museum francaise.museum frankfurt.museum franziskaner.museum freemasonry.museum freiburg.museum fribourg.museum frog.museum fundacio.museum furniture.museum gallery.museum garden.museum gateway.museum geelvinck.museum gemological.museum geology.museum georgia.museum giessen.museum glas.museum glass.museum gorge.museum grandrapids.museum graz.museum guernsey.museum halloffame.museum hamburg.museum handson.museum harvestcelebration.museum hawaii.museum health.museum heimatunduhren.museum hellas.museum helsinki.museum hembygdsforbund.museum heritage.museum histoire.museum historical.museum historicalsociety.museum historichouses.museum historisch.museum historisches.museum history.museum historyofscience.museum horology.museum house.museum humanities.museum illustration.museum imageandsound.museum indian.museum indiana.museum indianapolis.museum indianmarket.museum intelligence.museum interactive.museum iraq.museum iron.museum isleofman.museum jamison.museum jefferson.museum jerusalem.museum jewelry.museum jewish.museum jewishart.museum jfk.museum journalism.museum judaica.museum judygarland.museum juedisches.museum juif.museum karate.museum karikatur.museum kids.museum koebenhavn.museum koeln.museum kunst.museum kunstsammlung.museum kunstunddesign.museum labor.museum labour.museum lajolla.museum lancashire.museum landes.museum lans.museum läns.museum larsson.museum lewismiller.museum lincoln.museum linz.museum living.museum livinghistory.museum localhistory.museum london.museum losangeles.museum louvre.museum loyalist.museum lucerne.museum luxembourg.museum luzern.museum mad.museum madrid.museum mallorca.museum manchester.museum mansion.museum mansions.museum manx.museum marburg.museum maritime.museum maritimo.museum maryland.museum marylhurst.museum media.museum medical.museum medizinhistorisches.museum meeres.museum memorial.museum mesaverde.museum michigan.museum midatlantic.museum military.museum mill.museum miners.museum mining.museum minnesota.museum missile.museum missoula.museum modern.museum moma.museum money.museum monmouth.museum monticello.museum montreal.museum moscow.museum motorcycle.museum muenchen.museum muenster.museum mulhouse.museum muncie.museum museet.museum museumcenter.museum museumvereniging.museum music.museum national.museum nationalfirearms.museum nationalheritage.museum nativeamerican.museum naturalhistory.museum naturalhistorymuseum.museum naturalsciences.museum nature.museum naturhistorisches.museum natuurwetenschappen.museum naumburg.museum naval.museum nebraska.museum neues.museum newhampshire.museum newjersey.museum newmexico.museum newport.museum newspaper.museum newyork.museum niepce.museum norfolk.museum north.museum nrw.museum nuernberg.museum nuremberg.museum nyc.museum nyny.museum oceanographic.museum oceanographique.museum omaha.museum online.museum ontario.museum openair.museum oregon.museum oregontrail.museum otago.museum oxford.museum pacific.museum paderborn.museum palace.museum paleo.museum palmsprings.museum panama.museum paris.museum pasadena.museum pharmacy.museum philadelphia.museum philadelphiaarea.museum philately.museum phoenix.museum photography.museum pilots.museum pittsburgh.museum planetarium.museum plantation.museum plants.museum plaza.museum portal.museum portland.museum portlligat.museum posts-and-telecommunications.museum preservation.museum presidio.museum press.museum project.museum public.museum pubol.museum quebec.museum railroad.museum railway.museum research.museum resistance.museum riodejaneiro.museum rochester.museum rockart.museum roma.museum russia.museum saintlouis.museum salem.museum salvadordali.museum salzburg.museum sandiego.museum sanfrancisco.museum santabarbara.museum santacruz.museum santafe.museum saskatchewan.museum satx.museum savannahga.museum schlesisches.museum schoenbrunn.museum schokoladen.museum school.museum schweiz.museum science.museum scienceandhistory.museum scienceandindustry.museum sciencecenter.museum sciencecenters.museum science-fiction.museum sciencehistory.museum sciences.museum sciencesnaturelles.museum scotland.museum seaport.museum settlement.museum settlers.museum shell.museum sherbrooke.museum sibenik.museum silk.museum ski.museum skole.museum society.museum sologne.museum soundandvision.museum southcarolina.museum southwest.museum space.museum spy.museum square.museum stadt.museum stalbans.museum starnberg.museum state.museum stateofdelaware.museum station.museum steam.museum steiermark.museum stjohn.museum stockholm.museum stpetersburg.museum stuttgart.museum suisse.museum surgeonshall.museum surrey.museum svizzera.museum sweden.museum sydney.museum tank.museum tcm.museum technology.museum telekommunikation.museum television.museum texas.museum textile.museum theater.museum time.museum timekeeping.museum topology.museum torino.museum touch.museum town.museum transport.museum tree.museum trolley.museum trust.museum trustee.museum uhren.museum ulm.museum undersea.museum university.museum usa.museum usantiques.museum usarts.museum uscountryestate.museum usculture.museum usdecorativearts.museum usgarden.museum ushistory.museum ushuaia.museum uslivinghistory.museum utah.museum uvic.museum valley.museum vantaa.museum versailles.museum viking.museum village.museum virginia.museum virtual.museum virtuel.museum vlaanderen.museum volkenkunde.museum wales.museum wallonie.museum war.museum washingtondc.museum watchandclock.museum watch-and-clock.museum western.museum westfalen.museum whaling.museum wildlife.museum williamsburg.museum windmill.museum workshop.museum york.museum yorkshire.museum yosemite.museum youth.museum zoological.museum zoology.museum ירושלים.museum иком.museum // mv : http://en.wikipedia.org/wiki/.mv // "mv" included because, contra Wikipedia, google.mv exists. mv aero.mv biz.mv com.mv coop.mv edu.mv gov.mv info.mv int.mv mil.mv museum.mv name.mv net.mv org.mv pro.mv // mw : http://www.registrar.mw/ mw ac.mw biz.mw co.mw com.mw coop.mw edu.mw gov.mw int.mw museum.mw net.mw org.mw // mx : http://www.nic.mx/ // Submitted by registry 2008-06-19 mx com.mx org.mx gob.mx edu.mx net.mx // my : http://www.mynic.net.my/ my com.my net.my org.my gov.my edu.my mil.my name.my // mz : http://www.gobin.info/domainname/mz-template.doc *.mz !teledata.mz // na : http://www.na-nic.com.na/ // http://www.info.na/domain/ na info.na pro.na name.na school.na or.na dr.na us.na mx.na ca.na in.na cc.na tv.na ws.na mobi.na co.na com.na org.na // name : has 2nd-level tlds, but there's no list of them name // nc : http://www.cctld.nc/ nc asso.nc // ne : http://en.wikipedia.org/wiki/.ne ne // net : http://en.wikipedia.org/wiki/.net net // nf : http://en.wikipedia.org/wiki/.nf nf com.nf net.nf per.nf rec.nf web.nf arts.nf firm.nf info.nf other.nf store.nf // ng : http://psg.com/dns/ng/ ng com.ng edu.ng name.ng net.ng org.ng sch.ng gov.ng mil.ng mobi.ng // ni : http://www.nic.ni/dominios.htm *.ni // nl : http://www.domain-registry.nl/ace.php/c,728,122,,,,Home.html // Confirmed by registry (with technical // reservations) 2008-06-08 nl // BV.nl will be a registry for dutch BV's (besloten vennootschap) bv.nl // no : http://www.norid.no/regelverk/index.en.html // The Norwegian registry has declined to notify us of updates. The web pages // referenced below are the official source of the data. There is also an // announce mailing list: // https://postlister.uninett.no/sympa/info/norid-diskusjon no // Norid generic domains : http://www.norid.no/regelverk/vedlegg-c.en.html fhs.no vgs.no fylkesbibl.no folkebibl.no museum.no idrett.no priv.no // Non-Norid generic domains : http://www.norid.no/regelverk/vedlegg-d.en.html mil.no stat.no dep.no kommune.no herad.no // no geographical names : http://www.norid.no/regelverk/vedlegg-b.en.html // counties aa.no ah.no bu.no fm.no hl.no hm.no jan-mayen.no mr.no nl.no nt.no of.no ol.no oslo.no rl.no sf.no st.no svalbard.no tm.no tr.no va.no vf.no // primary and lower secondary schools per county gs.aa.no gs.ah.no gs.bu.no gs.fm.no gs.hl.no gs.hm.no gs.jan-mayen.no gs.mr.no gs.nl.no gs.nt.no gs.of.no gs.ol.no gs.oslo.no gs.rl.no gs.sf.no gs.st.no gs.svalbard.no gs.tm.no gs.tr.no gs.va.no gs.vf.no // cities akrehamn.no åkrehamn.no algard.no ålgård.no arna.no brumunddal.no bryne.no bronnoysund.no brønnøysund.no drobak.no drøbak.no egersund.no fetsund.no floro.no florø.no fredrikstad.no hokksund.no honefoss.no hønefoss.no jessheim.no jorpeland.no jørpeland.no kirkenes.no kopervik.no krokstadelva.no langevag.no langevåg.no leirvik.no mjondalen.no mjøndalen.no mo-i-rana.no mosjoen.no mosjøen.no nesoddtangen.no orkanger.no osoyro.no osøyro.no raholt.no råholt.no sandnessjoen.no sandnessjøen.no skedsmokorset.no slattum.no spjelkavik.no stathelle.no stavern.no stjordalshalsen.no stjørdalshalsen.no tananger.no tranby.no vossevangen.no // communities afjord.no åfjord.no agdenes.no al.no ål.no alesund.no ålesund.no alstahaug.no alta.no áltá.no alaheadju.no álaheadju.no alvdal.no amli.no åmli.no amot.no åmot.no andebu.no andoy.no andøy.no andasuolo.no ardal.no årdal.no aremark.no arendal.no ås.no aseral.no åseral.no asker.no askim.no askvoll.no askoy.no askøy.no asnes.no åsnes.no audnedaln.no aukra.no aure.no aurland.no aurskog-holand.no aurskog-høland.no austevoll.no austrheim.no averoy.no averøy.no balestrand.no ballangen.no balat.no bálát.no balsfjord.no bahccavuotna.no báhccavuotna.no bamble.no bardu.no beardu.no beiarn.no bajddar.no bájddar.no baidar.no báidár.no berg.no bergen.no berlevag.no berlevåg.no bearalvahki.no bearalváhki.no bindal.no birkenes.no bjarkoy.no bjarkøy.no bjerkreim.no bjugn.no bodo.no bodø.no badaddja.no bådåddjå.no budejju.no bokn.no bremanger.no bronnoy.no brønnøy.no bygland.no bykle.no barum.no bærum.no bo.telemark.no bø.telemark.no bo.nordland.no bø.nordland.no bievat.no bievát.no bomlo.no bømlo.no batsfjord.no båtsfjord.no bahcavuotna.no báhcavuotna.no dovre.no drammen.no drangedal.no dyroy.no dyrøy.no donna.no dønna.no eid.no eidfjord.no eidsberg.no eidskog.no eidsvoll.no eigersund.no elverum.no enebakk.no engerdal.no etne.no etnedal.no evenes.no evenassi.no evenášši.no evje-og-hornnes.no farsund.no fauske.no fuossko.no fuoisku.no fedje.no fet.no finnoy.no finnøy.no fitjar.no fjaler.no fjell.no flakstad.no flatanger.no flekkefjord.no flesberg.no flora.no fla.no flå.no folldal.no forsand.no fosnes.no frei.no frogn.no froland.no frosta.no frana.no fræna.no froya.no frøya.no fusa.no fyresdal.no forde.no førde.no gamvik.no gangaviika.no gáŋgaviika.no gaular.no gausdal.no gildeskal.no gildeskål.no giske.no gjemnes.no gjerdrum.no gjerstad.no gjesdal.no gjovik.no gjøvik.no gloppen.no gol.no gran.no grane.no granvin.no gratangen.no grimstad.no grong.no kraanghke.no kråanghke.no grue.no gulen.no hadsel.no halden.no halsa.no hamar.no hamaroy.no habmer.no hábmer.no hapmir.no hápmir.no hammerfest.no hammarfeasta.no hámmárfeasta.no haram.no hareid.no harstad.no hasvik.no aknoluokta.no ákŋoluokta.no hattfjelldal.no aarborte.no haugesund.no hemne.no hemnes.no hemsedal.no heroy.more-og-romsdal.no herøy.møre-og-romsdal.no heroy.nordland.no herøy.nordland.no hitra.no hjartdal.no hjelmeland.no hobol.no hobøl.no hof.no hol.no hole.no holmestrand.no holtalen.no holtålen.no hornindal.no horten.no hurdal.no hurum.no hvaler.no hyllestad.no hagebostad.no hægebostad.no hoyanger.no høyanger.no hoylandet.no høylandet.no ha.no hå.no ibestad.no inderoy.no inderøy.no iveland.no jevnaker.no jondal.no jolster.no jølster.no karasjok.no karasjohka.no kárášjohka.no karlsoy.no galsa.no gálsá.no karmoy.no karmøy.no kautokeino.no guovdageaidnu.no klepp.no klabu.no klæbu.no kongsberg.no kongsvinger.no kragero.no kragerø.no kristiansand.no kristiansund.no krodsherad.no krødsherad.no kvalsund.no rahkkeravju.no ráhkkerávju.no kvam.no kvinesdal.no kvinnherad.no kviteseid.no kvitsoy.no kvitsøy.no kvafjord.no kvæfjord.no giehtavuoatna.no kvanangen.no kvænangen.no navuotna.no návuotna.no kafjord.no kåfjord.no gaivuotna.no gáivuotna.no larvik.no lavangen.no lavagis.no loabat.no loabát.no lebesby.no davvesiida.no leikanger.no leirfjord.no leka.no leksvik.no lenvik.no leangaviika.no leaŋgaviika.no lesja.no levanger.no lier.no lierne.no lillehammer.no lillesand.no lindesnes.no lindas.no lindås.no lom.no loppa.no lahppi.no láhppi.no lund.no lunner.no luroy.no lurøy.no luster.no lyngdal.no lyngen.no ivgu.no lardal.no lerdal.no lærdal.no lodingen.no lødingen.no lorenskog.no lørenskog.no loten.no løten.no malvik.no masoy.no måsøy.no muosat.no muosát.no mandal.no marker.no marnardal.no masfjorden.no meland.no meldal.no melhus.no meloy.no meløy.no meraker.no meråker.no moareke.no moåreke.no midsund.no midtre-gauldal.no modalen.no modum.no molde.no moskenes.no moss.no mosvik.no malselv.no målselv.no malatvuopmi.no málatvuopmi.no namdalseid.no aejrie.no namsos.no namsskogan.no naamesjevuemie.no nååmesjevuemie.no laakesvuemie.no nannestad.no narvik.no narviika.no naustdal.no nedre-eiker.no nes.akershus.no nes.buskerud.no nesna.no nesodden.no nesseby.no unjarga.no unjárga.no nesset.no nissedal.no nittedal.no nord-aurdal.no nord-fron.no nord-odal.no norddal.no nordkapp.no davvenjarga.no davvenjárga.no nordre-land.no nordreisa.no raisa.no ráisa.no nore-og-uvdal.no notodden.no naroy.no nærøy.no notteroy.no nøtterøy.no odda.no oksnes.no øksnes.no oppdal.no oppegard.no oppegård.no orkdal.no orland.no ørland.no orskog.no ørskog.no orsta.no ørsta.no os.hedmark.no os.hordaland.no osen.no osteroy.no osterøy.no ostre-toten.no østre-toten.no overhalla.no ovre-eiker.no øvre-eiker.no oyer.no øyer.no oygarden.no øygarden.no oystre-slidre.no øystre-slidre.no porsanger.no porsangu.no porsáŋgu.no porsgrunn.no radoy.no radøy.no rakkestad.no rana.no ruovat.no randaberg.no rauma.no rendalen.no rennebu.no rennesoy.no rennesøy.no rindal.no ringebu.no ringerike.no ringsaker.no rissa.no risor.no risør.no roan.no rollag.no rygge.no ralingen.no rælingen.no rodoy.no rødøy.no romskog.no rømskog.no roros.no røros.no rost.no røst.no royken.no røyken.no royrvik.no røyrvik.no rade.no råde.no salangen.no siellak.no saltdal.no salat.no sálát.no sálat.no samnanger.no sande.more-og-romsdal.no sande.møre-og-romsdal.no sande.vestfold.no sandefjord.no sandnes.no sandoy.no sandøy.no sarpsborg.no sauda.no sauherad.no sel.no selbu.no selje.no seljord.no sigdal.no siljan.no sirdal.no skaun.no skedsmo.no ski.no skien.no skiptvet.no skjervoy.no skjervøy.no skierva.no skiervá.no skjak.no skjåk.no skodje.no skanland.no skånland.no skanit.no skánit.no smola.no smøla.no snillfjord.no snasa.no snåsa.no snoasa.no snaase.no snåase.no sogndal.no sokndal.no sola.no solund.no songdalen.no sortland.no spydeberg.no stange.no stavanger.no steigen.no steinkjer.no stjordal.no stjørdal.no stokke.no stor-elvdal.no stord.no stordal.no storfjord.no omasvuotna.no strand.no stranda.no stryn.no sula.no suldal.no sund.no sunndal.no surnadal.no sveio.no svelvik.no sykkylven.no sogne.no søgne.no somna.no sømna.no sondre-land.no søndre-land.no sor-aurdal.no sør-aurdal.no sor-fron.no sør-fron.no sor-odal.no sør-odal.no sor-varanger.no sør-varanger.no matta-varjjat.no mátta-várjjat.no sorfold.no sørfold.no sorreisa.no sørreisa.no sorum.no sørum.no tana.no deatnu.no time.no tingvoll.no tinn.no tjeldsund.no dielddanuorri.no tjome.no tjøme.no tokke.no tolga.no torsken.no tranoy.no tranøy.no tromso.no tromsø.no tromsa.no romsa.no trondheim.no troandin.no trysil.no trana.no træna.no trogstad.no trøgstad.no tvedestrand.no tydal.no tynset.no tysfjord.no divtasvuodna.no divttasvuotna.no tysnes.no tysvar.no tysvær.no tonsberg.no tønsberg.no ullensaker.no ullensvang.no ulvik.no utsira.no vadso.no vadsø.no cahcesuolo.no čáhcesuolo.no vaksdal.no valle.no vang.no vanylven.no vardo.no vardø.no varggat.no várggát.no vefsn.no vaapste.no vega.no vegarshei.no vegårshei.no vennesla.no verdal.no verran.no vestby.no vestnes.no vestre-slidre.no vestre-toten.no vestvagoy.no vestvågøy.no vevelstad.no vik.no vikna.no vindafjord.no volda.no voss.no varoy.no værøy.no vagan.no vågan.no voagat.no vagsoy.no vågsøy.no vaga.no vågå.no valer.ostfold.no våler.østfold.no valer.hedmark.no våler.hedmark.no // np : http://www.mos.com.np/register.html *.np // nr : http://cenpac.net.nr/dns/index.html // Confirmed by registry 2008-06-17 nr biz.nr info.nr gov.nr edu.nr org.nr net.nr com.nr // nu : http://en.wikipedia.org/wiki/.nu nu // nz : http://en.wikipedia.org/wiki/.nz *.nz // om : http://en.wikipedia.org/wiki/.om om co.om com.om edu.om gov.om med.om museum.om net.om org.om pro.om // org : http://en.wikipedia.org/wiki/.org org // pa : http://www.nic.pa/ // Some additional second level "domains" resolve directly as hostnames, such as // pannet.pa, so we add a rule for "pa". pa ac.pa gob.pa com.pa org.pa sld.pa edu.pa net.pa ing.pa abo.pa med.pa nom.pa // pe : https://www.nic.pe/InformeFinalComision.pdf pe edu.pe gob.pe nom.pe mil.pe org.pe com.pe net.pe // pf : http://www.gobin.info/domainname/formulaire-pf.pdf pf com.pf org.pf edu.pf // pg : http://en.wikipedia.org/wiki/.pg *.pg // ph : http://www.domains.ph/FAQ2.asp // Submitted by registry 2008-06-13 ph com.ph net.ph org.ph gov.ph edu.ph ngo.ph mil.ph i.ph // pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK pk com.pk net.pk edu.pk org.pk fam.pk biz.pk web.pk gov.pk gob.pk gok.pk gon.pk gop.pk gos.pk info.pk // pl : http://www.dns.pl/english/ pl // NASK functional domains (nask.pl / dns.pl) : http://www.dns.pl/english/dns-funk.html aid.pl agro.pl atm.pl auto.pl biz.pl com.pl edu.pl gmina.pl gsm.pl info.pl mail.pl miasta.pl media.pl mil.pl net.pl nieruchomosci.pl nom.pl org.pl pc.pl powiat.pl priv.pl realestate.pl rel.pl sex.pl shop.pl sklep.pl sos.pl szkola.pl targi.pl tm.pl tourism.pl travel.pl turystyka.pl // ICM functional domains (icm.edu.pl) 6bone.pl art.pl mbone.pl // Government domains (administred by ippt.gov.pl) gov.pl uw.gov.pl um.gov.pl ug.gov.pl upow.gov.pl starostwo.gov.pl so.gov.pl sr.gov.pl po.gov.pl pa.gov.pl // other functional domains ngo.pl irc.pl usenet.pl // NASK geographical domains : http://www.dns.pl/english/dns-regiony.html augustow.pl babia-gora.pl bedzin.pl beskidy.pl bialowieza.pl bialystok.pl bielawa.pl bieszczady.pl boleslawiec.pl bydgoszcz.pl bytom.pl cieszyn.pl czeladz.pl czest.pl dlugoleka.pl elblag.pl elk.pl glogow.pl gniezno.pl gorlice.pl grajewo.pl ilawa.pl jaworzno.pl jelenia-gora.pl jgora.pl kalisz.pl kazimierz-dolny.pl karpacz.pl kartuzy.pl kaszuby.pl katowice.pl kepno.pl ketrzyn.pl klodzko.pl kobierzyce.pl kolobrzeg.pl konin.pl konskowola.pl kutno.pl lapy.pl lebork.pl legnica.pl lezajsk.pl limanowa.pl lomza.pl lowicz.pl lubin.pl lukow.pl malbork.pl malopolska.pl mazowsze.pl mazury.pl mielec.pl mielno.pl mragowo.pl naklo.pl nowaruda.pl nysa.pl olawa.pl olecko.pl olkusz.pl olsztyn.pl opoczno.pl opole.pl ostroda.pl ostroleka.pl ostrowiec.pl ostrowwlkp.pl pila.pl pisz.pl podhale.pl podlasie.pl polkowice.pl pomorze.pl pomorskie.pl prochowice.pl pruszkow.pl przeworsk.pl pulawy.pl radom.pl rawa-maz.pl rybnik.pl rzeszow.pl sanok.pl sejny.pl siedlce.pl slask.pl slupsk.pl sosnowiec.pl stalowa-wola.pl skoczow.pl starachowice.pl stargard.pl suwalki.pl swidnica.pl swiebodzin.pl swinoujscie.pl szczecin.pl szczytno.pl tarnobrzeg.pl tgory.pl turek.pl tychy.pl ustka.pl walbrzych.pl warmia.pl warszawa.pl waw.pl wegrow.pl wielun.pl wlocl.pl wloclawek.pl wodzislaw.pl wolomin.pl wroclaw.pl zachpomor.pl zagan.pl zarow.pl zgora.pl zgorzelec.pl // TASK geographical domains (www.task.gda.pl/uslugi/dns) gda.pl gdansk.pl gdynia.pl med.pl sopot.pl // other geographical domains gliwice.pl krakow.pl poznan.pl wroc.pl zakopane.pl // pm : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf pm // pn : http://www.government.pn/PnRegistry/policies.htm pn gov.pn co.pn org.pn edu.pn net.pn // post : http://en.wikipedia.org/wiki/.post post // pr : http://www.nic.pr/index.asp?f=1 pr com.pr net.pr org.pr gov.pr edu.pr isla.pr pro.pr biz.pr info.pr name.pr // these aren't mentioned on nic.pr, but on http://en.wikipedia.org/wiki/.pr est.pr prof.pr ac.pr // pro : http://www.nic.pro/support_faq.htm pro aca.pro bar.pro cpa.pro jur.pro law.pro med.pro eng.pro // ps : http://en.wikipedia.org/wiki/.ps // http://www.nic.ps/registration/policy.html#reg ps edu.ps gov.ps sec.ps plo.ps com.ps org.ps net.ps // pt : http://online.dns.pt/dns/start_dns pt net.pt gov.pt org.pt edu.pt int.pt publ.pt com.pt nome.pt // pw : http://en.wikipedia.org/wiki/.pw pw co.pw ne.pw or.pw ed.pw go.pw belau.pw // py : http://www.nic.py/pautas.html#seccion_9 // Confirmed by registry 2012-10-03 py com.py coop.py edu.py gov.py mil.py net.py org.py // qa : http://domains.qa/en/ qa com.qa edu.qa gov.qa mil.qa name.qa net.qa org.qa sch.qa // re : http://www.afnic.re/obtenir/chartes/nommage-re/annexe-descriptifs re com.re asso.re nom.re // ro : http://www.rotld.ro/ ro com.ro org.ro tm.ro nt.ro nom.ro info.ro rec.ro arts.ro firm.ro store.ro www.ro // rs : http://en.wikipedia.org/wiki/.rs rs co.rs org.rs edu.rs ac.rs gov.rs in.rs // ru : http://www.cctld.ru/ru/docs/aktiv_8.php // Industry domains ru ac.ru com.ru edu.ru int.ru net.ru org.ru pp.ru // Geographical domains adygeya.ru altai.ru amur.ru arkhangelsk.ru astrakhan.ru bashkiria.ru belgorod.ru bir.ru bryansk.ru buryatia.ru cbg.ru chel.ru chelyabinsk.ru chita.ru chukotka.ru chuvashia.ru dagestan.ru dudinka.ru e-burg.ru grozny.ru irkutsk.ru ivanovo.ru izhevsk.ru jar.ru joshkar-ola.ru kalmykia.ru kaluga.ru kamchatka.ru karelia.ru kazan.ru kchr.ru kemerovo.ru khabarovsk.ru khakassia.ru khv.ru kirov.ru koenig.ru komi.ru kostroma.ru krasnoyarsk.ru kuban.ru kurgan.ru kursk.ru lipetsk.ru magadan.ru mari.ru mari-el.ru marine.ru mordovia.ru mosreg.ru msk.ru murmansk.ru nalchik.ru nnov.ru nov.ru novosibirsk.ru nsk.ru omsk.ru orenburg.ru oryol.ru palana.ru penza.ru perm.ru pskov.ru ptz.ru rnd.ru ryazan.ru sakhalin.ru samara.ru saratov.ru simbirsk.ru smolensk.ru spb.ru stavropol.ru stv.ru surgut.ru tambov.ru tatarstan.ru tom.ru tomsk.ru tsaritsyn.ru tsk.ru tula.ru tuva.ru tver.ru tyumen.ru udm.ru udmurtia.ru ulan-ude.ru vladikavkaz.ru vladimir.ru vladivostok.ru volgograd.ru vologda.ru voronezh.ru vrn.ru vyatka.ru yakutia.ru yamal.ru yaroslavl.ru yekaterinburg.ru yuzhno-sakhalinsk.ru // More geographical domains amursk.ru baikal.ru cmw.ru fareast.ru jamal.ru kms.ru k-uralsk.ru kustanai.ru kuzbass.ru magnitka.ru mytis.ru nakhodka.ru nkz.ru norilsk.ru oskol.ru pyatigorsk.ru rubtsovsk.ru snz.ru syzran.ru vdonsk.ru zgrad.ru // State domains gov.ru mil.ru // Technical domains test.ru // rw : http://www.nic.rw/cgi-bin/policy.pl rw gov.rw net.rw edu.rw ac.rw com.rw co.rw int.rw mil.rw gouv.rw // sa : http://www.nic.net.sa/ sa com.sa net.sa org.sa gov.sa med.sa pub.sa edu.sa sch.sa // sb : http://www.sbnic.net.sb/ // Submitted by registry 2008-06-08 sb com.sb edu.sb gov.sb net.sb org.sb // sc : http://www.nic.sc/ sc com.sc gov.sc net.sc org.sc edu.sc // sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm // Submitted by registry 2008-06-17 sd com.sd net.sd org.sd edu.sd med.sd tv.sd gov.sd info.sd // se : http://en.wikipedia.org/wiki/.se // Submitted by registry 2008-06-24 se a.se ac.se b.se bd.se brand.se c.se d.se e.se f.se fh.se fhsk.se fhv.se g.se h.se i.se k.se komforb.se kommunalforbund.se komvux.se l.se lanbib.se m.se n.se naturbruksgymn.se o.se org.se p.se parti.se pp.se press.se r.se s.se sshn.se t.se tm.se u.se w.se x.se y.se z.se // sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines sg com.sg net.sg org.sg gov.sg edu.sg per.sg // sh : http://www.nic.sh/registrar.html sh com.sh net.sh gov.sh org.sh mil.sh // si : http://en.wikipedia.org/wiki/.si si // sj : No registrations at this time. // Submitted by registry 2008-06-16 sj // sk : http://en.wikipedia.org/wiki/.sk // list of 2nd level domains ? sk // sl : http://www.nic.sl // Submitted by registry 2008-06-12 sl com.sl net.sl edu.sl gov.sl org.sl // sm : http://en.wikipedia.org/wiki/.sm sm // sn : http://en.wikipedia.org/wiki/.sn sn art.sn com.sn edu.sn gouv.sn org.sn perso.sn univ.sn // so : http://www.soregistry.com/ so com.so net.so org.so // sr : http://en.wikipedia.org/wiki/.sr sr // st : http://www.nic.st/html/policyrules/ st co.st com.st consulado.st edu.st embaixada.st gov.st mil.st net.st org.st principe.st saotome.st store.st // su : http://en.wikipedia.org/wiki/.su su // sv : http://www.svnet.org.sv/niveldos.pdf sv com.sv edu.sv gob.sv org.sv red.sv // sx : http://en.wikipedia.org/wiki/.sx // Confirmed by registry 2012-05-31 sx gov.sx // sy : http://en.wikipedia.org/wiki/.sy // see also: http://www.gobin.info/domainname/sy.doc sy edu.sy gov.sy net.sy mil.sy com.sy org.sy // sz : http://en.wikipedia.org/wiki/.sz // http://www.sispa.org.sz/ sz co.sz ac.sz org.sz // tc : http://en.wikipedia.org/wiki/.tc tc // td : http://en.wikipedia.org/wiki/.td td // tel: http://en.wikipedia.org/wiki/.tel // http://www.telnic.org/ tel // tf : http://en.wikipedia.org/wiki/.tf tf // tg : http://en.wikipedia.org/wiki/.tg // http://www.nic.tg/ tg // th : http://en.wikipedia.org/wiki/.th // Submitted by registry 2008-06-17 th ac.th co.th go.th in.th mi.th net.th or.th // tj : http://www.nic.tj/policy.html tj ac.tj biz.tj co.tj com.tj edu.tj go.tj gov.tj int.tj mil.tj name.tj net.tj nic.tj org.tj test.tj web.tj // tk : http://en.wikipedia.org/wiki/.tk tk // tl : http://en.wikipedia.org/wiki/.tl tl gov.tl // tm : http://www.nic.tm/local.html tm com.tm co.tm org.tm net.tm nom.tm gov.tm mil.tm edu.tm // tn : http://en.wikipedia.org/wiki/.tn // http://whois.ati.tn/ tn com.tn ens.tn fin.tn gov.tn ind.tn intl.tn nat.tn net.tn org.tn info.tn perso.tn tourism.tn edunet.tn rnrt.tn rns.tn rnu.tn mincom.tn agrinet.tn defense.tn turen.tn // to : http://en.wikipedia.org/wiki/.to // Submitted by registry 2008-06-17 to com.to gov.to net.to org.to edu.to mil.to // tp : No registrations at this time. // Submitted by Ryan Sleevi 2014-01-03 tp // tr : http://en.wikipedia.org/wiki/.tr *.tr !nic.tr // Used by government in the TRNC // http://en.wikipedia.org/wiki/.nc.tr gov.nc.tr // travel : http://en.wikipedia.org/wiki/.travel travel // tt : http://www.nic.tt/ tt co.tt com.tt org.tt net.tt biz.tt info.tt pro.tt int.tt coop.tt jobs.tt mobi.tt travel.tt museum.tt aero.tt name.tt gov.tt edu.tt // tv : http://en.wikipedia.org/wiki/.tv // Not listing any 2LDs as reserved since none seem to exist in practice, // Wikipedia notwithstanding. tv // tw : http://en.wikipedia.org/wiki/.tw tw edu.tw gov.tw mil.tw com.tw net.tw org.tw idv.tw game.tw ebiz.tw club.tw 網路.tw 組織.tw 商業.tw // tz : http://www.tznic.or.tz/index.php/domains // Confirmed by registry 2013-01-22 tz ac.tz co.tz go.tz hotel.tz info.tz me.tz mil.tz mobi.tz ne.tz or.tz sc.tz tv.tz // ua : https://hostmaster.ua/policy/?ua // Submitted by registry 2012-04-27 ua // ua 2LD com.ua edu.ua gov.ua in.ua net.ua org.ua // ua geographic names // https://hostmaster.ua/2ld/ cherkassy.ua cherkasy.ua chernigov.ua chernihiv.ua chernivtsi.ua chernovtsy.ua ck.ua cn.ua cr.ua crimea.ua cv.ua dn.ua dnepropetrovsk.ua dnipropetrovsk.ua dominic.ua donetsk.ua dp.ua if.ua ivano-frankivsk.ua kh.ua kharkiv.ua kharkov.ua kherson.ua khmelnitskiy.ua khmelnytskyi.ua kiev.ua kirovograd.ua km.ua kr.ua krym.ua ks.ua kv.ua kyiv.ua lg.ua lt.ua lugansk.ua lutsk.ua lv.ua lviv.ua mk.ua mykolaiv.ua nikolaev.ua od.ua odesa.ua odessa.ua pl.ua poltava.ua rivne.ua rovno.ua rv.ua sb.ua sebastopol.ua sevastopol.ua sm.ua sumy.ua te.ua ternopil.ua uz.ua uzhgorod.ua vinnica.ua vinnytsia.ua vn.ua volyn.ua yalta.ua zaporizhzhe.ua zaporizhzhia.ua zhitomir.ua zhytomyr.ua zp.ua zt.ua // Private registries in .ua co.ua pp.ua // ug : https://www.registry.co.ug/ ug co.ug or.ug ac.ug sc.ug go.ug ne.ug com.ug org.ug // uk : http://en.wikipedia.org/wiki/.uk // Submitted by registry 2012-10-02 // and tweaked by us pending further consultation. *.uk *.sch.uk !bl.uk !british-library.uk !jet.uk !mod.uk !national-library-scotland.uk !nel.uk !nic.uk !nls.uk !parliament.uk // us : http://en.wikipedia.org/wiki/.us us dni.us fed.us isa.us kids.us nsn.us // us geographic names ak.us al.us ar.us as.us az.us ca.us co.us ct.us dc.us de.us fl.us ga.us gu.us hi.us ia.us id.us il.us in.us ks.us ky.us la.us ma.us md.us me.us mi.us mn.us mo.us ms.us mt.us nc.us nd.us ne.us nh.us nj.us nm.us nv.us ny.us oh.us ok.us or.us pa.us pr.us ri.us sc.us sd.us tn.us tx.us ut.us vi.us vt.us va.us wa.us wi.us wv.us wy.us // The registrar notes several more specific domains available in each state, // such as state.*.us, dst.*.us, etc., but resolution of these is somewhat // haphazard; in some states these domains resolve as addresses, while in others // only subdomains are available, or even nothing at all. We include the // most common ones where it's clear that different sites are different // entities. k12.ak.us k12.al.us k12.ar.us k12.as.us k12.az.us k12.ca.us k12.co.us k12.ct.us k12.dc.us k12.de.us k12.fl.us k12.ga.us k12.gu.us // k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login k12.ia.us k12.id.us k12.il.us k12.in.us k12.ks.us k12.ky.us k12.la.us k12.ma.us k12.md.us k12.me.us k12.mi.us k12.mn.us k12.mo.us k12.ms.us k12.mt.us k12.nc.us k12.nd.us k12.ne.us k12.nh.us k12.nj.us k12.nm.us k12.nv.us k12.ny.us k12.oh.us k12.ok.us k12.or.us k12.pa.us k12.pr.us k12.ri.us k12.sc.us // k12.sd.us Bug 934131 - Removed at request of James Booze k12.tn.us k12.tx.us k12.ut.us k12.vi.us k12.vt.us k12.va.us k12.wa.us k12.wi.us // k12.wv.us Bug 947705 - Removed at request of Verne Britton k12.wy.us cc.ak.us cc.al.us cc.ar.us cc.as.us cc.az.us cc.ca.us cc.co.us cc.ct.us cc.dc.us cc.de.us cc.fl.us cc.ga.us cc.gu.us cc.hi.us cc.ia.us cc.id.us cc.il.us cc.in.us cc.ks.us cc.ky.us cc.la.us cc.ma.us cc.md.us cc.me.us cc.mi.us cc.mn.us cc.mo.us cc.ms.us cc.mt.us cc.nc.us cc.nd.us cc.ne.us cc.nh.us cc.nj.us cc.nm.us cc.nv.us cc.ny.us cc.oh.us cc.ok.us cc.or.us cc.pa.us cc.pr.us cc.ri.us cc.sc.us cc.sd.us cc.tn.us cc.tx.us cc.ut.us cc.vi.us cc.vt.us cc.va.us cc.wa.us cc.wi.us cc.wv.us cc.wy.us lib.ak.us lib.al.us lib.ar.us lib.as.us lib.az.us lib.ca.us lib.co.us lib.ct.us lib.dc.us lib.de.us lib.fl.us lib.ga.us lib.gu.us lib.hi.us lib.ia.us lib.id.us lib.il.us lib.in.us lib.ks.us lib.ky.us lib.la.us lib.ma.us lib.md.us lib.me.us lib.mi.us lib.mn.us lib.mo.us lib.ms.us lib.mt.us lib.nc.us lib.nd.us lib.ne.us lib.nh.us lib.nj.us lib.nm.us lib.nv.us lib.ny.us lib.oh.us lib.ok.us lib.or.us lib.pa.us lib.pr.us lib.ri.us lib.sc.us lib.sd.us lib.tn.us lib.tx.us lib.ut.us lib.vi.us lib.vt.us lib.va.us lib.wa.us lib.wi.us // lib.wv.us Bug 941670 - Removed at request of Larry W Arnold lib.wy.us // k12.ma.us contains school districts in Massachusetts. The 4LDs are // managed indepedently except for private (PVT), charter (CHTR) and // parochial (PAROCH) schools. Those are delegated dorectly to the // 5LD operators. pvt.k12.ma.us chtr.k12.ma.us paroch.k12.ma.us // uy : http://www.nic.org.uy/ uy com.uy edu.uy gub.uy mil.uy net.uy org.uy // uz : http://www.reg.uz/ uz co.uz com.uz net.uz org.uz // va : http://en.wikipedia.org/wiki/.va va // vc : http://en.wikipedia.org/wiki/.vc // Submitted by registry 2008-06-13 vc com.vc net.vc org.vc gov.vc mil.vc edu.vc // ve : https://registro.nic.ve/ // Confirmed by registry 2012-10-04 ve co.ve com.ve e12.ve edu.ve gov.ve info.ve mil.ve net.ve org.ve web.ve // vg : http://en.wikipedia.org/wiki/.vg vg // vi : http://www.nic.vi/newdomainform.htm // http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other // TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they // are available for registration (which they do not seem to be). vi co.vi com.vi k12.vi net.vi org.vi // vn : https://www.dot.vn/vnnic/vnnic/domainregistration.jsp vn com.vn net.vn org.vn edu.vn gov.vn int.vn ac.vn biz.vn info.vn name.vn pro.vn health.vn // vu : http://en.wikipedia.org/wiki/.vu // list of 2nd level tlds ? vu // wf : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf wf // ws : http://en.wikipedia.org/wiki/.ws // http://samoanic.ws/index.dhtml ws com.ws net.ws org.ws gov.ws edu.ws // yt : http://www.afnic.fr/medias/documents/AFNIC-naming-policy2012.pdf yt // IDN ccTLDs // Please sort by ISO 3166 ccTLD, then punicode string // when submitting patches and follow this format: // ("" ) : // [optional sponsoring org] // // xn--mgbaam7a8h ("Emerat" Arabic) : AE // http://nic.ae/english/arabicdomain/rules.jsp امارات // xn--54b7fta0cc ("Bangla" Bangla) : BD বাংলা // xn--fiqs8s ("China" Chinese-Han-Simplified <.Zhonggou>) : CN // CNNIC // http://cnnic.cn/html/Dir/2005/10/11/3218.htm 中国 // xn--fiqz9s ("China" Chinese-Han-Traditional <.Zhonggou>) : CN // CNNIC // http://cnnic.cn/html/Dir/2005/10/11/3218.htm 中國 // xn--lgbbat1ad8j ("Algeria / Al Jazair" Arabic) : DZ الجزائر // xn--wgbh1c ("Egypt" Arabic .masr) : EG // http://www.dotmasr.eg/ مصر // xn--node ("ge" Georgian (Mkhedruli)) : GE გე // xn--j6w193g ("Hong Kong" Chinese-Han) : HK // https://www2.hkirc.hk/register/rules.jsp 香港 // xn--h2brj9c ("Bharat" Devanagari) : IN // India भारत // xn--mgbbh1a71e ("Bharat" Arabic) : IN // India بھارت // xn--fpcrj9c3d ("Bharat" Telugu) : IN // India భారత్ // xn--gecrj9c ("Bharat" Gujarati) : IN // India ભારત // xn--s9brj9c ("Bharat" Gurmukhi) : IN // India ਭਾਰਤ // xn--45brj9c ("Bharat" Bengali) : IN // India ভারত // xn--xkc2dl3a5ee0h ("India" Tamil) : IN // India இந்தியா // xn--mgba3a4f16a ("Iran" Persian) : IR ایران // xn--mgba3a4fra ("Iran" Arabic) : IR ايران // xn--mgbayh7gpa ("al-Ordon" Arabic) : JO // National Information Technology Center (NITC) // Royal Scientific Society, Al-Jubeiha الاردن // xn--3e0b707e ("Republic of Korea" Hangul) : KR 한국 // xn--80ao21a ("Kaz" Kazakh) : KZ қаз // xn--fzc2c9e2c ("Lanka" Sinhalese-Sinhala) : LK // http://nic.lk ලංකා // xn--xkc2al3hye2a ("Ilangai" Tamil) : LK // http://nic.lk இலங்கை // xn--mgbc0a9azcg ("Morocco / al-Maghrib" Arabic) : MA المغرب // xn--l1acc ("mon" Mongolian) : MN мон // xn--mgbx4cd0ab ("Malaysia" Malay) : MY مليسيا // xn--mgb9awbf ("Oman" Arabic) : OM عمان // xn--ygbi2ammx ("Falasteen" Arabic) : PS // The Palestinian National Internet Naming Authority (PNINA) // http://www.pnina.ps فلسطين // xn--90a3ac ("srb" Cyrillic) : RS срб // xn--p1ai ("rf" Russian-Cyrillic) : RU // http://www.cctld.ru/en/docs/rulesrf.php рф // xn--wgbl6a ("Qatar" Arabic) : QA // http://www.ict.gov.qa/ قطر // xn--mgberp4a5d4ar ("AlSaudiah" Arabic) : SA // http://www.nic.net.sa/ السعودية // xn--mgberp4a5d4a87g ("AlSaudiah" Arabic) variant : SA السعودیة // xn--mgbqly7c0a67fbc ("AlSaudiah" Arabic) variant : SA السعودیۃ // xn--mgbqly7cvafr ("AlSaudiah" Arabic) variant : SA السعوديه // xn--ogbpf8fl ("Syria" Arabic) : SY سورية // xn--mgbtf8fl ("Syria" Arabic) variant : SY سوريا // xn--yfro4i67o Singapore ("Singapore" Chinese-Han) : SG 新加坡 // xn--clchc0ea0b2g2a9gcd ("Singapore" Tamil) : SG சிங்கப்பூர் // xn--o3cw4h ("Thai" Thai) : TH // http://www.thnic.co.th ไทย // xn--pgbs0dh ("Tunis") : TN // http://nic.tn تونس // xn--kpry57d ("Taiwan" Chinese-Han-Traditional) : TW // http://www.twnic.net/english/dn/dn_07a.htm 台灣 // xn--kprw13d ("Taiwan" Chinese-Han-Simplified) : TW // http://www.twnic.net/english/dn/dn_07a.htm 台湾 // xn--nnx388a ("Taiwan") variant : TW 臺灣 // xn--j1amh ("ukr" Cyrillic) : UA укр // xn--mgb2ddes ("AlYemen" Arabic) : YE اليمن // xxx : http://icmregistry.com xxx // ye : http://www.y.net.ye/services/domain_name.htm *.ye // za : http://www.zadna.org.za/slds.html *.za // zm : http://en.wikipedia.org/wiki/.zm *.zm // zw : http://en.wikipedia.org/wiki/.zw *.zw // xn--80asehdb : 2013-07-14 CORE Association онлайн // xn--80aswg : 2013-07-14 CORE Association сайт // xn--ngbc5azd : 2013-07-14 International Domain Registry Pty. Ltd. شبكة // xn--unup4y : 2013-07-14 Spring Fields, LLC 游戏 // xn--vhquv : 2013-08-28 Dash McCook, LLC 企业 // camera : 2013-08-28 Atomic Maple, LLC camera // clothing : 2013-08-28 Steel Lake, LLC clothing // lighting : 2013-08-28 John McCook, LLC lighting // singles : 2013-08-28 Fern Madison, LLC singles // ventures : 2013-08-28 Binky Lake, LLC ventures // voyage : 2013-08-28 Ruby House, LLC voyage // guru : 2013-08-28 Pioneer Cypress, LLC guru // holdings : 2013-08-28 John Madison, LLC holdings // equipment : 2013-08-28 Corn Station, LLC equipment // bike : 2013-08-28 Grand Hollow, LLC bike // estate : 2013-08-28 Trixy Park, LLC estate // tattoo : 2013-08-30 Uniregistry,Corp. tattoo // xn--3ds443g : 2013-09-09 TLD Registry Limited 在线 // xn--fiq228c5hs : 2013-09-09 TLD Registry Limited 中文网 // land : 2013-09-10 Pine Moon, LLC land // plumbing : 2013-09-10 Spring Tigers, LLC plumbing // contractors : 2013-09-10 Magic Woods, LLC contractors // sexy : 2013-09-11 Uniregistry,Corp. sexy // menu : 2013-09-11 Wedding TLD2, LLC menu // xn--rhqv96g : 2013-09-11 Stable Tone Limited 世界 // uno : 2013-09-11 Dot Latin, LLC uno // gallery : 2013-09-13 Sugar House, LLC gallery // technology : 2013-09-13 Auburn Falls technology // xn--3bst00m : 2013-09-13 Eagle Horizon Limited 集团 // reviews : 2013-09-13 Extra Cover, LLC reviews // guide : 2013-09-13 Snow Moon, LLC guide // xn--6qq986b3x1 : 2013-09-13 Tycoon Treasure Limited 我爱你 // graphics : 2013-09-13 Over Madison, LLC graphics // construction : 2013-09-13 Fox Dynamite, LLC construction // onl : 2013-09-16 I-Registry Ltd. onl // xn--q9jyb4c : 2013-09-17 Charleston Road Registry みんな // diamonds : 2013-09-23 John Edge, LLC diamonds // kiwi : 2013-09-23 Dot Kiwi Limited kiwi // enterprises : 2013-09-23 Snow Oaks LLC enterprises // today : 2013-09-23 Pearl Woods, LLC today // futbol : 2013-09-23 Atomic Falls, LLC futbol // photography : 2013-09-23 Sugar Glen, LLC photography // tips : 2013-09-23 Corn Willow, LLC tips // directory : 2013-09-23 Extra Madison, LLC directory // kitchen : 2013-09-23 Just Goodbye, LLC kitchen // xn--6frz82g : 2013-09-24 Afilias Limited 移动 // kim : 2013-09-24 Afilias Limited kim // xn--cg4bki : 2013-09-27 Samsung SDS Co., LTD 삼성 // monash : 2013-10-01 Monash University monash // wed : 2013-10-02 Atgron, Inc. wed // pink : 2013-10-02 Afilias Limited pink // ruhr : 2013-10-02 regiodot GmbH & Co. KG ruhr // buzz : 2013-10-03 DOTSTRATEGY CO. buzz // careers : 2013-10-03 Wild Corner, LLC careers // shoes : 2013-10-03 Binky Galley, LLC shoes // xn--4gbrim : 2013-10-07 Suhub Electronic Establishment موقع // career : 2013-10-09 dotCareer, LLC career // otsuka : 2013-10-11 Otsuka Holdings Co. Ltd. otsuka // xn--fiQ64b : 2013-10-14 CITIC Group Corporation 中信 // gift : 2013-10-18 Uniregistry Corp. gift // recipes : 2013-10-18 Grand Island, LLC recipes // coffee : 2013-10-18 Trixy Cover, LLC coffee // luxury : 2013-10-18 Luxury Partners, LLC luxury // domains : 2013-10-18 Sugar Cross, LLC domains // photos : 2013-10-18 Sea Corner, LLC photos // limo : 2013-10-18 Hidden Frostbite, LLC limo // viajes : 2013-10-18 Black Madison, LLC viajes // wang : 2013-10-24 Zodiac Leo Limited wang // democrat : 2013-10-24 United TLD Holdco Ltd. democrat // mango : 2013-10-25 PUNTO FA S.L. mango // cab : 2013-10-25 Half Sunset, LLC cab // support : 2013-10-25 Grand Orchard, LLC support // dance : 2013-10-25 United TLD Holdco Ltd. dance // nagoya : 2013-10-25 GMO Registry, Inc. nagoya // computer : 2013-10-25 Pine Mill, LLC computer // wien : 2013-10-28 punkt.wien GmbH wien // berlin : 2013-10-31 dotBERLIN GmbH & Co. KG berlin // codes : 2013-10-31 Puff Willow, LLC codes // email : 2013-10-31 Spring Madison, LLC email // xn--mgbab2bd : 2013-10-31 CORE Association بازار // repair : 2013-11-07 Lone Sunset, LLC repair // holiday : 2013-11-07 Goose Woods, LLC holiday // center : 2013-11-07 Tin Mill, LLC center // systems : 2013-11-07 Dash Cypress, LLC systems // wiki : 2013-11-07 Top Level Design, LLC wiki // ceo : 2013-11-07 CEOTLD Pty Ltd ceo // international : 2013-11-07 Wild Way, LLC international // solar : 2013-11-07 Ruby Town, LLC solar // company : 2013-11-07 Silver Avenue, LLC company // education : 2013-11-07 Brice Way, LLC education // training : 2013-11-07 Wild Willow, LLC training // academy : 2013-11-07 Half Oaks, LLC academy // marketing : 2013-11-07 Fern Pass, LLC marketing // florist : 2013-11-08 Half Cypress, LLC florist // solutions : 2013-11-07 Silver Cover, LLC solutions // build : 2013-11-07 Plan Bee LLC build // institute : 2013-11-07 Outer Maple, LLC institute // builders : 2013-11-07 Atomic Madison, LLC builders // red : 2013-11-07 Afilias Limited red // blue : 2013-11-07 Afilias Limited blue // ninja : 2013-11-07 United TLD Holdco Ltd. ninja // business : 2013-11-07 Spring Cross, LLC business // gal : 2013-11-07 Asociación puntoGAL gal // social : 2013-11-07 United TLD Holdco Ltd. social // house : 2013-11-07 Sugar Park, LLC house // camp : 2013-11-07 Delta Dynamite, LLC camp // immobilien : 2013-11-07 United TLD Holdco Ltd. immobilien // moda : 2013-11-07 United TLD Holdco Ltd. moda // glass : 2013-11-07 Black Cover, LLC glass // management : 2013-11-07 John Goodbye, LLC management // kaufen : 2013-11-07 United TLD Holdco Ltd. kaufen // farm : 2013-11-07 Just Maple, LLC farm // xn--55qw42g : 2013-11-08 China Organizational Name Administration Center 公益 // xn--zfr164b : 2013-11-08 China Organizational Name Administration Center 政务 // club : 2013-11-08 .CLUB DOMAINS, LLC club // voting : 2013-11-13 Valuetainment Corp. voting // TOKYO : 2013-11-13 GMO Registry, Inc. TOKYO // moe : 2013-11-13 Interlink Co., Ltd. moe // guitars : 2013-11-14 Uniregistry, Corp. guitars // bargains : 2013-11-14 Half Hallow, LLC bargains // xn--nqv7fs00ema : 2013-11-14 Public Interest Registry 组织机构 // desi : 2013-11-14 Desi Networks LLC desi // cool : 2013-11-14 Koko Lake, LLC cool // boutique : 2013-11-14 Over Galley, LLC boutique // pics : 2013-11-14 Uniregistry, Corp. pics // xn--c1avg : 2013-11-14 Public Interest Registry орг // xn--55qx5d : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) 公司 // xn--io0a7i : 2013-11-14 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center) 网络 // cheap : 2013-11-14 Sand Cover, LLC cheap // xn--xhq521b : 2013-11-14 Guangzhou YU Wei Information Technology Co., Ltd. 广东 // photo : 2013-11-14 Uniregistry, Corp. photo // network : 2013-11-14 Trixy Manor, LLC network // zone : 2013-11-14 Outer Falls, LLC zone // xn--nqv7f : 2013-11-14 Public Interest Registry 机构 // link : 2013-11-14 Uniregistry, Corp. link // QPON : 2013-11-14 dotCOOL, Inc. qpon // xn--i1b6b1a6a2e : 2013-11-14 Public Interest Registry संगठन // agency : 2013-11-14 Steel Falls, LLC agency // tienda : 2013-11-14 Victor Manor, LLC tienda // works : 2013-11-14 Little Dynamite, LLC works // london : 2013-11-14 Dot London Domains Limited london // watch : 2013-11-14 Sand Shadow, LLC watch // rocks : 2013-11-14 Ruby Moon, LLC rocks // SHIKSHA : 2013-11-14 Afilias Limited shiksha // xn--d1acj3b : 2013-11-21 The Foundation for Network Initiatives “The Smart Internet” дети // budapest : 2013-11-21 Top Level Domain Holdings Limited budapest // nrw : 2013-11-21 Minds + Machines GmbH nrw // VOTE : 2013-11-21 Monolith Registry LLC vote // fishing : 2013-11-21 Top Level Domain Holdings Limited fishing // expert : 2013-11-21 Magic Pass, LLC expert // horse : 2013-11-21 Top Level Domain Holdings Limited horse // christmas : 2013-11-21 Uniregistry, Corp. christmas // cooking : 2013-11-21 Top Level Domain Holdings Limited cooking // xn--czru2d : 2013-11-21 Zodiac Capricorn Limited 商城 // casa : 2013-11-21 Top Level Domain Holdings Limited casa // rich : 2013-11-21 I-REGISTRY Ltd., Niederlassung Deutschland rich // VOTO : 2013-11-21 Monolith Registry LLC voto // tools : 2013-11-21 Pioneer North, LLC tools // xn--45q11c : 2013-11-21 Zodiac Scorpio Limited 八卦 // praxi : 2013-12-05 Praxi S.p.A. praxi // events : 2013-12-05 Pioneer Maple, LLC events // flights : 2013-12-05 Fox Station, LLC flights // report : 2013-12-05 Binky Glen, LLC report // partners : 2013-12-05 Magic Glen, LLC partners // neustar : 2013-12-05 NeuStar, Inc. neustar // rentals : 2013-12-05 Big Hollow,LLC rentals // catering : 2013-12-05 New Falls. LLC catering // community : 2013-12-05 Fox Orchard, LLC community // maison : 2013-12-05 Victor Frostbite, LLC maison // parts : 2013-12-05 Sea Goodbye, LLC parts // cleaning : 2013-12-05 Fox Shadow, LLC cleaning // okinawa : 2013-12-05 BusinessRalliart inc. okinawa // foundation : 2013-12-05 John Dale, LLC foundation // properties : 2013-12-05 Big Pass, LLC properties // vacations : 2013-12-05 Atomic Tigers, LLC vacations // productions : 2013-12-05 Magic Birch, LLC productions // industries : 2013-12-05 Outer House, LLC industries // haus : 2013-12-05 Pixie Edge, LLC haus // vision : 2013-12-05 Koko Station, LLC vision // mormon : 2013-12-05 IRI Domain Management, LLC (""Applicant"") mormon // cards : 2013-12-05 Foggy Hollow, LLC cards // ink : 2013-12-05 Top Level Design, LLC ink // villas : 2013-12-05 New Sky, LLC villas // consulting : 2013-12-05 Pixie Station, LLC consulting // cruises : 2013-12-05 Spring Way, LLC cruises // krd : 2013-12-05 KRG Department of Information Technology krd // xyz : 2013-12-05 XYZ.COM LLC xyz // dating : 2013-12-05 Pine Fest, LLC dating // exposed : 2013-12-05 Victor Beach, LLC exposed // condos : 2013-12-05 Pine House, LLC condos // eus : 2013-12-12 Puntueus Fundazioa eus // Caravan : 2013-12-12 Caravan International, Inc. caravan // actor : 2013-12-12 United TLD Holdco Ltd. actor // saarland : 2013-12-12 dotSaarland GmbH saarland // yokohama : 2013-12-12 GMO Registry, Inc. yokohama // pub : 2013-12-12 United TLD Holdco Ltd. pub // xn--p1acf : 2013-12-12 Rusnames Limited рус // ren : 2013-12-12 Beijing Qianxiang Wangjing Technology Development Co., Ltd. ren // fish : 2013-12-12 Fox Woods, LLC fish // BAR : 2013-12-12 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable bar // DNP : 2013-12-13 Dai Nippon Printing Co., Ltd. dnp // bid : 2013-12-19 dot Bid Limited bid // supply : 2013-12-19 Half Falls, LLC supply // Miami : 2013-12-19 Top Level Domain Holdings Limited miami // supplies : 2013-12-19 Atomic Fields, LLC supplies // quebec : 2013-12-19 PointQuébec Inc quebec // MOSCOW : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) moscow // globo : 2013-12-19 Globo Comunicação e Participações S.A globo // AXA : 2013-12-19 AXA SA axa // xn--80adxhks : 2013-12-19 Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) москва // xn--czrs0t : 2013-12-19 Wild Island, LLC 商店 // vodka : 2013-12-19 Top Level Domain Holdings Limited vodka // REST : 2013-12-19 Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable rest // frogans : 2013-12-19 OP3FT frogans // WTC : 2013-12-19 World Trade Centers Association, Inc. wtc // rodeo : 2013-12-19 Top Level Domain Holdings Limited rodeo // sohu : 2013-12-19 Sohu.com Limited sohu // BEST : 2013-12-19 BestTLD Pty Ltd best // country : 2013-12-19 Top Level Domain Holdings Limited country // KRED : 2013-12-19 KredTLD Pty Ltd kred // feedback : 2013-12-19 Top Level Spectrum, Inc. feedback // work : 2013-12-19 Top Level Domain Holdings Limited work // luxe : 2014-01-09 Top Level Domain Holdings Limited luxe // ryukyu : 2014-01-09 BusinessRalliart inc. ryukyu // autos : 2014-01-09 DERAutos, LLC autos // homes : 2014-01-09 DERHomes, LLC homes // jetzt : 2014-01-09 New TLD Company AB jetzt // yachts : 2014-01-09 DERYachts, LLC yachts // motorcycles : 2014-01-09 DERMotorcycles, LLC motorcycles // mini : 2014-01-09 Bayerische Motoren Werke Aktiengesellschaft mini // ggee : 2014-01-09 GMO Internet, Inc. ggee // beer : 2014-01-09 Top Level Domain Holdings Limited beer // xn--1qqw23a : 2014-01-13 Guangzhou YU Wei Information Technology Co., Ltd. 佛山 // college : 2014-01-16 XYZ.COM LLC college // ovh : 2014-01-16 OVH SAS ovh // meet : 2014-01-16 Afilias Limited meet // xn--ses554g : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED 网址 // gop : 2014-01-16 Republican State Leadership Committee, Inc. gop // blackfriday : 2014-01-16 Uniregistry, Corp. blackfriday // lacaixa : 2014-01-16 CAIXA D'ESTALVIS I PENSIONS DE BARCELONA lacaixa // xn--czr694b : 2014-01-16 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) COMPANY.HONGKONG LIMITED 商标 // vegas : 2014-01-16 Dot Vegas, Inc. vegas // black : 2014-01-16 Afilias Limited black // ===END ICANN DOMAINS=== // ===BEGIN PRIVATE DOMAINS=== // Amazon CloudFront : https://aws.amazon.com/cloudfront/ // Submitted by Donavan Miller 2013-03-22 cloudfront.net // Amazon Elastic Compute Cloud: https://aws.amazon.com/ec2/ // Submitted by Osman Surkatty 2013-04-02 compute.amazonaws.com us-east-1.amazonaws.com compute-1.amazonaws.com z-1.compute-1.amazonaws.com z-2.compute-1.amazonaws.com ap-northeast-1.compute.amazonaws.com ap-southeast-1.compute.amazonaws.com ap-southeast-2.compute.amazonaws.com eu-west-1.compute.amazonaws.com sa-east-1.compute.amazonaws.com us-gov-west-1.compute.amazonaws.com us-west-1.compute.amazonaws.com us-west-2.compute.amazonaws.com // Amazon Elastic Beanstalk : https://aws.amazon.com/elasticbeanstalk/ // Submitted by Adam Stein 2013-04-02 elasticbeanstalk.com // Amazon Elastic Load Balancing : https://aws.amazon.com/elasticloadbalancing/ // Submitted by Scott Vidmar 2013-03-27 elb.amazonaws.com // Amazon S3 : https://aws.amazon.com/s3/ // Submitted by Courtney Eckhardt 2013-03-22 s3.amazonaws.com s3-us-west-2.amazonaws.com s3-us-west-1.amazonaws.com s3-eu-west-1.amazonaws.com s3-ap-southeast-1.amazonaws.com s3-ap-southeast-2.amazonaws.com s3-ap-northeast-1.amazonaws.com s3-sa-east-1.amazonaws.com s3-us-gov-west-1.amazonaws.com s3-fips-us-gov-west-1.amazonaws.com s3-website-us-east-1.amazonaws.com s3-website-us-west-2.amazonaws.com s3-website-us-west-1.amazonaws.com s3-website-eu-west-1.amazonaws.com s3-website-ap-southeast-1.amazonaws.com s3-website-ap-southeast-2.amazonaws.com s3-website-ap-northeast-1.amazonaws.com s3-website-sa-east-1.amazonaws.com s3-website-us-gov-west-1.amazonaws.com // BetaInABox // Submitted by adrian@betainabox.com 2012-09-13 betainabox.com // CentralNic : http://www.centralnic.com/names/domains // Submitted by registry 2012-09-27 ae.org ar.com br.com cn.com com.de de.com eu.com gb.com gb.net gr.com hu.com hu.net jp.net jpn.com kr.com no.com qc.com ru.com sa.com se.com se.net uk.com uk.net us.com us.org uy.com za.com // c.la : http://www.c.la/ c.la // cloudControl : https://www.cloudcontrol.com/ // Submitted by Tobias Wilken 2013-07-23 cloudcontrolled.com cloudcontrolapp.com // co.ca : http://registry.co.ca/ co.ca // CoDNS B.V. co.nl co.no // Cupcake : https://cupcake.io/ // Submitted by Jonathan Rudenberg 2013-10-08 cupcake.is // DreamHost : http://www.dreamhost.com/ // Submitted by Andrew Farmer 2012-10-02 dreamhosters.com // DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ dyndns-at-home.com dyndns-at-work.com dyndns-blog.com dyndns-free.com dyndns-home.com dyndns-ip.com dyndns-mail.com dyndns-office.com dyndns-pics.com dyndns-remote.com dyndns-server.com dyndns-web.com dyndns-wiki.com dyndns-work.com dyndns.biz dyndns.info dyndns.org dyndns.tv at-band-camp.net ath.cx barrel-of-knowledge.info barrell-of-knowledge.info better-than.tv blogdns.com blogdns.net blogdns.org blogsite.org boldlygoingnowhere.org broke-it.net buyshouses.net cechire.com dnsalias.com dnsalias.net dnsalias.org dnsdojo.com dnsdojo.net dnsdojo.org does-it.net doesntexist.com doesntexist.org dontexist.com dontexist.net dontexist.org doomdns.com doomdns.org dvrdns.org dyn-o-saur.com dynalias.com dynalias.net dynalias.org dynathome.net dyndns.ws endofinternet.net endofinternet.org endoftheinternet.org est-a-la-maison.com est-a-la-masion.com est-le-patron.com est-mon-blogueur.com for-better.biz for-more.biz for-our.info for-some.biz for-the.biz forgot.her.name forgot.his.name from-ak.com from-al.com from-ar.com from-az.net from-ca.com from-co.net from-ct.com from-dc.com from-de.com from-fl.com from-ga.com from-hi.com from-ia.com from-id.com from-il.com from-in.com from-ks.com from-ky.com from-la.net from-ma.com from-md.com from-me.org from-mi.com from-mn.com from-mo.com from-ms.com from-mt.com from-nc.com from-nd.com from-ne.com from-nh.com from-nj.com from-nm.com from-nv.com from-ny.net from-oh.com from-ok.com from-or.com from-pa.com from-pr.com from-ri.com from-sc.com from-sd.com from-tn.com from-tx.com from-ut.com from-va.com from-vt.com from-wa.com from-wi.com from-wv.com from-wy.com ftpaccess.cc fuettertdasnetz.de game-host.org game-server.cc getmyip.com gets-it.net go.dyndns.org gotdns.com gotdns.org groks-the.info groks-this.info ham-radio-op.net here-for-more.info hobby-site.com hobby-site.org home.dyndns.org homedns.org homeftp.net homeftp.org homeip.net homelinux.com homelinux.net homelinux.org homeunix.com homeunix.net homeunix.org iamallama.com in-the-band.net is-a-anarchist.com is-a-blogger.com is-a-bookkeeper.com is-a-bruinsfan.org is-a-bulls-fan.com is-a-candidate.org is-a-caterer.com is-a-celticsfan.org is-a-chef.com is-a-chef.net is-a-chef.org is-a-conservative.com is-a-cpa.com is-a-cubicle-slave.com is-a-democrat.com is-a-designer.com is-a-doctor.com is-a-financialadvisor.com is-a-geek.com is-a-geek.net is-a-geek.org is-a-green.com is-a-guru.com is-a-hard-worker.com is-a-hunter.com is-a-knight.org is-a-landscaper.com is-a-lawyer.com is-a-liberal.com is-a-libertarian.com is-a-linux-user.org is-a-llama.com is-a-musician.com is-a-nascarfan.com is-a-nurse.com is-a-painter.com is-a-patsfan.org is-a-personaltrainer.com is-a-photographer.com is-a-player.com is-a-republican.com is-a-rockstar.com is-a-socialist.com is-a-soxfan.org is-a-student.com is-a-teacher.com is-a-techie.com is-a-therapist.com is-an-accountant.com is-an-actor.com is-an-actress.com is-an-anarchist.com is-an-artist.com is-an-engineer.com is-an-entertainer.com is-by.us is-certified.com is-found.org is-gone.com is-into-anime.com is-into-cars.com is-into-cartoons.com is-into-games.com is-leet.com is-lost.org is-not-certified.com is-saved.org is-slick.com is-uberleet.com is-very-bad.org is-very-evil.org is-very-good.org is-very-nice.org is-very-sweet.org is-with-theband.com isa-geek.com isa-geek.net isa-geek.org isa-hockeynut.com issmarterthanyou.com isteingeek.de istmein.de kicks-ass.net kicks-ass.org knowsitall.info land-4-sale.us lebtimnetz.de leitungsen.de likes-pie.com likescandy.com merseine.nu mine.nu misconfused.org mypets.ws myphotos.cc neat-url.com office-on-the.net on-the-web.tv podzone.net podzone.org readmyblog.org saves-the-whales.com scrapper-site.net scrapping.cc selfip.biz selfip.com selfip.info selfip.net selfip.org sells-for-less.com sells-for-u.com sells-it.net sellsyourhome.org servebbs.com servebbs.net servebbs.org serveftp.net serveftp.org servegame.org shacknet.nu simple-url.com space-to-rent.com stuff-4-sale.org stuff-4-sale.us teaches-yoga.com thruhere.net traeumtgerade.de webhop.biz webhop.info webhop.net webhop.org worse-than.tv writesthisblog.com // Fastly Inc. http://www.fastly.com/ // Submitted by Vladimir Vuksan 2013-05-31 a.ssl.fastly.net b.ssl.fastly.net global.ssl.fastly.net a.prod.fastly.net global.prod.fastly.net // GitHub, Inc. // Submitted by Ben Toews 2013-04-18 github.io // GlobeHosting, Inc. // Submitted by Zoltan Egresi 2013-07-12 ro.com // Google, Inc. // Submitted by Eduardo Vela 2012-10-24 appspot.com blogspot.be blogspot.bj blogspot.ca blogspot.cf blogspot.ch blogspot.co.at blogspot.co.il blogspot.co.nz blogspot.co.uk blogspot.com blogspot.com.ar blogspot.com.au blogspot.com.br blogspot.com.es blogspot.cv blogspot.cz blogspot.de blogspot.dk blogspot.fi blogspot.fr blogspot.gr blogspot.hk blogspot.hu blogspot.ie blogspot.in blogspot.it blogspot.jp blogspot.kr blogspot.mr blogspot.mx blogspot.nl blogspot.no blogspot.pt blogspot.re blogspot.ro blogspot.se blogspot.sg blogspot.sk blogspot.td blogspot.tw codespot.com googleapis.com googlecode.com // Heroku : https://www.heroku.com/ // Submitted by Tom Maher 2013-05-02 herokuapp.com herokussl.com // iki.fi // Submitted by Hannu Aronsson 2009-11-05 iki.fi // info.at : http://www.info.at/ biz.at info.at // Michau Enterprises Limited : http://www.co.pl/ co.pl // NYC.mn : http://www.information.nyc.mn // Submitted by Matthew Brown 2013-03-11 nyc.mn // Opera Software, A.S.A. // Submitted by Yngve Pettersen 2009-11-26 operaunite.com // Red Hat, Inc. OpenShift : https://openshift.redhat.com/ // Submitted by Tim Kramer 2012-10-24 rhcloud.com // priv.at : http://www.nic.priv.at/ // Submitted by registry 2008-06-09 priv.at // ZaNiC : http://www.za.net/ // Submitted by registry 2009-10-03 za.net za.org // ===END PRIVATE DOMAINS=== good.com!example.com!1337270400!1337356799.xml000066400000000000000000017121731416002254500322140ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfiles 126.com abuse@126.com aggr_report_example.com_20120518_126.com 1337270400.0 1337356799.0 example.com r r

reject

reject 100
116.233.121.204 27 reject fail fail example.com example.com fail 216.32.181.183 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value edinburghtc.ac.uk neutral 58.210.249.101 2 none pass fail example.com example.com pass verify result: all signatures verified hengtonggroup.com none 65.55.90.228 3 none pass pass example.com example.com pass verify result: all signatures verified live.com pass hotmail.com pass 65.55.90.229 6 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 222.92.5.93 3 reject fail fail example.com example.com fail 65.55.90.220 9 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.com pass 65.55.90.221 7 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.90.222 4 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.90.223 9 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.90.224 6 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.90.225 3 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.90.226 4 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.90.227 7 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 213.199.154.139 1 reject fail pass example.com example.com neutral sigature verify error: message body does not hash to bh value edinburghtc.ac.uk pass 123.125.50.217 2 none pass fail example.com example.com pass verify result: all signatures verified gdadc.com none dicolor.cn pass 116.236.144.74 3 reject fail fail example.com example.com fail 114.85.115.149 5 reject fail fail example.com example.com fail 98.139.213.126 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 119.254.72.146 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.216.51 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.50 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.53 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.52 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 14.25.101.129 2 reject fail fail example.com example.com fail 121.33.210.22 64 reject fail fail example.com example.com fail 59.50.120.240 19 reject fail fail example.com example.com fail 69.171.232.175 304 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.174 306 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.173 286 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.172 305 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.171 279 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.170 286 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 113.106.199.122 8 reject fail fail example.com example.com fail 113.93.194.50 8 reject fail fail example.com example.com fail 137.43.231.111 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value example.com fail 209.85.215.179 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 199.7.202.29 2 none pass pass em.example.com em.example.com pass verify result: all signatures verified envfrm.rsys5.com pass 209.85.215.176 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 58.39.71.10 9 reject fail fail example.com example.com fail 209.85.215.170 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.215.171 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.215.172 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.180 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 128.84.148.108 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 58.240.185.58 3 reject fail fail example.com example.com fail 209.85.215.50 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 116.212.53.41 6 reject fail fail example.com example.com fail 209.85.215.52 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.215.53 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.215.54 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 211.20.177.5 23 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 183.43.85.215 2 reject fail fail example.com example.com fail 128.135.165.70 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 178.125.232.125 1 reject fail fail example.com example.com fail 113.108.141.10 31 reject fail fail example.com example.com fail 58.251.133.18 3 reject fail fail example.com example.com fail 59.36.102.84 1 none pass pass example.com example.com pass verify result: all signatures verified 21cn.net pass 106.10.151.36 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 220.130.38.191 3 reject fail fail example.com example.com fail 209.85.215.175 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.63 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 209.85.214.171 8 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.170 14 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.173 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.172 13 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.175 15 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.174 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.177 8 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.177 1 reject fail pass example.com example.com neutral sigature verify error: message body does not hash to bh value gmail.com pass 209.85.214.176 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.179 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.178 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.83.49 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.70 5 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 74.125.83.41 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.160.179 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.160.178 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 219.134.86.192 5 reject fail fail example.com example.com fail 74.125.83.46 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 113.108.23.48 5 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.49 3 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 65.54.51.100 8 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 209.85.214.53 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 209.85.214.52 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 209.85.214.51 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 209.85.214.50 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 113.108.23.44 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.45 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.46 4 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.47 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 110.75.178.13 1 none pass pass example.com example.com pass verify result: all signatures verified cddance.cn pass 110.75.178.16 1 none pass pass example.com example.com pass verify result: all signatures verified cddance.cn pass 110.75.178.17 2 none pass pass example.com example.com pass verify result: all signatures verified zhtalent.com pass dovepaint.com.cn pass 110.75.178.14 1 none pass pass example.com example.com pass verify result: all signatures verified cddance.cn pass 220.181.12.76 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 66.220.144.159 2009 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 65.55.111.151 13 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass w.cn none hotmail.com pass 65.55.111.150 16 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.153 17 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.152 13 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.155 12 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.154 17 none pass pass example.com example.com pass verify result: all signatures verified msn.com pass hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.157 13 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.156 13 none pass pass example.com example.com pass verify result: all signatures verified msn.com pass hotmail.de pass hotmail.com pass 65.55.111.159 15 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass live.cn pass hotmail.com pass 65.55.111.158 12 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 129.67.1.161 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value nexus.ox.ac.uk none 220.181.12.69 3 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 66.96.186.3 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.217.181 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.217.180 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 218.189.132.6 6 reject fail fail example.com example.com fail 66.220.155.137 1515 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.136 1524 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 61.145.121.60 2 none pass fail example.com example.com pass verify result: all signatures verified kypom.com none alevel.com.cn none 106.10.148.73 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 74.125.82.42 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.144.152 2126 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 121.15.200.74 5 reject fail fail example.com example.com fail 121.15.200.71 70 reject fail fail example.com example.com fail 66.220.155.139 1242 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.138 1506 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 116.6.95.162 3 reject fail fail example.com example.com fail 209.85.213.49 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.48 10 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 61.135.132.204 1 none pass pass example.com example.com pass verify result: all signatures verified sohu.com pass 209.85.213.45 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.144.157 1989 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 209.85.213.47 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.46 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.41 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.43 8 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified gmail.com pass 209.85.160.47 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 69.171.232.139 3605 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.138 3731 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.138 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 66.220.144.155 2048 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 209.85.160.45 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 69.171.232.137 3383 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.136 3580 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.135 3628 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 106.10.148.92 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 122.178.241.68 1 reject fail fail example.com example.com fail 202.85.51.185 3 reject fail fail example.com example.com fail 106.10.151.212 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 183.63.192.58 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 211.150.64.25 1 none pass fail example.com example.com pass verify result: all signatures verified chinaopen.com.cn none 58.39.145.97 6 reject fail fail example.com example.com fail 74.125.245.82 1 none pass pass example.com example.com pass verify result: all signatures verified brown.edu pass 220.181.12.65 4 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 209.85.160.48 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.160.49 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.160.42 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.160.43 8 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.144.151 2087 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.144.150 2105 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 209.85.160.46 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.144.156 2145 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 209.85.160.44 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.144.154 2061 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 121.197.249.161 1 reject fail fail example.com example.com fail signature error: RSA verify failed gangxing.com.cn none 220.181.12.95 3 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 69.171.232.148 3678 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 218.102.53.104 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 69.171.232.146 3610 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.147 3568 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.144 3589 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 69.171.232.145 3712 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.142 3621 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.143 3615 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 69.171.232.140 3589 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.141 3522 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 58.62.246.233 8 reject fail fail example.com example.com fail 116.7.60.166 8 reject fail fail example.com example.com fail 59.61.170.22 12 reject fail fail example.com example.com fail 112.64.170.138 17 reject fail fail example.com example.com fail 123.58.178.105 1 none pass fail example.com example.com pass verify result: all signatures verified medicalsystem.cn none 113.97.163.65 28 reject fail fail example.com example.com fail 209.85.220.182 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.169 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.13.234 1 reject fail fail example.com tslines.com.cn none 69.171.232.149 3577 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 209.85.213.169 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 123.58.177.170 1 none pass pass example.com example.com pass verify result: all signatures verified vip.163.com pass 121.14.53.131 2 none pass pass example.com example.com pass verify result: all signatures verified 189.cn pass 129.186.140.46 1 none pass fail example.com example.com pass verify result: all signatures verified example.com neutral 58.64.130.198 1 none pass fail example.com example.com pass verify result: all signatures verified server02.site4host.com none 209.85.212.42 9 none pass pass example.com example.com pass verify result: all signatures verified crimson.ua.edu none paxex.com.hk none gmail.com pass 209.85.212.43 6 none pass fail example.com example.com pass verify result: all signatures verified gmail.com pass paxex.com.hk none 209.85.212.41 5 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 209.85.212.46 6 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 209.85.212.47 7 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 209.85.212.44 9 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 209.85.212.45 5 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 209.85.212.48 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.54 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.53 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.52 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.51 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.50 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass aucklanduni.ac.nz pass 58.241.193.59 23 reject fail fail example.com example.com fail 113.91.150.44 3 reject fail fail example.com example.com fail 14.221.178.144 13 reject fail fail example.com example.com fail 119.145.16.60 3 reject fail fail example.com example.com fail 117.195.65.231 1 reject fail fail example.com example.com fail 65.55.90.239 8 none pass pass example.com example.com pass verify result: all signatures verified live.cn pass hotmail.com pass 65.55.90.238 6 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 209.85.160.53 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.55.90.233 10 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.90.232 6 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.90.231 10 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.90.230 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.90.237 4 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.com pass 65.55.90.236 9 none pass pass example.com example.com pass verify result: all signatures verified hotmail.fr pass hotmail.com pass 65.55.90.235 4 none pass pass example.com example.com pass verify result: all signatures verified live.cn pass hotmail.com pass 65.55.90.234 8 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 174.139.84.219 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.216.169 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 98.139.91.203 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 218.22.78.146 6 reject fail fail example.com example.com fail 218.78.214.8 4 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value smmail.cn none 209.85.216.48 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.49 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.46 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.47 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.44 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.45 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.42 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.43 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.41 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 114.113.31.1 1 reject fail fail example.com example.com fail 183.23.239.178 6 reject fail fail example.com example.com fail 113.108.23.40 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 65.55.34.204 16 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.34.204 1 reject fail pass example.com example.com fail signature error: RSA verify failed hotmail.com pass 65.55.34.205 22 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass live.com pass live.cn pass hotmail.com pass 65.55.34.206 18 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.34.207 21 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.34.203 15 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 74.125.82.169 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 216.32.181.184 1 reject fail pass example.com example.com neutral sigature verify error: message body does not hash to bh value connect.polyu.hk pass 65.55.34.208 19 none pass pass example.com example.com pass verify result: all signatures verified hotmail.es none hotmail.it pass hotmail.com pass 65.55.34.209 28 none pass pass example.com example.com pass verify result: all signatures verified msn.com pass hotmail.de pass hotmail.com pass 209.85.215.169 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 221.224.112.124 86 reject fail fail example.com example.com fail 113.78.27.115 71 reject fail fail example.com example.com fail 211.22.166.234 10 reject fail fail example.com example.com fail 219.140.169.51 4 reject fail fail example.com example.com fail 206.65.164.140 1 none pass fail example.com example.com pass verify result: all signatures verified johnnylo.com neutral 66.220.144.162 38 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.163 44 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.160 30 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.161 26 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.166 37 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.167 31 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.164 29 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.165 37 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 168.95.4.112 1 reject fail fail example.com example.com neutral 94.100.176.103 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 94.100.176.102 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.212.49 2 none pass fail example.com example.com pass verify result: all signatures verified gmail.com pass paxex.com.hk none 218.16.141.14 6 reject fail fail example.com example.com fail 209.85.161.182 8 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.144.158 2031 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 209.85.161.181 11 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 130.253.1.61 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.161.180 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 128.196.130.204 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 74.125.83.51 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.54 6 none pass fail example.com example.com pass verify result: all signatures verified identitydesign.com.sg temperror gmail.com pass 65.54.51.91 10 none pass pass example.com example.com pass verify result: all signatures verified hotmail.fr pass hotmail.it pass hotmail.com pass 74.125.82.50 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.51 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.52 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.53 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 201.240.22.94 1 reject fail fail example.com example.com fail 74.125.83.54 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 219.128.49.161 3 reject fail fail example.com example.com fail 141.211.90.68 4 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 120.81.136.10 6 reject fail fail example.com example.com fail 74.125.83.53 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.83.52 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 128.175.1.41 1 reject fail fail example.com example.com fail signature error: RSA verify failed example.com fail 141.211.90.67 3 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.214.44 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 209.85.214.45 9 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 209.85.214.46 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 202.108.3.61 1 none pass pass example.com example.com pass verify result: all signatures verified vip.sina.com pass 209.85.214.41 13 none pass pass example.com example.com pass verify result: all signatures verified plasticmoulds.net none gmail.com pass googlemail.com pass 209.85.214.42 12 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 209.85.214.43 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 59.34.0.98 13 reject fail fail example.com example.com fail 209.85.214.48 8 none pass pass example.com example.com pass verify result: all signatures verified plasticmoulds.net none gmail.com pass googlemail.com pass 209.85.214.49 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 223.5.50.88 1 reject fail fail example.com example.com fail signature error: RSA verify failed championshk.com none 209.85.220.181 1 none pass fail example.com example.com pass verify result: all signatures verified paxex.com.hk none 220.181.12.59 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 219.145.52.191 6 reject fail fail example.com example.com fail 220.181.12.57 3 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 209.85.215.182 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 183.63.218.200 5 reject fail fail example.com example.com fail 220.181.12.51 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 65.55.111.142 20 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.143 14 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.140 17 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.141 20 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass w.cn none hotmail.com pass 65.55.111.146 17 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.147 16 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.144 14 none pass pass example.com example.com pass verify result: all signatures verified hotmail.fr pass hotmail.de pass hotmail.co.uk pass hotmail.com pass 65.55.111.145 2 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 59.121.237.193 9 reject fail fail example.com example.com fail 65.55.111.148 15 none pass pass example.com example.com pass verify result: all signatures verified msn.cn pass hotmail.it pass hotmail.com pass 65.55.111.149 21 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass live.cn pass hotmail.com pass 183.14.174.126 3 reject fail fail example.com example.com fail 209.85.215.51 2 none pass pass example.com example.com pass verify result: all signatures verified brandeis.edu pass gmail.com pass 131.252.111.42 1 none pass fail example.com example.com pass verify result: all signatures verified pdx.edu none 116.12.55.104 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.220.171 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.155.142 1468 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.143 1449 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.140 1204 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.141 1143 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.146 1486 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.147 1524 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.144 1543 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.145 1462 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.148 1305 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.149 1167 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 61.132.120.161 9 reject fail fail example.com example.com fail 202.101.6.180 1 none pass fail example.com example.com pass verify result: all signatures verified mail.dhu.edu.cn none 66.220.144.153 2096 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 175.43.189.210 5 reject fail fail example.com example.com fail 209.85.213.54 4 none pass pass example.com example.com pass verify result: all signatures verified lhe.hk none gmail.com pass 209.85.213.52 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.53 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 221.176.9.68 9 none pass pass example.com example.com pass verify result: all signatures verified 139.com pass 209.85.213.51 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 112.91.72.161 1 reject fail fail example.com example.com fail 106.10.148.183 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 216.32.181.182 1 reject fail pass example.com example.com neutral sigature verify error: message body does not hash to bh value ku.edu pass 65.55.90.240 10 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.90.241 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 141.211.14.133 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 141.211.14.132 4 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 141.211.14.131 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 192.104.1.177 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value example.com fail 209.85.160.51 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.74 6 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 61.67.219.130 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.160.50 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 123.125.51.76 2 none pass fail example.com example.com pass verify result: all signatures verified anybeautyipl.cn pass 123.125.51.77 1 none pass pass example.com example.com pass verify result: all signatures verified anybeautyipl.cn pass 209.85.160.52 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 183.63.35.90 16 reject fail fail example.com example.com fail 182.173.77.90 1 none pass fail example.com example.com pass verify result: all signatures verified caffcogg.cn temperror 220.181.12.53 5 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 113.111.117.86 6 reject fail fail example.com example.com fail 209.85.160.54 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.77 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 79.101.184.83 1 reject fail fail example.com example.com fail 58.60.186.1 6 reject fail fail example.com example.com fail 113.108.13.49 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 125.208.191.68 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 125.231.210.65 6 reject fail fail example.com example.com fail 113.108.13.48 4 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 194.167.122.27 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 183.4.113.245 3 reject fail fail example.com example.com fail 117.6.176.74 2 reject fail fail example.com example.com fail 69.171.232.159 3593 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.158 3694 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.155 3548 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.154 3562 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.157 3556 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.156 3625 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 69.171.232.151 3532 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 69.171.232.150 3570 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.153 3633 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.152 3572 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 183.60.61.210 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 128.253.83.168 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value example.com fail 128.253.83.165 3 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value example.com fail 128.253.83.164 3 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value example.com fail 219.129.174.200 12 reject fail fail example.com example.com fail 209.85.214.180 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.181 10 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.214.182 10 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.79 6 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 125.92.249.10 5 reject fail fail example.com example.com fail 221.224.213.66 153 reject fail fail example.com example.com fail 66.220.144.139 2089 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.144.138 1924 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 14.214.241.129 12 reject fail fail example.com example.com fail 66.220.144.135 2175 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.137 2082 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.144.136 2080 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 203.90.225.207 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 130.127.237.235 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 65.55.88.15 1 reject fail pass example.com example.com neutral sigature verify error: message body does not hash to bh value connect.polyu.hk pass 209.85.212.179 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.178 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.173 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.172 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.171 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.170 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.177 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.176 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.175 4 none pass pass example.com example.com pass verify result: all signatures verified identitydesign.com.sg temperror gmail.com pass 209.85.212.174 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 121.15.248.156 4 reject fail fail example.com example.com fail 121.15.248.157 2 reject fail fail example.com example.com fail 209.85.161.178 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.179 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.176 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.177 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.174 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.175 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.172 10 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.173 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.170 8 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.171 8 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.48 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.49 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.90 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 121.12.158.153 6 reject fail fail example.com example.com fail 162.105.129.21 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.210.41 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.42 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.43 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.44 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.45 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.46 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.210.47 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 61.132.137.212 3 reject fail fail example.com example.com fail 221.181.85.6 3 reject fail fail example.com example.com fail 65.55.90.206 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.90.207 11 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.90.204 3 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.90.205 9 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 112.186.185.159 1 reject fail fail example.com example.com fail 209.85.216.179 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.178 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.177 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.176 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.175 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.174 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 106.10.151.247 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.216.172 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.55.90.208 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 209.85.216.170 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 106.10.151.127 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 110.75.172.193 3 none pass pass example.com example.com pass verify result: all signatures verified cddance.cn pass 123.58.178.51 1 none pass fail example.com example.com pass verify result: all signatures verified medicalsystem.cn none 123.58.178.52 1 none pass pass example.com example.com pass verify result: all signatures verified leontica.com pass 113.108.12.95 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.94 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.93 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.92 4 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.91 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.90 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 114.42.70.22 7 reject fail fail example.com example.com fail 220.189.216.68 2 reject fail fail example.com example.com fail 116.3.5.192 1 reject fail fail example.com example.com fail 125.115.175.40 15 reject fail fail example.com example.com fail 193.108.36.201 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 74.125.82.179 2 none pass fail example.com example.com pass verify result: all signatures verified burgeon.org none gmail.com pass 74.125.82.174 5 none pass pass example.com example.com pass verify result: all signatures verified identitydesign.com.sg temperror gmail.com pass 74.125.82.175 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.177 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.170 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.171 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.172 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.173 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.55.34.217 23 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.34.216 24 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.34.215 20 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.34.214 16 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.34.213 28 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.34.212 18 none pass pass example.com example.com pass verify result: all signatures verified hotmail.fr pass hotmail.de pass hotmail.com pass 65.55.34.211 26 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.34.210 24 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 116.28.112.194 9 reject fail fail example.com example.com fail 65.55.34.218 18 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 209.85.216.182 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.180 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.216.181 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 183.22.52.62 1 reject fail fail example.com example.com fail 58.50.28.231 14 reject fail fail example.com example.com fail 74.125.82.178 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 202.118.224.232 1 none pass pass example.com example.com pass verify result: all signatures verified hope.hit.edu.cn pass 106.10.149.71 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 112.93.251.60 7 reject fail fail example.com example.com fail 61.145.126.68 1 none pass fail example.com example.com pass verify result: all signatures verified gzsuihui.com none 209.85.220.170 1 none pass fail example.com example.com pass verify result: all signatures verified hanhetong.com none 221.192.247.78 14 reject fail fail example.com example.com fail 209.85.220.173 2 none pass fail example.com example.com pass verify result: all signatures verified gmail.com pass paxex.com.hk none 209.85.220.174 2 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 209.85.220.175 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.220.176 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.220.179 2 none pass fail example.com example.com pass verify result: all signatures verified gmail.com pass paxex.com.hk none 68.181.178.3 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 14.151.6.13 5 reject fail fail example.com example.com fail 183.60.228.136 2 reject fail fail example.com example.com fail 74.125.82.181 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.180 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.182 5 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 61.82.124.95 1 reject fail fail example.com example.com fail 41.162.184.50 1 reject fail fail example.com example.com fail 209.85.217.178 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.217.179 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.49 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.48 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.47 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.46 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.45 2 none pass pass example.com example.com pass verify result: all signatures verified engagerc.com neutral gmail.com pass 209.85.217.171 6 none pass fail example.com example.com pass verify result: all signatures verified brandeis.edu pass gmail.com pass 74.125.82.43 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.217.177 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.41 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 211.150.74.27 1 none pass fail example.com example.com pass verify result: all signatures verified yong-qi.com none 209.85.213.50 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.67 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 168.95.4.104 2 reject fail fail example.com example.com fail 168.95.4.105 1 reject fail fail example.com example.com fail 168.95.4.106 1 reject fail fail example.com example.com fail 113.108.12.79 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.78 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 168.95.4.102 1 reject fail fail example.com example.com fail 168.95.4.103 1 reject fail fail example.com example.com fail 209.85.213.182 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.181 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 128.248.155.38 3 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 168.95.4.109 1 reject fail fail example.com example.com fail 113.66.109.204 1 reject fail fail example.com example.com fail 202.106.46.67 1 none pass pass example.com example.com pass verify result: all signatures verified btamail.net.cn pass 202.67.202.32 9 reject fail fail example.com example.com fail 65.55.111.176 20 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.175 16 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.174 14 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.173 10 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.172 13 none pass pass example.com example.com pass verify result: all signatures verified live.com pass hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.171 15 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.170 13 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 202.136.223.243 3 reject fail fail example.com example.com fail 119.141.5.83 6 reject fail fail example.com example.com fail 66.220.155.151 1472 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.150 1119 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.153 1548 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.152 1509 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.155 1665 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.154 1614 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.157 1288 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.156 1544 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.159 1280 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.155.158 1198 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 162.105.129.60 3 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 221.176.9.70 1 none pass pass example.com example.com pass verify result: all signatures verified 139.com pass 168.95.4.115 3 reject fail fail example.com example.com fail 65.54.51.96 6 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.54.51.97 8 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.com pass 65.54.51.94 6 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.54.51.95 5 none pass pass example.com example.com pass verify result: all signatures verified live.com pass hotmail.com pass 65.54.51.92 6 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.54.51.93 8 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.54.51.90 3 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.com pass 113.108.23.41 5 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.42 3 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 65.54.51.98 6 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.54.51.99 4 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 113.66.111.125 1 reject fail fail example.com example.com fail 113.108.23.43 2 none pass pass example.com example.com pass verify result: all signatures verified foxmail.com pass 221.204.184.200 4 reject fail fail example.com example.com fail 209.85.215.45 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 14.156.34.194 3 reject fail fail example.com example.com fail 209.85.215.44 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 141.211.176.135 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 141.211.176.134 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.214.54 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 98.139.213.132 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 58.56.132.206 18 reject fail fail example.com example.com fail 113.97.31.3 3 reject fail fail example.com example.com fail 218.17.156.60 6 reject fail fail example.com example.com fail 183.62.139.238 50 reject fail fail example.com example.com fail 58.253.172.254 20 reject fail fail example.com example.com fail 128.210.5.173 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 69.171.232.168 284 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 69.171.232.169 305 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 69.171.232.160 33 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.161 37 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.162 35 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.163 32 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.164 37 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.165 35 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.166 40 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.167 27 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 58.211.51.26 3 reject fail fail example.com example.com fail 116.6.43.215 15 reject fail fail example.com example.com fail 209.85.215.47 6 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified gmail.com pass 209.85.215.46 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 128.135.165.68 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 128.135.165.69 4 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.215.43 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.215.42 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.215.41 3 none pass pass example.com example.com pass verify result: all signatures verified brandeis.edu pass gmail.com pass 209.85.215.49 3 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified gmail.com pass 209.85.215.48 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 112.95.195.149 1 reject fail fail example.com example.com fail 58.251.15.134 24 reject fail fail example.com example.com fail 209.85.212.180 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 213.199.154.144 1 reject fail pass example.com example.com neutral sigature verify error: message body does not hash to bh value ku.edu pass 209.85.212.181 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.181.12.60 3 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 150.255.4.110 3 reject fail fail example.com example.com fail 220.181.12.61 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 209.85.161.169 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 218.1.66.71 1 none pass fail example.com example.com pass verify result: all signatures verified sh163.net none 220.181.12.66 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 129.186.140.6 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 65.55.111.168 19 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 220.181.12.64 4 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 202.107.243.234 9 reject fail fail example.com example.com fail 202.38.64.46 2 none pass pass example.com example.com pass verify result: all signatures verified mail.ustc.edu.cn pass 183.22.22.80 7 reject fail fail example.com example.com fail 209.85.212.52 2 none pass fail example.com example.com pass verify result: all signatures verified paxex.com.hk none 221.204.184.203 2 reject fail fail example.com example.com fail 211.152.42.146 2 reject fail fail example.com example.com fail signature error: RSA verify failed mail.umail81.cn4e.com none 209.85.214.169 12 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 61.145.121.80 2 none pass fail example.com example.com pass verify result: all signatures verified glamoxcn.com none alevel.com.cn none 61.145.121.80 1 reject fail pass example.com example.com fail signature error: RSA verify failed hk-mingjia.com pass 220.181.12.68 3 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 61.145.121.82 3 none pass fail example.com example.com pass verify result: all signatures verified alevel.com.cn none lesaffre.com.cn pass deltaplus.com.cn none 112.134.75.160 3 reject fail fail example.com example.com fail 113.114.247.8 18 reject fail fail example.com example.com fail 106.10.148.245 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 218.102.53.154 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 113.108.23.54 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.53 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.52 4 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.51 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.50 3 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 98.139.91.238 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 125.118.53.110 5 reject fail fail example.com example.com fail 220.128.236.102 6 reject fail fail example.com example.com fail 209.85.160.180 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.160.181 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.55.90.211 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.90.210 7 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.90.213 7 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.90.212 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass live.cn pass hotmail.com pass 65.55.90.215 9 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.90.214 7 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.com pass 65.55.90.217 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.com pass 65.55.90.216 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.90.219 5 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.com pass 65.55.90.218 5 none pass pass example.com example.com pass verify result: all signatures verified live.cn pass hotmail.com pass 129.7.234.211 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 113.97.31.101 4 reject fail fail example.com example.com fail 114.218.132.52 3 reject fail fail example.com example.com fail 183.62.104.144 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 119.141.4.111 8 reject fail fail example.com example.com fail 220.181.12.88 3 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 220.181.12.85 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 110.75.170.117 1 none pass pass example.com example.com pass verify result: all signatures verified shuigongniao.com pass 111.248.6.203 1 reject fail fail example.com example.com fail 113.108.12.80 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.81 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.82 3 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.83 4 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.84 3 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.85 5 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass qq.com pass 113.108.12.86 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.87 3 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass qq.com pass 183.23.105.243 3 reject fail fail example.com example.com fail 192.43.227.18 1 none pass fail example.com example.com pass verify result: all signatures verified student.adelaide.edu.au none 209.85.214.47 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass googlemail.com pass 209.85.212.50 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 61.145.9.76 2 reject fail fail example.com example.com fail 123.124.145.234 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value ccom.edu.cn none 218.244.146.232 1 reject fail fail example.com example.com fail signature error: RSA verify failed p3ne.com none 59.121.232.213 3 reject fail fail example.com example.com fail 66.220.155.135 1536 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 123.58.178.226 5 none pass pass example.com example.com pass verify result: all signatures verified yeah.net pass 123.58.178.225 3 none pass pass example.com example.com pass verify result: all signatures verified yeah.net pass 123.58.178.224 2 none pass pass example.com example.com pass verify result: all signatures verified yeah.net pass 58.62.17.138 35 reject fail fail example.com example.com fail 113.108.13.47 4 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 66.220.144.148 2159 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.149 2069 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.144 2022 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.144.145 1972 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.144.146 2102 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.147 2041 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.140 2063 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.141 2102 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.144.142 2173 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com neutral example.com pass 66.220.144.143 2083 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.143 1 reject fail fail example.com example.com temperror signature error: temporary dns failure requesting selector example.com neutral 175.111.255.130 12 reject fail fail example.com example.com fail 209.85.160.41 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 218.107.251.178 1 reject fail fail example.com example.com fail 121.15.200.73 42 reject fail fail example.com example.com fail 209.85.217.173 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.217.169 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 64.18.0.24 1 none pass pass example.com example.com pass verify result: all signatures verified unomaha.edu pass 218.1.66.83 1 none pass fail example.com example.com pass verify result: all signatures verified citiz.net none 113.66.109.91 1 reject fail fail example.com example.com fail 113.79.149.43 1 reject fail fail example.com example.com fail 123.58.177.168 1 none pass pass example.com example.com pass verify result: all signatures verified vip.163.com pass 211.147.240.3 3 reject fail fail example.com example.com fail 113.106.198.106 3 reject fail fail example.com example.com fail 209.85.213.176 7 none pass pass example.com example.com pass verify result: all signatures verified owu.edu pass gmail.com pass 209.85.213.177 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.174 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.175 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.172 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.173 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.170 5 none pass pass example.com example.com pass verify result: all signatures verified owu.edu pass gmail.com pass 209.85.213.171 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 58.215.44.55 1 reject fail fail example.com sdo.com softfail 209.85.213.178 5 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.213.179 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.217.172 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 210.75.17.210 60 reject fail fail example.com example.com fail 120.84.21.89 4 none pass pass example.com example.com pass verify result: all signatures verified 139.com pass 209.85.213.44 7 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 210.0.190.68 15 reject fail fail example.com example.com fail 202.120.224.10 4 none pass fail example.com example.com pass verify result: all signatures verified fudan.edu.cn none 209.85.217.170 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.51 6 none pass pass example.com example.com pass verify result: all signatures verified paxex.com.hk none gmail.com pass 65.55.111.169 17 none pass pass example.com example.com pass verify result: all signatures verified hotmail.co.uk pass hotmail.it pass w.cn none hotmail.com pass hotmail.de pass 209.85.212.53 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 74.125.82.44 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.212.54 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.55.111.160 23 none pass pass example.com example.com pass verify result: all signatures verified hotmail.fr pass hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.161 13 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.162 13 none pass pass example.com example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 65.55.111.163 18 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.164 15 none pass pass example.com example.com pass verify result: all signatures verified msn.cn pass hotmail.it pass hotmail.com pass hotmail.de pass 65.55.111.165 19 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.166 13 none pass pass example.com example.com pass verify result: all signatures verified hotmail.de pass hotmail.it pass hotmail.com pass 65.55.111.167 19 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified hotmail.it pass hotmail.com pass 209.85.217.174 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 128.248.155.6 4 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.217.176 3 none pass pass example.com example.com pass verify result: all signatures verified njit.edu neutral gmail.com pass 209.85.213.42 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.155.164 6 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.165 9 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.166 6 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.167 13 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.160 14 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.161 17 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.162 16 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.163 9 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 202.65.196.163 8 none pass fail example.com example.com pass verify result: all signatures verified example.com fail
google.com!example.com!1337299200!1337385599.13003092557703129505.xml000066400000000000000000303471621416002254500346360ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfiles google.com noreply-dmarc-support@google.com http://support.google.com/a/bin/answer.py?answer=2466580 13003092557703129505 1337299200 1337385599 example.com r r

reject

100
64.18.1.43 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.55 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.57 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.72 2 none support.example.com support.example.com pass support.example.com fail 64.18.0.110 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.105 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.126 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.127 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.176 1 none support.example.com support.example.com pass support.example.com fail 80.67.18.98 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.42 1 reject example.com none example.com fail 64.18.1.62 1 reject example.com none example.com fail 64.18.1.73 1 reject example.com none example.com fail 69.89.24.6 1 reject example.com none box293.bluehost.com neutral 206.180.5.51 1 none support.example.com support.example.com pass support.example.com fail 63.127.11.31 1 none example.com example.com pass century21.ca pass 69.64.157.17 2 none example.com example.com pass example.com fail 152.26.13.6 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 194.90.9.21 1 reject example.com none example.com fail 210.170.0.9 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 64.18.1.214 1 reject example.com none example.com fail 66.40.55.83 1 reject example.com none example.com fail 66.84.33.14 1 reject example.com none example.com fail 66.96.190.1 1 reject mx.example.com none bosmailout01.eigbox.net neutral 72.8.179.46 3 reject example.com none server.staminus.net neutral 96.47.0.133 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 134.173.32.22 6 none support.example.com support.example.com pass support.example.com fail 137.99.25.235 1 none support.example.com support.example.com pass support.example.com fail 141.161.2.147 1 none support.example.com support.example.com pass support.example.com fail 202.71.131.15 1 none example.com example.com pass example.com fail 66.11.225.135 1 none example.com example.com pass sgfellowship.net neutral 66.220.157.64 23 none example.com example.com fail example.com pass 66.220.157.64 375 none example.com example.com pass example.com pass 66.220.157.73 9 none example.com example.com fail example.com pass 66.220.157.77 7 none example.com example.com fail example.com pass 66.220.157.78 326 none example.com example.com pass example.com pass 66.220.157.81 281 none example.com example.com pass example.com pass 66.220.157.82 284 none example.com example.com pass example.com pass 66.220.157.85 12 none example.com example.com fail example.com pass 67.231.144.60 1 none support.example.com support.example.com pass support.example.com fail 69.171.244.66 35 none example.com example.com fail example.com pass 12.52.152.11 8 reject example.com none example.com fail 129.128.5.19 1 reject mx.example.com none mail7.srv.ualberta.ca neutral 130.39.4.252 1 reject support.example.com support.example.com neutral support.example.com fail 152.8.25.213 1 reject support.example.com support.example.com neutral support.example.com fail 177.23.80.81 22 reject example.com none example.com fail 209.17.171.6 1 reject example.com none power.wired2host.com neutral 209.68.1.133 1 reject example.com none example.com fail 63.237.237.1 1 reject reply.example.com none emeralddowns.com neutral 64.57.176.14 1 reject example.com none example.com fail 64.62.159.98 1 reject example.com none example.com fail 68.65.148.55 3 reject groups.example.com none groups.example.com neutral 72.10.55.151 18 reject example.com none example.com fail 72.47.205.41 3 reject example.com none example.com fail 74.208.4.202 8 reject example.com none example.com fail 74.53.39.170 9 reject example.com none example.com fail 78.97.99.172 1 reject reply.example.com none regallager.com neutral 80.86.81.225 1 reject example.com none example.com fail 91.201.56.11 3 reject example.com none example.com fail 134.173.71.141 1 none example.com example.com pass example.com fail 66.220.144.141 1141 none support.example.com support.example.com pass support.example.com pass 66.220.144.157 54 none example.com example.com neutral example.com pass 66.220.155.141 4 none example.com example.com neutral example.com pass 66.220.155.143 5 none example.com example.com neutral example.com pass 66.220.155.145 5 none example.com example.com neutral example.com pass 66.220.155.146 4 none example.com example.com neutral example.com pass 69.171.232.138 1694 none support.example.com support.example.com pass support.example.com pass 69.171.232.147 68 none example.com example.com neutral example.com pass 69.171.232.153 55 none example.com example.com neutral example.com pass 69.171.232.155 1652 none support.example.com support.example.com pass support.example.com pass 130.113.22.34 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 171.67.219.72 2 reject m.example.com m.example.com neutral m.example.com neutral 192.195.66.28 1 reject support.example.com support.example.com fail support.example.com fail 195.186.80.30 7 reject example.com none example.com fail 195.54.18.198 6 reject example.com none example.com fail 195.78.85.149 1 reject example.com none marktplaats.nl pass 198.237.49.53 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 208.113.175.8 1 reject example.com none dagger.dreamhost.com neutral 216.97.237.86 1 reject example.com none example.com fail 217.33.68.125 2 reject reply.example.com none reply.example.com neutral 24.241.102.82 11 reject example.com none example.com fail 50.97.104.120 1 reject example.com none gator1903.hostgator.com neutral 59.106.27.239 2 reject example.com none example.com fail 65.254.253.37 1 reject example.com none chol.biz pass 65.41.102.142 12 reject example.com none example.com fail 66.118.157.29 1 reject example.com none example.com fail 66.135.55.143 8 reject example.com none example.com fail 66.45.126.182 1 reject example.com example.com fail example.com fail 67.98.146.196 1 reject example.com none example.com fail 69.191.192.22 4 reject groups.example.com none bloomberg.net pass 69.191.244.20 1 reject groups.example.com none bloomberg.net pass 69.60.118.117 16 reject example.com none example.com fail 71.18.216.112 1 reject example.com none example.com fail 74.125.149.39 21 reject mx.example.com none na3sys009amo105.postini.com neutral 83.170.124.65 1 reject example.com none example.com fail 83.170.124.68 1 reject example.com none example.com fail 84.246.231.62 1 reject example.com none cloud23162.comalis.net neutral 94.136.63.160 8 reject example.com none example.com fail 95.108.130.92 2 reject reply.example.com none forward14.mail.yandex.net neutral 220.110.215.124 1 none example.com example.com pass example.com fail 112.175.246.74 2 reject example.com none uwa64-052.cafe24.com pass 128.120.32.132 1 reject mx.example.com none smtp6.ucdavis.edu neutral 134.84.135.123 1 reject example.com none example.com fail 170.140.52.250 1 reject groups.example.com none groups.example.com neutral 173.15.107.169 6 reject reply.example.com examplemail.com neutral mail.onemissionsociety.org neutral 184.173.236.37 1 reject example.com none example.com fail 188.165.34.192 1 reject example.com none 54.mail-out.ovh.net neutral 195.55.130.107 18 reject example.com none example.com fail 202.52.134.135 1 reject example.com none plp5.hostin.in neutral 204.11.244.215 5 reject example.com none example.com fail 204.202.242.56 1 reject example.com none example.com fail 205.186.134.65 7 reject example.com none example.com fail 206.188.207.99 3 reject example.com none example.com fail 207.106.200.10 12 reject example.com none smtp-corp-01.aweber.com pass 207.211.91.251 6 reject example.com none example.com fail 207.236.237.38 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 207.251.97.199 2 reject example.com none m.jcpenneyem.com pass 207.97.245.119 1 reject example.com none example.com fail 207.97.245.141 5 reject example.com none example.com fail 207.97.245.172 1 reject example.com none example.com fail 208.82.238.106 1 reject example.com none craigslist.org pass 208.99.113.122 1 reject example.com none example.com fail 209.217.225.50 1 reject example.com none example.com fail 213.188.190.55 10 reject example.com none example.com fail 213.239.231.83 2 reject example.com none example.com fail 216.230.224.41 8 reject example.com none example.com fail 216.82.242.179 1 reject example.com none example.com fail 65.254.253.105 1 reject example.com none yourhostingaccount.com pass 66.220.144.139 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 66.220.144.142 518 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.152 482 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.154 473 reject m.example.com m.example.com neutral m.example.com neutral 66.220.145.244 11 reject example.com none example.com fail 66.220.145.249 4 reject example.com none example.com fail 69.171.232.135 514 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.152 470 reject m.example.com m.example.com neutral m.example.com neutral 69.171.240.248 5 reject example.com none example.com fail 89.238.128.230 1 reject example.com none rweb3-v.000025.net neutral 178.235.146.205 1 reject example.com none kurdogluholding.com.tr fail 184.173.196.195 1 reject example.com none example.com fail 199.231.136.140 12 reject example.com none example.com fail 209.212.145.217 1 reject example.com none server.mygamesarea.com neutral 212.247.100.194 2 reject support.example.com support.example.com fail support.example.com fail 216.152.192.163 1 reject example.com none example.com fail 216.218.133.242 1 reject support.example.com none support.example.com fail 50.57.0.7 9 none forwarded support.example.com support.example.com pass support.example.com fail 18.9.25.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.8.47 8 none forwarded support.example.com support.example.com pass gmail.com neutral 85.9.22.97 1 none forwarded support.example.com support.example.com pass support.example.com fail 109.68.40.3 1 none forwarded support.example.com support.example.com pass support.example.com fail 133.28.1.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.3.188.5 2 none forwarded example.com example.com pass example.com fail 50.22.80.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.14.68.23 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.14.74.11 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.54.61.82 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.54.61.87 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.16 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.18 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.22 1 none forwarded support.example.com support.example.com pass live.com.au pass 65.55.90.26 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.31 2 none forwarded example.com example.com pass hotmail.com pass 66.96.187.5 1 none forwarded support.example.com support.example.com pass jamlancer.com pass 66.96.187.5 1 none forwarded support.example.com support.example.com pass riggimediainternational.com pass 67.18.90.31 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.18.50.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 71.74.56.23 1 none forwarded support.example.com support.example.com pass gmail.com neutral 76.96.62.32 2 none forwarded support.example.com support.example.com pass support.example.com fail 77.105.0.38 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.75.72.44 4 none forwarded support.example.com support.example.com pass support.example.com fail 77.75.76.44 5 none forwarded support.example.com support.example.com pass seznam.cz pass 78.24.8.158 1 none forwarded support.example.com support.example.com pass support.example.com fail 78.46.93.84 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.51 1 none forwarded support.example.com support.example.com pass support.example.com fail 84.16.68.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.111.3.83 1 none forwarded support.example.com support.example.com pass inbox.lv pass 64.18.1.53 1 reject forwarded example.com none example.com fail 180.222.89.1 1 none forwarded support.example.com support.example.com pass support.example.com fail 182.48.26.54 1 none forwarded support.example.com support.example.com pass bounces.heteml.jp softfail 188.165.52.7 1 none forwarded example.com example.com pass example.com fail 201.76.49.71 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.75.41.39 3 none forwarded support.example.com support.example.com pass support.example.com fail 206.71.69.97 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.53.40.41 1 none forwarded support.example.com support.example.com pass support.example.com fail 211.10.8.140 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.227.17.8 3 none forwarded example.com example.com pass srs.kundenserver.de pass 212.227.17.8 3 none forwarded support.example.com support.example.com pass srs.kundenserver.de pass 212.53.95.95 2 none forwarded support.example.com support.example.com pass support.example.com fail 217.170.3.93 2 none forwarded support.example.com support.example.com pass support.example.com fail 24.75.53.193 1 none forwarded support.example.com support.example.com pass support.example.com fail 41.203.16.36 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.97.99.149 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.40.103.55 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.111.85 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.12 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.16 1 none forwarded example.com example.com pass live.com.mx pass 65.55.116.22 1 none forwarded example.com example.com pass hotmail.co.uk pass 65.55.116.29 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.40 7 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.43 1 none forwarded support.example.com support.example.com pass live.co.uk pass 65.55.116.90 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.150 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.153 1 none forwarded support.example.com support.example.com pass hotmail.com pass 66.11.225.98 1 none forwarded support.example.com support.example.com pass kulix.org neutral 66.11.233.51 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.147.249.4 1 none forwarded example.com example.com pass example.com fail 66.96.188.15 1 none forwarded support.example.com support.example.com pass frenzy.biz neutral 67.18.18.138 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.55.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.175.8.218 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.20.65.110 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.34.53.119 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.38.142.18 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.41 1 none forwarded support.example.com support.example.com pass ssdp.org pass 74.125.82.44 1 none forwarded support.example.com support.example.com pass aradium.com neutral 74.125.82.46 1 none forwarded support.example.com support.example.com pass abcrtv6.com neutral 74.125.82.50 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 74.125.82.52 1 none forwarded support.example.com support.example.com pass ppc-consulting.cz neutral 74.125.83.44 1 none forwarded support.example.com support.example.com pass acu.edu pass 74.125.83.45 1 none forwarded support.example.com support.example.com pass anything.lk neutral 74.208.4.195 31 none forwarded support.example.com support.example.com pass srs.perfora.net neutral 74.54.176.50 5 none forwarded support.example.com support.example.com pass support.example.com fail 77.94.249.26 2 none forwarded example.com example.com pass example.com fail 79.96.242.86 3 none forwarded support.example.com support.example.com pass support.example.com fail 83.235.66.59 2 none forwarded support.example.com support.example.com pass support.example.com fail 83.70.136.65 3 none forwarded support.example.com support.example.com pass support.example.com fail 87.98.141.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.136.40.62 2 none forwarded support.example.com support.example.com pass support.example.com fail 94.199.56.22 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.76.249.25 1 none forwarded example.com example.com pass example.com fail 97.74.135.23 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 97.74.135.24 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 97.74.135.25 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.130.1.225 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.71 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.83 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.87 1 none forwarded support.example.com support.example.com pass support.example.com fail 168.8.96.16 4 reject forwarded example.com none example.com fail 194.90.6.65 1 reject forwarded example.com none example.com fail 194.90.9.40 1 reject forwarded example.com none example.com fail 35.9.75.208 1 reject forwarded support.example.com msu.edu pass support.example.com fail 50.22.91.34 1 reject forwarded example.com none example.com fail 64.18.1.160 1 reject forwarded example.com none example.com fail 64.33.33.13 1 reject forwarded example.com none example.com fail 64.78.52.15 1 reject forwarded support.example.com support.example.com neutral veteransunited.com pass 65.55.34.19 1 reject forwarded example.com example.com neutral hotmail.com pass 65.55.88.14 1 reject forwarded support.example.com support.example.com neutral uga.edu pass 65.55.90.22 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 66.96.184.9 1 reject forwarded example.com none vitalcoaching.com pass 69.36.9.113 1 reject forwarded example.com none example.com fail 69.61.14.18 1 reject forwarded example.com none example.com fail 69.64.89.63 3 reject forwarded example.com none example.com fail 69.89.27.27 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 70.32.80.60 3 reject forwarded example.com none example.com fail 70.86.13.34 1 reject forwarded example.com none example.com fail 70.86.17.98 1 reject forwarded example.com none example.com fail 70.87.28.65 1 reject forwarded example.com none him.himalayandeals.com neutral 72.32.6.202 6 reject forwarded support.example.com support.example.com fail support.example.com fail 74.208.5.90 2 reject forwarded example.com none example.com fail 74.55.7.194 1 reject forwarded example.com none example.com fail 74.81.94.58 1 reject forwarded example.com none example.com fail 78.108.66.4 3 reject forwarded example.com none example.com fail 8.24.153.35 3 reject forwarded example.com none example.com fail 106.10.151.94 1 none forwarded example.com example.com pass example.com fail 109.72.87.138 1 none forwarded support.example.com support.example.com pass support.example.com fail 111.86.156.35 1 none forwarded example.com example.com pass example.com fail 114.111.98.34 1 none forwarded example.com example.com pass example.com fail 118.103.89.13 1 none forwarded support.example.com support.example.com pass pdx.ne.jp pass 128.255.56.61 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.22.105.36 1 none forwarded support.example.com support.example.com pass case.edu pass 129.65.64.202 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.121.37.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.123.13.66 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.36.194.55 1 none forwarded example.com example.com pass mail.whatsapp.com neutral 184.172.173.9 6 none forwarded support.example.com support.example.com pass support.example.com fail 189.38.85.109 4 none forwarded support.example.com support.example.com pass support.example.com fail 193.34.130.48 2 none forwarded support.example.com support.example.com pass support.example.com fail 194.29.197.65 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.70.32.214 5 none forwarded support.example.com support.example.com pass support.example.com fail 199.203.51.14 1 none forwarded support.example.com support.example.com pass support.example.com fail 199.59.140.13 1 none forwarded support.example.com support.example.com pass support.example.com fail 201.76.49.139 1 none forwarded support.example.com support.example.com pass support.example.com fail 201.76.49.140 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.75.116.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.96.225.42 2 none forwarded support.example.com support.example.com pass support.example.com fail 208.113.200.5 16 none forwarded support.example.com support.example.com pass support.example.com fail 208.113.200.5 1 none forwarded support.example.com support.example.com pass homiemail-mx22.g.dreamhost.com neutral 209.15.212.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.205.85.13 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.41 1 none forwarded support.example.com support.example.com pass refinery29.com pass 209.85.160.44 1 none forwarded support.example.com support.example.com pass hiretheworld.com neutral 209.85.160.45 2 none forwarded support.example.com support.example.com pass seomarketing.com.br neutral 209.85.160.50 1 none forwarded support.example.com support.example.com pass lager.si pass 209.85.160.51 1 none forwarded example.com example.com pass ucdavis.edu neutral 209.85.160.52 1 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.160.52 1 none forwarded support.example.com support.example.com pass gngimports.com.br softfail 209.85.160.52 1 none forwarded support.example.com support.example.com pass robinbarondesign.com neutral 209.85.210.42 1 none forwarded support.example.com support.example.com pass nlomarketing.ru neutral 209.85.210.46 1 none forwarded support.example.com support.example.com pass christini.com neutral 209.85.210.46 2 none forwarded support.example.com support.example.com pass diogoaguilar.com neutral 209.85.210.49 1 none forwarded support.example.com support.example.com pass gerenteweb.com.br pass 209.85.210.50 2 none forwarded support.example.com support.example.com pass pto.hu neutral 209.85.210.50 4 none forwarded support.example.com support.example.com pass prolight.hr softfail 209.85.212.42 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.42 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.42 6 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.43 2 none forwarded support.example.com support.example.com pass edesign.com.sa neutral 209.85.212.45 1 none forwarded support.example.com support.example.com pass gazeta.pl pass 209.85.212.47 2 none forwarded support.example.com support.example.com pass bidray.com neutral 209.85.212.47 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.49 1 none forwarded support.example.com support.example.com pass saisanj.com pass 209.85.212.50 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.51 1 none forwarded support.example.com support.example.com pass dailygaypon.com fail 209.85.213.41 1 none forwarded support.example.com support.example.com pass refinery29.com pass 209.85.213.41 1 none forwarded support.example.com support.example.com pass registratusmarcas.com neutral 209.85.213.42 1 none forwarded example.com example.com pass gmail.com pass 209.85.213.45 2 none forwarded support.example.com support.example.com pass liniad.com neutral 209.85.213.49 1 none forwarded support.example.com support.example.com pass privalia.it pass 209.85.213.50 1 none forwarded example.com example.com pass gmail.com pass 209.85.213.50 1 none forwarded support.example.com support.example.com pass jesseperkins.net neutral 209.85.213.50 1 none forwarded support.example.com support.example.com pass redpiranhapiercing.co.uk neutral 209.85.213.53 1 none forwarded support.example.com support.example.com pass teecycle.org neutral 209.85.213.53 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.214.42 1 none forwarded support.example.com support.example.com pass fuks.co.il neutral 209.85.214.43 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.43 1 none forwarded support.example.com support.example.com pass sketchbookla.com neutral 209.85.214.43 3 none forwarded support.example.com support.example.com pass searchinfluence.com pass 209.85.214.45 1 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.46 1 none forwarded support.example.com support.example.com pass ig.com.br pass 209.85.214.46 1 none forwarded support.example.com support.example.com pass patangay.com neutral 209.85.214.48 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.48 1 none forwarded support.example.com support.example.com pass prospectone.org neutral 209.85.214.51 1 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.51 1 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.214.54 2 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.54 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.41 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.42 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.42 1 none forwarded support.example.com support.example.com pass uhvatival.hr neutral 209.85.215.42 5 none forwarded support.example.com support.example.com pass gocreatemarketing.com softfail 209.85.215.43 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.43 1 none forwarded support.example.com support.example.com pass kgstechnology.com neutral 209.85.215.44 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.44 3 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass sailorjerry.com permerror 209.85.215.46 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.46 1 none forwarded support.example.com support.example.com pass liquor.com pass 209.85.215.46 1 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.47 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.215.47 4 none forwarded support.example.com support.example.com pass runroom.com neutral 209.85.215.47 1 none forwarded support.example.com support.example.com pass online.net.tw neutral 209.85.215.48 1 none forwarded support.example.com support.example.com pass unwe.eu neutral 209.85.215.49 1 none forwarded support.example.com support.example.com pass thehuey.com pass 209.85.215.50 2 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.215.51 1 none forwarded support.example.com support.example.com pass fractalmedia.mx neutral 209.85.215.53 2 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.215.53 1 none forwarded support.example.com support.example.com pass online.net.tw neutral 209.85.215.53 1 none forwarded support.example.com support.example.com pass profiloteknoloji.com pass 209.85.215.54 1 none forwarded support.example.com support.example.com pass allskateboards.cl neutral 209.85.216.42 2 none forwarded support.example.com support.example.com pass apis3.com pass 209.85.216.46 1 none forwarded support.example.com support.example.com pass diamondintherough.com softfail 209.85.216.48 1 none forwarded support.example.com support.example.com pass creativebull.com softfail 210.131.4.233 4 none forwarded support.example.com support.example.com pass support.example.com fail 210.131.4.235 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.131.4.237 2 none forwarded support.example.com support.example.com pass support.example.com fail 212.227.17.12 19 none forwarded support.example.com support.example.com pass web.de neutral 212.51.32.191 1 none forwarded support.example.com support.example.com pass galicia.com neutral 213.193.193.5 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.33.127.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.45.51.103 4 none forwarded support.example.com support.example.com pass support.example.com fail 50.56.234.165 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.128.59.182 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.219.17.211 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.13.225.180 1 none forwarded example.com example.com pass example.com fail 64.202.189.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.34.111.253 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.77 2 none forwarded support.example.com support.example.com pass happydoodle.net pass 65.254.253.90 1 none forwarded support.example.com support.example.com pass ameridebtgroup.com pass 66.175.56.170 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.220.157.68 1 none forwarded example.com example.com pass example.com pass 67.210.96.244 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.215.12.250 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.58.191 4 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.98.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.167.155.34 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.72.202.212 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.18.210.114 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.149.76 1 none forwarded support.example.com support.example.com pass dons.usfca.edu neutral 74.125.245.76 1 none forwarded example.com example.com pass diversityscholars.org softfail 74.125.82.169 1 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.173 1 none forwarded support.example.com support.example.com pass insidr.net neutral 74.125.82.173 2 none forwarded support.example.com support.example.com pass themaize.com neutral 74.125.82.174 1 none forwarded support.example.com support.example.com pass nateleung.com neutral 74.125.82.176 7 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.179 2 none forwarded support.example.com support.example.com pass adotomi.com neutral 74.125.82.179 1 none forwarded support.example.com support.example.com pass offeron.com softfail 74.125.82.181 1 none forwarded support.example.com support.example.com pass mediacliq.com neutral 80.179.59.162 1 none forwarded support.example.com support.example.com pass gmail.com neutral 82.135.148.93 2 none forwarded support.example.com support.example.com pass support.example.com fail 82.208.46.160 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.98.149.139 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.98.151.136 1 none forwarded support.example.com support.example.com pass support.example.com fail 83.223.124.17 12 none forwarded support.example.com support.example.com pass support.example.com fail 85.235.137.36 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.198.169.56 3 none forwarded support.example.com support.example.com pass support.example.com fail 91.93.107.225 2 none forwarded support.example.com support.example.com pass support.example.com fail 94.136.160.71 2 none forwarded support.example.com support.example.com pass support.example.com fail 94.23.213.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 95.110.230.22 1 none forwarded support.example.com support.example.com pass support.example.com fail 95.130.76.103 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.79.239.165 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.38 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.208 1 none forwarded support.example.com support.example.com pass orange.pl fail 98.139.52.249 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.100 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.2.119 8 none mailing_list support.example.com none kayac.com pass 119.59.120.7 1 reject forwarded mx.example.com none ns81.hostinglotus.net neutral 12.167.98.15 1 reject forwarded example.com none example.com fail 129.67.1.161 1 reject forwarded example.com none nexus.ox.ac.uk neutral 129.79.1.191 6 reject forwarded example.com none example.com fail 17.148.16.91 1 reject forwarded support.example.com support.example.com neutral srs.perfora.net neutral 17.148.16.92 1 reject forwarded example.com none example.com fail 17.148.16.92 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.95 1 reject forwarded example.com none example.com fail 17.148.16.97 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 202.191.42.6 1 reject forwarded example.com none example.com fail 208.92.44.90 3 reject forwarded example.com none wired.com pass 209.68.1.135 1 reject forwarded example.com none example.com fail 212.227.17.3 1 reject forwarded mx.example.com none mout-bounce.kundenserver.de pass 212.227.17.6 3 reject forwarded example.com none example.com fail 217.63.94.25 1 reject forwarded support.example.com support.example.com neutral nebusloyalty.com neutral 61.9.189.149 1 reject forwarded example.com none example.com fail 64.28.25.161 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 65.18.193.80 3 reject forwarded example.com none example.com fail 65.39.140.93 1 reject forwarded support.example.com none support.example.com fail 65.60.93.206 1 reject forwarded example.com none spatialwave.com neutral 66.84.42.158 60 reject forwarded example.com none example.com fail 67.43.169.52 1 reject forwarded example.com none example.com fail 69.54.163.17 1 reject forwarded example.com none example.com fail 69.64.157.17 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 69.65.123.40 4 reject forwarded example.com none example.com fail 69.87.137.60 5 reject forwarded example.com none example.com fail 69.89.24.204 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.93.48.162 1 reject forwarded example.com none example.com fail 70.86.11.235 1 reject forwarded example.com none example.com fail 72.32.175.28 1 reject forwarded example.com none maddockphotography.com neutral 72.35.12.189 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 72.47.228.14 1 reject forwarded example.com none example.com fail 74.206.115.9 1 reject forwarded example.com none example.com fail 74.94.208.45 1 reject forwarded example.com none example.com fail 80.77.128.29 3 reject forwarded example.com none example.com fail 81.2.225.152 1 reject forwarded example.com none example.com fail 83.96.232.31 10 reject forwarded example.com none example.com fail 92.48.68.192 5 reject forwarded m.example.com m.example.com neutral m.example.com neutral 93.94.37.148 2 reject forwarded support.example.com contactlab.it pass t.contactlab.it pass 96.11.235.92 1 reject forwarded example.com none example.com fail 108.163.220.51 5 none forwarded support.example.com support.example.com pass support.example.com fail 109.123.220.52 3 none forwarded support.example.com support.example.com pass support.example.com fail 109.237.217.99 1 none forwarded support.example.com support.example.com pass support.example.com fail 112.78.219.237 1 none forwarded example.com example.com pass bounces.heteml.jp pass 118.127.34.203 1 none forwarded support.example.com support.example.com pass support.example.com fail 125.206.129.45 3 none forwarded support.example.com support.example.com pass support.example.com fail 125.206.187.72 1 none forwarded support.example.com support.example.com pass xnozacli2-40gmail-2ecom.xinfo-2dbounce-2bcf076cx-2eaeazeint5wdee-40support-2eexample.x.x-2ecom.ocnadm.ocn.ad.jp pass 128.103.109.33 5 none forwarded support.example.com support.example.com pass support.example.com fail 130.70.132.233 1 none forwarded support.example.com support.example.com pass support.example.com fail 134.181.131.53 1 none forwarded support.example.com support.example.com pass gmail.com neutral 140.247.35.204 1 none forwarded example.com example.com pass fas.harvard.edu neutral 141.211.14.131 2 none forwarded support.example.com support.example.com pass support.example.com fail 157.205.202.21 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.236.27.130 1 none forwarded support.example.com support.example.com pass sunhatsplus.com neutral 174.37.190.190 2 none forwarded support.example.com support.example.com pass support.example.com fail 177.53.152.100 1 none forwarded example.com example.com pass example.com fail 193.253.67.237 3 none forwarded support.example.com support.example.com pass support.example.com fail 193.92.150.107 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.173.77.149 1 none forwarded support.example.com support.example.com pass support.example.com fail 198.212.10.117 5 none forwarded support.example.com support.example.com pass support.example.com fail 198.212.10.248 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.172.28.118 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.67.155.148 1 none forwarded support.example.com support.example.com pass support.example.com fail 204.202.242.87 1 none forwarded example.com example.com pass example.com fail 205.178.146.50 1 none forwarded example.com example.com pass example.com fail 206.123.105.32 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.145 1 none forwarded example.com example.com pass example.com fail 208.97.132.145 4 none forwarded support.example.com support.example.com pass support.example.com fail 209.200.253.29 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.171 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.170 1 none forwarded support.example.com support.example.com pass eviom.com neutral 209.85.161.171 10 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.175 8 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.176 1 none forwarded support.example.com support.example.com pass kanlli.com neutral 209.85.161.176 1 none forwarded support.example.com support.example.com pass simbiotic.net neutral 209.85.161.177 1 none forwarded support.example.com support.example.com pass cinemadslr.com.br softfail 209.85.161.177 1 none forwarded support.example.com support.example.com pass digitalclickmedia.net neutral 209.85.161.179 5 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.161.179 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.161.180 1 none forwarded support.example.com support.example.com pass aasa.fi neutral 209.85.161.180 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.161.181 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.212.171 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.175 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.175 2 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.212.181 1 none forwarded support.example.com support.example.com pass senseofashion.com pass 209.85.213.170 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.172 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.172 1 none forwarded support.example.com support.example.com pass pecavar.com neutral 209.85.213.172 7 none forwarded support.example.com support.example.com pass compasslabs.com neutral 209.85.213.172 1 none forwarded support.example.com support.example.com pass jonathancoulton.com pass 209.85.213.173 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.213.173 1 none forwarded support.example.com support.example.com pass vavramarkets.com neutral 209.85.213.175 19 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.175 1 none forwarded support.example.com support.example.com pass cornerstone-cc.com neutral 209.85.213.176 1 none forwarded support.example.com support.example.com pass mambanation.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass seanaceoconnor.com neutral 209.85.213.179 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.213.180 1 none forwarded support.example.com support.example.com pass spiritactivewear.com neutral 209.85.213.182 1 none forwarded support.example.com support.example.com pass lojewski.info neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass kamelasmar.com neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass meusushi.com.br neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.171 1 none forwarded support.example.com support.example.com pass bigbadtomato.com softfail 209.85.214.171 1 none forwarded support.example.com support.example.com pass bodyandmindguam.com neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass clayburngriffin.com neutral 209.85.214.172 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.172 1 none forwarded support.example.com support.example.com pass crrobs.org softfail 209.85.214.175 1 none forwarded support.example.com support.example.com pass auone.jp pass 209.85.214.175 6 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.175 1 none forwarded support.example.com support.example.com pass modestonuts.com neutral 209.85.214.176 1 none forwarded support.example.com support.example.com pass bitrhymes.com neutral 209.85.214.176 3 none forwarded support.example.com support.example.com pass mypoutylips.com neutral 209.85.214.177 1 none forwarded support.example.com support.example.com pass overnighttolondon.com neutral 209.85.214.178 4 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.178 2 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass budavill.hu neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass mypoutylips.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass sandorszabolcs.com neutral 209.85.214.179 2 none forwarded support.example.com support.example.com pass rockrena.com neutral 209.85.214.179 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.214.179 14 none forwarded support.example.com support.example.com pass alumni.gsb.stanford.edu neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass akarag.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass w3haus.com.br neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass tedrec.com neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass thrivepoint.com neutral 209.85.215.173 14 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.215.174 1 none forwarded support.example.com support.example.com pass irishcentral.com neutral 209.85.215.176 1 none forwarded support.example.com support.example.com pass makhsoom.com neutral 209.85.216.169 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.169 1 none forwarded support.example.com support.example.com pass thewebsiteguys.co.nz neutral 209.85.216.170 1 none forwarded example.com example.com pass pucp.pe pass 209.85.216.170 2 none forwarded support.example.com support.example.com pass apis3.com pass 209.85.216.170 1 none forwarded support.example.com support.example.com pass vype.com neutral 209.85.216.172 11 none forwarded support.example.com support.example.com pass mindvalley.com pass 209.85.216.174 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.174 1 none forwarded support.example.com support.example.com pass nurturestore.co.uk neutral 209.85.216.175 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.175 1 none forwarded support.example.com support.example.com pass njit.edu neutral 209.85.216.178 1 none forwarded support.example.com support.example.com pass grooves.co.jp pass 209.85.216.178 1 none forwarded support.example.com support.example.com pass mercadodireto.com neutral 209.85.216.182 1 none forwarded support.example.com support.example.com pass intelince.es neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass akiza.com neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.217.172 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.172 1 none forwarded support.example.com support.example.com pass jointventurejewelry.com neutral 209.85.217.173 2 none forwarded support.example.com support.example.com pass highsierramusic.com neutral 209.85.217.175 1 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.217.176 3 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.179 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.217.179 1 none forwarded support.example.com support.example.com pass 4stepsahead.nl pass 209.85.217.179 1 none forwarded support.example.com support.example.com pass istanbul.com neutral 209.85.217.179 1 none forwarded support.example.com support.example.com pass fractalmedia.mx neutral 209.85.217.181 1 none forwarded example.com example.com pass ryzing.com neutral 209.85.217.181 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.181 2 none forwarded support.example.com support.example.com pass smove.sg neutral 209.85.217.182 1 none forwarded support.example.com support.example.com pass druup.com neutral 209.85.220.169 4 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.220.175 2 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.220.176 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.220.179 1 none forwarded support.example.com support.example.com pass yellowdogmedia.com neutral 209.85.220.182 2 none forwarded support.example.com support.example.com pass patepalo.com neutral 211.134.181.73 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.59.199.212 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.69.175.112 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.165.64.100 1 none forwarded support.example.com support.example.com pass gmx.ch pass 213.165.64.100 3 none forwarded support.example.com support.example.com pass support.example.com fail 213.205.33.221 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.229.120.86 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.200.145.36 3 none forwarded support.example.com support.example.com pass support.example.com fail 216.200.145.37 2 none forwarded support.example.com support.example.com pass support.example.com fail 216.200.145.38 4 none forwarded support.example.com support.example.com pass support.example.com fail 219.114.76.201 1 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.145.109 1 none forwarded support.example.com support.example.com pass gmail.com neutral 59.167.229.197 1 none forwarded support.example.com support.example.com pass gmail.com neutral 65.254.253.105 1 none forwarded support.example.com support.example.com pass keymaster.org neutral 66.220.144.139 10 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.148 2 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.157 2 none forwarded support.example.com support.example.com pass support.example.com pass 67.212.186.202 6 none forwarded example.com example.com pass example.com fail 68.230.241.136 1 none forwarded support.example.com support.example.com pass support.example.com fail 68.230.241.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.232.138 14 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.139 9 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.142 15 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.143 6 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.145 14 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.149 12 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.150 14 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.156 7 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.157 9 none forwarded support.example.com support.example.com pass support.example.com pass 69.174.114.200 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.163 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.220.221.145 1 none forwarded example.com example.com pass example.com fail 74.220.222.159 1 none forwarded support.example.com support.example.com pass support.example.com fail 78.159.111.131 9 none forwarded support.example.com support.example.com pass support.example.com fail 80.237.138.246 1 none forwarded support.example.com support.example.com pass emmi-nail.de neutral 80.237.138.250 1 none forwarded example.com example.com pass hempel-seifert.de neutral 80.237.138.252 1 none forwarded support.example.com support.example.com pass emmi-nail.de neutral 81.169.146.145 4 none forwarded example.com example.com pass example.com fail 81.169.146.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.169.146.149 5 none forwarded example.com example.com pass example.com fail 83.223.101.224 8 none forwarded support.example.com support.example.com pass gmail.com neutral 94.100.176.123 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.140 1 none forwarded support.example.com support.example.com pass support.example.com fail 109.109.130.3 1 reject forwarded mx.example.com none gameofnerds.vps.ourlinuxnetwork.com neutral 128.59.28.173 1 reject forwarded example.com none example.com fail 151.189.21.43 1 reject forwarded example.com none example.com fail 151.189.21.58 1 reject forwarded example.com mail6.us2.mcsv.net pass mail6.us2.mcsv.net neutral 165.212.10.23 1 reject forwarded example.com none example.com fail 166.70.13.231 1 reject forwarded example.com none ns.wizbill.com neutral 167.206.5.185 1 reject forwarded example.com none example.com fail 17.148.16.101 1 reject forwarded support.example.com support.example.com fail support.example.com fail 17.148.16.103 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.105 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 171.67.219.86 3 reject forwarded example.com none example.com fail 178.32.101.78 1 reject forwarded example.com example.com neutral example.com fail 187.61.57.120 1 reject forwarded example.com none example.com fail 189.14.106.50 2 reject forwarded example.com none hosting3.isun.biz neutral 190.210.48.67 1 reject forwarded support.example.com support.example.com neutral kennedy.edu.ar neutral 192.115.104.8 1 reject forwarded example.com none example.com fail 192.167.219.2 3 reject forwarded example.com none example.com fail 194.25.134.81 1 reject forwarded example.com mail6.us2.mcsv.net pass mail6.us2.mcsv.net neutral 200.50.86.118 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 204.45.157.10 1 reject forwarded example.com none example.com fail 208.29.63.112 1 reject forwarded example.com none example.com fail 208.65.145.71 1 reject forwarded example.com example.com neutral collinscenter.org neutral 209.128.116.6 1 reject forwarded example.com none example.com fail 209.85.212.42 1 reject forwarded example.com example.com neutral bitrhymes.com neutral 209.85.212.42 1 reject forwarded example.com example.com neutral makemebabies.com neutral 210.157.23.93 1 reject forwarded example.com none post.freeml.com pass 210.233.3.178 50 reject forwarded example.com none example.com fail 212.159.14.17 2 reject forwarded example.com none example.com fail 212.69.206.80 1 reject forwarded example.com none example.com fail 212.97.132.42 2 reject forwarded example.com none ws48.surf-town.net neutral 216.146.33.55 1 reject forwarded example.com none example.com fail 216.17.14.164 1 reject forwarded support.example.com none securence.com pass 216.187.85.33 1 reject forwarded example.com none example.com fail 216.197.64.90 1 reject forwarded support.example.com support.example.com neutral redlightmanagement.com neutral 216.218.142.4 1 reject forwarded example.com none example.com fail 216.237.33.42 39 reject forwarded example.com none example.com fail 24.201.245.36 2 reject forwarded example.com none example.com fail 64.131.70.139 1 reject forwarded example.com none example.com fail 66.63.128.162 1 reject forwarded example.com none example.com fail 69.36.184.124 17 reject forwarded example.com none example.com fail 70.40.213.137 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.167.218.24 1 reject forwarded mx.example.com none p3plsmtp01-04.prod.phx3.secureserver.net neutral 72.233.72.153 6 reject forwarded mx.example.com none dc155.4shared.com neutral 72.47.234.154 2 reject forwarded example.com none example.com fail 74.220.205.68 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 76.162.254.84 1 reject forwarded example.com none example.com fail 76.74.155.194 2 reject forwarded example.com none example.com fail 79.170.40.203 1 reject forwarded example.com none example.com fail 80.12.203.185 1 reject forwarded example.com none example.com fail 85.214.22.208 2 reject forwarded example.com none example.com fail 85.234.150.24 1 reject forwarded example.com paypal.com pass paypal.com softfail 94.136.63.160 2 reject forwarded example.com none example.com fail 95.154.203.94 1 reject forwarded example.com paypal.com pass paypal.com softfail 96.44.237.218 1 reject forwarded support.example.com support.example.com neutral cabotlinks.com neutral 128.196.130.200 2 none forwarded support.example.com support.example.com pass support.example.com fail 129.219.117.222 1 none forwarded support.example.com support.example.com pass gmail.com neutral 173.201.192.161 6 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.192.191 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.161 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.230.255.215 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.168.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.201.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.143.242.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.196.254 1 none forwarded example.com example.com pass example.com fail 193.228.150.110 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.116.202.133 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.234.116.133 1 none forwarded support.example.com support.example.com pass support.example.com fail 199.236.103.243 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.104.149.143 2 none forwarded support.example.com support.example.com pass support.example.com fail 206.245.164.186 1 none forwarded example.com example.com pass example.com fail 207.126.144.121 1 none forwarded support.example.com support.example.com pass adwebmaroc.com pass 207.126.144.127 1 none forwarded support.example.com support.example.com pass builder.hu softfail 207.179.182.173 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.210.248.107 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.144.108 4 none forwarded support.example.com support.example.com pass support.example.com fail 212.115.192.231 2 none forwarded example.com example.com pass example.com fail 216.187.178.106 1 none forwarded support.example.com support.example.com pass mercurycsc.com pass 193.10.8.10 1 reject mailing_list groups.example.com examplemail.com neutral dis.dsv.su.se neutral 209.85.160.70 2 none mailing_list support.example.com none mamadigital.com pass 209.85.160.71 4 none mailing_list support.example.com none httpool.com pass 209.85.160.72 2 none mailing_list support.example.com none yieldsoftware.com pass 209.85.210.70 4 none mailing_list support.example.com none carsauto.com pass 209.85.210.70 72 none mailing_list support.example.com none reverbnation.com pass 209.85.210.71 50 none mailing_list example.com none 6waves.com pass 209.85.210.71 15 none mailing_list support.example.com none publik.com.tr pass 209.85.210.71 1 none mailing_list support.example.com none bluestatedigital.com pass 209.85.210.72 1 none mailing_list support.example.com none ecdesk.jp pass 209.85.210.72 4 none mailing_list support.example.com none wearesocial.net pass 209.85.210.72 6 none mailing_list support.example.com none weddingtonway.com pass 118.127.34.182 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 125.206.115.54 1 reject forwarded example.com none example.com fail 128.121.64.102 1 reject forwarded example.com none example.com fail 128.121.64.102 1 reject forwarded example.com none hosting3.isun.biz neutral 128.214.173.75 1 reject forwarded example.com none example.com fail 128.233.101.16 1 reject forwarded mx.example.com none cs.usask.ca neutral 129.105.238.69 1 reject forwarded example.com none example.com fail 130.64.213.205 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 140.247.35.202 1 reject forwarded example.com none example.com fail 161.58.175.185 1 reject forwarded example.com none example.com fail 169.232.46.170 1 reject forwarded example.com none example.com fail 184.173.19.137 2 reject forwarded example.com none example.com fail 188.65.115.210 1 reject forwarded example.com none example.com fail 195.141.111.82 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 195.43.191.138 2 reject forwarded support.example.com support.example.com fail support.example.com fail 198.212.10.117 1 reject forwarded example.com none example.com fail 200.187.78.102 1 reject forwarded example.com none infolink.com.br pass 200.50.170.193 1 reject forwarded example.com none example.com fail 201.216.231.80 1 reject forwarded example.com example.com neutral senado.gov.ar neutral 203.250.104.19 1 reject forwarded example.com none kitech.re.kr pass 204.174.223.74 1 reject forwarded example.com none example.com fail 204.186.204.49 1 reject forwarded example.com none example.com fail 204.202.242.23 2 reject forwarded example.com none example.com fail 205.139.110.21 1 reject forwarded support.example.com support.example.com neutral schoolspecialty.com pass 206.246.180.25 14 reject forwarded example.com none example.com fail 206.248.144.68 3 reject forwarded example.com none example.com fail 207.155.252.24 2 reject forwarded example.com none example.com fail 207.251.194.40 1 reject forwarded example.com none example.com fail 207.69.195.100 1 reject forwarded example.com none example.com fail 207.97.245.150 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 208.180.40.102 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 208.218.130.13 1 reject forwarded example.com none example.com fail 209.67.128.250 1 reject forwarded example.com none example.com fail 209.85.161.177 1 reject forwarded example.com example.com neutral createandspread.com pass 209.85.213.174 1 reject forwarded support.example.com none thrillon.com neutral 209.85.214.174 1 reject forwarded example.com example.com neutral fiveopoker.com neutral 213.171.216.73 1 reject forwarded example.com none example.com fail 213.175.219.30 1 reject forwarded example.com none example.com fail 216.227.216.45 1 reject forwarded example.com none example.com fail 216.55.169.229 2 reject forwarded example.com none example.com fail 216.82.249.131 2 reject forwarded example.com none example.com fail 46.255.227.253 1 reject forwarded support.example.com support.example.com neutral centrum.cz pass 66.100.167.192 6 reject forwarded example.com none example.com fail 67.139.134.251 1 reject forwarded example.com none example.com fail 68.230.241.151 1 reject forwarded example.com none example.com fail 69.171.232.135 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.167.218.164 1 reject forwarded proxymail.example.com shopkick.com pass bounce.secureserver.net pass 74.202.142.190 1 reject forwarded example.com none example.com fail 74.220.192.153 1 reject forwarded example.com gmail.com pass gmail.com neutral 74.220.203.114 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 81.169.146.148 1 reject forwarded mx.example.com none mi-ob.rzone.de neutral 82.132.130.150 2 reject forwarded example.com none example.com fail 82.165.133.100 3 reject forwarded example.com none example.com fail 85.158.140.211 1 reject forwarded example.com none example.com fail 94.100.176.150 1 reject forwarded groups.example.com none mx29.mail.ru neutral 99.192.160.198 1 reject forwarded example.com none example.com fail 194.14.51.10 5 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 95.172.88.25 9 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.161.199 1 none mailing_list support.example.com none httpool.com pass 209.85.212.198 8 none mailing_list support.example.com none graphscience.com pass 209.85.214.199 2 none mailing_list support.example.com none plodni.com pass 209.85.217.198 10 none mailing_list support.example.com none graphscience.com pass 115.160.176.210 70 reject forwarded example.com none example.com fail 121.111.227.144 1 reject forwarded example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.145 1 reject forwarded example.com example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.150 1 reject forwarded example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.152 101 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.153 3 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 122.152.128.110 1 reject forwarded example.com none example.com fail 123.242.224.154 2 reject forwarded example.com none example.com fail 128.125.137.214 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 141.211.176.134 2 reject forwarded example.com none example.com fail 169.229.218.142 1 reject forwarded example.com none example.com fail 173.192.229.146 1 reject forwarded example.com none no10.nayana.kr neutral 174.120.171.226 1 reject forwarded example.com none example.com fail 174.122.101.137 1 reject forwarded example.com none example.com fail 184.173.246.233 1 reject forwarded example.com none example.com fail 195.245.116.145 1 reject forwarded example.com none lubra.com neutral 198.145.186.131 1 reject forwarded example.com none example.com fail 199.204.248.101 1 reject forwarded example.com none example.com fail 199.231.136.134 1 reject forwarded example.com none example.com fail 199.231.136.149 10 reject forwarded example.com none example.com fail 202.216.228.148 1 reject forwarded example.com none example.com fail 203.144.173.151 1 reject forwarded example.com none example.com fail 204.200.195.216 16 reject forwarded example.com none example.com fail 206.130.114.154 1 reject forwarded example.com none example.com fail 207.155.252.186 1 reject forwarded example.com none example.com fail 208.131.134.193 24 reject forwarded example.com none example.com fail 209.237.134.233 1 reject forwarded example.com none example.com fail 213.171.216.129 1 reject forwarded example.com none example.com fail 216.104.162.153 2 reject forwarded example.com none example.com fail 220.228.147.131 1 reject forwarded mx.example.com none email.libertytimes.com.tw neutral 209.85.160.69 7 reject mailing_list support.example.com none rathbonedigital.com softfail 209.85.160.70 1 reject mailing_list example.com none magnetjoy.com neutral 209.85.160.70 2 reject mailing_list support.example.com none souq.com softfail 209.85.160.70 6 reject mailing_list support.example.com none fyndiq.se neutral 209.85.160.71 5 reject mailing_list support.example.com none aainc.co.jp pass 209.85.160.71 6 reject mailing_list support.example.com none wishpot.com neutral 209.85.160.71 2 reject mailing_list support.example.com none pdresources.org softfail 209.85.160.71 2 reject mailing_list support.example.com none timothybeach.com neutral 209.85.160.71 8 reject mailing_list support.example.com none socialagency.com.br softfail 209.85.160.71 1 reject mailing_list support.example.com none standanddeliverrecords.com neutral 209.85.160.72 8 reject mailing_list support.example.com none taykey.com neutral 209.85.160.72 1 reject mailing_list support.example.com none webxites.com neutral 209.85.161.69 4 reject mailing_list support.example.com none varlabs.com neutral 209.85.210.69 2 reject mailing_list support.example.com none woods.com.ky neutral 209.85.210.69 1 reject mailing_list support.example.com none mediaversellc.com neutral 209.85.210.70 6 reject mailing_list support.example.com none irep.co.jp pass 209.85.210.70 9 reject mailing_list support.example.com none quirk.biz neutral 209.85.210.71 3 reject mailing_list support.example.com none clickrmedia.com neutral 209.85.210.72 1 reject mailing_list support.example.com none dustya.com neutral 209.85.210.72 8 reject mailing_list support.example.com none productmadness.com softfail 209.85.212.70 3 reject mailing_list support.example.com none fyndiq.se neutral 209.85.212.70 14 reject mailing_list support.example.com none graphscience.com pass 209.85.213.71 1 reject mailing_list support.example.com none confliktarts.com softfail 209.85.214.70 7 reject mailing_list support.example.com none graphscience.com pass 209.85.215.70 3 reject mailing_list support.example.com none beaffinitive.com neutral 209.85.216.69 3 reject mailing_list example.com none ultraslan.com neutral 209.85.216.69 8 reject mailing_list support.example.com none stretchdigital.com neutral 170.140.50.232 6 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.197 3 reject mailing_list support.example.com none adsoul.pt neutral 209.85.161.198 4 reject mailing_list support.example.com none snsplus.com neutral 209.85.213.198 2 reject mailing_list support.example.com none snsplus.com neutral 209.85.214.197 10 reject mailing_list support.example.com none grabone.ie neutral 209.85.214.200 7 reject mailing_list support.example.com none rise.net neutral 209.85.216.200 2 reject mailing_list example.com none idacreative.com neutral 209.85.220.197 7 reject mailing_list support.example.com none rathbonedigital.com softfail 210.128.50.112 1 reject mailing_list example.com example.com fail japan-romance.com neutral 74.125.149.135 3 reject mailing_list support.example.com none attentionusa.com neutral 209.85.160.72 8 none forwarded mailing_list support.example.com none watercooler-inc.com pass 209.85.216.70 1 none forwarded mailing_list support.example.com none hungrymachine.com pass 74.125.245.84 3 none forwarded mailing_list support.example.com none trada.com pass 95.172.88.28 1 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 98.139.165.3 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 209.85.213.171 6 none forwarded mailing_list support.example.com none fetise.com pass 209.85.214.171 36 none forwarded mailing_list support.example.com none fetise.com pass 209.85.215.200 3 none forwarded mailing_list support.example.com none sparkker.com pass 209.85.160.69 3 reject forwarded mailing_list example.com none netvlies.net neutral 209.85.160.69 1 reject forwarded mailing_list support.example.com none helsinkicapitalpartners.com neutral 209.85.210.69 25 reject forwarded mailing_list support.example.com none grandplanet.com neutral 209.85.212.71 1 reject forwarded mailing_list support.example.com none appsumo.com softfail 209.85.212.72 1 reject forwarded mailing_list support.example.com none interfacetalent.com neutral 209.85.213.70 14 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.213.71 18 reject forwarded mailing_list support.example.com none adtz.com neutral 209.85.214.50 4 reject forwarded mailing_list example.com none desgames.com pass 209.85.216.70 6 reject forwarded mailing_list support.example.com none convertsimply.com neutral 74.125.149.69 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.88 4 reject forwarded mailing_list support.example.com none blabbermouthsocial.com neutral 74.125.82.200 7 reject forwarded mailing_list support.example.com none elogia.net softfail 98.136.218.53 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.54 1 reject forwarded mailing_list reply.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.218.54 15 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.55 17 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.56 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.65 1 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.99 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.138.215.86 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.37 5 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.71 15 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.165.16 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.21 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.23 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.53 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.55 15 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.165.63 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 173.164.204.18 2 reject forwarded mailing_list groups.example.com none groups.example.com neutral 209.85.161.198 6 reject forwarded mailing_list support.example.com none crane-west.com neutral 209.85.214.199 9 reject forwarded mailing_list support.example.com none adtz.com neutral 209.85.215.198 4 reject forwarded mailing_list support.example.com none miraiespana.com neutral 209.85.216.197 12 reject forwarded mailing_list support.example.com none playerize.com neutral 209.85.216.199 9 reject forwarded mailing_list support.example.com none adtz.com neutral 209.85.220.199 3 reject forwarded mailing_list support.example.com none populis.com neutral 66.220.144.136 1 reject forwarded mailing_list example.com none imageinterview.com neutral 66.220.144.138 6 reject forwarded mailing_list support.example.com none 6waves.com softfail 66.220.144.140 3 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.142 1 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.143 3 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.144 1 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 66.220.144.145 8 reject forwarded mailing_list support.example.com none schoolofrock.com softfail 66.220.144.148 1 reject forwarded mailing_list support.example.com none sv4u.net neutral 66.220.144.150 1 reject forwarded mailing_list support.example.com none davestern.com neutral 66.220.144.156 1 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 66.220.144.159 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.135 1 reject forwarded mailing_list support.example.com none dejimedia.com softfail 69.171.232.136 3 reject forwarded mailing_list support.example.com none weddingtonway.com softfail 69.171.232.138 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.138 8 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.139 1 reject forwarded mailing_list support.example.com none icog.net neutral 69.171.232.144 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.144 2 reject forwarded mailing_list support.example.com none publik.com.tr softfail 69.171.232.147 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 69.171.232.148 5 reject forwarded mailing_list support.example.com none ecdesk.jp softfail 69.171.232.152 4 reject forwarded mailing_list support.example.com none publik.com.tr softfail 74.125.149.145 25 reject forwarded mailing_list support.example.com none sponsoredlinx.com neutral 98.136.219.101 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.138 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.143 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.156 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.177 2 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.177 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.190 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.218 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.167 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.228 13 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.232 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.233 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.214.238 29 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.105 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.118 2 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.118 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.125 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.161 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.169 20 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.188 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.106 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.103 4 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.156 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.161 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.165 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.176 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.181 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 213.199.154.204 1 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 209.85.160.71 4 none trusted_forwarder mailing_list support.example.com sale.com pass support.example.com pass sale.com pass support.example.com pass 209.85.212.71 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.212.71 2 none trusted_forwarder mailing_list support.example.com sale.com pass support.example.com pass sale.com pass support.example.com pass 209.85.214.198 6 none trusted_forwarder mailing_list support.example.com antevenio.com pass support.example.com pass antevenio.com pass support.example.com pass 209.85.214.200 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.214.200 2 none trusted_forwarder mailing_list support.example.com bidorbuy.co.za pass support.example.com pass bidorbuy.co.za pass support.example.com pass 209.85.160.72 4 none forwarded trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de pass support.example.com pass 209.85.212.71 18 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 193.252.22.214 1 none forwarded trusted_forwarder mailing_list example.com googlegroups.com pass example.com pass googlegroups.com neutral example.com pass 69.171.232.145 1 none forwarded trusted_forwarder mailing_list support.example.com rathbonedigital.com pass support.example.com pass rathbonedigital.com softfail support.example.com pass 64.18.1.41 1 none support.example.com support.example.com pass support.example.com fail 107.1.0.5 1 reject support.example.com support.example.com neutral support.example.com fail 64.18.1.121 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.133 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.57 1 reject example.com none example.com fail 64.18.1.76 1 reject example.com none example.com fail 67.18.16.2 4 reject example.com none gator480.hostgator.com pass 67.63.66.6 1 reject example.com none example.com fail 70.42.0.11 26 reject example.com none example.com fail 66.11.225.78 2 none example.com example.com pass rothbart.info neutral 75.126.35.35 1 none example.com example.com pass example.com fail 38.112.87.4 1 reject reply.example.com none igw.rainbowschools.ca neutral 64.18.1.107 1 reject example.com none example.com fail 64.18.1.205 1 reject example.com none example.com fail 64.77.49.90 1 reject example.com none example.com fail 72.3.224.47 1 reject example.com none example.com fail 74.86.38.34 2 reject example.com none example.com fail 8.24.153.35 1 reject example.com none example.com fail 81.92.96.45 1 reject example.com none example.com fail 98.129.35.4 1 reject support.example.com support.example.com neutral support.example.com fail 140.142.33.32 1 none example.com example.com pass example.com fail 192.156.134.3 1 none support.example.com support.example.com pass support.example.com fail 216.146.32.39 1 none support.example.com support.example.com pass support.example.com fail 66.220.157.70 18 none example.com example.com fail example.com pass 66.220.157.70 324 none example.com example.com pass example.com pass 66.220.157.76 30 none example.com example.com fail example.com pass 66.220.157.88 370 none example.com example.com pass example.com pass 66.220.157.91 287 none example.com example.com pass example.com pass 66.220.157.93 8 none example.com example.com fail example.com pass 66.220.157.94 11 none example.com example.com fail example.com pass 72.32.253.115 1 none support.example.com support.example.com pass support.example.com fail 182.18.139.2 2 reject example.com none example.com fail 188.3.217.18 1 reject example.com none taupower.se fail 192.12.12.49 1 reject example.com none example.com fail 198.30.126.4 1 reject support.example.com support.example.com neutral support.example.com fail 212.227.17.6 2 reject example.com none example.com fail 222.35.2.149 9 reject example.com none example.com fail 62.146.27.97 1 reject example.com none chat4.fidion.de neutral 64.35.176.47 1 reject example.com none example.com fail 67.222.39.59 1 reject example.com none example.com fail 69.27.174.78 9 reject example.com none example.com fail 69.73.188.93 2 reject example.com none galant.nswebhost.com neutral 72.3.221.138 2 reject example.com none example.com fail 91.206.8.125 3 reject reply.example.com examplemail.com neutral reply.example.com neutral 95.172.88.30 17 reject reply.example.com examplemail.com neutral reply.example.com neutral 98.130.1.199 1 reject example.com none example.com fail 128.120.32.142 2 none example.com example.com pass example.com fail 193.255.135.54 1 none support.example.com support.example.com pass support.example.com fail 66.220.144.151 1173 none support.example.com support.example.com pass support.example.com pass 66.220.144.157 1 none example.com none example.com pass 66.220.144.159 49 none example.com example.com neutral example.com pass 66.220.144.159 1196 none support.example.com support.example.com pass support.example.com pass 66.220.155.137 8 none example.com example.com neutral example.com pass 66.220.155.139 464 none support.example.com support.example.com pass support.example.com pass 66.220.155.144 567 none support.example.com support.example.com pass support.example.com pass 66.220.155.152 549 none support.example.com support.example.com pass support.example.com pass 66.220.155.157 3 none example.com example.com neutral example.com pass 66.220.155.157 431 none support.example.com support.example.com pass support.example.com pass 69.171.232.136 47 none example.com example.com neutral example.com pass 69.171.232.143 57 none example.com example.com neutral example.com pass 69.171.232.143 1658 none support.example.com support.example.com pass support.example.com pass 69.171.232.146 52 none example.com example.com neutral example.com pass 69.171.232.146 1702 none support.example.com support.example.com pass support.example.com pass 69.171.232.150 45 none example.com example.com neutral example.com pass 69.171.232.156 1614 none support.example.com support.example.com pass support.example.com pass 69.171.232.158 1695 none support.example.com support.example.com pass support.example.com pass 112.78.116.41 1 reject example.com none imunet.jp pass 130.111.32.66 1 reject reply.example.com none reply.example.com neutral 170.140.52.40 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 173.45.73.118 150 reject example.com none sv1022.hosting-server-1022.com neutral 176.62.71.194 21 reject example.com none example.com fail 188.49.60.209 8 reject example.com none bankofdeerfield.com fail 200.43.236.22 1 reject example.com none example.com fail 203.82.210.85 1 reject example.com none example.com fail 204.209.91.56 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 204.209.91.56 1 reject reply.example.com examplemail.com neutral spamfilter.gypsd.ca neutral 208.64.38.210 2 reject example.com none example.com fail 209.25.195.86 1 reject example.com none example.com fail 216.17.24.242 5 reject groups.example.com none groups.example.com neutral 216.237.33.42 8 reject example.com none example.com fail 221.141.1.164 4 reject example.com none example.com fail 64.27.111.130 2 reject example.com none www.cobaltsystems.com neutral 67.210.122.48 3 reject example.com none lucius.lunariffic.com neutral 67.210.240.91 1 reject example.com none vg1.bible.org pass 68.188.43.153 7 reject example.com none example.com fail 69.171.244.44 760 reject mx.example.com none smtpin.mx.example.com neutral 69.171.244.45 556 reject mx.example.com none smtpin.mx.example.com neutral 69.191.192.14 4 reject groups.example.com none bloomberg.net pass 69.48.129.137 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 71.19.184.196 6 reject reply.example.com none reply.example.com neutral 72.47.234.154 23 reject example.com none example.com fail 74.120.148.91 1 reject proxymail.example.com gigya.com pass gigya.com pass 74.125.149.60 1 reject mx.example.com none psmtp.com neutral 74.52.105.242 1 reject example.com none example.com fail 74.52.116.114 1 reject example.com none example.com fail 77.120.116.46 3 reject example.com none example.com fail 79.54.224.114 1 reject example.com none example.com fail 87.106.240.34 14 reject example.com none example.com fail 89.237.41.194 13 reject example.com none example.com fail 91.121.209.65 1 reject example.com none example.com fail 95.108.130.94 1 reject groups.example.com none forward12.mail.yandex.net neutral 184.173.196.220 1 none support.example.com support.example.com pass support.example.com fail 207.126.144.223 1 none support.example.com support.example.com pass support.example.com fail 128.253.83.164 1 reject example.com none example.com fail 169.232.46.181 1 reject example.com none example.com fail 169.232.47.177 1 reject example.com none example.com fail 174.121.151.98 2 reject example.com none gator1184.hostgator.com pass 174.121.97.181 1 reject example.com none example.com fail 174.123.176.66 1 reject example.com none example.com fail 184.154.136.42 1 reject example.com none example.com fail 184.173.197.22 1 reject example.com none example.com fail 188.165.159.97 3 reject example.com none example.com fail 193.27.192.135 3 reject example.com none example.com fail 205.134.238.37 1 reject example.com none example.com fail 206.248.144.68 3 reject example.com none example.com fail 207.97.245.147 1 reject example.com none example.com fail 207.97.245.149 1 reject example.com none example.com fail 207.97.245.150 1 reject example.com none example.com fail 207.97.245.156 1 reject example.com none example.com fail 208.131.134.51 3 reject example.com none example.com fail 211.133.134.72 2 reject support.example.com support.example.com fail choreo.co.jp pass 212.47.211.144 1 reject example.com none avatudalbum.pri.ee neutral 66.220.144.135 532 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.156 513 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.158 522 reject m.example.com m.example.com neutral m.example.com neutral 69.163.227.131 1 reject reply.example.com none ps20448.dreamhostps.com neutral 69.171.232.137 492 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.142 459 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.143 526 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.149 502 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.151 468 reject m.example.com m.example.com neutral m.example.com neutral 69.171.240.246 4 reject example.com none example.com fail 69.227.151.160 3 reject example.com none example.com fail 72.167.234.240 102 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 72.233.119.195 1 reject example.com none wordpress.com pass 74.113.232.145 1 reject proxymail.example.com none proxymail.example.com neutral 74.202.142.112 7 reject example.com none example.com fail 82.166.192.210 1 reject example.com none dom.netrun.co.il neutral 82.215.198.212 2 reject example.com none hamina-group.org neutral 84.201.187.148 1 reject groups.example.com none forward3h.mail.yandex.net neutral 123.242.224.154 19 reject example.com none example.com fail 174.120.243.162 1 reject example.com none example.com fail 174.142.239.250 2 reject reply.example.com examplemail.com neutral mail.selfdesign.org neutral 178.218.212.210 20 reject example.com none example.com fail 188.138.112.172 2 reject example.com none example.com fail 198.236.105.220 3 reject reply.example.com none reply.example.com neutral 207.189.101.117 1 reject example.com none example.com fail 208.131.134.193 5 reject example.com none example.com fail 209.150.128.137 1 reject example.com none example.com fail 209.217.234.227 1 reject example.com none zavala.nswebhost.com neutral 212.227.126.187 1 reject example.com none srs.kundenserver.de pass 213.171.197.232 3 reject example.com none main.dannix.co.uk neutral 216.139.221.177 17 reject example.com none example.com fail 64.18.0.58 1 none forwarded support.example.com support.example.com pass gmail.com pass 74.54.43.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.82.85.2 1 none forwarded support.example.com support.example.com pass srs.bis6.us.blackberry.com pass 80.67.18.5 2 none forwarded support.example.com support.example.com pass support.example.com fail 146.6.65.69 1 none forwarded support.example.com support.example.com pass support.example.com fail 159.253.0.9 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.11.31 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.80.46 2 none forwarded support.example.com support.example.com pass support.example.com fail 65.54.61.85 1 none forwarded example.com example.com pass hotmail.com pass 65.54.61.89 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.13 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.34.18 1 none forwarded example.com example.com pass hotmail.com pass 65.55.90.21 1 none forwarded example.com example.com pass hotmail.com pass 65.55.90.24 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.90.24 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.27 1 none forwarded example.com example.com pass hotmail.com pass 66.40.55.83 2 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.184.9 1 none forwarded support.example.com support.example.com pass maxx12music.com pass 66.96.188.8 1 none forwarded support.example.com support.example.com pass kemun.co.uk pass 66.96.188.8 1 none forwarded support.example.com support.example.com pass freewayentertainment.com pass 70.87.28.63 2 none forwarded example.com example.com pass example.com fail 72.35.23.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.208.5.90 1 none forwarded support.example.com support.example.com pass europe.com neutral 76.12.8.138 2 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.30.96 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.75.76.44 8 none forwarded support.example.com support.example.com pass support.example.com fail 79.99.44.57 1 none forwarded example.com example.com pass example.com fail 80.67.18.50 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.17 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.53 3 none forwarded support.example.com support.example.com pass support.example.com fail 81.21.76.58 1 none forwarded support.example.com support.example.com pass gmail.com neutral 87.48.171.6 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.12.8 2 none forwarded support.example.com support.example.com pass support.example.com fail 91.83.45.11 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.23.1.199 2 none forwarded support.example.com support.example.com pass support.example.com fail 18.7.68.25 1 reject forwarded example.com none example.com fail 64.18.1.68 2 reject forwarded example.com none example.com fail 64.18.3.28 1 reject forwarded example.com example.com neutral siena.edu neutral 64.78.52.8 2 reject forwarded support.example.com support.example.com neutral veteransunited.com pass 69.36.12.9 1 reject forwarded example.com none example.com fail 12.16.144.70 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.79.1.193 1 none forwarded example.com example.com pass example.com fail 130.85.25.78 1 none forwarded support.example.com support.example.com pass support.example.com fail 143.90.14.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.41.47.11 1 none forwarded example.com example.com pass example.com fail 201.76.49.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.86.60.11 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.64.78.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.5 5 none forwarded support.example.com support.example.com pass support.example.com fail 212.1.208.97 2 none forwarded example.com example.com pass example.com fail 216.53.64.15 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.99.193.4 1 none forwarded support.example.com support.example.com pass support.example.com fail 31.31.78.167 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.7.240.138 1 none forwarded example.com example.com pass example.com fail 50.97.96.106 1 none forwarded support.example.com support.example.com pass support.example.com fail 61.9.168.137 1 none forwarded support.example.com support.example.com pass support.example.com fail 61.9.189.143 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.146.33.46 2 none forwarded support.example.com support.example.com pass support.example.com fail 62.42.230.20 1 none forwarded example.com example.com pass resmaa12.ono.com neutral 65.55.116.16 1 none forwarded example.com example.com pass hotmail.com pass 65.55.116.21 1 none forwarded support.example.com support.example.com pass live.ca pass 65.55.116.25 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.27 1 none forwarded support.example.com support.example.com pass hotmail.co.uk pass 65.55.116.34 6 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.36 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.37 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.40 1 none forwarded example.com example.com pass hotmail.com pass 65.55.116.46 6 none forwarded support.example.com support.example.com pass hotmail.com pass 66.11.233.57 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.185.17 1 none forwarded support.example.com support.example.com pass bellablingshop.com pass 66.96.188.12 1 none forwarded support.example.com support.example.com pass riggimediainternational.com pass 66.96.189.16 1 none forwarded support.example.com support.example.com pass supremecomputersolutions.com neutral 67.18.18.122 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.18.90.131 6 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.51.52 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.58.21 1 none forwarded example.com example.com pass example.com fail 68.99.120.37 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.16.245.58 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.56.174.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.61.75.141 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.17.179 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.90.162.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.35.23.125 1 none forwarded support.example.com support.example.com pass fusemail.com pass 72.47.195.47 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.41 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 74.125.82.44 1 none forwarded support.example.com support.example.com pass votegiovanni.com neutral 74.125.82.47 1 none forwarded support.example.com support.example.com pass germinal.es neutral 74.125.82.47 1 none forwarded support.example.com support.example.com pass discoverly.com neutral 74.125.82.48 1 none forwarded support.example.com support.example.com pass bereksweaters.com neutral 74.125.82.51 1 none forwarded support.example.com support.example.com pass lifebank.com neutral 74.125.82.52 1 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.54 1 none forwarded support.example.com support.example.com pass vietserver.vn pass 74.125.82.54 1 none forwarded support.example.com support.example.com pass playboycondoms.ca neutral 76.96.59.227 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.94.249.25 4 none forwarded example.com example.com pass example.com fail 78.24.161.40 2 none forwarded support.example.com support.example.com pass support.example.com fail 8.29.137.201 48 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.104 4 none forwarded support.example.com support.example.com pass support.example.com fail 80.83.114.16 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.0.104.142 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.2.195.200 3 none forwarded support.example.com support.example.com pass support.example.com fail 81.93.64.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 83.235.66.36 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 168.95.5.40 1 reject forwarded example.com none example.com fail 208.93.0.48 1 reject forwarded example.com none example.com fail 209.68.2.63 1 reject forwarded example.com none example.com fail 212.58.6.43 1 reject forwarded support.example.com support.example.com fail aykac.com neutral 217.16.6.81 2 reject forwarded example.com none example.com fail 46.4.237.84 1 reject forwarded example.com none example.com fail 63.94.101.5 1 reject forwarded support.example.com support.example.com neutral domino.mervisdiamond.com neutral 64.18.0.185 1 reject forwarded support.example.com support.example.com neutral exprod5ob108.obsmtp.com neutral 64.18.1.102 1 reject forwarded example.com none example.com fail 64.18.1.122 1 reject forwarded example.com none example.com fail 64.18.1.138 2 reject forwarded example.com none example.com fail 64.18.1.177 1 reject forwarded example.com none example.com fail 64.64.5.107 2 reject forwarded example.com none example.com fail 65.49.3.231 1 reject forwarded example.com none example.com fail 65.55.88.11 1 reject forwarded reply.example.com examplemail.com neutral furman.edu neutral 65.55.88.12 1 reject forwarded support.example.com support.example.com fail jacksonville.edu neutral 65.55.88.13 1 reject forwarded reply.example.com examplemail.com neutral furman.edu neutral 65.55.90.19 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 69.168.84.2 1 reject forwarded example.com none example.com fail 69.20.14.18 1 reject forwarded example.com none example.com fail 69.31.13.11 1 reject forwarded example.com none example.com fail 69.64.159.2 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 69.89.29.85 1 reject forwarded example.com none example.com fail 69.89.30.96 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.10.34.60 1 reject forwarded example.com none example.com fail 80.202.8.16 1 reject forwarded example.com none example.com fail 82.211.49.9 55 reject forwarded example.com none example.com fail 95.160.6.10 5 reject forwarded example.com none example.com fail 128.187.16.55 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.187.16.58 1 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.90.68 3 none forwarded support.example.com support.example.com pass kcjones.org neutral 152.3.189.230 70 none forwarded support.example.com support.example.com pass support.example.com fail 171.67.219.72 1 none forwarded support.example.com support.example.com pass gmail.com neutral 171.67.219.72 20 none forwarded support.example.com support.example.com pass support.example.com fail 171.67.219.73 1 none forwarded support.example.com support.example.com pass gmail.com neutral 173.162.86.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.122.177.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 175.45.141.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 176.31.103.46 1 none forwarded support.example.com support.example.com pass support.example.com fail 189.38.85.185 2 none forwarded support.example.com support.example.com pass support.example.com fail 192.156.134.3 1 none forwarded support.example.com support.example.com pass support.example.com fail 192.197.96.13 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.17.41.200 2 none forwarded support.example.com support.example.com pass support.example.com fail 194.63.252.23 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.47.247.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.112.10.85 2 none forwarded support.example.com support.example.com pass support.example.com fail 207.58.184.86 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.67.194.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.104.11.12 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.190.25.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.41 1 none forwarded support.example.com support.example.com pass g.hmc.edu pass 209.85.160.42 1 none forwarded support.example.com support.example.com pass eviom.com neutral 209.85.160.44 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.49 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.51 1 none forwarded support.example.com support.example.com pass amcemail.com neutral 209.85.160.52 1 none forwarded support.example.com support.example.com pass g.hmc.edu pass 209.85.160.53 1 none forwarded support.example.com support.example.com pass vsichkioferti.bg softfail 209.85.210.41 1 none forwarded support.example.com support.example.com pass tessera.gr softfail 209.85.210.42 6 none forwarded support.example.com support.example.com pass dingle.fi neutral 209.85.210.43 1 none forwarded support.example.com support.example.com pass sofacil.com pass 209.85.210.44 1 none forwarded support.example.com support.example.com pass cacars.com neutral 209.85.210.46 1 none forwarded support.example.com support.example.com pass urbanara.com neutral 209.85.210.47 1 none forwarded support.example.com support.example.com pass targetedsocial.com neutral 209.85.210.48 1 none forwarded support.example.com support.example.com pass hazypictures.com neutral 209.85.210.49 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.49 3 none forwarded support.example.com support.example.com pass freshplanet.com pass 209.85.210.52 6 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.210.53 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.41 1 none forwarded support.example.com support.example.com pass performancemedia.com.br neutral 209.85.212.42 1 none forwarded support.example.com support.example.com pass maconraine.com neutral 209.85.212.43 2 none forwarded support.example.com support.example.com pass digidemon.eu neutral 209.85.212.46 1 none forwarded support.example.com support.example.com pass g.hmc.edu pass 209.85.212.46 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.46 1 none forwarded support.example.com support.example.com pass brovary.com.ua neutral 209.85.212.46 1 none forwarded support.example.com support.example.com pass altitudemarketing.com pass 209.85.212.50 1 none forwarded support.example.com support.example.com pass performancemedia.com.br neutral 209.85.212.52 1 none forwarded support.example.com support.example.com pass leemohan.com neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass zujo.com neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass richapplicationsconsulting.com pass 209.85.213.42 1 none forwarded support.example.com support.example.com pass eviom.com neutral 209.85.213.42 1 none forwarded support.example.com support.example.com pass rafaelmarin.net neutral 209.85.213.43 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.50 6 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.52 1 none forwarded support.example.com support.example.com pass bitrhymes.com neutral 209.85.213.53 2 none forwarded support.example.com support.example.com pass captainu.com pass 209.85.213.54 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.54 1 none forwarded support.example.com support.example.com pass dontgosouth.com neutral 209.85.214.45 1 none forwarded support.example.com support.example.com pass greenspot.travel pass 209.85.214.47 2 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.47 1 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.214.48 1 none forwarded support.example.com support.example.com pass nommensen.us pass 209.85.214.50 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.53 1 none forwarded support.example.com support.example.com pass grandplanet.com neutral 209.85.214.54 1 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.215.41 1 none forwarded support.example.com support.example.com pass auone.jp pass 209.85.215.41 1 none forwarded support.example.com support.example.com pass mcdowall.info neutral 209.85.215.41 1 none forwarded support.example.com support.example.com pass nativespeakers.ru softfail 209.85.215.42 1 none forwarded support.example.com support.example.com pass adct.org.tw neutral 209.85.215.43 1 none forwarded support.example.com support.example.com pass okawari.co.jp neutral 209.85.215.44 1 none forwarded support.example.com support.example.com pass itkomon.com neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass ualberta.ca neutral 209.85.215.46 1 none forwarded support.example.com support.example.com pass ngt.ge neutral 209.85.215.46 1 none forwarded support.example.com support.example.com pass stp-sf.org neutral 209.85.215.46 1 none forwarded support.example.com support.example.com pass imovasyon.com neutral 209.85.215.47 2 none forwarded support.example.com support.example.com pass nordeus.eu pass 209.85.215.47 1 none forwarded support.example.com support.example.com pass frubis.com neutral 209.85.215.50 1 none forwarded support.example.com support.example.com pass kamlacno.sk neutral 209.85.215.50 2 none forwarded support.example.com support.example.com pass activetape.com neutral 209.85.215.51 1 none forwarded support.example.com support.example.com pass vischolars.org fail 209.85.215.53 1 none forwarded example.com example.com pass gmail.com pass 209.85.215.54 1 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.54 1 none forwarded support.example.com support.example.com pass utahrealestate.net neutral 209.85.215.54 1 none forwarded support.example.com support.example.com pass lookoutpublishing.com neutral 209.85.216.45 1 none forwarded support.example.com support.example.com pass keldom.com pass 209.85.216.46 1 none forwarded support.example.com support.example.com pass grooves.co.jp pass 209.85.216.48 1 none forwarded support.example.com support.example.com pass email.arizona.edu neutral 209.85.216.51 5 none forwarded support.example.com support.example.com pass mindvalley.com pass 209.85.216.52 1 none forwarded support.example.com support.example.com pass pennclubofseattle.com neutral 210.131.4.235 1 none forwarded example.com example.com pass example.com fail 212.227.17.11 11 none forwarded support.example.com support.example.com pass web.de neutral 212.55.154.23 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.41.78.208 2 none forwarded support.example.com support.example.com pass esearchvision.com neutral 216.187.85.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.147.94.54 3 none forwarded support.example.com support.example.com pass support.example.com fail 218.219.70.25 1 none forwarded support.example.com support.example.com pass guppy.co.jp pass 31.192.212.70 2 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.137.128 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.157.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.157.17 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.157.24 2 none forwarded support.example.com support.example.com pass support.example.com fail 62.93.169.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 63.134.207.18 4 none forwarded support.example.com support.example.com pass support.example.com fail 63.134.207.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.131.64.170 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.34.165.177 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.50.161.253 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.51 2 none forwarded example.com example.com pass icfire.com pass 66.11.225.176 2 none forwarded support.example.com support.example.com pass kulix.org neutral 66.175.56.169 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.51.233 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.32.120.195 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.14.182.206 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.24 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 72.167.218.33 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 72.167.218.34 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.125.149.73 1 none forwarded support.example.com support.example.com pass darrenwilford.com pass 74.125.245.70 1 none forwarded support.example.com support.example.com pass alumni.brown.edu pass 74.125.245.84 1 none forwarded support.example.com support.example.com pass washingtonmedia.com neutral 74.125.245.94 2 none forwarded support.example.com support.example.com pass alumni.brown.edu pass 74.125.82.171 1 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.171 1 none forwarded support.example.com support.example.com pass viewgrant.com pass 74.125.82.173 1 none forwarded support.example.com support.example.com pass solucionweb.com softfail 74.125.82.177 1 none forwarded support.example.com support.example.com pass usakuma.com neutral 74.125.82.181 1 none forwarded support.example.com support.example.com pass muazamhadi.com neutral 74.54.218.210 6 none forwarded support.example.com support.example.com pass support.example.com fail 80.69.161.240 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.113.101.28 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.130.118.78 1 none forwarded support.example.com support.example.com pass support.example.com fail 86.110.226.48 2 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.185.64 3 none forwarded support.example.com support.example.com pass support.example.com fail 91.198.169.52 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.83 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.23.252.203 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.138.229.87 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.138.91.177 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.207 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.223 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.53.218 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.197 1 none forwarded support.example.com support.example.com pass support.example.com fail 116.0.23.202 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 129.79.1.190 1 reject forwarded example.com none example.com fail 161.76.28.49 1 reject forwarded example.com none example.com fail 167.206.10.6 1 reject forwarded support.example.com support.example.com fail support.example.com fail 167.206.10.6 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.91 1 reject forwarded example.com example.com neutral example.com fail 178.32.51.22 2 reject forwarded example.com none example.com fail 193.151.56.6 4 reject forwarded example.com none example.com fail 195.74.61.89 1 reject forwarded example.com none example.com fail 196.7.147.29 1 reject forwarded example.com none example.com fail 204.14.89.24 2 reject forwarded example.com none example.com fail 207.5.74.111 1 reject forwarded support.example.com support.example.com neutral oscilloscope.net neutral 208.68.17.94 4 reject forwarded example.com none example.com fail 208.97.132.5 3 reject forwarded example.com none example.com fail 212.97.34.14 11 reject forwarded example.com none example.com fail 213.75.39.14 1 reject forwarded mx.example.com none cpsmtpb-ews09.kpnxchange.com neutral 216.139.64.9 5 reject forwarded example.com none example.com fail 216.14.6.147 1 reject forwarded support.example.com support.example.com neutral drsandassociates.com neutral 216.40.42.17 1 reject forwarded example.com none example.com fail 50.28.14.226 28 reject forwarded example.com none example.com fail 62.219.11.42 1 reject forwarded example.com none example.com fail 62.84.145.20 8 reject forwarded support.example.com support.example.com neutral agentura-najisto.cz neutral 64.235.145.8 1 reject forwarded support.example.com support.example.com neutral artfire.com fail 64.26.60.138 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 64.68.200.71 2 reject forwarded example.com none example.com fail 68.216.179.6 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 68.67.106.87 1 reject forwarded example.com none example.com fail 68.99.120.38 1 reject forwarded example.com none example.com fail 69.65.42.227 1 reject forwarded example.com none example.com fail 69.89.17.240 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.90.163.45 1 reject forwarded example.com none example.com fail 72.47.205.41 2 reject forwarded example.com none example.com fail 74.125.82.49 7 reject forwarded example.com example.com neutral howzat.com pass 74.208.4.202 28 reject forwarded example.com none example.com fail 77.93.216.33 1 reject forwarded mx.example.com none tqn.cz neutral 81.17.252.25 5 reject forwarded support.example.com support.example.com neutral support.example.com fail 81.88.50.246 1 reject forwarded example.com none example.com fail 85.92.85.146 1 reject forwarded example.com none example.com fail 92.242.125.2 3 reject forwarded example.com none example.com fail 106.10.151.221 1 none forwarded example.com example.com pass example.com fail 116.251.204.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 116.251.204.41 2 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.14.132 3 none forwarded support.example.com support.example.com pass kcjones.org neutral 161.58.237.187 1 none forwarded support.example.com support.example.com pass gmail.com neutral 173.201.192.57 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.41 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 174.121.255.18 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.156.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.136.52.196 1 none forwarded example.com example.com pass example.com fail 174.142.34.249 1 none forwarded support.example.com support.example.com pass support.example.com fail 180.235.128.11 1 none forwarded example.com example.com pass example.com fail 184.106.206.90 2 none forwarded support.example.com support.example.com pass support.example.com fail 184.107.154.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.172.186.28 1 none forwarded support.example.com support.example.com pass support.example.com fail 190.196.10.200 1 none forwarded example.com example.com pass example.com fail 195.228.245.74 1 none forwarded example.com example.com pass example.com fail 199.237.211.69 2 none forwarded support.example.com support.example.com pass support.example.com fail 202.124.241.70 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.148.18.101 1 none forwarded example.com example.com pass example.com fail 203.170.85.133 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.175.174.32 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.155.248.50 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.228.238.14 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.69.195.101 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.177 8 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.202 3 none forwarded support.example.com support.example.com pass support.example.com fail 209.51.152.243 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.169 1 none forwarded support.example.com support.example.com pass designersandfriends.com neutral 209.85.160.175 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.160.177 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.178 1 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.161.169 1 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.161.169 1 none forwarded support.example.com support.example.com pass nergis.net softfail 209.85.161.173 1 none forwarded support.example.com support.example.com pass digijeff.com neutral 209.85.161.173 1 none forwarded support.example.com support.example.com pass netmarketer.sk neutral 209.85.161.173 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.161.174 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.161.175 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.161.177 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.177 1 none forwarded support.example.com support.example.com pass caex.org neutral 209.85.161.178 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.161.181 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.170 1 none forwarded support.example.com support.example.com pass ctl360.com neutral 209.85.212.170 1 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.212.171 1 none forwarded support.example.com support.example.com pass adplay.mu neutral 209.85.212.173 1 none forwarded support.example.com support.example.com pass palmergroupmedia.com neutral 209.85.212.174 1 none forwarded support.example.com support.example.com pass businessleads.com neutral 209.85.212.175 1 none forwarded support.example.com support.example.com pass bestsports.sk pass 209.85.212.176 1 none forwarded support.example.com support.example.com pass experienciasxcaret.com neutral 209.85.212.177 1 none forwarded support.example.com support.example.com pass koovs.com softfail 209.85.212.179 1 none forwarded support.example.com support.example.com pass elfnet.ro neutral 209.85.212.180 1 none forwarded support.example.com support.example.com pass infolinks.vn neutral 209.85.213.169 1 none forwarded support.example.com support.example.com pass sarmady.net neutral 209.85.213.170 1 none forwarded example.com example.com pass gmail.com pass 209.85.213.170 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.213.172 1 none forwarded support.example.com support.example.com pass altpaper.net pass 209.85.213.172 3 none forwarded support.example.com support.example.com pass mindvalleyhispano.com pass 209.85.213.173 2 none forwarded support.example.com support.example.com pass nicedeal.sg softfail 209.85.213.175 1 none forwarded support.example.com support.example.com pass revelaweb.com.br neutral 209.85.213.176 1 none forwarded support.example.com support.example.com pass healthunlocked.com pass 209.85.213.177 1 none forwarded support.example.com support.example.com pass madebyatheists.com neutral 209.85.213.179 1 none forwarded support.example.com support.example.com pass willesen.com neutral 209.85.213.179 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass providaint.com neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass isfm.org.in pass 209.85.214.171 1 none forwarded support.example.com support.example.com pass faltanyi.com neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass christoweldesigns.com.au neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass jansifra.com neutral 209.85.214.172 120 none forwarded support.example.com support.example.com pass compasslabs.com neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass sandorszabolcs.com neutral 209.85.214.173 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.173 1 none forwarded support.example.com support.example.com pass keldom.com pass 209.85.214.173 1 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass casaseneleste.com pass 209.85.214.175 1 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.214.176 1 none forwarded example.com example.com pass liftdisability.net neutral 209.85.214.176 1 none forwarded support.example.com support.example.com pass ibrands.es softfail 209.85.214.176 1 none forwarded support.example.com support.example.com pass pecavar.com neutral 209.85.214.177 1 none forwarded example.com example.com pass liftdisability.net neutral 209.85.214.177 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.177 1 none forwarded support.example.com support.example.com pass collinli.com.au neutral 209.85.214.178 9 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.178 1 none forwarded support.example.com support.example.com pass mamu.com.tw neutral 209.85.214.178 2 none forwarded support.example.com support.example.com pass mandatemedia.com neutral 209.85.214.179 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.179 2 none forwarded support.example.com support.example.com pass retireeasy.com neutral 209.85.214.179 7 none forwarded support.example.com support.example.com pass agenciaball.com.br pass 209.85.214.180 2 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass luminarypub.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.214.180 2 none forwarded support.example.com support.example.com pass vixswimwear.com.br neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass jacksonrentsandsupply.com neutral 209.85.214.181 2 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.182 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.182 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass backrevolution.com softfail 209.85.216.169 3 none forwarded support.example.com support.example.com pass geraniumjewelry.com neutral 209.85.216.170 1 none forwarded support.example.com support.example.com pass brentgarrigus.com fail 209.85.216.174 1 none forwarded support.example.com support.example.com pass buffalo.edu neutral 209.85.216.176 1 none forwarded support.example.com support.example.com pass lindenlab.com neutral 209.85.216.177 1 none forwarded support.example.com support.example.com pass bizinger.biz neutral 209.85.216.177 1 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.178 1 none forwarded support.example.com support.example.com pass goals.by neutral 209.85.216.179 1 none forwarded support.example.com support.example.com pass gowind.net softfail 209.85.216.179 1 none forwarded support.example.com support.example.com pass umail.iu.edu neutral 209.85.216.180 1 none forwarded support.example.com support.example.com pass robinbarondesign.com neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass riotstudios.us neutral 209.85.217.171 1 none forwarded example.com example.com pass livreiro305.com.br neutral 209.85.217.171 1 none forwarded support.example.com support.example.com pass syscom.it pass 209.85.217.172 1 none forwarded support.example.com support.example.com pass intlairtool.com pass 209.85.217.173 1 none forwarded support.example.com support.example.com pass xplornet.ca neutral 209.85.217.173 1 none forwarded support.example.com support.example.com pass evolution2media.com softfail 209.85.217.174 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.175 4 none forwarded support.example.com support.example.com pass urijah.org pass 209.85.217.176 1 none forwarded support.example.com support.example.com pass allskateboards.cl neutral 209.85.217.177 19 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.177 1 none forwarded support.example.com support.example.com pass 360studio.lt neutral 209.85.217.177 1 none forwarded support.example.com support.example.com pass risingtideinteractive.com neutral 209.85.217.179 1 none forwarded example.com example.com pass sutra.ba pass 209.85.217.180 3 none forwarded support.example.com support.example.com pass slipstreaminteractive.com neutral 209.85.217.182 8 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.182 1 none forwarded support.example.com support.example.com pass ithinksoluciones.com neutral 209.85.220.169 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.220.173 1 none forwarded support.example.com support.example.com pass makemereach.com neutral 210.188.201.39 1 none forwarded support.example.com support.example.com pass sv78.xserver.jp neutral 210.188.201.75 1 none forwarded support.example.com support.example.com pass sv105.xserver.jp neutral 213.154.64.101 1 none forwarded example.com example.com pass example.com fail 216.104.37.178 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.117.161.24 2 none forwarded support.example.com support.example.com pass support.example.com fail 217.36.120.149 1 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.155.147 2 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.203.122 3 none forwarded support.example.com support.example.com pass sv221.xserver.jp neutral 59.124.137.228 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.233.181 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.112 1 none forwarded support.example.com support.example.com pass amlo-blasquez.com pass 65.254.253.122 1 none forwarded support.example.com support.example.com pass airextfilms.com pass 65.254.253.235 1 none forwarded support.example.com support.example.com pass resourcebasedcommunities.org pass 66.220.144.135 5 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.148 1 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.152 10 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.136 4 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.159 2 none forwarded support.example.com support.example.com pass support.example.com pass 67.228.184.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.228.202.226 2 none forwarded support.example.com support.example.com pass support.example.com fail 67.228.232.119 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.232.152 8 none forwarded support.example.com support.example.com pass support.example.com pass 74.125.149.143 1 none forwarded support.example.com support.example.com pass zmchotels.com pass 74.125.149.151 1 none forwarded support.example.com support.example.com pass westmont.edu pass 74.125.149.201 1 none forwarded support.example.com support.example.com pass punahou.edu neutral 74.125.149.211 1 none forwarded support.example.com support.example.com pass punahou.edu neutral 74.220.201.219 1 none forwarded example.com example.com pass example.com fail 74.220.217.168 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.222.165 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.237.138.232 1 none forwarded support.example.com support.example.com pass o25.de neutral 81.169.146.145 2 none forwarded support.example.com support.example.com pass support.example.com fail 81.169.146.146 2 none forwarded support.example.com support.example.com pass support.example.com fail 83.149.127.116 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.235.137.110 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.237.121.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.248.173.146 2 none forwarded support.example.com support.example.com pass support.example.com fail 91.198.169.250 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.216.107.237 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.115 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.212.163 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.212.175 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.135 1 none forwarded support.example.com support.example.com pass support.example.com fail 111.86.156.36 19 reject forwarded m.example.com m.example.com neutral m.example.com neutral 118.103.89.13 1 reject forwarded m.example.com m.example.com neutral pdx.ne.jp pass 128.59.28.167 2 reject forwarded example.com none example.com fail 128.59.28.172 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 140.98.193.23 1 reject forwarded example.com none srs.ieee.org neutral 142.58.101.32 1 reject forwarded example.com none example.com fail 144.63.247.72 1 reject forwarded mx.example.com none aftonbladet.se neutral 151.189.21.45 1 reject forwarded example.com none example.com fail 165.212.10.31 1 reject forwarded example.com none ns.wizbill.com neutral 168.143.18.56 3 reject forwarded example.com none example.com fail 17.148.16.100 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 17.148.16.101 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 176.9.125.154 1 reject forwarded example.com none example.com fail 178.32.228.28 6 reject forwarded mx.example.com none mo28.mail-out.ovh.net neutral 187.73.32.173 1 reject forwarded example.com none dncgroup.cafe24.com neutral 188.93.157.41 41 reject forwarded example.com none example.com fail 189.38.92.134 1 reject forwarded example.com none example.com fail 189.38.92.143 2 reject forwarded example.com none example.com fail 189.38.92.145 1 reject forwarded example.com none example.com fail 195.186.80.30 1 reject forwarded example.com none example.com fail 201.76.49.168 1 reject forwarded support.example.com none support.example.com fail 202.71.103.23 1 reject forwarded example.com none example.com fail 206.46.172.53 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 207.69.195.99 3 reject forwarded example.com none example.com fail 208.109.80.47 1 reject forwarded example.com none example.com fail 208.180.40.76 2 reject forwarded example.com none example.com fail 208.65.144.64 1 reject forwarded support.example.com support.example.com neutral allcountyjobs.com neutral 208.71.131.82 1 reject forwarded example.com none example.com fail 208.82.238.96 1 reject forwarded example.com example.com neutral craigslist.org pass 208.84.243.69 1 reject forwarded example.com none bt01.terra.com neutral 208.97.132.74 3 reject forwarded example.com none example.com fail 209.17.171.32 1 reject forwarded example.com none smtp-corp-01.aweber.com softfail 209.62.40.114 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 210.131.4.236 1 reject forwarded example.com none example.com fail 211.125.95.69 1 reject forwarded example.com none post.freeml.com pass 212.227.17.10 1 reject forwarded example.com mail6.us2.mcsv.net pass srs.kundenserver.de pass 212.227.17.11 1 reject forwarded support.example.com support.example.com neutral web.de neutral 212.97.132.48 3 reject forwarded example.com none ws48.surf-town.net neutral 212.97.132.64 3 reject forwarded example.com none ws48.surf-town.net neutral 213.133.64.13 1 reject forwarded example.com none example.com fail 222.231.1.248 1 reject forwarded example.com none xvtech.com neutral 38.113.244.15 1 reject forwarded example.com none example.com fail 65.117.23.203 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 65.254.160.38 3 reject forwarded example.com none example.com fail 66.175.56.184 2 reject forwarded example.com none example.com fail 67.19.218.158 2 reject forwarded mx.example.com none leaf.phpwebhosting.com neutral 67.208.220.75 2 reject forwarded support.example.com none igg.com pass 67.228.52.189 1 reject forwarded example.com none example.com fail 69.28.134.146 1 reject forwarded example.com none example.com fail 70.40.213.172 1 reject forwarded example.com none example.com fail 70.87.126.130 1 reject forwarded example.com none example.com fail 74.117.23.101 4 reject forwarded support.example.com support.example.com neutral experianinteractive.com neutral 74.125.82.173 34 reject forwarded example.com example.com neutral howzat.com pass 74.220.205.43 1 reject forwarded example.com none example.com fail 75.126.124.93 3 reject forwarded example.com none example.com fail 80.179.55.140 1 reject forwarded example.com none sus79.suidc.com neutral 80.179.55.169 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 82.193.35.227 2 reject forwarded support.example.com none graphistudio.com pass 83.138.191.53 1 reject forwarded example.com none example.com fail 83.170.124.65 1 reject forwarded example.com none example.com fail 83.170.124.67 1 reject forwarded example.com none example.com fail 85.13.143.149 1 reject forwarded example.com none example.com fail 85.205.93.121 30 reject forwarded example.com none example.com fail 87.106.240.34 1 reject forwarded example.com none example.com fail 91.213.196.10 1 reject forwarded mx.example.com none praiseyou.ateve.ru neutral 94.199.200.49 2 reject forwarded example.com none example.com fail 97.74.135.181 1 reject forwarded mx.example.com none p3plsmtp10-01.prod.phx3.secureserver.net neutral 98.129.251.72 1 reject forwarded example.com none 417802-web2.westminsterteak.com neutral 125.252.106.100 2 none forwarded support.example.com support.example.com pass support.example.com fail 128.122.118.243 2 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.176.133 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.195.144.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.192.165 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.192.171 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.192.185 4 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.167 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.169 6 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.191 17 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.247.242.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.255.130.114 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.146.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.195.218 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.195.244 2 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.196.233 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.198.191.103 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.115.160.177 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.140.195.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.186.227.141 1 none forwarded support.example.com support.example.com pass zhhdzmsp-mfwd14.bluewin.ch neutral 202.146.211.104 2 none forwarded support.example.com support.example.com pass golfmarketing.com.au neutral 206.162.130.201 1 none forwarded example.com example.com pass example.com fail 206.248.143.162 1 none forwarded support.example.com support.example.com pass danyricher.com neutral 207.126.144.127 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 207.172.157.102 2 none forwarded support.example.com support.example.com pass support.example.com fail 207.234.208.239 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.105.239.106 24 none forwarded support.example.com support.example.com pass support.example.com fail 209.237.134.231 1 none forwarded support.example.com support.example.com pass srs.perfora.net neutral 210.172.144.125 4 none forwarded support.example.com support.example.com pass support.example.com fail 210.224.177.195 1 none forwarded support.example.com support.example.com pass error.heteml.jp neutral 213.162.209.148 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.171.216.163 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.186 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.224 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.174.103.226 2 none forwarded support.example.com support.example.com pass support.example.com fail 133.95.89.1 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 192.75.71.4 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.70 28 none mailing_list support.example.com none gosocial.dk pass 209.85.160.72 4 none mailing_list support.example.com none glyde.com pass 209.85.210.70 10 none mailing_list support.example.com none apis3.com pass 209.85.210.71 4 none mailing_list support.example.com none clozette.co pass 209.85.210.71 2 none mailing_list support.example.com none vontweb.com pass 209.85.210.71 2 none mailing_list support.example.com none nightagency.com pass 209.85.210.72 2 none mailing_list support.example.com none theorchard.com pass 209.85.210.72 1 none mailing_list support.example.com none spain-holiday.com pass 209.85.212.71 2 none mailing_list example.com none againstintuition.com pass 209.85.212.71 1 none mailing_list support.example.com none clickmotion.pl pass 209.85.213.71 3 none mailing_list support.example.com none publik.com.tr pass 74.125.149.19 11 none mailing_list support.example.com none gilt.jp pass 128.119.103.53 1 reject forwarded example.com none example.com fail 128.253.83.165 1 reject forwarded example.com example.com neutral example.com fail 128.253.83.168 18 reject forwarded support.example.com support.example.com neutral support.example.com fail 134.84.119.122 1 reject forwarded example.com none example.com fail 157.55.116.166 1 reject forwarded support.example.com support.example.com fail ch1ehsndr002.bigfish.com neutral 164.46.163.134 25 reject forwarded example.com none example.com fail 173.167.241.84 1 reject forwarded support.example.com none support.example.com fail 184.172.185.26 1 reject forwarded example.com none example.com fail 188.165.220.68 1 reject forwarded mx.example.com none mail.quizz.biz neutral 193.213.115.18 1 reject forwarded example.com none example.com fail 195.186.99.141 1 reject forwarded example.com mail6.us2.mcsv.net pass zhbdzmsp-mfwd13.bluewin.ch neutral 200.147.34.226 2 reject forwarded example.com none example.com fail 205.186.136.49 3 reject forwarded example.com none example.com fail 207.155.248.15 1 reject forwarded example.com none example.com fail 207.155.253.93 2 reject forwarded example.com none example.com fail 207.58.136.136 2 reject forwarded example.com none example.com fail 208.87.241.124 1 reject forwarded example.com none example.com fail 208.97.132.119 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 208.97.132.177 1 reject forwarded mx.example.com none homiemail-mx8.g.dreamhost.com neutral 208.97.132.202 4 reject forwarded example.com none example.com fail 209.217.78.152 1 reject forwarded example.com none example.com fail 209.85.161.170 1 reject forwarded example.com example.com neutral bitrhymes.com neutral 209.85.161.173 2 reject forwarded example.com example.com neutral kudosmedia.net neutral 209.85.161.180 2 reject forwarded example.com example.com neutral web2mil.com.uy pass 209.85.216.175 1 reject forwarded example.com example.com neutral virgogalaxy.com neutral 212.110.162.18 2 reject forwarded mx.example.com none statler.bytemark.co.uk neutral 216.195.78.196 1 reject forwarded example.com none example.com fail 216.32.181.183 1 reject forwarded support.example.com support.example.com neutral tulane.edu pass 216.32.181.184 1 reject forwarded support.example.com support.example.com neutral student.gsu.edu neutral 216.32.181.186 1 reject forwarded example.com example.com neutral louisville.edu neutral 217.70.183.195 1 reject forwarded example.com example.com neutral example.com fail 220.73.163.105 1 reject forwarded example.com none no10.nayana.kr neutral 46.255.225.249 1 reject forwarded support.example.com support.example.com neutral centrum.cz pass 64.127.109.108 1 reject forwarded example.com example.com neutral smtp.earth.threerings.net neutral 66.220.144.138 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 66.225.217.124 1 reject forwarded example.com none example.com fail 68.230.241.204 1 reject forwarded example.com none example.com fail 72.167.218.164 1 reject forwarded mx.example.com none p3plsmtp04-06.prod.phx3.secureserver.net neutral 74.220.217.203 2 reject forwarded example.com none example.com fail 81.169.146.147 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 89.184.184.192 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 91.192.111.191 1 reject forwarded mx.example.com none s111-191.furanet.com neutral 209.85.161.198 2 none mailing_list support.example.com none plumbee.co.uk pass 209.85.161.198 23 none mailing_list support.example.com none graphscience.com pass 121.111.227.147 1 reject forwarded example.com none auoneerrml1.ezweb.ne.jp pass 128.103.229.181 1 reject forwarded support.example.com support.example.com fail support.example.com fail 129.219.117.222 1 reject forwarded example.com none example.com fail 130.127.237.235 1 reject forwarded example.com none example.com fail 173.161.123.219 44 reject forwarded example.com none example.com fail 173.201.193.185 1 reject forwarded mx.example.com none p3plsmtp18-03.prod.phx3.secureserver.net neutral 174.120.172.130 1 reject forwarded example.com none example.com fail 194.179.126.142 1 reject forwarded example.com example.com neutral smtpeci.elcorteingles.es neutral 204.200.183.164 1 reject forwarded example.com none example.com fail 205.212.179.219 1 reject forwarded example.com none example.com fail 207.155.249.236 1 reject forwarded example.com none example.com fail 209.200.250.103 1 reject forwarded example.com none example.com fail 213.171.216.171 1 reject forwarded example.com none example.com fail 213.199.154.141 1 reject forwarded support.example.com support.example.com neutral alumni.lsu.edu neutral 213.206.122.207 1 reject forwarded example.com none example.com fail 12.237.107.18 4 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 68 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.160.70 1 reject mailing_list example.com none appbistro.com neutral 209.85.160.70 4 reject mailing_list example.com none come2play.com neutral 209.85.160.70 45 reject mailing_list example.com none iminlikewithyou.com neutral 209.85.160.71 7 reject mailing_list support.example.com none eliance.co.za neutral 209.85.160.72 1 reject mailing_list example.com none mytopfollower.com neutral 209.85.160.72 1 reject mailing_list support.example.com none adsonic.de neutral 209.85.160.72 4 reject mailing_list support.example.com none baobaz.com neutral 209.85.160.72 4 reject mailing_list support.example.com none prodigi.com.ua neutral 209.85.210.69 52 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.210.70 40 reject mailing_list example.com none iminlikewithyou.com neutral 209.85.210.70 20 reject mailing_list support.example.com none snsplus.com neutral 209.85.210.70 2 reject mailing_list support.example.com none zensuites.com.br neutral 209.85.210.70 14 reject mailing_list support.example.com none gorillacreativemedia.com neutral 209.85.210.72 1 reject mailing_list example.com none rocketninja.com softfail 209.85.210.72 3 reject mailing_list support.example.com none joyfort.com neutral 209.85.210.72 3 reject mailing_list support.example.com none candytech.cz neutral 209.85.212.72 2 reject mailing_list support.example.com none webmatch.de neutral 209.85.213.70 3 reject mailing_list support.example.com none fyndiq.se neutral 209.85.213.70 5 reject mailing_list support.example.com none gorillacreativemedia.com neutral 209.85.213.71 2 reject mailing_list support.example.com none everyday.com.my neutral 170.140.50.233 7 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 199.198.212.43 3 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.161.197 6 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.214.197 2 reject mailing_list support.example.com none 9lenses.com neutral 209.85.214.198 19 reject mailing_list support.example.com none dingle.fi neutral 209.85.214.198 3 reject mailing_list support.example.com none smartclickla.com neutral 209.85.214.199 2 reject mailing_list support.example.com none everyday.com.my neutral 209.85.214.199 3 reject mailing_list support.example.com none yieldivision.com neutral 209.85.216.199 3 reject mailing_list support.example.com none mpwmarketing.com neutral 209.85.216.200 1 reject mailing_list support.example.com none joyfort.com neutral 209.85.216.200 2 reject mailing_list support.example.com none ping.com.tr neutral 209.85.217.198 13 reject mailing_list support.example.com none graphscience.com pass 209.85.220.197 4 reject mailing_list support.example.com none stretchdigital.com neutral 74.125.149.240 4 reject mailing_list support.example.com none adviso.ca neutral 174.142.239.250 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 207.126.144.123 5 reject mailing_list support.example.com none moviepilot.com neutral 207.126.144.127 5 reject mailing_list support.example.com none moviepilot.com neutral 207.126.144.129 5 reject mailing_list support.example.com none moviepilot.com neutral 207.126.144.143 5 reject mailing_list support.example.com none moviepilot.com neutral 210.224.177.233 1 reject mailing_list example.com example.com fail bounces.heteml.jp pass 64.18.0.28 2 reject forwarded mailing_list support.example.com none prontoinsurance.com neutral 74.82.85.10 1 reject forwarded mailing_list groups.example.com examplemail.com neutral srs.bis6.us.blackberry.com pass 209.85.160.70 13 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.210.72 4 none forwarded mailing_list support.example.com none essencedigital.com pass 209.85.212.71 42 none forwarded mailing_list support.example.com none fetise.com pass 209.85.213.72 4 none forwarded mailing_list support.example.com none httpool.com pass 209.85.216.71 12 none forwarded mailing_list support.example.com none fetise.com pass 209.85.216.72 2 none forwarded mailing_list support.example.com none httpool.com pass 74.125.245.78 4 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.245.84 4 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.82.70 8 reject forwarded mailing_list example.com none schoolfeed.com softfail 98.136.219.2 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.8 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 209.85.161.199 12 none forwarded mailing_list support.example.com none fetise.com pass 209.85.161.199 1 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.161.200 2 none forwarded mailing_list support.example.com none httpool.com pass 209.85.213.199 2 none forwarded mailing_list support.example.com none emarketingeye.com pass 209.85.213.200 2 none forwarded mailing_list support.example.com none watercooler-inc.com pass 209.85.214.200 26 none forwarded mailing_list support.example.com none httpool.com pass 192.248.1.171 1 reject forwarded mailing_list example.com none apan.net neutral 209.85.160.50 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.160.69 50 reject forwarded mailing_list support.example.com none grandplanet.com neutral 209.85.160.71 1 reject forwarded mailing_list support.example.com none thinkunthinkable.com neutral 209.85.160.72 12 reject forwarded mailing_list support.example.com none snsplus.com neutral 209.85.161.70 6 reject forwarded mailing_list support.example.com none willowtreeapps.com neutral 209.85.210.48 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.210.70 4 reject forwarded mailing_list support.example.com none mobi4imob.com.br neutral 209.85.210.72 10 reject forwarded mailing_list support.example.com none snsplus.com neutral 209.85.210.72 3 reject forwarded mailing_list support.example.com none bidorbuy.co.ke neutral 209.85.210.72 3 reject forwarded mailing_list support.example.com none gamescampus.co.kr neutral 209.85.212.69 1 reject forwarded mailing_list support.example.com none groupon.com.ar neutral 209.85.213.44 1 reject forwarded mailing_list support.example.com seedingideas.com pass seedingideas.com neutral 209.85.213.48 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.69 2 reject forwarded mailing_list support.example.com none epubli.com neutral 209.85.214.44 2 reject forwarded mailing_list support.example.com none pidelorapido.com neutral 209.85.214.70 8 reject forwarded mailing_list example.com none schoolfeed.com softfail 209.85.216.72 7 reject forwarded mailing_list support.example.com none bangonline.com.au neutral 74.125.245.80 3 reject forwarded mailing_list support.example.com none blabbermouthsocial.com neutral 98.136.218.42 2 reject forwarded mailing_list groups.example.com yahoogroups.com fail returns.groups.yahoo.com neutral 98.136.218.42 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.62 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.38 23 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.52 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.62 7 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.90 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.16 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.96 16 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.98 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.32 19 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.164.42 2 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.165.25 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.55 14 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.93 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.95 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.161.175 2 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.161.176 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.199 2 reject forwarded mailing_list support.example.com none bookbub.com neutral 209.85.213.200 4 reject forwarded mailing_list support.example.com none blabbings.com neutral 209.85.214.197 1 reject forwarded mailing_list example.com none bunshinyakuhin.com neutral 209.85.214.199 2 reject forwarded mailing_list support.example.com none onpitchmedia.com neutral 209.85.214.199 4 reject forwarded mailing_list support.example.com none theyumyumtree.in neutral 209.85.214.199 1 reject forwarded mailing_list support.example.com none orioncreativegroup.com neutral 209.85.214.200 4 reject forwarded mailing_list support.example.com none nydrle.net neutral 209.85.214.200 2 reject forwarded mailing_list support.example.com none snsplus.com neutral 209.85.216.198 4 reject forwarded mailing_list support.example.com none miraiespana.com neutral 212.145.159.72 7 reject forwarded mailing_list support.example.com none elogia.net softfail 219.94.155.132 5 reject forwarded mailing_list example.com example.com fail japan-romance.com neutral 66.220.144.136 13 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.144 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.146 8 reject forwarded mailing_list support.example.com none imjp.co.jp softfail 66.220.144.147 1 reject forwarded mailing_list support.example.com none reactive.org neutral 66.220.144.157 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.135 1 reject forwarded mailing_list example.com none mytopfollower.com neutral 69.171.232.136 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.139 2 reject forwarded mailing_list support.example.com none dafiti.com.br softfail 69.171.232.141 3 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.141 15 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.143 2 reject forwarded mailing_list support.example.com none httpool.com softfail 69.171.232.143 3 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.144 1 reject forwarded mailing_list example.com none tk-city-like.net neutral 69.171.232.147 2 reject forwarded mailing_list support.example.com none xa.net softfail 69.171.232.150 1 reject forwarded mailing_list support.example.com none espalhe.inf.br neutral 69.171.232.151 9 reject forwarded mailing_list support.example.com none reverbnation.com fail 69.171.232.152 1 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 69.171.232.154 3 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.155 1 reject forwarded mailing_list example.com none sendgiftapp.com neutral 69.171.232.155 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.159 13 reject forwarded mailing_list support.example.com none graphscience.com softfail 74.125.149.107 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.143 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.155 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.240 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.177 5 reject forwarded mailing_list support.example.com none ecglobal.com temperror 98.136.219.127 16 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.130 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.169 15 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.171 13 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.184 18 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.197 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.210 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.214.200 28 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.119 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.125 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.127 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.131 4 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.169 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.215.206 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.138.215.206 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.214 11 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.230 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.105 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.107 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.109 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.111 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.112 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.113 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.126 17 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.143 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.160.70 1 none trusted_forwarder mailing_list support.example.com disko.fr pass support.example.com pass disko.fr pass support.example.com pass 209.85.160.70 3 none trusted_forwarder mailing_list support.example.com sonicelectronix.com pass support.example.com pass sonicelectronix.com softfail support.example.com pass 209.85.160.72 17 none trusted_forwarder mailing_list support.example.com trilogyinteractive.com pass support.example.com pass trilogyinteractive.com pass support.example.com pass 209.85.210.70 4 none trusted_forwarder mailing_list support.example.com bankbazaar.com pass support.example.com pass bankbazaar.com pass support.example.com pass 209.85.210.71 6 none trusted_forwarder mailing_list support.example.com sale.com pass support.example.com pass sale.com pass support.example.com pass 209.85.213.69 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.213.70 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.214.198 2 none trusted_forwarder mailing_list support.example.com hexify.com pass support.example.com pass hexify.com softfail support.example.com pass 209.85.214.199 4 none trusted_forwarder mailing_list support.example.com sale.com pass support.example.com pass sale.com pass support.example.com pass 209.85.214.199 3 none trusted_forwarder mailing_list support.example.com vocanic.com pass support.example.com pass vocanic.com neutral support.example.com pass 209.85.210.72 3 none forwarded trusted_forwarder mailing_list support.example.com improvementdirect.com pass support.example.com pass improvementdirect.com pass support.example.com pass 209.85.160.199 6 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 209.85.213.200 1 none forwarded trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de pass support.example.com pass 66.220.144.149 3 none forwarded trusted_forwarder mailing_list support.example.com wildfireapp.com pass support.example.com pass wildfireapp.com softfail support.example.com pass 209.85.214.198 6 reject forwarded trusted_forwarder mailing_list support.example.com sonicelectronix.com pass sonicelectronix.com pass sonicelectronix.com softfail sonicelectronix.com fail 80.67.18.6 1 none support.example.com support.example.com pass support.example.com fail 24.149.0.26 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.136 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.157 2 none support.example.com support.example.com pass support.example.com fail 64.18.2.146 1 none support.example.com support.example.com pass support.example.com fail 69.25.20.1 1 reject example.com none join.me pass 213.4.138.13 1 none example.com example.com pass telefonica.net pass 38.112.87.4 8 reject groups.example.com none igw.rainbowschools.ca neutral 64.14.78.41 1 reject example.com none example.com fail 64.18.0.109 1 reject example.com none example.com fail 64.18.1.202 1 reject example.com none example.com fail 69.89.16.45 1 reject example.com none example.com fail 81.19.186.3 1 reject example.com none example.com fail 128.172.8.176 1 none support.example.com support.example.com pass support.example.com fail 171.67.219.73 3 none support.example.com support.example.com pass support.example.com fail 66.220.157.67 400 none example.com example.com pass example.com pass 66.220.157.71 18 none example.com example.com fail example.com pass 66.220.157.75 313 none example.com example.com pass example.com pass 66.220.157.79 320 none example.com example.com pass example.com pass 66.220.157.80 312 none example.com example.com pass example.com pass 66.220.157.81 10 none example.com example.com fail example.com pass 66.220.157.86 288 none example.com example.com pass example.com pass 66.220.157.90 264 none example.com example.com pass example.com pass 66.220.157.95 15 none example.com example.com fail example.com pass 69.171.244.49 5 none example.com spc.example.com pass example.com pass 69.171.244.65 1791 none example.com example.com pass example.com pass 74.125.149.62 1 none support.example.com support.example.com pass support.example.com fail 152.10.1.179 1 reject support.example.com support.example.com neutral support.example.com fail 173.0.84.225 5 reject example.com paypal.com pass paypal.com pass 173.0.84.227 7 reject example.com paypal.com pass paypal.com pass 208.68.17.92 5 reject example.com none example.com fail 62.146.27.98 1 reject example.com none chat3.fidion.de neutral 64.65.50.177 1 reject example.com none example.com fail 67.228.50.36 1 reject example.com liftopia.com pass email.liftopia.com pass 69.89.29.144 1 reject example.com none box468.bluehost.com neutral 70.40.213.31 1 reject example.com none box693.bluehost.com neutral 72.32.175.28 11 reject example.com none example.com fail 74.200.208.2 1 reject example.com none example.com fail 74.208.4.203 8 reject example.com none example.com fail 74.3.239.250 12 reject example.com none example.com fail 74.51.36.155 1 reject example.com none example.com fail 77.68.46.146 90 reject example.com none example.com fail 78.24.10.186 3 reject example.com none mail.ahosting.cz neutral 84.52.98.133 10 reject example.com none example.com fail 98.130.1.230 1 reject example.com none example.com fail 112.78.125.168 4 none example.com example.com pass example.com fail 128.120.32.130 2 none example.com example.com pass example.com fail 141.211.14.131 2 none support.example.com support.example.com pass support.example.com fail 173.201.192.63 1 none example.com example.com pass bounce.secureserver.net pass 66.220.144.148 1139 none support.example.com support.example.com pass support.example.com pass 66.220.144.150 1212 none support.example.com support.example.com pass support.example.com pass 66.220.144.151 1 none example.com none example.com pass 66.220.144.153 54 none example.com example.com neutral example.com pass 66.220.144.153 1145 none support.example.com support.example.com pass support.example.com pass 66.220.155.137 575 none support.example.com support.example.com pass support.example.com pass 69.171.232.139 1642 none support.example.com support.example.com pass support.example.com pass 69.171.232.140 1745 none support.example.com support.example.com pass support.example.com pass 69.171.232.148 1696 none support.example.com support.example.com pass support.example.com pass 69.171.232.155 55 none example.com example.com neutral example.com pass 83.138.183.220 2 none support.example.com support.example.com pass support.example.com fail 113.157.205.2 9 reject reply.example.com examplemail.com neutral reply.example.com neutral 12.145.130.14 11 reject example.com none example.com fail 128.121.64.66 1 reject example.com none example.com fail 130.111.32.66 4 reject groups.example.com none groups.example.com neutral 151.189.21.58 1 reject example.com none example.com fail 174.132.27.98 1 reject example.com none example.com fail 174.133.57.98 1 reject example.com none example.com fail 188.49.60.209 9 reject example.com none clickz.com pass 195.94.186.57 117 reject groups.example.com none smtp.cisl.it neutral 200.147.34.65 1 reject example.com none 200-98-201-82.clouduol.com.br neutral 204.93.211.33 2 reject example.com none server101.routhost.com neutral 206.230.105.6 5 reject example.com none example.com fail 208.109.80.27 1 reject example.com none p3slh087.shr.phx3.secureserver.net neutral 208.109.80.59 1 reject example.com none example.com fail 208.53.130.98 1 reject example.com none example.com fail 209.193.73.78 1 reject example.com none example.com fail 209.85.215.48 1 reject example.com none example.com fail 213.194.93.11 1 reject example.com none example.com fail 216.146.32.21 1 reject example.com none example.com fail 216.33.127.82 1 reject support.example.com support.example.com fail support.example.com fail 216.33.127.89 1 reject example.com none example.com fail 216.82.250.19 1 reject example.com none example.com fail 24.121.225.69 1 reject example.com none example.com fail 24.214.64.230 1 reject example.com none example.com fail 64.119.192.33 9 reject example.com none example.com fail 66.118.165.32 1 reject example.com none example.com fail 66.220.157.26 1 reject mx.example.com none smtpin.mx.example.com temperror 67.222.56.233 1 reject example.com none example.com fail 68.178.232.17 2 reject example.com none linhostssl22.prod.mesa1.secureserver.net neutral 69.171.244.40 1284 reject mx.example.com none smtpin.mx.example.com neutral 69.175.51.226 1 reject example.com none example.com fail 69.191.192.13 2 reject groups.example.com none bloomberg.net pass 69.191.192.14 1 reject example.com none bloomberg.net pass 69.191.192.25 6 reject groups.example.com none bloomberg.net pass 69.28.147.166 8 reject groups.example.com linkedin.com pass bounce.linkedin.com pass 69.28.147.168 3 reject groups.example.com linkedin.com pass bounce.linkedin.com pass 70.40.194.111 1 reject example.com none host85.hostmonster.com neutral 70.88.202.225 1 reject reply.example.com examplemail.com neutral mail.derbyacademy.org neutral 72.47.217.143 15 reject example.com none example.com fail 74.86.183.206 1 reject example.com none example.com fail 79.96.242.105 3 reject support.example.com none v360.home.net.pl neutral 80.179.55.172 7 reject example.com none example.com fail 80.93.221.250 12 reject example.com none example.com fail 82.148.101.61 2 reject example.com none example.com fail 83.170.124.69 2 reject example.com none example.com fail 83.245.33.152 10 reject example.com none example.com fail 96.44.181.122 1 reject example.com none host.nokia4issu.net neutral 109.104.112.203 1 none support.example.com support.example.com pass maarifa.org softfail 129.219.117.222 4 none support.example.com support.example.com pass support.example.com fail 136.176.200.221 1 none support.example.com support.example.com pass support.example.com fail 174.120.189.226 1 none example.com example.com pass example.com fail 212.247.100.194 1 none support.example.com support.example.com pass support.example.com fail 107.20.146.139 1 reject proxymail.example.com none wx2.fish-wrangler.com neutral 132.185.240.35 1 reject example.com none example.com fail 170.140.53.253 1 reject reply.example.com none ndb-mr3.cc.emory.edu neutral 173.15.107.169 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 180.235.130.20 1 reject example.com none example.com fail 184.173.11.103 1 reject example.com none onl.only4dns.com neutral 199.116.248.66 1 reject example.com none example.com fail 203.190.241.94 1 reject example.com none example.com fail 204.202.242.23 1 reject example.com none example.com fail 205.234.184.84 1 reject example.com none example.com fail 206.246.180.25 7 reject example.com none example.com fail 207.69.195.100 1 reject example.com none example.com fail 207.69.195.102 1 reject example.com none example.com fail 207.97.245.114 1 reject example.com none example.com fail 207.97.245.133 1 reject example.com none example.com fail 207.97.245.136 1 reject example.com none example.com fail 208.187.218.66 1 reject example.com none example.com fail 209.61.173.155 18 reject example.com none example.com fail 212.95.112.249 261 reject example.com none example.com fail 216.151.162.28 16 reject example.com none example.com fail 216.52.242.164 2 reject groups.example.com linkedin.com pass bounce.linkedin.com pass 220.73.163.105 279 reject example.com none no10.nayana.kr neutral 64.119.144.233 1 reject reply.example.com none mail.parkschool.org neutral 64.215.254.174 1 reject example.com none addthis.com pass 65.254.253.122 1 reject example.com none yourhostingaccount.com pass 66.152.227.164 1 reject reply.example.com examplemail.com neutral mail.mxschool.edu neutral 66.220.145.250 7 reject example.com none example.com fail 69.171.232.145 542 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.146 500 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.148 481 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.156 460 reject m.example.com m.example.com neutral m.example.com neutral 72.167.234.242 78 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 72.167.234.245 82 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 74.114.173.240 15 reject reply.example.com none beam-services.ocdsb.ca neutral 74.220.201.202 1 reject example.com none host85.hostmonster.com neutral 124.105.170.194 108 reject example.com none example.com fail 141.211.176.135 1 reject example.com none example.com fail 174.120.188.226 1 reject example.com none gator1109.hostgator.com pass 184.154.117.210 1 reject example.com none server2.ewayhost.com neutral 184.154.125.234 1 reject example.com none cx97.justhost.com neutral 184.173.195.251 1 reject example.com none example.com fail 187.177.165.121 12 reject example.com none example.com fail 195.231.225.142 5 reject reply.example.com examplemail.com neutral reply.example.com neutral 199.231.136.134 36 reject example.com none example.com fail 199.231.136.149 4 reject example.com none example.com fail 207.126.144.195 1 reject mx.example.com none psmtp.com neutral 208.131.140.226 2 reject example.com none example.com fail 216.117.133.117 27 reject example.com none example.com fail 216.127.135.226 19 reject example.com none example.com fail 18.7.68.32 1 none forwarded support.example.com support.example.com pass support.example.com fail 18.7.68.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.88.46.6 1 none forwarded support.example.com support.example.com pass yandex.ru pass 50.22.80.16 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.14.78.45 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.14.59 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.2.165 1 none forwarded support.example.com support.example.com pass iherb.com pass 64.98.36.17 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.54.61.83 1 none forwarded example.com example.com pass hotmail.com pass 65.54.61.83 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.54.61.84 1 none forwarded example.com example.com pass hotmail.com pass 65.55.34.11 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.14 7 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.15 1 none forwarded support.example.com support.example.com pass live.co.uk pass 65.55.34.19 8 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.24 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.15 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.90.33 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.40 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.49 2 none forwarded support.example.com support.example.com pass hotmail.com pass 66.96.184.9 1 none forwarded support.example.com support.example.com pass supremecomputersolutions.com neutral 67.18.52.95 1 none forwarded support.example.com support.example.com pass gmail.com neutral 67.20.67.44 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.64.89.63 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.53.65.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.81.64.58 1 none forwarded example.com example.com pass example.com fail 74.81.91.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 75.126.5.19 1 none forwarded support.example.com support.example.com pass support.example.com fail 18.7.68.35 1 reject forwarded mx.example.com none dmz-mailsec-scanner-6.mit.edu neutral 18.9.25.12 1 reject forwarded example.com none example.com fail 18.9.25.14 1 reject forwarded mx.example.com none dmz-mailsec-scanner-3.mit.edu neutral 194.90.6.2 3 reject forwarded example.com none example.com fail 64.18.1.41 1 reject forwarded example.com none example.com fail 64.18.1.60 1 reject forwarded example.com none example.com fail 109.72.82.31 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.79.1.190 2 none forwarded support.example.com support.example.com pass support.example.com fail 147.251.49.7 1 none forwarded support.example.com support.example.com pass support.example.com fail 151.9.135.43 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.192.5.28 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.203.2.22 39 none forwarded support.example.com support.example.com pass support.example.com fail 193.0.253.37 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.28.28.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.23.192.6 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.70.32.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 24.71.223.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.28.70.109 1 none forwarded support.example.com support.example.com pass support.example.com fail 59.106.19.89 1 none forwarded support.example.com support.example.com pass support.example.com fail 59.188.3.138 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.118.88.24 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.14.68.175 3 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.116.15 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.15 1 none forwarded support.example.com support.example.com pass live.co.uk pass 65.55.116.15 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.19 1 none forwarded example.com example.com pass live.com.mx pass 65.55.116.27 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.31 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.32 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.39 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.40 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.41 1 none forwarded support.example.com support.example.com pass consularcorps.cc neutral 65.55.116.44 2 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.45 1 none forwarded support.example.com support.example.com pass live.com.au pass 65.55.116.82 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.99 2 none forwarded support.example.com support.example.com pass hotmail.com pass 66.111.4.223 5 none forwarded support.example.com support.example.com pass support.example.com fail 66.232.22.92 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.7.215.217 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.185.20 1 none forwarded support.example.com support.example.com pass riggimediainternational.com pass 66.96.188.12 1 none forwarded support.example.com support.example.com pass kemun.co.uk pass 67.19.253.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.19.27.253 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.10.32.154 18 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.19.106 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.19.113 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.20.172 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.30.239.77 1 none forwarded example.com example.com pass example.com fail 72.47.228.13 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.41 1 none forwarded support.example.com support.example.com pass lynxlimo.com neutral 74.125.82.46 2 none forwarded support.example.com support.example.com pass nateleung.com neutral 74.125.82.48 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.49 1 none forwarded support.example.com support.example.com pass club-m.org neutral 74.125.82.52 12 none forwarded support.example.com support.example.com pass alphaboost.com softfail 74.125.82.53 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.83.42 17 none forwarded support.example.com support.example.com pass uprise40.com neutral 74.125.83.44 1 none forwarded support.example.com support.example.com pass shopistan.pk neutral 74.220.16.13 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.217.5 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.218.6 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.55.75.115 2 none forwarded support.example.com support.example.com pass masagroup.com.br neutral 74.81.82.170 1 none forwarded example.com example.com pass example.com fail 81.88.50.247 2 none forwarded support.example.com support.example.com pass support.example.com fail 82.102.30.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 84.18.206.12 1 none forwarded support.example.com support.example.com pass gmail.com neutral 84.18.206.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.74.135.26 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.130.1.225 1 none forwarded support.example.com support.example.com pass gmail.com neutral 98.139.52.70 1 none forwarded example.com example.com pass example.com fail 98.139.91.76 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.77 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.62.4.54 1 reject forwarded example.com none example.com fail 193.47.74.3 1 reject forwarded example.com none example.com fail 194.90.9.39 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 209.68.4.23 1 reject forwarded example.com none example.com fail 213.75.39.9 1 reject forwarded example.com none example.com fail 50.22.106.2 1 reject forwarded mx.example.com none mail.corbanworks.com neutral 64.18.1.143 1 reject forwarded example.com none example.com fail 64.18.1.202 2 reject forwarded example.com none example.com fail 64.59.134.9 1 reject forwarded example.com none example.com fail 64.78.17.19 1 reject forwarded example.com none aveone.com neutral 65.55.34.13 1 reject forwarded example.com example.com neutral live.com pass 70.87.28.63 1 reject forwarded mx.example.com none mailforward.mailhostbox.com neutral 72.29.215.9 1 reject forwarded example.com pvco.net pass example.com fail 74.53.93.34 1 reject forwarded example.com none example.com fail 74.82.85.10 1 reject forwarded reply.example.com examplemail.com neutral srs.bis6.us.blackberry.com pass 77.75.76.44 1 reject forwarded example.com none seznam.cz pass 96.38.11.34 53 reject forwarded example.com none example.com fail 118.103.89.12 1 none forwarded example.com example.com pass willcom.com pass 118.88.21.170 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.193.15.45 1 none forwarded support.example.com support.example.com pass support.example.com fail 134.173.32.22 2 none forwarded example.com example.com pass gmail.com neutral 143.248.5.229 1 none forwarded example.com example.com pass kaist.ac.kr pass 152.3.189.228 69 none forwarded support.example.com support.example.com pass support.example.com fail 152.3.189.229 62 none forwarded support.example.com support.example.com pass support.example.com fail 157.205.202.9 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.11.34 1 none forwarded example.com example.com pass example.com fail 174.133.1.114 2 none forwarded support.example.com support.example.com pass support.example.com fail 193.17.41.132 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.230.72.92 1 none forwarded example.com example.com pass example.com fail 195.70.38.154 2 none forwarded support.example.com support.example.com pass telcs.hu neutral 201.76.50.187 1 none forwarded support.example.com support.example.com pass pleskwin51.hospedagemdesites.ws neutral 203.26.41.138 1 none forwarded support.example.com support.example.com pass support.example.com fail 204.12.102.39 1 none forwarded support.example.com support.example.com pass support.example.com fail 206.65.163.13 1 none forwarded support.example.com support.example.com pass charlenestrong.com neutral 208.113.200.5 1 none forwarded support.example.com support.example.com pass homiemail-mx23.g.dreamhost.com neutral 208.72.237.55 1 none forwarded support.example.com support.example.com pass bounce2.pobox.com pass 209.239.33.62 1 none forwarded support.example.com support.example.com pass host5.osmnetworks.net pass 209.85.160.41 2 none forwarded support.example.com support.example.com pass breakfield.co.jp neutral 209.85.160.43 4 none forwarded support.example.com support.example.com pass digidemon.eu neutral 209.85.160.47 1 none forwarded support.example.com support.example.com pass 5star.co.jp neutral 209.85.160.53 9 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.41 1 none forwarded support.example.com support.example.com pass diogoaguilar.com neutral 209.85.210.43 1 none forwarded support.example.com support.example.com pass lager.si pass 209.85.210.44 5 none forwarded support.example.com support.example.com pass tsunamimedia.com.my neutral 209.85.210.45 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.45 3 none forwarded support.example.com support.example.com pass seomarketing.com.br neutral 209.85.210.47 1 none forwarded support.example.com support.example.com pass ifly.md pass 209.85.210.47 3 none forwarded support.example.com support.example.com pass gerenteweb.com.br pass 209.85.210.49 2 none forwarded support.example.com support.example.com pass donovandominguez.com neutral 209.85.210.50 1 none forwarded support.example.com support.example.com pass gelattina.com neutral 209.85.210.52 1 none forwarded support.example.com support.example.com pass ifly.md pass 209.85.210.53 6 none forwarded support.example.com support.example.com pass hilifeinteractive.com pass 209.85.212.41 1 none forwarded support.example.com support.example.com pass lyore.net neutral 209.85.212.41 1 none forwarded support.example.com support.example.com pass monsil21.com neutral 209.85.212.41 3 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.42 1 none forwarded example.com example.com pass binghamton.edu pass 209.85.212.43 1 none forwarded support.example.com support.example.com pass targetivity.com neutral 209.85.212.43 1 none forwarded support.example.com support.example.com pass theoasislife.net neutral 209.85.212.45 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.212.46 7 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.47 1 none forwarded example.com example.com pass binghamton.edu pass 209.85.212.47 1 none forwarded support.example.com support.example.com pass squatjuice.com pass 209.85.212.49 3 none forwarded support.example.com support.example.com pass globalmedia.ae neutral 209.85.212.51 1 none forwarded support.example.com support.example.com pass sgarrison.com neutral 209.85.212.51 2 none forwarded support.example.com support.example.com pass theoasislife.net neutral 209.85.212.51 1 none forwarded support.example.com support.example.com pass yellowdogmedia.com neutral 209.85.212.53 1 none forwarded support.example.com support.example.com pass mybeat.net neutral 209.85.212.53 1 none forwarded support.example.com support.example.com pass digitalf5.com neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass dimo.biz neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass rakagames.com neutral 209.85.213.42 1 none forwarded support.example.com support.example.com pass lookatmeshirts.com pass 209.85.213.42 1 none forwarded support.example.com support.example.com pass simplyintense.com softfail 209.85.213.45 1 none forwarded support.example.com support.example.com pass sadda.jo pass 209.85.213.47 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.48 1 none forwarded support.example.com support.example.com pass yabla.com pass 209.85.213.48 1 none forwarded support.example.com support.example.com pass ad4u.ru neutral 209.85.213.49 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.49 1 none forwarded support.example.com support.example.com pass dahercapital.com neutral 209.85.213.51 1 none forwarded support.example.com support.example.com pass keyhomefurnishings.com neutral 209.85.213.52 1 none forwarded support.example.com support.example.com pass gozoop.com softfail 209.85.213.53 1 none forwarded support.example.com support.example.com pass crimson.ua.edu neutral 209.85.214.41 3 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass enconexo.com neutral 209.85.214.46 1 none forwarded support.example.com support.example.com pass mathieumirano.com neutral 209.85.214.48 2 none forwarded support.example.com support.example.com pass arunodaya.co.in softfail 209.85.214.50 1 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.52 2 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.53 3 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.54 1 none forwarded support.example.com support.example.com pass vitadaily.dk neutral 209.85.215.41 1 none forwarded support.example.com support.example.com pass londra.hu neutral 209.85.215.42 1 none forwarded support.example.com support.example.com pass ntlworld.com neutral 209.85.215.42 1 none forwarded support.example.com support.example.com pass marcastudio.com neutral 209.85.215.42 1 none forwarded support.example.com support.example.com pass daniellieberman.org neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass edenlodge.net neutral 209.85.215.46 1 none forwarded support.example.com support.example.com pass jerryong.com softfail 209.85.215.46 5 none forwarded support.example.com support.example.com pass brokenbulbstudios.com neutral 209.85.215.52 1 none forwarded support.example.com support.example.com pass game-on.no neutral 209.85.216.43 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.43 1 none forwarded support.example.com support.example.com pass enerdynamics.com neutral 209.85.216.44 1 none forwarded support.example.com support.example.com pass ilanferdman.com neutral 209.85.216.45 1 none forwarded support.example.com support.example.com pass publiscreenonline.com neutral 209.85.216.46 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.47 1 none forwarded support.example.com support.example.com pass paulaschoice.co.za neutral 209.85.216.49 1 none forwarded support.example.com support.example.com pass pontconsulting.ro neutral 209.85.216.53 2 none forwarded support.example.com support.example.com pass googlemail.com pass 210.134.58.29 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.1.208.244 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.227.17.12 1 none forwarded support.example.com support.example.com pass email.de neutral 212.52.84.112 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.6.156.132 1 none forwarded support.example.com support.example.com pass remax.com.ar pass 213.165.87.96 4 none forwarded support.example.com support.example.com pass support.example.com fail 213.41.78.197 6 none forwarded support.example.com support.example.com pass support.example.com fail 213.41.78.208 2 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.66.99 4 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.155.46 1 none forwarded support.example.com support.example.com pass support.example.com fail 31.185.104.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 41.76.212.181 1 none forwarded support.example.com support.example.com pass support.example.com fail 59.106.27.144 1 none forwarded support.example.com support.example.com pass support.example.com fail 61.208.133.65 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.157.29 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.75.187.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.238.147.78 2 none forwarded support.example.com support.example.com pass srs.acm.org pass 65.212.180.63 2 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.58 1 none forwarded support.example.com support.example.com pass belatrixsf.com permerror 66.175.56.199 1 none forwarded support.example.com support.example.com pass gmail.com neutral 66.206.163.83 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.175.12.218 4 none forwarded example.com example.com pass example.com fail 69.72.252.186 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.32.105.153 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.22 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 72.167.218.25 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.125.245.86 1 none forwarded support.example.com support.example.com pass mobvox.com.br pass 74.125.82.171 1 none forwarded support.example.com support.example.com pass glmalibu.com temperror 74.125.82.172 3 none forwarded support.example.com support.example.com pass googlemail.com pass 74.125.82.175 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.175 1 none forwarded support.example.com support.example.com pass elfnet.ro neutral 74.125.82.178 1 none forwarded support.example.com support.example.com pass aradium.com neutral 74.125.82.179 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.55.203.250 7 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.92 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.246.148.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.69.164.103 2 none forwarded example.com example.com pass arabeski.fi neutral 83.169.81.213 4 none forwarded support.example.com support.example.com pass support.example.com fail 83.172.138.38 1 none forwarded support.example.com support.example.com pass support.example.com fail 84.240.29.220 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.238.29.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.102.18 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.185.56 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.185.68 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.198.169.49 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.199.200.32 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.74.135.167 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.139.52.240 1 none forwarded example.com example.com pass example.com fail 98.139.53.196 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.215 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.225 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.234 1 none forwarded example.com example.com pass gmail.com neutral 129.133.6.17 1 reject forwarded example.com none wesleyan.edu pass 129.79.1.211 1 reject forwarded example.com none example.com fail 130.184.5.66 1 reject forwarded example.com none example.com fail 132.207.4.11 1 reject forwarded example.com none example.com fail 134.117.2.27 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 140.97.30.41 1 reject forwarded example.com none example.com fail 146.164.10.2 1 reject forwarded example.com none ns.wizbill.com neutral 150.164.0.85 1 reject forwarded example.com none sus79.suidc.com neutral 195.70.4.250 2 reject forwarded mx.example.com none ns1.addmefast.com neutral 203.19.5.245 1 reject forwarded mx.example.com none mail1.mailpoolservice.com neutral 208.74.8.144 1 reject forwarded example.com none example.com fail 209.169.0.20 1 reject forwarded example.com none example.com fail 213.183.32.4 1 reject forwarded support.example.com none support.example.com fail 216.70.64.52 1 reject forwarded example.com none example.com fail 216.9.247.49 1 reject forwarded example.com example.com neutral srs.bis3.ap.blackberry.com pass 216.9.247.68 1 reject forwarded example.com example.com neutral srs.bis3.ap.blackberry.com pass 217.16.6.132 3 reject forwarded example.com none example.com fail 24.71.223.10 4 reject forwarded support.example.com support.example.com fail support.example.com fail 59.106.19.35 1 reject forwarded reply.example.com examplemail.com neutral returns.yahoogroups.jp softfail 61.9.168.143 1 reject forwarded example.com none example.com fail 61.9.168.146 1 reject forwarded example.com none example.com fail 64.26.60.138 4 reject forwarded example.com none example.com fail 64.59.134.12 1 reject forwarded support.example.com support.example.com fail support.example.com fail 64.8.116.147 1 reject forwarded example.com none no10.nayana.kr neutral 65.55.116.21 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.116.23 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.116.37 1 reject forwarded m.example.com m.example.com neutral msn.com pass 66.11.225.84 15 reject forwarded example.com none example.com fail 66.114.74.12 1 reject forwarded example.com none example.com fail 67.225.152.4 1 reject forwarded example.com none example.com fail 69.20.65.142 1 reject forwarded example.com none example.com fail 69.49.113.58 1 reject forwarded mx.example.com none mail128c75.carrierzone.com neutral 69.89.21.182 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.1.201.196 1 reject forwarded example.com none example.com fail 72.10.96.134 1 reject forwarded reply.example.com examplemail.com neutral reply.example.com neutral 72.37.212.41 1 reject forwarded example.com none example.com fail 74.208.4.195 5 reject forwarded example.com none srs.perfora.net neutral 76.96.27.243 1 reject forwarded example.com none example.com fail 80.69.98.248 1 reject forwarded support.example.com none unitybox.de pass 84.52.98.133 31 reject forwarded example.com none example.com fail 87.255.52.89 1 reject forwarded example.com none example.com fail 94.136.40.61 5 reject forwarded example.com none example.com fail 95.174.23.66 1 reject forwarded mx.example.com none mailserver01.ergonet.it neutral 98.130.1.231 2 reject forwarded mx.example.com none mail1106.opentransfer.com neutral 109.123.66.100 1 none forwarded support.example.com support.example.com pass support.example.com fail 122.128.107.72 2 none forwarded support.example.com support.example.com pass support.example.com fail 128.187.16.125 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.197.228.63 1 none forwarded support.example.com support.example.com pass support.example.com fail 131.252.111.42 1 none forwarded support.example.com support.example.com pass pdx.edu neutral 134.84.119.122 1 none forwarded support.example.com support.example.com pass support.example.com fail 169.232.46.171 1 none forwarded support.example.com support.example.com pass support.example.com fail 169.232.47.165 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.192.61 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.236.27.130 1 none forwarded support.example.com support.example.com pass swimwear-hut.com neutral 174.120.119.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.37.190.188 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.16.100 2 none forwarded support.example.com support.example.com pass support.example.com fail 198.212.10.109 5 none forwarded support.example.com support.example.com pass support.example.com fail 202.40.166.157 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.170.85.142 2 none forwarded support.example.com support.example.com pass support.example.com fail 203.170.85.144 2 none forwarded example.com example.com pass example.com fail 209.217.241.21 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.25.133.138 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.172 1 none forwarded support.example.com support.example.com pass airu.com.br neutral 209.85.160.172 2 none forwarded support.example.com support.example.com pass mindvalleyhispano.com pass 209.85.160.175 1 none forwarded support.example.com support.example.com pass offerna.com softfail 209.85.161.170 1 none forwarded support.example.com support.example.com pass davidottlik.com neutral 209.85.161.172 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.173 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.161.175 1 none forwarded example.com example.com pass modernmedia.jo neutral 209.85.161.175 1 none forwarded support.example.com support.example.com pass setweb.com.br pass 209.85.161.177 1 none forwarded support.example.com support.example.com pass pd.net softfail 209.85.161.177 2 none forwarded support.example.com support.example.com pass neaterpets.com neutral 209.85.161.178 1 none forwarded support.example.com support.example.com pass assada-me.com neutral 209.85.161.179 1 none forwarded support.example.com support.example.com pass sarmady.net neutral 209.85.161.180 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.212.169 1 none forwarded support.example.com support.example.com pass rockrena.com neutral 209.85.212.169 1 none forwarded support.example.com support.example.com pass woodapple.in neutral 209.85.212.173 1 none forwarded support.example.com support.example.com pass infolinks.vn neutral 209.85.212.174 1 none forwarded example.com example.com pass waplog.com softfail 209.85.212.174 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.174 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 209.85.212.179 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.182 1 none forwarded support.example.com support.example.com pass virgin.net pass 209.85.213.169 1 none forwarded support.example.com support.example.com pass iastate.edu neutral 209.85.213.170 1 none forwarded support.example.com support.example.com pass patriotoutdoors.com fail 209.85.213.171 1 none forwarded support.example.com support.example.com pass factotum.it neutral 209.85.213.172 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.176 1 none forwarded support.example.com support.example.com pass blitzlocal.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass whitehawkventures.com neutral 209.85.213.179 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.179 1 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.213.179 3 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.213.181 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.182 1 none forwarded support.example.com support.example.com pass bnotions.ca neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass liman.org neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass nibssolution.com neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass ezhevik.in softfail 209.85.214.170 2 none forwarded support.example.com support.example.com pass techshu.com neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass gowalla.com softfail 209.85.214.170 1 none forwarded support.example.com support.example.com pass luminarypub.com neutral 209.85.214.171 2 none forwarded support.example.com support.example.com pass senseofashion.com pass 209.85.214.171 1 none forwarded support.example.com support.example.com pass obamaalumni.com neutral 209.85.214.172 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.172 3 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.173 3 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass funzio.com neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass starinfranet.com neutral 209.85.214.174 3 none forwarded support.example.com support.example.com pass institutoparamitas.org.br neutral 209.85.214.175 1 none forwarded support.example.com support.example.com pass globo.com pass 209.85.214.175 2 none forwarded support.example.com support.example.com pass revelaweb.com.br neutral 209.85.214.176 1 none forwarded support.example.com support.example.com pass n-gate.jp neutral 209.85.214.176 7 none forwarded support.example.com support.example.com pass simbiotic.net neutral 209.85.214.176 2 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.176 1 none forwarded support.example.com support.example.com pass i-smiledental.com neutral 209.85.214.177 1 none forwarded support.example.com support.example.com pass rius.com neutral 209.85.214.177 4 none forwarded support.example.com support.example.com pass neaterpets.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass rol.co.il softfail 209.85.214.178 1 none forwarded support.example.com support.example.com pass binghamton.edu pass 209.85.214.178 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.214.179 1 none forwarded support.example.com support.example.com pass tikora.com neutral 209.85.214.179 2 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass enginemarketing.co.nz neutral 209.85.214.181 2 none forwarded support.example.com support.example.com pass saxana.sk neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass seminaria.gr pass 209.85.214.181 2 none forwarded support.example.com support.example.com pass woorks.com softfail 209.85.214.182 1 none forwarded example.com example.com pass liftdisability.net neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass shoemoney.com pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass mahjongtime.com pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass fusiontree.com neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass easysocialshop.com pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass institutoparamitas.org.br neutral 209.85.215.180 1 none forwarded support.example.com support.example.com pass adventist.ro neutral 209.85.216.169 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 209.85.216.169 1 none forwarded support.example.com support.example.com pass internationalpreschoolcurriculum.com neutral 209.85.216.171 1 none forwarded support.example.com support.example.com pass halolounge.com pass 209.85.216.175 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 209.85.216.175 1 none forwarded support.example.com support.example.com pass gauge.com.br neutral 209.85.216.175 2 none forwarded support.example.com support.example.com pass photomanhattan.com neutral 209.85.216.176 1 none forwarded support.example.com support.example.com pass gonsal.es neutral 209.85.216.177 1 none forwarded support.example.com support.example.com pass e-holding.org neutral 209.85.216.181 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.169 4 none forwarded support.example.com support.example.com pass coromega.com pass 209.85.217.169 1 none forwarded support.example.com support.example.com pass stepvalue.com neutral 209.85.217.171 1 none forwarded support.example.com support.example.com pass online.net.tw neutral 209.85.217.171 1 none forwarded support.example.com support.example.com pass caocidadao.com.br pass 209.85.217.172 1 none forwarded support.example.com support.example.com pass elfnet.ro neutral 209.85.217.174 3 none forwarded support.example.com support.example.com pass brokenbulbstudios.com neutral 209.85.217.178 40 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.182 1 none forwarded support.example.com support.example.com pass pandemiclabs.com neutral 209.85.220.169 1 none forwarded support.example.com support.example.com pass lyore.net neutral 209.85.220.178 1 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.220.179 1 none forwarded support.example.com support.example.com pass gmail.com pass 210.172.144.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.165.64.100 1 none forwarded example.com example.com pass example.com fail 213.171.216.79 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.239.128.26 5 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.203.116 1 none forwarded support.example.com support.example.com pass sv215.xserver.jp neutral 66.220.144.137 1 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.138 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.135 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.154 1 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.158 4 none forwarded support.example.com support.example.com pass support.example.com pass 68.230.241.151 1 none forwarded support.example.com support.example.com pass support.example.com fail 68.230.241.206 1 none forwarded support.example.com support.example.com pass support.example.com fail 68.233.233.206 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.151 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 72.167.218.154 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.125.149.107 1 none forwarded support.example.com support.example.com pass shinenorth.com neutral 74.125.149.140 1 none forwarded support.example.com support.example.com pass shinenorth.com neutral 74.220.206.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.210.100 1 none forwarded example.com example.com pass example.com fail 74.220.210.115 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.216.120 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.237.138.227 1 none forwarded support.example.com support.example.com pass lecturio.de neutral 81.169.146.147 3 none forwarded example.com example.com pass example.com fail 83.223.100.178 2 none forwarded support.example.com support.example.com pass support.example.com fail 85.128.204.197 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.238.192.236 2 none forwarded example.com example.com pass example.com fail 94.100.176.118 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.136.217.168 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.138.229.168 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.150 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.152 1 none forwarded support.example.com support.example.com pass support.example.com fail 12.107.167.86 2 reject forwarded example.com none daily-journal.com pass 132.206.27.52 2 reject forwarded support.example.com support.example.com neutral mail.mcgill.ca neutral 137.45.130.45 3 reject forwarded m.example.com m.example.com neutral m.example.com neutral 141.215.69.20 2 reject forwarded example.com none example.com fail 17.148.16.103 1 reject forwarded example.com none example.com fail 174.122.25.90 2 reject forwarded mx.example.com none server.1001mx1.com neutral 184.172.26.81 1 reject forwarded example.com none hosting3.isun.biz neutral 188.93.157.41 1 reject forwarded example.com none gonuts4free.com pass 189.38.92.182 1 reject forwarded example.com none example.com fail 189.38.92.192 1 reject forwarded example.com none example.com fail 194.171.42.13 3 reject forwarded example.com none example.com fail 195.7.101.182 2 reject forwarded example.com none example.com fail 196.25.18.130 1 reject forwarded example.com none example.com fail 198.31.50.151 1 reject forwarded example.com none example.com fail 199.30.65.227 1 reject forwarded example.com none c1.mohost.com neutral 200.17.161.33 1 reject forwarded example.com none hosting3.isun.biz neutral 204.101.56.44 2 reject forwarded example.com none example.com fail 206.46.172.65 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 206.46.172.67 1 reject forwarded example.com none example.com fail 208.109.80.58 2 reject forwarded example.com none example.com fail 208.109.80.60 1 reject forwarded example.com none example.com fail 208.87.24.201 1 reject forwarded example.com none example.com fail 208.97.132.66 2 reject forwarded example.com none example.com fail 208.97.132.81 2 reject forwarded example.com none example.com fail 209.157.71.85 2 reject forwarded mx.example.com none smtp5.homesteadmail.com neutral 209.164.18.60 1 reject forwarded support.example.com support.example.com neutral homefranchiseconcepts.com pass 209.85.213.45 2 reject forwarded example.com example.com neutral kudosmedia.net neutral 209.85.213.52 2 reject forwarded example.com example.com neutral web2mil.com.uy pass 209.85.214.52 1 reject forwarded example.com example.com neutral web2mil.com.uy pass 209.85.216.42 1 reject forwarded example.com example.com neutral egame.hk neutral 210.157.23.17 1 reject forwarded example.com none post.freeml.com pass 210.163.9.143 7 reject forwarded mx.example.com none www.e-ukesho.com neutral 212.101.16.68 10 reject forwarded example.com none example.com fail 212.227.15.35 5 reject forwarded example.com none example.com fail 212.28.208.39 1 reject forwarded support.example.com support.example.com neutral atlasbalans.se neutral 213.162.50.71 1 reject forwarded example.com none example.com fail 216.146.33.54 1 reject forwarded example.com none example.com fail 216.22.25.215 1 reject forwarded example.com none example.com fail 216.32.180.14 2 reject forwarded example.com example.com neutral uq.net.au neutral 216.33.127.86 2 reject forwarded example.com none example.com fail 24.224.136.10 1 reject forwarded support.example.com support.example.com fail support.example.com fail 41.72.133.108 2 reject forwarded mx.example.com none connectlib.co.za neutral 50.22.104.182 1 reject forwarded example.com none example.com fail 62.149.157.28 1 reject forwarded mx.example.com none mxavas18.aruba.it neutral 62.218.34.134 1 reject forwarded support.example.com none support.example.com fail 66.147.237.56 1 reject forwarded example.com none example.com fail 66.175.56.205 1 reject forwarded example.com none example.com fail 66.175.56.213 1 reject forwarded example.com none example.com fail 66.220.157.25 5 reject forwarded mx.example.com none unknown neutral 67.15.232.182 1 reject forwarded example.com none example.com fail 67.207.201.11 1 reject forwarded example.com none example.com fail 67.207.212.59 1 reject forwarded example.com none example.com fail 67.220.194.82 1 reject forwarded mx.example.com none europa.dns1net.com neutral 67.222.56.175 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.225.185.16 1 reject forwarded example.com none dncgroup.cafe24.com neutral 69.16.196.238 1 reject forwarded example.com none example.com fail 69.171.244.47 1 reject forwarded mx.example.com none unknown neutral 69.36.178.100 1 reject forwarded example.com none example.com fail 69.64.155.197 1 reject forwarded example.com none example.com fail 74.125.149.63 1 reject forwarded example.com none example.com fail 74.125.82.182 1 reject forwarded support.example.com support.example.com neutral tcd.ie neutral 74.200.72.227 1 reject forwarded example.com none example.com fail 74.220.200.64 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.217.60 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.94.146.219 28 reject forwarded example.com none example.com fail 79.170.93.115 1 reject forwarded example.com none example.com fail 80.160.76.194 1 reject forwarded example.com none example.com fail 82.208.46.141 1 reject forwarded mx.example.com none ceres.domains.sk neutral 83.170.124.66 1 reject forwarded example.com none example.com fail 84.93.230.250 1 reject forwarded example.com none example.com fail 85.205.93.120 20 reject forwarded example.com none example.com fail 91.121.209.65 8 reject forwarded example.com none example.com fail 91.226.182.19 1 reject forwarded mx.example.com none smtp1.carpediem.fr neutral 94.136.63.250 1 reject forwarded example.com none example.com fail 98.139.44.135 1 reject forwarded example.com none example.com fail 98.139.91.232 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 122.152.128.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.138.128.232 2 none forwarded support.example.com support.example.com pass support.example.com fail 130.127.237.234 1 none forwarded support.example.com support.example.com pass support.example.com fail 130.207.165.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.176.133 1 none forwarded support.example.com support.example.com pass kcjones.org neutral 169.229.218.144 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.192.167 1 none forwarded example.com example.com pass bounce.secureserver.net pass 173.201.192.181 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 174.122.127.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 180.149.253.189 4 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.196.237 1 none forwarded support.example.com support.example.com pass support.example.com fail 190.210.142.115 1 none forwarded support.example.com support.example.com pass hotmail.com softfail 205.173.252.220 2 none forwarded support.example.com support.example.com pass support.example.com fail 206.130.107.151 1 none forwarded example.com example.com pass example.com fail 207.126.144.111 1 none forwarded support.example.com support.example.com pass builder.hu softfail 208.131.128.157 6 none forwarded support.example.com support.example.com pass support.example.com fail 209.237.134.235 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.133.182 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.144.199 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.188.201.199 3 none forwarded support.example.com support.example.com pass sv168.xserver.jp neutral 212.227.126.186 1 none forwarded example.com example.com pass srs.kundenserver.de pass 209.85.160.69 2 none mailing_list support.example.com none trendmaze.com pass 209.85.160.70 3 none mailing_list support.example.com none adacto.it pass 209.85.160.71 1 none mailing_list support.example.com none kungfuchampionship.com pass 209.85.160.72 4 none mailing_list support.example.com none beatport.com pass 209.85.160.72 1 none mailing_list support.example.com none mmgyglobal.com pass 209.85.160.72 1 none mailing_list support.example.com none hatchforsenate.com pass 209.85.210.69 1 none mailing_list support.example.com none groupon.cl pass 209.85.210.69 10 none mailing_list support.example.com none neadoo.com pass 209.85.210.69 4 none mailing_list support.example.com none trendmaze.com pass 209.85.210.69 3 none mailing_list support.example.com none agenciafrog.com.br pass 209.85.210.70 26 none mailing_list support.example.com none gosocial.dk pass 209.85.210.70 9 none mailing_list support.example.com none raybeam.com pass 209.85.210.71 1 none mailing_list example.com none nealab.it pass 209.85.210.71 2 none mailing_list support.example.com none crowdm.it pass 209.85.210.71 3 none mailing_list support.example.com none skout.com pass 209.85.210.72 1 none mailing_list support.example.com none mmgyglobal.com pass 209.85.212.70 16 none mailing_list support.example.com none graphscience.com pass 209.85.213.69 2 none mailing_list support.example.com none krombera.com pass 209.85.213.69 1 none mailing_list support.example.com none bluestatedigital.com pass 209.85.215.70 12 none mailing_list support.example.com none graphscience.com pass 209.85.216.70 14 none mailing_list support.example.com none graphscience.com pass 128.197.160.76 4 reject forwarded example.com none scv.bu.edu neutral 128.253.83.163 11 reject forwarded support.example.com support.example.com neutral support.example.com fail 129.105.238.75 1 reject forwarded example.com none example.com fail 131.215.239.19 1 reject forwarded example.com none example.com fail 140.247.35.200 1 reject forwarded example.com none fas.harvard.edu neutral 164.82.148.112 1 reject forwarded example.com example.com neutral dc.gov neutral 173.233.77.122 1 reject forwarded example.com none example.com fail 174.132.225.18 1 reject forwarded example.com none example.com fail 184.154.87.171 1 reject forwarded mx.example.com none server.ra11y.com neutral 184.172.150.20 1 reject forwarded example.com none example.com fail 188.65.115.130 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 201.64.137.130 1 reject forwarded example.com none example.com fail 203.162.20.155 1 reject forwarded mx.example.com none mx.example.com neutral 204.202.242.86 1 reject forwarded example.com none example.com fail 205.178.146.50 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 206.82.154.200 1 reject forwarded example.com none example.com fail 207.192.74.121 1 reject forwarded example.com none example.com fail 207.211.91.251 29 reject forwarded example.com none example.com fail 207.69.195.101 1 reject forwarded mx.example.com none smarth-marmette.atl.sa.earthlink.net neutral 208.82.238.102 1 reject forwarded example.com example.com neutral craigslist.org pass 208.97.132.145 2 reject forwarded example.com none example.com fail 208.97.132.145 2 reject forwarded mx.example.com none homiemail-mx4.g.dreamhost.com neutral 208.97.132.202 1 reject forwarded mx.example.com none homiemail-mx12.g.dreamhost.com neutral 209.105.230.67 1 reject forwarded support.example.com support.example.com neutral outbound.spartanrace.com softfail 209.161.34.185 1 reject forwarded example.com none example.com fail 209.85.161.175 1 reject forwarded example.com example.com neutral gmail.com pass 209.85.161.177 1 reject forwarded example.com example.com neutral dachisgroup.com pass 209.85.212.171 5 reject forwarded example.com example.com neutral howzat.com pass 209.85.212.177 6 reject forwarded example.com example.com neutral howzat.com pass 209.85.217.172 1 reject forwarded example.com example.com neutral thecomplete.me neutral 209.85.217.178 3 reject forwarded example.com example.com neutral gamador.com neutral 212.124.195.21 1 reject forwarded example.com none example.com fail 213.203.238.11 1 reject forwarded example.com none example.com fail 216.32.181.186 1 reject forwarded support.example.com support.example.com neutral illumstation.com neutral 217.70.183.196 8 reject forwarded example.com none example.com fail 217.72.192.232 1 reject forwarded example.com none example.com fail 220.110.71.114 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 62.128.193.156 2 reject forwarded example.com none example.com fail 67.139.134.235 1 reject forwarded example.com none example.com fail 67.210.116.230 1 reject forwarded example.com none example.com fail 67.212.231.238 1 reject forwarded example.com none example.com fail 68.230.241.132 1 reject forwarded example.com none example.com fail 69.171.232.153 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.167.218.162 1 reject forwarded proxymail.example.com shopkick.com pass bounce.secureserver.net pass 74.200.197.146 1 reject forwarded mx.example.com none mail.membergatehosting.com neutral 74.220.205.141 1 reject forwarded example.com none example.com fail 81.169.146.145 2 reject forwarded example.com none example.com fail 96.127.170.150 2 reject forwarded example.com none example.com fail 98.136.219.135 1 reject forwarded example.com yahoogroups.com pass returns.groups.yahoo.com neutral 198.51.16.49 8 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 74.125.83.70 7 reject mailing_list support.example.com none graphscience.com pass 209.85.161.198 8 none mailing_list support.example.com none gosocial.dk pass 209.85.213.197 3 none mailing_list support.example.com none peakgames.net pass 209.85.214.198 4 none mailing_list support.example.com none apis3.com pass 209.85.214.198 18 none mailing_list support.example.com none reverbnation.com pass 209.85.214.199 5 none mailing_list support.example.com none 6waves.com pass 209.85.214.200 2 none mailing_list support.example.com none boozt.com pass 209.85.216.198 9 none mailing_list support.example.com none reverbnation.com pass 209.85.216.199 2 none mailing_list support.example.com none xa.net pass 109.108.140.194 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 121.111.227.144 2 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.149 2 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.150 1 reject forwarded example.com example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.150 6 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.154 1 reject forwarded example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.154 4 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 124.150.140.180 1 reject forwarded example.com none example.com fail 128.241.238.254 1 reject forwarded example.com none example.com fail 173.247.240.206 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 173.255.250.214 1 reject forwarded example.com none example.com fail 186.202.136.155 1 reject forwarded example.com none sus79.suidc.com neutral 209.104.252.244 63 reject forwarded example.com none example.com fail 209.151.228.236 1 reject forwarded example.com none example.com fail 213.175.168.170 8 reject forwarded support.example.com support.example.com neutral support.example.com fail 213.199.154.209 1 reject forwarded support.example.com support.example.com neutral alumni.indiana.edu neutral 216.117.133.117 58 reject forwarded example.com none example.com fail 217.168.156.186 1 reject forwarded example.com none example.com fail 217.194.119.227 1 reject forwarded example.com none example.com fail 208.74.101.41 1 reject mailing_list example.com none kcr7s25.remote-learner.net neutral 209.85.160.69 1 reject mailing_list support.example.com none o3mdm.com neutral 209.85.160.69 4 reject mailing_list support.example.com none grabone.ie neutral 209.85.160.69 1 reject mailing_list support.example.com none gracieva.com neutral 209.85.160.69 2 reject mailing_list support.example.com none getaround.com neutral 209.85.160.70 28 reject mailing_list support.example.com none gorillacreativemedia.com neutral 209.85.160.72 2 reject mailing_list support.example.com none espalhe.inf.br neutral 209.85.210.69 9 reject mailing_list support.example.com none yunait.com neutral 209.85.210.69 19 reject mailing_list support.example.com none socialwavelength.com neutral 209.85.210.70 2 reject mailing_list support.example.com none simplyjeanette.com temperror 209.85.210.71 4 reject mailing_list support.example.com none pdresources.org softfail 209.85.210.71 5 reject mailing_list support.example.com none cn.bposolutions.com neutral 209.85.210.71 18 reject mailing_list support.example.com none techlightenment.com neutral 209.85.210.72 4 reject mailing_list example.com none idacreative.com neutral 209.85.210.72 2 reject mailing_list support.example.com none i1play.com neutral 209.85.210.72 6 reject mailing_list support.example.com none ping.com.tr neutral 209.85.212.71 18 reject mailing_list support.example.com none adtz.com neutral 209.85.213.71 10 reject mailing_list example.com none epsi.fr softfail 209.85.215.70 14 reject mailing_list support.example.com none graphscience.com pass 209.85.216.72 4 reject mailing_list support.example.com none dudesdivision.com neutral 170.140.53.253 4 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 207.126.144.59 4 reject mailing_list support.example.com none lieferando.de neutral 209.85.161.198 3 reject mailing_list support.example.com none aquiesdonde.com.ar neutral 209.85.161.199 3 reject mailing_list support.example.com none nobox.com neutral 209.85.161.200 21 reject mailing_list support.example.com none deducta.dk neutral 209.85.214.197 1 reject mailing_list support.example.com none quikr.com permerror 209.85.214.197 26 reject mailing_list support.example.com none varlabs.com neutral 209.85.214.198 2 reject mailing_list support.example.com none quirk.biz neutral 209.85.214.198 5 reject mailing_list support.example.com none crane-west.com neutral 209.85.214.200 28 reject mailing_list support.example.com none deducta.dk neutral 209.85.214.200 2 reject mailing_list support.example.com none dudesdivision.com neutral 209.85.216.198 7 reject mailing_list support.example.com none graphscience.com pass 207.126.144.135 10 reject mailing_list support.example.com none moviepilot.com neutral 220.110.215.124 1 reject mailing_list example.com example.com fail japan-romance.com neutral 74.125.82.71 2 none forwarded mailing_list support.example.com none mediafactory.com.br pass 65.55.88.15 1 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 74.82.85.11 1 reject forwarded mailing_list groups.example.com examplemail.com neutral srs.bis6.us.blackberry.com pass 209.85.160.71 7 none forwarded mailing_list support.example.com none vixia.co.jp pass 209.85.160.71 1 none forwarded mailing_list support.example.com none komdat-solutions.com pass 209.85.160.72 16 none forwarded mailing_list support.example.com none httpool.com pass 209.85.160.72 7 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.161.70 3 none forwarded mailing_list support.example.com none xpointomedia.com pass 209.85.210.69 1 none forwarded mailing_list support.example.com none washingtoncitypaper.com pass 209.85.212.70 13 none forwarded mailing_list support.example.com none hungrymachine.com pass 202.86.60.10 2 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 98.136.219.8 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.8 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 209.85.161.198 24 none forwarded mailing_list support.example.com none hungrymachine.com pass 74.125.149.145 3 none forwarded mailing_list support.example.com none bluefly.com pass 200.98.199.59 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.160.53 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.210.41 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.210.69 1 reject forwarded mailing_list support.example.com none groupon.com.ar neutral 209.85.210.70 4 reject forwarded mailing_list support.example.com none webdiz.co.il neutral 209.85.210.71 5 reject forwarded mailing_list support.example.com none jvnz.net neutral 209.85.210.72 1 reject forwarded mailing_list support.example.com none interfacetalent.com neutral 209.85.212.71 2 reject forwarded mailing_list support.example.com none skandnet.com neutral 209.85.213.42 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.72 1 reject forwarded mailing_list support.example.com none gurumediasolutions.com neutral 216.32.180.31 2 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 74.125.149.18 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.66 1 reject forwarded mailing_list support.example.com none attentionusa.com neutral 74.125.149.82 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.84 12 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.70 2 reject forwarded mailing_list support.example.com none velomedia.com neutral 98.136.218.37 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.218.55 43 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.15 24 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.21 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.36 7 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.62 19 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.64 2 reject forwarded mailing_list groups.example.com yahoogroups.com fail returns.groups.yahoo.com neutral 98.136.219.67 7 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.88 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.23 2 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.86 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.55 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.96 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.99 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.34 19 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.165.53 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.85 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.139.165.86 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.86 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 207.126.144.122 2 none forwarded mailing_list support.example.com none adwebmaroc.com pass 165.95.194.244 12 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 195.47.247.147 1 reject forwarded mailing_list support.example.com none mindjumpers.com neutral 209.85.160.199 1 reject forwarded mailing_list support.example.com none appsumo.com softfail 209.85.161.199 27 reject forwarded mailing_list support.example.com none sokrati.com neutral 209.85.213.198 7 reject forwarded mailing_list support.example.com none socialpoint.es neutral 209.85.213.198 8 reject forwarded mailing_list support.example.com none adtelligenz.com neutral 209.85.214.198 2 reject forwarded mailing_list support.example.com none mobi4imob.com.br neutral 209.85.214.198 40 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.214.198 1 reject forwarded mailing_list support.example.com none interfacetalent.com neutral 66.220.144.139 6 reject forwarded mailing_list support.example.com none traveltriangle.com neutral 66.220.144.142 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.150 3 reject forwarded mailing_list support.example.com none popimedia.com softfail 66.220.144.152 1 reject forwarded mailing_list example.com none sendgiftapp.com neutral 66.220.144.153 2 reject forwarded mailing_list support.example.com none dafiti.com.br softfail 66.220.144.158 2 reject forwarded mailing_list support.example.com none dafiti.com.br softfail 66.220.155.138 1 reject forwarded mailing_list example.com none whatgames.net neutral 69.171.232.137 9 reject forwarded mailing_list support.example.com none reverbnation.com fail 69.171.232.139 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.139 2 reject forwarded mailing_list support.example.com none mixbook.com softfail 69.171.232.144 19 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.144 2 reject forwarded mailing_list support.example.com none endorseliberty.com neutral 69.171.232.146 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.147 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.149 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 69.171.232.150 22 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.152 2 reject forwarded mailing_list support.example.com none xa.net softfail 69.171.232.152 1 reject forwarded mailing_list support.example.com none mainstreethub.com softfail 69.171.232.153 2 reject forwarded mailing_list support.example.com none publik.com.tr softfail 69.171.232.159 2 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 74.125.149.141 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.151 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 98.136.219.132 11 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.153 4 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.153 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.136.219.171 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.171 26 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.136.219.182 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.mx pass returns.groups.yahoo.com neutral 98.136.219.190 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.197 7 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.203 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.208 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.221 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.249 7 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.168 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.199 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.214.206 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.207 14 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.212 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.220 9 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.233 18 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.239 2 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.214.239 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.248 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.107 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.127 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.140 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.185 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.224 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.100 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.mx pass returns.groups.yahoo.com neutral 98.139.164.103 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.112 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.113 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.114 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.131 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.143 4 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.156 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.139.165.165 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.160.69 2 none trusted_forwarder mailing_list support.example.com backatyou.com pass support.example.com pass backatyou.com neutral support.example.com pass 209.85.210.70 4 none trusted_forwarder mailing_list support.example.com disko.fr pass support.example.com pass disko.fr pass support.example.com pass 209.85.210.70 1 none trusted_forwarder mailing_list support.example.com sonicelectronix.com pass support.example.com pass sonicelectronix.com softfail support.example.com pass 209.85.213.70 1 none trusted_forwarder mailing_list support.example.com sonicelectronix.com pass support.example.com pass sonicelectronix.com softfail support.example.com pass 209.85.213.199 2 none trusted_forwarder mailing_list support.example.com sale.com pass support.example.com pass sale.com pass support.example.com pass 209.85.160.72 3 none forwarded trusted_forwarder mailing_list support.example.com snapapp.com pass support.example.com pass snapapp.com pass support.example.com pass 209.85.161.197 3 none forwarded trusted_forwarder mailing_list support.example.com chil.li pass support.example.com pass chil.li pass chil.li pass 209.85.161.199 6 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 209.85.213.198 1 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 50.57.0.7 1 none example.com example.com pass example.com fail 64.18.1.74 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.103 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.104 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.118 2 none support.example.com support.example.com pass support.example.com fail 64.18.1.130 4 none support.example.com support.example.com pass support.example.com fail 64.18.1.145 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.210 1 none support.example.com support.example.com pass support.example.com fail 64.18.2.188 1 none support.example.com support.example.com pass support.example.com fail 192.41.34.43 1 none support.example.com support.example.com pass support.example.com fail 212.39.96.70 6 none example.com example.com pass example.com fail 64.35.176.47 3 none support.example.com support.example.com pass support.example.com fail 217.16.6.86 3 reject example.com none example.com fail 217.16.6.89 2 reject example.com none example.com fail 46.4.103.77 1 reject example.com none st-takla.org neutral 61.19.252.4 12 reject example.com none ns1-252004.dragonhispeed.com neutral 64.18.1.119 1 reject example.com none example.com fail 69.89.16.10 3 reject example.com none example.com fail 72.12.88.71 12 reject reply.example.com examplemail.com neutral reply.example.com neutral 72.44.80.59 2 reject example.com none server.rhrv.com neutral 77.88.61.48 1 reject reply.example.com none forward9.mail.yandex.net neutral 95.97.93.62 1330 reject mx.example.com none mx.mk-it.nl neutral 143.167.2.187 2 none support.example.com support.example.com pass support.example.com fail 66.220.157.66 13 none example.com example.com fail example.com pass 66.220.157.78 13 none example.com example.com fail example.com pass 66.220.157.93 296 none example.com example.com pass example.com pass 69.171.244.67 22 none example.com example.com fail example.com pass 69.171.244.69 17 none example.com example.com pass example.com pass 69.171.244.70 1 none example.com example.com fail example.com pass 69.171.244.72 6 none example.com example.com fail example.com pass 136.168.1.94 53 reject reply.example.com none reply.example.com neutral 161.31.24.47 1 reject support.example.com support.example.com fail uca.edu softfail 168.8.190.21 7 reject reply.example.com examplemail.com neutral reply.example.com neutral 173.0.84.226 5 reject example.com paypal.com pass paypal.com pass 173.0.84.228 9 reject example.com paypal.com pass paypal.com pass 190.60.24.78 13 reject example.com none example.com fail 201.7.183.82 1 reject example.com none example.com fail 202.87.39.91 5 reject example.com none newweb.indiaparenting.com neutral 202.94.33.35 10 reject example.com none example.com fail 206.110.20.2 1 reject groups.example.com none groups.example.com neutral 208.68.24.68 2 reject example.com none example.com fail 213.75.39.13 1 reject example.com none cpsmtpb-ews08.kpnxchange.com neutral 216.98.224.8 1 reject example.com none example.com fail 50.28.14.226 8 reject example.com none example.com fail 61.9.168.143 1 reject example.com none example.com fail 64.119.142.2 1 reject groups.example.com none groups.example.com neutral 65.55.34.152 1 reject example.com none example.com fail 65.60.20.138 3 reject example.com none cl05.justhost.com neutral 66.70.229.18 1 reject example.com none example.com fail 68.169.44.51 4 reject groups.example.com none groups.example.com neutral 70.88.69.250 7 reject example.com none example.com fail 71.16.117.19 21 reject example.com none example.com fail 72.13.84.210 1 reject groups.example.com none groups.example.com neutral 74.202.89.60 1 reject example.com none example.com fail 77.92.82.201 1 reject example.com none cpanel24.uk2.net neutral 96.241.223.2 11 reject example.com none example.com fail 98.129.35.10 1 reject support.example.com support.example.com neutral support.example.com fail 98.130.1.235 1 reject example.com none example.com fail 140.247.35.204 1 none example.com example.com pass fas.harvard.edu neutral 66.220.144.136 54 none example.com example.com neutral example.com pass 66.220.144.138 45 none example.com example.com neutral example.com pass 66.220.144.145 1233 none support.example.com support.example.com pass support.example.com pass 66.220.144.148 59 none example.com example.com neutral example.com pass 66.220.144.149 54 none example.com example.com neutral example.com pass 66.220.144.152 1180 none support.example.com support.example.com pass support.example.com pass 66.220.144.156 1158 none support.example.com support.example.com pass support.example.com pass 66.220.144.157 1174 none support.example.com support.example.com pass support.example.com pass 66.220.155.135 8 none example.com example.com neutral example.com pass 66.220.155.136 478 none support.example.com support.example.com pass support.example.com pass 66.220.155.138 5 none example.com example.com neutral example.com pass 66.220.155.138 504 none support.example.com support.example.com pass support.example.com pass 66.220.155.142 4 none example.com example.com neutral example.com pass 66.220.155.144 4 none example.com example.com neutral example.com pass 66.220.155.147 4 none example.com example.com neutral example.com pass 66.220.155.149 441 none support.example.com support.example.com pass support.example.com pass 66.220.155.153 7 none example.com example.com neutral example.com pass 66.220.155.154 499 none support.example.com support.example.com pass support.example.com pass 66.220.155.159 459 none support.example.com support.example.com pass support.example.com pass 68.230.241.132 2 none example.com example.com pass bounce2.pobox.com neutral 69.171.232.135 53 none example.com example.com neutral example.com pass 69.171.232.149 53 none example.com example.com neutral example.com pass 69.171.232.151 58 none example.com example.com neutral example.com pass 115.68.23.244 1 reject example.com none localhost.localdomain neutral 122.252.1.118 10 reject example.com none example.com fail 124.254.72.89 1 reject support.example.com support.example.com neutral support.example.com fail 130.111.32.94 4 reject groups.example.com none groups.example.com neutral 151.189.21.56 1 reject example.com none example.com fail 180.186.24.17 9 reject example.com none example.com fail 184.172.185.9 1 reject example.com none example.com fail 189.38.92.135 1 reject example.com none example.com fail 190.54.46.156 3 reject example.com none example.com fail 194.171.42.13 1 reject example.com none example.com fail 194.90.98.188 1 reject support.example.com none radiancy.com neutral 195.158.192.4 107 reject example.com none example.com fail 195.186.80.32 5 reject example.com none example.com fail 195.46.32.210 1 reject example.com none 7skyhost.com softfail 196.41.124.45 2 reject groups.example.com none groups.example.com neutral 200.35.192.13 9 reject example.com none example.com fail 202.87.32.245 1 reject example.com none web1.mtvindia.com neutral 206.46.172.51 1 reject example.com none example.com fail 208.109.80.74 2 reject example.com none p3slh087.shr.phx3.secureserver.net neutral 208.254.9.236 6 reject example.com none example.com fail 208.43.145.65 1 reject example.com none example.com fail 210.131.4.251 1 reject example.com nifty.com pass example.com fail 210.233.3.178 23 reject example.com none example.com fail 212.159.14.20 1 reject example.com none example.com fail 216.70.92.161 2 reject example.com none example.com fail 38.127.134.66 1 reject reply.example.com none mail.potomacschool.org neutral 66.220.157.27 1364 reject mx.example.com none smtpin.mx.example.com neutral 67.222.62.125 1 reject example.com none example.com fail 67.228.97.248 1 reject example.com none cwhiz.com neutral 68.178.232.17 1 reject example.com none linhost288.prod.mesa1.secureserver.net neutral 69.171.244.42 1029 reject mx.example.com none smtpin.mx.example.com neutral 69.171.244.46 469 reject mx.example.com none smtpin.mx.example.com neutral 69.171.244.47 642 reject mx.example.com none smtpin.mx.example.com neutral 69.191.244.19 2 reject groups.example.com none bloomberg.net pass 69.191.244.21 1 reject groups.example.com none bloomberg.net pass 69.28.147.164 1 reject example.com linkedin.com pass bounce.linkedin.com pass 69.28.147.165 4 reject groups.example.com linkedin.com pass bounce.linkedin.com pass 71.93.176.131 9 reject example.com none example.com fail 72.37.233.151 1 reject support.example.com none pearsonstravel.com pass 74.220.209.68 1 reject example.com none box483.bluehost.com neutral 74.220.210.74 1 reject example.com none example.com fail 74.94.146.219 17 reject example.com none example.com fail 75.180.132.34 1 reject example.com none example.com fail 80.179.55.169 3 reject example.com none example.com fail 82.148.101.71 7 reject example.com none example.com fail 83.138.191.53 11 reject example.com none example.com fail 85.205.93.120 9 reject example.com none example.com fail 161.253.152.114 7 none support.example.com support.example.com pass support.example.com fail 128.121.64.175 1 reject example.com none example.com fail 142.30.138.140 34 reject groups.example.com none groups.example.com neutral 165.95.194.244 17 reject reply.example.com examplemail.com neutral reply.example.com neutral 165.95.194.244 4 reject reply.example.com examplemail.com neutral barracuda.bryanisd.org neutral 173.203.191.88 1 reject example.com bharatmatrimony.com pass bounces.bharatmatrimony.com pass 173.236.40.122 1 reject example.com none cl159.justhost.com neutral 188.138.121.33 1 reject example.com none zulu1589.server4you.de neutral 195.209.228.68 3 reject example.com none example.com fail 195.225.239.55 35 reject example.com none example.com fail 195.238.172.28 1 reject example.com none ns14.sovdns.com neutral 202.218.32.205 1 reject example.com none example.com fail 203.238.128.90 10 reject example.com none example.com fail 207.97.245.161 1 reject example.com none example.com fail 208.70.244.213 3 reject example.com none example.com fail 210.127.253.79 1373 reject example.com none sus79.suidc.com neutral 210.172.177.93 3 reject example.com none example.com fail 213.195.76.108 134 reject example.com none example.com fail 216.235.172.45 2 reject example.com none example.com fail 216.82.241.211 1 reject example.com none example.com fail 217.146.66.122 1 reject example.com none sn20.zone.eu neutral 31.222.176.169 4 reject example.com none lciclubs.com pass 65.254.253.146 1 reject example.com none yourhostingaccount.com pass 66.220.144.136 491 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.137 471 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.145 478 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.150 494 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.153 508 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.157 449 reject m.example.com m.example.com neutral m.example.com neutral 67.220.209.179 1 reject example.com none server38.verygoodserver.com neutral 69.171.232.142 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 69.171.240.244 4 reject example.com none example.com fail 74.125.245.116 1 reject mx.example.com none psmtp.com neutral 74.220.218.223 1 reject example.com none box751.bluehost.com neutral 75.103.105.136 1 reject example.com none example.com fail 76.162.254.106 1 reject example.com none example.com fail 76.164.172.163 1 reject example.com none example.com fail 168.144.250.178 1 reject example.com none example.com fail 168.144.250.179 2 reject example.com none example.com fail 187.174.157.180 14 reject example.com none example.com fail 199.101.227.129 16 reject example.com none example.com fail 199.231.136.156 12 reject example.com none example.com fail 202.162.234.241 2 reject example.com none click.in pass 202.188.163.178 8 reject example.com none example.com fail 203.190.241.211 1 reject example.com none example.com fail 204.202.242.120 1 reject example.com none example.com fail 213.215.116.130 1 reject example.com none example.com fail 213.239.205.210 2 reject example.com none server2.contrateam.com neutral 193.2.1.75 1 none forwarded example.com example.com pass example.com fail 50.57.0.7 1 reject forwarded example.com none example.com fail 155.48.8.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.68.2.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.38.5.15 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.80.43 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.34.12 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.13 1 none forwarded example.com example.com pass msn.com pass 65.55.34.15 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.16 1 none forwarded example.com example.com pass live.com pass 65.55.34.19 2 none forwarded support.example.com support.example.com pass live.com pass 65.55.34.21 8 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.24 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.34.26 6 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.25 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.27 1 none forwarded support.example.com support.example.com pass hotmail.co.uk pass 65.55.90.46 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.60.53.50 2 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.186.2 1 none forwarded support.example.com support.example.com pass riggimediainternational.com pass 67.79.157.3 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.30.239.6 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.9.147.87 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.62.16 4 none forwarded support.example.com support.example.com pass support.example.com fail 77.75.72.44 3 none forwarded support.example.com support.example.com pass seznam.cz pass 80.67.18.10 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.53 3 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.31 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.36 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.18.95.64 1 none forwarded support.example.com support.example.com pass fastwebnet.it neutral 89.111.4.82 1 none forwarded support.example.com support.example.com pass inbox.lt pass 24.39.57.9 3 reject forwarded reply.example.com examplemail.com neutral reply.example.com neutral 35.9.75.81 2 reject forwarded example.com msu.edu pass example.com fail 64.18.0.27 1 reject forwarded support.example.com support.example.com neutral exprod5ob114.obsmtp.com neutral 121.9.245.25 12 none forwarded support.example.com support.example.com pass support.example.com fail 128.59.84.80 4 none forwarded support.example.com support.example.com pass support.example.com fail 128.91.87.21 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.128.5.19 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.79.1.193 1 none forwarded support.example.com support.example.com pass support.example.com fail 130.18.2.143 1 none forwarded support.example.com support.example.com pass support.example.com fail 130.85.25.80 3 none forwarded support.example.com support.example.com pass support.example.com fail 194.213.4.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.90.130.9 1 none forwarded support.example.com support.example.com pass vibit.co.il neutral 201.16.7.132 1 none forwarded support.example.com support.example.com pass support.example.com fail 204.13.10.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.7.86.137 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.227.17.4 2 none forwarded support.example.com support.example.com pass support.example.com fail 216.40.42.17 14 none forwarded support.example.com support.example.com pass support.example.com fail 216.70.64.24 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.70.64.41 2 none forwarded support.example.com support.example.com pass support.example.com fail 64.13.152.27 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.244.59.37 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.27.59.144 2 none forwarded support.example.com support.example.com pass support.example.com fail 64.37.61.192 5 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.111.90 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.20 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.23 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.24 8 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.25 1 none forwarded support.example.com support.example.com pass hotmail.fr pass 65.55.116.27 8 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.33 1 none forwarded support.example.com support.example.com pass live.com.mx pass 65.55.116.34 1 none forwarded support.example.com support.example.com pass live.nl pass 65.55.116.35 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.38 1 none forwarded support.example.com support.example.com pass email.itt-tech.edu neutral 65.55.116.48 1 none forwarded support.example.com support.example.com pass live.com pass 66.7.215.233 1 none forwarded example.com example.com pass example.com fail 66.71.190.87 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.84.10.169 2 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.188.12 2 none forwarded example.com example.com pass soundhills.com pass 66.96.188.12 1 none forwarded example.com example.com pass builtbymayfield.com pass 67.222.52.54 2 none forwarded support.example.com support.example.com pass support.example.com fail 67.23.226.19 3 none forwarded support.example.com support.example.com pass support.example.com fail 69.16.226.64 1 none forwarded example.com example.com pass example.com fail 69.64.157.17 3 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.17.213 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.1.201.196 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.30.239.76 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.5.230.103 2 none forwarded support.example.com support.example.com pass zoho.com pass 74.125.82.41 1 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.41 1 none forwarded support.example.com support.example.com pass bestsports.sk pass 74.125.82.41 1 none forwarded support.example.com support.example.com pass palmergroupmedia.com neutral 74.125.82.43 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.43 1 none forwarded support.example.com support.example.com pass businessleads.com neutral 74.125.82.48 1 none forwarded support.example.com support.example.com pass senseofashion.com pass 74.125.82.50 1 none forwarded support.example.com support.example.com pass johnson.is pass 74.125.82.53 1 none forwarded support.example.com support.example.com pass rusenci.com pass 74.125.83.44 3 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.83.51 4 none forwarded support.example.com support.example.com pass gmail.com pass 81.88.50.244 1 none forwarded support.example.com support.example.com pass support.example.com fail 84.16.68.108 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.236.42.52 4 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.65.93 2 none forwarded support.example.com support.example.com pass support.example.com fail 94.23.220.89 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.138.90.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.138.91.39 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.138.91.63 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.40.1.38 1 reject forwarded example.com none example.com fail 4.59.182.99 1 reject forwarded example.com none example.com fail 64.18.1.144 1 reject forwarded example.com none example.com fail 65.55.88.13 1 reject forwarded example.com example.com neutral louisville.edu neutral 65.55.88.14 1 reject forwarded support.example.com support.example.com neutral torusmarketing.com neutral 66.38.0.165 1 reject forwarded example.com none example.com fail 67.15.58.65 1 reject forwarded example.com none no10.nayana.kr neutral 69.89.26.97 1 reject forwarded example.com none example.com fail 72.13.32.89 2 reject forwarded example.com none example.com fail 76.96.62.32 1 reject forwarded example.com none example.com fail 77.75.72.44 2 reject forwarded example.com example.com neutral seznam.cz pass 111.86.156.36 1 none forwarded support.example.com support.example.com pass gmail.com neutral 111.89.207.21 1 none forwarded support.example.com support.example.com pass super-edition.sppd.ne.jp neutral 122.130.255.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.104.30.35 1 none forwarded support.example.com support.example.com pass bounces.m4x.org pass 132.235.51.17 3 none forwarded support.example.com support.example.com pass support.example.com fail 134.84.135.97 1 none forwarded support.example.com support.example.com pass umn.edu neutral 141.211.90.67 3 none forwarded support.example.com support.example.com pass support.example.com fail 142.58.101.32 5 none forwarded support.example.com support.example.com pass support.example.com fail 165.212.10.32 1 none forwarded support.example.com support.example.com pass usa.net neutral 173.227.164.4 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.150.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.32.228.28 14 none forwarded support.example.com support.example.com pass support.example.com fail 182.50.144.33 6 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 188.138.16.97 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.42.82 1 none forwarded example.com example.com pass example.com fail 188.165.54.38 2 none forwarded support.example.com support.example.com pass support.example.com fail 188.93.148.56 3 none forwarded support.example.com support.example.com pass support.example.com fail 193.17.41.186 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.17.41.208 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.158.92.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.63.252.24 1 none forwarded support.example.com support.example.com pass gmail.com neutral 195.47.247.75 1 none forwarded example.com example.com pass example.com fail 199.204.19.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 200.58.115.67 2 none forwarded support.example.com support.example.com pass support.example.com fail 201.76.49.160 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.181.99.47 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.30.38.143 1 none forwarded support.example.com support.example.com pass konkuk.ac.kr pass 204.12.102.47 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.69.195.97 1 none forwarded example.com example.com pass example.com fail 208.109.80.59 2 none forwarded support.example.com support.example.com pass support.example.com fail 208.72.179.44 1 none forwarded support.example.com support.example.com pass fmvegas.com neutral 208.91.198.21 1 none forwarded example.com example.com pass example.com fail 209.164.5.203 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net fail 209.85.160.42 1 none forwarded support.example.com support.example.com pass rebellion.com.br neutral 209.85.160.46 1 none forwarded support.example.com support.example.com pass jbanetwork.com pass 209.85.160.48 4 none forwarded support.example.com support.example.com pass trade.dk neutral 209.85.160.49 1 none forwarded support.example.com support.example.com pass telinken.com neutral 209.85.160.49 1 none forwarded support.example.com support.example.com pass sinoedu.com.hk neutral 209.85.160.49 1 none forwarded support.example.com support.example.com pass weblisher.com.tw softfail 209.85.160.50 1 none forwarded support.example.com support.example.com pass pof.com pass 209.85.160.50 3 none forwarded support.example.com support.example.com pass prolight.hr softfail 209.85.160.52 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.53 1 none forwarded support.example.com support.example.com pass menudamoda.com neutral 209.85.160.54 1 none forwarded support.example.com support.example.com pass hermanus.cc neutral 209.85.160.54 1 none forwarded support.example.com support.example.com pass vidyamantra.com pass 209.85.210.41 1 none forwarded support.example.com support.example.com pass pto.hu neutral 209.85.210.50 1 none forwarded support.example.com support.example.com pass lizwong.com neutral 209.85.210.50 1 none forwarded support.example.com support.example.com pass students.towson.edu pass 209.85.210.51 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.52 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.212.44 1 none forwarded support.example.com support.example.com pass skreened.com neutral 209.85.212.44 3 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.46 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.46 1 none forwarded support.example.com support.example.com pass sgarrison.com neutral 209.85.212.47 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.49 1 none forwarded support.example.com support.example.com pass bramato.org neutral 209.85.212.49 1 none forwarded support.example.com support.example.com pass ehubllc.com softfail 209.85.212.51 1 none forwarded support.example.com support.example.com pass click-internet.fr neutral 209.85.212.52 1 none forwarded support.example.com support.example.com pass studiocenter.com neutral 209.85.212.53 1 none forwarded support.example.com support.example.com pass sgarrison.com neutral 209.85.212.53 4 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass abakusogren.com neutral 209.85.213.41 2 none forwarded support.example.com support.example.com pass easyhi.com neutral 209.85.213.41 1 none forwarded support.example.com support.example.com pass enessentia.com neutral 209.85.213.42 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.213.43 1 none forwarded example.com example.com pass gmail.com pass 209.85.213.43 14 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.43 1 none forwarded support.example.com support.example.com pass jumpfly.com pass 209.85.213.43 1 none forwarded support.example.com support.example.com pass modmarket.com neutral 209.85.213.44 1 none forwarded support.example.com support.example.com pass mpb.com neutral 209.85.213.44 1 none forwarded support.example.com support.example.com pass pereirafive.com neutral 209.85.213.45 1 none forwarded support.example.com support.example.com pass cedin.com.br pass 209.85.213.48 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.53 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.213.54 1 none forwarded support.example.com support.example.com pass mmpk.info neutral 209.85.214.41 1 none forwarded support.example.com support.example.com pass glevo.com neutral 209.85.214.41 1 none forwarded support.example.com support.example.com pass hippieshop.com neutral 209.85.214.42 1 none forwarded support.example.com support.example.com pass rachelbrownlow.com neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass lespetitssuisses.com softfail 209.85.214.45 1 none forwarded example.com example.com pass bahadirmemis.com neutral 209.85.214.46 2 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.46 1 none forwarded support.example.com support.example.com pass pontweb.ro neutral 209.85.214.46 1 none forwarded support.example.com support.example.com pass runiver.net neutral 209.85.214.46 5 none forwarded support.example.com support.example.com pass webdweller.com neutral 209.85.214.47 1 none forwarded support.example.com support.example.com pass uxcell.com.br neutral 209.85.214.47 13 none forwarded support.example.com support.example.com pass sojostudios.com neutral 209.85.214.48 1 none forwarded support.example.com support.example.com pass forexeurostocks.com neutral 209.85.214.52 1 none forwarded support.example.com support.example.com pass mancia.org pass 209.85.214.53 1 none forwarded support.example.com support.example.com pass global.t-bird.edu pass 209.85.214.54 1 none forwarded support.example.com support.example.com pass pontweb.ro neutral 209.85.215.44 1 none forwarded support.example.com support.example.com pass minervalabs.com neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass giampapa.com pass 209.85.215.46 2 none forwarded support.example.com support.example.com pass istanbul.com neutral 209.85.215.48 1 none forwarded support.example.com support.example.com pass ideaverse.com.sg softfail 209.85.215.49 13 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.49 1 none forwarded support.example.com support.example.com pass mccormickandwinter.com pass 209.85.215.52 1 none forwarded support.example.com support.example.com pass mcdowall.info neutral 209.85.215.53 7 none forwarded support.example.com support.example.com pass hilifeinteractive.com pass 209.85.215.54 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.216.41 2 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.216.42 1 none forwarded support.example.com support.example.com pass limburg.pro neutral 209.85.216.45 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.47 1 none forwarded support.example.com support.example.com pass edgei.net permerror 209.85.216.48 1 none forwarded support.example.com support.example.com pass psychiatr.com.ua neutral 209.85.216.49 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.49 1 none forwarded support.example.com support.example.com pass myboysandgirlsclub.com neutral 209.85.216.50 1 none forwarded support.example.com support.example.com pass pearsonkramer.com neutral 210.131.4.232 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.134.58.27 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.52.84.111 1 none forwarded example.com example.com pass example.com fail 212.74.100.49 1 none forwarded example.com example.com pass tiscali.co.uk pass 213.246.42.36 3 none forwarded support.example.com support.example.com pass support.example.com fail 216.146.32.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.114.99.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.160.4.116 1 none forwarded support.example.com support.example.com pass support.example.com fail 46.102.236.36 5 none forwarded support.example.com support.example.com pass support.example.com fail 62.129.252.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.42 1 none forwarded support.example.com support.example.com pass blendedforbetterhealth.com pass 65.61.221.207 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.11.225.135 1 none forwarded support.example.com support.example.com pass kulix.org neutral 66.220.157.70 1 none forwarded example.com example.com pass example.com pass 67.222.34.117 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.223.98.194 4 none forwarded support.example.com support.example.com pass support.example.com fail 69.167.134.75 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.244.48 1 none forwarded example.com spc.example.com pass example.com pass 69.171.244.64 1 none forwarded example.com example.com pass example.com pass 70.40.200.227 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.10.165.142 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.30.239.215 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.115.168.43 3 none forwarded support.example.com support.example.com pass bounce2.pobox.com pass 74.117.222.55 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.149.18 1 none forwarded support.example.com support.example.com pass shinenorth.com neutral 74.125.82.171 1 none forwarded support.example.com support.example.com pass 101.es neutral 74.125.82.171 1 none forwarded support.example.com support.example.com pass ntlworld.com neutral 74.125.82.172 1 none forwarded support.example.com support.example.com pass nozio.com neutral 74.125.82.174 1 none forwarded support.example.com support.example.com pass koovs.com softfail 74.125.82.180 2 none forwarded support.example.com support.example.com pass atnet.gr softfail 74.125.82.180 2 none forwarded support.example.com support.example.com pass playboycondoms.ca neutral 74.125.82.181 1 none forwarded support.example.com support.example.com pass emtronet.pl pass 74.125.82.182 1 none forwarded support.example.com support.example.com pass glmalibu.com temperror 74.220.221.68 1 none forwarded support.example.com support.example.com pass support.example.com fail 75.180.132.34 1 none forwarded example.com example.com pass example.com fail 76.74.242.190 1 none forwarded support.example.com support.example.com pass support.example.com fail 78.108.81.232 1 none forwarded support.example.com support.example.com pass gmail.com neutral 79.170.40.143 3 none forwarded example.com example.com pass example.com fail 79.170.40.218 2 none forwarded support.example.com support.example.com pass support.example.com fail 83.167.48.133 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.13.138.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.13.143.154 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.106.33.222 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.98.163.143 2 none forwarded support.example.com support.example.com pass support.example.com fail 88.80.206.251 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.145.88.160 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.145.92.168 1 none forwarded support.example.com support.example.com pass support.example.com fail 92.38.193.131 20 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.82 1 none forwarded support.example.com support.example.com pass support.example.com fail 95.108.130.94 1 none forwarded support.example.com support.example.com pass yandex.ru pass 97.74.135.185 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.138.91.166 1 none forwarded example.com example.com pass example.com fail 98.139.52.220 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.242 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.21.35.56 2 reject forwarded example.com none example.com fail 136.167.2.51 1 reject forwarded example.com none example.com fail 146.164.34.2 1 reject forwarded example.com none dncgroup.cafe24.com neutral 166.70.18.14 1 reject forwarded example.com none example.com fail 166.70.209.8 1 reject forwarded example.com none example.com fail 17.148.16.97 2 reject forwarded example.com example.com neutral example.com fail 17.148.16.98 1 reject forwarded example.com none example.com fail 17.148.16.99 1 reject forwarded support.example.com support.example.com neutral medicaltours.ro softfail 173.203.2.22 1 reject forwarded example.com example.com neutral example.com fail 177.23.80.81 1 reject forwarded example.com none iits.com.br pass 195.11.75.85 1 reject forwarded example.com none example.com fail 195.3.96.120 2 reject forwarded example.com none example.com fail 202.92.144.3 5 reject forwarded example.com none example.com fail 207.8.111.99 3 reject forwarded support.example.com support.example.com neutral initiativelegal.com pass 208.68.17.93 4 reject forwarded example.com none example.com fail 212.227.17.4 2 reject forwarded example.com none example.com fail 216.70.64.41 3 reject forwarded example.com none example.com fail 216.98.224.8 15 reject forwarded example.com none example.com fail 62.201.140.5 1 reject forwarded example.com none example.com fail 64.26.60.138 3 reject forwarded support.example.com support.example.com fail support.example.com fail 64.26.60.139 4 reject forwarded support.example.com support.example.com fail support.example.com fail 64.95.72.244 2 reject forwarded example.com none citywidetitle.com neutral 65.55.116.12 1 reject forwarded m.example.com m.example.com neutral msn.com pass 66.11.225.84 1 reject forwarded example.com none marjunelson.net neutral 66.148.95.77 1 reject forwarded mx.example.com none mail-front3.dca2.superb.net neutral 67.23.25.220 54 reject forwarded example.com none example.com fail 69.59.157.82 1 reject forwarded example.com none example.com fail 69.89.16.161 1 reject forwarded example.com none example.com fail 70.40.203.67 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 70.84.52.186 1 reject forwarded example.com none example.com fail 72.10.55.151 2 reject forwarded example.com none example.com fail 72.35.23.123 1 reject forwarded example.com none fusemail.com pass 72.55.131.13 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 72.9.234.138 1 reject forwarded example.com none example.com fail 74.52.133.34 1 reject forwarded example.com none example.com fail 81.16.232.12 2 reject forwarded example.com none example.com fail 84.45.87.202 1 reject forwarded example.com none example.com fail 84.51.38.178 3 reject forwarded mx.example.com none linuxbayi3.isimtescil.net neutral 85.119.248.7 1 reject forwarded example.com none example.com fail 89.146.30.14 1 reject forwarded m.example.com m.example.com neutral netexpert.nl neutral 89.234.64.49 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 91.82.93.126 2 reject forwarded mx.example.com none mail.dunakeszi.hu neutral 96.31.66.220 1 reject forwarded example.com none example.com fail 98.139.91.94 1 reject forwarded example.com example.com fail example.com fail 98.139.91.99 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 99.68.159.71 1 reject forwarded example.com none example.com fail 121.119.172.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 140.142.32.201 4 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.14.133 2 none forwarded support.example.com support.example.com pass support.example.com fail 162.39.147.124 1 none forwarded example.com example.com pass gmail.com neutral 169.232.46.175 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.193.59 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.205.127.63 1 none forwarded support.example.com support.example.com pass gmail.com neutral 174.120.246.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.60.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 176.31.242.220 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.172.150.12 2 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.45.226 4 none forwarded support.example.com support.example.com pass support.example.com fail 192.114.71.150 1 none forwarded support.example.com support.example.com pass support.example.com fail 192.116.245.25 1 none forwarded support.example.com support.example.com pass gmail.com neutral 195.186.99.141 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.228.254.56 1 none forwarded support.example.com support.example.com pass eperjesiadam.hu neutral 195.29.150.139 1 none forwarded example.com example.com pass example.com fail 199.167.200.39 2 none forwarded support.example.com support.example.com pass support.example.com fail 200.63.196.107 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.223.132.53 2 none forwarded support.example.com support.example.com pass support.example.com fail 204.202.242.86 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.241.128.23 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.58.136.190 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.69.195.102 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.81.238.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.119 3 none forwarded support.example.com support.example.com pass support.example.com fail 209.51.133.109 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.172 4 none forwarded support.example.com support.example.com pass compasslabs.com neutral 209.85.160.180 1 none forwarded example.com example.com pass globo.com pass 209.85.160.180 1 none forwarded support.example.com support.example.com pass cinemadslr.com.br softfail 209.85.161.169 2 none forwarded support.example.com support.example.com pass easyhi.com neutral 209.85.161.170 1 none forwarded support.example.com support.example.com pass online.net.tw neutral 209.85.161.171 1 none forwarded support.example.com support.example.com pass instyledm.com pass 209.85.161.171 1 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.161.172 2 none forwarded support.example.com support.example.com pass elfnet.ro neutral 209.85.161.172 13 none forwarded support.example.com support.example.com pass compasslabs.com neutral 209.85.161.172 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.161.174 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.174 1 none forwarded support.example.com support.example.com pass centralusadistributors.com neutral 209.85.161.176 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.161.176 1 none forwarded support.example.com support.example.com pass my.am neutral 209.85.161.176 1 none forwarded support.example.com support.example.com pass mazemedia.se neutral 209.85.161.176 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.161.177 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.161.179 1 none forwarded support.example.com support.example.com pass agenciaball.com.br pass 209.85.161.182 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.170 1 none forwarded example.com example.com pass gmail.com pass 209.85.212.170 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.212.171 1 none forwarded example.com example.com pass ostatemail.okstate.edu neutral 209.85.212.171 1 none forwarded support.example.com support.example.com pass globalmediainsight.com neutral 209.85.212.173 1 none forwarded support.example.com support.example.com pass localssurfschool.com neutral 209.85.212.174 1 none forwarded support.example.com support.example.com pass nutrijuice.de neutral 209.85.212.181 1 none forwarded support.example.com support.example.com pass rusenci.com pass 209.85.212.182 1 none forwarded support.example.com support.example.com pass businessleads.com neutral 209.85.213.171 2 none forwarded support.example.com support.example.com pass instyledm.com pass 209.85.213.172 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.173 1 none forwarded support.example.com support.example.com pass dadis.lt neutral 209.85.213.174 1 none forwarded support.example.com support.example.com pass sarmady.net neutral 209.85.213.177 1 none forwarded support.example.com support.example.com pass rebussoft.com softfail 209.85.213.178 3 none forwarded support.example.com support.example.com pass industrystandard.ro pass 209.85.213.182 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.182 3 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass shoemoney.com softfail 209.85.214.170 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.170 3 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.171 1 none forwarded example.com example.com pass belomed.com neutral 209.85.214.171 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass dezprauma.com neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass peaksware.com pass 209.85.214.172 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.214.172 1 none forwarded support.example.com support.example.com pass bodyandmindguam.com neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass bikerornot.com pass 209.85.214.174 1 none forwarded support.example.com support.example.com pass fusiontree.com neutral 209.85.214.177 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.214.178 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.178 1 none forwarded support.example.com support.example.com pass ederlima.com.br neutral 209.85.214.178 5 none forwarded support.example.com support.example.com pass whitehawkventures.com neutral 209.85.214.179 1 none forwarded support.example.com support.example.com pass mamu.com.tw neutral 209.85.214.179 2 none forwarded support.example.com support.example.com pass digidemon.eu neutral 209.85.214.179 1 none forwarded support.example.com support.example.com pass keyhomefurnishings.com neutral 209.85.214.180 2 none forwarded support.example.com support.example.com pass vandibt.hu pass 209.85.214.180 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.214.180 1 none forwarded support.example.com support.example.com pass thirdoptionmen.org neutral 209.85.214.181 3 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass toteleather.com softfail 209.85.214.182 1 none forwarded support.example.com support.example.com pass spoka.net softfail 209.85.214.182 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.215.170 9 none forwarded support.example.com support.example.com pass uprise40.com neutral 209.85.216.169 2 none forwarded support.example.com support.example.com pass grooves.co.jp pass 209.85.216.170 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.172 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.173 1 none forwarded example.com example.com pass jigasia.com.sg neutral 209.85.216.175 1 none forwarded support.example.com support.example.com pass mail.csuchico.edu neutral 209.85.216.178 1 none forwarded support.example.com support.example.com pass privepass.com pass 209.85.216.182 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.169 2 none forwarded support.example.com support.example.com pass woow.com.uy neutral 209.85.217.169 1 none forwarded support.example.com support.example.com pass nettingsolutions.com neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass mcdowall.info neutral 209.85.217.172 1 none forwarded support.example.com support.example.com pass portaleducacao.com.br pass 209.85.217.173 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.217.174 3 none forwarded support.example.com support.example.com pass imovasyon.com neutral 209.85.217.174 5 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.175 19 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.175 1 none forwarded support.example.com support.example.com pass asu.edu neutral 209.85.217.176 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.177 1 none forwarded support.example.com support.example.com pass anet-web.com pass 209.85.217.178 7 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.217.179 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.179 3 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.181 1 none forwarded support.example.com support.example.com pass shareurjoy.com neutral 209.85.217.182 1 none forwarded support.example.com support.example.com pass ecobookscan.jp neutral 209.85.220.173 1 none forwarded support.example.com support.example.com pass sgarrison.com neutral 209.85.220.177 1 none forwarded support.example.com support.example.com pass internationalpreschoolcurriculum.com neutral 209.85.220.178 2 none forwarded support.example.com support.example.com pass gmail.com pass 210.150.250.55 3 none forwarded support.example.com support.example.com pass support.example.com fail 210.152.162.47 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.144.33 2 none forwarded example.com example.com pass example.com fail 210.172.153.10 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.188.195.26 1 none forwarded support.example.com support.example.com pass bounces.heteml.jp pass 212.128.129.62 1 none forwarded example.com example.com pass puc.rediris.es softfail 212.82.109.244 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.58.227.230 2 none forwarded support.example.com support.example.com pass support.example.com fail 216.86.168.220 1 none forwarded support.example.com support.example.com pass srs-forwarder.mxes.net pass 219.101.158.18 1 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.162.184 2 none forwarded support.example.com support.example.com pass support.example.com fail 220.181.15.194 1 none forwarded support.example.com support.example.com pass 126.com pass 62.128.193.153 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.128.193.157 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.128.193.158 1 none forwarded support.example.com support.example.com pass support.example.com fail 63.251.171.168 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.235 2 none forwarded support.example.com support.example.com pass helpyourcase.com pass 66.220.144.142 2 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.155 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.141 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.142 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.147 1 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.151 4 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.156 5 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.151 10 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.154 14 none forwarded support.example.com support.example.com pass support.example.com pass 72.167.218.153 1 none forwarded example.com example.com pass bounce.secureserver.net pass 74.125.149.143 1 none forwarded support.example.com support.example.com pass ixiononline.com temperror 74.125.149.203 1 none forwarded support.example.com support.example.com pass dons.usfca.edu neutral 74.220.206.174 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.208.250 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.221.145 1 none forwarded support.example.com support.example.com pass support.example.com fail 75.125.153.202 1 none forwarded support.example.com support.example.com pass support.example.com fail 75.125.234.170 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.214 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.221 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.172.225.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.169.146.144 4 none forwarded example.com example.com pass example.com fail 81.169.146.144 2 none forwarded support.example.com support.example.com pass support.example.com fail 81.169.146.146 10 none forwarded example.com example.com pass example.com fail 84.244.165.164 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.185.233.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.203.134.210 1 none forwarded support.example.com support.example.com pass innetin.pl pass 94.100.176.159 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.167 1 none forwarded support.example.com support.example.com pass support.example.com fail 111.86.156.36 1 reject forwarded reply.example.com examplemail.com neutral returns.yahoogroups.jp softfail 128.208.2.116 1 reject forwarded example.com none example.com fail 128.59.28.169 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 128.59.28.174 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 129.170.16.23 1 reject forwarded example.com none example.com fail 130.111.32.94 2 reject forwarded reply.example.com none reply.example.com neutral 132.239.0.176 1 reject forwarded example.com none example.com fail 139.78.133.15 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 141.211.90.67 1 reject forwarded example.com none example.com fail 144.118.29.81 1 reject forwarded example.com none example.com fail 165.212.10.22 1 reject forwarded mx.example.com none cmsmail02.mx.net neutral 17.148.16.104 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 174.143.67.26 27 reject forwarded example.com none example.com fail 189.38.92.193 1 reject forwarded example.com none example.com fail 195.47.247.72 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 198.31.50.123 1 reject forwarded example.com none example.com fail 200.58.111.87 1 reject forwarded mx.example.com none escobar.dattaweb.com neutral 201.76.49.220 1 reject forwarded support.example.com none support.example.com fail 203.116.95.58 45 reject forwarded example.com none example.com fail 203.183.92.22 1 reject forwarded example.com example.com fail example.com fail 204.11.244.83 1 reject forwarded example.com none example.com fail 206.46.172.75 1 reject forwarded example.com none example.com fail 207.111.227.6 1 reject forwarded example.com none example.com fail 208.113.175.8 1 reject forwarded proxymail.example.com none rockies.dreamhost.com neutral 208.113.200.5 1 reject forwarded example.com none homiemail-mx21.g.dreamhost.com neutral 209.85.212.44 1 reject forwarded support.example.com support.example.com neutral pace.edu softfail 209.85.215.41 1 reject forwarded example.com example.com neutral peakgames.net pass 209.85.215.54 1 reject forwarded example.com example.com fail unitedparents.com neutral 209.85.216.46 1 reject forwarded m.example.com m.example.com neutral auone.jp pass 209.91.173.10 8 reject forwarded example.com none example.com fail 210.157.23.78 1 reject forwarded example.com none post.freeml.com pass 211.125.95.91 1 reject forwarded example.com none post.freeml.com pass 212.227.15.20 1 reject forwarded mx.example.com none mout-bounce.kundenserver.de pass 212.227.17.12 1 reject forwarded example.com mail6.us2.mcsv.net pass web.de neutral 212.232.26.49 1 reject forwarded example.com none example.com fail 216.33.127.88 1 reject forwarded example.com none example.com fail 216.84.110.69 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 217.153.17.67 17 reject forwarded example.com none example.com fail 24.241.102.82 43 reject forwarded example.com none example.com fail 50.43.125.101 1 reject forwarded example.com none example.com fail 64.112.192.12 8 reject forwarded example.com none example.com fail 64.119.192.33 1 reject forwarded example.com none example.com fail 64.34.111.239 1 reject forwarded mx.example.com none barmail6.idig.net neutral 64.69.121.182 3 reject forwarded reply.example.com examplemail.com fail marian.org neutral 65.23.129.159 1 reject forwarded example.com none example.com fail 66.175.56.166 1 reject forwarded example.com none example.com fail 66.175.56.172 1 reject forwarded example.com none example.com fail 66.220.157.24 2 reject forwarded mx.example.com none unknown neutral 66.220.157.26 2 reject forwarded mx.example.com none unknown neutral 66.223.51.217 1 reject forwarded example.com none example.com fail 66.98.137.170 1 reject forwarded example.com none example.com fail 67.132.94.189 9 reject forwarded support.example.com support.example.com neutral digitalfirstmedia.com neutral 67.222.47.170 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.222.50.109 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.171.244.45 1 reject forwarded mx.example.com none unknown neutral 69.60.118.117 53 reject forwarded example.com none example.com fail 69.73.138.176 1 reject forwarded example.com none example.com fail 72.249.31.130 1 reject forwarded mx.example.com none venice.directrouter.com neutral 72.32.252.110 1 reject forwarded example.com none hollisterstaff.com neutral 72.37.159.210 2 reject forwarded example.com none example.com fail 74.125.245.94 1 reject forwarded support.example.com support.example.com neutral buymedge.com pass 74.205.223.11 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 75.127.79.205 1 reject forwarded example.com none example.com fail 80.246.63.155 1 reject forwarded mx.example.com none vps10053.alfahosting-vps.de neutral 82.94.241.146 119 reject forwarded support.example.com support.example.com neutral support.example.com fail 84.246.227.83 3 reject forwarded example.com none example.com fail 88.198.64.142 1 reject forwarded mx.example.com none uniweb.ua pass 89.149.242.26 17 reject forwarded example.com none example.com fail 91.198.169.59 1 reject forwarded mx.example.com none mx-l.one.com neutral 94.228.131.93 1 reject forwarded example.com none example.com fail 94.228.131.94 1 reject forwarded mx.example.com none email02.domeinbalie.nl neutral 94.236.79.138 1 reject forwarded example.com none example.com fail 95.183.136.24 1 reject forwarded mx.example.com none personelmail.artuklu.edu.tr neutral 97.74.135.187 1 reject forwarded mx.example.com none p3plsmtp10-04.prod.phx3.secureserver.net neutral 98.139.91.220 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 98.142.182.46 1 reject forwarded example.com none example.com fail 119.245.215.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.176.134 2 none forwarded support.example.com support.example.com pass kcjones.org neutral 168.144.250.215 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.230.254.146 3 none forwarded support.example.com support.example.com pass support.example.com fail 174.129.206.125 1 none forwarded support.example.com support.example.com pass support.example.com fail 175.177.155.112 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.146.198 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.199.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.231.247.163 2 none forwarded support.example.com support.example.com pass support.example.com fail 200.144.190.152 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.150.228.135 1 none forwarded support.example.com support.example.com pass support.example.com fail 204.200.147.177 1 none forwarded support.example.com support.example.com pass support.example.com fail 204.200.169.216 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.126.144.113 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 207.126.144.133 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 210.150.254.124 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.133.182 2 none forwarded example.com example.com pass example.com fail 210.172.144.210 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.171.216.160 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.182.251 1 none forwarded support.example.com support.example.com pass support.example.com fail 219.118.179.250 14 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.69 2 none mailing_list support.example.com none halfhitch.com pass 209.85.160.69 3 none mailing_list support.example.com none gametrafficmedia.com pass 209.85.160.70 9 none mailing_list support.example.com none plumbee.co.uk pass 209.85.160.71 8 none mailing_list support.example.com none xa.net pass 209.85.160.71 2 none mailing_list support.example.com none 123rf.com pass 209.85.160.71 2 none mailing_list support.example.com none crowdm.it pass 209.85.160.71 2 none mailing_list support.example.com none mediafactory.com.br pass 209.85.210.69 6 none mailing_list support.example.com none popimedia.com pass 209.85.210.71 3 none mailing_list support.example.com none theopenskyproject.com pass 209.85.210.72 4 none mailing_list support.example.com none essencedigital.com pass 209.85.212.69 3 none mailing_list support.example.com none popimedia.com pass 209.85.212.70 3 none mailing_list support.example.com none raybeam.com pass 209.85.213.70 7 none mailing_list support.example.com none gosocial.dk pass 209.85.213.70 53 none mailing_list support.example.com none graphscience.com pass 209.85.214.70 26 none mailing_list support.example.com none graphscience.com pass 209.85.216.71 2 none mailing_list support.example.com none croud.co.uk pass 12.158.190.246 37 reject forwarded example.com none example.com fail 128.103.208.29 1 reject forwarded example.com none example.com fail 128.253.83.164 8 reject forwarded support.example.com support.example.com neutral support.example.com fail 129.105.238.11 1 reject forwarded example.com none example.com fail 132.229.103.50 1 reject forwarded mx.example.com none btv1==4852f214771== neutral 169.232.46.175 1 reject forwarded example.com none example.com fail 173.203.29.167 1 reject forwarded example.com none dncgroup.cafe24.com neutral 174.120.172.34 1 reject forwarded example.com none example.com fail 174.127.106.11 1 reject forwarded example.com none example.com fail 174.36.150.192 1 reject forwarded example.com none example.com fail 176.31.107.207 2 reject forwarded mx.example.com none ns392966.ovh.net neutral 189.114.60.107 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 193.213.115.31 2 reject forwarded example.com none example.com fail 194.126.180.11 1 reject forwarded example.com none com.if.ua pass 194.187.151.70 15 reject forwarded example.com none example.com fail 195.154.124.28 6 reject forwarded groups.example.com examplemail.com fail mail2.netopenservices.fr neutral 195.240.50.212 2 reject forwarded example.com none ouborg.it neutral 195.55.130.107 3 reject forwarded example.com none example.com fail 200.219.212.53 1 reject forwarded example.com none srs.idc2.mandic.com.br pass 200.251.96.126 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 202.224.39.197 5 reject forwarded example.com none example.com fail 202.238.83.222 1 reject forwarded example.com none example.com fail 204.202.242.88 1 reject forwarded example.com none example.com fail 206.188.198.65 1 reject forwarded mx.example.com none mail.networksolutionsemail.com neutral 206.217.196.41 1 reject forwarded example.com none example.com fail 208.180.40.101 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 208.91.198.254 1 reject forwarded example.com example.com neutral example.com fail 209.134.25.146 1 reject forwarded example.com none example.com fail 209.172.35.134 1 reject forwarded example.com none example.com fail 209.51.158.154 1 reject forwarded example.com none example.com fail 209.85.161.172 1 reject forwarded support.example.com none thrillon.com neutral 209.85.161.173 1 reject forwarded example.com example.com neutral createandspread.com pass 209.85.213.169 2 reject forwarded example.com example.com neutral peakgames.net pass 209.85.214.169 14 reject forwarded example.com example.com neutral peakgames.net pass 213.132.101.43 43 reject forwarded example.com none example.com fail 213.153.32.151 1 reject forwarded example.com none example.com fail 213.171.216.29 1 reject forwarded example.com none raymondcooper.co.uk neutral 213.180.31.146 1 reject forwarded mx.example.com none mh3.elkdata.ee neutral 216.113.25.150 1 reject forwarded example.com none example.com fail 216.151.162.28 4 reject forwarded example.com none example.com fail 216.180.241.26 1 reject forwarded example.com none example.com fail 216.32.181.186 1 reject forwarded support.example.com support.example.com neutral alumni.ou.edu pass 216.92.131.148 1 reject forwarded example.com none example.com fail 217.70.183.195 16 reject forwarded example.com none example.com fail 46.255.227.254 1 reject forwarded support.example.com support.example.com neutral centrum.cz pass 62.149.158.169 1 reject forwarded mx.example.com none smtpnewsletter2.aruba.it neutral 66.220.144.144 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.192.241.134 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 68.230.241.141 2 reject forwarded example.com none example.com fail 68.230.241.210 1 reject forwarded example.com none example.com fail 74.125.149.167 1 reject forwarded example.com none example.com fail 91.121.122.187 1 reject forwarded example.com none example.com fail 91.198.169.248 2 reject forwarded mx.example.com none mx-q.one.com neutral 95.108.253.144 1 reject forwarded example.com none cn.ru neutral 98.138.215.243 1 reject forwarded example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.229.134 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 99.198.122.248 3 reject forwarded mx.example.com none outgoing.x10premium.com pass 202.49.20.12 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 206.78.42.78 7 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 210.0.142.57 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.213.200 4 none mailing_list support.example.com none largeinc.com pass 209.85.214.199 2 none mailing_list support.example.com none xa.net pass 209.85.214.199 7 none mailing_list support.example.com none httpool.com pass 209.85.214.200 3 none mailing_list example.com none desgames.com pass 209.85.215.200 3 none mailing_list example.com none disqus.com pass 209.85.220.197 6 none mailing_list support.example.com none popimedia.com pass 121.111.227.145 1 reject forwarded mx.example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.145 5 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 122.152.128.159 1 reject forwarded example.com none example.com fail 124.105.170.194 1 reject forwarded example.com none example.com fail 128.196.130.204 5 reject forwarded example.com none example.com fail 136.176.200.221 3 reject forwarded example.com none example.com fail 141.117.101.133 1 reject forwarded example.com none example.com fail 169.229.218.145 1 reject forwarded example.com none example.com fail 169.229.218.147 1 reject forwarded example.com none example.com fail 169.229.218.147 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 173.193.161.162 1 reject forwarded example.com none example.com fail 174.127.104.202 1 reject forwarded example.com none example.com fail 178.218.212.210 83 reject forwarded example.com none example.com fail 199.101.227.129 44 reject forwarded example.com none example.com fail 199.231.136.140 30 reject forwarded example.com none example.com fail 202.181.230.228 2 reject forwarded example.com none example.com fail 207.155.249.212 1 reject forwarded example.com none example.com fail 209.112.173.243 4 reject forwarded example.com none acsalaska.net pass 210.247.193.195 1 reject forwarded example.com none example.com fail 213.171.216.165 1 reject forwarded example.com none example.com fail 216.139.221.177 86 reject forwarded example.com none example.com fail 216.151.164.100 1 reject forwarded mx.example.com none mail.njtech.com neutral 130.111.32.94 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 3 reject mailing_list support.example.com none purplerockscissors.com neutral 209.85.160.70 4 reject mailing_list support.example.com none w3americas.com neutral 209.85.160.71 18 reject mailing_list support.example.com none irep.co.jp pass 209.85.160.72 8 reject mailing_list example.com none ff0000.com neutral 209.85.160.72 2 reject mailing_list support.example.com none i1play.com neutral 209.85.160.72 3 reject mailing_list support.example.com none wago.com.my neutral 209.85.160.72 2 reject mailing_list support.example.com none friendsurance.de neutral 209.85.210.69 3 reject mailing_list support.example.com none wannaflock.com pass 209.85.210.69 3 reject mailing_list support.example.com none fishermanmedia.es neutral 209.85.210.70 6 reject mailing_list example.com none come2play.com neutral 209.85.210.70 41 reject mailing_list support.example.com none dingle.fi neutral 209.85.210.70 2 reject mailing_list support.example.com none vagalume.com.br neutral 209.85.210.70 3 reject mailing_list support.example.com none aquiesdonde.com.ar neutral 209.85.210.71 54 reject mailing_list support.example.com none adtz.com neutral 209.85.210.71 2 reject mailing_list support.example.com none hotel.cz neutral 209.85.213.70 3 reject mailing_list support.example.com none linkedpartners.com neutral 209.85.213.72 7 reject mailing_list support.example.com none deducta.dk neutral 209.85.214.70 1 reject mailing_list support.example.com none quirk.biz neutral 209.85.216.70 1 reject mailing_list support.example.com none quirk.biz neutral 98.136.218.40 2 reject mailing_list example.com yahoogroups.com pass returns.groups.yahoo.com neutral 170.140.50.231 4 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 207.236.237.39 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.161.198 7 reject mailing_list support.example.com none graphscience.com pass 209.85.161.198 1 reject mailing_list support.example.com none linkedpartners.com neutral 209.85.161.200 2 reject mailing_list support.example.com none prodigi.com.ua neutral 209.85.213.198 1 reject mailing_list example.com none 88hours.com neutral 209.85.214.199 3 reject mailing_list support.example.com none mpwmarketing.com neutral 209.85.214.200 1 reject mailing_list example.com none productmadness.com softfail 209.85.214.200 1 reject mailing_list support.example.com none adsonic.de neutral 209.85.214.200 4 reject mailing_list support.example.com none prodigi.com.ua neutral 209.85.215.197 4 reject mailing_list support.example.com none varlabs.com neutral 81.201.210.213 9 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 13 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.213.71 42 none forwarded mailing_list support.example.com none fetise.com pass 209.85.213.72 2 none forwarded mailing_list support.example.com none watercooler-inc.com pass 74.125.245.76 2 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.245.80 6 none forwarded mailing_list support.example.com none trada.com pass 74.125.245.90 6 none forwarded mailing_list support.example.com none crowdstar.com pass 208.85.94.58 1 reject forwarded mailing_list proxymail.example.com none ml.gaiaonline.com neutral 208.85.94.59 2 reject forwarded mailing_list example.com example.com neutral ml.gaiaonline.com neutral 74.125.82.70 3 reject forwarded mailing_list support.example.com none maxpho.com neutral 74.125.83.70 3 reject forwarded mailing_list support.example.com none designbrooklyn.com neutral 95.172.88.30 6 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 98.136.219.2 15 reject forwarded mailing_list example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.160.198 1 none forwarded mailing_list support.example.com none bigbrands.pl pass 209.85.214.199 24 none forwarded mailing_list support.example.com none fetise.com pass 209.85.214.199 1 none forwarded mailing_list support.example.com none hipswap.com pass 209.85.214.200 37 none forwarded mailing_list support.example.com none hungrymachine.com pass 192.248.1.155 1 reject forwarded mailing_list example.com none apan.net neutral 209.85.160.72 2 reject forwarded mailing_list support.example.com none socialwavelength.com neutral 209.85.210.69 6 reject forwarded mailing_list example.com none appbistro.com neutral 209.85.210.69 2 reject forwarded mailing_list support.example.com none epubli.com neutral 209.85.210.69 12 reject forwarded mailing_list support.example.com none netvlies.net neutral 209.85.210.70 11 reject forwarded mailing_list support.example.com none crane-west.com neutral 209.85.210.71 3 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.210.72 4 reject forwarded mailing_list support.example.com none nydrle.net neutral 209.85.212.46 1 reject forwarded mailing_list support.example.com none poplabs.com pass 209.85.212.72 6 reject forwarded mailing_list example.com none iminlikewithyou.com neutral 209.85.213.53 2 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.71 52 reject forwarded mailing_list support.example.com none sokrati.com neutral 209.85.214.72 3 reject forwarded mailing_list support.example.com none oneclick.sk neutral 209.85.216.69 4 reject forwarded mailing_list support.example.com none playerize.com neutral 209.85.216.71 2 reject forwarded mailing_list support.example.com none tambourine.com neutral 209.85.216.72 1 reject forwarded mailing_list support.example.com none socialwavelength.com neutral 74.125.149.74 25 reject forwarded mailing_list support.example.com none sponsoredlinx.com neutral 74.125.149.75 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.78 3 reject forwarded mailing_list support.example.com none blabbermouthsocial.com neutral 74.125.245.86 2 reject forwarded mailing_list support.example.com none custommade.com neutral 93.186.241.77 2 reject forwarded mailing_list example.com none bellisinasce.it softfail 98.136.218.34 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.218.52 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.218.54 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.10 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.23 1 reject forwarded mailing_list reply.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.28 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.67 24 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.78 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.80 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.16 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.45 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.164.51 14 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.69 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.96 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.98 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.35 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.139.165.43 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 118.238.130.169 28 none forwarded mailing_list support.example.com none 33i.co.jp pass 207.126.144.143 2 none forwarded mailing_list support.example.com none adwebmaroc.com pass 203.151.233.59 25 reject forwarded mailing_list support.example.com none grandplanet.com neutral 209.85.161.179 2 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.161.197 2 reject forwarded mailing_list support.example.com none meyouhealth.com softfail 209.85.161.199 3 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.212.198 12 reject forwarded mailing_list example.com none schoolfeed.com softfail 209.85.213.199 6 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.214.197 3 reject forwarded mailing_list support.example.com none zcorinc.com neutral 209.85.214.199 1 reject forwarded mailing_list example.com none bunshinyakuhin.com neutral 209.85.214.200 1 reject forwarded mailing_list support.example.com none socialwavelength.com neutral 209.85.216.170 1 reject forwarded mailing_list support.example.com none apis3.com pass 209.85.216.198 5 reject forwarded mailing_list support.example.com none 219group.com neutral 209.85.216.199 2 reject forwarded mailing_list support.example.com none skandnet.com neutral 216.32.181.181 1 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 66.220.144.135 3 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.145 1 reject forwarded mailing_list example.com none hapireal.com neutral 66.220.144.145 7 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.146 2 reject forwarded mailing_list support.example.com none utest.com softfail 66.220.144.154 9 reject forwarded mailing_list support.example.com none reverbnation.com fail 66.220.144.157 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 66.220.144.158 1 reject forwarded mailing_list support.example.com none groupon.com.ar neutral 66.220.155.137 15 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.155.147 1 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 66.220.155.154 1 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 69.171.232.142 1 reject forwarded mailing_list support.example.com none acute.fr neutral 69.171.232.144 15 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 69.171.232.147 4 reject forwarded mailing_list support.example.com none dafiti.com.br softfail 69.171.232.149 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.155 36 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.157 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 74.125.149.238 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.133 5 reject forwarded mailing_list support.example.com none ecglobal.com temperror 98.136.219.116 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.136.219.158 4 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.177 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.197 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.205 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.207 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.208 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.210 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.210 15 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.236 11 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.246 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.136.219.249 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.182 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.209 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.219 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.138.214.220 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.232 4 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.214.237 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.238 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.138.214.248 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.125 21 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.131 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.158 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.239 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.241 40 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.104 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.104 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.164.104 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.108 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.109 1 reject forwarded mailing_list reply.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.164.111 7 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.114 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.115 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.mx pass returns.groups.yahoo.com neutral 98.139.165.115 17 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.133 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.163 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.175 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.183 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.186 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 209.85.160.69 3 none trusted_forwarder mailing_list support.example.com luxuryhomes.com pass support.example.com pass luxuryhomes.com permerror support.example.com pass 209.85.160.71 10 none trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 209.85.210.72 3 none trusted_forwarder mailing_list support.example.com adverit.com pass support.example.com pass adverit.com pass support.example.com pass 209.85.210.72 2 none trusted_forwarder mailing_list support.example.com remaxuno.com.ar pass support.example.com pass remaxuno.com.ar pass support.example.com pass 209.85.213.71 2 none trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 209.85.161.200 1 none trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de pass support.example.com pass 209.85.213.199 2 none trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 209.85.214.197 2 none trusted_forwarder mailing_list support.example.com bowlingball.com pass support.example.com pass bowlingball.com pass support.example.com pass 213.245.2.32 1 none forwarded trusted_forwarder mailing_list example.com googlegroups.com pass example.com pass googlegroups.com neutral example.com pass 209.85.212.70 3 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 209.85.216.71 12 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 66.220.144.140 2 none forwarded trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de softfail support.example.com pass 64.18.1.47 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.114 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.140 2 none support.example.com support.example.com pass support.example.com fail 64.18.1.141 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.177 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.201 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.203 3 none support.example.com support.example.com pass support.example.com fail 64.18.2.114 1 none support.example.com support.example.com pass support.example.com fail 64.18.2.142 2 none support.example.com support.example.com pass support.example.com fail 24.39.57.9 10 reject reply.example.com examplemail.com neutral reply.example.com neutral 80.67.18.104 1 none support.example.com support.example.com pass support.example.com fail 85.25.73.100 1 none support.example.com support.example.com pass support.example.com fail 204.9.77.82 23 reject example.com none example.com fail 64.18.1.147 1 reject example.com none example.com fail 64.18.1.158 1 reject example.com none example.com fail 64.52.192.6 11 reject example.com none example.com fail 67.18.15.34 2 reject example.com none matrix.websitewelcome.com pass 69.89.22.20 1 reject example.com none box293.bluehost.com neutral 72.1.205.60 14 reject groups.example.com none groups.example.com neutral 74.54.132.2 1 reject example.com none example.com fail 93.90.46.82 24 reject example.com none example.com fail 93.90.46.83 2 reject example.com none example.com fail 96.38.11.34 20 reject example.com none example.com fail 141.161.2.153 1 none support.example.com support.example.com pass support.example.com fail 66.220.157.49 6 none example.com spc.example.com pass example.com pass 66.220.157.68 339 none example.com example.com pass example.com pass 66.220.157.84 326 none example.com example.com pass example.com pass 66.220.157.85 296 none example.com example.com pass example.com pass 136.168.1.94 14 reject groups.example.com none groups.example.com neutral 142.75.68.65 1 reject reply.example.com none reply.example.com neutral 152.10.1.181 2 reject support.example.com support.example.com neutral support.example.com fail 173.0.84.227 2 reject example.com paypal.com fail paypal.com pass 193.151.56.6 1 reject example.com none example.com fail 216.70.64.63 2 reject example.com none example.com fail 64.39.120.53 8 reject reply.example.com examplemail.com neutral reply.example.com neutral 66.29.207.68 1 reject example.com none example.com fail 69.73.156.16 1 reject example.com none newninja.nocdirect.com neutral 69.89.24.130 1 reject example.com none host85.hostmonster.com neutral 70.39.251.57 1 reject example.com none example.com fail 70.89.52.109 1 reject example.com none example.com fail 81.26.221.25 1 reject example.com none quintaantesovento.com pass 89.234.64.50 2 reject example.com none boards.ie pass 98.130.1.142 3 reject example.com none example.com fail 66.220.144.139 50 none example.com example.com neutral example.com pass 66.220.144.140 1074 none support.example.com support.example.com pass support.example.com pass 66.220.144.150 45 none example.com example.com neutral example.com pass 66.220.144.155 1180 none support.example.com support.example.com pass support.example.com pass 66.220.144.156 1 none example.com none example.com pass 66.220.155.135 563 none support.example.com support.example.com pass support.example.com pass 66.220.155.139 2 none example.com example.com neutral example.com pass 66.220.155.154 3 none example.com example.com neutral example.com pass 66.220.155.155 463 none support.example.com support.example.com pass support.example.com pass 69.171.232.137 1576 none support.example.com support.example.com pass support.example.com pass 69.171.232.149 1680 none support.example.com support.example.com pass support.example.com pass 69.171.232.154 51 none example.com example.com neutral example.com pass 69.171.232.154 1656 none support.example.com support.example.com pass support.example.com pass 130.111.32.66 3 reject reply.example.com examplemail.com neutral reply.example.com neutral 188.93.157.41 15 reject example.com none example.com fail 194.67.27.120 1 reject support.example.com support.example.com fail monamour.ru pass 195.56.100.66 1 reject example.com none battlestar.xhu.hu neutral 204.93.165.61 2 reject example.com none example.com fail 208.113.175.8 40 reject proxymail.example.com none rockies.dreamhost.com neutral 209.85.41.144 1 reject example.com none dion.freedback.com pass 210.131.4.253 1 reject example.com nifty.com pass example.com fail 212.1.208.121 1 reject example.com none tig.boxsecured.com neutral 216.40.253.90 1 reject example.com none example.com fail 217.153.17.67 2 reject example.com none example.com fail 217.33.68.125 2 reject groups.example.com none groups.example.com neutral 62.149.158.59 1 reject example.com none example.com fail 62.76.190.248 1 reject example.com none mr-stekolli.ru neutral 67.210.124.65 1 reject example.com none example.com fail 67.23.226.151 1 reject example.com none solid.host-care.com neutral 69.36.184.124 5 reject example.com none example.com fail 69.93.122.104 1 reject example.com none example.com fail 75.149.103.21 5 reject example.com none example.com fail 76.12.106.115 1 reject example.com none example.com fail 76.162.254.97 1 reject example.com none example.com fail 80.179.55.175 9 reject example.com none example.com fail 83.168.245.16 24 reject example.com none example.com fail 93.189.92.246 8 reject example.com none example.com fail 98.129.23.123 1 reject mx.example.com none smtp.exg5.exghost.com neutral 130.127.237.235 1 none support.example.com support.example.com pass support.example.com fail 141.211.176.135 1 none support.example.com support.example.com pass support.example.com fail 207.126.144.198 2 none support.example.com support.example.com pass support.example.com fail 207.126.144.220 1 none example.com example.com pass example.com fail 207.126.144.220 1 none support.example.com support.example.com pass support.example.com fail 100.42.216.123 3 reject example.com none mars.serversaya.com neutral 116.90.208.167 6 reject example.com none example.com fail 128.103.208.31 4 reject example.com example.com fail hsph.harvard.edu neutral 128.120.32.132 1 reject example.com none example.com fail 128.239.20.101 1 reject example.com none example.com fail 173.192.226.35 1 reject .example.com none gator1328.hostgator.com pass 174.121.134.34 4 reject example.com none tredia.websitewelcome.com pass 194.187.151.70 8 reject example.com none example.com fail 195.211.72.203 2 reject example.com none tapasbarplanb.com softfail 201.201.95.183 1 reject example.com example.com fail example.com fail 204.202.242.55 1 reject example.com none example.com fail 207.103.60.230 21 reject example.com none example.com fail 207.211.91.250 7 reject example.com none example.com fail 207.97.245.122 1 reject example.com none example.com fail 207.97.245.140 1 reject example.com none example.com fail 207.97.245.154 1 reject example.com none example.com fail 207.97.245.174 1 reject example.com none example.com fail 209.210.150.13 26 reject example.com none example.com fail 213.128.82.206 2 reject example.com none googleandroid.gen.tr pass 216.81.132.155 1 reject reply.example.com none reply.example.com neutral 217.70.183.195 7 reject example.com none example.com fail 217.70.183.196 3 reject example.com none example.com fail 59.163.196.151 1 reject example.com none example.com fail 66.220.144.138 499 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.144 503 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.146 472 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.155 441 reject m.example.com m.example.com neutral m.example.com neutral 66.220.145.248 3 reject example.com none example.com fail 66.220.155.147 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 66.252.228.215 17 reject example.com none example.com fail 68.230.241.201 1 reject example.com none example.com fail 69.171.232.138 520 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.143 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 69.171.232.151 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 69.171.232.158 486 reject m.example.com m.example.com neutral m.example.com neutral 72.167.234.238 138 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 74.202.142.112 1 reject example.com none caribtourism.com neutral 75.125.191.162 1 reject example.com none example.com fail 76.162.254.113 3 reject example.com none example.com fail 83.246.103.131 16 reject example.com none example.com fail 128.241.238.254 17 reject example.com none example.com fail 174.121.134.130 1 reject example.com none example.com fail 184.106.189.129 1 reject example.com none example.com fail 184.173.199.211 2 reject example.com none example.com fail 184.173.254.234 1 reject example.com example.com fail example.com fail 203.146.237.187 12 reject example.com none example.com fail 203.190.241.121 1 reject example.com none example.com fail 208.131.141.156 5 reject example.com none example.com fail 209.137.151.114 1 reject example.com none example.com fail 209.150.128.113 1 reject example.com none example.com fail 212.220.125.207 5 reject example.com none example.com fail 213.132.114.151 19 reject example.com none example.com fail 64.18.3.82 1 none forwarded support.example.com support.example.com pass support.example.com fail 166.84.1.89 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.32.60.7 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.97.97.36 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.54.61.78 2 none forwarded example.com example.com pass hotmail.com pass 65.54.61.88 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.14 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.34.17 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.19 1 none forwarded example.com example.com pass hotmail.com pass 65.55.34.20 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.14 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.16 1 none forwarded support.example.com support.example.com pass hotmail.it pass 65.55.90.16 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.29 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.35 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.36 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.90.47 2 none forwarded support.example.com support.example.com pass hotmail.com pass 66.96.184.9 1 none forwarded support.example.com support.example.com pass frenzy.biz neutral 66.96.189.7 1 none forwarded support.example.com support.example.com pass urbanbeerhunt.com pass 66.96.219.5 2 none forwarded support.example.com support.example.com pass support.example.com fail 70.87.28.65 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.88.108.9 1 none forwarded support.example.com support.example.com pass support.example.com fail 71.74.56.23 3 none forwarded support.example.com support.example.com pass support.example.com fail 74.50.13.95 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.52.119.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.54.78.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.62.48 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.18 2 none forwarded support.example.com support.example.com pass support.example.com fail 81.0.235.44 1 none forwarded support.example.com support.example.com pass support.example.com fail 84.16.68.85 4 none forwarded support.example.com support.example.com pass support.example.com fail 87.96.164.9 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.31.96.80 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.1.62 1 reject forwarded example.com none example.com fail 64.18.1.74 1 reject forwarded example.com none example.com fail 64.34.7.28 2 reject forwarded example.com none example.com fail 107.6.136.24 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.91.55.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.91.89.93 1 none forwarded support.example.com support.example.com pass support.example.com fail 136.167.2.51 1 none forwarded support.example.com support.example.com pass support.example.com fail 149.5.18.148 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.77.222.9 1 none forwarded support.example.com support.example.com pass support.example.com fail 199.59.62.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.70.64.54 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.70.64.55 3 none forwarded support.example.com support.example.com pass support.example.com fail 216.70.81.52 3 none forwarded support.example.com support.example.com pass support.example.com fail 217.149.52.5 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.39.211.70 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.116.12 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.13 6 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.20 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.28 7 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.31 1 none forwarded example.com example.com pass hotmail.com pass 65.55.116.33 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.37 1 none forwarded support.example.com support.example.com pass live.de pass 65.55.116.41 6 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.86 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.91 1 none forwarded support.example.com support.example.com pass hotmail.com pass 66.11.225.98 1 none forwarded example.com example.com pass duchenneconnect.org neutral 66.231.191.4 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.7.207.155 2 none forwarded support.example.com support.example.com pass travelersantiqueguide.com neutral 66.96.189.18 1 none forwarded support.example.com support.example.com pass pinpointcreative.com pass 67.222.55.79 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.36.64.101 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.49.111.65 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.30.239.59 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.41 1 none forwarded support.example.com support.example.com pass expresstire.com neutral 74.125.82.44 1 none forwarded support.example.com support.example.com pass reflectstar.com neutral 74.125.82.46 1 none forwarded support.example.com support.example.com pass futurelabs.dk neutral 74.125.82.50 1 none forwarded support.example.com support.example.com pass googlemail.com pass 74.125.82.50 1 none forwarded support.example.com support.example.com pass domain-names-find.com neutral 74.125.83.41 3 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.83.43 1 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.83.53 1 none forwarded support.example.com support.example.com pass worldinternetsummit.com neutral 74.208.4.194 1 none forwarded example.com example.com pass srs.perfora.net neutral 74.208.4.194 23 none forwarded support.example.com support.example.com pass srs.perfora.net neutral 74.52.151.66 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.52.66.242 6 none forwarded support.example.com support.example.com pass support.example.com fail 74.53.68.226 2 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.27.211 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.59.243 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.93.211.75 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.103 2 none forwarded support.example.com support.example.com pass support.example.com fail 82.208.46.53 1 none forwarded support.example.com support.example.com pass hpcservice.com neutral 96.47.227.59 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.85 1 none forwarded example.com example.com pass example.com fail 98.139.91.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.90.9.53 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 208.43.76.2 1 reject forwarded example.com none example.com fail 213.75.39.5 1 reject forwarded example.com none example.com fail 217.16.6.82 5 reject forwarded example.com none example.com fail 217.16.6.89 5 reject forwarded example.com none example.com fail 64.18.0.247 2 reject forwarded support.example.com support.example.com neutral exprod5ob115.obsmtp.com neutral 64.18.2.157 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 64.37.52.95 1 reject forwarded mx.example.com none fast.nsjet.com neutral 64.59.134.9 4 reject forwarded support.example.com support.example.com fail support.example.com fail 64.78.52.11 3 reject forwarded support.example.com support.example.com neutral veteransunited.com pass 65.55.88.13 1 reject forwarded support.example.com support.example.com neutral ebs-paris.com neutral 67.55.48.28 1 reject forwarded example.com none example.com fail 69.64.92.24 1 reject forwarded example.com none example.com fail 69.89.16.10 5 reject forwarded example.com none example.com fail 71.74.56.23 15 reject forwarded example.com none example.com fail 72.29.92.26 1 reject forwarded mx.example.com none pe.soportelatino.com neutral 74.119.88.4 1 reject forwarded example.com none example.com fail 74.208.5.90 1 reject forwarded example.com none orden-sb.ru neutral 74.54.78.50 1 reject forwarded example.com none example.com fail 76.96.30.16 1 reject forwarded example.com none example.com fail 76.96.30.17 1 reject forwarded example.com none example.com fail 76.96.30.24 1 reject forwarded example.com none example.com fail 78.24.8.158 11 reject forwarded mx.example.com none posta2.vshosting.cz neutral 82.165.8.54 2 reject forwarded example.com none example.com fail 84.16.68.72 1 reject forwarded example.com none example.com fail 111.86.156.36 1 none forwarded example.com example.com pass gmail.com neutral 112.78.112.86 2 none forwarded support.example.com support.example.com pass support.example.com fail 12.27.189.101 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.208.2.116 1 none forwarded support.example.com support.example.com pass srs.perfora.net neutral 134.84.135.96 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.192.54.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.121.0.226 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.121.3.226 5 none forwarded support.example.com support.example.com pass support.example.com fail 174.122.104.2 1 none forwarded support.example.com support.example.com pass staygum.com neutral 175.126.73.80 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.106.138.4 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.92.144.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 190.228.29.26 4 none forwarded support.example.com support.example.com pass support.example.com fail 193.17.41.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.254.164.7 1 none forwarded example.com example.com pass example.com fail 194.63.252.21 2 none forwarded support.example.com support.example.com pass support.example.com fail 194.63.252.22 3 none forwarded support.example.com support.example.com pass support.example.com fail 195.23.141.86 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.238.6.247 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.70.38.154 2 none forwarded support.example.com support.example.com pass support.example.com fail 200.34.202.39 1 none forwarded support.example.com support.example.com pass support.example.com fail 200.98.199.20 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.3.142.236 5 none forwarded support.example.com support.example.com pass support.example.com fail 202.32.78.176 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.69.195.97 3 none forwarded support.example.com support.example.com pass support.example.com fail 208.43.121.91 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.43.49.137 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.69.127.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.66 1 none forwarded example.com example.com pass example.com fail 208.97.132.74 6 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.41 1 none forwarded support.example.com support.example.com pass mlap.in pass 209.85.160.43 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.44 1 none forwarded support.example.com support.example.com pass dailygaypon.com fail 209.85.160.44 2 none forwarded support.example.com support.example.com pass lvdesign.com.br pass 209.85.160.45 1 none forwarded support.example.com support.example.com pass feedxl.com pass 209.85.160.46 1 none forwarded support.example.com support.example.com pass g.hmc.edu pass 209.85.160.46 1 none forwarded support.example.com support.example.com pass somethingmassive.com neutral 209.85.160.47 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.49 1 none forwarded example.com example.com pass tomliamlynch.org neutral 209.85.160.49 1 none forwarded support.example.com support.example.com pass nicedeal.sg softfail 209.85.160.50 1 none forwarded support.example.com support.example.com pass gerenteweb.com.br pass 209.85.160.51 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.42 2 none forwarded support.example.com support.example.com pass rebellion.com.br neutral 209.85.210.43 1 none forwarded support.example.com support.example.com pass ht-tax.jp softfail 209.85.210.46 1 none forwarded support.example.com support.example.com pass idm.vn neutral 209.85.210.49 2 none forwarded support.example.com support.example.com pass utphilly.com pass 209.85.210.50 1 none forwarded support.example.com support.example.com pass qcgcreative.com neutral 209.85.212.42 3 none forwarded support.example.com support.example.com pass apis3.com pass 209.85.212.43 1 none forwarded support.example.com support.example.com pass transfigurism.org neutral 209.85.212.43 1 none forwarded support.example.com support.example.com pass performancemedia.com.br neutral 209.85.212.45 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.45 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.47 5 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.49 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.50 3 none forwarded support.example.com support.example.com pass activetape.com neutral 209.85.212.52 4 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.212.52 1 none forwarded support.example.com support.example.com pass sgarrison.com neutral 209.85.213.42 1 none forwarded support.example.com support.example.com pass buzzwire.com neutral 209.85.213.46 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.47 1 none forwarded support.example.com support.example.com pass boomerangpharma.com neutral 209.85.213.48 1 none forwarded support.example.com support.example.com pass mazemedia.se neutral 209.85.213.51 4 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.213.51 1 none forwarded support.example.com support.example.com pass seitajewelers.com neutral 209.85.213.52 1 none forwarded support.example.com support.example.com pass fitnesskit.com pass 209.85.213.52 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.213.53 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.41 3 none forwarded support.example.com support.example.com pass mercadod.cl neutral 209.85.214.42 1 none forwarded support.example.com support.example.com pass jamesmadisoninn.com neutral 209.85.214.43 2 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.45 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.46 1 none forwarded support.example.com support.example.com pass global.t-bird.edu pass 209.85.214.47 1 none forwarded support.example.com support.example.com pass fonyat.com neutral 209.85.214.47 1 none forwarded support.example.com support.example.com pass global.t-bird.edu pass 209.85.214.48 3 none forwarded support.example.com support.example.com pass fi.rs neutral 209.85.214.48 1 none forwarded support.example.com support.example.com pass vendedoor.com.br pass 209.85.214.49 1 none forwarded example.com spc.example.com pass parmarth.com neutral 209.85.214.50 4 none forwarded support.example.com support.example.com pass poesie.com.br softfail 209.85.214.50 1 none forwarded support.example.com support.example.com pass global.t-bird.edu pass 209.85.214.51 1 none forwarded support.example.com support.example.com pass rian.ca neutral 209.85.214.51 2 none forwarded support.example.com support.example.com pass media2win.com neutral 209.85.214.53 1 none forwarded support.example.com support.example.com pass helloatto.com neutral 209.85.214.54 1 none forwarded support.example.com support.example.com pass insoha.com neutral 209.85.215.41 2 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.44 1 none forwarded support.example.com support.example.com pass elfnet.ro neutral 209.85.215.48 1 none forwarded support.example.com support.example.com pass ualberta.ca neutral 209.85.215.49 1 none forwarded support.example.com support.example.com pass climbsoill.com neutral 209.85.215.51 1 none forwarded support.example.com support.example.com pass musicians.co.uk neutral 209.85.215.52 1 none forwarded support.example.com support.example.com pass produweb.be pass 209.85.215.52 2 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.53 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.53 1 none forwarded support.example.com support.example.com pass cndef.org neutral 209.85.215.53 2 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.54 1 none forwarded example.com example.com pass sky.com pass 209.85.215.54 1 none forwarded support.example.com support.example.com pass resultrix.com neutral 209.85.216.41 1 none forwarded support.example.com support.example.com pass geraniumjewelry.com neutral 209.85.216.42 1 none forwarded example.com example.com pass dishmail.net pass 209.85.216.42 1 none forwarded support.example.com support.example.com pass vittgam.net fail 209.85.216.45 1 none forwarded support.example.com support.example.com pass grooves.co.jp pass 209.85.216.48 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.48 2 none forwarded support.example.com support.example.com pass geraniumjewelry.com neutral 209.85.216.49 1 none forwarded example.com example.com pass kingdomcometraining.com neutral 209.85.216.49 2 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.51 1 none forwarded support.example.com support.example.com pass socialline.kr pass 209.85.216.52 1 none forwarded support.example.com support.example.com pass njit.edu neutral 209.85.72.157 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.131.4.236 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.157.22.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.227.17.10 8 none forwarded support.example.com support.example.com pass srs.kundenserver.de pass 212.52.84.111 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.253.3.171 4 none forwarded support.example.com support.example.com pass support.example.com fail 213.41.78.198 3 none forwarded support.example.com support.example.com pass support.example.com fail 216.12.210.86 4 none forwarded support.example.com support.example.com pass gmail.com neutral 216.146.32.50 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.155.133.8 2 none forwarded example.com example.com pass example.com fail 216.251.36.16 1 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.200.16 2 none forwarded support.example.com support.example.com pass sv15.sixcore.ne.jp neutral 46.105.41.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.23.110.216 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.31.147.177 3 none forwarded support.example.com support.example.com pass support.example.com fail 50.97.101.244 2 none forwarded support.example.com support.example.com pass support.example.com fail 62.129.255.23 2 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.157.21 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.179.121.43 1 none forwarded support.example.com support.example.com pass support.example.com fail 63.247.139.28 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.132.209.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.22.123.221 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.51 1 none forwarded support.example.com support.example.com pass resourcebasedcommunities.org pass 65.55.111.150 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.108 1 none forwarded support.example.com support.example.com pass live.co.uk pass 66.175.56.165 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.220.157.77 1 none forwarded example.com example.com pass example.com pass 66.71.191.146 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.152.58 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.50.215.134 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.64.155.196 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.200.215 4 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.33 2 none forwarded example.com example.com pass bounce.secureserver.net pass 72.30.239.150 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.149.18 1 none forwarded support.example.com support.example.com pass zmchotels.com pass 74.125.149.73 1 none forwarded example.com example.com pass artofliving.org permerror 74.125.82.174 1 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.177 1 none forwarded support.example.com support.example.com pass get2sms.com neutral 74.125.82.181 3 none forwarded support.example.com support.example.com pass globalmediainsight.com neutral 74.220.204.48 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.216.61 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.221.50 1 none forwarded example.com example.com pass example.com fail 74.220.223.13 1 none forwarded example.com example.com pass example.com fail 74.53.227.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.55.203.250 1 none forwarded support.example.com support.example.com pass gmail.com neutral 85.13.253.110 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.238.192.74 2 none forwarded support.example.com support.example.com pass support.example.com fail 88.208.208.88 2 none forwarded support.example.com support.example.com pass support.example.com fail 89.238.145.68 1 none forwarded example.com example.com pass example.com fail 89.238.145.74 1 none forwarded example.com example.com pass example.com fail 91.198.169.51 1 none forwarded example.com example.com pass example.com fail 95.130.76.100 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.74.135.167 1 none forwarded example.com example.com pass bounce.secureserver.net pass 98.129.184.12 2 none forwarded support.example.com support.example.com pass gmail.com neutral 98.139.52.221 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.208 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.224 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.234 2 none forwarded support.example.com support.example.com pass support.example.com fail 12.154.55.41 1 reject forwarded example.com none example.com fail 141.222.0.13 1 reject forwarded example.com none example.com fail 146.164.10.2 1 reject forwarded example.com none hosting3.isun.biz neutral 17.148.16.93 1 reject forwarded example.com none example.com fail 17.148.16.93 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.99 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 177.23.80.81 69 reject forwarded example.com none example.com fail 182.48.49.37 1 reject forwarded reply.example.com examplemail.com neutral returns.yahoogroups.jp softfail 200.12.63.16 106 reject forwarded example.com none example.com fail 208.57.4.232 1 reject forwarded example.com none example.com fail 208.76.82.53 1 reject forwarded example.com none example.com fail 208.80.4.166 1 reject forwarded example.com none example.com fail 209.143.0.75 2 reject forwarded example.com none example.com fail 209.86.89.70 2 reject forwarded support.example.com none mindspring.com neutral 216.168.36.7 1 reject forwarded example.com none example.com fail 217.16.6.129 5 reject forwarded example.com none example.com fail 50.23.109.98 1 reject forwarded example.com none example.com fail 50.56.68.172 1 reject forwarded example.com none example.com fail 59.188.3.147 11 reject forwarded example.com none marjunelson.net neutral 61.9.189.140 2 reject forwarded example.com none example.com fail 61.9.189.146 1 reject forwarded example.com none example.com fail 62.146.51.26 1 reject forwarded example.com none example.com fail 63.236.74.15 1 reject forwarded example.com none ureach.com neutral 64.68.200.52 2 reject forwarded example.com none example.com fail 65.44.220.57 2 reject forwarded example.com none example.com fail 65.55.116.12 1 reject forwarded example.com example.com neutral hotmail.com pass 66.197.59.79 1 reject forwarded example.com none example.com fail 66.211.47.98 1 reject forwarded example.com none example.com fail 66.23.238.18 1 reject forwarded example.com none example.com fail 66.96.188.12 1 reject forwarded example.com none ericehrens.com pass 67.55.32.100 1 reject forwarded example.com none example.com fail 69.36.176.36 1 reject forwarded example.com none example.com fail 69.49.98.224 1 reject forwarded example.com none example.com fail 69.60.177.14 1 reject forwarded example.com none example.com fail 69.64.157.17 6 reject forwarded example.com none example.com fail 69.65.176.14 1 reject forwarded support.example.com support.example.com fail support.example.com fail 69.65.176.14 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 69.89.24.203 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.89.30.229 1 reject forwarded example.com none example.com fail 70.40.218.23 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 71.36.27.105 1 reject forwarded mx.example.com none amihome.net neutral 72.35.12.184 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 72.9.155.200 1 reject forwarded mx.example.com none host.lionweb.com neutral 74.125.82.47 7 reject forwarded example.com example.com neutral howzat.com pass 74.125.82.49 1 reject forwarded example.com example.com neutral gmail.com pass 74.208.4.199 2 reject forwarded mx.example.com none mout-bounce.perfora.net pass 76.74.167.39 2 reject forwarded example.com none example.com fail 76.96.27.228 1 reject forwarded example.com none example.com fail 83.169.4.238 17 reject forwarded example.com none example.com fail 85.12.11.225 2 reject forwarded example.com none example.com fail 95.128.57.30 1 reject forwarded example.com none example.com fail 96.44.142.66 2 reject forwarded example.com none example.com fail 125.206.187.72 1 none forwarded support.example.com support.example.com pass xnozacli2-40gmail-2ecom.xinfo-2dbounce-2bcf076cx-2eaeazeint5u-40support-2eexample-2eco.x.xm.ocnadm.ocn.ad.jp pass 128.100.132.43 2 none forwarded support.example.com support.example.com pass support.example.com fail 128.227.74.149 2 none forwarded support.example.com support.example.com pass support.example.com fail 128.252.29.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 132.235.250.52 2 none forwarded support.example.com support.example.com pass support.example.com fail 140.142.32.202 3 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.193.33 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.39 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.57 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.236.27.130 3 none forwarded support.example.com support.example.com pass aloe-veraearth.com neutral 174.120.190.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.252.82 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.122.47.232 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.107.41.245 2 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.246.54 1 none forwarded example.com example.com pass example.com fail 188.165.44.116 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.213.115.20 2 none forwarded support.example.com support.example.com pass support.example.com fail 193.218.152.80 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.143.132.25 1 none forwarded example.com example.com pass example.com fail 195.47.247.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.124.241.68 1 none forwarded example.com example.com pass example.com fail 203.183.205.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.69.195.100 2 none forwarded support.example.com support.example.com pass support.example.com fail 207.75.116.214 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.43.113.114 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.188.81.136 1 none forwarded example.com example.com pass example.com fail 209.85.160.177 1 none forwarded support.example.com support.example.com pass crimson.ua.edu neutral 209.85.161.171 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.161.175 1 none forwarded support.example.com support.example.com pass murfie.com neutral 209.85.161.175 1 none forwarded support.example.com support.example.com pass zlatebobule.cz neutral 209.85.161.177 1 none forwarded support.example.com support.example.com pass tas-emp.com neutral 209.85.161.179 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.179 1 none forwarded support.example.com support.example.com pass promtime.com neutral 209.85.161.179 1 none forwarded support.example.com support.example.com pass jimmyfairly.com pass 209.85.161.179 1 none forwarded support.example.com support.example.com pass brownlegalservices.com neutral 209.85.161.180 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.161.181 3 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.212.169 1 none forwarded support.example.com support.example.com pass solucionweb.com softfail 209.85.212.169 1 none forwarded support.example.com support.example.com pass photosbychloe.com neutral 209.85.212.172 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.173 1 none forwarded support.example.com support.example.com pass mattprados.com neutral 209.85.212.175 1 none forwarded support.example.com support.example.com pass koovs.com softfail 209.85.212.176 1 none forwarded support.example.com support.example.com pass jonathancoulton.com pass 209.85.212.182 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.171 4 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.173 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.174 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.213.174 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.175 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.175 1 none forwarded support.example.com support.example.com pass wywar.pl pass 209.85.213.175 1 none forwarded support.example.com support.example.com pass treystinnett.com neutral 209.85.213.176 1 none forwarded support.example.com support.example.com pass beetil.com softfail 209.85.213.176 1 none forwarded support.example.com support.example.com pass simbiotic.net neutral 209.85.213.177 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.177 1 none forwarded support.example.com support.example.com pass theshanghairaceclub.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.179 1 none forwarded support.example.com support.example.com pass spiritactivewear.com neutral 209.85.213.180 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.181 1 none forwarded support.example.com support.example.com pass u.northwestern.edu neutral 209.85.213.181 1 none forwarded support.example.com support.example.com pass texasbizsolutions.com neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass thirdoptionmen.org neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass greenfuture.sg neutral 209.85.214.174 1 none forwarded example.com example.com pass sercolectivo.org neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass fareedascarf.com neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass designersandfriends.com neutral 209.85.214.175 8 none forwarded support.example.com support.example.com pass wywar.pl pass 209.85.214.175 1 none forwarded support.example.com support.example.com pass gowalla.com softfail 209.85.214.175 1 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.175 1 none forwarded support.example.com support.example.com pass blitzlocal.com neutral 209.85.214.177 4 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.214.177 1 none forwarded support.example.com support.example.com pass vayugroup.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass activetape.com neutral 209.85.214.179 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.179 2 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.180 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.180 1 none forwarded support.example.com support.example.com pass blitzlocal.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass bricormedia.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass gizmocrazed.com neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass virtual-network.com neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass blitzlocal.com neutral 209.85.215.174 1 none forwarded support.example.com support.example.com pass misrcontract.net neutral 209.85.215.176 2 none forwarded support.example.com support.example.com pass pontconsulting.ro neutral 209.85.215.178 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.169 1 none forwarded support.example.com support.example.com pass apsanlaw.com neutral 209.85.216.170 1 none forwarded example.com example.com pass kibeloco.com.br neutral 209.85.216.170 1 none forwarded support.example.com support.example.com pass ocgroup.com neutral 209.85.216.172 1 none forwarded support.example.com support.example.com pass stu.aii.edu neutral 209.85.216.175 1 none forwarded support.example.com support.example.com pass grooves.co.jp pass 209.85.216.176 1 none forwarded support.example.com support.example.com pass cannla.com neutral 209.85.216.177 1 none forwarded support.example.com support.example.com pass anet-web.com pass 209.85.216.178 1 none forwarded support.example.com support.example.com pass ultramaxtri.com neutral 209.85.216.178 1 none forwarded support.example.com support.example.com pass industrystandard.ro pass 209.85.216.179 3 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.216.181 2 none forwarded support.example.com support.example.com pass retireeasy.com neutral 209.85.217.169 1 none forwarded support.example.com support.example.com pass stoneast.com neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass newpeopleworld.com pass 209.85.217.170 4 none forwarded support.example.com support.example.com pass gocreatemarketing.com softfail 209.85.217.171 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.172 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 209.85.217.177 1 none forwarded support.example.com support.example.com pass intlairtool.com pass 209.85.217.177 1 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.178 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 209.85.217.181 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.217.182 1 none forwarded support.example.com support.example.com pass 3bweb.com pass 209.85.220.169 1 none forwarded support.example.com support.example.com pass thomasrice.com neutral 209.85.220.169 2 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.220.177 1 none forwarded support.example.com support.example.com pass humbertolobo.com.br neutral 209.85.220.178 1 none forwarded support.example.com support.example.com pass stern.nyu.edu pass 209.85.220.179 1 none forwarded support.example.com support.example.com pass netxpand.net neutral 210.172.144.54 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.218.50 1 none forwarded support.example.com support.example.com pass ov10.mmrs.jp neutral 212.82.109.204 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.165.64.100 1 none forwarded example.com example.com pass web.de neutral 213.92.109.118 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.230.254.50 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.92.131.232 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.97.224.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 59.106.184.182 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.129 2 none forwarded support.example.com support.example.com pass helpyourcase.com pass 66.220.155.140 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.143 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.149 2 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.152 4 none forwarded support.example.com support.example.com pass support.example.com pass 68.230.241.212 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.232.137 11 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.141 13 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.155 14 none forwarded support.example.com support.example.com pass support.example.com pass 72.167.218.153 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.125.149.107 2 none forwarded support.example.com support.example.com pass zmchotels.com pass 74.125.149.140 1 none forwarded support.example.com support.example.com pass njbcenter.com neutral 74.125.149.153 1 none forwarded support.example.com support.example.com pass shinenorth.com neutral 74.125.149.205 1 none forwarded support.example.com support.example.com pass zmchotels.com pass 75.126.132.123 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.179.148.110 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.237.138.231 1 none forwarded support.example.com support.example.com pass jan.sh pass 81.169.146.148 2 none forwarded example.com example.com pass example.com fail 82.195.128.132 3 none forwarded support.example.com support.example.com pass support.example.com fail 82.223.190.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.223.191.238 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.128.138.130 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.212.127 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.212.174 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.151 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.70 20 none mailing_list support.example.com none graphscience.com pass 109.104.93.44 1 reject forwarded mx.example.com none lvps109-104-93-44.vps.webfusion.co.uk neutral 111.86.156.35 16 reject forwarded m.example.com m.example.com neutral m.example.com neutral 128.180.2.160 2 reject forwarded example.com none example.com fail 128.59.28.168 2 reject forwarded example.com none example.com fail 140.209.3.234 1 reject forwarded support.example.com support.example.com neutral stthomas.edu neutral 143.54.100.73 1 reject forwarded example.com none dncgroup.cafe24.com neutral 17.148.16.103 1 reject forwarded example.com example.com neutral example.com fail 173.193.191.3 1 reject forwarded example.com none example.com fail 187.0.216.164 1 reject forwarded example.com none botafogopraia.com.br neutral 189.38.92.135 1 reject forwarded example.com none example.com fail 194.245.148.6 1 reject forwarded example.com none example.com fail 199.94.20.173 4 reject forwarded support.example.com support.example.com fail support.example.com fail 202.119.48.34 69 reject forwarded example.com none example.com fail 202.39.168.17 1 reject forwarded example.com none example.com fail 203.58.14.154 27 reject forwarded example.com none example.com fail 204.232.160.4 1 reject forwarded example.com none example.com fail 206.230.105.6 2 reject forwarded example.com none example.com fail 206.40.48.196 1 reject forwarded example.com none example.com fail 207.69.195.97 2 reject forwarded example.com none example.com fail 208.180.27.50 1 reject forwarded example.com none example.com fail 209.85.212.53 1 reject forwarded example.com none email.arizona.edu neutral 209.85.216.70 3 reject forwarded mx.example.com none mail-qa0-f70.google.com neutral 210.131.4.253 1 reject forwarded example.com nifty.com pass example.com fail 210.157.5.231 1 reject forwarded example.com none example.com fail 212.47.223.38 4 reject forwarded example.com none example.com fail 212.97.132.54 1 reject forwarded example.com none ws48.surf-town.net neutral 216.146.33.63 1 reject forwarded example.com none example.com fail 216.22.21.200 1 reject forwarded example.com none example.com fail 216.97.124.39 1 reject forwarded example.com none example.com fail 217.113.62.31 1 reject forwarded example.com none example.com fail 219.94.162.55 24 reject forwarded example.com none example.com fail 220.181.12.92 1 reject forwarded example.com none 163.com pass 24.214.64.230 4 reject forwarded example.com none example.com fail 24.224.136.30 1 reject forwarded support.example.com support.example.com fail support.example.com fail 61.14.129.199 5 reject forwarded support.example.com support.example.com fail support.example.com fail 63.76.209.216 10 reject forwarded example.com none example.com fail 67.19.142.210 2 reject forwarded example.com none example.com fail 69.145.248.57 1 reject forwarded example.com none example.com fail 69.171.244.41 2 reject forwarded mx.example.com none unknown neutral 69.171.244.42 1 reject forwarded mx.example.com none unknown neutral 69.171.244.46 1 reject forwarded mx.example.com none unknown neutral 69.64.145.228 1 reject forwarded example.com none example.com fail 69.64.145.228 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 69.64.155.193 1 reject forwarded example.com none example.com fail 69.64.155.196 1 reject forwarded example.com none example.com fail 70.86.182.130 2 reject forwarded example.com none example.com fail 74.117.23.100 3 reject forwarded support.example.com support.example.com neutral experianinteractive.com neutral 74.123.208.11 111 reject forwarded example.com none example.com fail 74.220.202.62 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.50.108.210 1 reject forwarded example.com none parental-intelligence.com neutral 75.149.103.21 21 reject forwarded example.com none example.com fail 77.92.144.147 1 reject forwarded mx.example.com none mail.xyz-software.com neutral 83.145.109.43 6 reject forwarded example.com none example.com fail 83.168.203.34 2 reject forwarded example.com none example.com fail 89.106.106.22 2 reject forwarded example.com none vidaoptics.com neutral 98.129.184.12 1 reject forwarded example.com none hosting3.isun.biz neutral 98.139.44.172 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 98.139.91.225 1 reject forwarded example.com none example.com fail 173.201.192.187 1 none forwarded example.com example.com pass bounce.secureserver.net pass 173.201.192.189 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.171 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 174.120.146.106 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.149.130 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.232.194 1 none forwarded example.com example.com pass example.com fail 174.127.116.185 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.194.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.107.225.202 2 none forwarded support.example.com support.example.com pass support.example.com fail 184.154.137.146 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.154.217.229 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.171.244.144 11 none forwarded support.example.com support.example.com pass gmail.com neutral 184.173.195.211 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.196.217 7 none forwarded support.example.com support.example.com pass support.example.com fail 194.150.236.199 1 none forwarded support.example.com support.example.com pass support.example.com fail 198.104.184.122 1 none forwarded support.example.com support.example.com pass globalcountry.net neutral 202.174.113.190 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.126.144.149 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 208.131.130.192 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.105.247.114 1 none forwarded support.example.com support.example.com pass hotmail.com softfail 209.133.228.244 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.236.123.204 10 none forwarded support.example.com support.example.com pass support.example.com fail 212.227.126.187 6 none forwarded support.example.com support.example.com pass srs.kundenserver.de pass 213.171.216.111 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.171.216.201 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.117.164.201 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.219 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.253 1 none forwarded support.example.com support.example.com pass support.example.com fail 221.112.215.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.23.8.10 9 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.70 4 none mailing_list support.example.com none glyde.com pass 209.85.160.70 2 none mailing_list support.example.com none wimdu.com pass 209.85.160.70 3 none mailing_list support.example.com none wellnessfx.com pass 209.85.160.70 3 none mailing_list support.example.com none evolution7.com.au pass 209.85.210.69 1 none mailing_list support.example.com none eventbrite.com pass 209.85.210.70 2 none mailing_list support.example.com none adacto.it pass 209.85.210.72 8 none mailing_list support.example.com none dafiti.com.br pass 209.85.210.72 5 none mailing_list support.example.com none fuelinteractive.com pass 209.85.213.70 2 none mailing_list support.example.com none apis3.com pass 209.85.213.71 7 none mailing_list support.example.com none vontweb.com pass 209.85.216.70 2 none mailing_list support.example.com none carsauto.com pass 209.85.216.71 6 none mailing_list support.example.com none publik.com.tr pass 209.85.216.72 4 none mailing_list support.example.com none dafiti.com.br pass 209.85.216.72 3 none mailing_list support.example.com none weddingtonway.com pass 74.125.149.83 6 none mailing_list support.example.com none gilt.jp pass 128.197.228.15 1 reject forwarded example.com none example.com fail 128.248.155.38 1 reject forwarded example.com none example.com fail 128.253.83.163 1 reject forwarded example.com none example.com fail 128.253.83.165 1 reject forwarded support.example.com support.example.com fail support.example.com fail 128.253.83.168 1 reject forwarded example.com none example.com fail 129.170.16.161 2 reject forwarded example.com none example.com fail 139.102.70.201 1 reject forwarded example.com none example.com fail 173.201.193.33 1 reject forwarded example.com none bounce.secureserver.net pass 173.201.193.33 1 reject forwarded example.com example.com neutral bounce.secureserver.net pass 173.45.244.204 2 reject forwarded example.com none example.com fail 174.132.157.98 1 reject forwarded example.com none example.com fail 184.170.147.15 1 reject forwarded example.com none example.com fail 184.173.197.20 2 reject forwarded example.com none example.com fail 187.109.163.42 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 192.115.104.13 1 reject forwarded example.com none lemois.com neutral 193.200.44.215 1 reject forwarded example.com none example.com fail 193.252.22.213 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 193.255.135.54 1 reject forwarded example.com none example.com fail 195.101.248.67 1 reject forwarded example.com example.com neutral yrnet.com pass 195.225.239.55 96 reject forwarded example.com none example.com fail 200.147.34.224 3 reject forwarded example.com none example.com fail 200.186.250.66 1 reject forwarded example.com none fgv.br pass 202.172.28.100 1 reject forwarded example.com none example.com fail 202.66.151.245 5 reject forwarded example.com example.com neutral example.com fail 204.15.166.151 1 reject forwarded support.example.com support.example.com fail ncautoauction.com neutral 204.202.242.87 1 reject forwarded example.com none example.com fail 205.151.16.250 32 reject forwarded example.com none example.com fail 205.234.137.17 1 reject forwarded example.com none example.com fail 206.188.198.65 1 reject forwarded example.com none example.com fail 206.46.169.127 1 reject forwarded example.com none ns.wizbill.com neutral 206.46.169.131 2 reject forwarded example.com none example.com fail 207.155.252.66 1 reject forwarded example.com none example.com fail 207.75.116.212 1 reject forwarded example.com none example.com fail 208.97.132.119 5 reject forwarded example.com none example.com fail 208.97.132.177 3 reject forwarded example.com none example.com fail 209.85.160.171 1 reject forwarded support.example.com none thrillon.com neutral 209.85.212.181 2 reject forwarded example.com example.com neutral howzat.com pass 209.85.213.170 4 reject forwarded example.com example.com neutral bitrhymes.com neutral 209.85.213.176 2 reject forwarded example.com example.com neutral idreaminteractive.com neutral 209.85.214.170 4 reject forwarded example.com example.com neutral bitrhymes.com neutral 209.85.217.177 1 reject forwarded example.com none synergy.co.za neutral 212.102.225.11 1 reject forwarded example.com none example.com fail 213.171.216.27 1 reject forwarded support.example.com support.example.com neutral 5starshandcarwash.co.uk neutral 213.48.152.207 56 reject forwarded example.com none example.com fail 216.16.244.248 3 reject forwarded mx.example.com none smtp20.inboxmarketer-mail.com neutral 216.211.172.81 1 reject forwarded mx.example.com none mx-out.coolirismail.com neutral 220.99.123.154 1 reject forwarded example.com none example.com fail 222.146.61.181 63 reject forwarded support.example.com support.example.com fail ad-helios.jp neutral 27.112.109.251 3 reject forwarded support.example.com support.example.com fail hickox.com pass 68.230.241.136 1 reject forwarded example.com none example.com fail 68.230.241.199 2 reject forwarded example.com none example.com fail 69.171.232.139 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.167.218.163 2 reject forwarded mx.example.com none p3plsmtp04-05.prod.phx3.secureserver.net neutral 74.220.201.122 1 reject forwarded example.com none example.com fail 74.220.209.223 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.220.184 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 77.247.183.104 1 reject forwarded example.com none example.com fail 78.153.203.205 1 reject forwarded example.com none pemlinweb08.blacknight.com neutral 81.169.146.146 1 reject forwarded example.com none example.com fail 81.169.146.146 2 reject forwarded mx.example.com none mi-ob.rzone.de neutral 72.74.241.21 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.214.199 11 none mailing_list support.example.com none publik.com.tr pass 209.85.214.199 2 none mailing_list support.example.com none yourinterface.ch pass 209.85.214.200 4 none mailing_list support.example.com none largeinc.com pass 209.85.216.199 2 none mailing_list example.com none againstintuition.com pass 121.111.227.148 1 reject forwarded example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.153 99 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 128.122.118.245 1 reject forwarded example.com none example.com fail 128.196.130.200 8 reject forwarded example.com none example.com fail 173.193.176.242 1 reject forwarded example.com none sus79.suidc.com neutral 173.203.104.141 2 reject forwarded example.com none example.com fail 174.132.104.130 1 reject forwarded example.com none example.com fail 174.132.194.226 1 reject forwarded example.com none example.com fail 184.173.196.245 1 reject forwarded example.com none example.com fail 186.233.144.116 1 reject forwarded example.com none no10.nayana.kr neutral 187.141.114.200 4 reject forwarded example.com none example.com fail 201.238.246.245 1 reject forwarded example.com none example.com fail 203.144.173.153 2 reject forwarded example.com none example.com fail 205.251.140.114 1 reject forwarded example.com none example.com fail 208.118.241.107 28 reject forwarded example.com none example.com fail 208.131.140.226 8 reject forwarded example.com none example.com fail 209.217.224.115 1 reject forwarded example.com none example.com fail 213.171.216.131 2 reject forwarded example.com none example.com fail 213.171.216.164 2 reject forwarded example.com none example.com fail 213.199.154.144 1 reject forwarded reply.example.com examplemail.com neutral furman.edu neutral 216.127.135.226 50 reject forwarded example.com none example.com fail 170.140.52.40 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 12 reject mailing_list support.example.com none sonusfactory.com neutral 209.85.160.70 1 reject mailing_list support.example.com none quirk.biz neutral 209.85.160.70 1 reject mailing_list support.example.com none epubli.com neutral 209.85.160.70 4 reject mailing_list support.example.com none ajidesign.com.ar neutral 209.85.160.70 2 reject mailing_list support.example.com none queensspeech.com neutral 209.85.160.70 2 reject mailing_list support.example.com none buildingmarkets.org neutral 209.85.160.71 1 reject mailing_list example.com none uken.com neutral 209.85.160.71 4 reject mailing_list support.example.com none skydivelongisland.com neutral 209.85.160.72 2 reject mailing_list support.example.com none ping.com.tr neutral 209.85.160.72 2 reject mailing_list support.example.com none webmatch.de neutral 209.85.160.72 1 reject mailing_list support.example.com none beecrazy.com neutral 209.85.210.69 1 reject mailing_list support.example.com none o3mdm.com neutral 209.85.210.69 4 reject mailing_list support.example.com none bwaccounts.com neutral 209.85.210.69 2 reject mailing_list support.example.com none redtheagency.com neutral 209.85.210.69 2 reject mailing_list support.example.com none carvermedia.co.za neutral 209.85.210.70 3 reject mailing_list support.example.com none beo.jp neutral 209.85.210.70 2 reject mailing_list support.example.com none epubli.com neutral 209.85.210.70 18 reject mailing_list support.example.com none aviesta.com neutral 209.85.210.70 3 reject mailing_list support.example.com none leveragemarketing.net neutral 209.85.210.71 1 reject mailing_list support.example.com none icog.net neutral 209.85.210.71 15 reject mailing_list support.example.com none nobox.com neutral 209.85.210.71 2 reject mailing_list support.example.com none r2prod.com neutral 209.85.210.72 8 reject mailing_list example.com none productmadness.com softfail 209.85.210.72 10 reject mailing_list support.example.com none dudesdivision.com neutral 209.85.210.72 3 reject mailing_list support.example.com adclick.pt pass adclick.pt pass 209.85.212.71 2 reject mailing_list support.example.com none everyday.com.my neutral 209.85.213.70 2 reject mailing_list support.example.com none snsplus.com neutral 209.85.213.71 9 reject mailing_list support.example.com none adtz.com neutral 209.85.216.69 7 reject mailing_list support.example.com none rathbonedigital.com softfail 209.85.216.69 2 reject mailing_list support.example.com none haystackmarketing.com neutral 209.85.216.71 6 reject mailing_list support.example.com none techlightenment.com neutral 216.185.69.71 31 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 207.126.144.143 4 none mailing_list support.example.com none iscool-e.com pass 209.85.160.197 3 reject mailing_list support.example.com none buildasign.com pass 209.85.161.197 4 reject mailing_list support.example.com none socialwavelength.com neutral 209.85.212.198 14 reject mailing_list support.example.com none graphscience.com pass 209.85.213.197 3 reject mailing_list example.com none adair2012.com neutral 209.85.213.198 9 reject mailing_list support.example.com none aviesta.com neutral 209.85.213.200 2 reject mailing_list support.example.com none dudesdivision.com neutral 209.85.214.197 3 reject mailing_list support.example.com none yunait.com neutral 209.85.214.198 9 reject mailing_list support.example.com none steellondon.com neutral 209.85.214.199 2 reject mailing_list support.example.com none eliance.co.za neutral 209.85.216.198 6 reject mailing_list example.com none winwinwin.vn neutral 209.85.216.198 9 reject mailing_list support.example.com none steellondon.com neutral 209.85.216.199 2 reject mailing_list support.example.com none truemediaservices.com neutral 61.122.229.145 1 reject mailing_list example.com example.com fail kanri056.ktk.gr.jp neutral 98.138.215.250 2 reject mailing_list example.com yahoogroups.com pass returns.groups.yahoo.com neutral 74.82.85.3 1 reject forwarded mailing_list groups.example.com examplemail.com neutral srs.bis6.us.blackberry.com pass 64.18.0.180 1 reject forwarded mailing_list support.example.com none prontoinsurance.com neutral 209.85.160.72 4 none forwarded mailing_list support.example.com none essencedigital.com pass 209.85.210.72 37 none forwarded mailing_list support.example.com none watercooler-inc.com pass 74.125.149.72 4 none forwarded mailing_list support.example.com none basisfoods.com pass 74.125.245.70 8 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.245.74 3 none forwarded mailing_list support.example.com none trada.com pass 74.125.245.74 1 none forwarded mailing_list support.example.com none mindcomet.com pass 98.136.219.8 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 209.85.214.197 1 none forwarded mailing_list support.example.com none whowhatwear.com pass 209.85.214.197 49 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.214.200 1 none forwarded mailing_list support.example.com none patriotsoftware.com pass 209.85.216.200 4 none forwarded mailing_list support.example.com none httpool.com pass 74.125.149.151 3 none forwarded mailing_list support.example.com none bluefly.com pass 74.125.149.198 4 none forwarded mailing_list support.example.com none basisfoods.com pass 209.85.160.51 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.160.69 1 reject forwarded mailing_list support.example.com none candytech.cz neutral 209.85.160.70 2 reject forwarded mailing_list support.example.com none webdiz.co.il neutral 209.85.160.70 1 reject forwarded mailing_list support.example.com none interfacetalent.com neutral 209.85.160.71 2 reject forwarded mailing_list support.example.com none friendsurance.de neutral 209.85.161.70 8 reject forwarded mailing_list example.com none schoolfeed.com softfail 209.85.161.71 3 reject forwarded mailing_list support.example.com none letsdeal.gr fail 209.85.210.71 2 reject forwarded mailing_list support.example.com none rhinolacrosse.com neutral 209.85.210.72 12 reject forwarded mailing_list support.example.com none empoweredcomms.com.au neutral 209.85.212.71 1 reject forwarded mailing_list support.example.com none illumemagazine.org neutral 209.85.215.71 1 reject forwarded mailing_list support.example.com none journeymetro.com softfail 209.85.216.71 2 reject forwarded mailing_list support.example.com none skandnet.com neutral 209.85.216.71 1 reject forwarded mailing_list support.example.com none theaspirecompany.com neutral 209.85.216.72 7 reject forwarded mailing_list example.com none dennorskeklub.de neutral 216.146.33.30 6 reject forwarded mailing_list support.example.com none o3mdm.com neutral 66.220.157.82 1 reject forwarded mailing_list example.com none ultraslan.com neutral 74.125.245.72 8 reject forwarded mailing_list support.example.com none reloadmedia.com.au neutral 74.125.245.74 3 reject forwarded mailing_list support.example.com none blabbermouthsocial.com neutral 74.125.245.88 16 reject forwarded mailing_list support.example.com none reloadmedia.com.au neutral 74.125.245.92 8 reject forwarded mailing_list support.example.com none reloadmedia.com.au neutral 74.125.82.199 2 reject forwarded mailing_list support.example.com none totalsocialsolutions.com neutral 98.136.218.36 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.37 20 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.43 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.218.63 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.13 35 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.28 2 reject forwarded mailing_list reply.example.com yahoogroups.co.in pass returns.groups.yahoo.com neutral 98.136.219.28 2 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.36 4 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.60 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.67 12 reject forwarded mailing_list example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.75 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.80 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.14 19 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.215.24 2 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.30 2 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.92 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.53 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.63 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.139.164.97 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.164.99 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.13 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.33 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.41 11 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.61 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.161.197 12 reject forwarded mailing_list support.example.com none netvlies.net neutral 209.85.212.197 2 reject forwarded mailing_list example.com none mbhplc.co.uk softfail 209.85.213.174 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.177 3 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.216.199 1 reject forwarded mailing_list support.example.com none appsumo.com softfail 66.220.144.147 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.153 9 reject forwarded mailing_list support.example.com none reverbnation.com fail 66.220.144.156 12 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.155.140 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.155.154 7 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.137 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.140 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.142 5 reject forwarded mailing_list example.com none iminlikewithyou.com neutral 69.171.232.142 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.142 8 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.150 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.155 1 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 69.171.232.156 6 reject forwarded mailing_list support.example.com none 6waves.com softfail 69.171.232.159 1 reject forwarded mailing_list example.com none imageinterview.com neutral 74.125.149.246 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.247 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 98.136.219.106 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.106 16 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.116 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.140 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.151 41 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.151 16 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.166 2 reject forwarded mailing_list example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.177 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.179 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.182 16 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.184 12 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.136.219.242 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.244 1 reject forwarded mailing_list reply.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.214.219 15 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.221 15 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.227 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.233 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.234 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.119 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr fail returns.groups.yahoo.com neutral 98.138.215.201 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.223 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.248 2 reject forwarded mailing_list reply.example.com yahoogroups.co.in pass returns.groups.yahoo.com neutral 98.138.215.250 4 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.139.164.101 22 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.108 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.110 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.110 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.123 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.135 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.153 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.173 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 209.85.160.71 3 none trusted_forwarder mailing_list support.example.com vocanic.com pass support.example.com pass vocanic.com neutral support.example.com pass 209.85.210.70 2 none trusted_forwarder mailing_list support.example.com flippa.com pass support.example.com pass flippa.com pass support.example.com pass 209.85.161.199 2 none trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 209.85.161.200 2 none trusted_forwarder mailing_list support.example.com trilogyinteractive.com pass support.example.com pass trilogyinteractive.com pass support.example.com pass 209.85.213.198 3 none trusted_forwarder mailing_list support.example.com disko.fr pass support.example.com pass disko.fr pass support.example.com pass 209.85.214.198 2 none trusted_forwarder mailing_list support.example.com ahi.cl pass support.example.com pass ahi.cl pass support.example.com pass 64.18.2.8 1 none forwarded trusted_forwarder mailing_list support.example.com thelostagency.com pass support.example.com pass thelostagency.com neutral support.example.com pass 209.85.213.61 1 none forwarded trusted_forwarder mailing_list example.com googlegroups.com pass example.com pass googlegroups.com pass example.com pass 66.220.155.143 1 none forwarded trusted_forwarder mailing_list support.example.com rathbonedigital.com pass support.example.com pass rathbonedigital.com softfail support.example.com pass 69.171.232.146 2 none forwarded trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 64.18.1.59 2 none support.example.com support.example.com pass support.example.com fail 64.18.1.76 1 none support.example.com support.example.com pass support.example.com fail 64.18.2.45 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.148 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.209 2 none support.example.com support.example.com pass support.example.com fail 64.18.1.217 1 none support.example.com support.example.com pass support.example.com fail 80.67.29.36 1 none support.example.com support.example.com pass support.example.com fail 80.67.29.38 1 none support.example.com support.example.com pass support.example.com fail 12.70.16.5 1 reject example.com none example.com fail 64.18.1.68 1 reject example.com none example.com fail 69.94.80.9 1 reject example.com none example.com fail 129.128.5.19 3 none example.com example.com pass example.com fail 192.41.34.43 1 none example.com example.com pass example.com fail 133.95.89.1 5 reject reply.example.com examplemail.com neutral reply.example.com neutral 192.75.71.4 4 reject reply.example.com examplemail.com neutral ptms.humber.ca neutral 64.18.1.145 1 reject example.com none example.com fail 64.18.1.210 1 reject example.com none example.com fail 64.20.186.5 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 69.2.121.12 3 reject example.com example.com neutral example.com fail 69.89.30.35 1 reject example.com none just48.justhost.com neutral 70.32.81.22 6 reject example.com none example.com fail 72.10.32.32 1 reject example.com none example.com fail 72.3.196.60 1 reject example.com none lenoxtools-mail.com fail 129.186.140.6 1 none support.example.com support.example.com pass support.example.com fail 137.99.25.235 1 none example.com example.com pass example.com fail 171.67.219.72 2 none support.example.com support.example.com pass support.example.com fail 66.220.157.68 2 none example.com example.com fail example.com pass 66.220.157.87 26 none example.com example.com fail example.com pass 66.220.157.89 5 none example.com example.com fail example.com pass 66.220.157.90 18 none example.com example.com fail example.com pass 66.220.157.92 11 none example.com example.com fail example.com pass 69.171.244.68 31 none example.com example.com pass example.com pass 69.171.244.70 9 none example.com example.com pass example.com pass 69.171.244.71 13 none example.com example.com pass example.com pass 69.171.244.76 1 none example.com example.com fail example.com pass 85.159.66.210 1 none support.example.com support.example.com pass cluster.natrohost.com pass 86.65.193.122 1 none example.com example.com pass example.com fail 118.175.8.47 1 reject example.com none example.com fail 12.154.55.44 1 reject example.com none example.com fail 129.128.5.19 1 reject mx.example.com none esqmail1.srv.ualberta.ca neutral 176.31.96.25 16 reject example.com none example.com fail 217.16.6.136 2 reject example.com none example.com fail 38.101.42.50 1 reject example.com none example.com fail 50.23.30.156 5 reject example.com none him.himalayandeals.com neutral 59.106.13.71 7 reject example.com none example.com fail 66.11.233.45 4 reject example.com none example.com fail 66.51.199.93 14 reject example.com none example.com fail 66.51.199.98 16 reject example.com none example.com fail 66.7.215.146 2 reject example.com none the-studioonline.co.uk neutral 67.18.42.146 1 reject example.com none example.com fail 67.222.38.55 1 reject example.com none box293.bluehost.com neutral 69.87.137.60 32 reject example.com none example.com fail 95.172.88.28 2 reject reply.example.com examplemail.com neutral reply.example.com neutral 98.130.1.237 1 reject example.com none example.com fail 193.255.135.28 5 none support.example.com support.example.com pass support.example.com fail 207.126.144.55 1 none support.example.com support.example.com pass support.example.com fail 208.97.132.119 2 none support.example.com support.example.com pass support.example.com fail 66.220.144.135 55 none example.com example.com neutral example.com pass 66.220.144.137 38 none example.com example.com neutral example.com pass 66.220.144.138 1187 none support.example.com support.example.com pass support.example.com pass 66.220.144.141 47 none example.com example.com neutral example.com pass 66.220.144.142 54 none example.com example.com neutral example.com pass 66.220.144.144 1214 none support.example.com support.example.com pass support.example.com pass 66.220.144.147 1188 none support.example.com support.example.com pass support.example.com pass 66.220.144.149 1178 none support.example.com support.example.com pass support.example.com pass 66.220.144.151 40 none example.com example.com neutral example.com pass 66.220.144.152 52 none example.com example.com neutral example.com pass 66.220.144.154 62 none example.com example.com neutral example.com pass 66.220.155.136 4 none example.com example.com neutral example.com pass 66.220.155.142 574 none support.example.com support.example.com pass support.example.com pass 66.220.155.146 436 none support.example.com support.example.com pass support.example.com pass 66.220.155.148 4 none example.com example.com neutral example.com pass 66.220.155.151 527 none support.example.com support.example.com pass support.example.com pass 66.220.155.158 8 none example.com example.com neutral example.com pass 66.220.155.159 4 none example.com example.com neutral example.com pass 66.220.155.179 1 none example.com none example.com pass 69.171.232.135 1687 none support.example.com support.example.com pass support.example.com pass 69.171.232.136 1713 none support.example.com support.example.com pass support.example.com pass 69.171.232.137 46 none example.com example.com neutral example.com pass 69.171.232.141 51 none example.com example.com neutral example.com pass 69.171.232.145 36 none example.com example.com neutral example.com pass 69.171.232.145 1671 none support.example.com support.example.com pass support.example.com pass 69.171.232.152 1659 none support.example.com support.example.com pass support.example.com pass 12.152.56.140 6 reject example.com none example.com fail 128.59.28.169 1 reject support.example.com support.example.com neutral support.example.com fail 143.167.2.187 2 reject mx.example.com none stoat.shef.ac.uk pass 158.123.151.2 3 reject groups.example.com none groups.example.com neutral 188.246.32.25 1 reject example.com none example.com fail 195.186.80.28 3 reject example.com none example.com fail 195.94.186.57 1 reject example.com none smtp.cisl.it neutral 202.119.48.34 16 reject example.com none example.com fail 208.109.80.23 1 reject example.com none p3slh087.shr.phx3.secureserver.net neutral 208.109.80.24 1 reject example.com none p3slh087.shr.phx3.secureserver.net neutral 208.68.106.54 1 reject example.com none example.com fail 216.97.230.75 1 reject example.com none example.com fail 217.70.178.89 1 reject example.com none example.com fail 64.112.192.12 1 reject example.com none example.com fail 64.141.117.69 1 reject example.com none example.com fail 64.191.166.22 1 reject example.com none example.com fail 64.202.161.71 6 reject example.com none linhostssl22.prod.mesa1.secureserver.net neutral 66.220.157.24 2194 reject mx.example.com none smtpin.mx.example.com neutral 66.232.138.24 1296 reject example.com none lsh808.siteprotect.co.kr neutral 67.117.72.157 17 reject example.com none example.com fail 68.233.254.62 1 reject example.com none server.eng-club.com neutral 69.191.244.23 2 reject groups.example.com none bloomberg.net pass 69.36.188.172 6 reject example.com none example.com fail 69.73.138.176 1 reject example.com none example.com fail 69.84.129.233 1 reject support.example.com support.example.com fail support.example.com fail 70.60.174.130 1 reject example.com none example.com fail 72.47.218.235 1 reject example.com none gmail.com neutral 74.125.149.92 1 reject mx.example.com none psmtp.com neutral 74.208.222.45 50 reject example.com none example.com fail 83.138.167.61 1 reject example.com none bigadvertising.co.uk neutral 84.246.227.83 26 reject example.com none example.com fail 87.106.25.209 7 reject example.com none example.com fail 95.173.160.57 1 reject example.com none server4.guzelhosting.com neutral 129.219.117.248 5 none support.example.com support.example.com pass support.example.com fail 199.255.114.199 1 none support.example.com support.example.com pass bouncep.networkxmail.com pass 210.224.177.233 1 none example.com example.com pass bounces.heteml.jp pass 213.239.197.142 1 none support.example.com support.example.com pass support.example.com fail 140.117.11.138 1 reject example.com none example.com fail 169.232.46.176 1 reject example.com none example.com fail 169.232.46.178 1 reject example.com none example.com fail 169.232.46.180 1 reject example.com none example.com fail 174.143.152.74 28 reject proxymail.example.com shopkick.com pass shopkick.com pass 182.50.132.193 1 reject example.com none sg2nlhg021.shr.prod.sin2.secureserver.net neutral 184.107.41.104 2 reject example.com none box.iplanman.com neutral 184.172.173.51 1 reject example.com none example.com fail 184.174.191.77 4 reject groups.example.com none groups.example.com neutral 188.121.43.195 1 reject example.com none example.com fail 188.165.73.136 1 reject example.com none example.com fail 193.194.133.50 1 reject support.example.com support.example.com neutral support.example.com fail 199.120.150.29 6 reject example.com none example.com fail 201.64.137.130 14 reject example.com none example.com fail 202.174.84.245 3 reject example.com none example.com fail 204.202.242.84 1 reject example.com none example.com fail 206.248.95.195 4 reject example.com none example.com fail 207.138.254.58 1 reject example.com none example.com fail 207.97.245.112 1 reject example.com none example.com fail 207.97.245.148 1 reject example.com none example.com fail 207.97.245.164 1 reject example.com none example.com fail 207.97.245.175 1 reject example.com none example.com fail 207.97.245.198 1 reject example.com none example.com fail 212.121.219.10 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 213.239.178.80 19 reject example.com none example.com fail 213.48.152.207 15 reject example.com none example.com fail 220.95.232.137 105 reject example.com none ns.wizbill.com neutral 31.170.163.252 1 reject example.com none srv14.000webhost.com neutral 46.167.245.118 19 reject example.com none example.com fail 64.215.254.168 1 reject example.com none example.com fail 64.215.254.173 3 reject example.com none addthis.com pass 66.220.144.140 514 reject m.example.com m.example.com neutral m.example.com neutral 66.220.145.246 6 reject example.com none example.com fail 66.220.145.251 4 reject example.com none example.com fail 66.220.155.143 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 67.210.103.215 1 reject example.com none japanevents.com neutral 67.222.132.115 1 reject example.com none tralee.liviant.com neutral 69.171.232.147 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 69.171.232.153 478 reject m.example.com m.example.com neutral m.example.com neutral 72.167.234.237 59 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 72.167.234.239 5 reject example.com none p3nlhssl002.shr.prod.phx3.secureserver.net neutral 74.125.149.116 1 reject mx.example.com none psmtp.com neutral 74.125.149.174 1 reject mx.example.com none psmtp.com neutral 82.165.133.100 2 reject example.com none example.com fail 87.106.105.116 2 reject example.com none example.com fail 160.109.103.182 11 reject reply.example.com examplemail.com fail mail.keysafetyinc.com neutral 184.107.231.106 1 reject example.com none host.asiantop.net neutral 206.165.241.250 2 reject example.com none colt.postdirect.com neutral 208.118.241.107 5 reject example.com none example.com fail 209.212.145.102 2 reject example.com none gains.powerlinuxservers.com neutral 217.144.201.202 1 reject example.com none example.com fail 217.194.119.227 1 reject example.com none example.com fail 18.7.68.22 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.64.31.9 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.82.85.5 1 none forwarded support.example.com support.example.com pass srs.bis6.us.blackberry.com pass 80.65.50.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 163.1.2.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 18.4.70.171 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.4.92.94 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.250.3.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.44.29.23 2 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.0.111 1 none forwarded support.example.com support.example.com pass gmail.com pass 64.5.33.170 4 none forwarded support.example.com support.example.com pass support.example.com fail 64.59.134.9 9 none forwarded support.example.com support.example.com pass support.example.com fail 65.54.61.79 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.54.61.81 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.34.12 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.34.25 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.87 1 none forwarded example.com example.com pass hotmail.com pass 65.55.90.18 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.34 1 none forwarded example.com example.com pass live.com pass 65.55.90.36 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.37 1 none forwarded support.example.com support.example.com pass live.co.uk pass 65.55.90.37 1 none forwarded support.example.com support.example.com pass hotmail.com pass 66.40.56.36 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.7.193.50 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.186.2 1 none forwarded support.example.com support.example.com pass adreamvac.com pass 66.96.187.5 1 none forwarded support.example.com support.example.com pass wizardingwares.com pass 66.96.188.1 1 none forwarded support.example.com support.example.com pass frenzy.biz neutral 66.96.189.7 1 none forwarded support.example.com support.example.com pass jamlancer.com pass 69.49.98.26 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.87.28.62 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.87.28.64 1 none forwarded example.com example.com pass example.com fail 71.74.56.23 1 none forwarded example.com example.com pass example.com fail 74.208.5.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.53.86.98 2 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.62.24 1 none forwarded example.com example.com pass example.com fail 76.96.62.96 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.11 2 none forwarded support.example.com support.example.com pass support.example.com fail 83.138.8.79 1 none forwarded support.example.com support.example.com pass support.example.com fail 88.87.44.66 2 none forwarded support.example.com support.example.com pass support.example.com fail 18.7.68.23 2 reject forwarded example.com none example.com fail 18.7.68.26 1 reject forwarded example.com none example.com fail 64.18.1.49 1 reject forwarded example.com none example.com fail 64.18.1.63 1 reject forwarded example.com none example.com fail 64.18.3.28 1 reject forwarded support.example.com support.example.com neutral lacanadapc.org neutral 64.5.57.18 5 reject forwarded example.com quattro.co.za pass example.com fail 67.18.12.2 1 reject forwarded example.com none example.com fail 69.7.35.11 1 reject forwarded example.com none example.com fail 80.93.17.5 1 reject forwarded example.com none example.com fail 109.228.11.8 1 none forwarded support.example.com support.example.com pass support.example.com fail 125.53.25.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 139.78.133.4 1 none forwarded example.com example.com pass example.com fail 173.192.7.98 2 none forwarded support.example.com support.example.com pass support.example.com fail 182.48.26.55 1 none forwarded support.example.com support.example.com pass bounces.heteml.jp softfail 194.9.95.113 3 none forwarded support.example.com support.example.com pass support.example.com fail 200.58.119.8 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.47.184.5 1 none forwarded example.com example.com pass example.com fail 46.29.22.181 2 none forwarded support.example.com support.example.com pass support.example.com fail 64.13.252.98 5 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.116.18 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.22 1 none forwarded support.example.com support.example.com pass hotmail.co.uk pass 65.55.116.30 1 none forwarded support.example.com support.example.com pass consularcorps.cc neutral 65.55.116.44 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.45 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.48 1 none forwarded support.example.com support.example.com pass hotmail.co.uk pass 65.55.90.238 1 none forwarded support.example.com support.example.com pass hotmail.com pass 66.11.233.20 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.7.207.155 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.23.237 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.27.118 1 none forwarded example.com example.com pass example.com fail 69.89.28.163 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.30.158 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.94.32.178 3 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.43 2 none forwarded support.example.com support.example.com pass cumparalimente.com pass 74.125.82.44 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.46 1 none forwarded example.com example.com pass diplomatschool.com neutral 74.125.82.46 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.47 1 none forwarded support.example.com support.example.com pass kenbautista.com neutral 74.125.82.54 4 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.54 1 none forwarded support.example.com support.example.com pass bizcongo.com neutral 74.125.83.51 1 none forwarded support.example.com support.example.com pass makhsoom.com neutral 74.126.24.76 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.52.105.66 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.52.12.218 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.27.212 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.59.211 1 none forwarded support.example.com support.example.com pass support.example.com fail 79.96.242.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.19.149.56 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.88.50.246 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.13.147.56 3 none forwarded support.example.com support.example.com pass support.example.com fail 89.248.52.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.196.127.1 1 none forwarded support.example.com support.example.com pass support.example.com fail 199.94.80.8 3 reject forwarded support.example.com support.example.com neutral emerson.edu neutral 209.37.4.41 1 reject forwarded example.com none example.com fail 216.240.0.3 1 reject forwarded example.com none example.com fail 24.149.0.25 4 reject forwarded example.com none example.com fail 62.13.129.2 1 reject forwarded example.com none example.com fail 64.14.78.41 2 reject forwarded mx.example.com none s467.sureserver.com neutral 64.18.1.112 1 reject forwarded example.com none example.com fail 64.18.1.220 1 reject forwarded example.com none example.com fail 64.78.52.12 3 reject forwarded support.example.com support.example.com neutral veteransunited.com pass 64.98.36.17 2 reject forwarded mx.example.com none forward.b.hostedemail.com neutral 65.54.61.83 1 reject forwarded example.com example.com fail hotmail.com pass 65.55.88.11 1 reject forwarded example.com none alor.com pass 65.55.88.13 1 reject forwarded support.example.com support.example.com neutral tulane.edu pass 66.96.186.3 1 reject forwarded example.com none diegoalvarez.com pass 67.14.198.3 28 reject forwarded example.com none example.com fail 69.64.159.2 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 89.234.8.17 1 reject forwarded example.com none example.com fail 96.46.80.69 1 reject forwarded example.com none example.com fail 100.42.52.116 8 none forwarded support.example.com support.example.com pass support.example.com fail 109.200.5.151 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.180.2.160 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.252.29.10 4 none forwarded support.example.com support.example.com pass support.example.com fail 141.161.2.153 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.117.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.9.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.250.64.56 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.154.232.3 1 none forwarded support.example.com support.example.com pass support.example.com fail 192.115.104.9 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.238.6.243 1 none forwarded example.com example.com pass example.com fail 202.123.82.34 1 none forwarded support.example.com support.example.com pass gmail.com neutral 202.4.234.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.38.23.167 2 none forwarded support.example.com support.example.com pass support.example.com fail 208.69.190.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.76.243.50 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.66 9 none forwarded support.example.com support.example.com pass support.example.com fail 209.157.71.85 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.43 1 none forwarded support.example.com support.example.com pass radioreddit.com neutral 209.85.160.45 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.45 1 none forwarded support.example.com support.example.com pass infernodr.com neutral 209.85.160.45 1 none forwarded support.example.com support.example.com pass gendreau.qc.ca neutral 209.85.160.46 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.48 1 none forwarded example.com example.com pass eclectic.co.in softfail 209.85.160.48 1 none forwarded support.example.com support.example.com pass schubas.com neutral 209.85.160.50 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.50 1 none forwarded support.example.com support.example.com pass mainashville.com neutral 209.85.160.52 1 none forwarded support.example.com support.example.com pass gelattina.com neutral 209.85.160.52 2 none forwarded support.example.com support.example.com pass coatescrew.com neutral 209.85.160.52 1 none forwarded support.example.com support.example.com pass brettassets.com neutral 209.85.160.53 1 none forwarded support.example.com support.example.com pass medrx.in neutral 209.85.160.54 1 none forwarded support.example.com support.example.com pass pof.com pass 209.85.160.54 1 none forwarded support.example.com support.example.com pass skyarc.co.jp neutral 209.85.210.41 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.45 1 none forwarded support.example.com support.example.com pass ifly.md pass 209.85.210.46 1 none forwarded support.example.com support.example.com pass somethingmassive.com neutral 209.85.210.47 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.53 1 none forwarded support.example.com support.example.com pass pto.hu neutral 209.85.212.42 1 none forwarded support.example.com support.example.com pass xihit.net neutral 209.85.212.44 1 none forwarded support.example.com support.example.com pass dheerajjain.com neutral 209.85.212.45 4 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.46 1 none forwarded support.example.com support.example.com pass adplay.re neutral 209.85.212.46 1 none forwarded support.example.com support.example.com pass alleviateautism.com neutral 209.85.212.47 2 none forwarded support.example.com support.example.com pass theormgroup.com neutral 209.85.212.48 1 none forwarded support.example.com support.example.com pass n-gate.jp neutral 209.85.212.48 1 none forwarded support.example.com support.example.com pass attardi.org neutral 209.85.212.48 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.49 1 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.51 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.213.42 1 none forwarded support.example.com support.example.com pass online.net.tw neutral 209.85.213.44 9 none forwarded support.example.com support.example.com pass compasslabs.com neutral 209.85.213.46 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.47 1 none forwarded support.example.com support.example.com pass murfie.com neutral 209.85.213.48 1 none forwarded support.example.com support.example.com pass my.am neutral 209.85.213.48 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.49 1 none forwarded support.example.com support.example.com pass neaterpets.com neutral 209.85.213.50 4 none forwarded support.example.com support.example.com pass industrystandard.ro pass 209.85.213.51 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.213.52 2 none forwarded support.example.com support.example.com pass choth.de pass 209.85.213.52 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.213.53 1 none forwarded support.example.com support.example.com pass orabrush.com neutral 209.85.214.41 1 none forwarded support.example.com support.example.com pass martinneely.com neutral 209.85.214.41 2 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.214.42 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.42 1 none forwarded support.example.com support.example.com pass u.pacific.edu neutral 209.85.214.44 2 none forwarded support.example.com support.example.com pass mambopublicidad.com neutral 209.85.214.45 1 none forwarded support.example.com support.example.com pass soulfirerevolution.com softfail 209.85.214.48 1 none forwarded support.example.com support.example.com pass davemounsey.com neutral 209.85.214.49 1 none forwarded support.example.com support.example.com pass ginc.de neutral 209.85.214.50 1 none forwarded support.example.com support.example.com pass biotecnika.org neutral 209.85.214.52 1 none forwarded support.example.com support.example.com pass rian.ca neutral 209.85.214.53 1 none forwarded support.example.com support.example.com pass arwdesigns.com neutral 209.85.214.54 1 none forwarded example.com example.com pass andrew.ac.jp neutral 209.85.215.41 2 none forwarded support.example.com support.example.com pass coromega.com pass 209.85.215.42 1 none forwarded support.example.com support.example.com pass nakajimashigeo.com neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass kamlacno.sk neutral 209.85.215.45 3 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass highsierramusic.com neutral 209.85.215.46 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.215.49 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.215.50 27 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.51 1 none forwarded support.example.com support.example.com pass globalcrucible.org neutral 209.85.215.52 1 none forwarded support.example.com support.example.com pass adwave.ch neutral 209.85.215.52 1 none forwarded support.example.com support.example.com pass slipstreaminteractive.com neutral 209.85.215.53 1 none forwarded support.example.com support.example.com pass novadore.com neutral 209.85.215.53 1 none forwarded support.example.com support.example.com pass fisica.ufc.br neutral 209.85.215.54 2 none forwarded support.example.com support.example.com pass 3bweb.com pass 209.85.216.44 1 none forwarded support.example.com support.example.com pass gurubet.gr neutral 209.85.216.44 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.216.48 1 none forwarded support.example.com support.example.com pass gauge.com.br neutral 209.85.216.49 1 none forwarded support.example.com support.example.com pass infomanav.com neutral 211.13.204.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.227.17.12 2 none forwarded example.com example.com pass web.de neutral 213.180.89.84 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.241.14.18 1 none forwarded example.com example.com pass example.com fail 216.251.36.17 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.33.127.86 1 none forwarded example.com example.com pass example.com fail 217.114.99.50 1 none forwarded support.example.com support.example.com pass exxtra.net neutral 217.170.2.225 3 none forwarded support.example.com support.example.com pass support.example.com fail 219.118.193.7 3 none forwarded support.example.com support.example.com pass support.example.com fail 38.64.132.130 1 none forwarded example.com example.com pass example.com fail 41.204.200.65 1 none forwarded support.example.com support.example.com pass support.example.com fail 46.105.46.193 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.116.120.17 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.97.101.235 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.97.101.242 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.179.121.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.84 1 none forwarded support.example.com support.example.com pass tawcawcreekmedia.com pass 66.111.111.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.220.157.69 2 none forwarded example.com example.com pass example.com pass 67.205.67.144 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.208.220.75 2 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.48.113 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.168.63.208 2 none forwarded support.example.com support.example.com pass support.example.com fail 70.33.241.140 1 none forwarded support.example.com support.example.com pass gmail.com neutral 72.167.218.23 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.125.149.18 1 none forwarded example.com example.com pass artofliving.org permerror 74.125.82.169 1 none forwarded support.example.com support.example.com pass areatresworkplace.com neutral 74.125.82.171 1 none forwarded support.example.com support.example.com pass jbanetwork.com pass 74.125.82.181 1 none forwarded support.example.com support.example.com pass intimo.dk pass 74.200.85.171 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.208.144.88 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.199.64 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.210.14 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.59 1 none forwarded support.example.com support.example.com pass support.example.com fail 83.222.25.108 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.239.16.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.185.193.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 93.114.64.195 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.236.56.139 2 none forwarded support.example.com support.example.com pass support.example.com fail 94.76.198.168 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.74.135.187 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.138.91.159 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.54 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.125 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.204 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.53.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.53.211 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.90.230 1 none forwarded support.example.com support.example.com pass gmail.com neutral 98.139.91.199 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.245 1 none forwarded support.example.com support.example.com pass support.example.com fail 130.18.2.143 1 reject forwarded example.com none example.com fail 150.161.6.80 1 reject forwarded example.com none dncgroup.cafe24.com neutral 169.228.38.2 1 reject forwarded example.com none sccn.ucsd.edu neutral 17.148.16.94 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.95 1 reject forwarded example.com example.com neutral example.com fail 17.148.16.95 1 reject forwarded support.example.com support.example.com neutral gmail.com neutral 178.250.76.2 1 reject forwarded example.com none example.com fail 199.94.80.15 2 reject forwarded support.example.com support.example.com neutral emerson.edu neutral 200.20.158.2 1 reject forwarded example.com none sus79.suidc.com neutral 204.14.89.19 2 reject forwarded example.com none example.com fail 208.92.44.79 2 reject forwarded example.com none example.com fail 216.70.64.19 2 reject forwarded example.com none example.com fail 216.70.64.20 1 reject forwarded example.com none example.com fail 216.70.64.53 1 reject forwarded example.com none example.com fail 222.35.2.149 36 reject forwarded example.com none example.com fail 38.101.21.17 38 reject forwarded example.com none example.com fail 4.59.182.101 1 reject forwarded example.com none example.com fail 50.43.125.67 1 reject forwarded example.com none example.com fail 61.14.139.72 1 reject forwarded example.com none example.com fail 62.76.176.73 6 reject forwarded example.com none example.com fail 64.6.236.221 1 reject forwarded example.com none example.com fail 65.55.116.19 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.116.20 1 reject forwarded m.example.com m.example.com neutral msn.com pass 65.55.116.25 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.116.28 1 reject forwarded m.example.com m.example.com neutral msn.com pass 65.55.116.37 1 reject forwarded example.com example.com neutral hotmail.com pass 65.60.29.204 1 reject forwarded example.com none example.com fail 66.135.33.85 1 reject forwarded example.com none example.com fail 66.51.199.93 1 reject forwarded example.com none example.com fail 67.21.176.17 30 reject forwarded example.com none example.com fail 69.57.180.93 4 reject forwarded example.com none example.com fail 69.89.17.219 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.32.175.28 2 reject forwarded example.com none example.com fail 72.34.41.199 1 reject forwarded example.com none example.com fail 72.55.178.69 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 72.66.114.58 1 reject forwarded example.com none example.com fail 74.125.82.48 1 reject forwarded support.example.com support.example.com neutral cougars.csusm.edu neutral 74.208.4.198 1 reject forwarded mx.example.com none mout-bounce.perfora.net pass 74.3.239.250 35 reject forwarded example.com none example.com fail 74.50.52.241 1 reject forwarded example.com example.com neutral example.com fail 74.52.92.242 1 reject forwarded example.com none example.com fail 76.74.157.47 1 reject forwarded example.com none example.com fail 77.75.57.249 1 reject forwarded mx.example.com none zircon001.bhpr.net neutral 78.46.135.75 1 reject forwarded example.com none example.com fail 98.130.1.167 2 reject forwarded mx.example.com none mail512.opentransfer.com neutral 106.187.94.158 1 none forwarded support.example.com support.example.com pass support.example.com fail 112.78.219.235 3 none forwarded support.example.com support.example.com pass bounces.heteml.jp pass 125.206.187.72 1 none forwarded support.example.com support.example.com pass xnozacli1-40gmail-2ecom.xinfo-2dbounce-2bcf076cx-2eaeazeint5wdee-40support-2eexample.x.x-2ecom.ocnadm.ocn.ad.jp pass 128.103.109.33 1 none forwarded example.com example.com pass example.com fail 128.197.228.14 1 none forwarded support.example.com support.example.com pass support.example.com fail 131.252.111.43 1 none forwarded support.example.com support.example.com pass pdx.edu neutral 173.192.226.37 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.236.30.122 3 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.155.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.157.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.232.18 3 none forwarded support.example.com support.example.com pass support.example.com fail 175.45.140.238 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.79.145.190 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.197.26 2 none forwarded example.com example.com pass example.com fail 184.173.23.202 2 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.34.162 2 none forwarded support.example.com support.example.com pass support.example.com fail 193.253.67.235 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.228.88.234 2 none forwarded support.example.com support.example.com pass avizo.cz neutral 195.29.150.139 3 none forwarded support.example.com support.example.com pass support.example.com fail 200.189.192.68 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.133.127.11 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.174.68.199 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.192.75.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.58.141.100 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.58.164.221 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.116.36.119 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.91.198.254 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.207 7 none forwarded support.example.com support.example.com pass support.example.com fail 209.188.89.140 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.44.114.166 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.170 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.160.175 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.177 1 none forwarded support.example.com support.example.com pass internationalpreschoolcurriculum.com neutral 209.85.160.178 1 none forwarded support.example.com support.example.com pass industrystandard.ro pass 209.85.160.181 1 none forwarded support.example.com support.example.com pass captainu.com pass 209.85.161.174 1 none forwarded example.com example.com pass gmail.com pass 209.85.161.174 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.161.177 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.161.178 2 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.212.173 1 none forwarded support.example.com support.example.com pass alfsgolf.com neutral 209.85.212.177 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.178 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.179 1 none forwarded support.example.com support.example.com pass fadeev.biz pass 209.85.212.179 1 none forwarded support.example.com support.example.com pass totophoto.com pass 209.85.212.179 1 none forwarded support.example.com support.example.com pass jhuskisson.com neutral 209.85.212.179 1 none forwarded support.example.com support.example.com pass darklightsystem.com fail 209.85.212.180 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.180 1 none forwarded support.example.com support.example.com pass ilovedeals.sg softfail 209.85.212.182 1 none forwarded support.example.com support.example.com pass splitpen.com pass 209.85.213.170 1 none forwarded support.example.com support.example.com pass pousadaflatjardins.com.br neutral 209.85.213.172 1 none forwarded support.example.com support.example.com pass twireless.biz neutral 209.85.213.173 4 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.174 1 none forwarded support.example.com support.example.com pass nicedeal.sg softfail 209.85.213.175 1 none forwarded support.example.com support.example.com pass aerotrix.com neutral 209.85.213.175 1 none forwarded support.example.com support.example.com pass jumpstartweb.com neutral 209.85.213.177 1 none forwarded support.example.com support.example.com pass privalia.it pass 209.85.213.178 1 none forwarded support.example.com support.example.com pass activetape.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass foremtrading.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass siralistairrai.com neutral 209.85.213.179 1 none forwarded support.example.com support.example.com pass sigssoftmedia.no neutral 209.85.213.180 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.180 1 none forwarded support.example.com support.example.com pass robinbarondesign.com neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass virgin.net pass 209.85.214.169 1 none forwarded support.example.com support.example.com pass easyhi.com neutral 209.85.214.170 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.170 5 none forwarded support.example.com support.example.com pass emerald.vn neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass lsf-corp.com neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass toteleather.com softfail 209.85.214.171 1 none forwarded example.com example.com pass students.claremontmckenna.edu pass 209.85.214.171 10 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.171 1 none forwarded support.example.com support.example.com pass listia.com pass 209.85.214.171 1 none forwarded support.example.com support.example.com pass copaceticmedia.net neutral 209.85.214.172 2 none forwarded support.example.com support.example.com pass redirect.gr softfail 209.85.214.172 1 none forwarded support.example.com support.example.com pass pride.hofstra.edu neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass elitematchmaking.com neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass isotti.org pass 209.85.214.173 1 none forwarded support.example.com support.example.com pass tikora.com neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass pecavar.com neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.174 3 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass khadiwala.com pass 209.85.214.174 1 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.214.174 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass parkforprofit.com neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass mail.fisica.ufc.br neutral 209.85.214.175 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.176 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.176 4 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.176 1 none forwarded support.example.com support.example.com pass palmergroupmedia.com neutral 209.85.214.177 1 none forwarded support.example.com support.example.com pass srxa.com neutral 209.85.214.177 2 none forwarded support.example.com support.example.com pass privalia.it pass 209.85.214.177 1 none forwarded support.example.com support.example.com pass fdsaindia.org neutral 209.85.214.177 1 none forwarded support.example.com support.example.com pass sinoedu.com.hk neutral 209.85.214.177 2 none forwarded support.example.com support.example.com pass digitalclickmedia.net neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass liman.org neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass emotion.lt neutral 209.85.214.178 20 none forwarded support.example.com support.example.com pass industrystandard.ro pass 209.85.214.179 5 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.179 2 none forwarded support.example.com support.example.com pass dlpevenements.com softfail 209.85.214.180 1 none forwarded example.com example.com pass gmail.com pass 209.85.214.180 1 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass bagpipelessons.com neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass cablight.com neutral 209.85.215.169 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.170 2 none forwarded support.example.com support.example.com pass dealster.com softfail 209.85.215.178 3 none forwarded support.example.com support.example.com pass mandaadvertising.com neutral 209.85.215.181 1 none forwarded support.example.com support.example.com pass worldinternetsummit.com neutral 209.85.216.169 1 none forwarded support.example.com support.example.com pass brettassets.com neutral 209.85.216.174 1 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.176 1 none forwarded support.example.com support.example.com pass aucegypt.edu pass 209.85.216.180 1 none forwarded support.example.com support.example.com pass indianhanger.com neutral 209.85.216.181 1 none forwarded support.example.com support.example.com pass wheatus.com neutral 209.85.216.181 1 none forwarded support.example.com support.example.com pass lindenlab.com neutral 209.85.216.181 1 none forwarded support.example.com support.example.com pass hearnebraska.org neutral 209.85.216.181 1 none forwarded support.example.com support.example.com pass pearsonkramer.com neutral 209.85.217.169 1 none forwarded support.example.com support.example.com pass clinicadermasana.com neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass kamlacno.sk neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass livecontent.pt neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass akankshagoel.com neutral 209.85.217.170 3 none forwarded support.example.com support.example.com pass nakajimashigeo.com neutral 209.85.217.171 1 none forwarded support.example.com support.example.com pass 20north.com pass 209.85.217.172 1 none forwarded support.example.com support.example.com pass poslavu.com neutral 209.85.217.175 1 none forwarded support.example.com support.example.com pass frubis.com neutral 209.85.217.175 1 none forwarded support.example.com support.example.com pass ivydate.com softfail 209.85.217.175 2 none forwarded support.example.com support.example.com pass godmother.ro neutral 209.85.217.175 2 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.176 1 none forwarded support.example.com support.example.com pass unwe.eu neutral 209.85.217.178 1 none forwarded support.example.com support.example.com pass insidevault.com neutral 209.85.217.179 1 none forwarded support.example.com support.example.com pass equte.com neutral 209.85.217.181 1 none forwarded support.example.com support.example.com pass imobiliariadorio.com.br neutral 209.85.217.182 2 none forwarded support.example.com support.example.com pass mequedo1.com pass 209.85.217.182 6 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.220.179 2 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.220.182 2 none forwarded support.example.com support.example.com pass sgarrison.com neutral 210.150.250.56 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.152.132.51 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.218.28 1 none forwarded support.example.com support.example.com pass sv2.mmrs.jp neutral 216.200.145.35 1 none forwarded example.com example.com pass example.com fail 217.10.138.205 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.70.183.196 2 none forwarded support.example.com support.example.com pass gmail.com neutral 46.163.115.142 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.233.105.128 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.207.148.236 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.235 2 none forwarded support.example.com support.example.com pass happydoodle.net pass 66.220.144.156 7 none forwarded support.example.com support.example.com pass support.example.com pass 67.225.242.143 52 none forwarded support.example.com support.example.com pass support.example.com fail 68.230.241.136 1 none forwarded support.example.com support.example.com pass gmail.com neutral 68.230.241.209 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.167.180.253 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.232.136 9 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.148 15 none forwarded support.example.com support.example.com pass support.example.com pass 74.205.104.188 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.201.217 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.205.233 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.218.251 1 none forwarded support.example.com support.example.com pass support.example.com fail 75.126.152.227 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.169.146.149 4 none forwarded support.example.com support.example.com pass support.example.com fail 84.201.187.147 2 none forwarded support.example.com support.example.com pass yandex.ru pass 84.233.158.195 5 none forwarded support.example.com support.example.com pass support.example.com fail 88.222.163.117 5 none forwarded example.com example.com pass example.com fail 98.139.212.191 1 none forwarded support.example.com support.example.com pass orange.pl fail 74.125.83.70 5 none mailing_list support.example.com none graphscience.com pass 12.144.64.178 20 reject forwarded example.com none example.com fail 120.88.69.169 1 reject forwarded support.example.com support.example.com neutral helenmunro.com neutral 128.252.29.10 1 reject forwarded example.com none example.com fail 128.59.28.165 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 132.206.27.53 1 reject forwarded support.example.com support.example.com neutral mail.mcgill.ca neutral 140.98.193.29 1 reject forwarded example.com none srs.ieee.org neutral 142.3.100.254 1 reject forwarded example.com none example.com fail 144.118.29.83 2 reject forwarded example.com none example.com fail 151.189.21.50 1 reject forwarded example.com mail65.us2.rsgsv.net pass mail65.us2.rsgsv.net neutral 151.189.21.53 1 reject forwarded example.com none example.com fail 168.143.5.206 1 reject forwarded example.com none example.com fail 17.148.16.103 1 reject forwarded support.example.com support.example.com neutral debrarogerscampaign.com neutral 193.43.15.117 1 reject forwarded support.example.com support.example.com neutral mr-goa-01.costa.it pass 195.186.80.32 1 reject forwarded example.com none example.com fail 198.173.81.21 1 reject forwarded example.com none example.com fail 200.58.120.15 1 reject forwarded mx.example.com none peluq.depeluqueros.com neutral 201.76.49.116 1 reject forwarded example.com none hm1480-19.locaweb.com.br neutral 202.43.180.28 9 reject forwarded example.com none example.com fail 204.14.84.170 1 reject forwarded example.com none example.com fail 206.40.48.154 1 reject forwarded example.com none example.com fail 206.46.172.51 1 reject forwarded example.com none example.com fail 207.112.3.239 25 reject forwarded example.com none example.com fail 207.69.195.98 2 reject forwarded example.com none example.com fail 208.43.37.110 1 reject forwarded example.com none example.com fail 208.82.238.98 1 reject forwarded example.com example.com neutral craigslist.org pass 209.190.25.90 1 reject forwarded example.com none example.com fail 209.85.210.42 1 reject forwarded example.com example.com fail fans.tw neutral 209.85.212.53 2 reject forwarded example.com example.com neutral fminutes.com neutral 209.85.213.49 3 reject forwarded example.com example.com neutral dachisgroup.com pass 209.85.213.70 3 reject forwarded mx.example.com none mail-yw0-f70.google.com neutral 209.85.214.48 1 reject forwarded example.com none u.northwestern.edu neutral 209.85.214.54 1 reject forwarded example.com example.com neutral ineplan.com neutral 209.85.215.41 2 reject forwarded example.com example.com fail unitedparents.com neutral 209.85.216.53 1 reject forwarded support.example.com support.example.com neutral alu.ucam.edu softfail 212.227.15.33 5 reject forwarded example.com none example.com fail 212.227.17.10 1 reject forwarded example.com none corsini.fr neutral 212.227.17.10 1 reject forwarded support.example.com support.example.com neutral helitransair.com neutral 212.227.17.12 29 reject forwarded example.com none web.de neutral 212.54.34.165 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 212.97.132.45 3 reject forwarded example.com none ws48.surf-town.net neutral 216.13.106.61 1 reject forwarded example.com none example.com fail 216.17.14.176 1 reject forwarded support.example.com none securence.com pass 216.32.180.13 1 reject forwarded reply.example.com examplemail.com neutral furman.edu neutral 216.33.127.89 1 reject forwarded example.com none example.com fail 217.39.141.41 1 reject forwarded mx.example.com none mail2.fordementia.org.uk neutral 24.214.64.231 2 reject forwarded example.com none example.com fail 38.102.228.93 2 reject forwarded example.com none example.com fail 46.182.29.144 1 reject forwarded example.com example.com neutral example.com fail 50.56.110.136 1 reject forwarded example.com none example.com fail 64.128.160.12 1 reject forwarded example.com none cieloclub.com pass 64.142.111.66 1 reject forwarded example.com none example.com fail 64.34.162.143 1 reject forwarded example.com none example.com fail 66.132.135.50 6 reject forwarded example.com none example.com fail 66.163.144.10 1 reject forwarded example.com none example.com fail 68.179.51.203 1 reject forwarded support.example.com support.example.com neutral columbia.ab.ca pass 68.188.43.153 30 reject forwarded example.com none example.com fail 69.16.252.116 1 reject forwarded example.com none example.com fail 74.220.222.16 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 77.120.116.46 9 reject forwarded example.com none example.com fail 80.160.76.198 1 reject forwarded example.com none example.com fail 80.179.55.169 16 reject forwarded example.com none example.com fail 80.179.55.175 21 reject forwarded example.com none example.com fail 81.171.104.53 1 reject forwarded example.com none example.com fail 81.95.114.136 10 reject forwarded example.com none example.com fail 83.145.109.42 4 reject forwarded example.com none example.com fail 83.168.245.16 64 reject forwarded example.com none example.com fail 83.245.33.152 58 reject forwarded example.com none example.com fail 84.93.230.227 2 reject forwarded example.com none example.com fail 87.117.195.76 1 reject forwarded example.com none example.com fail 91.121.62.198 1 reject forwarded example.com example.com neutral example.com fail 91.190.170.84 1 reject forwarded mx.example.com none www.splio3.fr neutral 93.188.248.40 1 reject forwarded example.com none example.com fail 98.139.44.111 1 reject forwarded example.com none example.com fail 116.251.223.133 1 none forwarded support.example.com support.example.com pass support.example.com fail 122.200.227.163 1 none forwarded support.example.com support.example.com pass support.example.com fail 163.139.233.130 4 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.193.165 5 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.187 9 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 174.121.151.162 5 none forwarded support.example.com support.example.com pass support.example.com fail 174.121.192.155 3 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.156.194 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.188.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.186.227.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 199.204.248.107 2 none forwarded example.com example.com pass example.com fail 207.126.144.119 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 209.105.236.230 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.236.116.243 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.237.134.235 1 none forwarded support.example.com support.example.com pass srs.perfora.net neutral 210.171.169.140 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.144.201 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.188.194.133 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.113.135.143 1 none forwarded support.example.com support.example.com pass hotmail.com softfail 213.161.198.147 3 none forwarded support.example.com support.example.com pass support.example.com fail 213.171.216.112 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.171.216.135 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.209.214.154 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.245.194.154 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.240 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.246 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.69 3 none mailing_list support.example.com none 23andme.com pass 209.85.160.69 4 none mailing_list support.example.com none schoolofrock.com pass 209.85.160.71 11 none mailing_list support.example.com none publik.com.tr pass 209.85.160.71 1 none mailing_list support.example.com none artmarkettools.com pass 209.85.210.69 2 none mailing_list support.example.com none gametrafficmedia.com pass 209.85.210.71 2 none mailing_list support.example.com none glyde.com pass 209.85.210.71 12 none mailing_list support.example.com none 6waves.com pass 209.85.210.72 4 none mailing_list support.example.com none kiwicrate.com pass 209.85.210.72 2 none mailing_list support.example.com none hungrymachine.com pass 209.85.210.72 4 none mailing_list support.example.com none yieldsoftware.com pass 209.85.213.72 2 none mailing_list support.example.com none hagakure.it pass 209.85.216.70 9 none mailing_list support.example.com none reverbnation.com pass 108.166.44.248 1 reject forwarded mx.example.com none mail.redmantech.ca neutral 128.120.32.132 3 reject forwarded example.com none example.com fail 128.120.32.141 1 reject forwarded example.com none example.com fail 128.121.64.175 1 reject forwarded example.com none example.com fail 128.135.165.69 2 reject forwarded example.com none example.com fail 128.233.248.20 1 reject forwarded example.com example.com neutral example.com fail 128.253.83.165 3 reject forwarded example.com none example.com fail 128.253.83.168 1 reject forwarded support.example.com support.example.com fail support.example.com fail 129.105.238.75 1 reject forwarded example.com none northwestern.edu neutral 130.113.128.25 2 reject forwarded example.com none example.com fail 137.118.16.123 1 reject forwarded example.com none example.com fail 157.55.133.164 1 reject forwarded support.example.com support.example.com neutral va3ehsndr001.bigfish.com neutral 184.172.185.11 1 reject forwarded example.com none example.com fail 187.72.171.145 1 reject forwarded mx.example.com none br111.dialhost.com.br neutral 193.213.115.26 1 reject forwarded example.com none example.com fail 195.209.228.68 13 reject forwarded example.com none example.com fail 196.212.151.18 1 reject forwarded example.com none example.com fail 196.33.246.146 2 reject forwarded support.example.com support.example.com neutral ssisa.com neutral 198.212.10.119 2 reject forwarded example.com none example.com fail 200.242.35.138 1 reject forwarded example.com none dncgroup.cafe24.com neutral 203.238.128.90 45 reject forwarded example.com none example.com fail 207.97.245.159 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 208.82.238.101 1 reject forwarded example.com example.com neutral craigslist.org pass 208.97.132.207 2 reject forwarded example.com none example.com fail 208.97.132.207 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 209.198.87.189 3 reject forwarded example.com none example.com fail 209.85.161.176 1 reject forwarded example.com example.com neutral idreaminteractive.com neutral 209.85.213.198 3 reject forwarded mx.example.com none mail-yx0-f198.google.com neutral 213.165.64.100 1 reject forwarded example.com none server38.cyon.ch neutral 213.195.76.108 5 reject forwarded example.com none example.com fail 216.32.181.182 1 reject forwarded support.example.com support.example.com neutral ivc.edu neutral 216.32.181.186 1 reject forwarded example.com example.com neutral uq.net.au neutral 218.102.53.104 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 46.255.225.251 1 reject forwarded support.example.com support.example.com neutral centrum.cz pass 46.255.227.253 1 reject forwarded support.example.com support.example.com neutral sytea.org neutral 62.128.193.157 4 reject forwarded example.com none example.com fail 66.133.183.227 1 reject forwarded example.com none example.com fail 66.220.144.158 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 68.230.241.139 2 reject forwarded example.com none example.com fail 69.171.232.143 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.171.232.152 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.167.218.149 1 reject forwarded mx.example.com none p3plsmtp03-01.prod.phx3.secureserver.net neutral 74.204.168.165 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 74.220.214.201 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 78.153.203.207 1 reject forwarded example.com none pemlinweb08.blacknight.com neutral 82.132.130.169 2 reject forwarded example.com none example.com fail 89.184.184.192 1 reject forwarded support.example.com support.example.com neutral mercuriusvermogensbeheer.nl neutral 91.206.8.125 74 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.198 2 none mailing_list support.example.com none gosocial.dk pass 209.85.161.198 2 none mailing_list support.example.com none apis3.com pass 209.85.161.200 4 none mailing_list support.example.com none wearesocial.net pass 209.85.213.198 2 none mailing_list support.example.com none plumbee.co.uk pass 209.85.214.197 1 none mailing_list support.example.com none fullslate.com pass 209.85.214.197 6 none mailing_list support.example.com none peakgames.net pass 209.85.214.198 3 none mailing_list support.example.com none raybeam.com pass 209.85.214.199 4 none mailing_list support.example.com none kellett.nt.ca pass 209.85.214.200 4 none mailing_list support.example.com none hungrymachine.com pass 209.85.216.198 10 none mailing_list support.example.com none gosocial.dk pass 114.111.116.121 7 reject forwarded reply.example.com examplemail.com neutral returns.yahoogroups.jp pass 121.111.227.148 1 reject forwarded reply.example.com examplemail.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.153 1 reject forwarded mx.example.com none auoneerrml1.ezweb.ne.jp pass 173.201.192.165 1 reject forwarded mx.example.com none p3plsmtp13-03.prod.phx3.secureserver.net neutral 173.201.193.167 2 reject forwarded mx.example.com none p3plsmtp17-04.prod.phx3.secureserver.net neutral 173.201.193.189 1 reject forwarded mx.example.com none p3plsmtp18-05.prod.phx3.secureserver.net neutral 178.255.146.220 1 reject forwarded mx.example.com none alpha.ninjabox.net neutral 184.173.195.215 1 reject forwarded example.com none example.com fail 187.174.157.180 8 reject forwarded example.com none example.com fail 193.120.143.152 1 reject forwarded example.com none hub04.mail.esat.net neutral 194.116.198.211 1 reject forwarded support.example.com support.example.com neutral csm.arts.ac.uk neutral 194.206.126.149 1 reject forwarded example.com none example.com fail 204.246.135.206 1 reject forwarded support.example.com tcsmail.tcsgeeks.com neutral support.example.com fail 205.153.119.146 1 reject forwarded mx.example.com none mailmxsvr2.aiso.net neutral 207.155.253.102 1 reject forwarded example.com none example.com fail 209.235.152.116 1 reject forwarded example.com none hosting3.isun.biz neutral 212.199.114.186 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 213.171.216.132 1 reject forwarded example.com example.com neutral example.com fail 216.104.163.150 1 reject forwarded example.com none example.com fail 216.104.163.153 1 reject forwarded example.com none example.com fail 217.172.170.250 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 204.167.95.25 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 3 reject mailing_list support.example.com none adsoul.pt neutral 209.85.160.69 21 reject mailing_list support.example.com none yunait.com neutral 209.85.160.70 24 reject mailing_list support.example.com none snsplus.com neutral 209.85.160.70 3 reject mailing_list support.example.com none aquiesdonde.com.ar neutral 209.85.160.71 1 reject mailing_list example.com none 12gigs.com neutral 209.85.160.71 4 reject mailing_list support.example.com none blitzlocal.com neutral 209.85.160.71 2 reject mailing_list support.example.com none gramercyone.com neutral 209.85.160.71 2 reject mailing_list support.example.com none vivogroup.com.au neutral 209.85.160.72 56 reject mailing_list support.example.com none deducta.dk neutral 209.85.160.72 2 reject mailing_list support.example.com none egamers.com neutral 209.85.210.70 2 reject mailing_list example.com none cloudraker.com neutral 209.85.210.70 1 reject mailing_list support.example.com none mainstreethub.com softfail 209.85.210.71 1 reject mailing_list support.example.com none dinkbit.com softfail 209.85.210.71 6 reject mailing_list support.example.com none mpwmarketing.com neutral 209.85.210.71 6 reject mailing_list support.example.com none shepherdsguide.com neutral 209.85.212.71 2 reject mailing_list support.example.com none gramercyone.com neutral 209.85.213.70 3 reject mailing_list support.example.com none beaffinitive.com neutral 209.85.213.72 4 reject mailing_list support.example.com none prodigi.com.ua neutral 209.85.216.71 10 reject mailing_list example.com none epsi.fr softfail 209.85.216.72 4 reject mailing_list example.com none casinonightclub.org neutral 209.85.216.72 21 reject mailing_list support.example.com none deducta.dk neutral 74.125.149.67 2 reject mailing_list support.example.com none digitellinc.com neutral 74.125.245.80 2 reject mailing_list support.example.com none partnerscreative.com neutral 209.85.214.197 3 reject mailing_list support.example.com none nightowlgames.net neutral 209.85.214.199 27 reject mailing_list support.example.com none adtz.com neutral 209.85.214.200 5 reject mailing_list support.example.com none taykey.com neutral 209.85.216.199 9 reject mailing_list support.example.com none adtz.com neutral 210.172.183.48 1 reject mailing_list example.com example.com fail japan-romance.com neutral 219.94.155.132 15 reject mailing_list example.com example.com fail japan-romance.com neutral 74.125.149.153 1 reject mailing_list support.example.com none latinamerikareiser.no neutral 64.18.0.26 1 reject forwarded mailing_list support.example.com none prontoinsurance.com neutral 209.85.210.71 12 none forwarded mailing_list support.example.com none fetise.com pass 209.85.212.70 1 none forwarded mailing_list support.example.com none bigbrands.pl pass 74.125.149.76 3 none forwarded mailing_list support.example.com none bluefly.com pass 74.125.245.80 4 none forwarded mailing_list support.example.com none mindcomet.com pass 74.125.82.199 1 none forwarded mailing_list support.example.com none sparkker.com pass 195.74.38.25 2 reject forwarded mailing_list support.example.com none loveyewear.com neutral 71.41.38.143 1 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 98.139.165.5 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.213.200 1 none forwarded mailing_list support.example.com none admin.naharnet.com pass 200.98.199.33 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.210.43 3 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.210.72 60 reject forwarded mailing_list example.com none iminlikewithyou.com neutral 209.85.213.43 2 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.69 2 reject forwarded mailing_list support.example.com none playerize.com neutral 209.85.213.71 3 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.213.71 2 reject forwarded mailing_list support.example.com none appsumo.com softfail 209.85.215.54 1 reject forwarded mailing_list support.example.com none httpool.si pass 209.85.215.69 3 reject forwarded mailing_list support.example.com none fishdesign.com.ua neutral 209.85.216.71 51 reject forwarded mailing_list support.example.com none sokrati.com neutral 74.125.149.71 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.90 8 reject forwarded mailing_list support.example.com none reloadmedia.com.au neutral 98.136.218.40 27 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.52 2 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.218.52 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.55 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.26 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.36 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.41 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.49 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.67 9 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.136.219.77 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.86 17 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.93 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.53 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.16 21 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.35 2 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.139.165.65 14 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.83 1 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.139.165.93 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 114.111.98.102 1 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 114.111.98.104 1 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 131.215.239.19 1 reject forwarded mailing_list support.example.com none caltech.edu neutral 209.85.161.198 10 reject forwarded mailing_list support.example.com none 219group.com neutral 209.85.161.199 8 reject forwarded mailing_list support.example.com none techwyse.com neutral 209.85.213.175 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.179 3 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.198 2 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.214.172 52 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.216.199 6 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.220.198 2 reject forwarded mailing_list support.example.com none convertsimply.com neutral 212.35.116.241 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr neutral returns.groups.yahoo.com neutral 216.32.181.186 1 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 66.220.144.139 3 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.143 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 66.220.144.151 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.152 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.153 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.154 6 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.155 1 reject forwarded mailing_list support.example.com none groupon.cl softfail 66.220.144.155 2 reject forwarded mailing_list support.example.com none publik.com.tr softfail 66.220.144.155 1 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 66.220.144.159 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 66.220.155.149 7 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.136 15 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.137 1 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 69.171.232.140 21 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.141 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 69.171.232.145 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.150 4 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.151 12 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.154 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.154 19 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.158 2 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 74.125.149.147 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.242 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.135 5 reject forwarded mailing_list support.example.com none ecglobal.com temperror 98.136.219.112 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.119 27 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.155 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.158 19 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.179 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.179 4 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.190 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.192 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.203 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr fail returns.groups.yahoo.com neutral 98.136.219.218 5 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.247 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.247 15 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.168 7 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.182 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.214.200 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.138.214.220 8 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.214.228 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.232 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.234 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.241 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.100 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.101 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.107 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.116 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.127 3 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar fail returns.groups.yahoo.com neutral 98.138.215.176 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.185 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.185 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.214 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.101 4 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.103 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.107 8 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.111 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.103 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.105 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.139.165.141 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.139.165.153 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.153 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.165.166 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.186 4 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 64.18.1.33 5 none trusted_forwarder mailing_list support.example.com ajaxunion.com pass support.example.com pass ajaxunion.com pass support.example.com pass 209.85.160.69 4 none trusted_forwarder mailing_list support.example.com bowlingball.com pass support.example.com pass bowlingball.com pass support.example.com pass 209.85.210.70 8 none trusted_forwarder mailing_list support.example.com antevenio.com pass support.example.com pass antevenio.com pass support.example.com pass 209.85.210.72 2 none trusted_forwarder mailing_list support.example.com doximity.com pass support.example.com pass doximity.com softfail support.example.com pass 209.85.210.72 1 none trusted_forwarder mailing_list support.example.com socialites.co.nz pass support.example.com pass socialites.co.nz neutral support.example.com pass 209.85.212.72 3 none trusted_forwarder mailing_list support.example.com trilogyinteractive.com pass support.example.com pass trilogyinteractive.com pass support.example.com pass 209.85.213.70 1 none trusted_forwarder mailing_list support.example.com disko.fr pass support.example.com pass disko.fr pass support.example.com pass 74.125.245.75 2 none trusted_forwarder mailing_list support.example.com jade-group.jp pass support.example.com pass jade-group.jp pass support.example.com pass 209.85.214.198 4 none trusted_forwarder mailing_list support.example.com disko.fr pass support.example.com pass disko.fr pass support.example.com pass 209.85.214.199 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.161.198 1 none forwarded trusted_forwarder mailing_list example.com googlegroups.com pass example.com pass needish.com pass example.com pass 209.85.216.198 1 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 209.85.216.199 24 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 66.220.144.157 1 none forwarded trusted_forwarder mailing_list support.example.com rathbonedigital.com pass support.example.com pass rathbonedigital.com softfail support.example.com pass 64.18.1.61 1 none support.example.com support.example.com pass support.example.com fail 24.149.0.25 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.111 3 none support.example.com support.example.com pass support.example.com fail 64.18.1.41 1 reject example.com none example.com fail 64.18.1.45 1 reject example.com none example.com fail 64.18.1.74 1 reject example.com none example.com fail 72.5.54.21 3 reject example.com none example.com fail 213.4.138.11 2 none example.com example.com pass telefonica.net pass 174.121.8.2 1 reject example.com none example.com fail 46.4.103.77 1 reject hotmail.com.example.com none st-takla.org neutral 64.18.1.117 1 reject example.com none example.com fail 64.18.1.123 2 reject example.com none example.com fail 67.14.198.3 8 reject example.com none example.com fail 69.89.27.27 1 reject example.com none host85.hostmonster.com neutral 70.84.8.130 2 reject example.com none example.com fail 74.208.5.90 1 reject example.com none example.com fail 77.88.61.49 1 reject groups.example.com none forward10.mail.yandex.net neutral 193.19.177.92 1 none support.example.com support.example.com pass support.example.com fail 208.97.132.81 1 none support.example.com support.example.com pass support.example.com fail 64.130.108.20 1 none example.com example.com pass troycable.net pass 66.220.157.67 15 none example.com example.com fail example.com pass 66.220.157.69 4 none example.com example.com fail example.com pass 66.220.157.74 14 none example.com example.com fail example.com pass 66.220.157.75 9 none example.com example.com fail example.com pass 66.220.157.79 23 none example.com example.com fail example.com pass 66.220.157.83 2 none example.com example.com fail example.com pass 66.220.157.92 287 none example.com example.com pass example.com pass 69.171.244.48 21 none example.com spc.example.com pass example.com pass 69.171.244.50 1 none example.com spc.example.com pass example.com pass 69.171.244.64 143 none example.com example.com fail example.com pass 69.171.244.65 86 none example.com example.com fail example.com pass 69.171.244.72 5 none example.com example.com pass example.com pass 69.171.244.73 1 none example.com example.com fail example.com pass 69.171.244.75 1 none example.com example.com pass example.com pass 152.10.1.180 1 reject example.com example.com fail example.com fail 178.32.51.22 1 reject example.com none example.com fail 200.63.97.50 1 reject example.com none server50.inetweb.cl neutral 202.80.33.46 1 reject example.com none example.com fail 209.143.0.75 1 reject example.com none example.com fail 212.7.200.30 1 reject example.com none mainframe.secretwap.com neutral 216.70.64.64 1 reject example.com none example.com fail 66.172.200.7 6 reject example.com none example.com fail 69.167.190.8 3 reject example.com none example.com fail 69.65.123.40 16 reject example.com none example.com fail 72.10.54.111 1 reject example.com none example.com fail 79.44.249.97 1 reject 1.example.com none 1.example.com neutral 8.29.132.177 1 reject example.com none hyb1 neutral 81.91.196.18 15 reject example.com none example.com fail 85.112.85.67 1 reject example.com none example.com fail 66.220.144.137 1182 none support.example.com support.example.com pass support.example.com pass 66.220.144.139 1164 none support.example.com support.example.com pass support.example.com pass 66.220.144.140 35 none example.com example.com neutral example.com pass 66.220.144.145 54 none example.com example.com neutral example.com pass 66.220.144.158 46 none example.com example.com neutral example.com pass 66.220.155.145 455 none support.example.com support.example.com pass support.example.com pass 66.220.155.149 6 none example.com example.com neutral example.com pass 66.220.155.150 412 none support.example.com support.example.com pass support.example.com pass 66.220.155.156 473 none support.example.com support.example.com pass support.example.com pass 66.220.155.158 448 none support.example.com support.example.com pass support.example.com pass 66.220.155.178 4 none example.com none example.com pass 69.171.232.139 55 none example.com example.com neutral example.com pass 69.171.232.158 55 none example.com example.com neutral example.com pass 130.111.32.94 1 reject reply.example.com examplemail.com neutral beryl.its.maine.edu pass 134.84.119.22 1 reject example.com none example.com fail 167.206.5.110 1 reject example.com none example.com fail 174.122.37.66 1 reject example.com none zyzzyva.site5.com neutral 178.213.7.138 30 reject example.com none example.com fail 178.213.7.138 1 reject example.com none sunline.com.ua neutral 195.186.80.26 1 reject example.com none example.com fail 195.7.101.182 74 reject example.com none example.com fail 200.147.34.80 1 reject example.com none 200-98-201-82.clouduol.com.br neutral 207.69.195.97 3 reject example.com none example.com fail 208.113.175.8 25 reject example.com none example.com fail 208.43.78.227 1 reject example.com none server1.idebagus.com neutral 210.157.5.231 2 reject example.com none gmoserver.jp neutral 211.49.170.14 3 reject example.com none example.com fail 212.101.16.68 6 reject example.com none example.com fail 216.172.104.3 1 reject example.com none example.com fail 216.191.95.98 2 reject reply.example.com none reply.example.com neutral 217.220.34.12 5 reject example.com none example.com fail 50.22.159.131 1 reject example.com none coches-usados.coches-usados.net neutral 60.250.159.61 3013 reject example.com none example.com fail 62.75.137.159 4 reject example.com none example.com fail 63.76.209.216 1 reject example.com none example.com fail 65.254.253.55 1 reject mx.example.com none mailout06.yourhostingaccount.com neutral 66.220.157.26 1640 reject mx.example.com none smtpin.mx.example.com neutral 67.139.23.210 1 reject example.com none example.com fail 69.171.244.41 1083 reject mx.example.com none smtpin.mx.example.com neutral 83.145.109.43 2 reject example.com none example.com fail 83.170.124.67 1 reject example.com none example.com fail 83.174.133.11 2 reject example.com none example.com fail 85.205.93.121 10 reject example.com none example.com fail 129.219.117.248 2 none example.com example.com pass example.com fail 188.138.124.112 1 none support.example.com support.example.com pass traktori.hr neutral 212.216.176.109 2 none support.example.com support.example.com pass support.example.com fail 108.160.148.20 1 reject example.com example.com fail example.com fail 129.170.16.123 1 reject example.com none example.com fail 129.186.140.47 1 reject example.com none example.com fail 134.84.119.206 1 reject example.com none example.com fail 161.58.197.242 2 reject example.com none example.com fail 161.58.198.168 11 reject example.com none example.com fail 169.232.47.175 2 reject example.com none example.com fail 170.140.50.231 1 reject reply.example.com none ws-mr1.cc.emory.edu neutral 170.140.50.231 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 182.50.132.194 1 reject example.com none sg2nlhg019.shr.prod.sin2.secureserver.net neutral 184.172.176.33 1 reject example.com none example.com fail 184.173.73.170 3 reject example.com none berna.asmallorange.com neutral 198.65.147.233 6 reject example.com none example.com fail 204.202.242.19 2 reject example.com none example.com fail 207.97.245.121 2 reject example.com none example.com fail 207.97.245.152 1 reject example.com none example.com fail 207.97.245.155 1 reject example.com none example.com fail 207.97.245.182 1 reject example.com none example.com fail 207.97.245.209 1 reject example.com none example.com fail 209.193.73.200 1 reject example.com none example.com fail 213.132.101.43 19 reject example.com none example.com fail 216.222.203.60 1 reject example.com none example.com fail 216.55.169.229 21 reject example.com none example.com fail 217.109.80.253 1 reject support.example.com support.example.com neutral support.example.com fail 221.128.105.77 3 reject example.com none bantumweb.com pass 66.100.167.192 21 reject example.com none example.com fail 66.133.183.226 1 reject example.com none example.com fail 66.220.144.148 487 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.149 483 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.159 478 reject m.example.com m.example.com neutral m.example.com neutral 66.220.145.245 6 reject example.com none example.com fail 68.230.241.212 1 reject example.com none example.com fail 69.171.232.135 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 69.171.232.141 502 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.159 1 reject tps.example.com tps.example.com neutral tps.example.com neutral 69.171.240.249 7 reject example.com none example.com fail 72.167.234.236 1686 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 72.167.234.239 60 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 74.114.173.240 8 reject groups.example.com none groups.example.com neutral 74.125.149.126 1 reject mx.example.com none psmtp.com neutral 74.220.202.212 1 reject example.com none box693.bluehost.com neutral 80.127.174.106 2 reject groups.example.com none groups.example.com neutral 83.222.125.162 3 reject example.com none eagle.newkaliningrad.ru neutral 84.201.187.146 1 reject groups.example.com none forward1h.mail.yandex.net neutral 91.191.144.143 1 reject example.com none srv523.sd-france.net neutral 95.108.253.144 1 reject reply.example.com none forward19.mail.yandex.net neutral 122.129.120.181 15 reject example.com none example.com fail 129.219.117.248 1 reject mx.example.com none bcnet6.asu.edu neutral 174.120.212.131 1 reject example.com none example.com fail 174.120.254.130 1 reject example.com none example.com fail 205.167.174.203 12 reject reply.example.com examplemail.com neutral reply.example.com neutral 205.213.113.117 5 reject groups.example.com none groups.example.com neutral 208.118.255.108 4 reject example.com none example.com fail 209.104.252.244 83 reject example.com none example.com fail 211.181.136.108 1071 reject example.com none hosting3.isun.biz neutral 46.37.7.15 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.0.24 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.4.117.3 3 none forwarded support.example.com support.example.com pass support.example.com fail 74.82.85.4 1 none forwarded support.example.com support.example.com pass srs.bis6.us.blackberry.com pass 194.9.94.78 4 none forwarded support.example.com support.example.com pass support.example.com fail 209.68.4.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 37.17.224.8 2 none forwarded support.example.com support.example.com pass support.example.com fail 46.17.40.94 1 none forwarded support.example.com support.example.com pass support.example.com fail 61.66.28.30 2 none forwarded support.example.com support.example.com pass support.example.com fail 64.37.55.11 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.54.61.76 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.54.61.85 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.54.61.86 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.23 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.12 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.17 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.29 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.90.39 2 none forwarded example.com example.com pass hotmail.com pass 65.55.90.41 1 none forwarded example.com example.com pass live.com.mx pass 66.6.63.231 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.186.6 1 none forwarded support.example.com support.example.com pass causingthestir.com pass 66.96.188.8 1 none forwarded support.example.com support.example.com pass imbnigeria.com pass 66.97.46.62 1 none forwarded support.example.com support.example.com pass support.example.com fail 68.68.198.7 1 none forwarded support.example.com support.example.com pass evergladesareatours.com neutral 69.65.24.80 1 none forwarded example.com example.com pass example.com fail 72.44.95.22 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.208.5.90 1 none forwarded support.example.com support.example.com pass notnow.com neutral 79.98.31.85 2 none forwarded example.com example.com pass example.com fail 80.67.18.52 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.99 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.50 2 none forwarded support.example.com support.example.com pass support.example.com fail 81.21.76.58 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.111.3.84 1 none forwarded support.example.com support.example.com pass inbox.lv pass 89.111.4.81 1 none forwarded support.example.com support.example.com pass inbox.lt pass 96.31.85.76 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.0.19 1 reject forwarded support.example.com support.example.com neutral exprod5ob110.obsmtp.com neutral 64.18.0.26 1 reject forwarded example.com example.com neutral announcemedia.com pass 69.89.70.6 1 reject forwarded mx.example.com none mx1.textplus.com pass 128.59.84.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 146.6.167.21 1 none forwarded example.com example.com pass example.com fail 173.239.17.6 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.239.3.93 1 none forwarded support.example.com support.example.com pass support.example.com fail 204.14.89.13 1 none forwarded support.example.com support.example.com pass pcfb.net neutral 207.45.181.5 3 none forwarded support.example.com support.example.com pass support.example.com fail 208.57.4.234 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.72.56.36 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.55.30.66 1 none forwarded example.com example.com pass example.com fail 212.227.17.9 15 none forwarded support.example.com support.example.com pass srs.kundenserver.de pass 217.70.32.68 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.116.67.70 3 none forwarded support.example.com support.example.com pass support.example.com fail 59.106.19.57 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.146.33.47 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.152.126.7 2 none forwarded support.example.com support.example.com pass support.example.com fail 64.14.68.144 2 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.116.21 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.23 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.28 1 none forwarded support.example.com support.example.com pass hotmail.fr pass 65.55.116.34 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.34 1 none forwarded support.example.com support.example.com pass hotmail.it pass 65.55.116.45 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.46 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.47 1 none forwarded support.example.com support.example.com pass hotmail.it pass 65.55.116.49 1 none forwarded support.example.com support.example.com pass hotmail.com pass 66.7.212.179 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.184.11 1 none forwarded support.example.com support.example.com pass bream.com pass 69.65.119.61 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.10.34.239 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.249.30.65 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.41 1 none forwarded support.example.com support.example.com pass scirra.com pass 74.125.82.42 5 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.43 1 none forwarded support.example.com support.example.com pass duffysrehab.com neutral 74.125.82.47 1 none forwarded support.example.com support.example.com pass 101.es neutral 74.125.82.47 4 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.50 5 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.53 1 none forwarded support.example.com support.example.com pass businessleads.com neutral 74.125.83.42 3 none forwarded support.example.com support.example.com pass dealster.com softfail 74.125.83.45 51 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.83.46 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.83.48 1 none forwarded support.example.com support.example.com pass pontconsulting.ro neutral 74.125.83.49 2 none forwarded support.example.com support.example.com pass flink12.com neutral 74.55.93.162 2 none forwarded support.example.com support.example.com pass support.example.com fail 75.98.171.85 7 none forwarded support.example.com support.example.com pass support.example.com fail 76.74.128.80 1 none forwarded example.com example.com pass example.com fail 81.88.50.242 2 none forwarded support.example.com support.example.com pass support.example.com fail 81.88.50.245 1 none forwarded support.example.com support.example.com pass support.example.com fail 83.243.20.87 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.238.4.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.25.117.55 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.92.85.119 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.74.135.36 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.139.91.84 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.89 1 none forwarded support.example.com support.example.com pass support.example.com fail 130.82.41.2 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 139.82.74.4 1 reject forwarded example.com none example.com fail 155.48.8.12 2 reject forwarded example.com none example.com fail 195.4.92.90 2 reject forwarded example.com none example.com fail 204.9.77.82 69 reject forwarded example.com none example.com fail 65.49.78.35 1 reject forwarded mx.example.com none litemail55.bigfoot.com neutral 65.55.34.24 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.88.15 1 reject forwarded example.com example.com neutral louisville.edu neutral 66.220.9.56 1 reject forwarded example.com none example.com fail 72.3.245.68 1 reject forwarded example.com none example.com fail 72.35.23.37 1 reject forwarded example.com none example.com fail 76.9.20.182 1 reject forwarded example.com none example.com fail 76.96.30.56 2 reject forwarded example.com none example.com fail 76.96.62.16 1 reject forwarded example.com none example.com fail 76.96.62.16 2 reject forwarded proxymail.example.com shopkick.com pass shopkick.com softfail 103.6.204.202 1 none forwarded support.example.com support.example.com pass support.example.com fail 114.111.98.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 118.67.248.11 1 none forwarded example.com example.com pass example.com fail 128.230.18.71 3 none forwarded support.example.com support.example.com pass support.example.com fail 140.142.33.32 5 none forwarded support.example.com support.example.com pass support.example.com fail 152.3.189.227 63 none forwarded support.example.com support.example.com pass support.example.com fail 166.70.13.232 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.32.123.17 2 none forwarded support.example.com support.example.com pass support.example.com fail 182.50.144.35 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 189.38.85.158 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.17.41.134 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.93.174.46 1 none forwarded support.example.com support.example.com pass drawingroom.nl pass 201.76.49.220 1 none forwarded example.com example.com pass example.com fail 202.212.125.8 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.83.241.23 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.58.129.37 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.58.151.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.109.80.58 3 none forwarded support.example.com support.example.com pass support.example.com fail 208.96.234.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.216.8.213 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.42 4 none forwarded support.example.com support.example.com pass dingle.fi neutral 209.85.160.43 1 none forwarded support.example.com support.example.com pass sofacil.com pass 209.85.160.45 1 none forwarded support.example.com support.example.com pass crossfitla.com neutral 209.85.160.45 1 none forwarded support.example.com support.example.com pass thecollective.edu fail 209.85.160.50 1 none forwarded support.example.com support.example.com pass g.hmc.edu pass 209.85.160.50 1 none forwarded support.example.com support.example.com pass mediazo.com softfail 209.85.160.54 1 none forwarded support.example.com support.example.com pass mikegowen.com neutral 209.85.210.41 1 none forwarded example.com example.com pass noviawedding.com pass 209.85.210.41 3 none forwarded support.example.com support.example.com pass breakfield.co.jp neutral 209.85.210.43 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.48 5 none forwarded support.example.com support.example.com pass trade.dk neutral 209.85.210.48 1 none forwarded support.example.com support.example.com pass flyworks.co.kr neutral 209.85.210.51 1 none forwarded support.example.com support.example.com pass cosmicleaks.net pass 209.85.210.53 1 none forwarded support.example.com support.example.com pass sau.ac.th neutral 209.85.210.54 1 none forwarded support.example.com support.example.com pass hermanus.cc neutral 209.85.212.41 14 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.212.41 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.47 2 none forwarded support.example.com support.example.com pass 5en1.com pass 209.85.212.48 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.51 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.52 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.212.53 3 none forwarded support.example.com support.example.com pass adverb.in neutral 209.85.212.54 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.54 1 none forwarded support.example.com support.example.com pass pntmail.com neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass vittoriaconseil.com neutral 209.85.213.41 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.44 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.44 5 none forwarded support.example.com support.example.com pass mindvalleyhispano.com pass 209.85.213.45 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.46 1 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.213.46 1 none forwarded support.example.com support.example.com pass todo-alfombras.com pass 209.85.213.47 1 none forwarded support.example.com support.example.com pass openeyemarketing.co.uk neutral 209.85.213.48 1 none forwarded support.example.com support.example.com pass zando.co.za pass 209.85.213.48 1 none forwarded support.example.com support.example.com pass mmpk.info neutral 209.85.213.48 2 none forwarded support.example.com support.example.com pass mambanation.com neutral 209.85.213.49 11 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.49 2 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.50 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.52 1 none forwarded support.example.com support.example.com pass smartdigital.com neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass glevo.com neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass martinneely.com neutral 209.85.214.45 3 none forwarded support.example.com support.example.com pass global.t-bird.edu pass 209.85.214.46 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.47 1 none forwarded support.example.com support.example.com pass mh.com.eg pass 209.85.214.48 1 none forwarded support.example.com support.example.com pass asu.edu neutral 209.85.214.49 1 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.214.52 1 none forwarded example.com example.com pass crimson.ua.edu neutral 209.85.214.52 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.53 1 none forwarded support.example.com support.example.com pass felde.me neutral 209.85.215.41 1 none forwarded support.example.com support.example.com pass teefury.com pass 209.85.215.46 1 none forwarded example.com example.com pass ibest.com.br pass 209.85.215.47 15 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.48 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.49 1 none forwarded example.com example.com pass sky.com pass 209.85.215.50 1 none forwarded support.example.com support.example.com pass allskateboards.cl neutral 209.85.215.51 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.53 1 none forwarded support.example.com support.example.com pass smove.sg neutral 209.85.216.42 1 none forwarded support.example.com support.example.com pass pontconsulting.ro neutral 209.85.216.43 1 none forwarded example.com example.com pass savvygiraffe.com neutral 209.85.216.43 1 none forwarded support.example.com support.example.com pass theivyapartments.com neutral 209.85.216.44 3 none forwarded support.example.com support.example.com pass mindvalley.com pass 209.85.216.45 1 none forwarded support.example.com support.example.com pass nyip.com pass 209.85.216.47 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 209.85.216.48 1 none forwarded support.example.com support.example.com pass anything.lk neutral 209.85.216.52 2 none forwarded support.example.com support.example.com pass adotomi.com neutral 210.157.5.237 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.168.35.62 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.52.84.110 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.41.78.210 2 none forwarded support.example.com support.example.com pass support.example.com fail 217.117.216.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.26.112.25 4 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.192.50 2 none forwarded support.example.com support.example.com pass support.example.com fail 50.61.244.236 1 none forwarded support.example.com support.example.com pass mitpachat.com neutral 50.97.104.120 1 none forwarded example.com example.com pass example.com fail 62.149.157.32 1 none forwarded example.com example.com pass example.com fail 62.179.121.40 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.182.60.136 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.238.147.79 3 none forwarded support.example.com support.example.com pass srs.acm.org pass 66.11.225.176 1 none forwarded example.com example.com pass duchenneconnect.org neutral 66.175.56.163 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.220.157.81 2 none forwarded example.com example.com pass example.com pass 66.228.51.237 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.33.242 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.228.97.248 1 none forwarded example.com example.com pass bwsales.com neutral 69.171.244.65 3 none forwarded example.com example.com pass example.com pass 70.40.197.220 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.218.206 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.26 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 72.233.38.229 1 none forwarded example.com example.com pass example.com fail 72.52.194.229 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.117.222.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.245.82 1 none forwarded support.example.com support.example.com pass alumni.brown.edu pass 74.125.245.96 1 none forwarded support.example.com support.example.com pass pacificwhale.org neutral 74.125.82.172 8 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.173 1 none forwarded support.example.com support.example.com pass palmergroupmedia.com neutral 74.125.82.177 1 none forwarded example.com example.com pass maanen.no neutral 74.125.82.178 1 none forwarded support.example.com support.example.com pass madgringo.com pass 74.53.229.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.53.229.178 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.54.111.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.90 1 none forwarded support.example.com support.example.com pass support.example.com fail 79.170.40.211 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.160.76.195 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.74.145.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.22.247.223 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.158.181.28 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.17.154.150 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.199.169.83 2 none forwarded support.example.com support.example.com pass support.example.com fail 85.92.140.199 2 none forwarded support.example.com support.example.com pass support.example.com fail 87.119.205.41 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.98.170.179 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.17.205.203 1 none forwarded support.example.com support.example.com pass support.example.com fail 92.114.87.206 1 none forwarded support.example.com support.example.com pass support.example.com fail 93.184.34.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.126.40.170 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.74.135.189 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.139.52.198 1 none forwarded example.com example.com pass example.com fail 98.139.52.240 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.233 1 none forwarded support.example.com support.example.com pass support.example.com fail 108.59.5.167 1 reject forwarded example.com none example.com fail 12.229.92.11 1 reject forwarded example.com none pmz.com pass 129.128.5.19 13 reject forwarded example.com none example.com fail 134.117.2.27 1 reject forwarded example.com none example.com fail 148.202.3.50 1 reject forwarded example.com none example.com fail 149.5.32.119 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 159.16.1.107 1 reject forwarded example.com example.com neutral smtpcfe03.cfe.gob.mx neutral 17.148.16.90 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.93 1 reject forwarded support.example.com support.example.com fail support.example.com fail 17.148.16.97 1 reject forwarded example.com none example.com fail 184.22.117.2 1 reject forwarded example.com none example.com fail 198.30.126.4 2 reject forwarded support.example.com support.example.com neutral guide.wilmington.edu neutral 200.143.7.93 9 reject forwarded example.com none pbkids.com.br pass 204.14.64.15 3 reject forwarded example.com none example.com fail 208.72.57.15 1 reject forwarded example.com none example.com fail 216.70.64.42 2 reject forwarded example.com none example.com fail 38.64.132.82 6 reject forwarded support.example.com support.example.com neutral support.example.com fail 59.106.19.29 1 reject forwarded example.com none example.com fail 61.9.168.137 3 reject forwarded example.com none example.com fail 63.251.68.73 2 reject forwarded example.com none example.com fail 64.135.21.10 2 reject forwarded support.example.com support.example.com neutral newsmax.com softfail 64.20.55.234 1 reject forwarded example.com none example.com fail 64.26.60.139 3 reject forwarded example.com none example.com fail 64.29.147.24 1 reject forwarded example.com none example.com fail 65.39.128.42 1 reject forwarded example.com none example.com fail 65.55.116.35 1 reject forwarded m.example.com m.example.com neutral live.com pass 65.55.116.35 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 66.51.199.98 2 reject forwarded example.com none example.com fail 67.20.80.138 5 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.27.174.78 1 reject forwarded example.com none urhookup.com neutral 70.86.180.98 1 reject forwarded mx.example.com none city.websitewelcome.com pass 70.88.69.250 38 reject forwarded example.com none example.com fail 71.43.91.187 1 reject forwarded example.com none example.com fail 72.35.12.186 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 74.202.89.60 23 reject forwarded example.com none example.com fail 74.53.39.170 2 reject forwarded example.com none example.com fail 74.55.71.120 1 reject forwarded example.com none example.com fail 76.96.59.243 1 reject forwarded example.com none example.com fail 77.68.46.146 310 reject forwarded example.com none example.com fail 80.77.80.130 3 reject forwarded example.com none example.com fail 82.98.144.35 3 reject forwarded m.example.com m.example.com neutral m.example.com neutral 112.78.219.163 1 none forwarded support.example.com support.example.com pass bounces.heteml.jp pass 125.206.115.54 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.171.32.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 134.84.135.123 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.192.39 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.192.43 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.61 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 184.107.67.202 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.154.48.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.226.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.121.43.195 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.49.106 1 none forwarded example.com example.com pass example.com fail 188.165.49.106 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.40.134.195 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.138.215.54 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.211.72.198 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.228.245.56 1 none forwarded support.example.com support.example.com pass gmail.com neutral 195.47.247.150 1 none forwarded support.example.com support.example.com pass support.example.com fail 196.33.227.198 1 none forwarded support.example.com support.example.com pass support.example.com fail 198.212.10.108 3 none forwarded support.example.com support.example.com pass support.example.com fail 200.31.120.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.124.241.68 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.67.226.120 2 none forwarded support.example.com support.example.com pass support.example.com fail 203.170.85.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.189.105.15 1 none forwarded support.example.com support.example.com pass support.example.com fail 205.178.146.50 32 none forwarded support.example.com support.example.com pass support.example.com fail 206.188.22.115 2 none forwarded support.example.com support.example.com pass support.example.com fail 207.32.184.211 14 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.177 1 none forwarded support.example.com support.example.com pass homiemail-mx12.g.dreamhost.com neutral 209.85.160.179 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.179 1 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.160.181 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.160.182 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.169 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.170 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.161.177 1 none forwarded support.example.com support.example.com pass techwyse.com neutral 209.85.161.178 1 none forwarded support.example.com support.example.com pass mandatemedia.com neutral 209.85.212.170 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.171 1 none forwarded support.example.com support.example.com pass platesearch.me neutral 209.85.212.172 1 none forwarded support.example.com support.example.com pass tributes.to pass 209.85.212.174 1 none forwarded support.example.com support.example.com pass netmojo.in pass 209.85.212.174 1 none forwarded support.example.com support.example.com pass educaedu.com pass 209.85.212.176 1 none forwarded support.example.com support.example.com pass citycars.co.im neutral 209.85.212.179 1 none forwarded support.example.com support.example.com pass newpeoplesf.com neutral 209.85.212.181 1 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.212.182 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 209.85.212.182 1 none forwarded support.example.com support.example.com pass citycars.co.im neutral 209.85.212.182 1 none forwarded support.example.com support.example.com pass jonathancoulton.com pass 209.85.213.169 1 none forwarded support.example.com support.example.com pass palmergroupmedia.com neutral 209.85.213.170 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.170 2 none forwarded support.example.com support.example.com pass livecontent.pt neutral 209.85.213.171 2 none forwarded support.example.com support.example.com pass una-mi.com softfail 209.85.213.171 1 none forwarded support.example.com support.example.com pass sevensails.com.br neutral 209.85.213.172 1 none forwarded support.example.com support.example.com pass headliner.fm pass 209.85.213.177 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.178 1 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass colorguide.me neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.213.178 1 none forwarded support.example.com support.example.com pass apoprecords.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass spiritactivewear.com neutral 209.85.213.179 1 none forwarded support.example.com support.example.com pass sarmady.net neutral 209.85.213.180 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.180 1 none forwarded support.example.com support.example.com pass vandibt.hu pass 209.85.213.181 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.181 1 none forwarded support.example.com support.example.com pass thebuffalowoolco.com neutral 209.85.213.182 1 none forwarded support.example.com support.example.com pass ymchi.com neutral 209.85.213.182 1 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.214.170 1 none forwarded support.example.com support.example.com pass nurturestore.co.uk neutral 209.85.214.171 3 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass vmailapp.com neutral 209.85.214.173 1 none forwarded example.com example.com pass rollingstone-india.com neutral 209.85.214.174 9 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.174 1 none forwarded support.example.com support.example.com pass fragile.cz neutral 209.85.214.175 1 none forwarded support.example.com support.example.com pass zooee.co.jp neutral 209.85.214.175 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.176 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.177 1 none forwarded support.example.com support.example.com pass tedrec.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass khadiwala.com pass 209.85.214.178 1 none forwarded support.example.com support.example.com pass verbeiren.com neutral 209.85.214.179 2 none forwarded support.example.com support.example.com pass sandorszabolcs.com neutral 209.85.214.179 1 none forwarded support.example.com support.example.com pass webmasterindia.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass cableone.net pass 209.85.214.180 1 none forwarded support.example.com support.example.com pass sheffield.edu pass 209.85.214.180 2 none forwarded support.example.com support.example.com pass gozoop.com softfail 209.85.214.181 2 none forwarded support.example.com support.example.com pass captainu.com pass 209.85.214.181 1 none forwarded support.example.com support.example.com pass tessera.gr softfail 209.85.214.182 1 none forwarded support.example.com support.example.com pass aasa.fi neutral 209.85.214.182 2 none forwarded support.example.com support.example.com pass odigma.com neutral 209.85.215.174 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.179 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.169 1 none forwarded support.example.com support.example.com pass jamaad.com neutral 209.85.216.169 2 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.169 1 none forwarded support.example.com support.example.com pass husky.neu.edu neutral 209.85.216.169 1 none forwarded support.example.com support.example.com pass islamicstore.co.uk neutral 209.85.216.170 1 none forwarded support.example.com support.example.com pass 5en1.com pass 209.85.216.171 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.171 1 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.178 1 none forwarded support.example.com support.example.com pass indunanayakkara.com pass 209.85.217.170 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.173 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.173 1 none forwarded support.example.com support.example.com pass earnmailer.com neutral 209.85.217.174 4 none forwarded support.example.com support.example.com pass liquor.com pass 209.85.217.175 11 none forwarded support.example.com support.example.com pass runroom.com neutral 209.85.217.180 1 none forwarded support.example.com support.example.com pass allskateboards.cl neutral 209.85.217.181 1 none forwarded support.example.com support.example.com pass istanbul.com neutral 209.85.217.181 1 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.220.174 1 none forwarded support.example.com support.example.com pass stickergiant.com pass 209.85.220.174 2 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.220.175 1 none forwarded support.example.com support.example.com pass targetedsocial.com neutral 209.85.220.177 3 none forwarded support.example.com support.example.com pass gmail.com pass 212.145.159.72 17 none forwarded support.example.com support.example.com pass support.example.com fail 213.205.33.222 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.215.107.43 1 none forwarded support.example.com support.example.com pass etech.sk neutral 216.230.254.50 1 none forwarded support.example.com support.example.com pass alpha-mail.net pass 216.70.240.180 1 none forwarded support.example.com support.example.com pass risebar.com neutral 217.70.183.195 10 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.155.143 2 none forwarded support.example.com support.example.com pass support.example.com fail 220.111.47.151 1 none forwarded support.example.com support.example.com pass xmochiduki-2ek-40gmail-2ecom.xadvertise-2dnoreply-40support-2eexample-2ecom.dnadm.ocn.ad.jp pass 38.102.137.101 5 none forwarded support.example.com support.example.com pass newmoon.wunderground.com pass 50.116.106.120 9 none forwarded support.example.com support.example.com pass support.example.com fail 62.233.105.128 1 none forwarded support.example.com support.example.com pass googlemail.com neutral 65.254.253.102 1 none forwarded support.example.com support.example.com pass talpur.net neutral 65.254.253.146 1 none forwarded support.example.com support.example.com pass fbbuyer.com pass 66.152.162.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.220.144.136 8 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.143 8 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.146 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.147 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.149 7 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.150 4 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.138 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.146 2 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.155 6 none forwarded support.example.com support.example.com pass support.example.com pass 67.199.120.102 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.182.140.234 2 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.162 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.117.157.160 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.208.193.164 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.208.147 1 none forwarded example.com example.com pass example.com fail 74.220.221.144 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.222 1 none forwarded support.example.com support.example.com pass support.example.com fail 84.201.187.146 2 none forwarded support.example.com support.example.com pass yandex.ru pass 91.198.169.248 5 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.164 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.168 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.126 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.70 6 none mailing_list support.example.com none ubuntudeal.co.za pass 106.10.151.81 1 reject forwarded mx.example.com none nm24-vm2.bullet.mail.sg3.yahoo.com neutral 109.72.87.137 1 reject forwarded mx.example.com none smtp01.mail.pcextreme.nl neutral 111.68.199.66 1 reject forwarded example.com none example.com fail 118.103.89.12 1 reject forwarded m.example.com m.example.com neutral willcom.com pass 12.152.56.140 8 reject forwarded example.com none example.com fail 121.18.51.131 72 reject forwarded example.com none example.com fail 128.255.56.76 1 reject forwarded example.com none example.com fail 128.59.28.170 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 132.248.160.2 1 reject forwarded example.com none example.com fail 134.84.119.32 1 reject forwarded example.com none example.com fail 141.211.90.68 1 reject forwarded example.com none example.com fail 151.189.21.47 1 reject forwarded example.com none example.com fail 165.212.10.31 2 reject forwarded example.com none example.com fail 167.206.5.101 1 reject forwarded example.com none example.com fail 176.62.71.194 52 reject forwarded example.com none example.com fail 178.219.44.12 43 reject forwarded example.com none example.com fail 180.186.24.17 1 reject forwarded example.com none example.com fail 189.38.92.190 1 reject forwarded example.com none example.com fail 189.44.204.82 1 reject forwarded example.com none ns.wizbill.com neutral 195.47.247.76 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 195.85.215.57 1 reject forwarded example.com none example.com fail 196.1.138.130 1 reject forwarded mx.example.com none mailhost.infochan.com neutral 198.173.64.44 4 reject forwarded example.com none example.com fail 202.181.97.87 1 reject forwarded example.com none example.com fail 202.212.8.162 1 reject forwarded example.com none example.com fail 206.46.172.81 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 208.38.187.16 1 reject forwarded example.com none example.com fail 208.97.132.83 3 reject forwarded example.com none example.com fail 209.31.69.175 1 reject forwarded example.com none example.com fail 209.85.212.49 1 reject forwarded example.com none abbottblackstone.com pass 209.85.213.48 2 reject forwarded example.com example.com neutral createandspread.com pass 209.85.214.51 5 reject forwarded example.com example.com neutral thebroth.com neutral 209.85.216.46 1 reject forwarded example.com example.com fail australia.edu neutral 210.17.251.31 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 211.125.95.97 1 reject forwarded example.com none post.freeml.com pass 211.49.170.14 10 reject forwarded example.com none example.com fail 212.52.84.111 1 reject forwarded example.com none example.com fail 212.97.132.56 1 reject forwarded example.com none ws48.surf-town.net neutral 216.146.32.38 1 reject forwarded example.com none example.com fail 216.32.180.13 1 reject forwarded example.com example.com neutral louisville.edu neutral 216.33.127.87 1 reject forwarded example.com none hosting3.isun.biz neutral 216.70.69.201 1 reject forwarded example.com none example.com fail 216.92.131.44 1 reject forwarded mx.example.com none qs3202.pair.com neutral 24.226.191.39 1 reject forwarded example.com none example.com fail 50.23.246.234 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 63.134.207.28 2 reject forwarded example.com example.com neutral example.com fail 66.109.42.114 1 reject forwarded example.com none example.com fail 66.132.178.62 1 reject forwarded example.com none example.com fail 66.220.157.27 3 reject forwarded mx.example.com none unknown neutral 67.223.227.44 1 reject forwarded example.com none example.com fail 67.69.133.138 1 reject forwarded example.com none example.com fail 69.36.188.172 17 reject forwarded example.com none example.com fail 69.50.209.108 1 reject forwarded example.com none example.com fail 70.169.154.68 1 reject forwarded example.com none example.com fail 70.32.114.189 1 reject forwarded example.com none example.com fail 70.85.144.194 1 reject forwarded example.com none example.com fail 72.21.242.105 28 reject forwarded example.com none example.com fail 74.117.179.59 1 reject forwarded example.com none example.com fail 74.220.220.23 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.223.59 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 75.126.130.69 1 reject forwarded example.com none example.com fail 80.248.224.45 65 reject forwarded example.com none example.com fail 82.165.192.18 1 reject forwarded mx.example.com none servidor21.linux.egahost.com neutral 82.80.210.150 1 reject forwarded example.com none example.com fail 85.197.79.119 1 reject forwarded example.com none example.com fail 85.233.160.20 1 reject forwarded example.com none hosts.co.uk pass 88.208.208.88 3 reject forwarded support.example.com support.example.com fail support.example.com fail 95.142.173.94 1 reject forwarded example.com yaxs.net pass example.com fail 97.74.135.171 1 reject forwarded mx.example.com none p3plsmtp09-06.prod.phx3.secureserver.net neutral 98.129.184.12 2 reject forwarded example.com none example.com fail 98.139.91.230 1 reject forwarded mx.example.com none nm26-vm0.bullet.mail.sp2.yahoo.com neutral 138.236.127.104 2 none forwarded support.example.com support.example.com pass gustavus.edu pass 169.229.218.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.192.187 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.189 8 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.247.253.217 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.200.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.202.194 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.254.194 3 none forwarded support.example.com support.example.com pass support.example.com fail 184.172.209.224 1 none forwarded support.example.com support.example.com pass support.example.com fail 193.104.187.119 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.151.228.236 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.151.132.158 3 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.129.250 1 none forwarded support.example.com support.example.com pass mailforward.dnsv.jp neutral 210.172.129.252 1 none forwarded support.example.com support.example.com pass mailforward.dnsv.jp neutral 210.172.144.125 5 none forwarded support.example.com support.example.com pass mail011.phy.lolipop.jp neutral 210.172.144.165 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.224.177.218 1 none forwarded support.example.com support.example.com pass error.heteml.jp neutral 212.227.126.186 5 none forwarded support.example.com support.example.com pass srs.kundenserver.de pass 212.227.126.187 1 none forwarded example.com example.com pass srs.kundenserver.de pass 216.154.217.191 3 none forwarded support.example.com support.example.com pass support.example.com fail 91.206.8.66 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 2 none mailing_list support.example.com none eventbrite.com pass 209.85.160.71 1 none mailing_list support.example.com none rentjungle.com pass 209.85.160.72 3 none mailing_list support.example.com none hungrymachine.com pass 209.85.160.72 3 none mailing_list support.example.com none weddingtonway.com pass 209.85.210.69 1 none mailing_list support.example.com none 7ent.com pass 209.85.210.69 2 none mailing_list support.example.com none schoolofrock.com pass 209.85.210.70 4 none mailing_list support.example.com none zimmerman.com pass 209.85.210.71 5 none mailing_list support.example.com none httpool.com pass 209.85.210.71 6 none mailing_list support.example.com none kellett.nt.ca pass 209.85.212.72 1 none mailing_list support.example.com none care2team.com pass 209.85.212.72 2 none mailing_list support.example.com none dafiti.com.br pass 209.85.212.72 3 none mailing_list support.example.com none weddingtonway.com pass 209.85.213.70 2 none mailing_list support.example.com none plumbee.co.uk pass 209.85.216.70 7 none mailing_list support.example.com none gosocial.dk pass 209.85.216.70 4 none mailing_list support.example.com none plumbee.co.uk pass 74.125.82.198 20 none mailing_list support.example.com none graphscience.com pass 128.135.165.72 3 reject forwarded example.com none example.com fail 144.191.128.16 1 reject forwarded support.example.com support.example.com neutral emerson.com pass 162.39.147.125 1 reject forwarded example.com none example.com fail 163.119.89.126 8 reject forwarded support.example.com london.edu pass support.example.com fail 173.201.193.41 1 reject forwarded example.com example.com neutral bounce.secureserver.net pass 174.132.159.98 1 reject forwarded example.com none example.com fail 184.107.41.245 2 reject forwarded mx.example.com none mail.telugupeople.com neutral 188.121.43.195 1 reject forwarded mx.example.com none n1nlvphout01.shr.prod.ams1.secureserver.net neutral 192.150.186.11 1 reject forwarded example.com none example.com fail 193.33.135.191 1 reject forwarded example.com none example.com fail 194.168.163.50 1 reject forwarded example.com none example.com fail 198.212.10.227 5 reject forwarded example.com none example.com fail 199.224.80.229 1 reject forwarded example.com none example.com fail 200.147.34.225 1 reject forwarded example.com none example.com fail 200.77.250.252 3 reject forwarded example.com none example.com fail 202.224.39.198 10 reject forwarded example.com none example.com fail 204.11.245.169 1 reject forwarded example.com none example.com fail 204.45.156.154 1 reject forwarded mx.example.com none earth1.shemaleearth.com neutral 205.196.18.240 1 reject forwarded example.com none example.com fail 207.155.252.33 1 reject forwarded example.com none example.com fail 207.210.72.219 2 reject forwarded example.com none example.com fail 207.69.195.102 1 reject forwarded example.com none example.com fail 208.82.238.106 2 reject forwarded example.com example.com neutral craigslist.org pass 209.17.165.237 1 reject forwarded example.com none example.com fail 209.198.112.61 1 reject forwarded example.com none example.com fail 209.217.78.181 1 reject forwarded support.example.com none davidberman.com neutral 209.62.115.138 1 reject forwarded example.com none example.com fail 209.85.160.173 1 reject forwarded example.com example.com neutral kudosmedia.net neutral 209.85.161.169 1 reject forwarded example.com example.com neutral peakgames.net pass 209.85.212.172 1 reject forwarded support.example.com support.example.com neutral tcd.ie neutral 209.85.212.175 3 reject forwarded example.com example.com neutral howzat.com pass 209.85.213.177 4 reject forwarded example.com example.com neutral dachisgroup.com pass 209.85.213.180 1 reject forwarded example.com example.com neutral web2mil.com.uy pass 209.85.213.181 1 reject forwarded example.com example.com neutral createandspread.com pass 209.85.214.173 13 reject forwarded example.com example.com neutral kudosmedia.net neutral 209.85.214.179 1 reject forwarded m.example.com m.example.com neutral auone.jp pass 209.85.216.169 1 reject forwarded example.com example.com neutral talltreegames.com temperror 210.59.228.107 1 reject forwarded example.com none lweb7.url.com.tw neutral 213.165.64.100 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 213.171.216.25 1 reject forwarded support.example.com support.example.com neutral applerepairsinlondon.co.uk neutral 213.188.190.55 1 reject forwarded example.com none example.com fail 213.27.229.253 1 reject forwarded example.com none example.com fail 216.252.192.39 1 reject forwarded example.com none example.com fail 217.64.195.230 1 reject forwarded mx.example.com none m-05.th.seeweb.it neutral 217.70.183.195 2 reject forwarded mx.example.com none relay3-d.mail.gandi.net neutral 217.70.183.196 2 reject forwarded example.com example.com neutral example.com fail 218.102.53.104 1 reject forwarded example.com none example.com fail 27.112.111.177 1 reject forwarded support.example.com support.example.com fail hickox.com pass 46.255.225.250 1 reject forwarded support.example.com support.example.com neutral centrum.cz pass 62.128.193.153 1 reject forwarded example.com none example.com fail 62.128.193.154 2 reject forwarded example.com none example.com fail 63.133.161.201 1 reject forwarded example.com none capitalsenior.com pass 64.150.187.132 1 reject forwarded example.com none example.com fail 64.150.191.151 73 reject forwarded example.com none example.com fail 66.133.183.227 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 66.220.144.140 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.210.105.150 1 reject forwarded example.com none example.com fail 69.164.220.212 1 reject forwarded example.com none example.com fail 74.202.142.112 17 reject forwarded example.com none example.com fail 74.208.167.217 1 reject forwarded example.com none example.com fail 74.220.199.226 1 reject forwarded example.com example.com neutral example.com fail 78.153.203.204 1 reject forwarded example.com none pemlinweb08.blacknight.com neutral 82.132.130.152 2 reject forwarded example.com none example.com fail 85.199.154.198 1 reject forwarded support.example.com support.example.com neutral chal-tec.com neutral 89.149.254.116 2 reject forwarded example.com none example.com fail 94.100.176.204 1 reject forwarded example.com example.com neutral example.com fail 95.172.88.26 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.161.200 2 none mailing_list support.example.com none glyde.com pass 209.85.161.200 2 none mailing_list support.example.com none hagakure.it pass 209.85.213.198 6 none mailing_list support.example.com none gosocial.dk pass 209.85.214.197 6 none mailing_list support.example.com none popimedia.com pass 209.85.214.197 2 none mailing_list support.example.com none schoolofrock.com pass 209.85.214.198 2 none mailing_list support.example.com none hootsuite.com pass 209.85.214.200 8 none mailing_list support.example.com none dafiti.com.br pass 209.85.216.197 3 none mailing_list support.example.com none idium.no pass 209.85.216.198 19 none mailing_list support.example.com none graphscience.com pass 121.111.227.146 1 reject forwarded reply.example.com examplemail.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.147 103 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.147 3 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.149 2 reject forwarded example.com example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.154 1 reject forwarded example.com example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.154 1 reject forwarded mx.example.com none auoneerrml1.ezweb.ne.jp pass 122.129.120.181 56 reject forwarded example.com none example.com fail 128.125.137.214 1 reject forwarded example.com example.com neutral example.com fail 158.109.168.138 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 186.233.145.212 1 reject forwarded example.com none sus79.suidc.com neutral 187.110.226.120 1 reject forwarded example.com none sus79.suidc.com neutral 194.150.112.201 1 reject forwarded support.example.com support.example.com fail epona.tv neutral 202.188.163.178 48 reject forwarded example.com none example.com fail 207.155.249.235 1 reject forwarded example.com none example.com fail 207.159.142.226 1 reject forwarded example.com none example.com fail 208.187.218.190 1 reject forwarded example.com none example.com fail 209.173.135.146 2 reject forwarded mx.example.com none centos.newdomain10.com neutral 209.216.189.146 1 reject forwarded example.com none example.com fail 209.237.134.232 1 reject forwarded example.com none example.com fail 210.172.144.221 1 reject forwarded reply.example.com examplemail.com neutral returns.yahoogroups.jp softfail 213.171.216.122 1 reject forwarded example.com example.com neutral example.com fail 217.199.218.191 2 reject forwarded mx.example.com none server.rq-linux.com neutral 209.85.160.69 3 reject mailing_list support.example.com none buildasign.com pass 209.85.160.69 1 reject mailing_list support.example.com none shopography.com neutral 209.85.160.69 2 reject mailing_list support.example.com none rhinolacrosse.com neutral 209.85.160.70 1 reject mailing_list support.example.com none baeck.at neutral 209.85.210.69 1 reject mailing_list support.example.com none mxp4.com softfail 209.85.210.69 3 reject mailing_list support.example.com none winedemon.com neutral 209.85.210.69 4 reject mailing_list support.example.com none sonusfactory.com neutral 209.85.210.70 3 reject mailing_list support.example.com none nosotroshq.com neutral 209.85.210.70 3 reject mailing_list support.example.com none beaffinitive.com neutral 209.85.210.71 2 reject mailing_list example.com none pixodegames.com neutral 209.85.210.71 5 reject mailing_list support.example.com none aainc.co.jp pass 209.85.210.72 1 reject mailing_list support.example.com none mcfiva.com neutral 209.85.210.72 7 reject mailing_list support.example.com none taykey.com neutral 209.85.210.72 3 reject mailing_list support.example.com none kejmukda.com neutral 209.85.212.69 3 reject mailing_list support.example.com none yunait.com neutral 209.85.212.69 7 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.212.70 3 reject mailing_list support.example.com none quirk.biz neutral 209.85.212.70 2 reject mailing_list support.example.com none snsplus.com neutral 209.85.212.70 1 reject mailing_list support.example.com none adtackmedia.com neutral 209.85.212.72 1 reject mailing_list support.example.com none vintedge.com neutral 209.85.213.69 2 reject mailing_list support.example.com none varlabs.com neutral 209.85.213.70 1 reject mailing_list example.com none 88hours.com neutral 209.85.216.69 3 reject mailing_list example.com none just3.com.br neutral 209.85.161.197 3 reject mailing_list support.example.com none yunait.com neutral 209.85.161.198 9 reject mailing_list support.example.com none aviesta.com neutral 209.85.214.197 5 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.214.197 7 reject mailing_list support.example.com none rathbonedigital.com softfail 209.85.214.198 10 reject mailing_list example.com none iminlikewithyou.com neutral 209.85.214.198 2 reject mailing_list support.example.com none snsplus.com neutral 209.85.214.199 2 reject mailing_list support.example.com none truemediaservices.com neutral 209.85.214.200 3 reject mailing_list example.com none antvoice.com neutral 209.85.216.197 9 reject mailing_list support.example.com none yunait.com neutral 216.248.100.67 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 74.125.149.211 4 reject mailing_list support.example.com none adviso.ca neutral 207.126.144.121 5 reject mailing_list support.example.com none moviepilot.com neutral 50.57.0.7 2 none forwarded mailing_list example.com none indeed.com pass 65.55.88.12 1 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 209.85.210.69 3 none forwarded mailing_list support.example.com none adglobal360.com pass 209.85.210.70 59 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.210.71 28 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.213.70 1 none forwarded mailing_list support.example.com none wearesocial.net pass 209.85.216.71 1 none forwarded mailing_list support.example.com none hungrymachine.com pass 74.125.149.19 3 none forwarded mailing_list support.example.com none rocketlawyer.com pass 208.85.94.59 3 reject forwarded mailing_list proxymail.example.com none ml.gaiaonline.com neutral 209.85.161.197 11 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.161.198 2 none forwarded mailing_list support.example.com none bigbrands.pl pass 209.85.212.199 1 none forwarded mailing_list support.example.com none sparkker.com pass 209.85.213.199 1 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.214.197 1 none forwarded mailing_list support.example.com none adglobal360.com pass 209.85.215.197 4 none forwarded mailing_list support.example.com none sparkker.com pass 114.111.98.18 1 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 208.80.72.110 2 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.70 1 reject forwarded mailing_list support.example.com none worldimpex.com neutral 209.85.210.46 1 reject forwarded mailing_list example.com freshplanet.com pass freshplanet.com pass 209.85.210.46 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.212.69 8 reject forwarded mailing_list support.example.com none playerize.com neutral 209.85.212.71 2 reject forwarded mailing_list support.example.com none bookbub.com neutral 209.85.212.71 25 reject forwarded mailing_list support.example.com none sokrati.com neutral 209.85.213.44 2 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.213.45 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.54 1 reject forwarded mailing_list support.example.com none socialpoint.es neutral 209.85.213.71 2 reject forwarded mailing_list support.example.com none bookbub.com neutral 209.85.215.70 8 reject forwarded mailing_list example.com none schoolfeed.com softfail 74.125.149.83 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.94 3 reject forwarded mailing_list support.example.com none blabbermouthsocial.com neutral 74.125.82.198 4 reject forwarded mailing_list example.com none schoolfeed.com softfail 98.136.218.51 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.55 1 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.218.57 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.10 2 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.12 1 reject forwarded mailing_list reply.example.com yahoogroups.com neutral returns.groups.yahoo.com neutral 98.136.219.15 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.38 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.65 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.78 5 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.80 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.88 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.96 2 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.139.164.96 15 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.97 21 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.98 15 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.13 4 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.35 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.43 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.mx pass returns.groups.yahoo.com neutral 98.139.165.45 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.85 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.86 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.96 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.161.170 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.161.198 15 reject forwarded mailing_list support.example.com none compasslabs.com neutral 209.85.161.200 4 reject forwarded mailing_list support.example.com none blabbings.com neutral 209.85.213.199 52 reject forwarded mailing_list support.example.com none sokrati.com neutral 209.85.214.172 1 reject forwarded mailing_list example.com none bunshinyakuhin.com neutral 209.85.214.200 2 reject forwarded mailing_list support.example.com none socialsonar.com neutral 209.85.215.200 14 reject forwarded mailing_list support.example.com none elogia.net softfail 209.85.216.200 2 reject forwarded mailing_list example.com none shaktienterprise.com neutral 209.85.217.197 1 reject forwarded mailing_list support.example.com none journeymetro.com softfail 216.32.181.182 2 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 66.220.144.137 1 reject forwarded mailing_list support.example.com none catchoftheday.com.au neutral 66.220.144.141 7 reject forwarded mailing_list support.example.com none irep.co.jp softfail 66.220.144.144 1 reject forwarded mailing_list support.example.com none infectiousmedia.com softfail 66.220.144.148 7 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.149 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.149 14 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.155.145 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.155.151 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.135 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.135 1 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.137 1 reject forwarded mailing_list example.com none tenkulike.com neutral 69.171.232.137 13 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.139 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.139 11 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.141 5 reject forwarded mailing_list support.example.com none httpool.com softfail 69.171.232.148 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 69.171.232.149 2 reject forwarded mailing_list support.example.com none kellett.nt.ca softfail 69.171.232.152 8 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.153 6 reject forwarded mailing_list support.example.com none 6waves.com softfail 69.171.232.157 13 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.159 3 reject forwarded mailing_list support.example.com none weddingtonway.com softfail 74.125.149.202 2 reject forwarded mailing_list support.example.com none sponsoredlinx.com neutral 98.136.219.103 33 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.114 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.127 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.138 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.142 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.143 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.145 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.145 17 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.171 18 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.207 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.210 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.236 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.236 15 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.249 8 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.214.165 10 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.167 16 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.168 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.191 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.191 16 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.199 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.207 10 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.217 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.221 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.214.232 5 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.237 14 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.105 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.138.215.131 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.131 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.142 18 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.185 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.203 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.219 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.232 24 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.246 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.106 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.115 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.103 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.186 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 209.85.160.69 7 none trusted_forwarder mailing_list support.example.com pure360.com pass support.example.com pass pure360.com pass support.example.com pass 209.85.160.70 1 none trusted_forwarder mailing_list support.example.com juancarlosegas.com pass support.example.com pass juancarlosegas.com neutral support.example.com pass 209.85.160.72 2 none trusted_forwarder mailing_list support.example.com 9flats.com pass support.example.com pass 9flats.com pass support.example.com pass 209.85.160.72 2 none trusted_forwarder mailing_list support.example.com bidorbuy.co.za pass support.example.com pass bidorbuy.co.za pass support.example.com pass 209.85.160.72 4 none trusted_forwarder mailing_list support.example.com webrepublic.ch pass support.example.com pass webrepublic.ch pass support.example.com pass 209.85.160.72 1 none trusted_forwarder mailing_list support.example.com mydestination.com pass support.example.com pass mydestination.com pass support.example.com pass 209.85.210.70 1 none trusted_forwarder mailing_list support.example.com canyon-tech.us pass support.example.com pass canyon-tech.us neutral support.example.com pass 209.85.213.72 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.214.200 2 none trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de pass support.example.com pass 209.85.210.70 3 none forwarded trusted_forwarder mailing_list support.example.com seedingideas.com pass support.example.com pass seedingideas.com neutral support.example.com pass 209.85.161.198 2 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 69.171.232.140 2 none forwarded trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 64.18.0.99 1 none example.com example.com pass example.com fail 64.18.1.132 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.204 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.214 2 none support.example.com support.example.com pass support.example.com fail 64.18.1.220 1 none support.example.com support.example.com pass support.example.com fail 64.18.0.56 1 reject example.com none example.com fail 64.18.1.50 1 reject example.com none example.com fail 64.18.1.59 1 reject example.com none example.com fail 64.31.24.2 4 reject example.com none ueuo-freewebhostingarea-com.ueuo.com neutral 64.34.7.28 10 reject example.com none example.com fail 77.73.4.57 1 reject example.com none example.com fail 129.128.5.19 6 none support.example.com support.example.com pass support.example.com fail 163.20.15.1 190 reject example.com none example.com fail 216.20.4.98 1 reject example.com none example.com fail 217.16.6.81 1 reject example.com none example.com fail 217.16.6.88 1 reject example.com none example.com fail 24.97.12.50 3 reject example.com none example.com fail 64.18.1.143 1 reject example.com none example.com fail 68.171.52.5 1 reject example.com none example.com fail 69.36.11.36 10 reject example.com none example.com fail 74.55.43.82 1 reject example.com none example.com fail 81.0.237.21 1 reject example.com none example.com fail 82.211.49.9 13 reject example.com none example.com fail 92.55.94.19 1 reject proxymail.example.com none grouper.mk pass 128.172.8.171 2 none support.example.com support.example.com pass support.example.com fail 141.211.90.69 1 none support.example.com support.example.com pass support.example.com fail 143.167.2.187 1 none example.com example.com pass example.com fail 149.137.1.151 1 none example.com example.com pass example.com fail 66.220.157.48 43 none example.com spc.example.com pass example.com pass 66.220.157.72 15 none example.com example.com fail example.com pass 66.220.157.83 331 none example.com example.com pass example.com pass 66.220.157.84 20 none example.com example.com fail example.com pass 66.220.157.87 289 none example.com example.com pass example.com pass 66.220.157.89 304 none example.com example.com pass example.com pass 66.220.157.95 310 none example.com example.com pass example.com pass 69.171.244.64 5470 none example.com example.com pass example.com pass 69.171.244.67 121 none example.com example.com pass example.com pass 69.171.244.71 11 none example.com example.com fail example.com pass 110.44.30.98 7 reject example.com none example.com fail 142.75.68.65 4 reject groups.example.com none groups.example.com neutral 169.241.10.2 5 reject reply.example.com none reply.example.com neutral 173.0.84.225 1 reject example.com paypal.com fail paypal.com pass 178.63.42.76 6 reject example.com none ns109.altervista.org neutral 213.75.39.10 1 reject support.example.com none cpsmtpb-ews07.kpnxchange.com neutral 216.70.64.51 1 reject example.com none example.com fail 38.108.136.8 2 reject example.com none example.com fail 50.97.41.199 2 reject example.com none returns.planningcenteronline.com pass 62.201.140.5 2 reject example.com none example.com fail 65.44.220.52 1 reject example.com none example.com fail 65.44.220.57 28 reject example.com none example.com fail 69.89.29.125 1 reject example.com none host85.hostmonster.com neutral 69.89.29.227 1 reject example.com none box693.bluehost.com neutral 70.32.74.241 1 reject example.com none example.com fail 72.9.232.170 1 reject example.com none example.com fail 74.208.4.194 2 reject example.com none srs.perfora.net neutral 74.208.4.195 3 reject example.com none srs.perfora.net neutral 74.81.83.207 1 reject example.com none example.com fail 76.74.155.18 28 reject groups.example.com none groups.example.com neutral 83.169.4.238 7 reject example.com none example.com fail 88.22.176.66 1 reject proxymail.example.com none proxymail.example.com neutral 95.172.88.27 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 129.186.140.44 1 none support.example.com support.example.com pass support.example.com fail 66.220.144.140 1 none example.com none example.com pass 66.220.144.143 1199 none support.example.com support.example.com pass support.example.com pass 66.220.144.146 48 none example.com example.com neutral example.com pass 66.220.144.154 1189 none support.example.com support.example.com pass support.example.com pass 66.220.155.140 6 none example.com example.com neutral example.com pass 66.220.155.140 400 none support.example.com support.example.com pass support.example.com pass 66.220.155.147 497 none support.example.com support.example.com pass support.example.com pass 66.220.155.151 5 none example.com example.com neutral example.com pass 66.220.155.153 547 none support.example.com support.example.com pass support.example.com pass 69.171.232.141 1671 none support.example.com support.example.com pass support.example.com pass 69.171.232.142 1698 none support.example.com support.example.com pass support.example.com pass 69.171.232.148 61 none example.com example.com neutral example.com pass 69.171.232.151 1650 none support.example.com support.example.com pass support.example.com pass 121.18.51.131 18 reject example.com none example.com fail 130.111.32.66 2 reject reply.example.com examplemail.com neutral basalt.its.maine.edu pass 169.139.1.140 1 reject groups.example.com none spam1.browardschools.com neutral 178.18.249.34 1 reject example.com none server.freewapi.info neutral 199.34.228.96 2 reject example.com none example.com fail 200.147.34.69 2 reject example.com none 200-98-201-82.clouduol.com.br neutral 203.116.95.58 24 reject example.com none example.com fail 207.112.3.239 4 reject example.com none example.com fail 207.42.26.234 2 reject example.com none example.com fail 212.47.223.38 2 reject example.com none example.com fail 216.17.24.242 1 reject reply.example.com none reply.example.com neutral 62.99.220.204 1 reject groups.example.com none groups.example.com neutral 65.86.213.150 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 66.132.135.50 19 reject example.com none example.com fail 66.240.210.71 1 reject example.com none example.com fail 74.120.148.92 1 reject proxymail.example.com gigya.com pass gigya.com pass 74.52.131.146 1 reject example.com example.com fail example.com fail 74.63.154.242 1 reject example.com none example.com fail 77.246.194.12 2 reject example.com none example.com fail 80.248.224.45 18 reject example.com none example.com fail 83.145.109.42 2 reject example.com none example.com fail 84.201.186.23 1 reject reply.example.com none forward5h.mail.yandex.net neutral 89.106.106.22 10 reject example.com none example.com fail 89.201.164.80 4 reject support.example.com support.example.com neutral support.example.com fail 98.129.49.146 13 reject mx.example.com none mail1.deliverysvr2.com neutral 129.219.117.210 1 none support.example.com support.example.com pass support.example.com fail 140.211.127.202 1 none support.example.com support.example.com pass support.example.com fail 118.219.234.52 2 reject example.com none uwa64-013.cafe24.com neutral 118.219.234.94 2 reject example.com none uwa64-017.cafe24.com neutral 142.30.138.140 4 reject reply.example.com none reply.example.com neutral 164.46.163.134 12 reject example.com none example.com fail 167.206.67.163 1 reject groups.example.com none groups.example.com neutral 173.231.139.69 5 reject example.com mail69.us2.mcsv.net pass mail69.us2.mcsv.net pass 174.120.148.50 1 reject example.com none example.com fail 182.50.132.194 1 reject example.com none sg2nlhg004.shr.prod.sin2.secureserver.net neutral 199.89.174.121 1 reject mx.example.com none mail.whitman.edu neutral 200.77.250.252 5 reject example.com none example.com fail 202.224.39.198 2 reject example.com none example.com fail 204.202.242.20 1 reject example.com none example.com fail 204.232.163.52 17 reject example.com mail52.us1.mcsv.net pass mail52.us1.mcsv.net pass 205.151.16.250 9 reject example.com none example.com fail 207.58.141.146 1 reject example.com none example.com fail 207.97.245.113 1 reject example.com none example.com fail 207.97.245.201 2 reject example.com none example.com fail 208.43.233.162 1 reject example.com none example.com fail 208.87.234.190 1 reject example.com example.com neutral example.com fail 209.160.73.182 1 reject example.com none route.indiamart.com pass 222.122.86.242 2 reject example.com none uwa64-048.cafe24.com pass 62.149.157.231 5 reject example.com none example.com fail 64.119.144.233 2 reject groups.example.com none groups.example.com neutral 64.150.191.151 21 reject example.com none example.com fail 66.220.144.139 477 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.143 440 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.147 524 reject m.example.com m.example.com neutral m.example.com neutral 66.220.145.247 10 reject example.com none example.com fail 69.171.232.139 451 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.144 449 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.147 496 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.150 525 reject m.example.com m.example.com neutral m.example.com neutral 69.171.240.245 7 reject example.com none example.com fail 69.171.240.247 3 reject example.com none example.com fail 69.171.240.251 4 reject example.com none example.com fail 72.167.234.239 6 reject example.com none onlineserver.cc neutral 72.167.234.243 25 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 72.249.142.165 16 reject example.com none example.com fail 74.125.149.234 1 reject example.com none example.com fail 74.208.155.179 6 reject example.com none example.com fail 74.220.220.194 1 reject example.com none example.com fail 82.132.130.151 1 reject example.com none example.com fail 87.195.109.101 1 reject proxymail.example.com none narutobase.net pass 174.142.104.197 1 reject example.com none 110mb.com neutral 184.171.247.219 2 reject example.com none globally.indositehost.com neutral 184.172.141.222 2 reject example.com none gator1422.hostgator.com pass 204.197.218.228 13 reject example.com none example.com fail 205.213.113.117 2 reject reply.example.com none reply.example.com neutral 205.213.113.117 1 reject groups.example.com none mail.milton.k12.wi.us neutral 31.7.0.200 2 none forwarded support.example.com support.example.com pass support.example.com fail 46.16.62.9 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.91.4 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.0.75.81 1 none forwarded support.example.com support.example.com pass support.example.com fail 81.29.88.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 84.2.42.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 109.70.1.79 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.0.129.8 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.132.70.5 3 none forwarded example.com example.com pass example.com fail 65.55.34.13 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.15 1 none forwarded example.com example.com pass hotmail.com pass 65.55.34.17 1 none forwarded example.com example.com pass msn.com pass 65.55.34.19 1 none forwarded support.example.com support.example.com pass hotmail.fr pass 65.55.34.22 6 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.13 2 none forwarded example.com example.com pass hotmail.com pass 65.55.90.19 1 none forwarded example.com example.com pass live.com pass 65.55.90.21 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.22 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.23 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.31 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.41 3 none forwarded support.example.com support.example.com pass hotmail.com pass 69.89.22.21 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.28.91 1 none forwarded example.com example.com pass example.com fail 74.208.5.90 2 none forwarded support.example.com support.example.com pass email.com neutral 76.96.30.40 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.62.17 1 none forwarded support.example.com support.example.com pass gmail.com neutral 76.96.62.32 1 none forwarded support.example.com support.example.com pass gmail.com neutral 12.177.5.8 1 reject forwarded example.com none example.com fail 64.18.0.21 1 reject forwarded support.example.com support.example.com neutral exprod5ob111.obsmtp.com neutral 64.18.2.67 1 reject forwarded example.com none example.com fail 67.63.66.6 2 reject forwarded example.com none example.com fail 69.89.70.8 1 reject forwarded mx.example.com none mx3.textplus.com pass 74.82.85.1 1 reject forwarded reply.example.com examplemail.com neutral srs.bis6.us.blackberry.com pass 130.253.1.61 3 none forwarded support.example.com support.example.com pass support.example.com fail 180.151.97.3 2 none forwarded support.example.com support.example.com pass support.example.com fail 194.165.33.4 12 none forwarded support.example.com support.example.com pass support.example.com fail 208.66.130.3 2 none forwarded support.example.com support.example.com pass support.example.com fail 212.16.98.54 2 none forwarded support.example.com support.example.com pass support.example.com fail 213.75.39.13 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.40.42.17 1 none forwarded support.example.com support.example.com pass gmail.com neutral 216.70.64.26 43 none forwarded support.example.com support.example.com pass support.example.com fail 216.70.64.53 2 none forwarded support.example.com support.example.com pass support.example.com fail 46.105.52.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.28.54.163 1 none forwarded support.example.com support.example.com pass support.example.com fail 60.199.245.8 261 none forwarded support.example.com support.example.com pass support.example.com fail 60.234.40.40 2 none forwarded support.example.com support.example.com pass support.example.com fail 60.37.51.254 1 none forwarded support.example.com support.example.com pass xfuminori-2etomita-40gmail-2ecom.xadvertise-2dnoreply-40support-2eexample-2ecom.ocnadm.ocn.ad.jp pass 64.13.225.94 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.39.211.66 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.111.96 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.19 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.26 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.30 3 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.38 6 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.39 2 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.44 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.47 9 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.48 1 none forwarded support.example.com support.example.com pass hotmail.com pass 66.96.185.17 1 none forwarded support.example.com support.example.com pass jamlancer.com pass 66.96.185.20 1 none forwarded support.example.com support.example.com pass frenzy.biz neutral 67.222.39.59 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.225.216.4 6 none forwarded support.example.com support.example.com pass support.example.com fail 67.23.247.20 1 none forwarded example.com example.com pass example.com fail 69.89.16.181 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.19.237 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.182.140.6 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.34.33.192 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.87.211.27 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.3.220.242 3 none forwarded support.example.com support.example.com pass support.example.com fail 72.30.239.77 1 none forwarded example.com example.com pass gmail.com neutral 72.55.133.47 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.41 1 none forwarded example.com example.com pass belomed.com neutral 74.125.82.43 3 none forwarded support.example.com support.example.com pass solucionweb.com softfail 74.125.82.44 1 none forwarded example.com spc.example.com pass babelverse.com neutral 74.125.82.44 1 none forwarded support.example.com support.example.com pass nozio.com neutral 74.125.82.47 1 none forwarded support.example.com support.example.com pass emtronet.pl pass 74.125.82.49 1 none forwarded support.example.com support.example.com pass scirra.com pass 74.125.82.51 1 none forwarded support.example.com support.example.com pass palmergroupmedia.com neutral 74.125.82.54 1 none forwarded support.example.com support.example.com pass jkdunn.us neutral 74.125.83.51 1 none forwarded support.example.com support.example.com pass quadrantlabs.net neutral 74.125.83.52 1 none forwarded support.example.com support.example.com pass inventures.com.tr neutral 74.54.18.178 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.59.228 1 none forwarded support.example.com support.example.com pass support.example.com fail 78.40.224.29 1 none forwarded support.example.com support.example.com pass support.example.com fail 78.46.37.187 2 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.6.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.68 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.91 1 none forwarded example.com example.com pass example.com fail 122.1.37.90 1 reject forwarded example.com none example.com fail 217.16.6.86 5 reject forwarded example.com none example.com fail 24.149.0.27 1 reject forwarded example.com none example.com fail 62.161.4.49 1 reject forwarded mx.example.com none bounce03.msg.oleane.net neutral 62.44.29.23 2 reject forwarded example.com none example.com fail 64.18.1.121 2 reject forwarded example.com none example.com fail 65.55.34.23 1 reject forwarded m.example.com m.example.com neutral live.com pass 69.89.17.81 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 70.32.81.22 3 reject forwarded example.com none example.com fail 70.87.28.63 1 reject forwarded example.com example.com neutral example.com fail 71.74.56.23 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 71.8.243.20 2 reject forwarded example.com none example.com fail 77.79.12.17 2 reject forwarded mx.example.com none borlunda.aleja.lt neutral 78.46.85.58 1 reject forwarded example.com none example.com fail 112.78.112.18 2 none forwarded support.example.com support.example.com pass support.example.com fail 114.111.98.33 2 none forwarded support.example.com support.example.com pass support.example.com fail 122.252.14.65 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.135.12.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.193.15.44 2 none forwarded support.example.com support.example.com pass support.example.com fail 128.32.222.29 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.64.99.167 2 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.90.69 3 none forwarded support.example.com support.example.com pass kcjones.org neutral 171.67.219.73 11 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.171.2 2 none forwarded example.com example.com pass example.com fail 174.142.68.38 3 none forwarded support.example.com support.example.com pass support.example.com fail 177.55.96.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.48.58 2 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.65.87 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.40.74.110 2 none forwarded support.example.com support.example.com pass support.example.com fail 194.63.252.24 4 none forwarded support.example.com support.example.com pass support.example.com fail 195.214.192.3 3 none forwarded support.example.com support.example.com pass support.example.com fail 196.220.39.55 4 none forwarded support.example.com support.example.com pass support.example.com fail 200.34.203.22 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.69.195.99 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.109.80.60 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.157.71.83 3 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.43 1 none forwarded support.example.com support.example.com pass iminusd.com fail 209.85.160.44 1 none forwarded support.example.com support.example.com pass wettreich.com neutral 209.85.160.44 1 none forwarded support.example.com support.example.com pass lifematescanada.com neutral 209.85.160.45 1 none forwarded support.example.com support.example.com pass ig.com.br pass 209.85.160.48 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.50 1 none forwarded support.example.com support.example.com pass qcgcreative.com neutral 209.85.160.50 1 none forwarded support.example.com support.example.com pass gngimports.com.br softfail 209.85.160.53 4 none forwarded support.example.com support.example.com pass hilifeinteractive.com pass 209.85.210.42 1 none forwarded support.example.com support.example.com pass nonsolounghie.com neutral 209.85.210.43 1 none forwarded support.example.com support.example.com pass carrymemusic.com neutral 209.85.210.46 1 none forwarded example.com example.com pass gmail.com pass 209.85.210.48 1 none forwarded support.example.com support.example.com pass reimaginecbc.ca pass 209.85.210.48 1 none forwarded support.example.com support.example.com pass jacobicarter.com neutral 209.85.210.48 1 none forwarded support.example.com support.example.com pass edgeworksgroup.com softfail 209.85.210.51 1 none forwarded support.example.com support.example.com pass pulsd.com softfail 209.85.210.53 1 none forwarded support.example.com support.example.com pass postalgold.com neutral 209.85.212.41 1 none forwarded support.example.com support.example.com pass bramato.org neutral 209.85.212.42 1 none forwarded example.com example.com pass maisnam.com neutral 209.85.212.45 1 none forwarded support.example.com support.example.com pass anything.lk neutral 209.85.212.47 3 none forwarded support.example.com support.example.com pass photomanhattan.com neutral 209.85.212.48 5 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.49 1 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.50 1 none forwarded support.example.com support.example.com pass stollerinc.com neutral 209.85.212.50 7 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.52 1 none forwarded support.example.com support.example.com pass yournextleap.com neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass adplay.re neutral 209.85.212.54 1 none forwarded support.example.com support.example.com pass dailygaypon.com fail 209.85.213.41 1 none forwarded support.example.com support.example.com pass librerialeo.com.mx neutral 209.85.213.43 3 none forwarded support.example.com support.example.com pass instyledm.com pass 209.85.213.43 1 none forwarded support.example.com support.example.com pass anthonysnape.com neutral 209.85.213.44 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.44 2 none forwarded support.example.com support.example.com pass emay.ru neutral 209.85.213.45 1 none forwarded support.example.com support.example.com pass nicedeal.sg softfail 209.85.213.45 1 none forwarded support.example.com support.example.com pass gotogroupbuy.com neutral 209.85.213.45 1 none forwarded support.example.com support.example.com pass embrace-digital.com neutral 209.85.213.49 1 none forwarded support.example.com support.example.com pass srxa.com neutral 209.85.213.50 1 none forwarded support.example.com support.example.com pass colorguide.me neutral 209.85.213.53 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.42 2 none forwarded support.example.com support.example.com pass saletab.com neutral 209.85.214.42 1 none forwarded support.example.com support.example.com pass indiatamasha.com neutral 209.85.214.42 1 none forwarded support.example.com support.example.com pass potenzacreative.com neutral 209.85.214.43 1 none forwarded example.com example.com pass belomed.com neutral 209.85.214.43 1 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass poochitoutou.com neutral 209.85.214.45 1 none forwarded support.example.com support.example.com pass monarchsf.com neutral 209.85.214.45 2 none forwarded support.example.com support.example.com pass socialkinnect.com neutral 209.85.214.46 1 none forwarded support.example.com support.example.com pass ntlworld.com neutral 209.85.214.49 1 none forwarded support.example.com support.example.com pass christine-margaret.com neutral 209.85.214.51 1 none forwarded support.example.com support.example.com pass mancia.org pass 209.85.214.51 2 none forwarded support.example.com support.example.com pass glevo.com neutral 209.85.214.51 1 none forwarded support.example.com support.example.com pass tiechen.com neutral 209.85.214.51 1 none forwarded support.example.com support.example.com pass despabilateamor.com neutral 209.85.214.53 2 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.214.54 1 none forwarded support.example.com support.example.com pass socialize.ae neutral 209.85.215.41 1 none forwarded support.example.com support.example.com pass stepvalue.com neutral 209.85.215.41 1 none forwarded support.example.com support.example.com pass bjbuckland.com neutral 209.85.215.42 1 none forwarded support.example.com support.example.com pass online.net.tw neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass willconley.com neutral 209.85.215.46 1 none forwarded support.example.com support.example.com pass tangerinelife.com neutral 209.85.215.47 1 none forwarded support.example.com support.example.com pass godmother.ro neutral 209.85.215.47 1 none forwarded support.example.com support.example.com pass njstateauto.com neutral 209.85.215.51 1 none forwarded support.example.com support.example.com pass gabrielboone.com neutral 209.85.215.52 1 none forwarded example.com example.com pass toyspirits.com neutral 209.85.215.52 1 none forwarded support.example.com support.example.com pass jesusworkministry.com neutral 209.85.215.53 2 none forwarded support.example.com support.example.com pass spiritactivewear.com neutral 209.85.215.54 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.54 5 none forwarded support.example.com support.example.com pass mequedo1.com pass 209.85.215.54 1 none forwarded support.example.com support.example.com pass alexfelix.com.br softfail 209.85.216.44 1 none forwarded support.example.com support.example.com pass abakusogren.com permerror 209.85.216.47 1 none forwarded support.example.com support.example.com pass cam.edu.mx neutral 209.85.216.48 1 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.48 1 none forwarded support.example.com support.example.com pass husky.neu.edu neutral 209.85.216.49 1 none forwarded support.example.com support.example.com pass pof.com pass 209.85.216.49 1 none forwarded support.example.com support.example.com pass kovalenko.kiev.ua neutral 209.85.216.50 2 none forwarded support.example.com support.example.com pass easyhi.com neutral 209.85.216.51 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.52 1 none forwarded support.example.com support.example.com pass llevauno.com.py pass 209.85.216.53 1 none forwarded support.example.com support.example.com pass apis3.com pass 209.85.216.53 9 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.53 1 none forwarded support.example.com support.example.com pass 4donk.com neutral 209.85.216.53 1 none forwarded support.example.com support.example.com pass travelonline.ph pass 210.157.5.231 3 none forwarded support.example.com support.example.com pass support.example.com fail 212.97.132.54 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.33.127.89 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.114.212.6 1 none forwarded support.example.com support.example.com pass support.example.com fail 218.219.70.20 6 none forwarded support.example.com support.example.com pass ysstaff.co.jp pass 219.94.200.24 1 none forwarded support.example.com support.example.com pass sv23.sixcore.ne.jp neutral 219.99.164.42 2 none forwarded support.example.com support.example.com pass support.example.com fail 24.214.64.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 27.50.111.178 1 none forwarded support.example.com support.example.com pass hachi-cli.com neutral 50.21.180.108 1 none forwarded support.example.com support.example.com pass support.example.com fail 59.106.13.142 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.202.189.56 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.34.169.168 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.77 1 none forwarded example.com example.com pass ouregypt.us pass 66.152.226.41 14 none forwarded example.com example.com pass example.com fail 66.175.56.217 1 none forwarded support.example.com support.example.com pass gmail.com neutral 66.220.157.67 2 none forwarded example.com example.com pass example.com pass 66.254.113.78 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.210.115.46 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.33.216 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.49.121.236 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.39.249.136 3 none forwarded support.example.com support.example.com pass support.example.com fail 70.85.180.226 3 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.32 1 none forwarded example.com example.com pass bounce.secureserver.net pass 72.30.239.134 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.30.239.210 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.32.145.236 3 none forwarded example.com example.com pass example.com fail 72.52.177.186 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.177 4 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.179 1 none forwarded support.example.com support.example.com pass midnightmahogany.com neutral 74.52.200.162 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.62.154.104 1 none forwarded support.example.com support.example.com pass support.example.com fail 75.180.133.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 79.96.242.105 3 none forwarded support.example.com support.example.com pass support.example.com fail 82.57.200.114 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.159.66.210 2 none forwarded support.example.com support.example.com pass gmail.com neutral 91.142.241.52 2 none forwarded support.example.com support.example.com pass support.example.com fail 91.186.20.113 10 none forwarded support.example.com support.example.com pass support.example.com fail 91.207.214.40 10 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.77 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.95 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.138.91.139 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.177 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.191 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.53.197 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.53.198 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.53.215 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.192 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.204 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.217 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.221 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.227 1 none forwarded support.example.com support.example.com pass support.example.com fail 110.44.30.98 20 reject forwarded example.com none example.com fail 12.52.152.11 11 reject forwarded example.com none example.com fail 128.195.1.38 1 reject forwarded example.com none example.com fail 17.148.16.91 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.99 2 reject forwarded support.example.com support.example.com neutral debrarogerscampaign.com neutral 189.1.162.96 1 reject forwarded example.com none no10.nayana.kr neutral 202.78.47.76 1 reject forwarded example.com none example.com fail 202.94.33.35 2 reject forwarded example.com none example.com fail 204.16.4.227 1 reject forwarded example.com none hosting3.isun.biz neutral 208.80.4.162 1 reject forwarded example.com none example.com fail 212.227.17.5 4 reject forwarded example.com none example.com fail 213.75.39.14 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 216.70.64.51 1 reject forwarded example.com none example.com fail 217.16.6.136 6 reject forwarded example.com none example.com fail 50.23.16.242 1 reject forwarded example.com none example.com fail 50.55.164.90 2 reject forwarded example.com none example.com fail 61.107.76.17 1 reject forwarded example.com none example.com fail 61.9.189.137 1 reject forwarded example.com none example.com fail 64.13.232.14 2 reject forwarded example.com none example.com fail 64.34.105.77 1 reject forwarded mx.example.com none mx1.mecca.ca neutral 64.50.170.59 2 reject forwarded example.com none example.com fail 64.85.161.16 1 reject forwarded example.com none example.com fail 65.55.116.12 2 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.116.28 1 reject forwarded example.com example.com fail hotmail.com pass 66.11.225.98 1 reject forwarded example.com none houck1.com neutral 66.219.20.18 2 reject forwarded example.com none example.com fail 67.222.53.64 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.49.113.49 2 reject forwarded mx.example.com none mail119c75.carrierzone.com neutral 69.64.95.104 1 reject forwarded example.com none example.com fail 69.89.16.240 1 reject forwarded example.com none example.com fail 69.89.20.223 1 reject forwarded example.com none example.com fail 70.183.83.44 1 reject forwarded support.example.com support.example.com fail viejas.com neutral 72.15.54.225 1 reject forwarded example.com none example.com fail 72.35.23.121 1 reject forwarded example.com none fusemail.com pass 74.125.82.41 3 reject forwarded example.com example.com neutral howzat.com pass 74.208.155.6 1 reject forwarded example.com none example.com fail 74.220.219.6 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 91.102.48.16 3 reject forwarded mx.example.com none mail.ego.it neutral 94.136.40.62 2 reject forwarded example.com example.com neutral example.com fail 96.241.223.2 29 reject forwarded example.com none example.com fail 98.130.1.185 1 reject forwarded mx.example.com none mail910.opentransfer.com neutral 98.130.1.226 1 reject forwarded example.com none example.com fail 112.140.176.80 1 none forwarded support.example.com support.example.com pass support.example.com fail 116.251.205.20 1 none forwarded support.example.com support.example.com pass support.example.com fail 116.251.205.84 1 none forwarded support.example.com support.example.com pass support.example.com fail 120.29.189.218 1 none forwarded support.example.com support.example.com pass rmd.co.jp neutral 128.197.228.13 1 none forwarded support.example.com support.example.com pass gmail.com neutral 130.241.151.96 1 none forwarded support.example.com support.example.com pass student.gu.se neutral 169.232.46.169 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.193.53 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.45.244.204 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.121.160.20 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.34.177.194 3 none forwarded support.example.com support.example.com pass support.example.com fail 184.154.61.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.20.153 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.227.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.121.43.196 1 none forwarded example.com example.com pass example.com fail 193.253.67.236 2 none forwarded support.example.com support.example.com pass support.example.com fail 195.228.245.75 2 none forwarded example.com example.com pass example.com fail 195.248.191.95 1 none forwarded support.example.com support.example.com pass support.example.com fail 196.218.26.123 1 none forwarded support.example.com support.example.com pass gmail.com neutral 200.147.34.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 200.219.210.15 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.124.241.71 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.138.180.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 204.202.242.86 1 none forwarded example.com example.com pass example.com fail 207.211.91.250 2 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.202 2 none forwarded example.com example.com pass example.com fail 209.236.112.26 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.173 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.174 1 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.160.179 1 none forwarded support.example.com support.example.com pass alumni.gsb.stanford.edu neutral 209.85.160.181 1 none forwarded support.example.com support.example.com pass loffman.com neutral 209.85.161.169 1 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.161.170 1 none forwarded support.example.com support.example.com pass emerald.vn neutral 209.85.161.170 1 none forwarded support.example.com support.example.com pass hugemedia.rs neutral 209.85.161.172 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.161.172 7 none forwarded support.example.com support.example.com pass mindvalleyhispano.com pass 209.85.161.173 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.173 1 none forwarded support.example.com support.example.com pass miyamatsu.net pass 209.85.161.174 1 none forwarded support.example.com support.example.com pass jumpstartweb.com neutral 209.85.161.175 1 none forwarded support.example.com support.example.com pass sarmady.net neutral 209.85.161.180 2 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.161.181 1 none forwarded support.example.com support.example.com pass saxana.sk neutral 209.85.161.181 1 none forwarded support.example.com support.example.com pass captainu.com pass 209.85.161.182 2 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.212.172 1 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.212.173 1 none forwarded support.example.com support.example.com pass rockrena.com neutral 209.85.212.174 6 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.212.175 1 none forwarded support.example.com support.example.com pass inst.lecuisinier.org neutral 209.85.212.176 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.177 1 none forwarded support.example.com support.example.com pass globalmediainsight.com neutral 209.85.212.178 1 none forwarded support.example.com support.example.com pass aradium.com neutral 209.85.212.180 2 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.213.169 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.170 1 none forwarded support.example.com support.example.com pass souljourneys.ca neutral 209.85.213.171 1 none forwarded support.example.com support.example.com pass winstron.com softfail 209.85.213.174 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.175 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.213.176 1 none forwarded support.example.com support.example.com pass mazemedia.se neutral 209.85.213.177 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.213.181 1 none forwarded support.example.com support.example.com pass mariz.com.br neutral 209.85.214.169 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.169 1 none forwarded support.example.com support.example.com pass thoughtlabs.in neutral 209.85.214.169 1 none forwarded support.example.com support.example.com pass bodyandmindguam.com neutral 209.85.214.170 1 none forwarded example.com example.com pass ezambia.com neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass pecavar.com neutral 209.85.214.170 1 none forwarded support.example.com support.example.com pass i-smiledental.com neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.214.172 10 none forwarded support.example.com support.example.com pass airu.com.br neutral 209.85.214.172 2 none forwarded support.example.com support.example.com pass mindvalleyhispano.com pass 209.85.214.173 1 none forwarded support.example.com support.example.com pass idm.vn neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass pmc.co.jp neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass techshu.com neutral 209.85.214.173 4 none forwarded support.example.com support.example.com pass dinkbit.com softfail 209.85.214.173 1 none forwarded support.example.com support.example.com pass kamelasmar.com neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass itkomon.com neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass i-reductions.ch fail 209.85.214.174 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.175 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.214.176 2 none forwarded support.example.com support.example.com pass iclickpro.com neutral 209.85.214.176 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.214.177 1 none forwarded support.example.com support.example.com pass listia.com pass 209.85.214.177 3 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.177 3 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.178 2 none forwarded support.example.com support.example.com pass thecampaignworkshop.com neutral 209.85.214.179 1 none forwarded support.example.com support.example.com pass somec.org neutral 209.85.214.179 2 none forwarded support.example.com support.example.com pass mypoutylips.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass catsgarden.com.my pass 209.85.214.180 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.180 1 none forwarded support.example.com support.example.com pass smartdigital.com neutral 209.85.214.181 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.181 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.215.172 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.174 1 none forwarded support.example.com support.example.com pass onpitchmedia.com neutral 209.85.216.172 1 none forwarded support.example.com support.example.com pass llevauno.com.py pass 209.85.216.177 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.179 1 none forwarded support.example.com support.example.com pass phillyc.com neutral 209.85.216.180 8 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.182 1 none forwarded support.example.com support.example.com pass daherfoods.com softfail 209.85.217.169 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.169 1 none forwarded support.example.com support.example.com pass wcdental.ca neutral 209.85.217.170 1 none forwarded support.example.com support.example.com pass spanishhighs.co.uk neutral 209.85.217.172 1 none forwarded support.example.com support.example.com pass discovercircle.com neutral 209.85.217.174 1 none forwarded support.example.com support.example.com pass allskateboards.cl neutral 209.85.217.176 2 none forwarded support.example.com support.example.com pass brstrat.com neutral 209.85.217.176 1 none forwarded support.example.com support.example.com pass myphenomena.com neutral 209.85.217.178 4 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.179 1 none forwarded support.example.com support.example.com pass my.utsa.edu neutral 209.85.217.180 1 none forwarded example.com example.com pass sky.com pass 209.85.217.180 4 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.220.171 1 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.220.173 1 none forwarded support.example.com support.example.com pass rightplacemedia.com neutral 209.85.220.174 1 none forwarded support.example.com support.example.com pass adplay.re neutral 209.85.220.180 2 none forwarded support.example.com support.example.com pass darcom.be neutral 209.85.220.181 1 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.220.181 1 none forwarded support.example.com support.example.com pass theormgroup.com neutral 210.152.162.38 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.82.109.233 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.165.64.100 6 none forwarded support.example.com support.example.com pass gmx.de pass 213.165.64.100 3 none forwarded support.example.com support.example.com pass gmx.net pass 213.171.216.77 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.95.169.180 5 none forwarded support.example.com support.example.com pass srs.gameduell.de neutral 216.152.129.18 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.30.184.167 1 none forwarded example.com example.com pass example.com fail 64.186.135.181 4 none forwarded support.example.com support.example.com pass support.example.com fail 65.182.109.100 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.146 1 none forwarded example.com example.com pass ouregypt.us pass 66.147.248.254 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.220.144.153 5 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.157 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.158 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.139 6 none forwarded support.example.com support.example.com pass support.example.com pass 67.222.143.253 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.228.198.154 2 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.232.147 5 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.153 14 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.158 12 none forwarded support.example.com support.example.com pass support.example.com pass 72.167.218.161 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.125.149.153 1 none forwarded support.example.com support.example.com pass punahou.edu neutral 77.233.245.157 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.237.138.232 1 none forwarded support.example.com support.example.com pass kukwa.de neutral 81.222.215.117 2 none forwarded support.example.com support.example.com pass support.example.com fail 82.223.190.142 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.223.199.129 1 none forwarded support.example.com support.example.com pass support.example.com fail 86.110.229.133 4 none forwarded support.example.com support.example.com pass ui42.com neutral 89.149.254.190 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.119 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.232 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.247.178.211 3 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.212.188 1 none forwarded support.example.com support.example.com pass support.example.com fail 113.52.144.90 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 12.145.130.14 28 reject forwarded example.com none example.com fail 128.59.28.167 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 165.212.10.32 1 reject forwarded example.com none example.com fail 17.148.16.102 4 reject forwarded support.example.com support.example.com neutral support.example.com fail 173.0.129.240 1 reject forwarded example.com none example.com fail 176.31.100.11 2 reject forwarded example.com none example.com fail 189.38.92.151 1 reject forwarded example.com none example.com fail 189.38.92.162 1 reject forwarded example.com none example.com fail 190.54.46.156 1 reject forwarded example.com none example.com fail 192.33.12.157 1 reject forwarded example.com none example.com fail 193.138.67.12 1 reject forwarded support.example.com support.example.com fail btv.bg neutral 195.246.12.14 1 reject forwarded example.com none example.com fail 201.76.49.120 1 reject forwarded support.example.com none support.example.com fail 201.76.49.151 1 reject forwarded support.example.com none support.example.com fail 202.66.107.19 2 reject forwarded example.com none example.com fail 204.93.211.28 1 reject forwarded example.com none example.com fail 208.113.200.5 4 reject forwarded example.com example.com neutral example.com fail 208.180.40.75 2 reject forwarded example.com none example.com fail 208.82.238.97 1 reject forwarded example.com example.com neutral craigslist.org pass 208.84.243.74 4 reject forwarded example.com none bt01.terra.com neutral 208.97.132.81 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 209.70.46.110 1 reject forwarded example.com none example.com fail 209.85.210.50 1 reject forwarded example.com example.com neutral gmail.com pass 209.85.213.41 2 reject forwarded example.com example.com neutral peakgames.net pass 209.85.213.42 2 reject forwarded example.com example.com neutral bitrhymes.com neutral 209.85.215.45 1 reject forwarded example.com example.com fail unitedparents.com neutral 209.85.215.50 1 reject forwarded example.com example.com neutral gamador.com neutral 210.131.4.251 1 reject forwarded example.com nifty.com pass example.com fail 212.52.84.112 2 reject forwarded example.com none example.com fail 212.83.193.24 1 reject forwarded support.example.com support.example.com neutral debicare.nl pass 216.12.210.69 1 reject forwarded example.com none example.com fail 216.146.32.32 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 24.201.245.35 1 reject forwarded example.com none example.com fail 24.235.117.18 1 reject forwarded support.example.com support.example.com neutral canadianfeedthechildren.ca softfail 38.102.228.51 1 reject forwarded example.com none example.com fail 46.163.72.230 1 reject forwarded example.com none example.com fail 64.126.132.19 1 reject forwarded example.com none example.com fail 64.191.166.22 1 reject forwarded example.com none example.com fail 66.178.204.98 1 reject forwarded example.com none example.com fail 66.246.72.188 1 reject forwarded example.com none example.com fail 67.134.161.94 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 67.222.49.247 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.222.50.138 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.222.57.185 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.222.60.192 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.228.22.122 1 reject forwarded example.com none sherlock.jamwt.com neutral 69.73.138.181 1 reject forwarded example.com none example.com fail 71.93.176.131 26 reject forwarded example.com none example.com fail 74.220.208.64 1 reject forwarded example.com none example.com fail 74.220.217.10 1 reject forwarded example.com none example.com fail 74.53.247.148 1 reject forwarded example.com none example.com fail 75.125.104.43 1 reject forwarded example.com none example.com fail 75.126.47.116 1 reject forwarded example.com none example.com fail 78.129.202.52 1 reject forwarded mx.example.com none lit6.litsixdns.com neutral 80.70.214.101 1 reject forwarded mx.example.com none is-mail1.rtblw.com neutral 83.145.109.44 6 reject forwarded example.com none example.com fail 88.198.61.190 1 reject forwarded mx.example.com none mail.popdns.com pass 98.139.91.244 1 reject forwarded mx.example.com none nm13-vm0.bullet.mail.sp2.yahoo.com neutral 128.100.132.164 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.103.229.181 7 none forwarded support.example.com support.example.com pass support.example.com fail 128.122.118.244 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.196.130.204 2 none forwarded support.example.com support.example.com pass support.example.com fail 130.127.237.236 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.193.181 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 174.120.148.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.152.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.127.107.174 1 none forwarded support.example.com support.example.com pass gmail.com neutral 174.132.171.130 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.189.162 2 none forwarded support.example.com support.example.com pass support.example.com fail 175.177.155.112 1 none forwarded example.com example.com pass mail02-md.ns.itscom.net neutral 184.107.184.194 2 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.252.134 1 none forwarded support.example.com support.example.com pass support.example.com fail 186.233.144.116 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.116.202.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.126.144.117 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 207.126.144.123 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 207.126.144.137 2 none forwarded support.example.com support.example.com pass webreality.co.uk pass 207.126.144.143 1 none forwarded support.example.com support.example.com pass builder.hu softfail 207.189.130.134 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.237.134.233 1 none forwarded example.com example.com pass example.com fail 210.133.111.122 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.136.236.110 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.188.201.193 1 none forwarded support.example.com support.example.com pass sv162.xserver.jp neutral 213.171.216.172 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.104.162.150 2 none forwarded support.example.com support.example.com pass support.example.com fail 216.180.239.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.176.157 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.193 1 none forwarded example.com example.com pass example.com fail 209.85.160.70 8 none mailing_list support.example.com none apis3.com pass 209.85.160.70 15 none mailing_list support.example.com none raybeam.com pass 209.85.160.70 16 none mailing_list support.example.com none graphscience.com pass 209.85.160.71 10 none mailing_list support.example.com none yhmg.com pass 209.85.160.71 36 none mailing_list support.example.com none 6waves.com pass 209.85.160.72 3 none mailing_list support.example.com none komdat-solutions.com pass 209.85.210.69 4 none mailing_list support.example.com none glyde.com pass 209.85.210.69 2 none mailing_list support.example.com none wannaflock.com pass 209.85.210.69 2 none mailing_list support.example.com socialcode.biz neutral socialcode.biz pass 209.85.210.70 8 none mailing_list support.example.com none plumbee.co.uk pass 209.85.210.70 1 none mailing_list support.example.com 77digital.com neutral 77digital.com pass 209.85.210.71 4 none mailing_list support.example.com none wearesocial.it pass 209.85.210.71 2 none mailing_list support.example.com none gttsmarketing.com pass 209.85.210.72 6 none mailing_list example.com none dragonzone.com pass 209.85.210.72 2 none mailing_list support.example.com none tequilarapido.com pass 209.85.212.71 12 none mailing_list support.example.com none 6waves.com pass 209.85.213.69 4 none mailing_list support.example.com none imjp.co.jp pass 209.85.213.69 3 none mailing_list support.example.com none peakgames.net pass 116.90.208.167 1 reject forwarded example.com none example.com fail 128.253.83.164 2 reject forwarded support.example.com support.example.com fail support.example.com fail 128.253.83.165 15 reject forwarded support.example.com support.example.com neutral support.example.com fail 129.105.238.69 1 reject forwarded example.com none northwestern.edu neutral 141.211.14.131 1 reject forwarded example.com none example.com fail 141.212.113.18 1 reject forwarded example.com none example.com fail 158.130.67.217 1 reject forwarded example.com none example.com fail 162.39.147.128 1 reject forwarded example.com none example.com fail 174.121.34.194 1 reject forwarded example.com none example.com fail 174.133.54.114 1 reject forwarded example.com none example.com fail 189.126.112.30 1 reject forwarded example.com none no10.nayana.kr neutral 193.252.22.211 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 199.120.150.29 15 reject forwarded example.com none example.com fail 202.57.162.198 1 reject forwarded groups.example.com none groups.example.com neutral 202.59.161.228 14 reject forwarded example.com none example.com fail 203.131.198.76 2 reject forwarded example.com none example.com fail 204.202.242.56 1 reject forwarded example.com none example.com fail 209.51.145.226 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 209.85.213.174 1 reject forwarded example.com example.com neutral jamitor.com neutral 209.85.213.176 1 reject forwarded example.com example.com fail jausacr.com neutral 209.85.214.180 3 reject forwarded example.com example.com neutral web2mil.com.uy pass 209.85.216.173 1 reject forwarded example.com example.com neutral talltreegames.com pass 209.85.216.180 1 reject forwarded example.com example.com neutral web2mil.com.uy pass 212.24.139.130 1 reject forwarded support.example.com support.example.com neutral mail.wmcgrey.cz neutral 213.239.215.42 1 reject forwarded example.com none example.com fail 216.193.128.40 1 reject forwarded example.com none example.com fail 216.200.145.36 2 reject forwarded example.com none example.com fail 216.32.181.184 1 reject forwarded example.com example.com neutral accountancy.smu.edu.sg pass 24.226.158.206 1 reject forwarded example.com none example.com fail 62.128.193.152 1 reject forwarded example.com none example.com fail 62.128.193.158 2 reject forwarded example.com none example.com fail 62.142.117.204 1 reject forwarded mx.example.com none fe26.mail.saunalahti.fi neutral 63.117.139.100 1 reject forwarded example.com none example.com fail 66.220.144.145 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 66.220.144.153 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 68.230.241.134 1 reject forwarded example.com none example.com fail 68.230.241.152 1 reject forwarded example.com none example.com fail 69.171.232.137 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.167.218.161 1 reject forwarded proxymail.example.com shopkick.com pass bounce.secureserver.net pass 74.220.216.181 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 80.255.241.186 1 reject forwarded support.example.com support.example.com neutral teg.nl neutral 85.158.140.195 1 reject forwarded mx.example.com none mail193.messagelabs.com neutral 90.177.102.191 1 reject forwarded example.com none example.com fail 91.228.154.231 1 reject forwarded mx.example.com none hivede5-1358.fornex.org neutral 91.230.244.223 1 reject forwarded example.com none example.com fail 94.100.176.205 1 reject forwarded example.com none srv44-h-st.jino.ru neutral 95.172.88.30 3 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.213.198 2 none mailing_list support.example.com none zimmerman.com pass 209.85.213.199 2 none mailing_list example.com none againstintuition.com pass 209.85.213.200 2 none mailing_list support.example.com none dafiti.com.br pass 209.85.214.198 4 none mailing_list support.example.com none gosocial.dk pass 209.85.214.198 8 none mailing_list support.example.com none netseer.com pass 209.85.214.198 197 none mailing_list support.example.com none graphscience.com pass 209.85.214.199 4 none mailing_list support.example.com none creasoup.com pass 209.85.214.200 6 none mailing_list support.example.com none weddingtonway.com pass 209.85.214.200 4 none mailing_list support.example.com none essencedigital.com pass 66.220.155.178 1 none mailing_list lists.example.com none lists.example.com pass 74.125.149.143 5 none mailing_list support.example.com none gilt.jp pass 114.111.116.123 3 reject forwarded reply.example.com examplemail.com neutral returns.yahoogroups.jp pass 121.111.227.144 117 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.144 1 reject forwarded mx.example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.147 1 reject forwarded mx.example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.148 91 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.148 3 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.152 3 reject forwarded example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.152 2 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 128.100.132.164 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 168.144.250.193 1 reject forwarded example.com none example.com fail 174.120.175.140 1 reject forwarded mx.example.com none gal.gala-global.org pass 184.154.249.106 1 reject forwarded example.com none example.com fail 184.172.187.208 2 reject forwarded m.example.com none excursion.websitewelcome.com pass 184.175.109.203 1 reject forwarded example.com none example.com fail 194.150.112.203 1 reject forwarded support.example.com support.example.com fail epona.tv neutral 195.245.231.130 4 reject forwarded example.com none example.com fail 200.180.130.242 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 205.144.224.112 1 reject forwarded support.example.com support.example.com neutral senate.ms.gov pass 205.251.140.114 4 reject forwarded mx.example.com none andromeda.dnsprotect.com neutral 207.155.253.118 1 reject forwarded example.com none example.com fail 208.118.255.108 14 reject forwarded example.com none example.com fail 209.104.252.244 1 reject forwarded example.com none websitedirect.com neutral 213.171.216.111 2 reject forwarded example.com none example.com fail 213.171.216.125 2 reject forwarded example.com none example.com fail 213.199.154.143 1 reject forwarded example.com none alumni.coloradocollege.edu pass 213.199.154.208 1 reject forwarded support.example.com support.example.com fail saclink.csus.edu neutral 216.151.212.180 2 reject forwarded example.com example.com neutral example.com fail 216.228.160.140 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 220.233.166.156 4 reject forwarded support.example.com support.example.com neutral morling.edu.au neutral 198.237.49.53 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 3 reject mailing_list support.example.com none make.es neutral 209.85.160.69 2 reject mailing_list support.example.com none tantiesperanza.com neutral 209.85.160.69 14 reject mailing_list support.example.com none socialwavelength.com neutral 209.85.160.70 6 reject mailing_list support.example.com none dingle.fi neutral 209.85.160.70 5 reject mailing_list support.example.com none id-e.co.jp softfail 209.85.160.70 1 reject mailing_list support.example.com none leveragemarketing.net neutral 209.85.160.71 63 reject mailing_list support.example.com none adtz.com neutral 209.85.160.72 3 reject mailing_list example.com none productmadness.com softfail 209.85.160.72 1 reject mailing_list support.example.com none sundei.com neutral 209.85.160.72 3 reject mailing_list support.example.com none kejmukda.com neutral 209.85.160.72 3 reject mailing_list support.example.com none teenmissions.net neutral 209.85.161.70 14 reject mailing_list support.example.com none graphscience.com pass 209.85.210.71 1 reject mailing_list support.example.com none xanga.com fail 209.85.210.71 10 reject mailing_list support.example.com none irep.co.jp pass 209.85.210.71 9 reject mailing_list support.example.com none blitzlocal.com neutral 209.85.210.72 1 reject mailing_list support.example.com none yogame.com.tw neutral 209.85.212.69 4 reject mailing_list support.example.com none socialwavelength.com neutral 209.85.212.70 7 reject mailing_list support.example.com none gorillacreativemedia.com neutral 209.85.212.72 4 reject mailing_list support.example.com none ping.com.tr neutral 209.85.213.70 1 reject mailing_list support.example.com none epubli.com neutral 209.85.216.69 3 reject mailing_list support.example.com none make.es neutral 209.85.216.71 9 reject mailing_list support.example.com none adtz.com neutral 209.85.216.71 3 reject mailing_list support.example.com none wishpot.com neutral 64.124.27.216 4 reject mailing_list example.com none lists.oodle.com neutral 170.140.52.250 6 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.197 1 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.161.200 1 reject mailing_list support.example.com none espalhe.inf.br neutral 209.85.213.197 9 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.214.197 2 reject mailing_list support.example.com none sv4u.net neutral 209.85.214.199 9 reject mailing_list example.com none memoriki.com neutral 209.85.214.199 6 reject mailing_list support.example.com none fleveo.cz softfail 209.85.214.199 3 reject mailing_list support.example.com none mefeedia.com softfail 209.85.214.199 2 reject mailing_list support.example.com none gramercyone.com neutral 209.85.214.200 4 reject mailing_list support.example.com none baobaz.com neutral 209.85.214.200 2 reject mailing_list support.example.com none joyfort.com neutral 209.85.216.197 4 reject mailing_list support.example.com none stretchdigital.com neutral 74.125.149.201 2 reject mailing_list support.example.com none sami.com neutral 64.18.1.118 1 reject forwarded mailing_list example.com riseup.net pass lists.riseup.net fail 65.55.88.14 1 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 209.85.160.69 1 none forwarded mailing_list support.example.com none adglobal360.com pass 209.85.160.70 2 none forwarded mailing_list support.example.com none webskills.co.uk pass 209.85.210.72 1 none forwarded mailing_list support.example.com none elo7.com pass 209.85.210.72 3 none forwarded mailing_list support.example.com none uberconference.com pass 209.85.212.72 4 none forwarded mailing_list support.example.com none httpool.com pass 209.85.212.72 2 none forwarded mailing_list support.example.com none watercooler-inc.com pass 209.85.213.70 11 none forwarded mailing_list support.example.com none hungrymachine.com pass 74.125.245.90 3 none forwarded mailing_list support.example.com none trada.com pass 74.125.245.96 2 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.245.96 1 none forwarded mailing_list support.example.com none mindcomet.com pass 182.48.49.37 1 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 74.125.82.72 7 reject forwarded mailing_list support.example.com none elogia.net softfail 95.172.88.29 4 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.161.171 12 none forwarded mailing_list support.example.com none fetise.com pass 209.85.213.197 11 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.213.200 2 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.214.198 2 none forwarded mailing_list support.example.com none bigbrands.pl pass 209.85.216.199 18 none forwarded mailing_list support.example.com none fetise.com pass 209.85.217.197 3 none forwarded mailing_list support.example.com none bitsiren.com pass 114.111.98.35 1 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 204.13.164.20 57 reject forwarded mailing_list example.com riseup.net pass lists.riseup.net pass 209.85.160.49 1 reject forwarded mailing_list example.com freshplanet.com pass freshplanet.com pass 209.85.160.69 2 reject forwarded mailing_list support.example.com none epubli.com neutral 209.85.210.69 1 reject forwarded mailing_list support.example.com none endorseliberty.com neutral 209.85.210.70 1 reject forwarded mailing_list support.example.com none baileysonline.com neutral 209.85.210.72 4 reject forwarded mailing_list support.example.com none kejmukda.com neutral 209.85.210.72 1 reject forwarded mailing_list support.example.com none socialwavelength.com neutral 209.85.212.69 2 reject forwarded mailing_list support.example.com none epubli.com neutral 209.85.213.69 3 reject forwarded mailing_list support.example.com none 101.es neutral 209.85.213.70 7 reject forwarded mailing_list support.example.com none socialpoint.es neutral 209.85.215.71 9 reject forwarded mailing_list support.example.com none adtz.com neutral 209.85.215.72 1 reject forwarded mailing_list support.example.com none pidelorapido.com neutral 74.125.149.76 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.85 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.72 1 reject forwarded mailing_list groups.example.com examplemail.com neutral bryanisd.org pass 74.125.245.84 6 reject forwarded mailing_list support.example.com none blabbermouthsocial.com neutral 98.136.218.37 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.40 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.51 6 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.218.55 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.61 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.12 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.15 16 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.28 18 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.28 19 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.41 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.54 16 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.67 12 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.78 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.86 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.93 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.99 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.98 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.43 11 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.47 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.45 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.55 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.56 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 202.45.162.101 12 reject forwarded mailing_list support.example.com none checkfield.co.jp neutral 209.85.160.200 5 reject forwarded mailing_list support.example.com none bluebandmedia.com neutral 209.85.161.182 1 reject forwarded mailing_list support.example.com none socialpoint.es neutral 209.85.161.198 6 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.212.198 3 reject forwarded mailing_list support.example.com none maxpho.com neutral 209.85.213.197 6 reject forwarded mailing_list support.example.com none playerize.com neutral 209.85.214.199 2 reject forwarded mailing_list support.example.com none adbynet.com neutral 209.85.214.199 15 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.214.200 6 reject forwarded mailing_list example.com none iminlikewithyou.com neutral 209.85.215.198 16 reject forwarded mailing_list example.com none schoolfeed.com softfail 209.85.216.172 2 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.216.198 15 reject forwarded mailing_list support.example.com none compasslabs.com neutral 209.85.216.199 1 reject forwarded mailing_list support.example.com none sokrati.com neutral 209.85.217.182 1 reject forwarded mailing_list example.com freshplanet.com pass freshplanet.com pass 212.35.116.242 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr neutral returns.groups.yahoo.com neutral 66.220.144.136 3 reject forwarded mailing_list support.example.com none labz.com.br neutral 66.220.144.137 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 66.220.144.140 1 reject forwarded mailing_list example.com none sendgiftapp.com neutral 66.220.144.141 1 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 66.220.144.146 7 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.148 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.148 9 reject forwarded mailing_list support.example.com none reverbnation.com fail 66.220.144.151 4 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.153 1 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 66.220.144.154 2 reject forwarded mailing_list support.example.com none publik.com.tr softfail 66.220.144.157 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.158 3 reject forwarded mailing_list support.example.com none netseer.com softfail 66.220.155.144 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.155.151 1 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 66.220.155.153 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.140 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.144 2 reject forwarded mailing_list support.example.com none dafiti.com.br softfail 69.171.232.150 1 reject forwarded mailing_list support.example.com none wearesocial.net neutral 69.171.232.151 9 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 69.171.232.153 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.156 4 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.156 3 reject forwarded mailing_list support.example.com none graphscience.com softfail 74.125.149.140 2 reject forwarded mailing_list support.example.com none sponsoredlinx.com neutral 74.125.149.203 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.149.211 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 98.136.219.107 2 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.136.219.114 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.127 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.129 22 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.132 24 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.143 4 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.158 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.158 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.182 29 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.211 4 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.211 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.227 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.227 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.239 8 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.214.239 17 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.101 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.215.179 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.187 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.246 1 reject forwarded mailing_list reply.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.215.248 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.103 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.165.125 15 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.141 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.155 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.156 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.161 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.165 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.139.165.171 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 114.111.116.121 10 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp pass 209.85.161.198 2 none trusted_forwarder mailing_list support.example.com ahi.cl pass support.example.com pass ahi.cl pass support.example.com pass 209.85.161.200 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.216.199 2 none trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 209.85.210.61 1 none forwarded trusted_forwarder mailing_list example.com googlegroups.com pass example.com pass googlegroups.com pass example.com pass 209.85.210.69 2 none forwarded trusted_forwarder mailing_list support.example.com connectionpoint.ca pass support.example.com pass connectionpoint.ca pass support.example.com pass 209.85.160.198 1 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 209.85.214.197 3 none forwarded trusted_forwarder mailing_list support.example.com improvementdirect.com pass support.example.com pass improvementdirect.com pass support.example.com pass 209.85.214.200 2 none forwarded trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de pass support.example.com pass 66.220.144.140 4 none forwarded trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com softfail example.com pass 66.220.144.155 1 none forwarded trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de softfail support.example.com pass 69.171.232.147 1 none forwarded trusted_forwarder mailing_list support.example.com rathbonedigital.com pass support.example.com pass rathbonedigital.com softfail support.example.com pass 69.171.232.152 4 none forwarded trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com softfail example.com pass 69.171.232.155 2 none forwarded trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 64.18.0.45 1 none example.com example.com pass example.com fail 64.18.1.62 2 none support.example.com support.example.com pass support.example.com fail 64.18.0.109 1 none support.example.com support.example.com pass support.example.com fail 64.18.0.214 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.122 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.123 2 none support.example.com support.example.com pass support.example.com fail 64.18.1.124 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.128 2 none support.example.com support.example.com pass support.example.com fail 64.18.1.144 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.43 1 reject example.com none example.com fail 64.18.1.54 2 reject example.com none example.com fail 64.18.1.71 1 reject example.com none example.com fail 208.97.132.5 1 none support.example.com support.example.com pass support.example.com fail 66.11.225.78 1 none example.com example.com pass missyqs.com neutral 216.38.5.13 1 reject example.com none example.com fail 62.27.57.65 1 reject example.com none fagms.de neutral 64.18.1.146 1 reject example.com none example.com fail 64.18.1.154 1 reject example.com none example.com fail 64.18.1.156 1 reject example.com none example.com fail 64.5.53.250 1 reject example.com none example.com fail 66.11.233.2 2 reject example.com none example.com fail 70.32.82.94 2 reject example.com none example.com fail 72.1.205.60 72 reject reply.example.com none reply.example.com neutral 74.54.97.18 1 reject example.com example.com fail example.com fail 77.88.46.21 1 reject reply.example.com none forward5.mail.yandex.net neutral 91.103.1.84 1 reject mx.example.com none readnotify.com pass 139.78.133.15 1 none example.com example.com pass example.com fail 171.67.219.72 1 none example.com example.com pass example.com fail 199.58.186.43 1 none example.com example.com pass example.com fail 212.227.17.10 2 none support.example.com support.example.com pass srs.kundenserver.de pass 66.220.157.50 4 none example.com spc.example.com pass example.com pass 66.220.157.65 342 none example.com example.com pass example.com pass 66.220.157.71 369 none example.com example.com pass example.com pass 66.220.157.72 282 none example.com example.com pass example.com pass 66.220.157.73 308 none example.com example.com pass example.com pass 66.220.157.74 311 none example.com example.com pass example.com pass 66.220.157.80 3 none example.com example.com fail example.com pass 66.220.157.86 2 none example.com example.com fail example.com pass 66.220.157.88 6 none example.com example.com fail example.com pass 66.220.157.91 4 none example.com example.com fail example.com pass 66.220.157.94 320 none example.com example.com pass example.com pass 69.171.244.66 447 none example.com example.com pass example.com pass 69.171.244.68 7 none example.com example.com fail example.com pass 69.171.244.73 1 none example.com example.com pass example.com pass 69.171.244.74 1 none example.com example.com fail example.com pass 72.32.253.113 1 none support.example.com support.example.com pass support.example.com fail 98.129.184.12 1 none support.example.com support.example.com pass support.example.com fail 129.128.5.19 6 reject example.com none example.com fail 142.35.129.6 1 reject reply.example.com none reply.example.com neutral 193.180.3.24 3 reject reply.example.com examplemail.com neutral reply.example.com neutral 202.92.144.3 106 reject example.com none example.com fail 204.14.64.15 1 reject example.com none example.com fail 208.105.2.66 3 reject reply.example.com examplemail.com neutral reply.example.com neutral 208.82.4.209 1 reject example.com none site.careerbuilder.com pass 210.1.61.132 1 reject example.com none amirooms.com pass 23.24.212.28 8 reject reply.example.com none reply.example.com neutral 50.23.128.26 1 reject example.com none example.com fail 59.188.3.147 4 reject example.com none marjunelson.net neutral 62.76.176.73 2 reject example.com none example.com fail 66.84.42.158 20 reject example.com none example.com fail 67.21.176.17 12 reject example.com none example.com fail 69.73.177.90 1 reject example.com none server7.rxpg.com neutral 69.74.29.194 5 reject reply.example.com none reply.example.com neutral 69.74.29.194 36 reject groups.example.com none groups.example.com neutral 74.220.209.9 1 reject example.com none host172.hostmonster.com neutral 74.54.42.194 1 reject example.com none example.com fail 84.16.68.109 1 reject example.com none freestudios.ch pass 84.16.68.111 1 reject example.com none freestudios.ch pass 85.13.144.43 1 reject example.com none ghs-finnentrop.de neutral 95.172.88.26 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 95.172.88.29 5 reject reply.example.com examplemail.com neutral reply.example.com neutral 128.120.32.132 1 none example.com example.com pass example.com fail 148.206.157.45 1 none example.com example.com pass example.com fail 61.122.229.145 1 none example.com example.com pass kanri056.ktk.gr.jp neutral 66.220.144.143 54 none example.com example.com neutral example.com pass 66.220.144.144 45 none example.com example.com neutral example.com pass 66.220.144.146 1183 none support.example.com support.example.com pass support.example.com pass 66.220.144.147 53 none example.com example.com neutral example.com pass 66.220.144.156 55 none example.com example.com neutral example.com pass 66.220.155.141 367 none support.example.com support.example.com pass support.example.com pass 66.220.155.143 497 none support.example.com support.example.com pass support.example.com pass 66.220.155.148 451 none support.example.com support.example.com pass support.example.com pass 66.220.155.152 8 none example.com example.com neutral example.com pass 66.220.155.155 4 none example.com example.com neutral example.com pass 69.171.232.138 49 none example.com example.com neutral example.com pass 69.171.232.142 58 none example.com example.com neutral example.com pass 69.171.232.144 46 none example.com example.com neutral example.com pass 69.171.232.147 1702 none support.example.com support.example.com pass support.example.com pass 69.171.232.150 1744 none support.example.com support.example.com pass support.example.com pass 69.171.232.152 55 none example.com example.com neutral example.com pass 69.171.232.153 1647 none support.example.com support.example.com pass support.example.com pass 69.171.232.156 43 none example.com example.com neutral example.com pass 69.171.232.159 1673 none support.example.com support.example.com pass support.example.com pass 130.111.32.94 13 reject reply.example.com examplemail.com neutral reply.example.com neutral 131.91.129.14 5 reject support.example.com support.example.com fail support.example.com fail 134.84.119.32 1 reject example.com none example.com fail 174.121.38.34 1 reject example.com none example.com fail 174.143.67.26 12 reject example.com none example.com fail 176.31.100.11 29 reject example.com none example.com fail 178.79.132.26 9 reject example.com none example.com fail 195.18.176.59 14 reject example.com none example.com fail 203.58.14.154 5 reject example.com none example.com fail 213.162.208.2 2 reject example.com none server.iciserver.com neutral 216.33.127.87 1 reject example.com none example.com fail 219.94.162.55 9 reject example.com none example.com fail 38.116.204.35 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 65.39.221.213 1 reject example.com none example.com fail 66.220.157.25 1989 reject mx.example.com none smtpin.mx.example.com neutral 67.222.51.169 1 reject example.com none box756.bluehost.com neutral 69.171.244.43 861 reject mx.example.com none smtpin.mx.example.com neutral 69.64.155.195 1 reject example.com none example.com fail 70.86.182.130 1 reject example.com none example.com fail 74.123.208.11 33 reject example.com none example.com fail 79.170.251.42 5 reject example.com none example.com fail 87.106.68.161 1 reject example.com none example.com fail 89.149.242.26 7 reject example.com none example.com fail 91.207.51.170 1 reject example.com none example.com fail 94.246.88.138 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 128.103.229.181 1 none example.com example.com pass example.com fail 128.164.127.227 2 none support.example.com support.example.com pass support.example.com fail 141.211.14.132 1 reject mx.example.com none christine.mr.itd.umich.edu neutral 167.206.67.163 5 reject reply.example.com none reply.example.com neutral 182.50.132.193 1 reject example.com none sg2nlhg022.shr.prod.sin2.secureserver.net neutral 182.50.132.194 1 reject example.com none sg2nlhg021.shr.prod.sin2.secureserver.net neutral 184.172.186.21 2 reject example.com none example.com fail 195.128.121.26 4 reject example.com none example.com fail 199.168.140.50 2 reject example.com none example.com fail 202.69.110.173 2 reject example.com none electra.rumahweb.com neutral 204.202.242.86 1 reject example.com none example.com fail 205.186.136.49 16 reject example.com none example.com fail 207.97.245.130 2 reject example.com none example.com fail 207.97.245.135 1 reject example.com none example.com fail 207.97.245.146 1 reject example.com none example.com fail 207.97.245.186 1 reject example.com none example.com fail 208.117.48.212 1 reject example.com pgtb.me pass email.pgtb.me pass 210.141.223.38 2 reject reply.example.com examplemail.com neutral reply.example.com neutral 63.141.144.136 1 reject example.com none example.com fail 66.220.144.151 497 reject m.example.com m.example.com neutral m.example.com neutral 66.220.144.158 1 reject xmail.example.com none intmgw001.snc4.example.com neutral 69.171.232.136 490 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.140 515 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.159 510 reject m.example.com m.example.com neutral m.example.com neutral 69.171.240.250 6 reject example.com none example.com fail 72.167.234.242 6 reject example.com none onlineserver.cc neutral 74.125.149.117 1 reject mx.example.com none psmtp.com neutral 80.244.248.170 4 reject example.com none example.com fail 95.108.130.120 1 reject groups.example.com none forward13.mail.yandex.net neutral 121.254.168.204 1 reject example.com none example.com fail 173.161.123.219 11 reject example.com none example.com fail 174.121.179.103 1 reject example.com none example.com fail 184.173.195.215 1 reject example.com none example.com fail 195.245.116.145 10 reject example.com none example.com fail 205.207.121.146 2 reject support.example.com support.example.com neutral support.example.com fail 205.213.113.117 15 reject reply.example.com none mail.milton.k12.wi.us neutral 209.217.234.175 9 reject example.com none saturn.nswebhost.com neutral 213.188.129.253 1 reject example.com none mtx6.mbn1.net neutral 222.124.179.201 18 reject 1.example.com none 1.example.com neutral 50.57.0.7 4 none forwarded example.com example.com pass example.com fail 18.7.68.30 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.80.5 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.97.97.5 3 none forwarded support.example.com support.example.com pass support.example.com fail 77.72.0.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.0.129.6 1 none forwarded example.com example.com pass example.com fail 202.67.9.34 1 none forwarded support.example.com support.example.com pass gmail.com neutral 209.68.2.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.11.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.97.97.56 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.54.51.88 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.54.61.80 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.12 3 none forwarded example.com example.com pass hotmail.com pass 65.55.34.21 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.34.25 1 none forwarded support.example.com support.example.com pass live.fr pass 65.55.90.20 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.28 2 none forwarded support.example.com support.example.com pass hotmail.com pass 66.96.186.6 1 none forwarded support.example.com support.example.com pass jaysemko.com pass 66.96.190.4 1 none forwarded support.example.com support.example.com pass macktaylorlaw.com pass 69.168.84.2 3 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.19.49 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.22.67 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.87.28.63 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.96.30.32 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.75.76.44 1 none forwarded support.example.com support.example.com pass post.cz pass 80.67.18.15 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.35 4 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.37 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.29.38 1 none forwarded support.example.com support.example.com pass support.example.com fail 18.7.68.36 13 reject forwarded example.com none example.com fail 64.78.52.9 4 reject forwarded support.example.com support.example.com neutral veteransunited.com pass 69.94.80.9 6 reject forwarded example.com none example.com fail 142.58.101.3 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.203.2.22 2 none forwarded support.example.com support.example.com pass gmail.com neutral 188.165.52.7 3 none forwarded support.example.com support.example.com pass support.example.com fail 189.38.95.97 1 none forwarded support.example.com support.example.com pass support.example.com fail 201.76.49.84 1 none forwarded support.example.com support.example.com pass support.example.com fail 211.45.37.30 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.4.138.10 1 none forwarded example.com example.com pass telefonica.net pass 24.71.223.10 1 none forwarded support.example.com support.example.com pass gmail.com neutral 59.106.13.71 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.136.55.11 8 none forwarded support.example.com support.example.com pass support.example.com fail 64.20.51.234 1 none forwarded support.example.com support.example.com pass fox.trouble-free.net neutral 64.26.60.138 2 none forwarded support.example.com support.example.com pass support.example.com fail 65.55.116.16 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.16 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.17 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.18 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.34 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.116.38 1 none forwarded support.example.com support.example.com pass hotmail.co.uk pass 65.55.116.42 4 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.43 5 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.34.144 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.61.218.58 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.35.240.32 3 none forwarded support.example.com support.example.com pass support.example.com fail 66.39.65.160 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.96.184.11 1 none forwarded example.com example.com pass villamichel.net pass 66.96.187.14 1 none forwarded support.example.com support.example.com pass kaamasanjose.com pass 66.96.188.10 1 none forwarded support.example.com support.example.com pass try2run.com pass 66.96.188.12 1 none forwarded support.example.com support.example.com pass i-o-s.net pass 66.96.188.19 1 none forwarded support.example.com support.example.com pass melengland.com pass 66.96.190.13 1 none forwarded support.example.com support.example.com pass try2run.com pass 66.96.190.20 1 none forwarded support.example.com support.example.com pass kemun.co.uk pass 67.228.55.98 1 none forwarded support.example.com support.example.com pass gmail.com neutral 69.175.29.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.175.60.10 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.175.69.94 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.49.111.65 1 none forwarded example.com example.com pass example.com fail 69.89.16.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.20.196 1 none forwarded example.com example.com pass example.com fail 70.38.42.250 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.84.186.69 4 none forwarded example.com example.com pass example.com fail 72.34.42.183 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.47.222.25 1 none forwarded support.example.com support.example.com pass gmail.com neutral 72.51.46.251 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.45 2 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.46 2 none forwarded support.example.com support.example.com pass aradium.com neutral 74.125.82.47 1 none forwarded support.example.com support.example.com pass scirra.com pass 74.125.82.50 1 none forwarded support.example.com support.example.com pass businessleads.com neutral 74.125.82.51 6 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.51 1 none forwarded support.example.com support.example.com pass club-m.org neutral 74.125.82.51 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 74.125.82.54 1 none forwarded support.example.com support.example.com pass glmalibu.com temperror 80.93.157.18 1 none forwarded example.com example.com pass example.com fail 81.0.214.146 4 none forwarded support.example.com support.example.com pass support.example.com fail 84.2.227.144 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.93.165.25 1 none forwarded support.example.com support.example.com pass unikum.sk neutral 87.106.86.62 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.136.61.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.75.234.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 95.174.22.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.66 1 none forwarded example.com example.com pass example.com fail 98.139.91.91 2 none forwarded support.example.com support.example.com pass support.example.com fail 194.90.9.21 1 reject forwarded example.com none example.com fail 206.51.22.2 1 reject forwarded example.com none example.com fail 213.75.39.4 1 reject forwarded example.com none example.com fail 50.22.11.11 1 reject forwarded example.com none example.com fail 50.22.11.29 1 reject forwarded example.com none example.com fail 64.18.0.144 2 reject forwarded support.example.com support.example.com neutral exprod5ob103.obsmtp.com neutral 64.18.0.148 2 reject forwarded support.example.com support.example.com neutral exprod5ob117.obsmtp.com neutral 64.18.0.179 2 reject forwarded support.example.com support.example.com neutral exprod5ob105.obsmtp.com neutral 64.18.1.126 1 reject forwarded example.com none example.com fail 64.18.1.135 1 reject forwarded example.com none example.com fail 64.18.1.205 1 reject forwarded example.com none example.com fail 64.52.192.6 22 reject forwarded example.com none example.com fail 64.78.52.13 1 reject forwarded support.example.com support.example.com neutral veteransunited.com pass 64.78.52.14 1 reject forwarded support.example.com support.example.com neutral veteransunited.com pass 65.55.88.12 1 reject forwarded support.example.com support.example.com fail hashemi.co.uk pass 65.55.88.13 1 reject forwarded support.example.com support.example.com fail hashemi.co.uk pass 69.39.47.46 1 reject forwarded example.com none example.com fail 106.10.151.31 1 none forwarded example.com example.com pass example.com fail 111.86.156.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 117.55.227.22 2 none forwarded support.example.com support.example.com pass support.example.com fail 122.201.73.23 1 none forwarded support.example.com support.example.com pass support.example.com fail 122.212.34.82 1 none forwarded support.example.com support.example.com pass support.example.com fail 124.40.30.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 125.53.25.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.241.93.19 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.65.64.204 1 none forwarded support.example.com support.example.com pass support.example.com fail 154.33.63.129 2 none forwarded support.example.com support.example.com pass support.example.com fail 168.143.50.70 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.0.137.191 4 none forwarded support.example.com support.example.com pass support.example.com fail 178.239.85.12 1 none forwarded support.example.com support.example.com pass srs.bis7.eu.blackberry.com pass 182.239.50.39 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.116.35.54 2 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.32.36 2 none forwarded support.example.com support.example.com pass support.example.com fail 193.107.28.25 1 none forwarded support.example.com support.example.com pass gmail.com neutral 196.33.227.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 200.98.199.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 202.181.99.28 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.131.87.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.76.175.67 1 none forwarded support.example.com support.example.com pass support.example.com fail 206.214.210.6 1 none forwarded support.example.com support.example.com pass gmail.com neutral 208.109.80.59 1 none forwarded example.com example.com pass example.com fail 208.72.237.18 1 none forwarded support.example.com support.example.com pass bounce2.pobox.com pass 209.157.71.84 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.43 1 none forwarded support.example.com support.example.com pass nicedeal.sg softfail 209.85.160.47 1 none forwarded support.example.com support.example.com pass idm.vn neutral 209.85.160.49 1 none forwarded support.example.com support.example.com pass utphilly.com pass 209.85.160.49 1 none forwarded support.example.com support.example.com pass lankahost.net pass 209.85.160.52 1 none forwarded support.example.com support.example.com pass tessera.gr softfail 209.85.160.52 1 none forwarded support.example.com support.example.com pass stanford.kr neutral 209.85.160.52 1 none forwarded support.example.com support.example.com pass manchevski.com neutral 209.85.210.44 1 none forwarded support.example.com support.example.com pass dailygaypon.com fail 209.85.210.46 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.46 1 none forwarded support.example.com support.example.com pass peagreensolutions.com neutral 209.85.210.47 1 none forwarded support.example.com support.example.com pass frubis.com neutral 209.85.210.52 1 none forwarded support.example.com support.example.com pass coatescrew.com neutral 209.85.212.42 1 none forwarded example.com example.com pass unab.edu.co softfail 209.85.212.43 1 none forwarded example.com example.com pass palringo.com pass 209.85.212.43 3 none forwarded support.example.com support.example.com pass ags.edu neutral 209.85.212.43 1 none forwarded support.example.com support.example.com pass krooga.com neutral 209.85.212.43 3 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.44 2 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.45 1 none forwarded support.example.com support.example.com pass slikenaplatnu.hr neutral 209.85.212.45 3 none forwarded support.example.com support.example.com pass rightplacemedia.com neutral 209.85.212.47 1 none forwarded example.com example.com pass archsociety.com neutral 209.85.212.47 1 none forwarded support.example.com support.example.com pass targetedsocial.com neutral 209.85.212.49 2 none forwarded support.example.com support.example.com pass sgarrison.com neutral 209.85.212.49 1 none forwarded support.example.com support.example.com pass cattleannies.com softfail 209.85.212.53 1 none forwarded support.example.com support.example.com pass footzyrolls.com neutral 209.85.213.41 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.41 1 none forwarded support.example.com support.example.com pass parkforprofit.com neutral 209.85.213.45 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.45 4 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.45 1 none forwarded support.example.com support.example.com pass carolinabeachapparel.com neutral 209.85.213.46 1 none forwarded support.example.com support.example.com pass nurturestore.co.uk neutral 209.85.213.47 1 none forwarded support.example.com support.example.com pass offerna.com softfail 209.85.213.47 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.51 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.52 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.53 1 none forwarded support.example.com support.example.com pass dadis.lt neutral 209.85.213.54 1 none forwarded support.example.com support.example.com pass i-reductions.ch fail 209.85.214.41 5 none forwarded example.com example.com pass islamicevents.sg neutral 209.85.214.41 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.41 1 none forwarded support.example.com support.example.com pass felde.me neutral 209.85.214.42 1 none forwarded support.example.com support.example.com pass lettucebeekids.org neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass thecomplete.me neutral 209.85.214.47 1 none forwarded support.example.com support.example.com pass shopbot-inc.com neutral 209.85.214.51 1 none forwarded example.com example.com pass bearshare.com pass 209.85.214.51 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.52 1 none forwarded support.example.com support.example.com pass monstey.com neutral 209.85.214.53 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.53 2 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.53 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.215.43 1 none forwarded support.example.com support.example.com pass akiza.com neutral 209.85.215.43 9 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.46 1 none forwarded support.example.com support.example.com pass teefury.com pass 209.85.215.47 1 none forwarded support.example.com support.example.com pass socialbugz.com neutral 209.85.215.47 1 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.48 1 none forwarded support.example.com support.example.com pass erudio.si neutral 209.85.215.48 1 none forwarded support.example.com support.example.com pass online.net.tw neutral 209.85.215.48 2 none forwarded support.example.com support.example.com pass bothbrands.com neutral 209.85.215.49 1 none forwarded example.com example.com pass gmail.com pass 209.85.215.49 1 none forwarded support.example.com support.example.com pass luhho.com neutral 209.85.215.50 1 none forwarded support.example.com support.example.com pass istanbul.com neutral 209.85.215.51 3 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.52 2 none forwarded support.example.com support.example.com pass smartdigital.com neutral 209.85.215.53 1 none forwarded example.com example.com pass ryzing.com neutral 209.85.216.42 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.44 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.44 4 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.216.47 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.51 1 none forwarded support.example.com support.example.com pass 5en1.com pass 209.85.216.52 1 none forwarded support.example.com support.example.com pass mcavenue.com pass 209.85.216.52 1 none forwarded support.example.com support.example.com pass ilanferdman.com neutral 209.85.216.53 1 none forwarded support.example.com support.example.com pass ppc-consulting.cz neutral 210.157.22.44 2 none forwarded support.example.com support.example.com pass support.example.com fail 212.143.218.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.69.178.10 1 none forwarded example.com example.com pass example.com fail 213.184.32.85 1 none forwarded support.example.com support.example.com pass eesti.ee neutral 217.73.227.10 2 none forwarded support.example.com support.example.com pass support.example.com fail 219.94.162.24 2 none forwarded support.example.com support.example.com pass support.example.com fail 41.203.18.127 5 none forwarded support.example.com support.example.com pass support.example.com fail 50.61.244.236 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.129.252.11 3 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.157.16 3 none forwarded support.example.com support.example.com pass support.example.com fail 62.149.157.23 2 none forwarded support.example.com support.example.com pass support.example.com fail 64.71.188.123 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.77 1 none forwarded support.example.com support.example.com pass fbbuyer.com pass 65.254.253.90 1 none forwarded support.example.com support.example.com pass pulsechecker.com neutral 67.228.83.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.160.60.176 3 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.211.220 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.35 4 none forwarded example.com example.com pass bounce.secureserver.net pass 72.167.218.35 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 74.125.149.76 1 none forwarded example.com example.com pass artofliving.org permerror 74.125.149.84 1 none forwarded support.example.com support.example.com pass shinenorth.com neutral 74.125.245.74 1 none forwarded example.com example.com pass diversityscholars.org softfail 74.125.82.171 1 none forwarded support.example.com support.example.com pass germinal.es neutral 74.125.82.171 1 none forwarded support.example.com support.example.com pass eng.vitrue.com neutral 74.125.82.173 1 none forwarded support.example.com support.example.com pass totophoto.com pass 74.125.82.175 1 none forwarded support.example.com support.example.com pass netmarketer.sk neutral 74.125.82.176 1 none forwarded support.example.com support.example.com pass inst.lecuisinier.org neutral 74.125.82.180 5 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.182 1 none forwarded support.example.com support.example.com pass christinayugai.com neutral 74.220.223.77 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.61 1 none forwarded support.example.com support.example.com pass support.example.com fail 79.140.142.20 3 none forwarded support.example.com support.example.com pass support.example.com fail 79.170.40.209 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.57.200.113 2 none forwarded support.example.com support.example.com pass support.example.com fail 84.34.147.249 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.214.234.14 1 none forwarded example.com example.com pass example.com fail 85.233.160.20 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.233.188.30 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.255.13.191 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.198.169.57 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.124.105.18 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.186.146.12 1 none forwarded support.example.com support.example.com pass support.example.com fail 95.130.76.117 1 none forwarded support.example.com support.example.com pass support.example.com fail 97.74.135.171 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.129.184.12 8 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.118 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.209 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.230 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.236 1 none forwarded support.example.com support.example.com pass orange.pl fail 98.139.52.247 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.241 1 none forwarded support.example.com support.example.com pass support.example.com fail 136.167.2.48 1 reject forwarded example.com none example.com fail 17.148.16.96 1 reject forwarded support.example.com support.example.com neutral debrarogerscampaign.com neutral 177.70.5.218 1 reject forwarded example.com none hosting3.isun.biz neutral 201.20.64.34 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 203.63.5.140 1 reject forwarded example.com none example.com fail 208.68.17.92 2 reject forwarded example.com none example.com fail 208.92.44.79 2 reject forwarded example.com none wired.com pass 216.229.0.49 1 reject forwarded example.com none example.com fail 217.16.6.151 3 reject forwarded example.com none example.com fail 24.96.45.186 1 reject forwarded example.com none example.com fail 4.59.182.110 1 reject forwarded example.com none example.com fail 46.163.122.4 1 reject forwarded example.com none example.com fail 50.23.22.207 1 reject forwarded example.com none smtp-corp-01.aweber.com softfail 59.106.13.71 30 reject forwarded example.com none example.com fail 62.48.32.253 1 reject forwarded example.com none qnt.it pass 64.124.89.66 40 reject forwarded example.com example.com neutral example.com fail 64.15.141.68 1 reject forwarded example.com none example.com fail 64.15.205.32 1 reject forwarded example.com none example.com fail 64.244.59.37 1 reject forwarded support.example.com support.example.com fail support.example.com fail 65.55.116.32 2 reject forwarded example.com example.com neutral hotmail.com pass 65.55.116.44 1 reject forwarded m.example.com m.example.com neutral live.com pass 66.185.20.66 1 reject forwarded example.com none example.com fail 66.49.167.77 37 reject forwarded example.com none example.com fail 67.201.32.27 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 69.89.27.121 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 72.20.98.126 5 reject forwarded example.com none example.com fail 74.208.4.194 7 reject forwarded example.com none srs.perfora.net neutral 74.220.218.5 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.219.9 1 reject forwarded example.com none example.com fail 74.81.68.170 1 reject forwarded example.com none example.com fail 81.88.50.242 1 reject forwarded example.com none example.com fail 81.91.196.18 55 reject forwarded example.com none example.com fail 106.10.151.115 1 none forwarded support.example.com support.example.com pass support.example.com fail 115.112.230.58 1 none forwarded support.example.com support.example.com pass support.example.com fail 122.201.94.185 1 none forwarded support.example.com support.example.com pass support.example.com fail 125.206.187.72 1 none forwarded support.example.com support.example.com pass xnozacli1-40gmail-2ecom.xinfo-2dbounce-2bcf076cx-2eaeazeint5u-40support-2eexample-2eco.x.xm.ocnadm.ocn.ad.jp pass 128.121.31.208 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.187.16.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.14.133 5 none forwarded support.example.com support.example.com pass kcjones.org neutral 157.205.230.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 163.43.141.161 1 none forwarded support.example.com support.example.com pass support.example.com fail 169.232.46.167 1 none forwarded support.example.com support.example.com pass support.example.com fail 169.232.47.161 2 none forwarded support.example.com support.example.com pass support.example.com fail 173.201.192.63 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 174.120.29.194 2 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.44.194 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.208.39.167 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.22.217.146 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.238.217.28 1 none forwarded support.example.com support.example.com pass co.allcom.hu neutral 182.50.132.195 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.154.165.18 1 none forwarded support.example.com support.example.com pass support.example.com fail 187.45.216.197 1 none forwarded support.example.com support.example.com pass pleskwin67.hospedagemdesites.ws pass 195.47.247.148 1 none forwarded support.example.com support.example.com pass support.example.com fail 205.134.253.37 1 none forwarded support.example.com support.example.com pass support.example.com fail 206.188.198.65 3 none forwarded support.example.com support.example.com pass support.example.com fail 207.58.151.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.217.78.167 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.217.78.169 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.171 1 none forwarded support.example.com support.example.com pass asaggaf.com fail 209.85.160.174 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.179 1 none forwarded support.example.com support.example.com pass searchonprescott.com neutral 209.85.161.169 4 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.161.170 1 none forwarded support.example.com support.example.com pass mendozasocial.com neutral 209.85.161.173 1 none forwarded support.example.com support.example.com pass sadda.jo pass 209.85.161.174 1 none forwarded support.example.com support.example.com pass jmcgs.com neutral 209.85.161.174 1 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.161.176 1 none forwarded support.example.com support.example.com pass uplinked.us neutral 209.85.161.177 1 none forwarded support.example.com support.example.com pass techedge.it pass 209.85.161.178 1 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.161.179 1 none forwarded example.com example.com pass globo.com pass 209.85.161.179 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.161.180 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.161.181 1 none forwarded support.example.com support.example.com pass teecycle.org neutral 209.85.212.169 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.169 1 none forwarded support.example.com support.example.com pass pohunek.cz neutral 209.85.212.171 1 none forwarded example.com example.com pass topmallgroup.com neutral 209.85.212.177 1 none forwarded support.example.com support.example.com pass duffysrehab.com neutral 209.85.212.178 1 none forwarded support.example.com support.example.com pass nozio.com neutral 209.85.212.179 1 none forwarded example.com example.com pass gmail.com pass 209.85.213.172 1 none forwarded support.example.com support.example.com pass tas-emp.com neutral 209.85.213.174 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.175 2 none forwarded support.example.com support.example.com pass cat.com.my neutral 209.85.213.175 1 none forwarded support.example.com support.example.com pass peguine.com neutral 209.85.213.176 1 none forwarded example.com example.com pass gmail.com pass 209.85.213.176 1 none forwarded support.example.com support.example.com pass startupedmonton.com neutral 209.85.213.177 1 none forwarded support.example.com support.example.com pass neaterpets.com neutral 209.85.213.178 1 none forwarded support.example.com support.example.com pass healthcmi.com pass 209.85.213.179 1 none forwarded support.example.com support.example.com pass zlatebobule.cz neutral 209.85.213.180 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.213.180 1 none forwarded support.example.com support.example.com pass soberlane.com neutral 209.85.213.182 1 none forwarded support.example.com support.example.com pass spoka.net softfail 209.85.213.182 1 none forwarded support.example.com support.example.com pass vilaboa.cl neutral 209.85.214.169 2 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.169 2 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.214.169 1 none forwarded support.example.com support.example.com pass unifiedsocial.com softfail 209.85.214.170 3 none forwarded support.example.com support.example.com pass simplyintense.com softfail 209.85.214.171 1 none forwarded support.example.com support.example.com pass asu.edu neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass fuks.co.il neutral 209.85.214.171 1 none forwarded support.example.com support.example.com pass rebussoft.com softfail 209.85.214.171 1 none forwarded support.example.com support.example.com pass giganteurbano.com.br softfail 209.85.214.172 2 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass ieventures.in pass 209.85.214.173 3 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.175 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.175 1 none forwarded support.example.com support.example.com pass meusushi.com.br neutral 209.85.214.175 1 none forwarded support.example.com support.example.com pass pride.hofstra.edu neutral 209.85.214.177 2 none forwarded support.example.com support.example.com pass sandorszabolcs.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass bartlome.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass digidemon.eu neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass bitrhymes.com neutral 209.85.214.178 1 none forwarded support.example.com support.example.com pass brunotorres.net neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass bodyandmindguam.com neutral 209.85.214.181 1 none forwarded example.com example.com pass ryzing.com neutral 209.85.214.181 2 none forwarded support.example.com support.example.com pass blitzlocal.com neutral 209.85.214.182 2 none forwarded example.com example.com pass kixeye.com pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.214.182 3 none forwarded support.example.com support.example.com pass yidio.com neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass phanfare.com pass 209.85.214.182 1 none forwarded support.example.com support.example.com pass digidemon.eu neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass jeuxapresski.com neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass sandorszabolcs.com neutral 209.85.215.170 6 none forwarded support.example.com support.example.com pass caring.com pass 209.85.216.173 1 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.216.174 1 none forwarded support.example.com support.example.com pass ilanferdman.com neutral 209.85.216.174 1 none forwarded support.example.com support.example.com pass originallgb.com neutral 209.85.216.174 1 none forwarded support.example.com support.example.com pass jackhakimian.com neutral 209.85.216.174 1 none forwarded support.example.com support.example.com pass internationalpreschoolcurriculum.com neutral 209.85.216.175 1 none forwarded support.example.com support.example.com pass pontconsulting.ro neutral 209.85.216.176 2 none forwarded support.example.com support.example.com pass socialline.kr pass 209.85.216.176 2 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.216.176 1 none forwarded support.example.com support.example.com pass alphaboost.com softfail 209.85.216.179 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.182 1 none forwarded example.com example.com pass cemail.ca neutral 209.85.216.182 1 none forwarded support.example.com support.example.com pass grooves.co.jp pass 209.85.217.169 2 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.171 1 none forwarded support.example.com support.example.com pass wigile.com fail 209.85.217.171 1 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.172 1 none forwarded support.example.com support.example.com pass macintoshhome.ca neutral 209.85.217.173 1 none forwarded support.example.com support.example.com pass macintoshhome.ca neutral 209.85.217.176 1 none forwarded support.example.com support.example.com pass igy.be neutral 209.85.217.177 1 none forwarded support.example.com support.example.com pass privepass.com softfail 209.85.217.179 1 none forwarded support.example.com support.example.com pass alumni.stanford.edu pass 209.85.217.181 3 none forwarded support.example.com support.example.com pass hilifeinteractive.com pass 209.85.217.181 1 none forwarded support.example.com support.example.com pass spiritactivewear.com neutral 209.85.217.182 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.220.170 1 none forwarded support.example.com support.example.com pass ilovedeals.sg softfail 209.85.220.180 1 none forwarded support.example.com support.example.com pass makemereach.com neutral 210.172.144.38 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.235.157.33 2 none forwarded support.example.com support.example.com pass support.example.com fail 211.134.181.74 2 none forwarded example.com example.com pass example.com fail 212.113.143.14 2 none forwarded support.example.com support.example.com pass support.example.com fail 212.175.35.249 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.165.64.100 2 none forwarded example.com example.com pass gmx.de pass 213.186.55.205 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.113.62.167 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.146.183.93 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.160.168.56 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.166.95.146 1 none forwarded support.example.com support.example.com pass support.example.com fail 217.19.151.167 1 none forwarded support.example.com support.example.com pass support.example.com fail 219.166.139.98 2 none forwarded support.example.com support.example.com pass support.example.com fail 63.247.133.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.139 1 none forwarded support.example.com support.example.com pass cwdancelessons.net pass 66.220.144.144 6 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.145 5 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.137 1 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.144 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.150 4 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.153 4 none forwarded support.example.com support.example.com pass support.example.com pass 68.233.167.205 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.232.135 10 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.144 11 none forwarded support.example.com support.example.com pass support.example.com pass 74.220.203.234 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.214.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 77.238.189.213 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.149.228.210 1 none forwarded support.example.com support.example.com pass jonasplitt.de neutral 82.223.190.144 2 none forwarded support.example.com support.example.com pass gmail.com neutral 85.214.145.229 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.248.229.199 2 none forwarded support.example.com support.example.com pass support.example.com fail 94.125.177.100 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.136.217.157 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.173.1.130 1 reject forwarded example.com none example.com fail 132.206.27.52 1 reject forwarded example.com none example.com fail 141.211.90.69 1 reject forwarded example.com none example.com fail 17.148.16.102 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 174.132.58.34 1 reject forwarded example.com none example.com fail 178.213.7.138 87 reject forwarded example.com none example.com fail 184.173.7.166 1 reject forwarded example.com none example.com fail 186.233.184.4 1 reject forwarded example.com none sus79.suidc.com neutral 187.0.216.164 1 reject forwarded example.com none ancar.com.br neutral 189.38.92.142 1 reject forwarded example.com none example.com fail 189.38.92.153 2 reject forwarded example.com none example.com fail 189.38.92.163 2 reject forwarded example.com none example.com fail 193.169.40.65 1 reject forwarded example.com none example.com fail 194.134.4.234 1 reject forwarded reply.example.com none reply.example.com neutral 194.179.34.53 1 reject forwarded example.com example.com neutral srmp2.rtve.es neutral 195.18.176.59 34 reject forwarded example.com none example.com fail 195.54.18.198 22 reject forwarded example.com none example.com fail 200.136.52.11 1 reject forwarded example.com none dncgroup.cafe24.com neutral 200.94.181.29 1 reject forwarded example.com none example.com fail 203.249.3.202 1 reject forwarded example.com none kyonggi.ac.kr pass 205.210.42.59 1 reject forwarded example.com none example.com fail 206.46.172.55 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 207.75.116.63 2 reject forwarded example.com none example.com fail 208.113.200.5 3 reject forwarded example.com none sus79.suidc.com neutral 208.84.243.68 3 reject forwarded example.com none bt01.terra.com neutral 208.84.243.76 2 reject forwarded example.com none bt01.terra.com neutral 208.97.132.74 1 reject forwarded example.com none no10.nayana.kr neutral 208.97.132.74 1 reject forwarded example.com none homiemail-mx4.g.dreamhost.com neutral 209.85.126.28 1 reject forwarded example.com none ns.wizbill.com neutral 209.85.212.48 1 reject forwarded example.com example.com neutral makemebabies.com neutral 209.85.212.52 2 reject forwarded example.com example.com neutral web2mil.com.uy pass 209.85.215.48 6 reject forwarded example.com example.com neutral prettysimplegames.com pass 209.85.216.47 2 reject forwarded example.com example.com neutral gmail.com pass 210.131.4.234 2 reject forwarded example.com none example.com fail 210.157.23.25 1 reject forwarded example.com none post.freeml.com pass 210.157.23.80 1 reject forwarded example.com none post.freeml.com pass 211.125.95.17 1 reject forwarded example.com none post.freeml.com pass 211.125.95.25 1 reject forwarded example.com none post.freeml.com pass 212.227.15.34 1 reject forwarded example.com none example.com fail 212.227.17.11 19 reject forwarded example.com none web.de neutral 212.227.17.12 1 reject forwarded example.com none online.ms neutral 212.54.42.166 1 reject forwarded example.com none example.com fail 212.97.132.64 1 reject forwarded example.com none example.com fail 216.127.84.98 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 216.146.33.30 1 reject forwarded example.com none example.com fail 216.32.180.13 1 reject forwarded support.example.com support.example.com neutral student.gsu.edu neutral 216.33.127.89 1 reject forwarded example.com none sus79.suidc.com neutral 216.75.30.240 2 reject forwarded example.com none example.com fail 216.97.230.60 1 reject forwarded example.com none example.com fail 216.97.233.20 1 reject forwarded mx.example.com none girtab.lunarpages.com neutral 217.220.34.14 2 reject forwarded example.com none example.com fail 220.152.46.26 1 reject forwarded example.com none post.freeml.com softfail 62.179.121.43 1 reject forwarded example.com none example.com fail 64.142.111.34 3 reject forwarded example.com none example.com fail 65.254.160.36 2 reject forwarded example.com none example.com fail 66.135.40.169 2 reject forwarded example.com none example.com fail 66.230.220.60 1 reject forwarded example.com none example.com fail 66.36.227.225 2 reject forwarded example.com none example.com fail 69.168.108.17 1 reject forwarded example.com none example.com fail 69.171.244.43 1 reject forwarded mx.example.com none unknown neutral 69.64.155.202 1 reject forwarded example.com none example.com fail 74.220.200.85 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.202.75 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.220.79 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.53.227.162 1 reject forwarded example.com none example.com fail 78.129.128.42 1 reject forwarded example.com none example.com fail 80.160.76.195 1 reject forwarded example.com none example.com fail 80.179.55.172 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 82.148.101.71 31 reject forwarded example.com none example.com fail 83.168.225.23 1 reject forwarded example.com none example.com fail 87.194.69.161 48 reject forwarded support.example.com support.example.com neutral ispymarketing.com neutral 89.201.164.80 5 reject forwarded support.example.com support.example.com neutral support.example.com fail 89.237.41.194 37 reject forwarded example.com none example.com fail 92.43.217.107 1 reject forwarded example.com none follow-me.li neutral 95.110.198.67 1 reject forwarded mx.example.com none mail.toolbooking.it neutral 98.139.53.209 1 reject forwarded example.com none example.com fail 115.125.191.250 2 none forwarded support.example.com support.example.com pass support.example.com fail 128.118.146.135 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.222.181 1 none forwarded support.example.com support.example.com pass support.example.com fail 205.186.150.175 4 none forwarded support.example.com support.example.com pass gmail.com neutral 207.126.144.111 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 207.126.144.145 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 209.237.134.234 1 none forwarded support.example.com support.example.com pass srs.perfora.net neutral 210.188.201.142 1 none forwarded support.example.com support.example.com pass sv122.xserver.jp neutral 210.188.214.230 2 none forwarded support.example.com support.example.com pass error.heteml.jp neutral 212.227.126.171 3 none forwarded example.com example.com pass srs.kundenserver.de pass 212.227.126.171 5 none forwarded support.example.com support.example.com pass srs.kundenserver.de pass 216.104.162.150 1 none forwarded example.com example.com pass example.com fail 216.245.194.154 1 none forwarded support.example.com support.example.com pass gmail.com neutral 192.75.71.4 1 reject mailing_list groups.example.com examplemail.com neutral ptms.humber.ca neutral 209.85.160.69 1 none mailing_list support.example.com none buzzfeed.com pass 209.85.160.69 9 none mailing_list support.example.com none popimedia.com pass 209.85.160.70 3 none mailing_list support.example.com none hootsuite.com pass 209.85.160.70 45 none mailing_list support.example.com none reverbnation.com pass 209.85.160.71 1 none mailing_list example.com none nealab.it pass 209.85.160.71 2 none mailing_list support.example.com none glyde.com pass 209.85.160.71 2 none mailing_list support.example.com none kellett.nt.ca pass 209.85.160.72 1 none mailing_list support.example.com none adivor.com pass 209.85.160.72 4 none mailing_list support.example.com none hagakure.it pass 209.85.161.70 6 none mailing_list support.example.com none graphscience.com pass 209.85.210.70 4 none mailing_list support.example.com none mindbox.de pass 209.85.210.70 11 none mailing_list support.example.com none graphscience.com pass 209.85.210.70 13 none mailing_list support.example.com none infectiousmedia.com pass 209.85.210.71 2 none mailing_list support.example.com none xa.net pass 209.85.210.72 3 none mailing_list example.com none desgames.com pass 209.85.210.72 2 none mailing_list support.example.com none glyde.com pass 209.85.212.71 3 none mailing_list support.example.com none publik.com.tr pass 209.85.212.72 4 none mailing_list support.example.com none wearesocial.net pass 209.85.213.71 2 none mailing_list support.example.com none xa.net pass 128.103.109.33 2 reject forwarded example.com none example.com fail 128.135.165.71 1 reject forwarded example.com none example.com fail 128.253.83.164 1 reject forwarded example.com example.com neutral example.com fail 130.207.160.71 1 reject forwarded example.com none example.com fail 140.174.93.116 1 reject forwarded example.com none example.com fail 157.55.133.164 1 reject forwarded example.com none va3ehsndr002.bigfish.com neutral 161.58.198.168 51 reject forwarded example.com none example.com fail 162.39.147.126 1 reject forwarded example.com none example.com fail 173.201.193.37 1 reject forwarded example.com example.com neutral bounce.secureserver.net pass 173.203.78.242 2 reject forwarded example.com none example.com fail 174.77.167.202 1 reject forwarded support.example.com support.example.com neutral capturagroup.com neutral 184.173.73.185 1 reject forwarded example.com none example.com fail 187.108.192.21 1 reject forwarded mx.example.com none linux.nrserver31.net neutral 193.25.198.227 1 reject forwarded mx.example.com none smtp-out.emailvision.com neutral 195.228.156.64 7 reject forwarded example.com example.com neutral example.com fail 195.250.146.88 1 reject forwarded example.com none example.com fail 198.212.10.109 1 reject forwarded example.com none example.com fail 199.224.80.228 2 reject forwarded example.com none example.com fail 200.155.62.161 1 reject forwarded example.com none dncgroup.cafe24.com neutral 202.137.236.99 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 205.178.146.50 4 reject forwarded example.com none example.com fail 205.178.146.50 6 reject forwarded m.example.com m.example.com neutral m.example.com neutral 206.46.169.127 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 207.211.91.250 23 reject forwarded example.com none example.com fail 207.69.195.101 1 reject forwarded example.com none example.com fail 208.180.40.101 1 reject forwarded example.com none example.com fail 208.180.40.103 4 reject forwarded m.example.com m.example.com neutral m.example.com neutral 208.76.170.112 1 reject forwarded example.com none example.com fail 209.210.150.13 50 reject forwarded example.com none example.com fail 209.217.226.68 1 reject forwarded example.com none example.com fail 209.255.40.198 1 reject forwarded example.com none example.com fail 209.85.216.169 1 reject forwarded example.com example.com neutral gmail.com pass 209.85.216.170 1 reject forwarded example.com example.com neutral egame.hk neutral 209.85.216.182 2 reject forwarded example.com example.com neutral gmail.com pass 209.85.217.181 1 reject forwarded example.com example.com neutral gmail.com pass 213.165.64.100 15 reject forwarded example.com none example.com fail 213.171.216.75 1 reject forwarded example.com none example.com fail 213.239.231.83 3 reject forwarded example.com none example.com fail 216.32.181.181 1 reject forwarded support.example.com support.example.com neutral tulane.edu pass 216.32.181.183 2 reject forwarded support.example.com support.example.com fail saclink.csus.edu neutral 216.32.181.186 1 reject forwarded support.example.com support.example.com neutral ebs-paris.com neutral 217.64.233.106 1 reject forwarded mx.example.com mx.example.com neutral mail3.contact.reed.co.uk pass 38.100.110.160 71 reject forwarded mx.example.com none mail.mybigrewards.com neutral 46.255.225.252 1 reject forwarded support.example.com support.example.com neutral centrum.cz pass 59.163.196.151 1 reject forwarded example.com none example.com fail 62.193.226.126 65 reject forwarded example.com none example.com fail 66.199.231.226 1 reject forwarded example.com none example.com fail 66.220.144.148 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 66.240.226.247 1 reject forwarded example.com none example.com fail 68.230.241.206 1 reject forwarded example.com none example.com fail 68.230.241.212 1 reject forwarded example.com none example.com fail 69.167.148.151 1 reject forwarded example.com none example.com fail 69.171.232.138 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.227.151.160 6 reject forwarded example.com none example.com fail 72.167.218.151 2 reject forwarded mx.example.com none p3plsmtp03-03.prod.phx3.secureserver.net neutral 78.153.203.206 1 reject forwarded example.com none pemlinweb08.blacknight.com neutral 81.169.146.188 2 reject forwarded support.example.com none support.example.com fail 91.121.122.187 1 reject forwarded example.com none brian-kunze.de neutral 91.198.169.250 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 156.143.38.2 8 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 64.135.12.80 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 74.125.82.69 2 reject mailing_list support.example.com none varlabs.com neutral 209.85.160.198 10 none mailing_list support.example.com none graphscience.com pass 209.85.161.199 2 none mailing_list support.example.com none glyde.com pass 209.85.213.198 15 none mailing_list support.example.com none graphscience.com pass 209.85.213.198 27 none mailing_list support.example.com none reverbnation.com pass 209.85.214.197 3 none mailing_list support.example.com none talkfast.com.br pass 209.85.216.198 2 none mailing_list support.example.com none glyde.com pass 209.85.216.200 4 none mailing_list support.example.com none dafiti.com.br pass 116.240.195.180 2 reject forwarded mx.example.com none smtp.pressnow.com.au neutral 121.111.227.146 4 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 121.111.227.151 111 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.154 99 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 128.100.132.164 1 reject forwarded example.com none example.com fail 128.146.216.225 1 reject forwarded support.example.com support.example.com fail support.example.com fail 169.229.218.146 1 reject forwarded example.com none example.com fail 173.201.192.167 1 reject forwarded mx.example.com none p3plsmtp13-04.prod.phx3.secureserver.net neutral 174.120.243.194 1 reject forwarded example.com none example.com fail 188.132.239.146 2 reject forwarded example.com example.com neutral example.com fail 199.115.229.129 1 reject forwarded example.com none example.com fail 200.144.190.152 1 reject forwarded example.com none no10.nayana.kr neutral 200.144.190.152 1 reject forwarded example.com none dncgroup.cafe24.com neutral 203.144.173.152 1 reject forwarded example.com none example.com fail 203.146.237.187 36 reject forwarded example.com none example.com fail 207.155.249.184 1 reject forwarded example.com none example.com fail 212.220.125.207 19 reject forwarded example.com none example.com fail 213.171.216.114 1 reject forwarded example.com none example.com fail 213.199.154.141 1 reject forwarded example.com none alumni.indiana.edu neutral 216.211.128.135 1 reject forwarded example.com none example.com fail 130.111.32.66 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 10 reject mailing_list support.example.com none goldladder.co.uk softfail 209.85.160.70 9 reject mailing_list support.example.com none aviesta.com neutral 209.85.160.70 1 reject mailing_list support.example.com none vivilat.com neutral 209.85.160.70 3 reject mailing_list support.example.com none endorseliberty.com neutral 209.85.160.71 5 reject mailing_list support.example.com none nobox.com neutral 209.85.160.72 1 reject mailing_list support.example.com none p3000.net neutral 209.85.160.72 4 reject mailing_list support.example.com none vintedge.com neutral 209.85.160.72 1 reject mailing_list support.example.com none clickgnosis.com neutral 209.85.160.72 7 reject mailing_list support.example.com none thejargroup.com neutral 209.85.210.69 10 reject mailing_list support.example.com none goldladder.co.uk softfail 209.85.210.70 1 reject mailing_list example.com none appbistro.com neutral 209.85.210.70 7 reject mailing_list example.com none magnetjoy.com neutral 209.85.210.70 7 reject mailing_list support.example.com none graphscience.com pass 209.85.210.71 3 reject mailing_list support.example.com none gokartlabs.com neutral 209.85.210.72 49 reject mailing_list support.example.com none deducta.dk neutral 209.85.210.72 2 reject mailing_list support.example.com none friendsurance.de neutral 209.85.210.72 5 reject mailing_list support.example.com none powerthruconsulting.com neutral 209.85.212.71 2 reject mailing_list support.example.com none r2prod.com neutral 209.85.212.72 1 reject mailing_list support.example.com none taykey.com neutral 209.85.213.72 3 reject mailing_list example.com none belmodo.tv neutral 209.85.216.69 3 reject mailing_list support.example.com none beebop.de neutral 209.85.216.69 3 reject mailing_list support.example.com none yunait.com neutral 210.157.5.231 1 reject mailing_list example.com example.com fail japan-romance.com neutral 207.126.144.119 4 none mailing_list support.example.com none iscool-e.com pass 209.85.161.199 9 reject mailing_list support.example.com none adtz.com neutral 209.85.213.199 2 reject mailing_list support.example.com none nobox.com neutral 209.85.213.200 1 reject mailing_list support.example.com none taykey.com neutral 209.85.214.197 3 reject mailing_list support.example.com none beebop.de neutral 209.85.214.197 2 reject mailing_list support.example.com none pahaque.com neutral 209.85.214.197 7 reject mailing_list support.example.com none getaround.com neutral 209.85.214.197 13 reject mailing_list support.example.com none socialwavelength.com neutral 209.85.214.199 5 reject mailing_list support.example.com none nobox.com neutral 209.85.214.200 1 reject mailing_list support.example.com none suggestum.co.jp neutral 209.85.216.197 3 reject mailing_list example.com none just3.com.br neutral 209.85.216.199 25 reject mailing_list example.com none epsi.fr softfail 209.85.217.197 4 reject mailing_list support.example.com none varlabs.com neutral 64.206.108.133 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 207.126.144.125 5 reject mailing_list support.example.com none moviepilot.com neutral 207.126.144.131 5 reject mailing_list support.example.com none moviepilot.com neutral 209.85.210.69 2 none forwarded mailing_list example.com none nealab.it pass 209.85.210.69 3 none forwarded mailing_list support.example.com none diamondnexus.com pass 209.85.210.72 8 none forwarded mailing_list support.example.com none httpool.com pass 209.85.210.72 88 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.212.72 1 none forwarded mailing_list support.example.com none elo7.com pass 209.85.212.72 2 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.213.71 13 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.216.70 1 none forwarded mailing_list support.example.com none bigbrands.pl pass 74.125.245.74 4 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.245.82 4 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.245.86 4 none forwarded mailing_list support.example.com none crowdstar.com pass 65.246.162.5 12 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 66.96.188.15 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass pharmasia.net neutral 74.125.83.70 8 reject forwarded mailing_list example.com none schoolfeed.com softfail 74.125.83.71 2 reject forwarded mailing_list support.example.com none totalsocialsolutions.com neutral 98.136.219.2 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.2 2 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 209.85.213.199 12 none forwarded mailing_list support.example.com none fetise.com pass 209.85.214.198 49 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.214.199 64 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.216.198 2 none forwarded mailing_list support.example.com none bigbrands.pl pass 140.98.193.23 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass srs.ieee.org neutral 202.212.8.162 1 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 204.13.164.19 11 reject forwarded mailing_list example.com riseup.net pass lists.riseup.net pass 209.85.160.46 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.160.52 1 reject forwarded mailing_list example.com freshplanet.com pass freshplanet.com pass 209.85.160.54 1 reject forwarded mailing_list support.example.com mequedouno.com fail mequedouno.com softfail 209.85.160.70 4 reject forwarded mailing_list support.example.com none mobi4imob.com.br neutral 209.85.212.72 7 reject forwarded mailing_list support.example.com none s-trip.com softfail 209.85.213.47 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.52 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 210.165.10.40 1 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp softfail 216.32.180.11 2 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 74.125.149.73 4 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.82.173 1 reject forwarded mailing_list support.example.com none bitsiren.com pass 98.136.218.63 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.63 11 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.23 17 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.23 14 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.34 2 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.49 7 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.90 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.93 2 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.164.37 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.139.164.39 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.66 19 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.164.96 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.15 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.21 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.33 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.63 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.75 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.83 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.83 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.161.197 3 reject forwarded mailing_list support.example.com none 101.es neutral 209.85.213.171 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.213.172 2 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.213.198 10 reject forwarded mailing_list support.example.com none 219group.com neutral 209.85.213.200 5 reject forwarded mailing_list support.example.com none bluebandmedia.com neutral 209.85.214.171 3 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.214.198 2 reject forwarded mailing_list support.example.com none suggestum.co.jp neutral 209.85.214.200 1 reject forwarded mailing_list support.example.com none nightowlgames.net neutral 209.85.216.171 3 reject forwarded mailing_list support.example.com none populis.com neutral 209.85.216.200 2 reject forwarded mailing_list support.example.com none snsplus.com neutral 66.220.144.137 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.139 23 reject forwarded mailing_list support.example.com none hungrymachine.com neutral 66.220.144.141 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.143 9 reject forwarded mailing_list support.example.com none reverbnation.com fail 66.220.144.144 11 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.149 1 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 66.220.144.154 1 reject forwarded mailing_list example.com none imageinterview.com neutral 66.220.144.159 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.155.148 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 66.220.155.157 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.137 2 reject forwarded mailing_list support.example.com none watercooler-inc.com softfail 69.171.232.147 1 reject forwarded mailing_list example.com none imageinterview.com neutral 69.171.232.147 1 reject forwarded mailing_list support.example.com none jvnz.net neutral 69.171.232.147 1 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.148 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.148 12 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.149 14 reject forwarded mailing_list support.example.com none graphscience.com softfail 69.171.232.158 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 74.125.245.106 5 reject forwarded mailing_list support.example.com none ecglobal.com temperror 98.136.219.106 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.114 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.116 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.119 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.130 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.132 12 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.184 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.205 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.182 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.211 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.212 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.216 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.231 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.234 3 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.241 4 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.116 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.119 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.134 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.215.134 7 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.170 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.174 18 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.183 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.192 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.194 7 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.205 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.212 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.230 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.246 1 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.100 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.106 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.113 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.115 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.153 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.163 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.171 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.175 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.185 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 114.111.116.122 3 reject forwarded mailing_list groups.example.com examplemail.com neutral returns.yahoogroups.jp pass 121.111.227.149 1 reject forwarded mailing_list groups.example.com examplemail.com neutral auoneerrml1.ezweb.ne.jp pass 209.85.160.70 1 none trusted_forwarder mailing_list support.example.com kno.com pass support.example.com pass kno.com pass support.example.com pass 209.85.210.72 3 none trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de pass support.example.com pass 209.85.210.72 3 none trusted_forwarder mailing_list support.example.com trilogyinteractive.com pass support.example.com pass trilogyinteractive.com pass support.example.com pass 209.85.212.71 4 none trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 209.85.214.197 7 none trusted_forwarder mailing_list example.com freshplanet.com pass none freshplanet.com pass example.com pass 209.85.214.198 4 none trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com pass example.com pass 209.85.214.200 9 none trusted_forwarder mailing_list example.com adclick.pt pass none adclick.pt pass example.com pass 209.85.214.200 3 none trusted_forwarder mailing_list support.example.com adverit.com pass support.example.com pass adverit.com pass support.example.com pass 209.85.216.200 4 none trusted_forwarder mailing_list support.example.com webrepublic.ch pass support.example.com pass webrepublic.ch pass support.example.com pass 209.85.210.70 3 none forwarded trusted_forwarder mailing_list support.example.com improvementdirect.com pass support.example.com pass improvementdirect.com pass support.example.com pass 209.85.213.64 1 none forwarded trusted_forwarder mailing_list example.com googlegroups.com pass example.com pass googlegroups.com pass example.com pass 209.85.216.70 3 none forwarded trusted_forwarder mailing_list support.example.com mequedouno.com pass support.example.com pass mequedouno.com softfail mequedo1.com pass 209.85.214.198 1 none forwarded trusted_forwarder mailing_list example.com googlegroups.com pass example.com pass needish.com pass example.com pass 209.85.214.174 4 reject forwarded trusted_forwarder mailing_list support.example.com sonicelectronix.com pass sonicelectronix.com pass sonicelectronix.com softfail sonicelectronix.com fail 209.104.7.4 1 none support.example.com support.example.com pass support.example.com fail 64.18.1.155 2 none support.example.com support.example.com pass support.example.com fail 64.79.77.68 1 none example.com example.com pass example.com fail 71.74.56.23 1 none example.com example.com pass example.com fail 80.67.29.50 1 none support.example.com support.example.com pass support.example.com fail 87.54.32.5 1 reject reply.example.com examplemail.com neutral reply.example.com neutral 49.212.21.44 1 none example.com example.com pass example.com fail 64.18.1.131 1 reject example.com none example.com fail 64.18.1.220 1 reject example.com none example.com fail 67.222.54.6 2 reject example.com none box293.bluehost.com neutral 70.32.80.60 11 reject example.com none example.com fail 78.108.66.4 1 reject example.com none example.com fail 95.160.6.10 1 reject example.com none example.com fail 130.215.36.91 1 none example.com example.com pass srs.wpi.edu pass 130.217.66.62 2 none support.example.com support.example.com pass support.example.com fail 66.220.157.65 9 none example.com example.com fail example.com pass 66.220.157.66 346 none example.com example.com pass example.com pass 66.220.157.69 316 none example.com example.com pass example.com pass 66.220.157.76 339 none example.com example.com pass example.com pass 66.220.157.77 306 none example.com example.com pass example.com pass 66.220.157.82 19 none example.com example.com fail example.com pass 69.171.244.69 12 none example.com example.com fail example.com pass 142.35.129.6 1 reject groups.example.com none groups.example.com neutral 152.10.1.179 1 reject support.example.com support.example.com fail support.example.com fail 173.0.84.226 1 reject example.com paypal.com fail paypal.com pass 176.9.37.195 4 reject example.com none ns147.altervista.org neutral 206.110.20.2 1 reject reply.example.com none pleasanton.k12.ca.us neutral 209.68.1.176 1 reject example.com none example.com fail 216.139.64.9 3 reject example.com none example.com fail 216.70.64.29 6 reject example.com none scrappybusiness.com neutral 217.16.6.132 2 reject example.com none example.com fail 38.101.21.17 9 reject example.com none example.com fail 62.146.51.26 2 reject example.com none example.com fail 66.49.167.77 14 reject example.com none example.com fail 67.23.25.220 21 reject example.com none example.com fail 70.32.90.208 12 reject example.com none example.com fail 74.86.66.203 12 reject example.com none saturn.arandomserver.com neutral 76.74.155.18 15 reject reply.example.com none reply.example.com neutral 77.88.60.125 1 reject groups.example.com none forward6.mail.yandex.net neutral 83.96.232.31 2 reject example.com none example.com fail 95.172.88.25 25 reject reply.example.com examplemail.com neutral reply.example.com neutral 184.172.176.25 2 none example.com example.com pass example.com fail 216.200.145.38 5 none example.com example.com pass example.com fail 66.220.144.135 1194 none support.example.com support.example.com pass support.example.com pass 66.220.144.136 1162 none support.example.com support.example.com pass support.example.com pass 66.220.144.142 1111 none support.example.com support.example.com pass support.example.com pass 66.220.144.155 45 none example.com example.com neutral example.com pass 66.220.144.158 1133 none support.example.com support.example.com pass support.example.com pass 66.220.155.150 4 none example.com example.com neutral example.com pass 66.220.155.156 3 none example.com example.com neutral example.com pass 69.171.232.140 55 none example.com example.com neutral example.com pass 69.171.232.144 1726 none support.example.com support.example.com pass support.example.com pass 69.171.232.157 50 none example.com example.com neutral example.com pass 69.171.232.157 1621 none support.example.com support.example.com pass support.example.com pass 69.171.232.159 53 none example.com example.com neutral example.com pass 108.166.4.124 1 reject example.com none example.com fail 12.144.64.178 8 reject example.com none example.com fail 130.111.32.94 2 reject reply.example.com none reply.example.com neutral 132.235.51.17 1 reject example.com none example.com fail 132.248.84.76 1 reject example.com none example.com fail 140.118.31.61 1 reject example.com none example.com fail 141.211.90.69 1 reject example.com none example.com fail 178.219.44.12 17 reject example.com none example.com fail 184.70.106.44 7 reject groups.example.com none groups.example.com neutral 189.38.92.150 1 reject example.com none example.com fail 195.94.186.57 19 reject reply.example.com none smtp.cisl.it neutral 197.0.126.162 1 reject 1.example.com none 1.example.com neutral 198.173.64.44 5 reject example.com none example.com fail 208.109.80.58 1 reject example.com none example.com fail 212.227.15.35 1 reject example.com none example.com fail 212.227.17.10 1 reject example.com none srs.kundenserver.de pass 217.220.34.13 3 reject example.com none example.com fail 24.214.64.231 1 reject example.com none example.com fail 64.202.189.88 1 reject example.com none example.com fail 66.147.253.76 1 reject example.com none box657.bluehost.com neutral 66.33.216.126 5 reject proxymail.example.com none rockies.dreamhost.com neutral 68.178.232.11 1 reject example.com none linhostssl22.prod.mesa1.secureserver.net neutral 69.167.138.87 6 reject example.com none sutlej.ewebguru.net neutral 72.21.242.105 8 reject example.com none example.com fail 74.125.149.61 1 reject mx.example.com none psmtp.com neutral 82.57.200.103 10 reject example.com none example.com fail 85.214.22.208 8 reject example.com none example.com fail 88.84.137.173 1 reject example.com none sh8-35.1blu.de neutral 129.219.117.210 2 none example.com example.com pass example.com fail 12.158.190.246 16 reject example.com none example.com fail 128.120.32.141 1 reject example.com none example.com fail 170.140.53.253 1 reject groups.example.com none groups.example.com neutral 174.133.54.114 1 reject example.com none example.com fail 175.125.21.173 644 reject example.com none dncgroup.cafe24.com neutral 182.50.132.194 1 reject example.com none sg2nlhg020.shr.prod.sin2.secureserver.net neutral 202.224.39.197 1 reject example.com none example.com fail 202.59.161.228 8 reject example.com none example.com fail 205.237.69.243 1 reject example.com none example.com fail 206.174.210.52 1 reject example.com none example.com fail 207.97.245.111 3 reject example.com none example.com fail 207.97.245.115 1 reject example.com none example.com fail 207.97.245.125 1 reject example.com none example.com fail 207.97.245.189 1 reject example.com none example.com fail 208.80.152.186 1 reject example.com none example.com fail 209.216.234.15 2 reject example.com none example.com fail 210.212.58.111 3 reject example.com none example.com fail 213.173.177.14 2 reject example.com none example.com fail 220.226.203.53 1 reject example.com none example.com fail 62.193.226.126 10 reject example.com none example.com fail 64.128.191.115 1 reject example.com none example.com fail 64.225.157.202 2 reject example.com none example.com fail 66.147.249.253 1 reject example.com none box293.bluehost.com neutral 66.220.144.141 492 reject m.example.com m.example.com neutral m.example.com neutral 68.230.241.137 1 reject example.com none example.com fail 69.171.232.154 486 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.155 438 reject m.example.com m.example.com neutral m.example.com neutral 69.171.232.157 461 reject m.example.com m.example.com neutral m.example.com neutral 72.167.234.241 98 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 72.167.234.244 90 reject example.com none p3nlhg359.shr.prod.phx3.secureserver.net neutral 72.167.234.245 6 reject example.com none p3nlhg684.shr.prod.phx3.secureserver.net neutral 74.220.206.229 1 reject example.com none example.com fail 91.121.122.187 8 reject example.com none example.com fail 95.108.253.141 1 reject groups.example.com none forward16.mail.yandex.net neutral 129.219.117.210 1 reject m.example.com m.example.com neutral m.example.com neutral 168.144.250.245 2 reject example.com none example.com fail 184.172.233.188 1 reject example.com none example.com fail 187.141.114.200 8 reject example.com none example.com fail 204.200.195.216 5 reject example.com none example.com fail 205.207.121.146 4 reject reply.example.com examplemail.com neutral reply.example.com neutral 213.188.129.253 3 reject support.example.com support.example.com neutral mtx6.mbn1.net neutral 216.151.163.146 1 reject example.com none example.com fail 216.218.133.197 1 reject support.example.com none support.example.com fail 64.18.0.24 1 none forwarded example.com example.com pass example.com fail 66.40.65.7 1 none forwarded support.example.com support.example.com pass support.example.com fail 78.46.79.3 2 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.7 3 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.9 2 none forwarded support.example.com support.example.com pass support.example.com fail 50.57.0.7 1 reject forwarded example.com example.com neutral example.com fail 18.85.22.53 1 none forwarded support.example.com support.example.com pass support.example.com fail 50.22.91.42 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.18.0.178 1 none forwarded support.example.com support.example.com pass uncg.edu pass 65.54.61.87 1 none forwarded support.example.com support.example.com pass hotmail.co.uk pass 65.55.34.13 1 none forwarded support.example.com support.example.com pass hotmail.fr pass 65.55.34.21 1 none forwarded example.com example.com pass hotmail.com pass 65.55.34.26 1 none forwarded support.example.com support.example.com pass windowslive.com pass 65.55.90.15 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.19 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.28 1 none forwarded example.com example.com pass hotmail.com pass 65.55.90.45 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.47 1 none forwarded support.example.com support.example.com pass live.com pass 65.55.90.95 2 none forwarded support.example.com support.example.com pass hotmail.com pass 66.96.187.5 1 none forwarded support.example.com support.example.com pass maliwat.com pass 66.96.190.4 2 none forwarded support.example.com support.example.com pass frenzy.biz neutral 74.208.5.90 2 none forwarded support.example.com support.example.com pass gmx.com pass 76.96.30.16 1 none forwarded support.example.com support.example.com pass support.example.com fail 78.46.3.123 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.67.18.36 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.90.63.66 3 none forwarded support.example.com support.example.com pass support.example.com fail 18.9.25.15 1 reject forwarded mx.example.com none dmz-mailsec-scanner-4.mit.edu neutral 70.42.0.11 3 reject forwarded example.com none example.com fail 12.49.220.71 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.79.1.191 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.79.1.211 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.120.6.98 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.68.4.107 1 none forwarded support.example.com support.example.com pass support.example.com fail 46.105.55.81 1 none forwarded support.example.com support.example.com pass support.example.com fail 46.16.168.56 1 none forwarded support.example.com support.example.com pass support.example.com fail 46.182.41.82 1 none forwarded support.example.com support.example.com pass support.example.com fail 59.106.19.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 61.9.168.140 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.70.56.136 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.78.17.142 45 none forwarded support.example.com support.example.com pass exsmtp012-11.exch012.intermedia.net neutral 64.78.17.166 2 none forwarded support.example.com support.example.com pass exsmtp012-2.exch012.intermedia.net neutral 65.55.116.14 2 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.16 1 none forwarded support.example.com support.example.com pass kalicido.com neutral 65.55.116.17 2 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.22 1 none forwarded support.example.com support.example.com pass live.nl pass 65.55.116.22 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.116.43 1 none forwarded support.example.com support.example.com pass consularcorps.cc neutral 65.55.116.45 1 none forwarded support.example.com support.example.com pass msn.com pass 65.55.116.45 1 none forwarded support.example.com support.example.com pass consularcorps.cc neutral 65.55.116.47 1 none forwarded support.example.com support.example.com pass hotmail.fr pass 65.55.90.150 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.168 1 none forwarded support.example.com support.example.com pass hotmail.com pass 65.55.90.172 1 none forwarded example.com example.com pass hotmail.com pass 66.96.188.15 1 none forwarded support.example.com support.example.com pass familylife.ws pass 66.96.189.18 1 none forwarded support.example.com support.example.com pass frenzy.biz neutral 66.96.190.13 1 none forwarded support.example.com support.example.com pass mnmpresents.com pass 67.20.91.149 2 none forwarded example.com example.com pass example.com fail 67.210.98.45 1 none forwarded support.example.com support.example.com pass support.example.com fail 67.228.154.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.17.248 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.89.24.155 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.196.31 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.47.195.63 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.82.49 5 none forwarded support.example.com support.example.com pass gmail.com pass 74.125.82.49 1 none forwarded support.example.com support.example.com pass smarterdb.com neutral 74.125.82.49 1 none forwarded support.example.com support.example.com pass globalmediainsight.com neutral 74.125.82.52 1 none forwarded support.example.com support.example.com pass netmojo.in pass 74.125.82.54 1 none forwarded support.example.com support.example.com pass nateleung.com neutral 74.125.83.44 1 none forwarded support.example.com support.example.com pass encortex.com pass 74.125.83.47 16 none forwarded support.example.com support.example.com pass gmail.com pass 74.53.27.146 2 none forwarded support.example.com support.example.com pass support.example.com fail 75.98.16.138 1 none forwarded support.example.com support.example.com pass support.example.com fail 76.12.125.99 7 none forwarded support.example.com support.example.com pass support.example.com fail 81.88.50.243 1 none forwarded example.com example.com pass example.com fail 82.80.235.56 2 none forwarded support.example.com support.example.com pass support.example.com fail 83.235.66.33 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.10.208.48 4 none forwarded support.example.com support.example.com pass support.example.com fail 85.19.71.170 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.231.86.21 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.136.40.61 14 none forwarded support.example.com support.example.com pass support.example.com fail 95.131.48.53 2 none forwarded support.example.com support.example.com pass support.example.com fail 96.30.37.116 1 none forwarded example.com example.com pass example.com fail 97.74.135.33 2 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 98.138.91.70 1 none forwarded support.example.com support.example.com pass support.example.com fail 155.68.1.26 1 reject forwarded example.com none example.com fail 166.84.1.89 1 reject forwarded example.com none panix.com pass 187.16.27.3 1 reject forwarded example.com none no10.nayana.kr neutral 195.4.92.94 1 reject forwarded example.com none example.com fail 200.27.1.22 1 reject forwarded mx.example.com none mailnet.telmexchile.cl neutral 209.68.1.87 1 reject forwarded example.com none example.com fail 209.68.2.31 2 reject forwarded example.com none example.com fail 216.92.2.45 3 reject forwarded proxymail.example.com shopkick.com pass shopkick.com softfail 217.16.6.85 7 reject forwarded example.com none example.com fail 217.16.6.88 2 reject forwarded example.com none example.com fail 50.22.11.19 1 reject forwarded mx.example.com none bedford.accountservergroup.com neutral 64.98.36.17 1 reject forwarded example.com none example.com fail 65.55.34.15 1 reject forwarded m.example.com m.example.com neutral live.com pass 65.55.34.19 1 reject forwarded example.com example.com fail hotmail.com pass 65.55.34.21 1 reject forwarded m.example.com m.example.com neutral msn.com pass 65.55.34.25 1 reject forwarded m.example.com m.example.com neutral live.cn pass 65.55.34.25 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.88.11 1 reject forwarded support.example.com support.example.com neutral syr.edu neutral 65.55.88.12 1 reject forwarded support.example.com support.example.com neutral email.sc.edu pass 66.84.33.14 1 reject forwarded example.com none example.com fail 69.20.57.11 1 reject forwarded example.com none example.com fail 69.36.11.36 14 reject forwarded example.com none example.com fail 69.89.16.39 1 reject forwarded example.com none example.com fail 70.87.28.64 3 reject forwarded example.com none him.himalayandeals.com neutral 72.3.142.34 2 reject forwarded example.com none example.com fail 76.96.30.40 1 reject forwarded example.com none example.com fail 77.68.58.29 1 reject forwarded example.com none example.com fail 106.10.151.19 1 none forwarded example.com example.com pass example.com fail 108.166.4.124 1 none forwarded support.example.com support.example.com pass support.example.com fail 120.136.10.40 1 none forwarded support.example.com support.example.com pass sv539.xserver.jp neutral 128.121.79.82 1 none forwarded support.example.com support.example.com pass support.example.com fail 129.11.77.151 1 none forwarded support.example.com support.example.com pass support.example.com fail 130.235.20.69 1 none forwarded support.example.com support.example.com pass support.example.com fail 132.205.96.94 1 none forwarded example.com example.com pass encs.concordia.ca neutral 141.161.2.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 141.211.90.67 1 none forwarded support.example.com support.example.com pass kcjones.org neutral 174.120.190.2 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.122.1.162 1 none forwarded support.example.com support.example.com pass support.example.com fail 176.31.12.216 1 none forwarded support.example.com support.example.com pass support.example.com fail 178.32.96.243 1 none forwarded support.example.com support.example.com pass support.example.com fail 187.45.215.68 1 none forwarded support.example.com support.example.com pass support.example.com fail 190.220.16.77 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.47.247.76 1 none forwarded support.example.com support.example.com pass support.example.com fail 198.64.149.58 1 none forwarded support.example.com support.example.com pass support.example.com fail 200.58.101.31 4 none forwarded example.com example.com pass example.com fail 201.76.49.220 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.44.130.76 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.45.187.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.69.195.98 1 none forwarded example.com example.com pass example.com fail 208.109.80.52 2 none forwarded support.example.com support.example.com pass support.example.com fail 208.113.200.5 1 none forwarded example.com example.com pass example.com fail 208.75.177.62 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.81 3 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.83 3 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.41 2 none forwarded example.com example.com pass noviawedding.com pass 209.85.160.41 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.160.44 1 none forwarded support.example.com support.example.com pass pto.hu neutral 209.85.160.44 3 none forwarded support.example.com support.example.com pass tsunamimedia.com.my neutral 209.85.160.45 1 none forwarded support.example.com support.example.com pass pendulo.com neutral 209.85.160.54 1 none forwarded support.example.com support.example.com pass tonn.fo neutral 209.85.210.43 1 none forwarded support.example.com support.example.com pass capitalife.ph neutral 209.85.210.50 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.210.50 1 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.210.51 1 none forwarded support.example.com support.example.com pass adotomi.com neutral 209.85.210.51 1 none forwarded support.example.com support.example.com pass umail.iu.edu neutral 209.85.210.52 1 none forwarded support.example.com support.example.com pass esheng.com.tw neutral 209.85.210.53 2 none forwarded support.example.com support.example.com pass captainu.com pass 209.85.210.53 1 none forwarded support.example.com support.example.com pass gerenteweb.com.br pass 209.85.210.54 1 none forwarded support.example.com support.example.com pass stanford.kr neutral 209.85.212.41 1 none forwarded example.com example.com pass unab.edu.co softfail 209.85.212.41 1 none forwarded support.example.com support.example.com pass g.hmc.edu pass 209.85.212.41 1 none forwarded support.example.com support.example.com pass ahliweb.com neutral 209.85.212.43 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.43 7 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.49 1 none forwarded support.example.com support.example.com pass humbertolobo.com.br neutral 209.85.212.50 1 none forwarded support.example.com support.example.com pass intelince.es neutral 209.85.212.50 3 none forwarded support.example.com support.example.com pass playerize.com neutral 209.85.212.51 1 none forwarded support.example.com support.example.com pass gamebase.com.tw pass 209.85.212.51 4 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.212.52 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.54 1 none forwarded support.example.com support.example.com pass gazeta.pl pass 209.85.212.54 2 none forwarded support.example.com support.example.com pass makemereach.com neutral 209.85.213.42 3 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.42 1 none forwarded support.example.com support.example.com pass coverhound.com neutral 209.85.213.43 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.44 1 none forwarded support.example.com support.example.com pass sinaldigital.com neutral 209.85.213.44 1 none forwarded support.example.com support.example.com pass jonathancoulton.com pass 209.85.213.46 1 none forwarded support.example.com support.example.com pass jmcgs.com neutral 209.85.213.46 1 none forwarded support.example.com support.example.com pass laminadosyblindados.com neutral 209.85.213.47 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.47 1 none forwarded support.example.com support.example.com pass christoweldesigns.com.au neutral 209.85.213.48 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.50 5 none forwarded support.example.com support.example.com pass atommica.com neutral 209.85.213.51 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.51 1 none forwarded support.example.com support.example.com pass winstron.com softfail 209.85.213.51 1 none forwarded support.example.com support.example.com pass parkforprofit.com neutral 209.85.213.52 1 none forwarded support.example.com support.example.com pass nyu.edu neutral 209.85.213.52 2 none forwarded support.example.com support.example.com pass watconsult.com neutral 209.85.214.44 1 none forwarded support.example.com support.example.com pass monstey.com neutral 209.85.214.45 1 none forwarded support.example.com support.example.com pass earnmailer.com neutral 209.85.214.45 1 none forwarded support.example.com support.example.com pass highsierramusic.com neutral 209.85.214.47 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.48 1 none forwarded support.example.com support.example.com pass ifpet.jp neutral 209.85.214.49 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.52 1 none forwarded support.example.com support.example.com pass issuebasedmedia.com neutral 209.85.214.54 1 none forwarded support.example.com support.example.com pass inblackmark.com neutral 209.85.215.41 1 none forwarded support.example.com support.example.com pass phillymetro.net neutral 209.85.215.41 2 none forwarded support.example.com support.example.com pass daniellieberman.org neutral 209.85.215.42 1 none forwarded support.example.com support.example.com pass talooma.com neutral 209.85.215.42 3 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.45 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.48 8 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.49 6 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.49 1 none forwarded support.example.com support.example.com pass evolution2media.com softfail 209.85.215.50 1 none forwarded example.com example.com pass chinoesfera.com neutral 209.85.215.50 5 none forwarded support.example.com support.example.com pass insidevault.com neutral 209.85.215.50 6 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.215.51 1 none forwarded support.example.com support.example.com pass googlemail.com pass 209.85.215.52 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.53 1 none forwarded support.example.com support.example.com pass temporadafora.com neutral 209.85.215.54 2 none forwarded example.com example.com pass kixeye.com pass 209.85.215.54 1 none forwarded support.example.com support.example.com pass bottup.com pass 209.85.216.42 1 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.47 2 none forwarded support.example.com support.example.com pass gauge.com.br neutral 209.85.216.50 2 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.50 1 none forwarded support.example.com support.example.com pass lindenlab.com neutral 209.85.216.50 1 none forwarded support.example.com support.example.com pass publiscreenonline.com neutral 209.85.216.52 1 none forwarded support.example.com support.example.com pass revengeis.com neutral 209.85.216.53 1 none forwarded support.example.com support.example.com pass gwmail.gwu.edu pass 210.157.22.40 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.157.22.75 1 none forwarded support.example.com support.example.com pass support.example.com fail 212.1.208.246 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.167.64.92 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.27.202.36 3 none forwarded support.example.com support.example.com pass doubledot.es pass 216.128.11.30 1 none forwarded support.example.com support.example.com pass support.example.com fail 216.172.104.5 3 none forwarded support.example.com support.example.com pass support.example.com fail 216.33.127.91 1 none forwarded example.com example.com pass example.com fail 216.33.127.91 2 none forwarded support.example.com support.example.com pass support.example.com fail 37.59.131.158 1 none forwarded support.example.com support.example.com pass support.example.com fail 38.102.228.25 1 none forwarded support.example.com support.example.com pass support.example.com fail 46.137.169.35 1 none forwarded support.example.com support.example.com pass support.example.com fail 62.182.60.182 1 none forwarded support.example.com support.example.com pass support.example.com fail 64.56.177.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.37 1 none forwarded support.example.com support.example.com pass captivationmedia.com pass 65.254.253.42 1 none forwarded support.example.com support.example.com pass calvinchilds.com pass 65.254.253.42 1 none forwarded support.example.com support.example.com pass asturiasliberal.org neutral 65.254.253.84 1 none forwarded support.example.com support.example.com pass fbbuyer.com pass 67.222.35.159 2 none forwarded support.example.com support.example.com pass support.example.com fail 67.222.48.237 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.208.230 2 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.209.152 2 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.213.245 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.220.199 1 none forwarded support.example.com support.example.com pass support.example.com fail 70.40.223.245 1 none forwarded support.example.com support.example.com pass support.example.com fail 72.167.218.32 5 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 72.29.120.151 2 none forwarded support.example.com support.example.com pass support.example.com fail 74.114.250.20 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.125.245.70 1 none forwarded support.example.com support.example.com pass mobvox.com.br pass 74.125.245.96 1 none forwarded support.example.com support.example.com pass alumni.brown.edu pass 74.125.82.172 13 none forwarded support.example.com support.example.com pass alphaboost.com softfail 74.125.82.180 1 none forwarded support.example.com support.example.com pass nateleung.com neutral 74.125.82.181 1 none forwarded support.example.com support.example.com pass bios.edu.uy pass 74.220.205.98 1 none forwarded support.example.com support.example.com pass support.example.com fail 75.180.132.34 9 none forwarded support.example.com support.example.com pass support.example.com fail 79.170.40.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.172.241.31 1 none forwarded support.example.com support.example.com pass support.example.com fail 80.86.198.161 3 none forwarded support.example.com support.example.com pass support.example.com fail 83.170.112.16 1 none forwarded support.example.com support.example.com pass support.example.com fail 85.13.132.217 4 none forwarded support.example.com support.example.com pass support.example.com fail 85.159.66.207 2 none forwarded support.example.com support.example.com pass gmail.com neutral 86.110.226.47 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.248.240.44 1 none forwarded support.example.com support.example.com pass support.example.com fail 89.35.161.197 1 none forwarded support.example.com support.example.com pass support.example.com fail 91.121.160.23 1 none forwarded support.example.com support.example.com pass support.example.com fail 93.114.64.193 1 none forwarded support.example.com support.example.com pass support.example.com fail 93.186.192.23 2 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.81 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.141 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.44.189 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.238 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.52.250 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.53.223 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.214 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.91.216 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.6.68.135 1 reject forwarded example.com none gehenna6.rutgers.edu neutral 129.79.1.193 3 reject forwarded example.com none example.com fail 167.206.10.4 4 reject forwarded support.example.com support.example.com neutral support.example.com fail 167.206.10.5 5 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.95 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.98 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.99 1 reject forwarded example.com none example.com fail 17.148.16.99 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 173.203.2.22 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 174.121.1.34 1 reject forwarded example.com none example.com fail 176.31.96.25 2 reject forwarded example.com none example.com fail 189.113.2.68 1 reject forwarded example.com none hosting3.isun.biz neutral 193.90.12.10 1 reject forwarded example.com none example.com fail 195.3.96.120 1 reject forwarded example.com mail6.us2.mcsv.net pass mail6.us2.mcsv.net neutral 195.35.82.71 1 reject forwarded support.example.com support.example.com neutral krokstrand.se neutral 207.171.7.70 1 reject forwarded example.com none example.com fail 212.227.17.2 1 reject forwarded mx.example.com none mout-bounce.kundenserver.de pass 212.35.66.10 1 reject forwarded example.com none example.com fail 216.40.42.17 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 220.233.0.70 1 reject forwarded example.com none example.com fail 23.24.216.82 1 reject forwarded example.com none example.com fail 43.253.217.4 1 reject forwarded mx.example.com none mail02.mail-servers.jp neutral 46.235.43.64 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 61.9.189.143 1 reject forwarded example.com none example.com fail 61.9.189.234 1 reject forwarded example.com none example.com fail 64.136.55.11 2 reject forwarded example.com none example.com fail 65.55.116.30 1 reject forwarded m.example.com m.example.com neutral hotmail.com pass 65.55.116.45 1 reject forwarded m.example.com m.example.com neutral msn.com pass 65.99.230.31 2 reject forwarded example.com none example.com fail 66.111.4.223 3 reject forwarded example.com none example.com fail 66.172.200.7 38 reject forwarded example.com none example.com fail 66.226.7.200 1 reject forwarded example.com none example.com fail 66.96.189.18 1 reject forwarded example.com none vanpeltconstruction.com pass 69.49.111.95 1 reject forwarded example.com none example.com fail 69.57.146.83 1 reject forwarded example.com none example.com fail 69.89.17.130 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.89.18.147 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 69.94.26.202 4 reject forwarded support.example.com support.example.com neutral support.example.com fail 70.89.52.109 6 reject forwarded example.com none example.com fail 71.16.117.19 1 reject forwarded example.com none example.com fail 72.34.58.171 1 reject forwarded example.com none example.com fail 72.35.12.185 2 reject forwarded support.example.com support.example.com neutral support.example.com fail 72.35.23.124 1 reject forwarded support.example.com support.example.com neutral fusemail.com pass 72.52.151.79 1 reject forwarded example.com none example.com fail 74.208.4.203 20 reject forwarded example.com none example.com fail 74.52.183.34 2 reject forwarded example.com none example.com fail 76.96.59.243 1 reject forwarded proxymail.example.com shopkick.com pass shopkick.com softfail 83.235.66.60 1 reject forwarded example.com none example.com fail 94.136.40.61 4 reject forwarded example.com example.com neutral example.com fail 94.136.53.67 1 reject forwarded example.com none example.com fail 98.139.91.97 1 reject forwarded example.com example.com fail example.com fail 108.178.24.174 1 none forwarded support.example.com support.example.com pass support.example.com fail 108.178.24.182 1 none forwarded support.example.com support.example.com pass gmail.com neutral 116.90.163.254 1 none forwarded support.example.com support.example.com pass support.example.com fail 117.104.160.39 2 none forwarded support.example.com support.example.com pass support.example.com fail 118.82.124.103 2 none forwarded support.example.com support.example.com pass x253.secure.ne.jp neutral 140.247.35.198 1 none forwarded support.example.com support.example.com pass fas.harvard.edu neutral 162.39.147.126 1 none forwarded support.example.com support.example.com pass support.example.com fail 169.232.46.164 1 none forwarded example.com example.com pass example.com fail 173.192.222.67 1 none forwarded support.example.com support.example.com pass support.example.com fail 173.199.170.76 4 none forwarded example.com example.com pass example.com fail 173.201.192.33 1 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.192.59 3 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.39 1 none forwarded example.com example.com pass bounce.secureserver.net pass 173.236.101.18 1 none forwarded example.com example.com pass example.com fail 173.236.108.29 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.194.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.154.208.34 1 none forwarded support.example.com support.example.com pass support.example.com fail 184.173.91.202 1 none forwarded support.example.com support.example.com pass support.example.com fail 188.165.218.18 2 none forwarded support.example.com support.example.com pass support.example.com fail 193.213.115.21 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.204.113.43 3 none forwarded support.example.com support.example.com pass support.example.com fail 195.138.202.27 1 none forwarded support.example.com support.example.com pass support.example.com fail 195.186.99.141 1 none forwarded support.example.com support.example.com pass zhbdzmsp-mfwd13.bluewin.ch neutral 198.212.10.118 1 none forwarded support.example.com support.example.com pass support.example.com fail 198.212.10.119 4 none forwarded support.example.com support.example.com pass support.example.com fail 198.212.10.227 3 none forwarded support.example.com support.example.com pass support.example.com fail 198.82.162.213 3 none forwarded support.example.com support.example.com pass vt.edu pass 202.172.28.112 4 none forwarded example.com example.com pass example.com fail 202.224.39.164 3 none forwarded support.example.com support.example.com pass support.example.com fail 205.251.139.10 1 none forwarded example.com example.com pass example.com fail 207.210.80.218 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.101.27.208 1 none forwarded support.example.com support.example.com pass support.example.com fail 208.97.132.119 1 none forwarded support.example.com support.example.com pass gmail.com neutral 208.97.132.207 1 none forwarded example.com example.com pass example.com fail 209.172.51.180 1 none forwarded support.example.com support.example.com pass support.example.com fail 209.217.78.152 4 none forwarded support.example.com support.example.com pass support.example.com fail 209.217.78.181 2 none forwarded support.example.com support.example.com pass support.example.com fail 209.85.160.176 1 none forwarded support.example.com support.example.com pass vilaboa.cl neutral 209.85.161.169 1 none forwarded support.example.com support.example.com pass tfc-edc.ca neutral 209.85.161.170 1 none forwarded support.example.com support.example.com pass saltbarons.com pass 209.85.161.171 1 none forwarded support.example.com support.example.com pass una-mi.com softfail 209.85.161.171 1 none forwarded support.example.com support.example.com pass sevensails.com.br neutral 209.85.161.172 2 none forwarded example.com example.com pass my.csun.edu neutral 209.85.161.172 1 none forwarded support.example.com support.example.com pass wemakestuffhappen.com neutral 209.85.161.175 1 none forwarded support.example.com support.example.com pass qltours.com neutral 209.85.161.175 1 none forwarded support.example.com support.example.com pass revelaweb.com.br neutral 209.85.161.175 1 none forwarded support.example.com support.example.com pass targetedsocial.com neutral 209.85.161.178 9 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.161.178 1 none forwarded support.example.com support.example.com pass colorguide.me neutral 209.85.161.178 5 none forwarded support.example.com support.example.com pass industrystandard.ro pass 209.85.161.180 1 none forwarded support.example.com support.example.com pass chrisjensen.info neutral 209.85.161.181 1 none forwarded support.example.com support.example.com pass tessera.gr softfail 209.85.212.173 7 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.212.178 1 none forwarded support.example.com support.example.com pass edwardtse.net pass 209.85.212.178 1 none forwarded support.example.com support.example.com pass businessleads.com neutral 209.85.213.169 1 none forwarded support.example.com support.example.com pass modmarket.com neutral 209.85.213.171 6 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.172 1 none forwarded example.com example.com pass rccentral.org neutral 209.85.213.173 1 none forwarded example.com example.com pass my.csun.edu neutral 209.85.213.173 1 none forwarded support.example.com support.example.com pass jumpstartweb.com neutral 209.85.213.175 1 none forwarded support.example.com support.example.com pass dimitrovski.info neutral 209.85.213.176 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.213.176 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.213.178 4 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.214.170 1 none forwarded support.example.com support.example.com pass tudivan.net fail 209.85.214.170 2 none forwarded support.example.com support.example.com pass digidemon.eu neutral 209.85.214.171 2 none forwarded support.example.com support.example.com pass sevensails.com.br neutral 209.85.214.172 1 none forwarded support.example.com support.example.com pass grapheffect.com neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass spread.cl neutral 209.85.214.173 4 none forwarded support.example.com support.example.com pass liniad.com neutral 209.85.214.173 1 none forwarded support.example.com support.example.com pass sandorszabolcs.com neutral 209.85.214.174 4 none forwarded example.com example.com pass my.csun.edu neutral 209.85.214.174 1 none forwarded support.example.com support.example.com pass wheatus.com neutral 209.85.214.174 2 none forwarded support.example.com support.example.com pass toteleather.com softfail 209.85.214.175 1 none forwarded support.example.com support.example.com pass mannaszappan.hu pass 209.85.214.175 1 none forwarded support.example.com support.example.com pass mypoutylips.com neutral 209.85.214.176 26 none forwarded support.example.com support.example.com pass mazemedia.se neutral 209.85.214.176 1 none forwarded support.example.com support.example.com pass fusiontree.com neutral 209.85.214.176 1 none forwarded support.example.com support.example.com pass pride.hofstra.edu neutral 209.85.214.177 2 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.179 1 none forwarded support.example.com support.example.com pass thelodgemusic.com neutral 209.85.214.180 1 none forwarded support.example.com support.example.com pass talodi.net neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass escarlate.com neutral 209.85.214.181 1 none forwarded support.example.com support.example.com pass bodyandmindguam.com neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass prxinc.com neutral 209.85.214.182 1 none forwarded support.example.com support.example.com pass mypoutylips.com neutral 209.85.214.182 2 none forwarded support.example.com support.example.com pass thirdoptionmen.org neutral 209.85.215.170 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.171 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.215.172 1 none forwarded example.com example.com pass ig.com.br pass 209.85.215.173 1 none forwarded support.example.com support.example.com pass stp-sf.org neutral 209.85.215.175 12 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.169 1 none forwarded support.example.com support.example.com pass mynewfriends.eu neutral 209.85.216.171 1 none forwarded support.example.com support.example.com pass pwnel.net neutral 209.85.216.172 1 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.216.175 1 none forwarded support.example.com support.example.com pass gf.com.vn neutral 209.85.216.178 1 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.216.179 1 none forwarded support.example.com support.example.com pass lesroches.ch softfail 209.85.216.180 2 none forwarded support.example.com support.example.com pass berrylite.com neutral 209.85.217.169 1 none forwarded support.example.com support.example.com pass 1v1y.com neutral 209.85.217.169 1 none forwarded support.example.com support.example.com pass mccannglobal.com neutral 209.85.217.170 5 none forwarded support.example.com support.example.com pass befoundonline.com neutral 209.85.217.173 1 none forwarded support.example.com support.example.com pass properm.ru neutral 209.85.217.173 1 none forwarded support.example.com support.example.com pass istanbul.com neutral 209.85.217.175 1 none forwarded support.example.com support.example.com pass mabasa.com neutral 209.85.217.177 1 none forwarded support.example.com support.example.com pass rukout.com neutral 209.85.217.178 3 none forwarded support.example.com support.example.com pass activetape.com neutral 209.85.217.180 5 none forwarded support.example.com support.example.com pass gmail.com pass 209.85.217.180 1 none forwarded support.example.com support.example.com pass teefury.com pass 209.85.217.182 1 none forwarded support.example.com support.example.com pass persuadis.com neutral 209.85.220.170 1 none forwarded support.example.com support.example.com pass apis3.com pass 210.172.183.63 1 none forwarded support.example.com support.example.com pass support.example.com fail 210.188.201.78 1 none forwarded support.example.com support.example.com pass sv108.xserver.jp neutral 212.42.233.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.171.216.71 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.171.216.72 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.191.128.81 3 none forwarded support.example.com support.example.com pass support.example.com fail 216.18.198.194 15 none forwarded support.example.com support.example.com pass support.example.com fail 216.200.145.38 1 none forwarded example.com example.com pass example.com fail 217.64.195.221 1 none forwarded example.com example.com pass example.com fail 217.70.183.196 7 none forwarded support.example.com support.example.com pass support.example.com fail 65.182.109.101 1 none forwarded support.example.com support.example.com pass support.example.com fail 65.254.253.102 1 none forwarded support.example.com support.example.com pass khawarnehal.powweb.com neutral 65.254.253.112 1 none forwarded support.example.com support.example.com pass calpom.com pass 65.254.253.122 1 none forwarded support.example.com support.example.com pass fbbuyer.com pass 66.220.144.140 11 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.141 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.151 10 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.154 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.144.159 3 none forwarded support.example.com support.example.com pass support.example.com pass 66.220.155.145 3 none forwarded support.example.com support.example.com pass support.example.com pass 67.227.238.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 68.230.241.137 1 none forwarded support.example.com support.example.com pass support.example.com fail 69.171.232.140 9 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.146 9 none forwarded support.example.com support.example.com pass support.example.com pass 69.171.232.159 12 none forwarded support.example.com support.example.com pass support.example.com pass 74.125.149.203 1 none forwarded support.example.com support.example.com pass zmchotels.com pass 74.220.192.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.201.144 1 none forwarded support.example.com support.example.com pass support.example.com fail 74.220.221.200 2 none forwarded example.com example.com pass example.com fail 80.237.138.233 1 none forwarded support.example.com support.example.com pass cbe-cologne.de neutral 80.237.138.234 1 none forwarded support.example.com support.example.com pass carsten-scheer.de neutral 80.239.141.190 1 none forwarded support.example.com support.example.com pass support.example.com fail 82.223.199.166 1 none forwarded support.example.com support.example.com pass support.example.com fail 87.238.248.177 1 none forwarded support.example.com support.example.com pass keyboardpro.com pass 89.107.226.195 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 94.100.176.214 1 none forwarded support.example.com support.example.com pass support.example.com fail 95.142.101.120 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.212.154 1 none forwarded example.com example.com pass example.com fail 98.139.212.191 2 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.132 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.139 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.145 1 none forwarded support.example.com support.example.com pass support.example.com fail 98.139.213.147 1 none forwarded support.example.com support.example.com pass support.example.com fail 24.39.57.9 6 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 107.0.182.183 1 reject forwarded example.com none example.com fail 121.50.43.167 1 reject forwarded support.example.com none k-art-factory.jp neutral 128.121.64.66 1 reject forwarded example.com none example.com fail 129.104.30.35 1 reject forwarded example.com none bounces.m4x.org pass 129.97.46.100 1 reject forwarded example.com none mecheng1.uwaterloo.ca neutral 130.111.32.94 4 reject forwarded groups.example.com none groups.example.com neutral 133.35.17.134 1 reject forwarded example.com none dent.niigata-u.ac.jp neutral 151.189.21.54 1 reject forwarded example.com none example.com fail 154.6.115.157 1 reject forwarded example.com none example.com fail 165.212.64.21 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.100 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 17.148.16.101 3 reject forwarded support.example.com support.example.com neutral support.example.com fail 187.73.32.151 1 reject forwarded example.com none example.com fail 189.38.92.165 1 reject forwarded example.com none example.com fail 189.38.92.195 1 reject forwarded example.com none example.com fail 194.134.41.43 1 reject forwarded example.com none example.com fail 194.25.134.19 1 reject forwarded example.com none example.com fail 194.25.134.81 2 reject forwarded example.com none example.com fail 194.25.134.83 1 reject forwarded example.com none example.com fail 195.158.192.4 2 reject forwarded example.com none example.com fail 195.47.247.73 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 200.147.34.73 1 reject forwarded example.com none dncgroup.cafe24.com neutral 200.18.33.189 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 201.76.49.187 1 reject forwarded example.com none no10.nayana.kr neutral 206.46.172.69 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 207.42.26.234 3 reject forwarded example.com none example.com fail 207.58.169.25 1 reject forwarded example.com none example.com fail 208.113.175.8 49 reject forwarded example.com none example.com fail 208.113.200.5 13 reject forwarded example.com none example.com fail 208.64.137.41 1 reject forwarded example.com none example.com fail 208.69.121.10 1 reject forwarded example.com none example.com fail 208.72.237.26 1 reject forwarded example.com none bounce2.pobox.com pass 208.80.204.50 1 reject forwarded example.com none example.com fail 208.84.243.72 3 reject forwarded example.com none bt01.terra.com neutral 208.84.243.77 1 reject forwarded example.com none bt01.terra.com neutral 208.91.198.21 1 reject forwarded example.com example.com neutral example.com fail 208.97.132.81 1 reject forwarded mx.example.com none homiemail-mx2.g.dreamhost.com neutral 209.239.36.67 1 reject forwarded example.com none host.our-web-host.com neutral 209.85.160.46 1 reject forwarded m.example.com m.example.com neutral auone.jp pass 209.85.213.42 1 reject forwarded support.example.com none thrillon.com neutral 209.85.215.53 1 reject forwarded example.com example.com neutral gmail.com pass 209.85.216.45 1 reject forwarded example.com example.com neutral lolapps.com pass 210.165.10.13 1 reject forwarded example.com none example.com fail 210.168.52.26 20 reject forwarded example.com example.com neutral voyagegroup.info pass 210.239.47.48 1 reject forwarded example.com none example.com fail 211.125.95.66 1 reject forwarded example.com none post.freeml.com pass 212.159.14.19 1 reject forwarded example.com none example.com fail 212.227.17.11 1 reject forwarded example.com none email.de neutral 212.52.84.110 1 reject forwarded example.com none outrelay06.libero.it neutral 216.13.106.65 1 reject forwarded example.com none example.com fail 216.146.33.22 1 reject forwarded example.com none example.com fail 216.22.60.172 1 reject forwarded example.com none example.com fail 216.32.180.14 1 reject forwarded support.example.com support.example.com neutral mail.sfsu.edu neutral 27.34.146.107 1 reject forwarded example.com none z115.secure.ne.jp neutral 38.111.141.31 1 reject forwarded support.example.com none support.example.com fail 50.22.208.206 1 reject forwarded example.com none sus79.suidc.com neutral 60.250.159.61 17 reject forwarded example.com none example.com fail 62.197.34.102 1 reject forwarded example.com none example.com fail 62.212.150.28 1 reject forwarded example.com none example.com fail 64.95.182.164 1 reject forwarded example.com none example.com fail 65.41.102.142 38 reject forwarded example.com none example.com fail 66.175.56.220 1 reject forwarded example.com none example.com fail 66.246.223.56 1 reject forwarded example.com none example.com fail 67.222.60.162 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 67.225.168.30 1 reject forwarded example.com none example.com fail 69.167.142.17 1 reject forwarded example.com none example.com fail 69.167.162.35 2 reject forwarded mx.example.com none host.talentave.com neutral 69.171.244.40 1 reject forwarded mx.example.com none unknown neutral 69.48.238.251 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 69.64.155.195 2 reject forwarded example.com none example.com fail 69.73.169.143 1 reject forwarded example.com none example.com fail 70.40.208.113 1 reject forwarded example.com none example.com fail 74.52.131.130 8 reject forwarded example.com none example.com fail 74.54.132.178 1 reject forwarded example.com none example.com fail 75.180.132.34 15 reject forwarded example.com none example.com fail 80.160.76.197 2 reject forwarded example.com none example.com fail 80.179.55.172 21 reject forwarded example.com none example.com fail 80.93.221.250 3 reject forwarded example.com none example.com fail 85.13.134.225 1 reject forwarded example.com none example.com fail 85.17.178.135 1 reject forwarded example.com none example.com fail 87.98.175.229 1 reject forwarded example.com example.com neutral example.com fail 88.190.253.77 2 reject forwarded support.example.com online.net pass support.example.com fail 89.106.106.22 1 reject forwarded example.com none example.com fail 93.189.92.246 1 reject forwarded example.com none example.com fail 98.129.184.12 1 reject forwarded example.com example.com neutral example.com fail 108.167.133.172 2 none forwarded support.example.com support.example.com pass support.example.com fail 119.235.251.164 1 none forwarded support.example.com support.example.com pass support.example.com fail 124.146.194.229 1 none forwarded support.example.com support.example.com pass support.example.com fail 128.196.130.200 1 none forwarded example.com example.com pass example.com fail 173.201.192.167 8 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 173.201.193.185 15 none forwarded support.example.com support.example.com pass bounce.secureserver.net pass 174.121.134.130 1 none forwarded support.example.com support.example.com pass support.example.com fail 174.132.168.226 6 none forwarded support.example.com support.example.com pass support.example.com fail 175.177.155.111 1 none forwarded example.com example.com pass mail01-md.ns.itscom.net neutral 184.173.239.116 1 none forwarded support.example.com support.example.com pass support.example.com fail 194.206.126.150 1 none forwarded example.com example.com pass example.com fail 202.216.245.131 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.183.213.142 1 none forwarded support.example.com support.example.com pass support.example.com fail 203.211.136.196 1 none forwarded support.example.com support.example.com pass support.example.com fail 205.134.224.208 1 none forwarded support.example.com support.example.com pass support.example.com fail 207.126.144.125 1 none forwarded support.example.com support.example.com pass webreality.co.uk pass 210.133.111.121 2 none forwarded support.example.com support.example.com pass support.example.com fail 210.172.129.242 1 none forwarded support.example.com support.example.com pass mailforward.dnsv.jp neutral 212.100.237.138 1 none forwarded support.example.com support.example.com pass support.example.com fail 213.251.186.209 1 none forwarded example.com example.com pass example.com fail 217.146.183.226 1 none forwarded support.example.com support.example.com pass support.example.com fail 66.48.69.67 6 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.69 3 none mailing_list support.example.com none idium.no pass 209.85.160.69 4 none mailing_list support.example.com none sidereel.com pass 209.85.160.69 7 none mailing_list support.example.com none washingtoncitypaper.com pass 209.85.160.71 3 none mailing_list support.example.com none verticalmarketing.net pass 209.85.160.72 12 none mailing_list support.example.com none dafiti.com.br pass 209.85.160.72 3 none mailing_list support.example.com none weststartv.ky pass 209.85.210.69 4 none mailing_list example.com none thingsoft.com pass 209.85.210.69 2 none mailing_list support.example.com none dejimedia.com pass 209.85.210.72 16 none mailing_list support.example.com none it-comm.co.jp pass 209.85.210.72 3 none mailing_list support.example.com none gamechanger.io pass 209.85.212.70 1 none mailing_list support.example.com none gosocial.dk pass 209.85.212.71 2 none mailing_list support.example.com none xa.net pass 209.85.213.71 6 none mailing_list support.example.com none 6waves.com pass 107.20.219.198 1 reject forwarded mx.example.com none mx1.reflectr.org neutral 108.178.14.146 2 reject forwarded example.com none example.com fail 128.120.32.130 1 reject forwarded example.com none example.com fail 128.120.32.131 2 reject forwarded example.com none example.com fail 128.135.165.72 1 reject forwarded support.example.com support.example.com fail support.example.com fail 129.170.16.123 6 reject forwarded example.com none example.com fail 161.58.164.240 1 reject forwarded example.com none example.com fail 169.232.46.180 1 reject forwarded example.com none example.com fail 173.193.237.48 1 reject forwarded example.com none dncgroup.cafe24.com neutral 173.201.192.53 1 reject forwarded mx.example.com none p3plsmtp12-01.prod.phx3.secureserver.net neutral 174.121.74.194 1 reject forwarded example.com none example.com fail 188.165.159.97 25 reject forwarded example.com none example.com fail 189.114.40.206 1 reject forwarded example.com none sus79.suidc.com neutral 192.206.10.228 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 193.226.128.35 1 reject forwarded example.com none example.com fail 193.252.22.212 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 194.145.224.20 1 reject forwarded example.com none example.com fail 195.245.230.34 2 reject forwarded example.com none example.com fail 198.212.10.118 2 reject forwarded example.com none example.com fail 198.82.161.192 1 reject forwarded support.example.com none listserv.vt.edu neutral 200.110.78.218 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 202.224.39.174 1 reject forwarded example.com none example.com fail 204.11.245.165 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 205.251.139.10 1 reject forwarded mx.example.com none ruth.tld0.net neutral 206.188.207.99 14 reject forwarded example.com none example.com fail 207.210.65.218 1 reject forwarded example.com none example.com fail 207.58.145.198 1 reject forwarded mx.example.com none vdp.gdp2.com neutral 208.101.27.208 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 208.131.134.51 16 reject forwarded example.com none example.com fail 208.89.132.142 1 reject forwarded example.com none iwon.com pass 209.200.238.20 1 reject forwarded example.com none example.com fail 209.85.160.172 1 reject forwarded example.com example.com neutral adictiz.com pass 209.85.161.170 1 reject forwarded support.example.com support.example.com neutral trinity.edu pass 209.85.212.169 3 reject forwarded example.com example.com neutral howzat.com pass 209.85.213.172 2 reject forwarded example.com example.com neutral adictiz.com pass 209.85.213.175 1 reject forwarded example.com none janele.net neutral 209.85.214.174 1 reject forwarded m.example.com m.example.com neutral auone.jp pass 209.85.214.180 1 reject forwarded example.com none email.arizona.edu neutral 209.85.216.173 6 reject forwarded example.com example.com neutral lolapps.com pass 209.85.216.180 1 reject forwarded example.com example.com neutral talltreegames.com pass 210.212.58.111 5 reject forwarded example.com none example.com fail 211.125.95.146 1 reject forwarded example.com none example.com fail 213.171.216.76 1 reject forwarded example.com none example.com fail 213.239.178.80 1 reject forwarded example.com none example.com fail 216.200.145.38 2 reject forwarded example.com none example.com fail 216.230.224.41 20 reject forwarded example.com none example.com fail 216.235.172.45 8 reject forwarded example.com none example.com fail 216.32.181.183 1 reject forwarded support.example.com support.example.com neutral mymail.tcc.fl.edu neutral 216.67.248.121 1 reject forwarded example.com none example.com fail 216.82.242.115 1 reject forwarded support.example.com support.example.com neutral zingpm.com pass 218.102.53.160 1 reject forwarded example.com none example.com fail 38.113.244.185 1 reject forwarded example.com none example.com fail 46.255.225.251 2 reject forwarded support.example.com support.example.com neutral sytea.org neutral 62.128.193.155 1 reject forwarded example.com none example.com fail 66.252.228.215 75 reject forwarded example.com none example.com fail 68.230.241.136 1 reject forwarded example.com none lsh808.siteprotect.co.kr neutral 68.230.241.202 1 reject forwarded example.com none example.com fail 72.249.142.165 2 reject forwarded example.com none example.com fail 74.220.206.166 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.208.138 2 reject forwarded m.example.com m.example.com neutral m.example.com neutral 74.220.217.228 1 reject forwarded example.com none example.com fail 74.220.221.163 1 reject forwarded example.com none just56.justhost.com neutral 76.162.254.108 1 reject forwarded example.com none example.com fail 81.169.146.144 1 reject forwarded m.example.com m.example.com neutral m.example.com neutral 81.169.146.147 1 reject forwarded example.com none example.com fail 83.246.103.131 52 reject forwarded example.com none example.com fail 85.158.140.211 1 reject forwarded mx.example.com none mail194.messagelabs.com neutral 49.212.21.44 1 reject mailing_list example.com example.com fail japan-romance.com neutral 74.125.82.70 14 reject mailing_list support.example.com none graphscience.com pass 95.172.88.29 4 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.161.199 1 none mailing_list support.example.com none mygengo.com pass 209.85.214.197 5 none mailing_list support.example.com none trendmaze.com pass 209.85.214.197 2 none mailing_list support.example.com none eventbrite.com pass 209.85.214.197 1 none mailing_list support.example.com none gametrafficmedia.com pass 209.85.214.198 6 none mailing_list support.example.com none ubuntudeal.co.za pass 209.85.214.198 15 none mailing_list support.example.com none infectiousmedia.com pass 209.85.215.198 6 none mailing_list support.example.com none graphscience.com pass 209.85.216.198 2 none mailing_list support.example.com none apis3.com pass 209.85.216.198 6 none mailing_list support.example.com none ubuntudeal.co.za pass 209.85.216.199 6 none mailing_list support.example.com none 6waves.com pass 114.111.116.122 8 reject forwarded reply.example.com examplemail.com neutral returns.yahoogroups.jp pass 121.111.227.145 97 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.146 104 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.149 108 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.150 102 reject forwarded m.example.com m.example.com neutral auoneerrml1.ezweb.ne.jp pass 121.111.227.151 1 reject forwarded example.com none auoneerrml1.ezweb.ne.jp pass 121.111.227.151 2 reject forwarded support.example.com support.example.com fail auoneerrml1.ezweb.ne.jp pass 128.103.229.181 2 reject forwarded example.com none example.com fail 128.125.137.215 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 128.125.137.216 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 128.197.228.177 1 reject forwarded example.com none example.com fail 174.120.239.130 1 reject forwarded example.com none no10.nayana.kr neutral 174.132.167.194 1 reject forwarded example.com none smtp-corp-01.aweber.com softfail 184.173.252.171 2 reject forwarded example.com none example.com fail 187.177.165.121 5 reject forwarded example.com none example.com fail 193.104.187.100 1 reject forwarded example.com none example.com fail 199.189.225.138 6 reject forwarded example.com none example.com fail 199.231.136.156 32 reject forwarded example.com none example.com fail 199.238.178.100 1 reject forwarded mx.example.com none tobyormarc.securesites.net neutral 207.155.253.210 1 reject forwarded example.com none example.com fail 208.131.141.156 10 reject forwarded example.com none example.com fail 213.171.216.170 1 reject forwarded example.com none example.com fail 213.171.216.172 1 reject forwarded example.com example.com neutral example.com fail 213.199.154.139 1 reject forwarded support.example.com support.example.com neutral support.example.com fail 213.199.154.140 1 reject forwarded support.example.com support.example.com neutral spu.edu pass 216.104.163.152 2 reject forwarded example.com none example.com fail 223.255.176.199 6 reject forwarded support.example.com support.example.com neutral support.example.com fail 129.2.169.207 1 reject mailing_list groups.example.com examplemail.com fail surveygwia.umd.edu neutral 193.163.96.10 2 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 198.78.13.130 1 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.70 10 reject mailing_list support.example.com none irep.co.jp pass 209.85.160.70 2 reject mailing_list support.example.com none ringloo.com neutral 209.85.160.70 1 reject mailing_list support.example.com none zoom.com.br softfail 209.85.160.70 1 reject mailing_list support.example.com none mofunzone.com neutral 209.85.160.70 7 reject mailing_list support.example.com none graphscience.com pass 209.85.160.70 8 reject mailing_list support.example.com none wikiogroup.com neutral 209.85.160.70 18 reject mailing_list support.example.com none steellondon.com neutral 209.85.160.70 8 reject mailing_list support.example.com none bposolutions.com neutral 209.85.160.70 1 reject mailing_list support.example.com none catchoftheday.com.au neutral 209.85.160.71 2 reject mailing_list example.com none pixodegames.com neutral 209.85.160.71 3 reject mailing_list support.example.com none travenues.com neutral 209.85.160.71 1 reject mailing_list support.example.com none bposolutions.com neutral 209.85.160.71 18 reject mailing_list support.example.com none techlightenment.com neutral 209.85.160.71 2 reject mailing_list support.example.com none fast-trackmarketing.com neutral 209.85.160.72 1 reject mailing_list support.example.com none mcfiva.com neutral 209.85.160.72 1 reject mailing_list support.example.com none joyfort.com neutral 209.85.160.72 2 reject mailing_list support.example.com none waistbeads.com neutral 209.85.160.72 2 reject mailing_list support.example.com none socialites.co.nz neutral 209.85.210.69 3 reject mailing_list support.example.com none istikana.com neutral 209.85.210.69 4 reject mailing_list support.example.com none rockaboxmedia.com neutral 209.85.210.71 2 reject mailing_list support.example.com none everyday.com.my neutral 209.85.210.72 1 reject mailing_list support.example.com none adsonic.de neutral 209.85.210.72 4 reject mailing_list support.example.com none onsharp.com softfail 209.85.210.72 8 reject mailing_list support.example.com none mediaanalys.se neutral 209.85.212.70 1 reject mailing_list support.example.com none mainstreethub.com softfail 209.85.212.72 1 reject mailing_list support.example.com none adsonic.de neutral 209.85.212.72 7 reject mailing_list support.example.com none deducta.dk neutral 209.85.213.69 8 reject mailing_list support.example.com none stretchdigital.com neutral 209.85.213.70 21 reject mailing_list support.example.com none graphscience.com pass 209.85.216.72 2 reject mailing_list support.example.com none taykey.com neutral 209.85.216.72 2 reject mailing_list support.example.com none vintedge.com neutral 165.95.194.244 4 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 207.126.144.58 4 reject mailing_list support.example.com none lieferando.de neutral 209.85.160.198 2 reject mailing_list example.com none bro-designs.co.cc neutral 209.85.161.198 1 reject mailing_list support.example.com none quirk.biz neutral 209.85.161.199 25 reject mailing_list example.com none epsi.fr softfail 209.85.213.198 14 reject mailing_list support.example.com none graphscience.com pass 209.85.213.200 7 reject mailing_list support.example.com none deducta.dk neutral 209.85.214.197 1 reject mailing_list support.example.com none suhrshus.dk neutral 209.85.214.198 182 reject mailing_list support.example.com none graphscience.com pass 209.85.214.198 3 reject mailing_list support.example.com none wikiogroup.com neutral 209.85.214.200 1 reject mailing_list support.example.com none clickgnosis.com neutral 209.85.216.197 8 reject mailing_list support.example.com none sonusfactory.com neutral 209.85.216.199 1 reject mailing_list support.example.com none illumemagazine.org neutral 74.125.149.242 1 reject mailing_list support.example.com none latinamerikareiser.no neutral 160.109.103.182 1 reject mailing_list groups.example.com examplemail.com fail mail.keysafetyinc.com neutral 195.231.225.142 4 reject mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 209.85.160.70 3 none forwarded mailing_list support.example.com none bigbrands.pl pass 209.85.160.71 52 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.161.72 3 none forwarded mailing_list support.example.com none sparkker.com pass 209.85.210.69 48 none forwarded mailing_list support.example.com none hungrymachine.com pass 209.85.210.71 3 none forwarded mailing_list support.example.com none komdat-solutions.com pass 209.85.216.71 4 none forwarded mailing_list example.com none againstintuition.com pass 74.125.245.72 2 none forwarded mailing_list support.example.com none crowdstar.com pass 74.125.245.92 4 none forwarded mailing_list support.example.com none crowdstar.com pass 98.136.219.8 31 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.160.171 6 none forwarded mailing_list support.example.com none fetise.com pass 209.85.161.198 1 none forwarded mailing_list support.example.com none wearesocial.net pass 209.85.161.200 1 none forwarded mailing_list support.example.com none admin.naharnet.com pass 209.85.216.199 8 none forwarded mailing_list example.com none againstintuition.com pass 209.85.216.199 24 none forwarded mailing_list support.example.com none hungrymachine.com pass 74.125.149.107 3 none forwarded mailing_list support.example.com none bluefly.com pass 209.85.160.69 3 reject forwarded mailing_list support.example.com none charlesandtracy.com neutral 209.85.160.70 12 reject forwarded mailing_list support.example.com none crane-west.com neutral 209.85.160.72 48 reject forwarded mailing_list example.com none iminlikewithyou.com neutral 209.85.160.72 4 reject forwarded mailing_list support.example.com none nydrle.net neutral 209.85.210.71 3 reject forwarded mailing_list support.example.com none webxites.com neutral 209.85.210.72 4 reject forwarded mailing_list support.example.com none digitalrevenew.com neutral 209.85.212.42 3 reject forwarded mailing_list support.example.com none apis3.com pass 209.85.212.69 2 reject forwarded mailing_list support.example.com none meyouhealth.com softfail 209.85.212.70 4 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.213.72 7 reject forwarded mailing_list support.example.com none bangonline.com.au neutral 213.115.71.61 7 reject forwarded mailing_list groups.example.com examplemail.com neutral groups.example.com neutral 74.125.245.74 8 reject forwarded mailing_list support.example.com none reloadmedia.com.au neutral 74.125.245.84 8 reject forwarded mailing_list support.example.com none reloadmedia.com.au neutral 98.136.218.32 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.34 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.218.59 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.13 2 reject forwarded mailing_list reply.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.23 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.36 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.41 14 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.75 1 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.215.14 2 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.31 2 reject forwarded mailing_list example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.164.47 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.58 2 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.164.59 9 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.23 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.26 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.41 2 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 165.95.194.244 2 reject forwarded mailing_list groups.example.com examplemail.com neutral barracuda.bryanisd.org neutral 209.85.161.171 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.161.200 2 reject forwarded mailing_list support.example.com none snsplus.com neutral 209.85.213.178 1 reject forwarded mailing_list support.example.com none reverbnation.com pass 209.85.214.182 1 reject forwarded mailing_list support.example.com none kungfuchampionship.com pass 209.85.214.200 2 reject forwarded mailing_list example.com none shaktienterprise.com neutral 209.85.216.198 10 reject forwarded mailing_list support.example.com none convertsimply.com neutral 209.85.217.198 4 reject forwarded mailing_list example.com none schoolfeed.com softfail 216.32.181.184 2 reject forwarded mailing_list groups.example.com examplemail.com neutral furman.edu neutral 66.220.144.135 1 reject forwarded mailing_list support.example.com none acute.fr neutral 66.220.144.136 2 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.144.139 5 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.140 1 reject forwarded mailing_list support.example.com none gametrafficmedia.com softfail 66.220.144.149 1 reject forwarded mailing_list support.example.com none yieldsoftware.com neutral 66.220.144.155 8 reject forwarded mailing_list support.example.com none graphscience.com softfail 66.220.144.158 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 66.220.155.135 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.141 1 reject forwarded mailing_list example.com none tkcitylike.com neutral 69.171.232.143 3 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.146 2 reject forwarded mailing_list support.example.com none plumbee.co.uk softfail 69.171.232.146 1 reject forwarded mailing_list support.example.com none votefortheworst.com neutral 69.171.232.151 1 reject forwarded mailing_list example.com none tkcitylike.com neutral 69.171.232.151 1 reject forwarded mailing_list support.example.com none mainstreethub.com softfail 69.171.232.152 1 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.156 1 reject forwarded mailing_list example.com none tenku-forum.com neutral 69.171.232.156 5 reject forwarded mailing_list support.example.com none gosocial.dk softfail 69.171.232.157 1 reject forwarded mailing_list support.example.com none socialwavelength.com neutral 69.171.232.158 7 reject forwarded mailing_list support.example.com none graphscience.com softfail 74.125.149.140 8 reject forwarded mailing_list support.example.com none clearsearchmedia.com permerror 74.125.245.178 5 reject forwarded mailing_list support.example.com none ecglobal.com temperror 98.136.219.101 1 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.104 6 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.125 3 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.132 2 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.132 13 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.166 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.166 18 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.192 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.195 12 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.136.219.195 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.136.219.197 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.208 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.136.219.218 4 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.136.219.244 12 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.136.219.246 10 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.167 1 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.214.206 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.206 9 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.214.248 3 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.214.250 3 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.215.149 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.161 12 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.138.215.170 6 reject forwarded mailing_list groups.example.com gruposyahoo.com pass returns.groups.yahoo.com neutral 98.138.215.194 5 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.201 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.138.215.206 2 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.138.215.212 13 reject forwarded mailing_list groups.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.138.215.221 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.221 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.138.215.228 8 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.138.215.239 6 reject forwarded mailing_list reply.example.com gruposyahoo.com.ar pass returns.groups.yahoo.com neutral 98.139.164.101 2 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.102 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.102 24 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.103 3 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.164.105 1 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.164.109 6 reject forwarded mailing_list groups.example.com yahoogroupes.fr pass returns.groups.yahoo.com neutral 98.139.165.105 1 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.153 8 reject forwarded mailing_list reply.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 98.139.165.165 2 reject forwarded mailing_list groups.example.com yahoogroups.com.hk pass returns.groups.yahoo.com neutral 98.139.165.175 4 reject forwarded mailing_list groups.example.com yahoogrupos.com.br fail returns.groups.yahoo.com neutral 98.139.165.186 2 reject forwarded mailing_list groups.example.com yahoogroups.com pass returns.groups.yahoo.com neutral 98.139.165.186 20 reject forwarded mailing_list groups.example.com yahoogrupos.com.br pass returns.groups.yahoo.com neutral 209.85.160.69 15 none trusted_forwarder mailing_list support.example.com zlavadna.sk pass support.example.com pass zlavadna.sk pass support.example.com pass 209.85.160.70 10 none trusted_forwarder mailing_list support.example.com antevenio.com pass support.example.com pass antevenio.com pass support.example.com pass 209.85.160.70 3 none trusted_forwarder mailing_list support.example.com patientslikeme.com pass support.example.com pass patientslikeme.com neutral support.example.com pass 209.85.160.72 2 none trusted_forwarder mailing_list support.example.com promiflash.de pass support.example.com pass promiflash.de pass support.example.com pass 209.85.210.71 4 none trusted_forwarder mailing_list support.example.com blinqmedia.com pass support.example.com pass blinqmedia.com softfail support.example.com pass 209.85.216.70 1 none trusted_forwarder mailing_list support.example.com disko.fr pass support.example.com pass disko.fr pass support.example.com pass 209.85.160.70 2 none forwarded trusted_forwarder mailing_list example.com vitrue.com pass none eng.vitrue.com neutral example.com pass 209.85.216.198 4 none forwarded trusted_forwarder mailing_list support.example.com seedingideas.com pass support.example.com pass seedingideas.com neutral seedingideas.com fail 66.220.144.145 4 none forwarded trusted_forwarder mailing_list example.com flipkart.com pass none flipkart.com softfail example.com pass
yeah.net!example.com!1337270400!1337356799.20120518.xml000066400000000000000000004757421416002254500331320ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/libopendmarc/tests/testfiles yeah.net abuse@yeah.net aggr_report_example.com_20120518_yeah.net 1337270400.0 1337356799.0 example.com r r

reject

reject 100
209.85.214.181 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 116.233.121.204 2 reject fail fail example.com example.com fail 65.55.111.108 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 113.108.12.81 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 218.17.156.60 2 reject fail fail example.com example.com fail 106.10.148.163 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.210.53 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 221.224.213.66 2 reject fail fail example.com example.com fail 113.108.12.83 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 66.220.144.139 246 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.138 247 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 65.55.111.107 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 66.220.144.135 222 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.165 1 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.137 256 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.136 229 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 65.55.111.110 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.111.113 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 65.55.111.90 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 69.171.232.168 32 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.169 30 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.160 4 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.161 2 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.162 7 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 113.108.12.87 1 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 69.171.232.164 2 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.165 7 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.166 5 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.167 6 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 121.15.200.73 2 reject fail fail example.com example.com fail 210.75.17.210 2 reject fail fail example.com example.com fail 112.64.170.138 2 reject fail fail example.com example.com fail 35.9.75.204 1 none pass fail example.com example.com pass verify result: all signatures verified msu.edu pass verify result: all signatures verified example.com fail 220.181.12.90 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 209.85.160.69 1 reject fail fail example.com ctef.org none 61.135.132.204 3 none pass pass example.com example.com pass verify result: all signatures verified sohu.com pass 116.6.43.215 6 reject fail fail example.com example.com fail 59.61.170.22 2 reject fail fail example.com example.com fail 209.85.216.52 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.54.61.92 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.34.90 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 121.33.210.22 2 reject fail fail example.com example.com fail 106.10.149.103 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 58.251.15.134 2 reject fail fail example.com example.com fail 65.55.111.104 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.111.105 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.111.102 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.55.111.103 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 106.10.151.49 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 69.171.232.175 18 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.174 18 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.173 29 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.172 23 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.171 27 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.170 25 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 209.85.212.181 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 202.108.3.63 1 none pass pass example.com example.com pass verify result: all signatures verified vip.sina.com pass 65.55.90.109 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 220.181.15.203 1 none pass pass example.com example.com pass verify result: all signatures verified 126.com pass 58.39.71.10 2 reject fail fail example.com example.com fail 209.85.213.181 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.55.90.108 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 221.176.9.70 1 none pass pass example.com example.com pass verify result: all signatures verified 139.com pass 209.85.216.46 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.55.111.88 2 none pass pass example.com example.com pass verify result: all signatures verified live.com pass hotmail.com pass 58.240.185.58 2 reject fail fail example.com example.com fail 114.33.85.34 2 reject fail fail example.com example.com fail 209.85.215.53 11 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 221.154.34.138 2 reject fail fail example.com example.com fail 65.55.90.81 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 115.66.148.148 2 reject fail fail example.com example.com fail 74.125.82.47 10 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 106.10.149.1 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 65.55.34.86 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 113.108.12.90 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.244.102.130 2 reject fail fail example.com example.com fail 216.32.181.181 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value edu.vamk.fi none 65.55.34.80 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 112.97.24.207 2 reject fail fail example.com example.com fail 221.224.112.124 24 reject fail fail example.com example.com fail 106.10.151.39 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 58.253.172.254 2 reject fail fail example.com example.com fail 106.10.151.31 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 113.108.23.51 1 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 65.55.90.79 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 220.181.12.51 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 113.108.12.95 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 65.55.111.89 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 65.55.34.79 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 113.78.27.115 12 reject fail fail example.com example.com fail 65.55.111.86 2 none pass pass example.com example.com pass verify result: all signatures verified msn.com pass live.com pass 65.55.111.87 2 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 211.22.166.233 2 reject fail fail example.com example.com fail 66.220.144.162 5 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 65.55.90.99 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 66.220.144.160 4 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.161 4 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.166 11 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.167 8 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.164 9 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.165 6 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 220.181.12.79 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 209.85.160.181 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 183.54.118.229 2 reject fail fail example.com example.com fail 65.55.90.98 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 147.226.7.53 1 reject fail pass example.com example.com neutral sigature verify error: message body does not hash to bh value bsu.edu pass 66.220.144.163 11 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 209.85.213.53 9 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 141.117.101.133 1 reject fail fail example.com example.com neutral sigature verify error: message body does not hash to bh value example.com fail 125.89.128.190 2 reject fail fail example.com example.com fail 113.108.23.48 2 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 113.108.23.49 2 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 98.139.212.186 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 209.85.216.181 3 none pass pass example.com example.com pass verify result: all signatures verified jiahaochem.com none gmail.com pass 113.108.23.40 2 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass qq.com pass 106.10.149.85 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 113.108.23.42 1 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 113.108.23.43 2 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass qq.com pass 113.108.23.44 1 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 113.108.23.45 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.23.47 2 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass foxmail.com pass 65.55.111.94 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 69.171.232.163 7 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 113.108.12.84 1 none pass pass example.com example.com pass verify result: all signatures verified qq.com pass 113.108.12.85 3 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass qq.com pass 65.55.111.92 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 66.220.155.161 2 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 220.181.12.62 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 220.181.12.63 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 220.181.12.60 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 220.181.12.66 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 209.85.212.175 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 113.114.225.104 2 reject fail fail example.com example.com fail 220.181.12.69 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 219.128.49.161 2 reject fail fail example.com example.com fail 74.125.82.181 8 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.217.181 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 110.83.85.246 2 reject fail fail example.com example.com fail 74.125.83.53 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.155.137 183 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.136 144 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.135 155 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 202.108.3.66 1 none pass pass example.com example.com pass verify result: all signatures verified vip.sina.com pass 65.54.61.98 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 65.54.61.94 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 220.181.12.70 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 58.62.17.138 2 reject fail fail example.com example.com fail 66.220.155.139 133 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.138 157 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 113.108.13.47 2 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 209.85.220.181 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 66.220.144.148 239 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.149 227 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 220.181.12.59 2 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 219.145.52.191 2 reject fail fail example.com example.com fail 66.220.144.144 251 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.145 193 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.146 233 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.147 226 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.140 242 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.141 231 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.142 236 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.143 231 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.139 475 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.138 440 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 221.176.9.68 1 none pass pass example.com example.com pass verify result: all signatures verified 139.com pass 175.111.255.130 2 reject fail fail example.com example.com fail 106.10.151.179 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 220.181.15.198 1 none pass pass example.com example.com pass verify result: all signatures verified 126.com pass 69.171.232.137 462 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.136 479 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.135 491 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 209.85.212.169 1 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 113.108.12.79 1 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 113.108.12.78 1 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 168.95.4.103 1 reject fail fail example.com example.com fail 113.108.12.77 2 none pass pass example.com example.com pass verify result: all signatures verified vip.qq.com pass 168.95.4.109 1 reject fail fail example.com example.com fail 66.220.155.142 161 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.143 161 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.140 132 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.141 128 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.146 143 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.147 172 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.155.144 162 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.145 146 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.148 133 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.149 119 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 65.55.90.106 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 66.220.144.159 262 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.158 252 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.153 247 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.152 238 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.144.151 222 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.150 232 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.157 241 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.156 242 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.155 231 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 66.220.144.154 254 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 202.136.223.243 64 reject fail fail example.com example.com fail 220.181.15.207 1 none pass pass example.com example.com pass verify result: all signatures verified 126.com pass 66.220.155.162 1 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 106.10.151.197 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 106.10.148.80 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 69.171.232.148 423 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.149 463 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.146 401 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.147 482 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.144 464 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.145 459 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.142 415 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.143 468 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.140 449 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.141 472 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.151 177 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.150 133 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.153 149 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.152 154 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.155 156 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.154 176 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.157 126 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.156 169 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.159 111 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 66.220.155.158 139 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 209.85.160.53 4 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 202.107.243.234 2 reject fail fail example.com example.com fail 209.85.212.53 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 220.189.216.68 2 reject fail fail example.com example.com fail 220.181.15.209 1 none pass pass example.com example.com pass verify result: all signatures verified 126.com pass 209.85.214.53 3 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 209.85.161.181 6 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 58.60.186.1 2 reject fail fail example.com example.com fail 74.125.82.41 2 none pass pass example.com example.com pass verify result: all signatures verified gmail.com pass 65.54.61.99 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 106.10.151.183 1 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 220.181.12.68 1 none pass pass example.com example.com pass verify result: all signatures verified 163.com pass 106.10.149.117 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 65.55.34.87 1 none pass pass example.com example.com pass verify result: all signatures verified live.com pass 113.97.163.65 2 reject fail fail example.com example.com fail 69.171.232.159 449 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.158 455 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.155 435 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.154 492 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.157 445 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.156 441 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.151 432 none pass pass pages.example.com, example.com pages.example.com pass verify result: all signatures verified example.com pass verify result: all signatures verified pages.example.com pass example.com pass 69.171.232.150 443 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.153 454 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 69.171.232.152 460 none pass pass example.com example.com pass verify result: all signatures verified example.com pass 65.55.90.86 1 none pass pass example.com example.com pass verify result: all signatures verified hotmail.com pass 59.36.102.76 1 none pass pass example.com example.com pass verify result: all signatures verified 21cn.com pass 183.63.35.90 2 reject fail fail example.com example.com fail 106.10.151.69 2 none pass fail example.com example.com pass verify result: all signatures verified example.com fail 65.55.111.77 1 none pass pass example.com example.com pass verify result: all signatures verified msn.com pass
OpenDMARC-rel-opendmarc-1-4-2/m4/000077500000000000000000000000001416002254500162315ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/m4/.gitignore000066400000000000000000000000771416002254500202250ustar00rootroot00000000000000libtool.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4 OpenDMARC-rel-opendmarc-1-4-2/m4/ax_pthread.m4000066400000000000000000000540461416002254500206230ustar00rootroot00000000000000# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_pthread.html # =========================================================================== # # SYNOPSIS # # AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) # # DESCRIPTION # # This macro figures out how to build C programs using POSIX threads. It # sets the PTHREAD_LIBS output variable to the threads library and linker # flags, and the PTHREAD_CFLAGS output variable to any special C compiler # flags that are needed. (The user can also force certain compiler # flags/libs to be tested by setting these environment variables.) # # Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is # needed for multi-threaded programs (defaults to the value of CC # respectively CXX otherwise). (This is necessary on e.g. AIX to use the # special cc_r/CC_r compiler alias.) # # NOTE: You are assumed to not only compile your program with these flags, # but also to link with them as well. For example, you might link with # $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS # # If you are only building threaded programs, you may wish to use these # variables in your default LIBS, CFLAGS, and CC: # # LIBS="$PTHREAD_LIBS $LIBS" # CFLAGS="$CFLAGS $PTHREAD_CFLAGS" # CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS" # CC="$PTHREAD_CC" # CXX="$PTHREAD_CXX" # # In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant # has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to # that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). # # Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the # PTHREAD_PRIO_INHERIT symbol is defined when compiling with # PTHREAD_CFLAGS. # # ACTION-IF-FOUND is a list of shell commands to run if a threads library # is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it # is not found. If ACTION-IF-FOUND is not specified, the default action # will define HAVE_PTHREAD. # # Please let the authors know if this macro fails on any platform, or if # you have any other suggestions or comments. This macro was based on work # by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help # from M. Frigo), as well as ac_pthread and hb_pthread macros posted by # Alejandro Forero Cuervo to the autoconf macro repository. We are also # grateful for the helpful feedback of numerous users. # # Updated for Autoconf 2.68 by Daniel Richard G. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2011 Daniel Richard G. # Copyright (c) 2019 Marc Stevens # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 30 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ AC_REQUIRE([AC_CANONICAL_TARGET]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PROG_SED]) AC_LANG_PUSH([C]) ax_pthread_ok=no # We used to check for pthread.h first, but this fails if pthread.h # requires special compiler flags (e.g. on Tru64 or Sequent). # It gets checked for in the link test anyway. # First of all, check if the user has set any of the PTHREAD_LIBS, # etcetera environment variables, and if threads linking works using # them: if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then ax_pthread_save_CC="$CC" ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"]) CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) AC_MSG_RESULT([$ax_pthread_ok]) if test "x$ax_pthread_ok" = "xno"; then PTHREAD_LIBS="" PTHREAD_CFLAGS="" fi CC="$ax_pthread_save_CC" CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" fi # We must check for the threads library under a number of different # names; the ordering is very important because some systems # (e.g. DEC) have both -lpthread and -lpthreads, where one of the # libraries is broken (non-POSIX). # Create a list of thread flags to try. Items with a "," contain both # C compiler flags (before ",") and linker flags (after ","). Other items # starting with a "-" are C compiler flags, and remaining items are # library names, except for "none" which indicates that we try without # any flags at all, and "pthread-config" which is a program returning # the flags for the Pth emulation library. ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" # The ordering *is* (sometimes) important. Some notes on the # individual items follow: # pthreads: AIX (must check this before -lpthread) # none: in case threads are in libc; should be tried before -Kthread and # other compiler flags to prevent continual compiler warnings # -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) # -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 # (Note: HP C rejects this with "bad form for `-t' option") # -pthreads: Solaris/gcc (Note: HP C also rejects) # -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it # doesn't hurt to check since this sometimes defines pthreads and # -D_REENTRANT too), HP C (must be checked before -lpthread, which # is present but should not be used directly; and before -mthreads, # because the compiler interprets this as "-mt" + "-hreads") # -mthreads: Mingw32/gcc, Lynx/gcc # pthread: Linux, etcetera # --thread-safe: KAI C++ # pthread-config: use pthread-config program (for GNU Pth library) case $target_os in freebsd*) # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) ax_pthread_flags="-kthread lthread $ax_pthread_flags" ;; hpux*) # From the cc(1) man page: "[-mt] Sets various -D flags to enable # multi-threading and also sets -lpthread." ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" ;; openedition*) # IBM z/OS requires a feature-test macro to be defined in order to # enable POSIX threads at all, so give the user a hint if this is # not set. (We don't define these ourselves, as they can affect # other portions of the system API in unpredictable ways.) AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], [ # if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) AX_PTHREAD_ZOS_MISSING # endif ], [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) ;; solaris*) # On Solaris (at least, for some versions), libc contains stubbed # (non-functional) versions of the pthreads routines, so link-based # tests will erroneously succeed. (N.B.: The stubs are missing # pthread_cleanup_push, or rather a function called by this macro, # so we could check for that, but who knows whether they'll stub # that too in a future libc.) So we'll check first for the # standard Solaris way of linking pthreads (-mt -lpthread). ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" ;; esac # Are we compiling with Clang? AC_CACHE_CHECK([whether $CC is Clang], [ax_cv_PTHREAD_CLANG], [ax_cv_PTHREAD_CLANG=no # Note that Autoconf sets GCC=yes for Clang as well as GCC if test "x$GCC" = "xyes"; then AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ # if defined(__clang__) && defined(__llvm__) AX_PTHREAD_CC_IS_CLANG # endif ], [ax_cv_PTHREAD_CLANG=yes]) fi ]) ax_pthread_clang="$ax_cv_PTHREAD_CLANG" # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) # Note that for GCC and Clang -pthread generally implies -lpthread, # except when -nostdlib is passed. # This is problematic using libtool to build C++ shared libraries with pthread: # [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 # [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 # [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 # To solve this, first try -pthread together with -lpthread for GCC AS_IF([test "x$GCC" = "xyes"], [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"]) # Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first AS_IF([test "x$ax_pthread_clang" = "xyes"], [ax_pthread_flags="-pthread,-lpthread -pthread"]) # The presence of a feature test macro requesting re-entrant function # definitions is, on some systems, a strong hint that pthreads support is # correctly enabled case $target_os in darwin* | hpux* | linux* | osf* | solaris*) ax_pthread_check_macro="_REENTRANT" ;; aix*) ax_pthread_check_macro="_THREAD_SAFE" ;; *) ax_pthread_check_macro="--" ;; esac AS_IF([test "x$ax_pthread_check_macro" = "x--"], [ax_pthread_check_cond=0], [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) if test "x$ax_pthread_ok" = "xno"; then for ax_pthread_try_flag in $ax_pthread_flags; do case $ax_pthread_try_flag in none) AC_MSG_CHECKING([whether pthreads work without any flags]) ;; *,*) PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"]) ;; -*) AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) PTHREAD_CFLAGS="$ax_pthread_try_flag" ;; pthread-config) AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) PTHREAD_CFLAGS="`pthread-config --cflags`" PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ;; *) AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) PTHREAD_LIBS="-l$ax_pthread_try_flag" ;; esac ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Check for various functions. We must include pthread.h, # since some functions may be macros. (On the Sequent, we # need a special flag -Kthread to make this header compile.) # We check for pthread_join because it is in -lpthread on IRIX # while pthread_create is in libc. We check for pthread_attr_init # due to DEC craziness with -lpthreads. We check for # pthread_cleanup_push because it is one of the few pthread # functions on Solaris that doesn't have a non-functional libc stub. # We try pthread_create on general principles. AC_LINK_IFELSE([AC_LANG_PROGRAM([#include # if $ax_pthread_check_cond # error "$ax_pthread_check_macro must be defined" # endif static void *some_global = NULL; static void routine(void *a) { /* To avoid any unused-parameter or unused-but-set-parameter warning. */ some_global = a; } static void *start_routine(void *a) { return a; }], [pthread_t th; pthread_attr_t attr; pthread_create(&th, 0, start_routine, 0); pthread_join(th, 0); pthread_attr_init(&attr); pthread_cleanup_push(routine, 0); pthread_cleanup_pop(0) /* ; */])], [ax_pthread_ok=yes], []) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" AC_MSG_RESULT([$ax_pthread_ok]) AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) PTHREAD_LIBS="" PTHREAD_CFLAGS="" done fi # Clang needs special handling, because older versions handle the -pthread # option in a rather... idiosyncratic way if test "x$ax_pthread_clang" = "xyes"; then # Clang takes -pthread; it has never supported any other flag # (Note 1: This will need to be revisited if a system that Clang # supports has POSIX threads in a separate library. This tends not # to be the way of modern systems, but it's conceivable.) # (Note 2: On some systems, notably Darwin, -pthread is not needed # to get POSIX threads support; the API is always present and # active. We could reasonably leave PTHREAD_CFLAGS empty. But # -pthread does define _REENTRANT, and while the Darwin headers # ignore this macro, third-party headers might not.) # However, older versions of Clang make a point of warning the user # that, in an invocation where only linking and no compilation is # taking place, the -pthread option has no effect ("argument unused # during compilation"). They expect -pthread to be passed in only # when source code is being compiled. # # Problem is, this is at odds with the way Automake and most other # C build frameworks function, which is that the same flags used in # compilation (CFLAGS) are also used in linking. Many systems # supported by AX_PTHREAD require exactly this for POSIX threads # support, and in fact it is often not straightforward to specify a # flag that is used only in the compilation phase and not in # linking. Such a scenario is extremely rare in practice. # # Even though use of the -pthread flag in linking would only print # a warning, this can be a nuisance for well-run software projects # that build with -Werror. So if the active version of Clang has # this misfeature, we search for an option to squash it. AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown # Create an alternate version of $ac_link that compiles and # links in two steps (.c -> .o, .o -> exe) instead of one # (.c -> exe), because the warning occurs only in the second # step ax_pthread_save_ac_link="$ac_link" ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"` ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" ax_pthread_save_CFLAGS="$CFLAGS" for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" ac_link="$ax_pthread_save_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [ac_link="$ax_pthread_2step_ac_link" AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], [break]) ]) done ac_link="$ax_pthread_save_ac_link" CFLAGS="$ax_pthread_save_CFLAGS" AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" ]) case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in no | unknown) ;; *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; esac fi # $ax_pthread_clang = yes # Various other checks: if test "x$ax_pthread_ok" = "xyes"; then ax_pthread_save_CFLAGS="$CFLAGS" ax_pthread_save_LIBS="$LIBS" CFLAGS="$CFLAGS $PTHREAD_CFLAGS" LIBS="$PTHREAD_LIBS $LIBS" # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. AC_CACHE_CHECK([for joinable pthread attribute], [ax_cv_PTHREAD_JOINABLE_ATTR], [ax_cv_PTHREAD_JOINABLE_ATTR=unknown for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], [int attr = $ax_pthread_attr; return attr /* ; */])], [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], []) done ]) AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ test "x$ax_pthread_joinable_attr_defined" != "xyes"], [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$ax_cv_PTHREAD_JOINABLE_ATTR], [Define to necessary symbol if this constant uses a non-standard name on your system.]) ax_pthread_joinable_attr_defined=yes ]) AC_CACHE_CHECK([whether more special flags are required for pthreads], [ax_cv_PTHREAD_SPECIAL_FLAGS], [ax_cv_PTHREAD_SPECIAL_FLAGS=no case $target_os in solaris*) ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" ;; esac ]) AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ test "x$ax_pthread_special_flags_added" != "xyes"], [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" ax_pthread_special_flags_added=yes]) AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], [ax_cv_PTHREAD_PRIO_INHERIT], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int i = PTHREAD_PRIO_INHERIT; return i;]])], [ax_cv_PTHREAD_PRIO_INHERIT=yes], [ax_cv_PTHREAD_PRIO_INHERIT=no]) ]) AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ test "x$ax_pthread_prio_inherit_defined" != "xyes"], [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) ax_pthread_prio_inherit_defined=yes ]) CFLAGS="$ax_pthread_save_CFLAGS" LIBS="$ax_pthread_save_LIBS" # More AIX lossage: compile with *_r variant if test "x$GCC" != "xyes"; then case $target_os in aix*) AS_CASE(["x/$CC"], [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], [#handle absolute path differently from PATH based program lookup AS_CASE(["x$CC"], [x/*], [ AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"]) AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])]) ], [ AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC]) AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])]) ] ) ]) ;; esac fi fi test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX" AC_SUBST([PTHREAD_LIBS]) AC_SUBST([PTHREAD_CFLAGS]) AC_SUBST([PTHREAD_CC]) AC_SUBST([PTHREAD_CXX]) # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: if test "x$ax_pthread_ok" = "xyes"; then ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) : else ax_pthread_ok=no $2 fi AC_LANG_POP ])dnl AX_PTHREAD OpenDMARC-rel-opendmarc-1-4-2/opendmarc/000077500000000000000000000000001416002254500176615ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/opendmarc/.gitignore000066400000000000000000000000541416002254500216500ustar00rootroot00000000000000.deps *.o opendmarc opendmarc-check *.[1-9] OpenDMARC-rel-opendmarc-1-4-2/opendmarc/Makefile.am000066400000000000000000000020601416002254500217130ustar00rootroot00000000000000# Copyright (c) 2012, 2018, The Trusted Domain Project. All rights reserved. # # $Id: Makefile.am,v 1.85 2010/10/28 04:12:55 cm-msk Exp $ if FILTER_TESTS SUBDIRS=tests endif dist_doc_DATA = opendmarc.conf.sample sbin_PROGRAMS = opendmarc opendmarc-check opendmarc_SOURCES = config.c config.h opendmarc.c opendmarc.h \ opendmarc-ar.c opendmarc-ar.h \ opendmarc-arcares.c opendmarc-arcares.h \ opendmarc-arcseal.c opendmarc-arcseal.h \ opendmarc-config.h \ opendmarc-dstring.c opendmarc-dstring.h \ parse.c parse.h test.c test.h util.c util.h opendmarc_CC = $(PTHREAD_CC) opendmarc_CFLAGS = $(PTHREAD_CFLAGS) opendmarc_CPPFLAGS = $(LIBMILTER_INCDIRS) -I$(srcdir)/../libopendmarc opendmarc_LDFLAGS = $(LIBMILTER_LIBDIRS) $(PTHREAD_CFLAGS) opendmarc_LDADD = ../libopendmarc/libopendmarc.la $(LIBMILTER_LIBS) $(PTHREAD_LIBS) $(LIBRESOLV) opendmarc_check_SOURCES = opendmarc-check.c opendmarc_check_CPPFLAGS = -I$(srcdir)/../libopendmarc opendmarc_check_LDADD = ../libopendmarc/libopendmarc.la $(LIBRESOLV) man_MANS = opendmarc.conf.5 opendmarc.8 opendmarc-check.8 OpenDMARC-rel-opendmarc-1-4-2/opendmarc/README000066400000000000000000000212771416002254500205520ustar00rootroot00000000000000INTRODUCTION ============ This document will walk you through the process of configuring and activating the OpenDMARC filter once it has been compiled and installed. In doing so you will: o Choose a local socket interface between the filter and your MTA o Configure your filter o Activate your filter o Test your filter COMPILING AND INSTALLING ======================== The INSTALL document in the root of the build directory covers the compilation and software installation of opendmarc and its prerequisites. You should complete that process before continuing with the next section. CONFIGURING OPENDMARC ===================== (1) Take a look at the opendmarc.conf.sample as an example configuration file for your domain. If you wish to run with anything other than default settings, copy that file to /etc/mail/opendmarc.conf and make your changes there. (6) Start opendmarc. You will need at least the "-p" option, unless you specified it in opendmarc.conf above. If you did set up a configuration file, you'll also need to tell opendmarc where to find it (if not /etc/mail/opendmarc.conf) via the "-c" option. For example: opendmarc -c CONFPATH ...where CONFPATH is the path to the configuration file you wish to use. One or more configuration example files are provided. (7) Configure your MTA: For Sendmail: (a) Choose a socket at which the MTA and the filter will rendezvous (see the documentation in libmilter for details) (b) Add a line like this example to your sendmail.mc using your desired socket specification: INPUT_MAIL_FILTER(`opendmarc', `S=inet:8893@localhost') Note that this must come after filters that do DKIM, SPF, and ARC evaluation, as this filter relies on the addition of authentication results data to the header by upstream filters. (c) Rebuild your sendmail.cf in the usual way For Postfix: (a) Choose a socket at which the MTA and the filter will rendezvous. Be careful with UNIX domain sockets as on some distributions and setups the smtpd process is running in a chroot environment. A UNIX socket will need to be visible to the chrooted smtpd process. (b) Add the following lines like this example to your postfix main.cf using your desired socket specification: smtpd_milters = inet:localhost:8893 non_smtpd_milters = inet:localhost:8893 Note that this must come after filters that do DKIM and SPF evaluation, as this filter relies on the addition of authentication results data to the header by upstream filters. (c) If you have a content filter in master.cf that feeds it back into a different smtpd process, you should alter the second smtpd process in master.cf to contain '-o receive_override_options=no_milters' to prevent messages being signed or verified twice. For tips on avoiding DKIM signature breakage, see: http://www.postfix.org/MILTER_README.html#workarounds (8) Restart/reload your MTA. For Sendmail: kill -1 `head -1 /var/run/sendmail.pid` For Postfix: postfix reload ...or the following if master.cf was changed: /etc/init.d/postfix restart (9) Depending on your settings, mail sent with a policy of p=quarantine may wind up in your MTA's "Hold" or "Quarantine" queue. The setting "HoldQuarantinedMessages" (defaults to false) can be used to control this feature. TESTING AND DEBUGGING ===================== This package is used for processing incoming mail. As such, evaluating the efficacy and impact of the DMARC policy you publish in your DNS is not covered here. These instructions are for checking your site's processing of arriving mail using opendmarc. The simplest thing to do to exercise your installation is to construct a test message that claims to come from some domain (yours or another) and feed it to opendmarc in test mode. The command to run the test is as follows: opendmarc -t [-c ] ...where is your test message and is your configuration file (if not the default). Make sure to set a HistoryFile in your test configuration so that you can see the raw data the filter records about messages it receives. You can add "-v" one or more times to this to get verbose output, though understanding the output requires some understanding of how the "milter" protocol works. Test mode will not start the service; it will process your single input message and exit. It will not affect the service if it is already running. Test mode operates by simulating the arrival of the message via an MTA talking to the filter. With enough "-v" options, you will see simulation of each of the milter calls generated by your message. Some parameters to the session have defaults you can override by setting environment variables, as follows: OPENDMARC_TEST_CLIENTHOST hostname of the SMTP client sending the message (default is "localhost") OPENDMARC_TEST_CLIENTIP IP addressof the SMTP client sending the message, as a string (default is "127.0.0.1") OPENDMARC_TEST_HELOHOST parameter passed by the SMTP client with the HELO/EHLO command (default is "localhost") OPENDMARC_TEST_ENVFROM envelope sender, passed by the SMTP client with the MAIL FROM command (default is ") In essence, you want to see the result of the mlfi_eom() call, which will be in the verbose output, and ensure that it matches the action your filter should be taking in response to the message you've built. You can also look at the history file produced by your message to ensure that all the DKIM signatures and SPF results are recorded, and the DMARC policy matching the From domain (if any) was properly extracted. Understanding the contents of this file requires some knowledge of their encodings, but there are only a few of them: adkim, aspf published policy's alignment rule for DKIM and SPF (114 = relaxed, 115 = strict) align_dkim, align_spf whether identifier alignment was established for DKIM and SPF (4 = yes, 5 = no) spf SPF evaluation (0 = pass, 2 = fail, 6 = none, -1 = not evaluated) dkim DKIM evaluation (signing domain, selector, evaluation - same as SPF) pdomain policy domain (the "organizational" domain, the one asserting policy) from domain found in the From field mfrom domain found in the MAIL FROM parameter policy policy to enforce, as follows: 14 = unknown (no record found) 15 = pass 16 = reject 17 = quarantine 18 = none arc ARC evaluation (0 = pass, 2 = fail) arc_policy ARC local policy evaluation (evaluation -- same as ARC, ARC seal data - JSON-encoded array of governing arc seal fields: instance, domain, selector) ARC Evaluation by OpenDMARC =========================== Mailing lists and some forwarders can break authentication of valid messages, resulting in false positive DMARC failures. ARC allows such intermediaries to encapsulate the authentication information they saw, so that a downstream MTA can more properly evaluate the message and deliver around an otherwise false positive result. OpenDMARC uses ARC information to deliver a message around a failure in a very specific and limited fashion. OpenDMARC does not evaluate the ARC status of a message; it relies on other ARC-aware software (such as OpenARC) to make a determination about the validity of any ARC information on the message, and attach those results in the Authentication-Results for the local TrustedAuthservID. At a high level (explained further below), OpenDMARC then reviews those trusted results, makes a determination as to whether it trusts the domains that sealed the chain, and decides whether to override the original message disposition. The results of this evaluation are then recorded and returned in the "local_policy" comment to the sending domain owner. OpenDMARC makes its limited determination about delivering around a DMARC failure in the following way: When DMARC fails, and there is one and only one ARC status in the Authentication-Results for the local TrustedAuthservID, and that ARC status is "pass", and all sealers are on the DomainWhitelist, then the message will be delivered instead of being subject to the DMARC policy of the sending domain. SUPPORT ======= There are two public mailing lists available for news and questions about OpenDMARC. To keep up to date on the latest developments, please subscribe to one or both of the following: opendmarc-announce@trusteddomain.org (release announcements) opendmarc-users@trusteddomain.org (general discussion) These can be accessed via http://www.trusteddomain.org/mailman/listinfo. To report bugs and feature requests, you can access the GitHub "tracker" facilities at https://github.com/trusteddomainproject/OpenDMARC/issues. OpenDMARC-rel-opendmarc-1-4-2/opendmarc/config.c000066400000000000000000000323021416002254500212720ustar00rootroot00000000000000/* ** Copyright (c) 2006-2009 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009-2014, The Trusted Domain Project. All rights reserved. */ /* for Solaris */ #ifndef _REENTRANT # define _REENTRANT #endif /* _REENTRANT */ #include "build-config.h" /* system includes */ #include #include #include #include #include /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* opendmarc includes */ #include "config.h" /* limits */ #define BUFRSZ 1024 /* generic buffer size */ #define MAXLEVEL 5 /* max. include recursion */ #ifndef FALSE # define FALSE 0 #endif /* ! FALSE */ #ifndef TRUE # define TRUE 1 #endif /* ! TRUE */ /* prototypes */ static void config_attach __P((struct config *, struct config **)); /* errors */ #define CONF_UNKNOWN (-1) /* unknown status */ #define CONF_SUCCESS 0 /* no error */ #define CONF_MISSING 1 /* required value missing */ #define CONF_UNRECOG 2 /* unrecognized parameter */ #define CONF_ILLEGAL 3 /* illegal value */ #define CONF_NESTING 4 /* "include" nesting too deep */ #define CONF_READING 5 /* error reading (see errno) */ #define CONF_NMEMORY 6 /* malloc() failure */ /* statics */ static int conf_error; /* configuration error number */ /* ** CONFIG_ATTACH -- attach one config to another ** ** Parameters: ** c1 -- configuration to attach ** c2 -- configuration to which to attach ** ** Return value: ** None. */ static void config_attach(struct config *c1, struct config **c2) { struct config *prev; struct config *cur; assert(c1 != NULL); if (*c2 == NULL) { *c2 = c1; } else { prev = NULL; for (cur = c1; cur != NULL; cur = cur->cfg_next) prev = cur; prev->cfg_next = *c2; } } /* ** CONFIG_LOAD_LEVEL -- load configuration from a file (internal version) ** ** Parameters: ** file -- path from which to load; NULL or "-" implies stdin ** cd -- array of (struct configdef) elements containing the ** configuration syntax to assert ** line -- line number where an error occurred (updated) ** outpath -- configuration file in which error occurred (updated) ** outpathlen -- bytes available at "outpath" ** level -- nesting level ** ** Return value: ** Pointer to a (struct config) which is the head of a list of ** loaded configuration items, or NULL on error; if NULL, "line" is ** updated to indicate which line number contained the error and, ** if the configuration file being parsed was not the one referenced ** by "in", then "path" will be updated to point to the filename ** that was being processed. */ static struct config * config_load_level(char *file, struct configdef *def, unsigned int *line, char *outpath, size_t outpathlen, int level) { int n = -1; int err = 0; unsigned int myline = 0; int value = -1; FILE *in; char *p; char *s; char *str = NULL; struct config *new = NULL; struct config *cur = NULL; char buf[BUFRSZ + 1]; assert(def != NULL); if (level > MAXLEVEL) { conf_error = CONF_NESTING; return NULL; } memset(buf, '\0', sizeof buf); if (file == NULL || (file[0] == '-' && file[1] == '\0')) { in = stdin; file = "(stdin)"; } else { in = fopen(file, "r"); if (in == NULL) { conf_error = CONF_READING; if (line != NULL) *line = myline; if (outpath != NULL) strlcpy(outpath, file, outpathlen); return NULL; } } while (fgets(buf, sizeof buf - 1, in) != NULL) { myline++; str = NULL; /* read a line; truncate at newline or "#" */ for (p = buf; *p != '\0'; p++) { if (*p == '#' || *p == '\n') { *p = '\0'; break; } } /* break down the line */ p = strtok_r(buf, " \t", &s); if (p != NULL) { /* recognize the directive? */ for (n = 0; ; n++) { /* nope */ if (def[n].cd_name == NULL) { conf_error = CONF_UNRECOG; err = 1; break; } if (strcasecmp(def[n].cd_name, p) == 0) break; } if (!err) { char *q; /* skip leading whitespace on value */ for (p = s; *p == ' ' || *p == '\t'; p++) continue; /* ...and trim trailing whitespace */ q = p + strlen(p) - 1; while (p <= q && (*q == '\t' || *q == ' ')) *q-- = '\0'; } if (*p == '\0' && !err) { conf_error = CONF_MISSING; err = 1; } if (!err) { char *q; switch (def[n].cd_type) { case CONFIG_TYPE_STRING: case CONFIG_TYPE_INCLUDE: str = p; break; case CONFIG_TYPE_BOOLEAN: if (p[0] == 't' || p[0] == 'T' || p[0] == 'y' || p[0] == 'Y' || p[0] == '1') { value = 1; } else if (p[0] == 'f' || p[0] == 'F' || p[0] == 'n' || p[0] == 'N' || p[0] == '0') { value = 0; } else { conf_error = CONF_ILLEGAL; err = 1; } break; case CONFIG_TYPE_INTEGER: value = (int) strtol(p, &q, 0); if (*q != '\0') { conf_error = CONF_ILLEGAL; err = 1; } str = p; break; default: assert(0); /* NOTREACHED */ return NULL; } } } else { continue; /* blank line */ } /* a parse error, or only one argument, is no good */ if (err) { config_free(cur); if (line != NULL) *line = myline; if (outpath != NULL) strlcpy(outpath, file, outpathlen); if (in != stdin) fclose(in); return NULL; } if (def[n].cd_type != CONFIG_TYPE_INCLUDE) { new = (struct config *) malloc(sizeof(struct config)); if (new == NULL) { config_free(cur); conf_error = CONF_NMEMORY; if (line != NULL) *line = myline; if (outpath != NULL) strlcpy(outpath, file, outpathlen); if (in != stdin) fclose(in); return NULL; } new->cfg_next = cur; new->cfg_name = def[n].cd_name; new->cfg_type = def[n].cd_type; } switch (def[n].cd_type) { case CONFIG_TYPE_INCLUDE: { struct config *incl; incl = config_load_level(str, def, line, outpath, outpathlen, level + 1); if (incl == NULL) { if (in != stdin) fclose(in); return NULL; } config_attach(incl, &cur); new = incl; break; } case CONFIG_TYPE_STRING: new->cfg_string = strdup(str); break; case CONFIG_TYPE_BOOLEAN: new->cfg_bool = (_Bool) value; break; case CONFIG_TYPE_INTEGER: new->cfg_int = value; break; default: assert(0); } cur = new; } conf_error = CONF_SUCCESS; if (in != stdin) fclose(in); if (myline == 0 || cur == NULL) { cur = (struct config *) malloc(sizeof *cur); if (cur != NULL) { cur->cfg_bool = FALSE; cur->cfg_type = CONFIG_TYPE_STRING; cur->cfg_int = 0; cur->cfg_name = ""; cur->cfg_string = NULL; cur->cfg_next = NULL; return cur; } else { conf_error = CONF_NMEMORY; if (line != NULL) *line = myline; if (outpath != NULL) strlcpy(outpath, file, outpathlen); return NULL; } } else { return cur; } } /* ** CONFIG_ERROR -- return a string describing a configuration error ** ** Parameters: ** None. ** ** Return value: ** Pointer to a NULL-terminated string explaining the last error. */ char * config_error(void) { switch (conf_error) { case CONF_SUCCESS: return "no error"; case CONF_MISSING: return "required value missing"; case CONF_UNRECOG: return "unrecognized parameter"; case CONF_ILLEGAL: return "illegal value"; case CONF_NESTING: return "nesting too deep"; case CONF_READING: return "error reading configuration file"; case CONF_NMEMORY: return "memory allocation failure"; case CONF_UNKNOWN: default: return "unknown error"; } /* NOTREACHED */ } /* ** CONFIG_FREE -- release memory associated with a config list ** ** Parameters: ** head -- head of the config list ** ** Return value: ** None. */ void config_free(struct config *head) { struct config *next; struct config *cur; cur = head; while (cur != NULL) { next = cur->cfg_next; if (cur->cfg_type == CONFIG_TYPE_STRING && cur->cfg_string != NULL) free(cur->cfg_string); free(cur); cur = next; } } /* ** CONFIG_LOAD -- load configuration from a file ** ** Parameters: ** file -- path from which to load; NULL or "-" implies stdin ** cd -- array of (struct configdef) elements containing the ** configuration syntax to assert ** line -- line number where an error occurred (updated) ** path -- configuration file in which error occurred (updated) ** pathlen -- number of bytes available at "path" ** ** Return value: ** Pointer to a (struct config) which is the head of a list of ** loaded configuration items, or NULL on error; if NULL, "line" is ** updated to indicate which line number contained the error and, ** if the configuration file being parsed was not the one referenced ** by "in", then "path" will be updated to point to the filename ** that was being processed. */ struct config * config_load(char *file, struct configdef *def, unsigned int *line, char *path, size_t pathlen) { conf_error = CONF_UNKNOWN; return config_load_level(file, def, line, path, pathlen, 0); } /* ** CONFIG_CHECK -- verify that stuff marked "required" is present ** ** Parameters: ** head -- head of config list ** def -- definitions ** ** Return value: ** Name of the first parameter in "def" that was marked "required" ** yet absent from the configuration parsed, or NULL if nothing ** required was missing. */ char * config_check(struct config *head, struct configdef *def) { int n; struct config *cur; assert(head != NULL); assert(def != NULL); conf_error = CONF_UNKNOWN; for (n = 0; ; n++) { if (def[n].cd_name == NULL) { conf_error = CONF_SUCCESS; return NULL; } if (!def[n].cd_req) continue; for (cur = head; cur != NULL; cur = cur->cfg_next) { if (cur->cfg_name == def[n].cd_name) break; } if (cur == NULL) { conf_error = CONF_MISSING; return def[n].cd_name; } } /* NOTREACHED */ } /* ** CONFIG_GET -- retrieve a parameter's value ** ** Parameter: ** head -- head of config list ** name -- name of the parameter of interest ** value -- where to write the result (returned) ** size -- bytes available at "value" ** ** Return value: ** 1 if the data was found, 0 otherwise, -1 if the request was illegal ** ** Notes: ** "value" is a (void *). It can be used directly, such as: ** ** int x; ** ** (void) config_get(conflist, "MyInteger", (void *) &x); */ int config_get(struct config *head, const char *name, void *value, size_t size) { struct config *cur; assert(head != NULL); assert(name != NULL); assert(value != NULL); assert(size > 0); conf_error = CONF_UNKNOWN; for (cur = head; cur != NULL; cur = cur->cfg_next) { if (strcasecmp(cur->cfg_name, name) == 0) { switch (cur->cfg_type) { case CONFIG_TYPE_BOOLEAN: if (size != sizeof(_Bool)) { conf_error = CONF_ILLEGAL; return -1; } memcpy(value, &cur->cfg_bool, size); break; case CONFIG_TYPE_INTEGER: if (size != sizeof(int)) { conf_error = CONF_ILLEGAL; return -1; } memcpy(value, &cur->cfg_int, size); break; case CONFIG_TYPE_INCLUDE: conf_error = CONF_ILLEGAL; return -1; default: if (size != sizeof(char *)) { conf_error = CONF_ILLEGAL; return -1; } memcpy(value, &cur->cfg_string, size); break; } return 1; } } conf_error = CONF_SUCCESS; return 0; } /* ** CONFIG_VALIDNAME -- return True IFF the name provided was valid ** ** Parameters: ** def -- configuration definition ** name -- name of value of interest ** ** Return value: ** True IFF "name" was defined inside "cd" */ _Bool config_validname(struct configdef *def, const char *name) { unsigned int n; assert(def != NULL); assert(name != NULL); for (n = 0; ; n++) { if (def[n].cd_name == NULL) return FALSE; if (strcasecmp(name, def[n].cd_name) == 0) return TRUE; } assert(0); /* NOTREACHED */ } /* ** CONFIG_DUMP -- dump configuration contents ** ** Parameters: ** cfg -- head of assembled configuration values ** out -- stream to which to write ** name -- name of value of interest ** ** Return value: ** Number of items that matched. */ unsigned int config_dump(struct config *cfg, FILE *out, const char *name) { unsigned int nprinted = 0; struct config *cur; assert(cfg != NULL); assert(out != NULL); for (cur = cfg; cur != NULL; cur = cur->cfg_next) { if (name != NULL) { if (strcasecmp(name, cur->cfg_name) != 0) continue; } else { fprintf(out, "%p: \"%s\" ", cur, cur->cfg_name); } switch (cur->cfg_type) { case CONFIG_TYPE_STRING: fprintf(out, "%s\n", cur->cfg_string); break; case CONFIG_TYPE_INTEGER: fprintf(out, "%d\n", cur->cfg_int); break; case CONFIG_TYPE_BOOLEAN: fprintf(out, "%s\n", cur->cfg_bool ? "True" : "False"); break; default: assert(0); } nprinted++; } return nprinted; } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/config.h000066400000000000000000000027711416002254500213060ustar00rootroot00000000000000/* ** Copyright (c) 2006-2008 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009-2012, The Trusted Domain Project. All rights reserved. ** ** $Id: config.h,v 1.3.34.1 2010/10/27 21:43:09 cm-msk Exp $ */ #ifndef _CONFIG_H_ #define _CONFIG_H_ #include "build-config.h" /* system includes */ #include #ifdef HAVE_STDBOOL_H # include #endif /* HAVE_STDBOOL_H */ #include #ifdef __STDC__ # ifndef __P # define __P(x) x # endif /* ! __P */ #else /* __STDC__ */ # ifndef __P # define __P(x) () # endif /* ! __P */ #endif /* __STDC__ */ /* types and things */ #define CONFIG_TYPE_STRING 0 #define CONFIG_TYPE_INTEGER 1 #define CONFIG_TYPE_BOOLEAN 2 #define CONFIG_TYPE_INCLUDE 3 struct config { _Bool cfg_bool; u_int cfg_type; int cfg_int; char * cfg_name; char * cfg_string; struct config * cfg_next; }; struct configdef { char * cd_name; u_int cd_type; u_int cd_req; }; /* prototypes */ extern char *config_check __P((struct config *, struct configdef *)); extern unsigned int config_dump __P((struct config *, FILE *, const char *)); extern char *config_error __P((void)); extern void config_free __P((struct config *)); extern int config_get __P((struct config *, const char *, void *, size_t)); extern struct config *config_load __P((char *, struct configdef *, unsigned int *, char *, size_t)); extern _Bool config_validname __P((struct configdef *, const char *)); #endif /* _CONFIG_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-ar.c000066400000000000000000000313051416002254500223770ustar00rootroot00000000000000/* ** Copyright (c) 2007-2009 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009, 2011-2014, 2018, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" /* system includes */ #include #include #ifdef HAVE_STDBOOL_H # include #endif /* HAVE_STDBOOL_H */ #include #include #include #ifdef ARTEST # include #endif /* ARTEST */ /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* opendmarc includes */ #include "opendmarc-ar.h" /* macros */ #define ARES_ENDOF(x) ((x) + sizeof(x) - 1) #define ARES_STRORNULL(x) ((x) == NULL ? "(null)" : (x)) #define ARES_TOKENS ";=." #define ARES_TOKENS2 "=." #define ARES_MAXTOKENS 512 /* tables */ struct lookup { char * str; int code; }; struct lookup methods[] = { { "arc", ARES_METHOD_ARC }, { "auth", ARES_METHOD_AUTH }, { "dkim", ARES_METHOD_DKIM }, { "dkim-adsp", ARES_METHOD_DKIMADSP }, { "dkim-atps", ARES_METHOD_DKIMATPS }, { "domainkeys", ARES_METHOD_DOMAINKEYS }, { "iprev", ARES_METHOD_IPREV }, { "rrvs", ARES_METHOD_RRVS }, { "sender-id", ARES_METHOD_SENDERID }, { "smime", ARES_METHOD_SMIME }, { "spf", ARES_METHOD_SPF }, { NULL, ARES_METHOD_UNKNOWN } }; struct lookup aresults[] = { { "none", ARES_RESULT_NONE }, { "pass", ARES_RESULT_PASS }, { "fail", ARES_RESULT_FAIL }, { "policy", ARES_RESULT_POLICY }, { "neutral", ARES_RESULT_NEUTRAL }, { "temperror", ARES_RESULT_TEMPERROR }, { "permerror", ARES_RESULT_PERMERROR }, { "nxdomain", ARES_RESULT_NXDOMAIN }, { "signed", ARES_RESULT_SIGNED }, { "unknown", ARES_RESULT_UNKNOWN }, { "discard", ARES_RESULT_DISCARD }, { "softfail", ARES_RESULT_SOFTFAIL }, { NULL, ARES_RESULT_UNDEFINED } }; struct lookup ptypes[] = { { "smtp", ARES_PTYPE_SMTP }, { "header", ARES_PTYPE_HEADER }, { "body", ARES_PTYPE_BODY }, { "policy", ARES_PTYPE_POLICY }, { "arc", ARES_PTYPE_ARCCHAIN }, { NULL, ARES_PTYPE_UNKNOWN } }; /* ** ARES_TOKENIZE -- tokenize a string ** ** Parameters: ** input -- input string ** outbuf -- output buffer ** outbuflen -- number of bytes available at "outbuf" ** tokens -- array of token pointers ** ntokens -- number of token pointers available at "tokens" ** ** Return value: ** -1 -- not enough space at "outbuf" for tokenizing ** other -- number of tokens identified; may be greater than ** "ntokens" if there were more tokens found than there were ** pointers available. */ static int ares_tokenize(u_char *input, u_char *outbuf, size_t outbuflen, u_char **tokens, int ntokens) { _Bool quoted = FALSE; _Bool escaped = FALSE; _Bool intok = FALSE; int n = 0; int parens = 0; u_char *p; u_char *q; u_char *end; assert(input != NULL); assert(outbuf != NULL); assert(outbuflen > 0); assert(tokens != NULL); assert(ntokens > 0); q = outbuf; end = outbuf + outbuflen - 1; for (p = input; *p != '\0' && q <= end; p++) { if (escaped) /* escape */ { if (!intok) { if (n < ntokens) tokens[n] = q; intok = TRUE; } *q = *p; q++; escaped = FALSE; } else if (*p == '\\') /* escape */ { escaped = TRUE; } else if (*p == '"' && parens == 0) /* quoting */ { quoted = !quoted; if (!intok) { if (n < ntokens) tokens[n] = q; intok = TRUE; } } else if (*p == '(' && !quoted) /* "(" (comment) */ { parens++; if (!intok) { if (n < ntokens) tokens[n] = q; intok = TRUE; } *q = *p; q++; } else if (*p == ')' && !quoted) /* ")" (comment) */ { if (parens > 0) { parens--; if (parens == 0) { intok = FALSE; n++; *q = ')'; q++; if (q <= end) { *q = '\0'; q++; } } } } else if (quoted) /* quoted character */ { *q = *p; q++; } else if (isascii(*p) && isspace(*p)) /* whitespace */ { if (quoted || parens > 0) { if (intok) { *q = *p; q++; } } else if (intok) { intok = FALSE; *q = '\0'; q++; n++; } } else if (strchr(ARES_TOKENS, *p) != NULL) /* delimiter */ { if (parens > 0) { *q = *p; q++; continue; } if (intok) { intok = FALSE; *q = '\0'; q++; n++; } if (q <= end) { *q = *p; if (n < ntokens) { tokens[n] = q; n++; } q++; } if (q <= end) { *q = '\0'; q++; } } else /* other */ { if (!intok) { if (n < ntokens) tokens[n] = q; intok = TRUE; } *q = *p; q++; } } if (q >= end) return -1; if (intok) { *q = '\0'; n++; } return n; } /* ** ARES_CONVERT -- convert a string to its code ** ** Parameters: ** table -- in which table to look up ** str -- string to find ** ** Return value: ** A code translation of "str". */ static int ares_convert(struct lookup *table, char *str) { int c; assert(table != NULL); assert(str != NULL); for (c = 0; ; c++) { if (table[c].str == NULL || strcasecmp(table[c].str, str) == 0) return table[c].code; } /* NOTREACHED */ } #ifdef ARTEST /* ** ARES_XCONVERT -- convert a code to its string ** ** Parameters: ** table -- in which table to look up ** code -- code to find ** ** Return value: ** A string translation of "code". */ static char * ares_xconvert(struct lookup *table, int code) { int c; assert(table != NULL); for (c = 0; ; c++) { if (table[c].str == NULL || table[c].code == code) return table[c].str; } /* NOTREACHED */ } #endif /* ARTEST */ /* ** AUTHRES_PARSE -- parse an Authentication-Results: header, return a ** structure containing a parsed result ** ** Parameters: ** hdr -- NULL-terminated contents of an Authentication-Results: ** header field ** ar -- a pointer to a (struct authres) loaded by values after parsing ** ** Return value: ** 0 on success, -1 on failure. */ int ares_parse(u_char *hdr, struct authres *ar) { _Bool quoted; int n; int ntoks; int c; int r = 0; int state; int prevstate; u_char tmp[MAXHEADER + 2]; u_char *tokens[ARES_MAXTOKENS]; assert(hdr != NULL); assert(ar != NULL); memset(ar, '\0', sizeof *ar); memset(tmp, '\0', sizeof tmp); ntoks = ares_tokenize(hdr, tmp, sizeof tmp, tokens, ARES_MAXTOKENS); if (ntoks == -1 || ntoks > ARES_MAXTOKENS) return -1; prevstate = -1; state = 0; n = 0; quoted = FALSE; for (c = 0; c < ntoks; c++) { if (tokens[c][0] == '(') /* comment */ continue; switch (state) { case 0: /* authserv-id */ if (!isascii(tokens[c][0]) || !isalnum(tokens[c][0])) return -1; strlcat((char *) ar->ares_host, (char *) tokens[c], sizeof ar->ares_host); prevstate = state; state = 1; break; case 1: /* [version] */ if (tokens[c][0] == '.' && tokens[c][1] == '\0' && prevstate == 0) { strlcat((char *) ar->ares_host, (char *) tokens[c], sizeof ar->ares_host); prevstate = state; state = 0; break; } if (tokens[c][0] == ';') { prevstate = state; state = 3; } else if (isascii(tokens[c][0]) && isdigit(tokens[c][0])) { strlcpy((char *) ar->ares_version, (char *) tokens[c], sizeof ar->ares_version); prevstate = state; state = 2; } else { return -1; } break; case 2: /* ; */ if (tokens[c][0] != ';' || tokens[c][1] != '\0') return -1; prevstate = state; state = 3; break; case 3: /* method */ n++; r = 0; ar->ares_result[n - 1].result_method = ares_convert(methods, (char *) tokens[c]); prevstate = state; state = 4; break; case 4: /* = */ if (tokens[c][0] != '=' || tokens[c][1] != '\0') return -1; prevstate = state; state = 5; break; case 5: /* result */ ar->ares_result[n - 1].result_result = ares_convert(aresults, (char *) tokens[c]); prevstate = state; state = 6; break; case 7: /* = (reason) */ if (tokens[c][0] != '=' || tokens[c][1] != '\0') return -1; prevstate = state; state = 8; break; case 8: strlcpy((char *) ar->ares_result[n - 1].result_reason, (char *) tokens[c], sizeof ar->ares_result[n - 1].result_reason); prevstate = state; state = 9; break; case 6: /* reason/propspec */ if (tokens[c][0] == ';' && /* neither */ tokens[c][1] == '\0') { prevstate = state; state = 3; continue; } if (strcasecmp((char *) tokens[c], "reason") == 0) { /* reason */ prevstate = state; state = 7; continue; } else { prevstate = state; state = 9; } /* FALLTHROUGH */ case 9: /* ptype */ if (prevstate == 13 && strchr(ARES_TOKENS2, tokens[c][0]) != NULL && tokens[c][1] == '\0') { r--; strlcat((char *) ar->ares_result[n - 1].result_value[r], (char *) tokens[c], sizeof ar->ares_result[n - 1].result_value[r]); prevstate = state; state = 13; continue; } if (tokens[c][0] == ';' && tokens[c][1] == '\0') { prevstate = state; state = 3; continue; } else { ares_ptype_t x; x = ares_convert(ptypes, (char *) tokens[c]); if (x == ARES_PTYPE_UNKNOWN) return -1; ar->ares_result[n - 1].result_ptype[r] = x; prevstate = state; state = 10; } break; case 10: /* . */ if (tokens[c][0] != '.' || tokens[c][1] != '\0') return -1; prevstate = state; state = 11; break; case 11: /* property */ strlcpy((char *) ar->ares_result[n - 1].result_property[r], (char *) tokens[c], sizeof ar->ares_result[n - 1].result_property[r]); prevstate = state; state = 12; break; case 12: /* = */ if (tokens[c][0] != '=' || tokens[c][1] != '\0') return -1; prevstate = state; state = 13; break; case 13: /* value */ strlcat((char *) ar->ares_result[n - 1].result_value[r], (char *) tokens[c], sizeof ar->ares_result[n - 1].result_value[r]); r++; ar->ares_result[n - 1].result_props = r; prevstate = state; if (c < ntoks - 1 && tokens[c + 1][1] == '\0') { if (tokens[c + 1][0] == ';') state = 2; else if (tokens[c + 1][0] == '=') r--; else state = 9; } else { state = 9; } break; } } /* error out on non-terminal states */ if (state == 4 || state == 7 || state == 10 || state == 11 || state == 12) return -1; ar->ares_count = n; return 0; } #ifdef ARTEST /* ** MAIN -- program mainline ** ** Parameters: ** argc, argv -- the usual ** ** Return value: ** EX_USAGE or EX_OK */ # define NTOKENS 256 int main(int argc, char **argv) { int c; int d; int status; char *p; char *progname; struct authres ar; u_char buf[1024]; u_char *toks[NTOKENS]; progname = (p = strrchr(argv[0], '/')) == NULL ? argv[0] : p + 1; if (argc != 2) { printf("%s: usage: %s header-value\n", progname, progname); return EX_USAGE; } c = ares_tokenize(argv[1], buf, sizeof buf, toks, NTOKENS); for (d = 0; d < c; d++) printf("token %d = '%s'\n", d, toks[d]); printf("\n"); status = ares_parse(argv[1], &ar); if (status == -1) { printf("%s: ares_parse() returned -1\n", progname); return EX_OK; } printf("%d result%s found\n", ar.ares_count, ar.ares_count == 1 ? "" : "s"); printf("authserv-id '%s'\n", ar.ares_host); printf("version '%s'\n", ar.ares_version); for (c = 0; c < ar.ares_count; c++) { printf("result #%d, %d propert%s\n", c, ar.ares_result[c].result_props, ar.ares_result[c].result_props == 1 ? "y" : "ies"); printf("\tmethod \"%s\"\n", ares_xconvert(methods, ar.ares_result[c].result_method)); printf("\tresult \"%s\"\n", ares_xconvert(aresults, ar.ares_result[c].result_result)); printf("\treason \"%s\"\n", ar.ares_result[c].result_reason); for (d = 0; d < ar.ares_result[c].result_props; d++) { printf("\tproperty #%d\n", d); printf("\t\tptype \"%s\"\n", ares_xconvert(ptypes, ar.ares_result[c].result_ptype[d])); printf("\t\tproperty \"%s\"\n", ar.ares_result[c].result_property[d]); printf("\t\tvalue \"%s\"\n", ar.ares_result[c].result_value[d]); } } } #endif /* ARTEST */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-ar.h000066400000000000000000000052751416002254500224130ustar00rootroot00000000000000/* ** Copyright (c) 2007-2009 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009, 2012, 2014, 2018, The Trusted Domain Project. ** All rights reserved. */ #ifndef _OPENDMARC_AR_H_ #define _OPENDMARC_AR_H_ /* system includes */ #include /* opendmarc includes */ #include "opendmarc.h" #include "dmarc.h" /* limits */ #define AUTHRESHDRNAME "Authentication-Results" #define MAXARESULTS 16 #define MAXPROPS 16 #define MAXAVALUE 256 /* ARES_METHOD_T -- type for specifying an authentication method */ typedef int ares_method_t; #define ARES_METHOD_UNKNOWN (-1) #define ARES_METHOD_AUTH 0 #define ARES_METHOD_DKIM 1 #define ARES_METHOD_DOMAINKEYS 2 #define ARES_METHOD_SENDERID 3 #define ARES_METHOD_SPF 4 #define ARES_METHOD_DKIMADSP 5 #define ARES_METHOD_IPREV 6 #define ARES_METHOD_DKIMATPS 7 #define ARES_METHOD_SMIME 8 #define ARES_METHOD_RRVS 9 #define ARES_METHOD_ARC 10 /* ARES_RESULT_T -- type for specifying an authentication result */ typedef int ares_result_t; #define ARES_RESULT_UNDEFINED (-1) #define ARES_RESULT_PASS 0 #define ARES_RESULT_UNUSED 1 #define ARES_RESULT_SOFTFAIL 2 #define ARES_RESULT_NEUTRAL 3 #define ARES_RESULT_TEMPERROR 4 #define ARES_RESULT_PERMERROR 5 #define ARES_RESULT_NONE 6 #define ARES_RESULT_FAIL 7 #define ARES_RESULT_POLICY 8 #define ARES_RESULT_NXDOMAIN 9 #define ARES_RESULT_SIGNED 10 #define ARES_RESULT_UNKNOWN 11 #define ARES_RESULT_DISCARD 12 /* ARES_PTYPE_T -- type for specifying an authentication property */ typedef int ares_ptype_t; #define ARES_PTYPE_UNKNOWN (-1) #define ARES_PTYPE_SMTP 0 #define ARES_PTYPE_HEADER 1 #define ARES_PTYPE_BODY 2 #define ARES_PTYPE_POLICY 3 #define ARES_PTYPE_ARCCHAIN 4 /* RESULT structure -- a single result */ struct result { int result_props; ares_method_t result_method; ares_result_t result_result; ares_ptype_t result_ptype[MAXPROPS]; unsigned char result_reason[MAXAVALUE + 1]; unsigned char result_property[MAXPROPS][MAXAVALUE + 1]; unsigned char result_value[MAXPROPS][MAXAVALUE + 1]; }; /* AUTHRES structure -- the entire header parsed */ struct authres { int ares_count; unsigned char ares_host[DMARC_MAXHOSTNAMELEN + 1]; unsigned char ares_version[MAXAVALUE + 1]; struct result ares_result[MAXARESULTS]; }; /* ** ARES_PARSE -- parse an Authentication-Results: header, return a ** structure containing a parsed result ** ** Parameters: ** hdr -- NULL-terminated contents of an Authentication-Results: ** header field ** ar -- a pointer to a (struct authres) loaded by values after parsing ** ** Return value: ** 0 on success, -1 on failure. */ extern int ares_parse __P((u_char *hdr, struct authres *ar)); #endif /* _OPENDMARC_AR_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-arcares.c000066400000000000000000000170311416002254500234150ustar00rootroot00000000000000/* ** Copyright (c) 2018, 2021, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" /* system includes */ #include #include #include #include #include #ifdef HAVE_STDBOOL_H # include #endif /* HAVE_STDBOOL_H */ /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ #include "opendmarc-arcares.h" #include "opendmarc.h" #define OPENDMARC_ARCARES_MAX_FIELD_NAME_LEN 255 #define OPENDMARC_ARCARES_MAX_TOKEN_LEN 512 #ifndef MAX # define MAX(x, y) ((x) >= (y)) ? (x) : (y) # define MIN(x, y) ((x) <= (y)) ? (x) : (y) #endif /* !MAX */ /* tables */ struct opendmarc_arcares_lookup { char *str; int code; }; struct opendmarc_arcares_lookup aar_tags[] = { { "arc", AAR_TAG_ARC }, { "dkim", AAR_TAG_DKIM }, { "dmarc", AAR_TAG_DMARC }, { "i", AAR_TAG_INSTANCE }, { "spf", AAR_TAG_SPF }, { NULL, AAR_TAG_UNKNOWN } }; struct opendmarc_arcares_lookup aar_arc_tags[] = { { "arc", AAR_ARC_TAG_ARC }, { "arc.chain", AAR_ARC_TAG_ARC_CHAIN }, { "smtp.client-ip", AAR_ARC_TAG_SMTP_CLIENT_IP }, { NULL, AAR_ARC_TAG_UNKNOWN } }; /* ** OPENDMARC_ARCARES_CONVERT -- convert a string to its code ** ** Parameters: ** table -- in which table to look up ** str -- string to find ** ** Return value: ** A code translation of "str". */ static int opendmarc_arcares_convert(struct opendmarc_arcares_lookup *table, char *str) { int c; assert(table != NULL); assert(str != NULL); for (c = 0; ; c++) { if (table[c].str == NULL || strcasecmp(table[c].str, str) == 0) return table[c].code; } assert(0); } /* ** OPENDMARC_ARCARES_STRIP_WHITESPACE -- removes all whitespace from a string ** in-place, handling a maximum string of length ** ARCARES_MAX_TOKEN_LEN ** ** Parameters: ** string -- NULL-terminated string to modify ** ** Returns: ** pointer to string on success, NULL on failure (max string length ** exceeded) **/ static char * opendmarc_arcares_strip_whitespace(u_char *string) { assert(string != NULL); int a; int b; char *string_ptr; string_ptr = string; for (a = 0, b = 0; string[b] != '\0' && b < OPENDMARC_ARCARES_MAX_TOKEN_LEN; b++) { if (isascii(string[b]) && isspace(string[b])) continue; string[a] = string[b]; a++; } if (b >= OPENDMARC_ARCARES_MAX_TOKEN_LEN) return NULL; /* set remaining chars to null */ memset(&string[a], '\0', b - a); return string; } /* ** OPENDMARC_ARCARES_PARSE -- parse an ARC-Authentication-Results: header, ** return a structure containing parse result ** ** Parameters: ** hdr -- NULL-terminated contents of an ARC-Authentication-Results: header ** field ** aar -- a pointer to a struct (arcaar) loaded by values after parsing ** ** Returns: ** 0 on success, -1 on failure **/ int opendmarc_arcares_parse (u_char *hdr, struct arcares *aar) { int result = 0; u_char *tmp_ptr; u_char *token; u_char tmp[OPENDMARC_ARCARES_MAXHEADER_LEN + 1]; assert(hdr != NULL); assert(aar != NULL); tmp_ptr = tmp; memset(aar, '\0', sizeof *aar); memset(tmp, '\0', sizeof tmp); // guarantee a null-terminated string memcpy(tmp, hdr, MIN(strlen(hdr), sizeof tmp - 1)); while ((token = strsep((char **)&tmp_ptr, ";")) != NULL) { size_t leading_space_len; aar_tag_t tag_code; char *token_ptr; char *tag_label; char *tag_value; leading_space_len = strspn(token, " \n\t"); token_ptr = token + leading_space_len; if (*token_ptr == '\0') return 0; tag_label = strsep(&token_ptr, "="); tag_value = token_ptr; tag_code = opendmarc_arcares_convert(aar_tags, tag_label); switch (tag_code) { case AAR_TAG_ARC: snprintf(aar->arc, sizeof aar->arc, "%s=%s", tag_label, tag_value); break; case AAR_TAG_DKIM: snprintf(aar->dkim, sizeof aar->dkim, "%s=%s", tag_label, tag_value); break; case AAR_TAG_DMARC: snprintf(aar->dmarc, sizeof aar->dmarc, "%s=%s", tag_label, tag_value); break; case AAR_TAG_INSTANCE: aar->instance = atoi(tag_value); /* next value will be unlabeled authserv_id */ if ((token = strsep((char **) &tmp_ptr, ";")) != NULL) { leading_space_len = strspn(token, " \n\t"); tag_value = opendmarc_arcares_strip_whitespace(token); strlcpy(aar->authserv_id, tag_value, sizeof aar->authserv_id); } break; case AAR_TAG_SPF: snprintf(aar->spf, sizeof aar->spf, "%s=%s", tag_label, tag_value); break; default: result = -1; break; } } return result; } /* ** OPENDMARC_ARCARES_ARC_PARSE -- parse an ARC-Authentication-Results: header ** ARC field, return a structure containing parse ** result ** ** Parameters: ** hdr_arc -- NULL-terminated contents of an ARC-Authentication-Results: ** header ARC field ** arc -- a pointer to a struct (arcares_arc_field) loaded by values after ** parsing ** ** Returns: ** 0 on success, -1 on failure **/ int opendmarc_arcares_arc_parse (u_char *hdr_arc, struct arcares_arc_field *arc) { u_char *tmp_ptr; u_char *token; u_char tmp[OPENDMARC_ARCARES_MAXHEADER_LEN + 1]; int result = 0; tmp_ptr = tmp; assert(hdr_arc != NULL); assert(arc != NULL); memset(arc, '\0', sizeof *arc); memset(tmp, '\0', sizeof tmp); memcpy(tmp, hdr_arc, MIN_OF(strlen(hdr_arc), sizeof tmp - 1)); while ((token = strsep((char **)&tmp_ptr, ";")) != NULL) { size_t leading_space_len; aar_tag_t tag_code; char *token_ptr; char *tag_label; char *tag_value; leading_space_len = strspn(token, " \n\t"); token_ptr = token + leading_space_len; if (*token_ptr == '\0') return 0; tag_label = strsep(&token_ptr, "="); tag_value = opendmarc_arcares_strip_whitespace(token_ptr); tag_code = opendmarc_arcares_convert(aar_arc_tags, tag_label); switch (tag_code) { case AAR_ARC_TAG_ARC: strlcpy(arc->arcresult, tag_value, sizeof arc->arcresult); break; case AAR_ARC_TAG_ARC_CHAIN: strlcpy(arc->arcchain, tag_value, sizeof arc->arcchain); break; case AAR_ARC_TAG_SMTP_CLIENT_IP: strlcpy(arc->smtpclientip, tag_value, sizeof arc->smtpclientip); break; default: result = -1; break; } } return result; } /* ** OPENDMARC_ARCARES_LIST_PLUCK -- retrieve a struct (arcares) from a linked ** list corresponding to a specified instance ** ** Parameters: ** instance -- struct with instance value to find ** aar_hdr -- address of list head pointer (updated) ** aar -- a pointer to a struct (arcaar) loaded by values after parsing ** ** Returns: ** 0 on success, -1 on failure */ int opendmarc_arcares_list_pluck(u_int instance, struct arcares_header *aar_hdr, struct arcares *aar) { assert(instance > 0); assert(aar != NULL); assert(aar_hdr != NULL); memset(aar, '\0', sizeof *aar); while (aar_hdr != NULL) { if (aar_hdr->arcares.instance == instance) { aar->instance = aar_hdr->arcares.instance; strlcpy(aar->authserv_id, aar_hdr->arcares.authserv_id, sizeof aar->authserv_id); strlcpy(aar->arc, aar_hdr->arcares.arc, sizeof aar->arc); strlcpy(aar->dkim, aar_hdr->arcares.dkim, sizeof aar->dkim); strlcpy(aar->dmarc, aar_hdr->arcares.dmarc, sizeof aar->dmarc); strlcpy(aar->spf, aar_hdr->arcares.spf, sizeof aar->spf); return 0; } aar_hdr = aar_hdr->arcares_next; } return -1; } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-arcares.h000066400000000000000000000101321416002254500234150ustar00rootroot00000000000000/* ** Copyright (c) 2018, The Trusted Domain Project. ** All rights reserved. ** ** Implements functionality required to extract ARC authentication results ** details for inclusion in DMARC reporting. */ #ifndef _OPENDMARC_ARCARES_H_ #define _OPENDMARC_ARCARES_H_ /* system includes */ #include /* opendmarc includes */ #include "parse.h" /* boolean TRUE and FALSE */ #ifndef FALSE # define FALSE 0 #endif /* !FALSE */ #ifndef TRUE # define TRUE 1 #endif /* !TRUE */ /* ** limits */ /* buffer to cache a single header */ #define OPENDMARC_ARCARES_MAXHEADER_LEN 4096 /* max header tag value length (short) */ #define OPENDMARC_ARCARES_MAX_SHORT_VALUE_LEN 256 /* max header tag value length (long) */ #define OPENDMARC_ARCARES_MAX_LONG_VALUE_LEN 512 /* names and field labels */ #define OPENDMARC_ARCARES_HDRNAME "ARC-Authentication-Results" #define OPENDMARC_ARCARES_HDRNAME_LEN sizeof(OPENDMARC_ARCARES_HDRNAME) - 1 /* AAR_TAG_T -- type for specifying arc authentication results tag names */ typedef int aar_tag_t; #define AAR_TAG_UNKNOWN (-1) #define AAR_TAG_ARC 0 #define AAR_TAG_AUTHSERV_ID 1 #define AAR_TAG_DKIM 2 #define AAR_TAG_DMARC 3 #define AAR_TAG_INSTANCE 4 #define AAR_TAG_SPF 5 /* AAR_ARC_TAG_T -- type for specifying arc authentication results arc tag names */ typedef int aar_arc_tag_t; #define AAR_ARC_TAG_UNKNOWN (-1) #define AAR_ARC_TAG_ARC 0 #define AAR_ARC_TAG_ARC_CHAIN 1 #define AAR_ARC_TAG_SMTP_CLIENT_IP 2 struct arcares_field { u_char status[OPENDMARC_ARCARES_MAX_SHORT_VALUE_LEN]; u_char string[OPENDMARC_ARCARES_MAX_LONG_VALUE_LEN]; }; /* ARCARES structure -- the single header parsed */ struct arcares { int instance; u_char authserv_id[OPENDMARC_ARCARES_MAX_SHORT_VALUE_LEN + 1]; u_char arc[OPENDMARC_ARCARES_MAX_LONG_VALUE_LEN + 1]; u_char dkim[OPENDMARC_ARCARES_MAX_LONG_VALUE_LEN + 1]; u_char dmarc[OPENDMARC_ARCARES_MAX_LONG_VALUE_LEN + 1]; u_char spf[OPENDMARC_ARCARES_MAX_LONG_VALUE_LEN + 1]; }; /* ARCARES_HEADER -- a node for a linked list of arcares structs */ struct arcares_header { struct arcares arcares; struct arcares_header * arcares_next; struct arcares_header * arcares_prev; }; struct arcares_arc_field { u_char arcresult[OPENDMARC_ARCARES_MAX_SHORT_VALUE_LEN + 1]; u_char smtpclientip[OPENDMARC_ARCARES_MAX_SHORT_VALUE_LEN + 1]; u_char arcchain[OPENDMARC_ARCARES_MAX_LONG_VALUE_LEN + 1]; }; /* ** OPENDMARC_ARCARES_PARSE -- parse an ARC-Authentication-Results: header, ** return a structure containing parse result ** ** Parameters: ** hdr -- NULL-terminated contents of an ARC-Authentication-Results: header ** field ** aar -- a pointer to a struct (arcaar) loaded by values after parsing ** ** Returns: ** 0 on success, -1 on failure **/ extern int opendmarc_arcares_parse __P((u_char *hdr, struct arcares *aar)); /* ** OPENDMARC_ARCARES_ARC+PARSE -- parse an ARC-Authentication-Results: header ** ARC field, return a structure containing parse ** result ** ** Parameters: ** hdr_arc -- NULL-terminated contents of an ARC-Authentication-Results: ** header ARC field ** arc -- a pointer to a struct (arcares_arc_field) loaded by values after ** parsing ** ** Returns: ** 0 on success, -1 on failure **/ extern int opendmarc_arcares_arc_parse __P((u_char *hdr_arc, struct arcares_arc_field *arc)); /* ** OPENDMARC_ARCARES_LIST_PLUCK -- retrieve a struct (arcares) from a linked ** list corresponding to a specified instance ** ** Parameters: ** instance -- struct with instance value to find ** aar_hdr -- address of list head pointer ** aar -- a pointer to a struct (arcaar) loaded by values after parsing ** ** Returns: ** 0 on success, -1 on failure */ extern int opendmarc_arcares_list_pluck(u_int instance, struct arcares_header *aar_hdr, struct arcares *aar); #endif /* _OPENDMARC_ARCARES_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-arcseal.c000066400000000000000000000105701416002254500234100ustar00rootroot00000000000000/* ** Copyright (c) 2018, 2021, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" /* system includes */ #include #include #include #include #ifdef HAVE_STDBOOL_H # include #endif /* HAVE_STDBOOL_H */ /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ #include "opendmarc-arcseal.h" #include "opendmarc.h" #define OPENDMARC_ARCSEAL_MAX_FIELD_NAME_LEN 255 #define OPENDMARC_ARCSEAL_MAX_TOKEN_LEN 512 /* tables */ struct opendmarc_arcseal_lookup { char *str; int code; }; struct opendmarc_arcseal_lookup as_tags[] = { { "a", AS_TAG_ALGORITHM }, { "cv", AS_TAG_CHAIN_VALIDATION }, { "i", AS_TAG_INSTANCE }, { "d", AS_TAG_SIGNATURE_DOMAIN }, { "s", AS_TAG_SIGNATURE_SELECTOR }, { "t", AS_TAG_SIGNATURE_TIME }, { "b", AS_TAG_SIGNATURE_VALUE }, { NULL, AS_TAG_UNKNOWN } }; /* ** OPENDMARC_ARCSEAL_CONVERT -- convert a string to its code ** ** Parameters: ** table -- in which table to look up ** str -- string to find ** ** Return value: ** A code translation of "str". */ static int opendmarc_arcseal_convert(struct opendmarc_arcseal_lookup *table, char *str) { int c; assert(table != NULL); assert(str != NULL); for (c = 0; ; c++) { if (table[c].str == NULL || strcasecmp(table[c].str, str) == 0) return table[c].code; } assert(0); } /* ** OPENDMARC_ARCSEAL_STRIP_WHITESPACE -- removes all whitespace from a string ** in-place, handling a maximum string of length ** ARCSEAL_MAX_TOKEN_LEN ** ** Parameters: ** string -- NULL-terminated string to modify ** ** Returns: ** pointer to string on success, NULL on failure (max string length ** exceeded) **/ static char * opendmarc_arcseal_strip_whitespace(u_char *string) { assert(string != NULL); int a; int b; char *string_ptr; string_ptr = string; for (a = 0, b = 0; string[b] != '\0' && b < OPENDMARC_ARCSEAL_MAX_TOKEN_LEN; b++) { if (isascii(string[b]) && isspace(string[b])) continue; string[a] = string[b]; a++; } if (b >= OPENDMARC_ARCSEAL_MAX_TOKEN_LEN) return NULL; /* set remaining chars to null */ memset(&string[a], '\0', sizeof(char) * (b - a)); return string; } /* ** OPENDMARC_ARCSEAL_PARSE -- parse an ARC-Seal: header, return a structure ** containing a parsed result ** ** Parameters: ** hdr -- NULL-terminated contents of an ARC-Seal: header field ** as -- a pointer to a (struct arcseal) loaded by values after parsing ** ** Returns: ** 0 on success, -1 on failure **/ int opendmarc_arcseal_parse(u_char *hdr, struct arcseal *as) { u_char *tmp_ptr; u_char *token; u_char tmp[OPENDMARC_ARCSEAL_MAXHEADER_LEN + 1]; int result = 0; tmp_ptr = tmp; assert(hdr != NULL); assert(as != NULL); memset(as, '\0', sizeof *as); memset(tmp, '\0', sizeof tmp); // guarantee a null-terminated string memcpy(tmp, hdr, MIN_OF(strlen(hdr), sizeof tmp - 1)); while ((token = strsep((char **)&tmp_ptr, ";")) != NULL) { size_t leading_space_len; as_tag_t tag_code; char *token_ptr; char *tag_label; char *tag_value; leading_space_len = strspn(token, " \n\t"); token_ptr = token + leading_space_len; if (*token_ptr == '\0') return 0; tag_label = strsep(&token_ptr, "="); tag_value = opendmarc_arcseal_strip_whitespace(token_ptr); tag_code = opendmarc_arcseal_convert(as_tags, tag_label); switch (tag_code) { case AS_TAG_ALGORITHM: strlcpy(as->algorithm, tag_value, sizeof as->algorithm); break; case AS_TAG_CHAIN_VALIDATION: strlcpy(as->chain_validation, tag_value, sizeof as->chain_validation); break; case AS_TAG_INSTANCE: as->instance = atoi(tag_value); break; case AS_TAG_SIGNATURE_DOMAIN: strlcpy(as->signature_domain, tag_value, sizeof as->signature_domain); break; case AS_TAG_SIGNATURE_SELECTOR: strlcpy(as->signature_selector, tag_value, sizeof as->signature_selector); break; case AS_TAG_SIGNATURE_TIME: strlcpy(as->signature_time, tag_value, sizeof as->signature_time); break; case AS_TAG_SIGNATURE_VALUE: strlcpy(as->signature_value, tag_value, sizeof as->signature_value); break; default: result = -1; break; } } return result; } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-arcseal.h000066400000000000000000000046151416002254500234200ustar00rootroot00000000000000/* ** Copyright (c) 2018, The Trusted Domain Project. ** All rights reserved. ** ** Implements functionality required to extract ARC seal details for inclusion ** in DMARC reporting. */ #ifndef _OPENDMARC_ARCSEAL_H_ #define _OPENDMARC_ARCSEAL_H_ /* system includes */ #include /* opendmarc includes */ #include "parse.h" /* boolean TRUE and FALSE */ #ifndef FALSE # define FALSE 0 #endif /* !FALSE */ #ifndef TRUE # define TRUE 1 #endif /* !TRUE */ /* ** limits */ /* buffer to cache a single header */ #define OPENDMARC_ARCSEAL_MAXHEADER_LEN 4096 /* max header tag value length (short) */ #define OPENDMARC_ARCSEAL_MAX_SHORT_VALUE_LEN 256 /* max header tag value length (long) */ #define OPENDMARC_ARCSEAL_MAX_LONG_VALUE_LEN 512 /* names and field labels */ #define OPENDMARC_ARCSEAL_HDRNAME "ARC-Seal" #define OPENDMARC_ARCSEAL_HDRNAME_LEN sizeof(OPENDMARC_ARCSEAL_HDRNAME) - 1 /* AS_TAG_T -- type for specifying arc seal tag names */ typedef int as_tag_t; #define AS_TAG_UNKNOWN (-1) #define AS_TAG_ALGORITHM 0 #define AS_TAG_CHAIN_VALIDATION 1 #define AS_TAG_INSTANCE 2 #define AS_TAG_SIGNATURE_DOMAIN 3 #define AS_TAG_SIGNATURE_SELECTOR 4 #define AS_TAG_SIGNATURE_TIME 5 #define AS_TAG_SIGNATURE_VALUE 6 /* ARCSEAL structure -- the single header parsed */ struct arcseal { int instance; u_char algorithm[OPENDMARC_ARCSEAL_MAX_SHORT_VALUE_LEN + 1]; u_char chain_validation[OPENDMARC_ARCSEAL_MAX_SHORT_VALUE_LEN + 1]; u_char signature_domain[OPENDMARC_ARCSEAL_MAX_SHORT_VALUE_LEN + 1]; u_char signature_selector[OPENDMARC_ARCSEAL_MAX_SHORT_VALUE_LEN + 1]; u_char signature_time[OPENDMARC_ARCSEAL_MAX_SHORT_VALUE_LEN + 1]; u_char signature_value[OPENDMARC_ARCSEAL_MAX_LONG_VALUE_LEN + 1]; }; /* ARCSEAL_HEADER -- a node for a linked list of arcseal structs */ struct arcseal_header { struct arcseal arcseal; struct arcseal_header * arcseal_next; struct arcseal_header * arcseal_prev; }; /* ** OPENDMARC_ARC_SEAL_PARSE -- parse an ARC-Seal: header, return a structure ** containing a parsed result ** ** Parameters: ** hdr -- NULL-terminated contents of an ARC-Seal: header field ** as -- a pointer to a (struct arcseal) loaded by values after parsing ** ** Returns: ** 0 on success, -1 on failure **/ extern int opendmarc_arcseal_parse __P((u_char *hdr, struct arcseal *as)); #endif /* _OPENDMARC_ARCSEAL_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-check.8.in000066400000000000000000000012021416002254500233750ustar00rootroot00000000000000.TH opendmarc-check 8 "The Trusted Domain Project" .SH NAME .B opendmarc-check \- DMARC record check tool .SH SYNOPSIS .B opendmarc-check domain [domain [...]] .SH DESCRIPTION .B opendmarc-check queries the DNS for a DMARC record for the named domain(s) and then translates the content found to a human-readable form. This can be used to ensure that the DMARC policy you have placed in the nameserver is what you intended for others to see. .SH VERSION This man page covers version @VERSION@ of .I opendmarc. .SH COPYRIGHT Copyright (c) 2012, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I opendmarc.conf(5), opendmarc(8) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-check.c000066400000000000000000000113611416002254500230520ustar00rootroot00000000000000/* ** Copyright (c) 2012, 2014, 2016, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" /* system includes */ #include #include #include #include #include /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* libopendmarc */ #include #define LOCALHOST "127.0.0.1" #ifndef TRUE # define TRUE 1 #endif /* ! TRUE */ #ifndef FALSE # define FALSE 0 #endif /* ! FALSE */ /* globals */ char *progname; /* ** MAIN -- program mainline ** ** Parameters: ** argc, argv -- the usual ** ** Return value: ** Exit status. */ int main(int argc, char **argv) { int c; int n; int pct; OPENDMARC_STATUS_T status; char *p; char *sp; char *adkim; char *aspf; unsigned char **rua; unsigned char **ruf; DMARC_POLICY_T *dmarc; OPENDMARC_LIB_T lib; progname = (p = strrchr(argv[0], '/')) == NULL ? argv[0] : p + 1; if (argc == 1) { fprintf(stderr, "%s: usage: %s [domain [...]]\n", progname, progname); return EX_USAGE; } memset(&lib, '\0', sizeof lib); lib.tld_type = OPENDMARC_TLD_TYPE_NONE; lib.nscount = 0; status = opendmarc_policy_library_init(&lib); if (status != DMARC_PARSE_OKAY) { fprintf(stderr, "%s: opendmarc_policy_library_init(): %s\n", progname, opendmarc_policy_status_to_str(status)); return EX_SOFTWARE; } dmarc = opendmarc_policy_connect_init(LOCALHOST, FALSE); if (dmarc == NULL) { fprintf(stderr, "%s: opendmarc_policy_connect_init() failed\n", progname); return EX_SOFTWARE; } for (c = 1; c < argc; c++) { (void) opendmarc_policy_connect_rset(dmarc); status = opendmarc_policy_store_from_domain(dmarc, argv[c]); if (status != DMARC_PARSE_OKAY) { fprintf(stderr, "%s: opendmarc_policy_store_from_domain(%s): %s\n", progname, argv[c], opendmarc_policy_status_to_str(status)); return EX_SOFTWARE; } status = opendmarc_policy_query_dmarc(dmarc, NULL); if (status != DMARC_PARSE_OKAY) { fprintf(stderr, "%s: opendmarc_policy_query_dmarc(%s): %s\n", progname, argv[c], opendmarc_policy_status_to_str(status)); return EX_SOFTWARE; } if (c != 1) fprintf(stdout, "\n"); (void) opendmarc_policy_fetch_pct(dmarc, &pct); (void) opendmarc_policy_fetch_adkim(dmarc, &n); switch (n) { case DMARC_RECORD_A_UNSPECIFIED: adkim = "unspecified"; break; case DMARC_RECORD_A_STRICT: adkim = "strict"; break; case DMARC_RECORD_A_RELAXED: adkim = "relaxed"; break; default: adkim = "unknown"; break; } (void) opendmarc_policy_fetch_aspf(dmarc, &n); switch (n) { case DMARC_RECORD_A_UNSPECIFIED: aspf = "unspecified"; break; case DMARC_RECORD_A_STRICT: aspf = "strict"; break; case DMARC_RECORD_A_RELAXED: aspf = "relaxed"; break; default: aspf = "unknown"; break; } (void) opendmarc_policy_fetch_p(dmarc, &n); switch (n) { case DMARC_RECORD_P_UNSPECIFIED: p = "unspecified"; break; case DMARC_RECORD_P_NONE: p = "none"; break; case DMARC_RECORD_P_QUARANTINE: p = "quarantine"; break; case DMARC_RECORD_P_REJECT: p = "reject"; break; default: p = "unknown"; break; } (void) opendmarc_policy_fetch_sp(dmarc, &n); switch (n) { case DMARC_RECORD_P_UNSPECIFIED: sp = "unspecified"; break; case DMARC_RECORD_P_NONE: sp = "none"; break; case DMARC_RECORD_P_QUARANTINE: sp = "quarantine"; break; case DMARC_RECORD_P_REJECT: sp = "reject"; break; default: sp = "unknown"; break; } rua = opendmarc_policy_fetch_rua(dmarc, NULL, 0, 1); ruf = opendmarc_policy_fetch_ruf(dmarc, NULL, 0, 1); fprintf(stdout, "DMARC record for %s:\n", argv[1]); fprintf(stdout, "\tSample percentage: %d\n", pct); fprintf(stdout, "\tDKIM alignment: %s\n", adkim); fprintf(stdout, "\tSPF alignment: %s\n", aspf); fprintf(stdout, "\tDomain policy: %s\n", p); fprintf(stdout, "\tSubdomain policy: %s\n", sp); fprintf(stdout, "\tAggregate report URIs:\n"); for (n = 0; rua != NULL && rua[n] != NULL; n++) fprintf(stdout, "\t\t%s\n", rua[n]); if (n == 0) fprintf(stdout, "\t\t(none)\n"); fprintf(stdout, "\tFailure report URIs:\n"); for (n = 0; ruf != NULL && ruf[n] != NULL; n++) fprintf(stdout, "\t\t%s\n", ruf[n]); if (n == 0) fprintf(stdout, "\t\t(none)\n"); } (void) opendmarc_policy_connect_shutdown(dmarc); (void) opendmarc_policy_library_shutdown(&lib); return EX_OK; } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-config.h000066400000000000000000000047471416002254500232610ustar00rootroot00000000000000/* ** Copyright (c) 2012-2015, 2018, 2021, The Trusted Domain Project. ** All rights reserved. */ #ifndef _OPENDMARC_CONFIG_H_ #define _OPENDMARC_CONFIG_H_ /* macros */ #ifndef FALSE # define FALSE 0 #endif /* ! FALSE */ #ifndef TRUE # define TRUE 1 #endif /* ! TRUE */ /* config definition */ struct configdef dmarcf_config[] = { { "AuthservID", CONFIG_TYPE_STRING, FALSE }, { "AuthservIDWithJobID", CONFIG_TYPE_BOOLEAN, FALSE }, { "AutoRestart", CONFIG_TYPE_BOOLEAN, FALSE }, { "AutoRestartCount", CONFIG_TYPE_INTEGER, FALSE }, { "AutoRestartRate", CONFIG_TYPE_STRING, FALSE }, { "Background", CONFIG_TYPE_BOOLEAN, FALSE }, { "BaseDirectory", CONFIG_TYPE_STRING, FALSE }, { "ChangeRootDirectory", CONFIG_TYPE_STRING, FALSE }, { "CopyFailuresTo", CONFIG_TYPE_STRING, FALSE }, { "DNSTimeout", CONFIG_TYPE_INTEGER, FALSE }, { "DomainWhitelist", CONFIG_TYPE_STRING, FALSE }, { "DomainWhitelistFile", CONFIG_TYPE_STRING, FALSE }, { "DomainWhitelistSize", CONFIG_TYPE_INTEGER, FALSE }, { "EnableCoredumps", CONFIG_TYPE_BOOLEAN, FALSE }, { "FailureReports", CONFIG_TYPE_BOOLEAN, FALSE }, { "FailureReportsBcc", CONFIG_TYPE_STRING, FALSE }, { "FailureReportsOnNone", CONFIG_TYPE_BOOLEAN, FALSE }, { "FailureReportsSentBy", CONFIG_TYPE_STRING, FALSE }, { "HistoryFile", CONFIG_TYPE_STRING, FALSE }, { "HoldQuarantinedMessages", CONFIG_TYPE_BOOLEAN, FALSE }, { "IgnoreAuthenticatedClients", CONFIG_TYPE_BOOLEAN, FALSE }, { "IgnoreHosts", CONFIG_TYPE_STRING, FALSE }, { "IgnoreMailFrom", CONFIG_TYPE_STRING, FALSE }, { "MilterDebug", CONFIG_TYPE_INTEGER, FALSE }, { "PidFile", CONFIG_TYPE_STRING, FALSE }, { "PublicSuffixList", CONFIG_TYPE_STRING, FALSE }, { "RecordAllMessages", CONFIG_TYPE_BOOLEAN, FALSE }, { "RequiredHeaders", CONFIG_TYPE_BOOLEAN, FALSE }, { "RejectFailures", CONFIG_TYPE_BOOLEAN, FALSE }, { "RejectMultiValueFrom", CONFIG_TYPE_BOOLEAN, FALSE }, { "ReportCommand", CONFIG_TYPE_STRING, FALSE }, { "Socket", CONFIG_TYPE_STRING, FALSE }, { "SoftwareHeader", CONFIG_TYPE_BOOLEAN, FALSE }, { "SPFIgnoreResults", CONFIG_TYPE_BOOLEAN, FALSE }, { "SPFSelfValidate", CONFIG_TYPE_BOOLEAN, FALSE }, { "Syslog", CONFIG_TYPE_BOOLEAN, FALSE }, { "SyslogFacility", CONFIG_TYPE_STRING, FALSE }, { "TestDNSData", CONFIG_TYPE_STRING, FALSE }, { "TrustedAuthservIDs", CONFIG_TYPE_STRING, FALSE }, { "UMask", CONFIG_TYPE_INTEGER, FALSE }, { "Userid", CONFIG_TYPE_STRING, FALSE }, { NULL, (u_int) -1, FALSE } }; #endif /* _OPENDMARC_CONFIG_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-dstring.c000066400000000000000000000207561416002254500234570ustar00rootroot00000000000000/* ** Copyright (c) 2005-2009 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009-2012, 2014, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" /* system includes */ #include #include #ifdef HAVE_ISO_LIMITS_ISO_H # include #endif /* HAVE_ISO_LIMITS_ISO_H */ #include #include #include #include #include /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* opendmarc includes */ #include "opendmarc.h" #include "opendmarc-dstring.h" /* struct dmarcf_dstring -- a dynamically-sized string */ struct dmarcf_dstring { int ds_alloc; int ds_max; int ds_len; u_char * ds_buf; }; /* ** DMARCF_DSTRING_RESIZE -- resize a dynamic string (dstring) ** ** Parameters: ** dstr -- DMARCF_DSTRING handle ** len -- number of bytes desired ** ** Return value: ** TRUE iff the resize worked (or wasn't needed) ** ** Notes: ** This will actually ensure that there are "len" bytes available. ** The caller must account for the NULL byte when requesting a ** specific size. */ static _Bool dmarcf_dstring_resize(struct dmarcf_dstring *dstr, int len) { int newsz; u_char *new; assert(dstr != NULL); assert(len > 0); if (dstr->ds_alloc >= len) return TRUE; /* must resize */ for (newsz = dstr->ds_alloc * 2; newsz < len; newsz *= 2) { /* impose ds_max limit, if specified */ if (dstr->ds_max > 0 && newsz > dstr->ds_max) { if (len <= dstr->ds_max) { newsz = len; break; } return FALSE; } /* check for overflow */ if (newsz > INT_MAX / 2) { /* next iteration will overflow "newsz" */ return FALSE; } } new = malloc(newsz); if (new == NULL) return FALSE; memcpy(new, dstr->ds_buf, dstr->ds_alloc); free(dstr->ds_buf); dstr->ds_alloc = newsz; dstr->ds_buf = new; return TRUE; } /* ** DMARCF_DSTRING_NEW -- make a new dstring ** ** Parameters: ** dkim -- DKIM handle ** len -- initial number of bytes ** maxlen -- maximum allowed length (0 == unbounded) ** ** Return value: ** A DMARCF_DSTRING handle, or NULL on failure. */ struct dmarcf_dstring * dmarcf_dstring_new(int len, int maxlen) { struct dmarcf_dstring *new; /* fail on invalid parameters */ if ((maxlen > 0 && len > maxlen) || len == 0) return NULL; if (len < BUFRSZ) len = BUFRSZ; new = malloc(sizeof(struct dmarcf_dstring)); if (new == NULL) return NULL; new->ds_buf = malloc(len); if (new->ds_buf == NULL) { free(new); return NULL; } memset(new->ds_buf, '\0', len); new->ds_alloc = len; new->ds_len = 0; new->ds_max = maxlen; return new; } /* ** DMARCF_DSTRING_FREE -- destroy an existing dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle to be destroyed ** ** Return value: ** None. */ void dmarcf_dstring_free(struct dmarcf_dstring *dstr) { assert(dstr != NULL); free(dstr->ds_buf); free(dstr); } /* ** DMARCF_DSTRING_COPY -- copy data into a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle to update ** str -- input string ** ** Return value: ** TRUE iff the copy succeeded. ** ** Side effects: ** The dstring may be resized. */ _Bool dmarcf_dstring_copy(struct dmarcf_dstring *dstr, u_char *str) { int len; assert(dstr != NULL); assert(str != NULL); len = strlen((char *) str); /* too big? */ if (dstr->ds_max > 0 && len >= dstr->ds_max) return FALSE; /* fits now? */ if (dstr->ds_alloc <= len) { /* nope; try to resize */ if (!dmarcf_dstring_resize(dstr, len + 1)) return FALSE; } /* copy */ dstr->ds_len = strlcpy((char *) dstr->ds_buf, (char *) str, dstr->ds_alloc); return TRUE; } /* ** DMARCF_DSTRING_CAT -- append data onto a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle to update ** str -- input string ** ** Return value: ** TRUE iff the update succeeded. ** ** Side effects: ** The dstring may be resized. */ _Bool dmarcf_dstring_cat(struct dmarcf_dstring *dstr, u_char *str) { int len; assert(dstr != NULL); assert(str != NULL); len = strlen((char *) str) + dstr->ds_len; /* too big? */ if (dstr->ds_max > 0 && len >= dstr->ds_max) return FALSE; /* fits now? */ if (dstr->ds_alloc <= len) { /* nope; try to resize */ if (!dmarcf_dstring_resize(dstr, len + 1)) return FALSE; } /* append */ dstr->ds_len = strlcat((char *) dstr->ds_buf, (char *) str, dstr->ds_alloc); return TRUE; } /* ** DMARCF_DSTRING_CAT1 -- append one byte onto a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle to update ** c -- input character ** ** Return value: ** TRUE iff the update succeeded. ** ** Side effects: ** The dstring may be resized. */ _Bool dmarcf_dstring_cat1(struct dmarcf_dstring *dstr, int c) { int len; assert(dstr != NULL); len = dstr->ds_len + 1; /* too big? */ if (dstr->ds_max > 0 && len >= dstr->ds_max) return FALSE; /* fits now? */ if (dstr->ds_alloc <= len) { /* nope; try to resize */ if (!dmarcf_dstring_resize(dstr, len + 1)) return FALSE; } /* append */ dstr->ds_buf[dstr->ds_len++] = c; dstr->ds_buf[dstr->ds_len] = '\0'; return TRUE; } /* ** DMARCF_DSTRING_CATN -- append 'n' bytes onto a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle to update ** str -- input string ** nbytes -- number of bytes to append ** ** Return value: ** TRUE iff the update succeeded. ** ** Side effects: ** The dstring may be resized. */ _Bool dmarcf_dstring_catn(struct dmarcf_dstring *dstr, unsigned char *str, size_t nbytes) { size_t needed; assert(dstr != NULL); assert(str != NULL); needed = dstr->ds_len + nbytes; /* too big? */ if (dstr->ds_max > 0 && needed >= dstr->ds_max) return FALSE; /* fits now? */ if (dstr->ds_alloc <= needed) { /* nope; try to resize */ if (!dmarcf_dstring_resize(dstr, needed + 1)) return FALSE; } /* append */ memcpy(dstr->ds_buf + dstr->ds_len, str, nbytes); dstr->ds_len += nbytes; dstr->ds_buf[dstr->ds_len] = '\0'; return TRUE; } /* ** DMARCF_DSTRING_GET -- retrieve data in a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle whose string should be retrieved ** ** Return value: ** Pointer to the NULL-terminated contents of "dstr". */ u_char * dmarcf_dstring_get(struct dmarcf_dstring *dstr) { assert(dstr != NULL); return dstr->ds_buf; } /* ** DMARCF_DSTRING_LEN -- retrieve length of data in a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle whose string should be retrieved ** ** Return value: ** Number of bytes in a dstring. */ int dmarcf_dstring_len(struct dmarcf_dstring *dstr) { assert(dstr != NULL); return dstr->ds_len; } /* ** DMARCF_DSTRING_BLANK -- clear out the contents of a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle whose string should be cleared ** ** Return value: ** None. */ void dmarcf_dstring_blank(struct dmarcf_dstring *dstr) { assert(dstr != NULL); dstr->ds_len = 0; dstr->ds_buf[0] = '\0'; } /* ** DMARCF_DSTRING_CHOP -- truncate contents of a dstring ** ** Parameters: ** dstr -- DMARCF_DSTRING handle whose string should be cleared ** len -- length after which to clobber ** ** Return value: ** None. */ void dmarcf_dstring_chop(struct dmarcf_dstring *dstr, int len) { assert(dstr != NULL); if (len < dstr->ds_len) { dstr->ds_len = len; dstr->ds_buf[len] = '\0'; } } /* ** DMARCF_DSTRING_PRINTF -- write variable length formatted output to a ** dstring ** ** Parameters: ** dstr -- DMARCF_STRING handle to be updated ** fmt -- format ** ... -- variable arguments ** ** Return value: ** New size, or -1 on error. */ size_t dmarcf_dstring_printf(struct dmarcf_dstring *dstr, char *fmt, ...) { size_t len; size_t rem; va_list ap; va_list ap2; assert(dstr != NULL); assert(fmt != NULL); va_start(ap, fmt); va_copy(ap2, ap); rem = dstr->ds_alloc - dstr->ds_len; len = vsnprintf((char *) dstr->ds_buf + dstr->ds_len, rem, fmt, ap); va_end(ap); if (len > rem) { if (!dmarcf_dstring_resize(dstr, dstr->ds_len + len + 1)) { va_end(ap2); return (size_t) -1; } rem = dstr->ds_alloc - dstr->ds_len; len = vsnprintf((char *) dstr->ds_buf + dstr->ds_len, rem, fmt, ap2); } va_end(ap2); dstr->ds_len += len; return dstr->ds_len; } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc-dstring.h000066400000000000000000000021631416002254500234540ustar00rootroot00000000000000/* ** Copyright (c) 2004, 2005, 2007-2009 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009, 2010, 2012, The Trusted Domain Project. ** All rights reserved. */ #ifndef _DSTRING_H_ #define _DSTRING_H_ /* system includes */ #include /* TYPES */ struct dmarcf_dstring; /* PROTOTYPES */ extern struct dmarcf_dstring *dmarcf_dstring_new __P((int, int)); extern void dmarcf_dstring_free __P((struct dmarcf_dstring *)); extern _Bool dmarcf_dstring_copy __P((struct dmarcf_dstring *, u_char *)); extern _Bool dmarcf_dstring_cat __P((struct dmarcf_dstring *, u_char *)); extern _Bool dmarcf_dstring_cat1 __P((struct dmarcf_dstring *, int)); extern _Bool dmarcf_dstring_catn __P((struct dmarcf_dstring *, u_char *, size_t)); extern void dmarcf_dstring_chop __P((struct dmarcf_dstring *, int)); extern u_char *dmarcf_dstring_get __P((struct dmarcf_dstring *)); extern int dmarcf_dstring_len __P((struct dmarcf_dstring *)); extern void dmarcf_dstring_blank __P((struct dmarcf_dstring *)); extern size_t dmarcf_dstring_printf __P((struct dmarcf_dstring *, char *, ...)); #endif /* _DSTRING_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc.8.in000066400000000000000000000114611416002254500223320ustar00rootroot00000000000000.TH opendmarc 8 "The Trusted Domain Project" .SH NAME .B opendmarc \- DMARC email policy filter for MTAs .SH SYNOPSIS .B opendmarc [\-A] [\-c configfile] [\-f] [\-l] [\-n] [\-p socketspec] [\-P pidfile] [\-t file[,file[...]]] [\-u userid[:group]] [\-v] [\-V] .SH DESCRIPTION .B opendmarc implements the proposed .B DMARC specification for authentication of message and reporting of observed traffic. .B opendmarc uses the .I milter interface, originally distributed as part of version 8.11 of .B sendmail(8), to provide a DMARC processing service for mail transiting a milter-aware MTA. Most, if not all, of the command line options listed below can also be set using a configuration file. See the .I \-c option for details. .B opendmarc relies on addition of Authentication-Results fields by upstream filters on trusted hosts to collect input to the DMARC algorithm. It does not itself do DKIM or SPF evaluation. .SH OPTIONS .TP .I \-A Automatically re-start on failures. Use with caution; if the filter fails instantly after it starts, this can cause a tight .I fork(2) loop. This can be mitigated using some values in the configuration file to limit restarting. See .I opendmarc.conf(5). .TP .I \-c configfile Read the named configuration file. See the .I opendmarc.conf(5) man page for details. Values in the configuration file are overridden when their equivalents are provided on the command line until a configuration reload occurs. The OPERATION section describes how reloads are triggered. The default is to read a configuration file from .I @SYSCONFDIR@/opendmarc.conf if one exists, or otherwise to apply defaults to all values. .TP .I \-f Normally .I opendmarc forks and exits immediately, leaving the service running in the background. This flag suppresses that behaviour so that it runs in the foreground. .TP .I \-l Log via calls to .I syslog(3) any interesting activity. .TP .I \-n Parse the configuration file and command line arguments, reporting any errors found, and then exit. The exit value will be 0 if the filter would start up without complaint, or non-zero otherwise. .TP .I \-p socketspec Specifies the socket that should be established by the filter to receive connections from .I sendmail(8) in order to provide service. .I socketspec is in one of two forms: .I local:path which creates a UNIX domain socket at the specified .I path, or .I inet:port[@host] or .I inet6:port[@host] which creates a TCP socket on the specified .I port within the specified protocol family. If the .I host is not given as either a hostname or an IP address, the socket will be listening on all interfaces. If neither socket type is specified, .I local is assumed, meaning the parameter is interpreted as a path at which the socket should be created. If an IP address is used, it must be enclosed in square brackets. This parameter is mandatory. .TP .I \-P pidfile Specifies a file into which the filter should write its process ID at startup. .TP .I \-t file[,file[,...]] Reads email messages from the named files and processes them as if they were received by the filter. The service is not started, and actions normally sent back to the MTA will instead be printed on standard output. .TP .I \-u userid[:group] Attempts to be come the specified .I userid before starting operations. The process will be assigned all of the groups and primary group ID of the named .I userid unless an alternate .I group is specified. See the FILE PERMISSIONS section for more information. .TP .I \-v Increase verbose output during test mode (see .I \-t above). May be specified more than once to request increasing amounts of output. .TP .I \-V Print the version number and supported canonicalization and signature algorithms, and then exit without doing anything else. .SH SIGNALS Upon receiving SIGUSR1, if the filter was started with a configuration file, it will be re-read and the new values used. Note that any command line overrides provided at startup time will be lost when this is done. Also, the following configuration file values (and their corresponding command line items, if any) are not reloaded through this process: AutoRestart (\-A), AutoRestartCount, AutoRestartRate, Background, MilterDebug, PidFile (\-P), Socket (\-p), UMask, UserID (\-u). The filter does not automatically check the configuration file for changes and reload. .SH VERSION This man page covers version @VERSION@ of .I opendmarc. .SH COPYRIGHT Copyright (c) 2012, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I opendmarc.conf(5), sendmail(8) .P Sendmail Operations Guide .P RFC4408 \- Sender Policy Framework .P RFC5321 \- Simple Mail Transfer Protocol .P RFC5322 \- Internet Messages .P RFC5451 \- Message Header Field for Indicating Message Authentication Status .P RFC6376 \- DomainKeys Identified Mail .P RFC6591 \- Authentication Failure Reporting Using the Abuse Reporting Format OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc.c000066400000000000000000003361041416002254500220040ustar00rootroot00000000000000/* ** Copyright (c) 2012-2018, 2021, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" #ifndef _GNU_SOURCE # define _GNU_SOURCE #endif /* ! _GNU_SOURCE */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS #endif /* ! _POSIX_PTHREAD_SEMANTICS */ /* system includes */ #include #include #include #ifdef __linux__ # include #endif /* __linux__ */ #include #include #include #include #include #ifdef HAVE_STDBOOL_H # include #endif /* HAVE_STDBOOL_H */ #ifdef HAVE_PATHS_H # include #endif /* HAVE_PATHS_H */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_NETDB_H # include #endif /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* hash support -- requires #define _GNU_SOURCE */ #include /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* libmilter */ #include /* libopendmarc */ #include /* opendmarc includes */ #include "opendmarc.h" #include "config.h" #include "parse.h" #include "test.h" #include "util.h" #include "opendmarc-ar.h" #include "opendmarc-arcares.h" #include "opendmarc-arcseal.h" #include "opendmarc-config.h" #include "opendmarc-dstring.h" /* macros */ #define CMDLINEOPTS "Ac:flnp:P:t:u:vV" #define DEFTIMEOUT 5 #define MAXSPFRESULT 16 #define RECEIVEDSPF "Received-SPF" /* defaults */ #define DEF_WHITELIST_SIZE 3000 #ifndef _PATH_DEVNULL # define _PATH_DEVNULL "/dev/null" #endif /* ! _PATH_DEVNULL */ #ifndef _PATH_SENDMAIL # define _PATH_SENDMAIL "/usr/sbin/sendmail" #endif /* ! _PATH_SENDMAIL */ #define TRYFREE(x) do { \ if ((x) != NULL) \ { \ free(x); \ (x) = NULL; \ } \ } while (0) /* data types */ /* DMARCF_HEADER -- a linked list of header fields */ struct dmarcf_header { char * hdr_name; char * hdr_value; struct dmarcf_header * hdr_next; struct dmarcf_header * hdr_prev; }; /* DMARCF_MSGCTX -- message-specific context */ struct dmarcf_msgctx { int mctx_arcpass; int mctx_arcpolicypass; int mctx_spfresult; char * mctx_jobid; char ** mctx_arcchain; struct arcares_header * mctx_aarhead; struct arcares_header * mctx_aartail; struct arcseal_header * mctx_ashead; struct arcseal_header * mctx_astail; struct dmarcf_header * mctx_hqhead; struct dmarcf_header * mctx_hqtail; struct dmarcf_dstring * mctx_histbuf; struct dmarcf_dstring * mctx_afrf; unsigned char mctx_envfrom[BUFRSZ + 1]; unsigned char mctx_envdomain[BUFRSZ + 1]; unsigned char mctx_fromdomain[BUFRSZ + 1]; }; typedef struct dmarcf_msgctx * DMARCF_MSGCTX; /* DMARCF_CONNCTX -- connection-specific context */ struct dmarcf_connctx { _Bool cctx_milterv2; DMARCF_MSGCTX cctx_msg; DMARC_POLICY_T * cctx_dmarc; struct dmarcf_config * cctx_config; struct sockaddr_storage cctx_ip; char cctx_ipstr[BUFRSZ + 1]; char cctx_host[MAXHOSTNAMELEN + 1]; #if WITH_SPF char cctx_helo[MAXHOSTNAMELEN + 1]; char cctx_rawmfrom[BUFRSZ + 1]; #endif }; typedef struct dmarcf_connctx * DMARCF_CONNCTX; /* DMARCF_CONFIG -- configuration object */ struct dmarcf_config { _Bool conf_reqhdrs; _Bool conf_afrf; _Bool conf_afrfnone; _Bool conf_rejectfail; _Bool conf_dolog; _Bool conf_enablecores; _Bool conf_addswhdr; _Bool conf_authservidwithjobid; _Bool conf_recordall; #if WITH_SPF _Bool conf_spfignoreresults; _Bool conf_spfselfvalidate; #endif /* WITH_SPF */ _Bool conf_ignoreauthclients; _Bool conf_holdquarantinedmessages; _Bool conf_reject_multi_from; unsigned int conf_refcnt; unsigned int conf_dnstimeout; struct config * conf_data; char * conf_afrfas; char * conf_afrfbcc; char * conf_copyfailsto; char * conf_reportcmd; char * conf_authservid; char * conf_historyfile; char * conf_pslist; char * conf_ignorelist; char ** conf_trustedauthservids; char ** conf_ignoredomains; struct list * conf_domainwhitelist; unsigned int conf_domainwhitelisthashcount; }; /* LIST -- basic linked list of strings */ struct list { char * list_str; struct list * list_next; }; /* LOOKUP -- lookup table */ struct lookup { char * str; int code; }; /* table of syslog facilities mapped to names */ struct lookup log_facilities[] = { { "auth", LOG_AUTH }, { "cron", LOG_CRON }, { "daemon", LOG_DAEMON }, { "kern", LOG_KERN }, { "lpr", LOG_LPR }, { "mail", LOG_MAIL }, { "news", LOG_NEWS }, { "security", LOG_AUTH }, /* DEPRECATED */ { "syslog", LOG_SYSLOG }, { "user", LOG_USER }, { "uucp", LOG_UUCP }, { "local0", LOG_LOCAL0 }, { "local1", LOG_LOCAL1 }, { "local2", LOG_LOCAL2 }, { "local3", LOG_LOCAL3 }, { "local4", LOG_LOCAL4 }, { "local5", LOG_LOCAL5 }, { "local6", LOG_LOCAL6 }, { "local7", LOG_LOCAL7 }, { NULL, -1 } }; /* prototypes */ sfsistat mlfi_abort __P((SMFICTX *)); sfsistat mlfi_close __P((SMFICTX *)); sfsistat mlfi_connect __P((SMFICTX *, char *, _SOCK_ADDR *)); #if WITH_SPF sfsistat mlfi_helo __P((SMFICTX *, char *)); #endif sfsistat mlfi_envfrom __P((SMFICTX *, char **)); sfsistat mlfi_eom __P((SMFICTX *)); sfsistat mlfi_header __P((SMFICTX *, char *, char *)); sfsistat mlfi_negotiate __P((SMFICTX *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long *, unsigned long *, unsigned long *, unsigned long *)); static int dmarcf_addlist_csv __P((char *str, char *delim, struct list **head)); static void dmarcf_config_free __P((struct dmarcf_config *)); static struct dmarcf_config *dmarcf_config_new __P((void)); void dmarcf_freearray __P((char **a)); int dmarcf_mkarray __P((char *str, char *delim, char ***array)); sfsistat dmarcf_insheader __P((SMFICTX *, int, char *, char *)); sfsistat dmarcf_setreply __P((SMFICTX *, char *, char *, char *)); /* globals */ _Bool dolog; _Bool die; _Bool reload; _Bool no_i_whine; _Bool testmode; int diesig; struct dmarcf_config *curconf; struct list *ignore; char *progname; char *conffile; char *sock; char *myname; char myhostname[MAXHOSTNAMELEN + 1]; pthread_mutex_t conf_lock; pthread_rwlock_t hash_lock; /* ** DMARCF_ADDRCPT -- wrapper for smfi_addrcpt() ** ** Parameters: ** ctx -- milter (or test) context ** addr -- address to add ** ** Return value: ** An sfsistat. */ sfsistat dmarcf_addrcpt(SMFICTX *ctx, char *addr) { assert(ctx != NULL); if (testmode) return dmarcf_test_addrcpt(ctx, addr); else return smfi_addrcpt(ctx, addr); } /* ** DMARCF_SETREPLY -- wrapper for smfi_setreply() ** ** Parameters: ** ctx -- milter (or test) context ** rcode -- SMTP reply code ** xcode -- SMTP enhanced status code ** replytxt -- reply text ** ** Return value: ** An sfsistat. */ sfsistat dmarcf_setreply(SMFICTX *ctx, char *rcode, char *xcode, char *replytxt) { assert(ctx != NULL); if (testmode) return dmarcf_test_setreply(ctx, rcode, xcode, replytxt); else return smfi_setreply(ctx, rcode, xcode, replytxt); } /* ** DMARCF_INSHEADER -- wrapper for smfi_insheader() ** ** Parameters: ** ctx -- milter (or test) context ** idx -- index at which to insert ** hname -- header name ** hvalue -- header value ** ** Return value: ** An sfsistat. */ sfsistat dmarcf_insheader(SMFICTX *ctx, int idx, char *hname, char *hvalue) { assert(ctx != NULL); assert(hname != NULL); assert(hvalue != NULL); if (testmode) return dmarcf_test_insheader(ctx, idx, hname, hvalue); else #ifdef HAVE_SMFI_INSHEADER return smfi_insheader(ctx, idx, hname, hvalue); #else /* HAVE_SMFI_INSHEADER */ return smfi_addheader(ctx, hname, hvalue); #endif /* HAVE_SMFI_INSHEADER */ } /* ** DMARCF_GETPRIV -- wrapper for smfi_getpriv() ** ** Parameters: ** ctx -- milter (or test) context ** ** Return value: ** The stored private pointer, or NULL. */ void * dmarcf_getpriv(SMFICTX *ctx) { assert(ctx != NULL); if (testmode) return dmarcf_test_getpriv((void *) ctx); else return smfi_getpriv(ctx); } /* ** DMARCF_SETPRIV -- wrapper for smfi_setpriv() ** ** Parameters: ** ctx -- milter (or test) context ** ** Return value: ** An sfsistat. */ sfsistat dmarcf_setpriv(SMFICTX *ctx, void *ptr) { assert(ctx != NULL); if (testmode) return dmarcf_test_setpriv((void *) ctx, ptr); else return smfi_setpriv(ctx, ptr); } /* ** DMARCF_GETSYMVAL -- wrapper for smfi_getsymval() ** ** Parameters: ** ctx -- milter (or test) context ** sym -- symbol to retrieve ** ** Return value: ** Pointer to the value of the requested MTA symbol. */ char * dmarcf_getsymval(SMFICTX *ctx, char *sym) { assert(ctx != NULL); assert(sym != NULL); if (testmode) return dmarcf_test_getsymval(ctx, sym); else return smfi_getsymval(ctx, sym); } /* ** DMARCF_PARSE_RECEIVED_SPF -- try to extract a result from a Received-SPF ** header field ** ** Parameters: ** str -- the value of the Received-SPF field to analyze ** envdomain -- envelope sender domain against which to test ** ** Return value: ** A ARES_RESULT_* constant. ** ** Notes: ** We will not accept a result delivered via a discovered Received-SPF ** header field unless (a) it includes the "identity" key and its ** value is "mailfrom", AND (b) it includes the "envelope-from" key and ** its value matches the envelope sender we got via milter. If either ** of those tests fails, a "pass" or a "fail" is interpreted as "neutral". ** This is necessary to be compliant with RFC 7489 Section 4.1, ** which says the SPF evaluation of MAIL FROM is what DMARC consumes. */ int dmarcf_parse_received_spf(char *str, char *envdomain) { _Bool in_result = TRUE; _Bool escaped = FALSE; _Bool quoting = FALSE; int parens = 0; char *p; char *r; char *end; char result[MAXSPFRESULT + 1]; char spf_envdomain[BUFRSZ + 1]; char key[BUFRSZ + 1]; char value[BUFRSZ + 1]; char identity[BUFRSZ + 1]; assert(str != NULL); memset(spf_envdomain, '\0', sizeof spf_envdomain); memset(key, '\0', sizeof key); memset(value, '\0', sizeof value); memset(identity, '\0', sizeof identity); memset(result, '\0', sizeof result); /* first thing we get is the result token */ r = result; end = &result[sizeof result - 1]; for (p = str; *p != '\0'; p++) { if (escaped) { if (parens == 0 && r < end) *r++ = *p; escaped = FALSE; } else if (*p == '\\') { escaped = TRUE; } else if (*p == '(') { parens++; } else if (*p == ')' && parens > 0) { parens--; } else if (parens == 0) { if (*p == '"') { /* entering/leaving a quoted substring */ quoting = !quoting; continue; } /* a possibly meaningful character */ if (isascii(*p) && isspace(*p)) { /* a space while quoting; just continue */ if (quoting) continue; if (in_result) { in_result = FALSE; r = key; end = &key[sizeof key - 1]; } continue; } if (!in_result && *p == '=') { r = value; end = &value[sizeof value - 1]; } else if (!in_result && *p == ';') { if (strcasecmp(key, "identity") == 0) { strlcpy(identity, value, sizeof identity); } if (strcasecmp(key, "envelope-from") == 0) { strlcpy(spf_envdomain, value, sizeof spf_envdomain); } memset(key, '\0', sizeof key); memset(value, '\0', sizeof value); r = key; end = &key[sizeof key - 1]; } else if (r < end) { *r++ = *p; } } } if (key[0] != '\0') { if (strcasecmp(key, "identity") == 0) strlcpy(identity, value, sizeof identity); if (strcasecmp(key, "envelope-from") == 0) strlcpy(spf_envdomain, value, sizeof spf_envdomain); } p = strchr(spf_envdomain, '@'); if (p != NULL) { r = spf_envdomain; p = p + 1; for (;;) { *r = *p; if (*p == '\0') break; r++; p++; } } if (strcasecmp(identity, "mailfrom") != 0 || strcasecmp(spf_envdomain, envdomain) != 0) { return ARES_RESULT_NEUTRAL; } else if (strcasecmp(result, "pass") == 0) { return ARES_RESULT_PASS; } else if (strcasecmp(result, "fail") == 0) { return ARES_RESULT_FAIL; } else if (strcasecmp(result, "softfail") == 0) { return ARES_RESULT_SOFTFAIL; } else if (strcasecmp(result, "neutral") == 0) { return ARES_RESULT_NEUTRAL; } else if (strcasecmp(result, "temperror") == 0) { return ARES_RESULT_TEMPERROR; } else if (strcasecmp(result, "none") == 0) { return ARES_RESULT_NONE; } else { return ARES_RESULT_PERMERROR; } } /* ** DMARCF_ADDLIST -- add an entry to a singly-linked list ** ** Parameters: ** str -- string to add ** head -- address of list head pointer (updated) ** ** Return value: ** None. */ void dmarcf_addlist(const char *str, struct list **head) { struct list *new; assert(str != NULL); assert(head != NULL); new = malloc(sizeof(struct list)); if (new != NULL) { new->list_next = *head; new->list_str = strdup(str); *head = new; } } /* ** DMARCF_ADDLIST_CSV -- add values from a delimiter-separated string into a ** singly-linked list ** ** Parameters: ** str -- input string ** delim -- set of delimiter characters ** head -- address of list head pointer (updated) ** ** Return value: ** Number of entries added, or -1 on error. */ static int dmarcf_addlist_csv(char *str, char *delim, struct list **head) { char **array = NULL; int result = 0; int i; assert(str != NULL); assert(delim != NULL); assert(head != NULL); result = dmarcf_mkarray(str, delim, &array); for (i = 0; array[i] != NULL; i++) dmarcf_addlist(array[i], head); dmarcf_freearray(array); return result; } /* ** DMARCF_LOAD_DNSDATA -- load fake DNS data into the library ** ** Parameters: ** path -- path to file to read ** ** Return value: ** FALSE iff load wasn't possible; caller should check errno */ _Bool dmarcf_load_dnsdata(char *path) { _Bool gapfound; const char *key; const char *value; char *p; FILE *f; char buf[BUFRSZ]; assert(path != NULL); f = fopen(path, "r"); if (f == NULL) return FALSE; memset(buf, '\0', sizeof buf); while (fgets(buf, sizeof buf - 1, f) != NULL) { key = NULL; value = NULL; gapfound = FALSE; for (p = buf; *p != '\0'; p++) { if (*p == '\n' || *p == '#') { *p = '\0'; break; } else if (!isspace(*p)) { if (key == NULL) key = p; else if (gapfound && value == NULL) value = p; } else { if (!gapfound) { *p = '\0'; gapfound = TRUE; } } } opendmarc_dns_fake_record(key, value); } fclose(f); return TRUE; } /* ** DMARCF_LOADLIST -- add a file's worth of entries to a singly-linked list ** ** Parameters: ** path -- path to file to read ** head -- address of list head pointer (updated) ** ** Return value: ** FALSE iff there was an error; caller should check errno. */ _Bool dmarcf_loadlist(char *path, struct list **head) { int spaces; int datalen; struct list *new; char *p; FILE *f; char buf[BUFRSZ + 1]; assert(path != NULL); assert(head != NULL); f = fopen(path, "r"); if (f == NULL) return FALSE; memset(buf, '\0', sizeof buf); while (fgets(buf, sizeof buf - 1, f) != NULL) { spaces = 0; datalen = 0; for (p = buf; *p != '\0'; p++) { if (*p == '\n' || *p == '#') { *p = '\0'; break; } else if (isspace(*p)) { if (datalen > 0) { *p = '\0'; break; } spaces++; } else { datalen++; } } if (datalen == 0) continue; if (spaces > 0) memmove(&buf[spaces], buf, datalen + 1); new = malloc(sizeof(struct list)); if (new != NULL) { new->list_next = *head; new->list_str = strdup(buf); *head = new; } } fclose(f); return TRUE; } /* ** DMARCF_FREELIST -- destroy a singly-linked list ** ** Parameters: ** head -- list to free ** ** Return value: ** None. */ void dmarcf_freelist(struct list *head) { struct list *cur; struct list *next; cur = head; while (cur != NULL) { free(cur->list_str); next = cur->list_next; free(cur); cur = next; } } /* ** DMARCF_EATSPACES -- chomp spaces at the front and end of a string ** ** Parameters: ** str -- string to crush ** ** Return value: ** None. */ void dmarcf_eatspaces(char *str) { int content = 0; int spaces = 0; int len = 0; char *p; assert(str != NULL); for (p = str; *p != '\0'; p++) { len++; if (isascii(*p) && isspace(*p)) { if (content == 0) { spaces++; } else { *p = '\0'; break; } } else { content++; } } if (len != content) memmove(str, &str[spaces], content + 1); } /* ** DMARCF_FREEARRAY -- destroy an array of strings ** ** Parameters: ** a -- array to destroy ** ** Return vaule: ** None. */ void dmarcf_freearray(char **a) { assert(a != NULL); free(a); } /* ** DMARCF_MKARRAY -- convert a delimiter-separated string into an array ** ** Parameters: ** str -- input string ** delim -- set of delimiter characters ** ** Return value: ** Array length, or -1 on error. */ int dmarcf_mkarray(char *str, char *delim, char ***array) { int n = 0; int a = 0; int ns; char *p; char *ctx; char **out = NULL; assert(str != NULL); assert(delim != NULL); for (p = strtok_r(str, delim, &ctx); p != NULL; p = strtok_r(NULL, delim, &ctx)) { dmarcf_eatspaces(p); if (n + 1 >= a) { if (a == 0) { ns = 4; out = malloc(sizeof(char *) * ns); if (out == NULL) return -1; } else { char **new; ns = a * 2; new = realloc(out, sizeof(char *) * ns); if (new == NULL) { free(out); return -1; } out = new; } memset(&out[a], '\0', sizeof(char *) * (ns - a)); a = ns; } out[n++] = p; out[n] = NULL; } *array = out; return n; } /* ** DMARCF_MATCH -- match a string to an array ** ** Parameters: ** str -- input string ** array -- input array ** icase -- ignore case? ** ** Return value: ** TRUE iff "str" appears in "array". */ _Bool dmarcf_match(const char *str, char **array, _Bool icase) { int c; for (c = 0; array[c] != NULL; c++) { if ((!icase && strcmp(str, array[c]) == 0) || ( icase && strcasecmp(str, array[c]) == 0)) return TRUE; } return FALSE; } /* ** DMARCF_CHECKLIST -- search a linked list for an entry ** ** Parameters: ** str -- string to find ** list -- list to search ** ** Return value: ** TRUE iff "str" was found in "list" */ _Bool dmarcf_checklist(const char *str, struct list *list) { struct list *cur; assert(str != NULL); assert(list != NULL); for (cur = list; cur != NULL; cur = cur->list_next) { if (strcasecmp(str, cur->list_str) == 0) return TRUE; } return FALSE; } /* ** DMARCF_CHECKHOST -- check a list for a hostname ** ** Parameters: ** host -- hostname to find ** list -- list to search ** ** Return value: ** TRUE if there's a match, FALSE otherwise. */ _Bool dmarcf_checkhost(const char *host, struct list *list) { const char *p; char buf[BUFRSZ + 1]; assert(host != NULL); /* short circuit */ if (list == NULL) return FALSE; /* iterate over the possibilities */ for (p = host; p != NULL; p = (p == host ? strchr(host, '.') : strchr(p + 1, '.'))) { snprintf(buf, sizeof buf, "!%s", p); /* try the negative case */ if (dmarcf_checklist(buf, list)) return FALSE; /* ...and now the positive case */ if (dmarcf_checklist(&buf[1], list)) return TRUE; } return FALSE; } /* ** DMARCF_CHECKIP -- check a list an IP address or its matching wildcards ** ** Parameters: ** ip -- IP address to find, as a _SOCK_ADDR ** list -- list to check ** ** Return value: ** TRUE if there's a match, FALSE otherwise. */ _Bool dmarcf_checkip(_SOCK_ADDR *ip, struct list *list) { char ipbuf[MAXHOSTNAMELEN + 1]; assert(ip != NULL); /* short circuit */ if (list == NULL) return FALSE; #if AF_INET6 if (ip->sa_family == AF_INET6) { int bits; size_t dst_len; char *dst; struct sockaddr_in6 sin6; struct in6_addr addr; memcpy(&sin6, ip, sizeof sin6); memcpy(&addr, &sin6.sin6_addr, sizeof addr); memset(ipbuf, '\0', sizeof ipbuf); ipbuf[0] = '!'; dst = &ipbuf[1]; dst_len = sizeof ipbuf - 1; inet_ntop(AF_INET6, &addr, dst, dst_len); dmarcf_lowercase((u_char *) dst); if (dmarcf_checklist(ipbuf, list)) return FALSE; if (dmarcf_checklist(&ipbuf[1], list)) return TRUE; /* iterate over possible bitwise expressions */ for (bits = 0; bits <= 128; bits++) { size_t sz; /* try this one */ memset(ipbuf, '\0', sizeof ipbuf); ipbuf[0] = '!'; dst = &ipbuf[1]; dst_len = sizeof ipbuf - 1; inet_ntop(AF_INET6, &addr, dst, dst_len); dmarcf_lowercase((u_char *) dst); sz = strlcat(ipbuf, "/", sizeof ipbuf); if (sz >= sizeof ipbuf) return FALSE; dst = &ipbuf[sz]; dst_len = sizeof ipbuf - sz; sz = snprintf(dst, dst_len, "%d", 128 - bits); if (sz >= sizeof ipbuf) return FALSE; if (dmarcf_checklist(ipbuf, list)) return FALSE; if (dmarcf_checklist(&ipbuf[1], list)) return TRUE; /* flip off a bit */ if (bits != 128) { int idx; int bit; idx = 15 - (bits / 8); bit = bits % 8; addr.s6_addr[idx] &= ~(1 << bit); } } } #endif /* AF_INET6 */ if (ip->sa_family == AF_INET) { _Bool exists; int c; int bits; struct in_addr addr; struct in_addr mask; struct sockaddr_in sin; memcpy(&sin, ip, sizeof sin); memcpy(&addr.s_addr, &sin.sin_addr, sizeof addr.s_addr); /* try the IP address directly */ exists = FALSE; ipbuf[0] = '!'; (void) dmarcf_inet_ntoa(addr, &ipbuf[1], sizeof ipbuf - 1); if (dmarcf_checklist(ipbuf, list)) return FALSE; if (dmarcf_checklist(&ipbuf[1], list)) return TRUE; /* iterate over possible bitwise expressions */ for (bits = 32; bits >= 0; bits--) { if (bits == 32) { mask.s_addr = 0xffffffff; } else { mask.s_addr = 0; for (c = 0; c < bits; c++) mask.s_addr |= htonl(1 << (31 - c)); } addr.s_addr = addr.s_addr & mask.s_addr; memset(ipbuf, '\0', sizeof ipbuf); ipbuf[0] = '!'; (void) dmarcf_inet_ntoa(addr, &ipbuf[1], sizeof ipbuf - 1); c = strlen(ipbuf); ipbuf[c] = '/'; c++; snprintf(&ipbuf[c], sizeof ipbuf - c, "%d", bits); if (dmarcf_checklist(ipbuf, list)) return FALSE; if (dmarcf_checklist(&ipbuf[1], list)) return TRUE; (void) dmarcf_inet_ntoa(mask, &ipbuf[c], sizeof ipbuf - c); if (dmarcf_checklist(ipbuf, list)) return FALSE; if (dmarcf_checklist(&ipbuf[1], list)) return TRUE; } } return FALSE; } /* ** DMARCF_INIT_SYSLOG -- initialize syslog() ** ** Parameters: ** facility -- name of the syslog facility to use when logging; ** can be NULL to request the default ** ** Return value: ** None. */ static void dmarcf_init_syslog(char *facility) { #ifdef LOG_MAIL int code; struct lookup *p = NULL; closelog(); code = LOG_MAIL; if (facility != NULL) { for (p = log_facilities; p->str != NULL; p++) { if (strcasecmp(p->str, facility) == 0) { code = p->code; break; } } } openlog(progname, LOG_PID, code); #else /* LOG_MAIL */ closelog(); openlog(progname, LOG_PID); #endif /* LOG_MAIL */ } /* ** DMARCF_FINDHEADER -- find a header ** ** Parameters: ** dfc -- filter context ** hname -- name of the header of interest ** instance -- which instance is wanted (0 = first) ** ** Return value: ** Header field handle, or NULL if not found. ** ** Notes: ** Negative values of "instance" search backwards from the end. */ static struct dmarcf_header * dmarcf_findheader(DMARCF_MSGCTX dfc, char *hname, int instance) { struct dmarcf_header *hdr; assert(dfc != NULL); assert(hname != NULL); if (instance < 0) hdr = dfc->mctx_hqtail; else hdr = dfc->mctx_hqhead; while (hdr != NULL) { if (strcasecmp(hdr->hdr_name, hname) == 0) { if (instance == 0 || instance == -1) return hdr; else if (instance > 0) instance--; else instance++; } if (instance < 0) hdr = hdr->hdr_prev; else hdr = hdr->hdr_next; } return NULL; } /* ** DMARCF_CONFIG_LOAD -- load a configuration handle based on file content ** ** Paramters: ** data -- configuration data loaded from config file ** conf -- configuration structure to load ** err -- where to write errors ** errlen -- bytes available at "err" ** ** Return value: ** 0 -- success ** !0 -- error ** ** Side effects: ** openlog() may be called by this function */ static int dmarcf_config_load(struct config *data, struct dmarcf_config *conf, char *err, size_t errlen) { char *str; char confstr[BUFRSZ + 1]; char basedir[MAXPATHLEN + 1]; char *whitelist = NULL; char *whitelistfile = NULL; struct list *cur; int whitelistsize = DEF_WHITELIST_SIZE; assert(conf != NULL); assert(err != NULL); memset(basedir, '\0', sizeof basedir); memset(confstr, '\0', sizeof confstr); if (data != NULL) { str = NULL; (void) config_get(data, "AuthservID", &str, sizeof str); if (str != NULL) { if (strcmp(str, "HOSTNAME") == 0) conf->conf_authservid = strdup(myhostname); else conf->conf_authservid = strdup(str); } str = NULL; (void) config_get(data, "TrustedAuthservIDs", &str, sizeof str); if (str != NULL) dmarcf_mkarray(str, ",", &conf->conf_trustedauthservids); str = NULL; (void) config_get(data, "IgnoreMailFrom", &str, sizeof str); if (str != NULL) dmarcf_mkarray(str, ",", &conf->conf_ignoredomains); (void) config_get(data, "AuthservIDWithJobID", &conf->conf_authservidwithjobid, sizeof conf->conf_authservidwithjobid); memset(basedir, '\0', sizeof basedir); str = NULL; (void) config_get(data, "BaseDirectory", &str, sizeof str); if (str != NULL) strncpy(basedir, str, sizeof basedir - 1); (void) config_get(data, "CopyFailuresTo", &conf->conf_copyfailsto, sizeof conf->conf_copyfailsto); if (conf->conf_dnstimeout == DEFTIMEOUT) { (void) config_get(data, "DNSTimeout", &conf->conf_dnstimeout, sizeof conf->conf_dnstimeout); } (void) config_get(data, "EnableCoredumps", &conf->conf_enablecores, sizeof conf->conf_enablecores); #if WITH_SPF (void) config_get(data, "SPFIgnoreResults", &conf->conf_spfignoreresults, sizeof conf->conf_spfignoreresults); (void) config_get(data, "SPFSelfValidate", &conf->conf_spfselfvalidate, sizeof conf->conf_spfselfvalidate); #endif /* WITH_SPF */ (void) config_get(data, "RejectFailures", &conf->conf_rejectfail, sizeof conf->conf_rejectfail); (void) config_get(data, "RequiredHeaders", &conf->conf_reqhdrs, sizeof conf->conf_reqhdrs); (void) config_get(data, "FailureReports", &conf->conf_afrf, sizeof conf->conf_afrf); (void) config_get(data, "RejectMultiValueFrom", &conf->conf_reject_multi_from, sizeof conf->conf_reject_multi_from); (void) config_get(data, "FailureReportsOnNone", &conf->conf_afrfnone, sizeof conf->conf_afrfnone); (void) config_get(data, "FailureReportsSentBy", &conf->conf_afrfas, sizeof conf->conf_afrfas); (void) config_get(data, "FailureReportsBcc", &conf->conf_afrfbcc, sizeof conf->conf_afrfbcc); (void) config_get(data, "RecordAllMessages", &conf->conf_recordall, sizeof conf->conf_recordall); (void) config_get(data, "HoldQuarantinedMessages", &conf->conf_holdquarantinedmessages, sizeof conf->conf_holdquarantinedmessages); (void) config_get(data, "IgnoreAuthenticatedClients", &conf->conf_ignoreauthclients, sizeof conf->conf_ignoreauthclients); (void) config_get(data, "ReportCommand", &conf->conf_reportcmd, sizeof conf->conf_reportcmd); (void) config_get(data, "PublicSuffixList", &conf->conf_pslist, sizeof conf->conf_pslist); if (!conf->conf_dolog) { (void) config_get(data, "Syslog", &conf->conf_dolog, sizeof conf->conf_dolog); } if (!conf->conf_addswhdr) { (void) config_get(data, "SoftwareHeader", &conf->conf_addswhdr, sizeof conf->conf_addswhdr); } (void) config_get(data, "HistoryFile", &conf->conf_historyfile, sizeof conf->conf_historyfile); str = NULL; (void) config_get(data, "TestDNSData", &str, sizeof str); if (str != NULL) { if (!dmarcf_load_dnsdata(str)) { snprintf(err, errlen, "%s: can't load fake DNS data: %s", str, strerror(errno)); return -1; } } (void) config_get(data, "DomainWhitelist", &whitelist, sizeof whitelist); (void) config_get(data, "DomainWhitelistFile", &whitelistfile, sizeof whitelistfile); (void) config_get(data, "DomainWhitelistSize", &whitelistsize, sizeof whitelistsize); } if (conf->conf_trustedauthservids == NULL && conf->conf_authservid != NULL) { dmarcf_mkarray(conf->conf_authservid, ",", &conf->conf_trustedauthservids); } if (basedir[0] != '\0') { if (chdir(basedir) != 0) { snprintf(err, errlen, "%s: chdir(): %s", basedir, strerror(errno)); return -1; } } /* activate logging if requested */ if (conf->conf_dolog) { char *log_facility = NULL; if (data != NULL) { (void) config_get(data, "SyslogFacility", &log_facility, sizeof log_facility); } dmarcf_init_syslog(log_facility); } /* ** Resize whitelistsize to allow for growth and maintain performance ** ** See: Knuth's "The Art of Computer Programming, Part 3: Searching and ** Sorting" for more information. */ whitelistsize = floor(whitelistsize * 1.20); /* ** Initialize domain_whitelist_hash table. ** ** As this is the only hash table this tool currently needs, ** and since we protect access to the table via a read/write lock, ** we use the older non-reentrant version of the hash table functions ** since it's more portable. */ pthread_rwlock_wrlock(&hash_lock); if (hcreate(whitelistsize) == 0) { fprintf(stderr, "%s: failed to allocate domain whitelist hash table: %s\n", progname, strerror(errno)); pthread_rwlock_unlock(&hash_lock); return EX_OSERR; } conf->conf_domainwhitelisthashcount = 0; /* load entries from configuration file whitelist parameter */ if (whitelist != NULL) { if (!dmarcf_addlist_csv(whitelist, ",", &conf->conf_domainwhitelist)) { fprintf(stderr, "%s: can't load domain whitelist from %s: %s\n", progname, conffile, strerror(errno)); pthread_rwlock_unlock(&hash_lock); return EX_DATAERR; } } /* ...and/or from the whitelist file */ if (whitelistfile != NULL) { if (!dmarcf_loadlist(whitelistfile, &conf->conf_domainwhitelist)) { fprintf(stderr, "%s: can't load domain whitelist file from %s: %s\n", progname, whitelistfile, strerror(errno)); pthread_rwlock_unlock(&hash_lock); return EX_DATAERR; } } /* load domain whitelist hash, memory is managed by list type */ for (cur = conf->conf_domainwhitelist; cur != NULL; cur = cur->list_next) { u_char *domain; ENTRY entry; ENTRY *eptr; domain = cur->list_str; dmarcf_lowercase(domain); entry.key = domain; entry.data = (void *)domain; /* keep track of the number of entries */ eptr = hsearch(entry, FIND); if (eptr == NULL) conf->conf_domainwhitelisthashcount++; /* try to add or update the entry */ eptr = hsearch(entry, ENTER); if (eptr == NULL) { fprintf(stderr, "%s: error inserting new hash table entry: %s\n", progname, strerror(errno)); pthread_rwlock_unlock(&hash_lock); return EX_CONFIG; } } pthread_rwlock_unlock(&hash_lock); return 0; } /* ** DMARCF_CONFIG_RELOAD -- reload configuration if requested ** ** Parameters: ** None. ** ** Return value: ** None. ** ** Side effects: ** If a reload was requested and is successful, "curconf" now points ** to a new configuration handle. */ static void dmarcf_config_reload(void) { struct dmarcf_config *new; char errbuf[BUFRSZ + 1]; pthread_mutex_lock(&conf_lock); if (!reload) { pthread_mutex_unlock(&conf_lock); return; } if (conffile == NULL) { if (curconf->conf_dolog) syslog(LOG_ERR, "ignoring reload signal"); reload = FALSE; pthread_mutex_unlock(&conf_lock); return; } new = dmarcf_config_new(); if (new == NULL) { if (curconf->conf_dolog) syslog(LOG_ERR, "malloc(): %s", strerror(errno)); } else { _Bool err = FALSE; u_int line; struct config *cfg; char *missing; char path[MAXPATHLEN + 1]; memset(path, '\0', sizeof path); strncpy(path, conffile, sizeof path - 1); cfg = config_load(conffile, dmarcf_config, &line, path, sizeof path); if (cfg == NULL) { if (curconf->conf_dolog) { syslog(LOG_ERR, "%s: configuration error at line %u: %s", path, line, config_error()); } dmarcf_config_free(new); err = TRUE; } if (!err) { missing = config_check(cfg, dmarcf_config); if (missing != NULL) { if (curconf->conf_dolog) { syslog(LOG_ERR, "%s: required parameter \"%s\" missing", conffile, missing); } config_free(cfg); dmarcf_config_free(new); err = TRUE; } } if (!err && dmarcf_config_load(cfg, new, errbuf, sizeof errbuf) != 0) { if (curconf->conf_dolog) syslog(LOG_ERR, "%s: %s", conffile, errbuf); config_free(cfg); dmarcf_config_free(new); err = TRUE; } if (!err && new->conf_pslist != NULL) { if (opendmarc_tld_read_file(new->conf_pslist, "//", "*.", "!") != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "%s: read/parse error", new->conf_pslist); } config_free(cfg); dmarcf_config_free(new); err = TRUE; } } if (!err) { if (curconf->conf_refcnt == 0) dmarcf_config_free(curconf); dolog = new->conf_dolog; curconf = new; new->conf_data = cfg; if (new->conf_dolog) { syslog(LOG_INFO, "configuration reloaded from %s", conffile); } } } reload = FALSE; pthread_mutex_unlock(&conf_lock); return; } /* ** DMARCF_CLEANUP -- release local resources related to a message ** ** Parameters: ** ctx -- milter context ** ** Return value: ** None. */ static void dmarcf_cleanup(SMFICTX *ctx) { DMARCF_MSGCTX dfc; DMARCF_CONNCTX cc; assert(ctx != NULL); cc = (DMARCF_CONNCTX) dmarcf_getpriv(ctx); if (cc == NULL) return; dfc = cc->cctx_msg; /* release memory, reset state */ if (dfc != NULL) { if (dfc->mctx_histbuf != NULL) dmarcf_dstring_free(dfc->mctx_histbuf); if (dfc->mctx_afrf != NULL) dmarcf_dstring_free(dfc->mctx_afrf); if (dfc->mctx_hqhead != NULL) { struct dmarcf_header *hdr; struct dmarcf_header *prev; hdr = dfc->mctx_hqhead; while (hdr != NULL) { TRYFREE(hdr->hdr_name); TRYFREE(hdr->hdr_value); prev = hdr; hdr = hdr->hdr_next; TRYFREE(prev); } } if (dfc->mctx_aartail != NULL) { struct arcares_header *aar; struct arcares_header *prev; aar = dfc->mctx_aartail; while(aar != NULL) { prev = aar; aar = aar->arcares_prev; TRYFREE(prev); } } if (dfc->mctx_astail != NULL) { struct arcseal_header *as; struct arcseal_header *prev; as = dfc->mctx_astail; while(as != NULL) { prev = as; as = as->arcseal_prev; TRYFREE(prev); } } free(dfc); cc->cctx_msg = NULL; } } #if SMFI_VERSION >= 0x01000000 /* ** MLFI_NEGOTIATE -- handler called on new SMTP connection to negotiate ** MTA options ** ** Parameters: ** ctx -- milter context ** f0 -- actions offered by the MTA ** f1 -- protocol steps offered by the MTA ** f2 -- reserved for future extensions ** f3 -- reserved for future extensions ** pf0 -- actions requested by the milter ** pf1 -- protocol steps requested by the milter ** pf2 -- reserved for future extensions ** pf3 -- reserved for future extensions ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_negotiate(SMFICTX *ctx, unsigned long f0, unsigned long f1, unsigned long f2, unsigned long f3, unsigned long *pf0, unsigned long *pf1, unsigned long *pf2, unsigned long *pf3) { unsigned long reqactions = SMFIF_ADDHDRS|SMFIF_QUARANTINE; unsigned long wantactions = 0; unsigned long protosteps = ( #if !WITH_SPF SMFIP_NOHELO | #endif /* !WITH_SPF */ SMFIP_NOUNKNOWN | SMFIP_NOBODY | SMFIP_NODATA | SMFIP_SKIP ); DMARCF_CONNCTX cc; struct dmarcf_config *conf; dmarcf_config_reload(); /* initialize connection context */ cc = malloc(sizeof(struct dmarcf_connctx)); if (cc == NULL) { if (curconf->conf_dolog) { syslog(LOG_ERR, "mlfi_negotiate(): malloc(): %s", strerror(errno)); } return SMFIS_TEMPFAIL; } memset(cc, '\0', sizeof(struct dmarcf_connctx)); pthread_mutex_lock(&conf_lock); cc->cctx_config = curconf; curconf->conf_refcnt++; conf = curconf; pthread_mutex_unlock(&conf_lock); if (conf->conf_copyfailsto != NULL) reqactions |= SMFIF_ADDRCPT; /* verify the actions we need are available */ if ((f0 & reqactions) != reqactions) { if (conf->conf_dolog) { syslog(LOG_ERR, "mlfi_negotiate(): required milter action(s) not available (got 0x%lx, need 0x%lx)", f0, reqactions); } pthread_mutex_lock(&conf_lock); conf->conf_refcnt--; pthread_mutex_unlock(&conf_lock); free(cc); return SMFIS_REJECT; } /* also try to get some nice features */ wantactions = (wantactions & f0); /* set the actions we want */ *pf0 = (reqactions | wantactions); /* disable as many protocol steps we don't need as are available */ *pf1 = (protosteps & f1); *pf2 = 0; *pf3 = 0; /* set "milterv2" flag if SMFIP_SKIP was available */ if ((f1 & SMFIP_SKIP) != 0) cc->cctx_milterv2 = TRUE; (void) dmarcf_setpriv(ctx, cc); return SMFIS_CONTINUE; } #endif /* SMFI_VERSION >= 0x01000000 */ /* ** MLFI_CONNECT -- connection handler ** ** Parameters: ** ctx -- milter context ** host -- hostname ** ip -- address, in in_addr form ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_connect(SMFICTX *ctx, char *host, _SOCK_ADDR *ip) { DMARCF_CONNCTX cc; struct dmarcf_config *conf; dmarcf_config_reload(); if (dmarcf_checkhost(host, ignore) || (ip != NULL && dmarcf_checkip(ip, ignore))) { if (curconf->conf_dolog) syslog(LOG_INFO, "ignoring connection from %s", host); return SMFIS_ACCEPT; } /* copy hostname and IP information to a connection context */ cc = dmarcf_getpriv(ctx); if (cc == NULL) { cc = malloc(sizeof(struct dmarcf_connctx)); if (cc == NULL) { pthread_mutex_lock(&conf_lock); if (curconf->conf_dolog) { syslog(LOG_ERR, "%s malloc(): %s", host, strerror(errno)); } pthread_mutex_unlock(&conf_lock); return SMFIS_TEMPFAIL; } memset(cc, '\0', sizeof(struct dmarcf_connctx)); pthread_mutex_lock(&conf_lock); cc->cctx_config = curconf; curconf->conf_refcnt++; conf = curconf; pthread_mutex_unlock(&conf_lock); dmarcf_setpriv(ctx, cc); } else { conf = cc->cctx_config; } if (host != NULL) strncpy(cc->cctx_host, host, sizeof cc->cctx_host - 1); if (ip == NULL) { struct sockaddr_in sa; memset(&sa, '\0', sizeof sa); sa.sin_family = AF_INET; sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK); memcpy(&cc->cctx_ip, &sa, sizeof sa); (void) inet_ntop(AF_INET, &sa.sin_addr, cc->cctx_ipstr, sizeof cc->cctx_ipstr); cc->cctx_dmarc = opendmarc_policy_connect_init(cc->cctx_ipstr, FALSE); } else if (ip->sa_family == AF_INET) { struct sockaddr_in sa; memcpy(&sa, ip, sizeof(struct sockaddr_in)); (void) inet_ntop(AF_INET, &sa.sin_addr, cc->cctx_ipstr, sizeof cc->cctx_ipstr); cc->cctx_dmarc = opendmarc_policy_connect_init(cc->cctx_ipstr, FALSE); memcpy(&cc->cctx_ip, ip, sizeof(struct sockaddr_in)); } #ifdef AF_INET6 else if (ip->sa_family == AF_INET6) { struct sockaddr_in6 sa; memcpy(&sa, ip, sizeof(struct sockaddr_in6)); (void) inet_ntop(AF_INET6, &sa.sin6_addr, cc->cctx_ipstr, sizeof cc->cctx_ipstr); cc->cctx_dmarc = opendmarc_policy_connect_init(cc->cctx_ipstr, TRUE); memcpy(&cc->cctx_ip, ip, sizeof(struct sockaddr_in6)); } #endif /* AF_INET6 */ if (cc->cctx_dmarc == NULL) { if (curconf->conf_dolog) { syslog(LOG_ERR, "%s: DMARC context initialization failed", host); } } cc->cctx_msg = NULL; return SMFIS_CONTINUE; } #if WITH_SPF /* ** MLFI_HELO -- handler for HELO/EHLO command; only used for spf checks if configured. ** ** Parameters: ** ctx -- milter context ** helo_domain -- possible helo domain ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_helo(SMFICTX *ctx, char *helo_domain) { DMARCF_CONNCTX cc; struct dmarcf_config *conf; assert(ctx != NULL); cc = (DMARCF_CONNCTX) dmarcf_getpriv(ctx); if (cc != NULL) { conf = cc->cctx_config; if (!conf->conf_spfselfvalidate) return SMFIS_CONTINUE; if (helo_domain != NULL) { strncpy(cc->cctx_helo, helo_domain, sizeof cc->cctx_helo - 1); } } return SMFIS_CONTINUE; } #endif /* WITH_SPF */ /* ** MLFI_ENVFROM -- handler for MAIL FROM command; used to reset for a message ** ** Parameters: ** ctx -- milter context ** envfrom -- array of arguments ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_envfrom(SMFICTX *ctx, char **envfrom) { DMARCF_MSGCTX dfc; DMARCF_CONNCTX cc; struct dmarcf_config *conf; assert(ctx != NULL); cc = (DMARCF_CONNCTX) dmarcf_getpriv(ctx); assert(cc != NULL); conf = cc->cctx_config; if (cc->cctx_msg != NULL) dmarcf_cleanup(ctx); if (conf->conf_ignoreauthclients && dmarcf_getsymval(ctx, "{auth_authen}") != NULL) return SMFIS_ACCEPT; dfc = (DMARCF_MSGCTX) malloc(sizeof(struct dmarcf_msgctx)); if (dfc == NULL) { if (conf->conf_dolog) syslog(LOG_ERR, "malloc(): %s", strerror(errno)); return SMFIS_TEMPFAIL; } memset(dfc, '\0', sizeof(struct dmarcf_msgctx)); cc->cctx_msg = dfc; dfc->mctx_jobid = JOBIDUNKNOWN; dfc->mctx_spfresult = -1; dfc->mctx_histbuf = dmarcf_dstring_new(BUFRSZ, 0); if (dfc->mctx_histbuf == NULL) { if (conf->conf_dolog) syslog(LOG_ERR, "malloc(): %s", strerror(errno)); return SMFIS_TEMPFAIL; } if (cc->cctx_dmarc != NULL) (void) opendmarc_policy_connect_rset(cc->cctx_dmarc); if (envfrom[0] != NULL) { size_t len; unsigned char *p; unsigned char *q; #if WITH_SPF strncpy(cc->cctx_rawmfrom, envfrom[0], sizeof cc->cctx_rawmfrom - 1); #endif strncpy(dfc->mctx_envfrom, envfrom[0], sizeof dfc->mctx_envfrom - 1); len = strlen(dfc->mctx_envfrom); p = dfc->mctx_envfrom; q = dfc->mctx_envfrom + len - 1; while (len >= 2 && *p == '<' && *q == '>') { p++; q--; len -= 2; } if (p != dfc->mctx_envfrom) { *(q + 1) = '\0'; memmove(dfc->mctx_envfrom, p, len + 1); } p = strchr(dfc->mctx_envfrom, '@'); if (p != NULL) strncpy(dfc->mctx_envdomain, p + 1, BUFRSZ); } return SMFIS_CONTINUE; } /* ** MLFI_HEADER -- handler for mail headers; stores the header in a vector ** of headers for later perusal, removing RFC822 comment ** substrings ** ** Parameters: ** ctx -- milter context ** headerf -- header ** headerv -- value ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_header(SMFICTX *ctx, char *headerf, char *headerv) { DMARCF_MSGCTX dfc; DMARCF_CONNCTX cc; struct dmarcf_header *newhdr; struct dmarcf_config *conf; assert(ctx != NULL); assert(headerf != NULL); assert(headerv != NULL); cc = (DMARCF_CONNCTX) dmarcf_getpriv(ctx); assert(cc != NULL); dfc = cc->cctx_msg; assert(dfc != NULL); conf = cc->cctx_config; newhdr = (struct dmarcf_header *) malloc(sizeof(struct dmarcf_header)); if (newhdr == NULL) { if (conf->conf_dolog) syslog(LOG_ERR, "malloc(): %s", strerror(errno)); dmarcf_cleanup(ctx); return SMFIS_TEMPFAIL; } (void) memset(newhdr, '\0', sizeof(struct dmarcf_header)); newhdr->hdr_name = strdup(headerf); newhdr->hdr_value = strdup(headerv); newhdr->hdr_next = NULL; newhdr->hdr_prev = dfc->mctx_hqtail; if (newhdr->hdr_name == NULL || newhdr->hdr_value == NULL) { if (conf->conf_dolog) syslog(LOG_ERR, "malloc(): %s", strerror(errno)); TRYFREE(newhdr->hdr_name); TRYFREE(newhdr->hdr_value); TRYFREE(newhdr); dmarcf_cleanup(ctx); return SMFIS_TEMPFAIL; } if (dfc->mctx_hqhead == NULL) dfc->mctx_hqhead = newhdr; if (dfc->mctx_hqtail != NULL) dfc->mctx_hqtail->hdr_next = newhdr; dfc->mctx_hqtail = newhdr; return SMFIS_CONTINUE; } /* ** MLFI_EOM -- handler called at the end of the message; we can now decide ** based on the configuration if and how to add the text ** to this message, then release resources ** ** Parameters: ** ctx -- milter context ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_eom(SMFICTX *ctx) { _Bool wspf = FALSE; int c; int pc; int policy; int status; int adkim; int aspf; int pct; int p; int sp; int align_dkim; int align_spf; int limit_arc = 0; int result; u_int froms; sfsistat ret; OPENDMARC_STATUS_T ostatus; OPENDMARC_STATUS_T apused; char *apolicy = NULL; char *aresult = NULL; char *adisposition = NULL; char *hostname = NULL; char *authservid = NULL; char *spfaddr; DMARCF_CONNCTX cc; DMARCF_MSGCTX dfc; struct dmarcf_config *conf; struct dmarcf_header *hdr; struct dmarcf_header *from; struct arcseal_header *as_hdr; u_char *reqhdrs_error = NULL; u_char *user = NULL; u_char **users; u_char *domain = NULL; u_char **domains; u_char *bang; u_char **ruv; unsigned char header[MAXHEADER + 1]; unsigned char addrbuf[BUFRSZ + 1]; unsigned char replybuf[BUFRSZ + 1]; unsigned char pdomain[MAXHOSTNAMELEN + 1]; struct authres ar; assert(ctx != NULL); cc = (DMARCF_CONNCTX) dmarcf_getpriv(ctx); assert(cc != NULL); dfc = cc->cctx_msg; assert(dfc != NULL); conf = cc->cctx_config; dfc->mctx_arcpass = ARES_RESULT_FAIL; dfc->mctx_arcpolicypass = DMARC_ARC_POLICY_RESULT_FAIL; dfc->mctx_ashead = NULL; dfc->mctx_astail = NULL; /* ** If necessary, try again to get the job ID in case it came down ** later than expected (e.g. postfix). */ if (strcmp((char *) dfc->mctx_jobid, JOBIDUNKNOWN) == 0) { dfc->mctx_jobid = (u_char *) dmarcf_getsymval(ctx, "i"); if (dfc->mctx_jobid == NULL) { if (no_i_whine && conf->conf_dolog) { syslog(LOG_WARNING, "WARNING: symbol 'i' not available"); no_i_whine = FALSE; } dfc->mctx_jobid = (u_char *) JOBIDUNKNOWN; } } /* get hostname; used in software header and new MIME boundaries */ hostname = dmarcf_getsymval(ctx, "j"); if (hostname == NULL) hostname = myhostname; /* select authserv-id to use when generating result headers */ authservid = conf->conf_authservid; if (authservid == NULL) { authservid = hostname; if (conf->conf_dolog) { syslog(LOG_INFO, "implicit authentication service: %s", authservid); } } /* ensure there was a From field */ from = dmarcf_findheader(dfc, "From", 0); /* verify RFC5322-required headers (RFC5322 3.6) */ if (from == NULL || dmarcf_findheader(dfc, "From", 1) != NULL) reqhdrs_error = "not exactly one From field"; if (dmarcf_findheader(dfc, "Date", 0) == NULL || dmarcf_findheader(dfc, "Date", 1) != NULL) reqhdrs_error = "not exactly one Date field"; if (dmarcf_findheader(dfc, "Reply-To", 1) != NULL) reqhdrs_error = "multiple Reply-To fields"; if (dmarcf_findheader(dfc, "To", 1) != NULL) reqhdrs_error = "multiple To fields"; if (dmarcf_findheader(dfc, "Cc", 1) != NULL) reqhdrs_error = "multiple Cc fields"; if (dmarcf_findheader(dfc, "Bcc", 1) != NULL) reqhdrs_error = "multiple Bcc fields"; if (dmarcf_findheader(dfc, "Message-Id", 1) != NULL) reqhdrs_error = "multiple Message-Id fields"; if (dmarcf_findheader(dfc, "In-Reply-To", 1) != NULL) reqhdrs_error = "multiple In-Reply-To fields"; if (dmarcf_findheader(dfc, "References", 1) != NULL) reqhdrs_error = "multiple References fields"; if (dmarcf_findheader(dfc, "Subject", 1) != NULL) reqhdrs_error = "multiple Subject fields"; if (conf->conf_reqhdrs && reqhdrs_error != NULL) { if (conf->conf_dolog) { syslog(LOG_INFO, "%s: RFC5322 requirement error: %s", dfc->mctx_jobid, reqhdrs_error); } return SMFIS_REJECT; } /* if there was no From:, there's nothing to process past here */ if (from == NULL) { if (conf->conf_dolog) { syslog(LOG_INFO, "%s: RFC5322 requirement error: missing From field; accepting", dfc->mctx_jobid); } return SMFIS_ACCEPT; } /* extract From: addresses */ memset(addrbuf, '\0', sizeof addrbuf); strncpy(addrbuf, from->hdr_value, sizeof addrbuf - 1); status = dmarcf_mail_parse_multi(addrbuf, &users, &domains, &froms); if (status == 0 && domains[0] != NULL) { /* ** Enact special handling for a multi-valued from if ** the domains are not all the same. This presumes the ** first value had a domain in it. */ for (c = 1; c < froms; c++) { if (domains[c] != NULL && strcasecmp(domains[0], domains[c]) != 0) { syslog(LOG_ERR, "%s: multi-valued From field detected", dfc->mctx_jobid); if (conf->conf_reject_multi_from) return SMFIS_REJECT; else return SMFIS_ACCEPT; } } user = users[0]; domain = domains[0]; } if (status != 0 || user == NULL || domain == NULL) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: unable to parse From header field", dfc->mctx_jobid); } if (conf->conf_reqhdrs) return SMFIS_REJECT; else return SMFIS_ACCEPT; } if (conf->conf_ignoredomains != NULL && dmarcf_match(domain, conf->conf_ignoredomains, TRUE)) { if (conf->conf_dolog) { syslog(LOG_INFO, "%s: ignoring mail from %s", dfc->mctx_jobid, domain); } return SMFIS_ACCEPT; } strncpy(dfc->mctx_fromdomain, domain, sizeof dfc->mctx_fromdomain - 1); ostatus = opendmarc_policy_store_from_domain(cc->cctx_dmarc, dfc->mctx_fromdomain); if (ostatus != DMARC_PARSE_OKAY) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: opendmarc_policy_store_from_domain() returned status %d", dfc->mctx_jobid, ostatus); } return SMFIS_TEMPFAIL; } /* first part of the history buffer */ dmarcf_dstring_printf(dfc->mctx_histbuf, "job %s\n", dfc->mctx_jobid); dmarcf_dstring_printf(dfc->mctx_histbuf, "reporter %s\n", hostname); dmarcf_dstring_printf(dfc->mctx_histbuf, "received %ld\n", time(NULL)); dmarcf_dstring_printf(dfc->mctx_histbuf, "ipaddr %s\n", cc->cctx_ipstr); dmarcf_dstring_printf(dfc->mctx_histbuf, "from %s\n", dfc->mctx_fromdomain); dmarcf_dstring_printf(dfc->mctx_histbuf, "mfrom %s\n", dfc->mctx_envdomain); /* ** Walk through ARC-Authentication-Results fields and pull out data. */ for (hdr = dfc->mctx_hqhead, c = 0; hdr != NULL; hdr = hdr->hdr_next, c++) { /* skip if it's not ARC-Authentication-Results header */ if (strcasecmp(hdr->hdr_name, OPENDMARC_ARCARES_HDRNAME) != 0) continue; /* allocate one */ struct arcares_header *aar_hdr_new = (struct arcares_header *) malloc(sizeof(struct arcares_header)); if (aar_hdr_new == NULL) { if (conf->conf_dolog) syslog(LOG_ERR, "malloc(): %s", strerror(errno)); dmarcf_cleanup(ctx); return SMFIS_TEMPFAIL; } (void) memset(aar_hdr_new, '\0', sizeof(struct arcares_header)); /* parse it */ if (opendmarc_arcares_parse(hdr->hdr_value, &aar_hdr_new->arcares) != 0) { syslog(LOG_WARNING, "%s: ignoring invalid %s header \"%s\"", dfc->mctx_jobid, hdr->hdr_name, hdr->hdr_value); continue; } if (dfc->mctx_aarhead == NULL) { dfc->mctx_aarhead = aar_hdr_new; } if (dfc->mctx_aartail != NULL) { dfc->mctx_aartail->arcares_next = aar_hdr_new; } dfc->mctx_aartail = aar_hdr_new; } /* ** Walk through ARC-Seal fields and pull out data. */ for (hdr = dfc->mctx_hqhead, c = 0; hdr != NULL; hdr = hdr->hdr_next, c++) { /* skip if it's not ARC-Seal header */ if (strcasecmp(hdr->hdr_name, OPENDMARC_ARCSEAL_HDRNAME) != 0) continue; /* allocate one */ struct arcseal_header *as_hdr_new = (struct arcseal_header *)malloc(sizeof(struct arcseal_header)); if (as_hdr_new == NULL) { if (conf->conf_dolog) syslog(LOG_ERR, "malloc(): %s", strerror(errno)); dmarcf_cleanup(ctx); return SMFIS_TEMPFAIL; } (void) memset(as_hdr_new, '\0', sizeof(struct arcseal_header)); /* parse it */ if (opendmarc_arcseal_parse(hdr->hdr_value, &as_hdr_new->arcseal) != 0) continue; if (dfc->mctx_ashead == NULL) { dfc->mctx_ashead = as_hdr_new; } if (dfc->mctx_astail != NULL) { dfc->mctx_astail->arcseal_next = as_hdr_new; } dfc->mctx_astail = as_hdr_new; } /* ** Walk through Authentication-Results fields and pull out data. */ for (hdr = dfc->mctx_hqhead, c = 0; hdr != NULL; hdr = hdr->hdr_next, c++) { /* skip it if it's not Authentication-Results */ if (strcasecmp(hdr->hdr_name, AUTHRESHDRNAME) != 0) continue; /* parse it */ memset(&ar, '\0', sizeof ar); if (ares_parse(hdr->hdr_value, &ar) != 0) continue; /* skip it if it's not one of ours */ if (strcasecmp(ar.ares_host, authservid) != 0 && (conf->conf_trustedauthservids == NULL || !dmarcf_match(ar.ares_host, conf->conf_trustedauthservids, FALSE))) { unsigned char *slash; if (!conf->conf_authservidwithjobid) { if (conf->conf_dolog) { syslog(LOG_DEBUG, "%s ignoring Authentication-Results at %d from %s", dfc->mctx_jobid, c, ar.ares_host); } continue; } slash = (unsigned char *) strchr(ar.ares_host, '/'); if (slash == NULL) { if (conf->conf_dolog) { syslog(LOG_DEBUG, "%s ignoring Authentication-Results at %d from %s", dfc->mctx_jobid, c, ar.ares_host); } continue; } *slash = '\0'; if ((strcasecmp(ar.ares_host, authservid) != 0 && (conf->conf_trustedauthservids == NULL || !dmarcf_match(ar.ares_host, conf->conf_trustedauthservids, FALSE))) || strcmp(slash + 1, dfc->mctx_jobid) != 0) { *slash = '/'; if (conf->conf_dolog) { syslog(LOG_DEBUG, "%s ignoring Authentication-Results at %d from %s", dfc->mctx_jobid, c, ar.ares_host); } continue; } *slash = '/'; } /* walk through what was found */ for (c = 0; c < ar.ares_count; c++) { if (ar.ares_result[c].result_method == ARES_METHOD_SPF #if WITH_SPF && !conf->conf_spfignoreresults #endif ) { _Bool envfrom_match = FALSE; int spfmode; int i; dfc->mctx_spfresult = ar.ares_result[c].result_result; if (ar.ares_result[c].result_result != ARES_RESULT_PASS) continue; /* ** Confirm the method used was "smtp.mailfrom" ** and it matches our envelope sender. */ for (i = 0; i < ar.ares_result[c].result_props; i++) { if (ar.ares_result[c].result_ptype[i] == ARES_PTYPE_SMTP && strcasecmp(ar.ares_result[c].result_property[i], "mailfrom") == 0) { char *d; d = strchr(ar.ares_result[c].result_value[i], '@'); if (d == NULL) d = ar.ares_result[c].result_value[i]; if (strcasecmp(d, dfc->mctx_envdomain) == 0) { envfrom_match = TRUE; break; } } } if (!envfrom_match) continue; spfaddr = NULL; spfmode = DMARC_POLICY_SPF_ORIGIN_HELO; memset(addrbuf, '\0', sizeof addrbuf); for (pc = 0; pc < ar.ares_result[c].result_props; pc++) { if (ar.ares_result[c].result_ptype[pc] == ARES_PTYPE_SMTP) { if (strcasecmp(ar.ares_result[c].result_property[pc], "mailfrom") == 0) { spfaddr = ar.ares_result[c].result_value[pc]; if (strchr(spfaddr, '@') != NULL) { strncpy(addrbuf, spfaddr, sizeof addrbuf - 1); } else { snprintf(addrbuf, sizeof addrbuf, "UNKNOWN@%s", spfaddr); } spfmode = DMARC_POLICY_SPF_ORIGIN_MAILFROM; } else if (strcasecmp(ar.ares_result[c].result_property[pc], "helo") == 0 && addrbuf[0] == '\0') { spfaddr = ar.ares_result[c].result_value[pc]; snprintf(addrbuf, sizeof addrbuf, "UNKNOWN@%s", spfaddr); spfmode = DMARC_POLICY_SPF_ORIGIN_HELO; } } } if (spfaddr == NULL) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: can't extract SPF address from Authentication-Results", dfc->mctx_jobid); } continue; } status = dmarcf_mail_parse(addrbuf, &user, &domain); if (status != 0 || domain == NULL || domain[0] == '\0') { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: unable to parse validated SPF address <%s>", dfc->mctx_jobid, spfaddr); } continue; } ostatus = opendmarc_policy_store_spf(cc->cctx_dmarc, domain, DMARC_POLICY_SPF_OUTCOME_PASS, spfmode, NULL); if (ostatus != DMARC_PARSE_OKAY) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: opendmarc_policy_store_spf() returned status %d", dfc->mctx_jobid, ostatus); } return SMFIS_TEMPFAIL; } dmarcf_dstring_printf(dfc->mctx_histbuf, "spf %d\n", dfc->mctx_spfresult); wspf = TRUE; } else if (ar.ares_result[c].result_method == ARES_METHOD_DKIM) { u_char *dkim_selector = NULL; u_char *dkim_domain = NULL; for (pc = 0; pc < ar.ares_result[c].result_props; pc++) { if (ar.ares_result[c].result_ptype[pc] == ARES_PTYPE_HEADER) { if (ar.ares_result[c].result_property[pc][0] == 'd') { dkim_domain = ar.ares_result[c].result_value[pc]; } if (ar.ares_result[c].result_property[pc][0] == 's') { dkim_selector = ar.ares_result[c].result_value[pc]; } } } if (dkim_domain == NULL) continue; dmarcf_dstring_printf(dfc->mctx_histbuf, "dkim %s %s %d\n", dkim_domain, (dkim_selector != NULL) ? dkim_selector : (u_char *)"-", ar.ares_result[c].result_result); if (ar.ares_result[c].result_result != ARES_RESULT_PASS) continue; ostatus = opendmarc_policy_store_dkim(cc->cctx_dmarc, dkim_domain, dkim_selector, DMARC_POLICY_DKIM_OUTCOME_PASS, NULL); if (ostatus != DMARC_PARSE_OKAY) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: opendmarc_policy_store_from_dkim() returned status %d", dfc->mctx_jobid, ostatus); } return SMFIS_TEMPFAIL; } } else if (ar.ares_result[c].result_method == ARES_METHOD_ARC) { /* ** NOTE: If we arrive here with a trusted A-R ** header field with "arc=none", per ** draft-ietf-dmarc-arc-protocol there is ** nothing else to do because "arc=none" ** should only appear when i=1. */ /* ** If we already countered a trusted A-R ** header with "arc=pass", we need to fail. */ if (ar.ares_result[c].result_result == ARES_RESULT_PASS) { dfc->mctx_arcpass = ARES_RESULT_PASS; limit_arc++; } if (dfc->mctx_arcpass == ARES_RESULT_PASS && limit_arc > 1) dfc->mctx_arcpass = ARES_RESULT_FAIL; /* check arc status against whitelist policy */ if (dfc->mctx_arcpass == ARES_RESULT_PASS && conf->conf_domainwhitelisthashcount > 0) { u_char *arcchain = NULL; u_char *arcdomain; int arcchainlen = 0; int arcchainitempass = 0; ENTRY entry; ENTRY *eptr; for (pc = 0; pc < ar.ares_result[c].result_props; pc++) { if (ar.ares_result[c].result_ptype[pc] == ARES_PTYPE_ARCCHAIN) arcchain = ar.ares_result[c].result_value[pc]; } if (arcchain != NULL) { arcchainlen = dmarcf_mkarray(arcchain, ":", &dfc->mctx_arcchain); for (pc = 0; dfc->mctx_arcchain[pc] != NULL; pc++) { arcdomain = (u_char *)strdup(dfc->mctx_arcchain[pc]); dmarcf_lowercase(arcdomain); entry.key = arcdomain; pthread_rwlock_rdlock(&hash_lock); eptr = hsearch(entry, FIND); pthread_rwlock_unlock(&hash_lock); if (eptr == NULL) continue; arcchainitempass++; } if (arcchainlen == arcchainitempass) dfc->mctx_arcpolicypass = DMARC_ARC_POLICY_RESULT_PASS; } } } } } /* ** If we didn't get Authentication-Results for SPF, parse any ** Received-SPF we might have. */ if (!wspf #if WITH_SPF && !conf->conf_spfignoreresults #endif ) { for (hdr = dfc->mctx_hqhead; hdr != NULL && !wspf; hdr = hdr->hdr_next) { if (strcasecmp(hdr->hdr_name, RECEIVEDSPF) == 0) { int spfres; int spfmode; if (dfc->mctx_fromdomain[0] == '\0') spfmode = DMARC_POLICY_SPF_ORIGIN_HELO; else spfmode = DMARC_POLICY_SPF_ORIGIN_MAILFROM; spfres = dmarcf_parse_received_spf(hdr->hdr_value, dfc->mctx_envdomain); dmarcf_dstring_printf(dfc->mctx_histbuf, "spf %d\n", spfres); dfc->mctx_spfresult = spfres; switch (dfc->mctx_spfresult) { case ARES_RESULT_PASS: spfres = DMARC_POLICY_SPF_OUTCOME_PASS; break; case ARES_RESULT_NONE: spfres = DMARC_POLICY_SPF_OUTCOME_NONE; break; case ARES_RESULT_TEMPERROR: spfres = DMARC_POLICY_SPF_OUTCOME_TMPFAIL; break; case ARES_RESULT_FAIL: case ARES_RESULT_NEUTRAL: case ARES_RESULT_SOFTFAIL: spfres = DMARC_POLICY_SPF_OUTCOME_FAIL; break; default: /* e.g. ARES_RESULT_PERMERROR */ spfres = DMARC_POLICY_SPF_OUTCOME_NONE; break; } /* use the MAIL FROM domain */ ostatus = opendmarc_policy_store_spf(cc->cctx_dmarc, dfc->mctx_envdomain, spfres, spfmode, NULL); wspf = TRUE; } } } /* ** Interact with libopendmarc. */ if (!wspf) { #if WITH_SPF if (conf->conf_spfselfvalidate) { int spf_result; char human[512]; int used_mfrom; char *use_domain; int spf_mode; char *pass_fail; # if HAVE_SPF2_H spf_result = opendmarc_spf2_test( # else /* HAVE_SPF2_H */ spf_result = opendmarc_spf_test( # endif /* HAVE_SPF2_H */ cc->cctx_ipstr, cc->cctx_rawmfrom, cc->cctx_helo, NULL, FALSE, human, sizeof human, &used_mfrom); if (used_mfrom == TRUE) { use_domain = dfc->mctx_envdomain; spf_mode = DMARC_POLICY_SPF_ORIGIN_MAILFROM; } else { use_domain = cc->cctx_helo; spf_mode = DMARC_POLICY_SPF_ORIGIN_HELO; } ostatus = opendmarc_policy_store_spf(cc->cctx_dmarc, use_domain, spf_result, spf_mode, human); switch (spf_result) { case DMARC_POLICY_SPF_OUTCOME_PASS: pass_fail = "pass"; dfc->mctx_spfresult = ARES_RESULT_PASS; break; case DMARC_POLICY_SPF_OUTCOME_NONE: pass_fail = "none"; dfc->mctx_spfresult = ARES_RESULT_NONE; break; case DMARC_POLICY_SPF_OUTCOME_TMPFAIL: pass_fail = "tempfail"; dfc->mctx_spfresult = ARES_RESULT_TEMPERROR; break; case DMARC_POLICY_SPF_OUTCOME_FAIL: dfc->mctx_spfresult = ARES_RESULT_FAIL; pass_fail = "fail"; break; default: dfc->mctx_spfresult = ARES_RESULT_PERMERROR; pass_fail = "permerror"; break; } if (spf_mode == DMARC_POLICY_SPF_ORIGIN_HELO) { snprintf(header, sizeof header, "%s; spf=%s smtp.helo=%s", authservid, pass_fail, use_domain); } else { snprintf(header, sizeof header, "%s; spf=%s smtp.mailfrom=%s", authservid, pass_fail, use_domain); } if (dmarcf_insheader(ctx, 1, AUTHRESULTSHDR, header) == MI_FAILURE) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: %s header add failed", dfc->mctx_jobid, AUTHRESULTSHDR); } } if (conf->conf_dolog) { char *mode; if (spf_mode == DMARC_POLICY_SPF_ORIGIN_HELO) mode = "helo"; else mode = "mailfrom"; syslog(LOG_INFO, "%s: SPF(%s): %s %s", dfc->mctx_jobid, mode, use_domain, pass_fail); } } #endif /* WITH_SPF */ dmarcf_dstring_printf(dfc->mctx_histbuf, "spf %d\n", dfc->mctx_spfresult); } ostatus = opendmarc_policy_query_dmarc(cc->cctx_dmarc, dfc->mctx_fromdomain); if (ostatus == DMARC_PARSE_ERROR_NULL_CTX || ostatus == DMARC_PARSE_ERROR_EMPTY) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: opendmarc_policy_query_dmarc(%s) returned status %d", dfc->mctx_jobid, dfc->mctx_fromdomain, ostatus); } return SMFIS_TEMPFAIL; } else if (ostatus == DMARC_PARSE_ERROR_BAD_VERSION || ostatus == DMARC_PARSE_ERROR_BAD_VALUE || ostatus == DMARC_PARSE_ERROR_NO_REQUIRED_P || ostatus == DMARC_PARSE_ERROR_NO_DOMAIN) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: opendmarc_policy_query_dmarc(%s) returned status %d", dfc->mctx_jobid, dfc->mctx_fromdomain, ostatus); } snprintf(header, sizeof header, "%s; dmarc=permerror header.from=%s", authservid, dfc->mctx_fromdomain); if (dmarcf_insheader(ctx, 1, AUTHRESULTSHDR, header) == MI_FAILURE) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: %s header add failed", dfc->mctx_jobid, AUTHRESULTSHDR); } } return SMFIS_ACCEPT; } memset(pdomain, '\0', sizeof pdomain); opendmarc_policy_fetch_utilized_domain(cc->cctx_dmarc, pdomain, sizeof pdomain); dmarcf_dstring_printf(dfc->mctx_histbuf, "pdomain %s\n", pdomain); policy = opendmarc_get_policy_to_enforce(cc->cctx_dmarc); if (ostatus == DMARC_DNS_ERROR_NO_RECORD) policy = DMARC_POLICY_ABSENT; dmarcf_dstring_printf(dfc->mctx_histbuf, "policy %d\n", policy); ruv = opendmarc_policy_fetch_rua(cc->cctx_dmarc, NULL, 0, TRUE); if (ruv != NULL) { for (c = 0; ruv[c] != NULL; c++) { dmarcf_dstring_printf(dfc->mctx_histbuf, "rua %s\n", ruv[c]); } } else { dmarcf_dstring_printf(dfc->mctx_histbuf, "rua -\n"); } opendmarc_policy_fetch_pct(cc->cctx_dmarc, &pct); dmarcf_dstring_printf(dfc->mctx_histbuf, "pct %d\n", pct); opendmarc_policy_fetch_adkim(cc->cctx_dmarc, &adkim); dmarcf_dstring_printf(dfc->mctx_histbuf, "adkim %d\n", adkim); opendmarc_policy_fetch_aspf(cc->cctx_dmarc, &aspf); dmarcf_dstring_printf(dfc->mctx_histbuf, "aspf %d\n", aspf); opendmarc_policy_fetch_p(cc->cctx_dmarc, &p); dmarcf_dstring_printf(dfc->mctx_histbuf, "p %d\n", p); opendmarc_policy_fetch_sp(cc->cctx_dmarc, &sp); dmarcf_dstring_printf(dfc->mctx_histbuf, "sp %d\n", sp); opendmarc_policy_fetch_alignment(cc->cctx_dmarc, &align_dkim, &align_spf); dmarcf_dstring_printf(dfc->mctx_histbuf, "align_dkim %d\n", align_dkim); dmarcf_dstring_printf(dfc->mctx_histbuf, "align_spf %d\n", align_spf); /* prepare human readable policy string for later processing */ apused = opendmarc_get_policy_token_used(cc->cctx_dmarc); switch (apused == DMARC_USED_POLICY_IS_SP ? sp : p) { case DMARC_RECORD_P_QUARANTINE: apolicy = "quarantine"; break; case DMARC_RECORD_P_REJECT: apolicy = "reject"; break; case DMARC_RECORD_P_UNSPECIFIED: case DMARC_RECORD_P_NONE: default: apolicy = "none"; break; } /* ** Generate a failure report. */ ruv = opendmarc_policy_fetch_ruf(cc->cctx_dmarc, NULL, 0, TRUE); if ((policy == DMARC_POLICY_REJECT || policy == DMARC_POLICY_QUARANTINE || (conf->conf_afrfnone && policy == DMARC_POLICY_NONE)) && conf->conf_afrf && (conf->conf_afrfbcc != NULL || ruv != NULL)) { _Bool first = TRUE; if (dfc->mctx_afrf == NULL) { dfc->mctx_afrf = dmarcf_dstring_new(BUFRSZ, 0); if (dfc->mctx_afrf == NULL) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: unable to create buffer for failure report", dfc->mctx_jobid); } return SMFIS_TEMPFAIL; } } else { dmarcf_dstring_blank(dfc->mctx_afrf); } if (conf->conf_afrfas != NULL) { dmarcf_dstring_printf(dfc->mctx_afrf, "From: %s\n", conf->conf_afrfas); } else { dmarcf_dstring_printf(dfc->mctx_afrf, "From: %s <%s@%s>\n", DMARCF_PRODUCT, myname, hostname); } for (c = 0; ruv != NULL && ruv[c] != NULL; c++) { if (strncasecmp(ruv[c], "mailto:", 7) != 0) continue; bang = strchr(ruv[c], '!'); if (bang != NULL) *bang = '\0'; if (ruv[c][7] == '\0') continue; if (first) { dmarcf_dstring_cat(dfc->mctx_afrf, "To: "); first = FALSE; } else { dmarcf_dstring_cat(dfc->mctx_afrf, ", "); } dmarcf_dstring_cat(dfc->mctx_afrf, &ruv[c][7]); } if (conf->conf_afrfbcc != NULL) { if (first) { dmarcf_dstring_cat(dfc->mctx_afrf, "To: "); dmarcf_dstring_cat(dfc->mctx_afrf, conf->conf_afrfbcc); first = FALSE; } } if (!first) { time_t now; struct dmarcf_header *h; struct tm *tm; FILE *out; char timebuf[BUFRSZ]; /* finish To: from above */ dmarcf_dstring_cat(dfc->mctx_afrf, "\n"); /* Bcc: */ if (ruv != NULL && conf->conf_afrfbcc != NULL) { dmarcf_dstring_cat(dfc->mctx_afrf, "Bcc: "); dmarcf_dstring_cat(dfc->mctx_afrf, conf->conf_afrfbcc); dmarcf_dstring_cat(dfc->mctx_afrf, "\n"); } /* Date: */ (void) time(&now); tm = localtime(&now); (void) strftime(timebuf, sizeof timebuf, "%a, %e %b %Y %H:%M:%S %z (%Z)", tm); dmarcf_dstring_printf(dfc->mctx_afrf, "Date: %s\n", timebuf); h = dmarcf_findheader(dfc, "subject", 0); if (h == NULL) { dmarcf_dstring_printf(dfc->mctx_afrf, "Subject: DMARC failure report for job %s\n", dfc->mctx_jobid); } else { dmarcf_dstring_printf(dfc->mctx_afrf, "Subject: FW: %s\n", h->hdr_value); } dmarcf_dstring_cat(dfc->mctx_afrf, "MIME-Version: 1.0\n"); dmarcf_dstring_printf(dfc->mctx_afrf, "Content-Type: multipart/report;" "\n\treport-type=feedback-report;" "\n\tboundary=\"%s:%s\"\n", hostname, dfc->mctx_jobid); dmarcf_dstring_cat(dfc->mctx_afrf, "\n"); dmarcf_dstring_printf(dfc->mctx_afrf, "--%s:%s\n" "Content-Type: text/plain\n\n", hostname, dfc->mctx_jobid); dmarcf_dstring_printf(dfc->mctx_afrf, "This is an authentication " "failure report for an email " "message received from IP\n" "%s on %s.\n\n", cc->cctx_ipstr, timebuf); dmarcf_dstring_printf(dfc->mctx_afrf, "--%s:%s\n" "Content-Type: message/feedback-report\n\n", hostname, dfc->mctx_jobid); dmarcf_dstring_cat(dfc->mctx_afrf, "Feedback-Type: auth-failure\n" "Version: 1\n"); dmarcf_dstring_printf(dfc->mctx_afrf, "User-Agent: %s/%s\n", DMARCF_PRODUCTNS, VERSION); dmarcf_dstring_cat(dfc->mctx_afrf, "Auth-Failure: dmarc\n"); dmarcf_dstring_printf(dfc->mctx_afrf, "Authentication-Results: %s; dmarc=fail header.from=%s\n", authservid, dfc->mctx_fromdomain); dmarcf_dstring_printf(dfc->mctx_afrf, "Original-Envelope-Id: %s\n", dfc->mctx_jobid); dmarcf_dstring_printf(dfc->mctx_afrf, "Original-Mail-From: %s\n", dfc->mctx_envfrom); dmarcf_dstring_printf(dfc->mctx_afrf, "Source-IP: %s (%s)\n", cc->cctx_ipstr, cc->cctx_host); dmarcf_dstring_printf(dfc->mctx_afrf, "Reported-Domain: %s\n\n", dfc->mctx_fromdomain); dmarcf_dstring_printf(dfc->mctx_afrf, "--%s:%s\n" "Content-Type: text/rfc822-headers\n\n", hostname, dfc->mctx_jobid); for (h = dfc->mctx_hqhead; h != NULL; h = h->hdr_next) { dmarcf_dstring_printf(dfc->mctx_afrf, "%s: %s\n", h->hdr_name, h->hdr_value); } dmarcf_dstring_printf(dfc->mctx_afrf, "\n--%s:%s--\n", hostname, dfc->mctx_jobid); out = popen(conf->conf_reportcmd, "w"); if (out == NULL) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: popen(): %s", dfc->mctx_jobid, strerror(errno)); } } else { fwrite(dmarcf_dstring_get(dfc->mctx_afrf), 1, dmarcf_dstring_len(dfc->mctx_afrf), out); status = pclose(out); if (status != 0 && conf->conf_dolog) { int val; const char *how; if (WIFEXITED(status)) { how = "exited with status"; val = WEXITSTATUS(status); } else if (WIFSIGNALED(status)) { how = "killed with signal"; val = WTERMSIG(status); } else { how = "returned status"; val = status; } syslog(LOG_ERR, "%s: pclose() %s %d", dfc->mctx_jobid, how, val); } } } } /* ** Enact policy based on DMARC results. */ result = DMARC_RESULT_ACCEPT; ret = SMFIS_ACCEPT; switch (policy) { case DMARC_POLICY_ABSENT: /* No DMARC record found */ case DMARC_FROM_DOMAIN_ABSENT: /* No From: domain */ aresult = "none"; break; case DMARC_POLICY_NONE: /* Alignment failed, but policy is none: */ aresult = "fail"; /* Accept and report */ break; case DMARC_POLICY_PASS: /* Explicit accept */ aresult = "pass"; break; case DMARC_POLICY_REJECT: /* Explicit reject */ aresult = "fail"; ret = SMFIS_CONTINUE; if (conf->conf_rejectfail && random() % 100 < pct) { snprintf(replybuf, sizeof replybuf, "rejected by DMARC policy for %s", pdomain); status = dmarcf_setreply(ctx, DMARC_REJECT_SMTP, DMARC_REJECT_ESC, replybuf); if (status != MI_SUCCESS && conf->conf_dolog) { syslog(LOG_ERR, "%s: smfi_setreply() failed", dfc->mctx_jobid); } ret = SMFIS_REJECT; result = DMARC_RESULT_REJECT; } if (conf->conf_copyfailsto != NULL) { status = dmarcf_addrcpt(ctx, conf->conf_copyfailsto); if (status != MI_SUCCESS && conf->conf_dolog) { syslog(LOG_ERR, "%s: smfi_addrcpt() failed", dfc->mctx_jobid); } } break; case DMARC_POLICY_QUARANTINE: /* Explicit quarantine */ aresult = "fail"; ret = SMFIS_CONTINUE; if (conf->conf_rejectfail && conf->conf_holdquarantinedmessages && random() % 100 < pct) { snprintf(replybuf, sizeof replybuf, "quarantined by DMARC policy for %s", pdomain); status = smfi_quarantine(ctx, replybuf); if (status != MI_SUCCESS && conf->conf_dolog) { syslog(LOG_ERR, "%s: smfi_quarantine() failed", dfc->mctx_jobid); } ret = SMFIS_ACCEPT; result = DMARC_RESULT_QUARANTINE; } if (conf->conf_copyfailsto != NULL) { status = dmarcf_addrcpt(ctx, conf->conf_copyfailsto); if (status != MI_SUCCESS && conf->conf_dolog) { syslog(LOG_ERR, "%s: smfi_addrcpt() failed", dfc->mctx_jobid); } } break; default: aresult = "temperror"; ret = SMFIS_TEMPFAIL; result = DMARC_RESULT_TEMPFAIL; break; } /* ** ARC override ** ** If DMARC is in failure mode, we will allow the message provided ** that arc information is valid: arc=pass, arc.chain is present, ** and all listed domains in the chain are whitelisted. ** ** Additional logging is provided when DMARC is in failure mode ** and arc=pass but authentication still fails because of an invalid ** arc.chain to assist with administrative debugging. */ if (result == DMARC_RESULT_REJECT && dfc->mctx_arcpass == ARES_RESULT_PASS && dfc->mctx_arcpolicypass != DMARC_ARC_POLICY_RESULT_PASS && conf->conf_dolog) { syslog(LOG_NOTICE, "%s: ARC pass, policy fail > continuing DMARC eval", dfc->mctx_jobid); } if (result == DMARC_RESULT_REJECT && dfc->mctx_arcpolicypass == DMARC_ARC_POLICY_RESULT_PASS) { ret = SMFIS_ACCEPT; result = DMARC_RESULT_ACCEPT; if (conf->conf_dolog) { syslog(LOG_NOTICE, "%s: ARC pass, policy pass > overriding DMARC fail", dfc->mctx_jobid); } } /* ** Append arc override to historyfile. The format ** ** ** local_policy ** ** arc=[status] as[N].d=dN.example as[N].s=sN ** .. as[1].d=d1.example as[1].s=s1 client-ip[1]=10.10.10.13 ** ** ** ** Where: ** arc_policy 1 json:[ ** { i=2, d = d2.example, s = s2, ip = addr2 }, ** { i=1, d = d1.example, s = s1, ip = addr1 } ** ] */ dmarcf_dstring_printf(dfc->mctx_histbuf, "arc %d\n", dfc->mctx_arcpass); /* ** Iterate through ARC-Seal headers and add results to report. */ struct arcares arcares; struct arcares_arc_field arcares_arc_field; dmarcf_dstring_printf(dfc->mctx_histbuf, "arc_policy %d json:[", dfc->mctx_arcpolicypass); for (as_hdr = dfc->mctx_ashead, c = 0; dfc->mctx_aarhead != NULL && as_hdr != NULL; as_hdr = as_hdr->arcseal_next, c++) { /* fetch smtp.client_ip from aar */ if (opendmarc_arcares_list_pluck(as_hdr->arcseal.instance, dfc->mctx_aarhead, &arcares) == 0) { (void) opendmarc_arcares_arc_parse(arcares.arc, &arcares_arc_field); } dmarcf_dstring_printf(dfc->mctx_histbuf, "%s{ \"i\": %d, \"d\":\"%s\", \"s\":\"%s\", \"ip\":\"%s\" }", (c > 0) ? ", " : "", as_hdr->arcseal.instance, as_hdr->arcseal.signature_domain, as_hdr->arcseal.signature_selector, arcares_arc_field.smtpclientip); } dmarcf_dstring_printf(dfc->mctx_histbuf, "]\n"); /* prepare human readable dispositon string for later processing */ switch (result) { case DMARC_RESULT_REJECT: adisposition = "reject"; break; case DMARC_RESULT_QUARANTINE: adisposition = "quarantine"; break; default: adisposition = "none"; break; } if (conf->conf_dolog) { syslog(LOG_INFO, "%s: %s %s", dfc->mctx_jobid, dfc->mctx_fromdomain, aresult); } /* if the final action isn't TEMPFAIL or REJECT, add an A-R field */ if (ret != SMFIS_TEMPFAIL && ret != SMFIS_REJECT) { snprintf(header, sizeof header, "%s%s%s; dmarc=%s (p=%s dis=%s) header.from=%s", authservid, conf->conf_authservidwithjobid ? "/" : "", conf->conf_authservidwithjobid ? dfc->mctx_jobid : "", aresult, apolicy, adisposition, dfc->mctx_fromdomain); if (dmarcf_insheader(ctx, 1, AUTHRESULTSHDR, header) == MI_FAILURE) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: %s header add failed", dfc->mctx_jobid, AUTHRESULTSHDR); } } } dmarcf_dstring_printf(dfc->mctx_histbuf, "action %d\n", result); /* ** Record activity in the history file. */ if (conf->conf_historyfile != NULL && (conf->conf_recordall || ostatus != DMARC_DNS_ERROR_NO_RECORD)) { FILE *f; f = fopen(conf->conf_historyfile, "a"); if (f == NULL) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: %s: fopen(): %s", dfc->mctx_jobid, conf->conf_historyfile, strerror(errno)); } return SMFIS_TEMPFAIL; } #ifdef LOCK_EX if (flock(fileno(f), LOCK_EX) != 0) { syslog(LOG_WARNING, "%s: %s: flock(LOCK_EX): %s", #else # ifdef F_LOCK if (lockf(fileno(f), F_LOCK, 0) != 0) { syslog(LOG_WARNING, "%s: %s: lockf(F_LOCK): %s", # endif #endif /* LOCK_EX */ dfc->mctx_jobid, conf->conf_historyfile, strerror(errno)); } /* write out the buffer */ clearerr(f); fwrite(dmarcf_dstring_get(dfc->mctx_histbuf), 1, dmarcf_dstring_len(dfc->mctx_histbuf), f); if (ferror(f) && conf->conf_dolog) { syslog(LOG_ERR, "%s: %s: fwrite(): %s", dfc->mctx_jobid, conf->conf_historyfile, strerror(errno)); } #ifdef LOCK_EX if (flock(fileno(f), LOCK_UN) != 0) { syslog(LOG_WARNING, "%s: %s: flock(LOCK_UN): %s", #else # ifdef F_LOCK if (lockf(fileno(f), F_ULOCK, 0) != 0) { syslog(LOG_WARNING, "%s: %s: lockf(F_ULOCK): %s", # endif #endif /* LOCK_EX */ dfc->mctx_jobid, conf->conf_historyfile, strerror(errno)); } fclose(f); } if (conf->conf_addswhdr) { snprintf(header, sizeof header, "%s v%s %s %s", DMARCF_PRODUCT, VERSION, hostname, dfc->mctx_jobid != NULL ? dfc->mctx_jobid : JOBIDUNKNOWN); if (dmarcf_insheader(ctx, 1, SWHEADERNAME, header) == MI_FAILURE) { if (conf->conf_dolog) { syslog(LOG_ERR, "%s: %s header add failed", dfc->mctx_jobid, SWHEADERNAME); } } } dmarcf_cleanup(ctx); return ret; } /* ** MLFI_ABORT -- handler called if an earlier filter in the filter process ** rejects the message ** ** Parameters: ** ctx -- milter context ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_abort(SMFICTX *ctx) { dmarcf_cleanup(ctx); return SMFIS_CONTINUE; } /* ** MLFI_CLOSE -- handler called on connection shutdown ** ** Parameters: ** ctx -- milter context ** ** Return value: ** An SMFIS_* constant. */ sfsistat mlfi_close(SMFICTX *ctx) { DMARCF_CONNCTX cc; dmarcf_cleanup(ctx); cc = (DMARCF_CONNCTX) dmarcf_getpriv(ctx); if (cc != NULL) { pthread_mutex_lock(&conf_lock); cc->cctx_config->conf_refcnt--; if (cc->cctx_config->conf_refcnt == 0 && cc->cctx_config != curconf) dmarcf_config_free(cc->cctx_config); pthread_mutex_unlock(&conf_lock); (void) opendmarc_policy_connect_shutdown(cc->cctx_dmarc); free(cc); dmarcf_setpriv(ctx, NULL); } return SMFIS_CONTINUE; } /* ** smfilter -- the milter module description */ struct smfiDesc smfilter = { DMARCF_PRODUCT, /* filter name */ SMFI_VERSION, /* version code -- do not change */ 0, /* flags; updated in main() */ mlfi_connect, /* connection info filter */ #if WITH_SPF mlfi_helo, /* SMTP HELO command filter */ #else NULL, /* SMTP HELO command filter */ #endif mlfi_envfrom, /* envelope sender filter */ NULL, /* envelope recipient filter */ mlfi_header, /* header filter */ NULL, /* end of header */ NULL, /* body block filter */ mlfi_eom, /* end of message */ mlfi_abort, /* message aborted */ mlfi_close, /* shutdown */ #if SMFI_VERSION > 2 NULL, /* unrecognised command */ #endif #if SMFI_VERSION > 3 NULL, /* DATA */ #endif #if SMFI_VERSION >= 0x01000000 mlfi_negotiate /* negotiation callback */ #endif }; /* ** DMARCF_SIGHANDLER -- signal handler ** ** Parameters: ** sig -- signal received ** ** Return value: ** None. */ static void dmarcf_sighandler(int sig) { if (sig == SIGINT || sig == SIGTERM || sig == SIGHUP) { diesig = sig; die = TRUE; } else if (sig == SIGUSR1) { if (conffile != NULL) reload = TRUE; } } /* ** DMARCF_RELOADER -- reload signal thread ** ** Parameters: ** vp -- void pointer required by thread API but not used ** ** Return value: ** NULL. */ static void * dmarcf_reloader(/* UNUSED */ void *vp) { int sig; sigset_t mask; (void) pthread_detach(pthread_self()); sigemptyset(&mask); sigaddset(&mask, SIGUSR1); while (!die) { (void) sigwait(&mask, &sig); if (conffile != NULL) reload = TRUE; } return NULL; } /* ** DMARCF_KILLCHILD -- kill child process ** ** Parameters: ** pid -- process ID to signal ** sig -- signal to use ** dolog -- log it? ** ** Return value: ** None. */ static void dmarcf_killchild(pid_t pid, int sig, _Bool dolog) { if (kill(pid, sig) == -1 && dolog) { syslog(LOG_ERR, "kill(%d, %d): %s", pid, sig, strerror(errno)); } } /* ** DMARCF_RESTART_CHECK -- initialize/check restart rate information ** ** Parameters: ** n -- size of restart rate array to initialize/enforce ** t -- maximum time range for restarts (0 == init) ** ** Return value: ** TRUE -- OK to continue ** FALSE -- error */ static _Bool dmarcf_restart_check(int n, time_t t) { static int idx; /* last filled slot */ static int alen; /* allocated length */ static time_t *list; if (t == 0) { alen = n * sizeof(time_t); list = (time_t *) malloc(alen); if (list == NULL) return FALSE; memset(list, '\0', alen); idx = 0; alen = n; return TRUE; } else { int which; time_t now; (void) time(&now); which = (idx - 1) % alen; if (which == -1) which = alen - 1; if (list[which] != 0 && list[which] + t > now) return FALSE; list[which] = t; idx++; return TRUE; } } /* ** DMARCF_STDIO -- set up the base descriptors to go nowhere ** ** Parameters: ** None. ** ** Return value: ** None. */ static void dmarcf_stdio(void) { int devnull; /* this only fails silently, but that's OK */ devnull = open(_PATH_DEVNULL, O_RDWR, 0); if (devnull != -1) { (void) dup2(devnull, 0); (void) dup2(devnull, 1); (void) dup2(devnull, 2); if (devnull > 2) (void) close(devnull); } (void) setsid(); } /* ** DMARCF_CONFIG_NEW -- get a new configuration handle ** ** Parameters: ** None. ** ** Return value: ** A new configuration handle, or NULL on error. */ static struct dmarcf_config * dmarcf_config_new(void) { struct dmarcf_config *new; new = (struct dmarcf_config *) malloc(sizeof(struct dmarcf_config)); if (new == NULL) return NULL; memset(new, '\0', sizeof(struct dmarcf_config)); new->conf_reportcmd = DEFREPORTCMD; return new; } /* ** DMARCF_CONFIG_FREE -- destroy a configuration handle ** ** Parameters: ** conf -- pointer to the configuration handle to be destroyed ** ** Return value: ** None. */ static void dmarcf_config_free(struct dmarcf_config *conf) { assert(conf != NULL); assert(conf->conf_refcnt == 0); if (conf->conf_data != NULL) config_free(conf->conf_data); if (conf->conf_ignoredomains != NULL) dmarcf_freearray(conf->conf_ignoredomains); if (conf->conf_trustedauthservids != NULL) dmarcf_freearray(conf->conf_trustedauthservids); if (conf->conf_authservid != NULL) free(conf->conf_authservid); if (conf->conf_domainwhitelisthashcount > 0) { /* ** conf_domainwhitelist manages memory for entries in domain ** whitelist hash so we just free that allocation here. */ dmarcf_freelist(conf->conf_domainwhitelist); hdestroy(); } free(conf); } /* ** USAGE -- print a usage message and exit ** ** Parameters: ** None. ** ** Return value: ** EX_USAGE */ int usage(void) { fprintf(stderr, "%s: usage: %s [options]\n" "\t-A \tenable auto-restart\n" "\t-c file \tconfiguration file\n" "\t-f \trun in the foreground\n" "\t-l \tlog to syslog\n" "\t-n \ttest configuration and exit\n" "\t-p sockspec\tspecify milter socket\n" "\t-P file \twrite process ID to specified file\n" "\t-t file \tevaluate a single message\n" "\t-u user \ttry to become the named user\n" "\t-v \tincrease verbose output\n" "\t-V \tprint version and exit\n", progname, progname); return EX_USAGE; } /* ** MAIN -- program mainline ** ** Parameters: ** argc, argv -- the usual ** ** Return value: ** Exit status. */ int main(int argc, char **argv) { _Bool autorestart = FALSE; _Bool gotp = FALSE; _Bool dofork = TRUE; _Bool stricttest = FALSE; _Bool configonly = FALSE; int c; int status; int n; int verbose = 0; int maxrestarts = 0; int maxrestartrate_n = 0; int filemask = -1; int mdebug = 0; #ifdef HAVE_SMFI_VERSION u_int mvmajor; u_int mvminor; u_int mvrelease; #endif /* HAVE_SMFI_VERSION */ time_t now; gid_t gid = (gid_t) -1; sigset_t sigset; time_t maxrestartrate_t = 0; pthread_t rt; const char *args = CMDLINEOPTS; FILE *f; struct passwd *pw = NULL; struct group *gr = NULL; char *become = NULL; char *chrootdir = NULL; char *extract = NULL; char *ignorefile = NULL; char *p; char *pidfile = NULL; char *testfile = NULL; struct config *cfg = NULL; char *end; char argstr[MAXARGV]; char err[BUFRSZ + 1]; OPENDMARC_LIB_T libopendmarc; /* initialize */ testmode = FALSE; reload = FALSE; sock = NULL; no_i_whine = TRUE; conffile = NULL; ignore = NULL; memset(myhostname, '\0', sizeof myhostname); (void) gethostname(myhostname, sizeof myhostname); progname = (p = strrchr(argv[0], '/')) == NULL ? argv[0] : p + 1; (void) time(&now); srandom(now); curconf = dmarcf_config_new(); if (curconf == NULL) { fprintf(stderr, "%s: malloc(): %s\n", progname, strerror(errno)); return EX_OSERR; } /* process command line options */ while ((c = getopt(argc, argv, args)) != -1) { switch (c) { case 'A': autorestart = TRUE; break; case 'c': if (optarg == NULL || *optarg == '\0') return usage(); conffile = optarg; break; case 'f': dofork = FALSE; break; case 'l': curconf->conf_dolog = TRUE; break; case 'n': configonly = TRUE; break; case 'p': if (optarg == NULL || *optarg == '\0') return usage(); sock = optarg; (void) smfi_setconn(optarg); gotp = TRUE; break; case 'P': if (optarg == NULL || *optarg == '\0') return usage(); pidfile = optarg; break; case 't': if (optarg == NULL || *optarg == '\0') return usage(); testmode = TRUE; testfile = optarg; break; case 'u': if (optarg == NULL || *optarg == '\0') return usage(); become = optarg; break; case 'v': verbose++; break; case 'V': printf("%s: %s v%s\n", progname, DMARCF_PRODUCT, VERSION); printf("\tSMFI_VERSION 0x%x\n", SMFI_VERSION); #ifdef HAVE_SMFI_VERSION (void) smfi_version(&mvmajor, &mvminor, &mvrelease); printf("\tlibmilter version %d.%d.%d\n", mvmajor, mvminor, mvrelease); #endif /* HAVE_SMFI_VERSION */ dmarcf_optlist(stdout); return EX_OK; default: return usage(); } } if (optind != argc) return usage(); /* if there's a default config file readable, use it */ if (conffile == NULL && access(DEFCONFFILE, R_OK) == 0) conffile = DEFCONFFILE; if (conffile != NULL) { u_int line = 0; char *missing; char path[MAXPATHLEN + 1]; cfg = config_load(conffile, dmarcf_config, &line, path, sizeof path); if (cfg == NULL) { fprintf(stderr, "%s: %s: configuration error at line %u: %s\n", progname, path, line, config_error()); dmarcf_config_free(curconf); return EX_CONFIG; } #ifdef DEBUG (void) config_dump(cfg, stdout, NULL); #endif /* DEBUG */ missing = config_check(cfg, dmarcf_config); if (missing != NULL) { fprintf(stderr, "%s: %s: required parameter \"%s\" missing\n", progname, conffile, missing); config_free(cfg); dmarcf_config_free(curconf); return EX_CONFIG; } } if (dmarcf_config_load(cfg, curconf, err, sizeof err) != 0) { if (conffile == NULL) conffile = "(stdin)"; fprintf(stderr, "%s: %s: %s\n", progname, conffile, err); config_free(cfg); dmarcf_config_free(curconf); return EX_CONFIG; } if (configonly) { config_free(cfg); dmarcf_config_free(curconf); return EX_OK; } if (extract) { int ret = EX_OK; if (cfg != NULL) { if (!config_validname(dmarcf_config, extract)) ret = EX_DATAERR; else if (config_dump(cfg, stdout, extract) == 0) ret = EX_CONFIG; config_free(cfg); dmarcf_config_free(curconf); } return ret; } dolog = curconf->conf_dolog; curconf->conf_data = cfg; /* ** Use values found in the configuration file, if any. Note that ** these are operational parameters for the filter (e.g which socket ** to use which userid to become, etc.) and aren't reloaded upon a ** reload signal. Reloadable values are handled via the ** dmarcf_config_load() function, which has already been called. */ if (cfg != NULL) { if (!autorestart) { (void) config_get(cfg, "AutoRestart", &autorestart, sizeof autorestart); } if (autorestart) { char *rate = NULL; (void) config_get(cfg, "AutoRestartCount", &maxrestarts, sizeof maxrestarts); (void) config_get(cfg, "AutoRestartRate", &rate, sizeof rate); if (rate != NULL) { time_t t; char *q; p = strchr(rate, '/'); if (p == NULL) { fprintf(stderr, "%s: AutoRestartRate invalid\n", progname); config_free(cfg); return EX_CONFIG; } *p = '\0'; n = strtol(rate, &q, 10); if (n < 0 || *q != '\0') { fprintf(stderr, "%s: AutoRestartRate invalid\n", progname); config_free(cfg); return EX_CONFIG; } t = (time_t) strtoul(p + 1, &q, 10); switch (*q) { case 'd': case 'D': t *= 86400; break; case 'h': case 'H': t *= 3600; break; case 'm': case 'M': t *= 60; break; case '\0': case 's': case 'S': break; default: t = 0; break; } if (*q != '\0' && *(q + 1) != '\0') t = 0; if (t == 0) { fprintf(stderr, "%s: AutoRestartRate invalid\n", progname); config_free(cfg); return EX_CONFIG; } maxrestartrate_n = n; maxrestartrate_t = t; } } if (dofork) { (void) config_get(cfg, "Background", &dofork, sizeof dofork); } (void) config_get(cfg, "MilterDebug", &mdebug, sizeof mdebug); if (!gotp) { (void) config_get(cfg, "Socket", &sock, sizeof sock); if (sock != NULL) { gotp = TRUE; (void) smfi_setconn(sock); } } if (pidfile == NULL) { (void) config_get(cfg, "PidFile", &pidfile, sizeof pidfile); } (void) config_get(cfg, "UMask", &filemask, sizeof filemask); if (become == NULL) { (void) config_get(cfg, "Userid", &become, sizeof become); } (void) config_get(cfg, "ChangeRootDirectory", &chrootdir, sizeof chrootdir); (void) config_get(cfg, "IgnoreHosts", &ignorefile, sizeof ignorefile); } if (ignorefile != NULL) { if (!dmarcf_loadlist(ignorefile, &ignore)) { fprintf(stderr, "%s: can't load ignore list from %s: %s\n", progname, ignorefile, strerror(errno)); return EX_DATAERR; } } else if (!testmode) { dmarcf_addlist("127.0.0.1", &ignore); } if (!gotp && !testmode) { fprintf(stderr, "%s: milter socket must be specified\n", progname); if (argc == 1) fprintf(stderr, "\t(use \"-?\" for help)\n"); return EX_CONFIG; } /* suppress a bunch of things if we're in test mode */ if (testmode) { curconf->conf_dolog = FALSE; autorestart = FALSE; dofork = FALSE; become = NULL; pidfile = NULL; chrootdir = NULL; } dmarcf_setmaxfd(); /* prepare to change user if appropriate */ if (become != NULL) { char *colon; /* see if there was a group specified; if so, validate */ colon = strchr(become, ':'); if (colon != NULL) { *colon = '\0'; gr = getgrnam(colon + 1); if (gr == NULL) { char *q; gid = (gid_t) strtol(colon + 1, &q, 10); if (*q == '\0') gr = getgrgid(gid); if (gr == NULL) { if (curconf->conf_dolog) { syslog(LOG_ERR, "no such group or gid '%s'", colon + 1); } fprintf(stderr, "%s: no such group '%s'\n", progname, colon + 1); return EX_DATAERR; } } } /* validate the user */ pw = getpwnam(become); if (pw == NULL) { char *q; uid_t uid; uid = (uid_t) strtoul(become, &q, 10); if (*q == '\0') pw = getpwuid(uid); if (pw == NULL) { if (curconf->conf_dolog) { syslog(LOG_ERR, "no such user or uid '%s'", become); } fprintf(stderr, "%s: no such user '%s'\n", progname, become); return EX_DATAERR; } } if (gr == NULL) gid = pw->pw_gid; else gid = gr->gr_gid; } /* change root if requested */ if (chrootdir != NULL) { /* warn if doing so as root without then giving up root */ if (become == NULL && getuid() == 0) { if (curconf->conf_dolog) { syslog(LOG_WARNING, "using ChangeRootDirectory without Userid not advised"); } fprintf(stderr, "%s: use of ChangeRootDirectory without Userid not advised\n", progname); } /* change to the new root first */ if (chdir(chrootdir) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "%s: chdir(): %s", chrootdir, strerror(errno)); } fprintf(stderr, "%s: %s: chdir(): %s\n", progname, chrootdir, strerror(errno)); return EX_OSERR; } /* now change the root */ if (chroot(chrootdir) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "%s: chroot(): %s", chrootdir, strerror(errno)); } fprintf(stderr, "%s: %s: chroot(): %s\n", progname, chrootdir, strerror(errno)); return EX_OSERR; } } /* now enact the user change */ if (become != NULL) { /* make all the process changes */ if (getuid() != pw->pw_uid) { if (initgroups(pw->pw_name, gid) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "initgroups(): %s", strerror(errno)); } fprintf(stderr, "%s: initgroups(): %s\n", progname, strerror(errno)); return EX_NOPERM; } else if (setgid(gid) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "setgid(): %s", strerror(errno)); } fprintf(stderr, "%s: setgid(): %s\n", progname, strerror(errno)); return EX_NOPERM; } else if (setuid(pw->pw_uid) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "setuid(): %s", strerror(errno)); } fprintf(stderr, "%s: setuid(): %s\n", progname, strerror(errno)); return EX_NOPERM; } } (void) endpwent(); } else { } if (curconf->conf_enablecores) { _Bool enabled = FALSE; #ifdef __linux__ if (prctl(PR_SET_DUMPABLE, 1) == -1) { if (curconf->conf_dolog) { syslog(LOG_ERR, "prctl(): %s", strerror(errno)); } fprintf(stderr, "%s: prctl(): %s\n", progname, strerror(errno)); } else { enabled = TRUE; } #endif /* __linux__ */ if (!enabled) { if (curconf->conf_dolog) { syslog(LOG_WARNING, "can't enable coredumps; continuing"); } fprintf(stderr, "%s: can't enable coredumps; continuing\n", progname); } } die = FALSE; if (autorestart) { _Bool quitloop = FALSE; int restarts = 0; int status; pid_t pid; pid_t wpid; struct sigaction sa; if (dofork) { pid = fork(); switch (pid) { case -1: if (curconf->conf_dolog) { int saveerrno; saveerrno = errno; syslog(LOG_ERR, "fork(): %s", strerror(errno)); errno = saveerrno; } fprintf(stderr, "%s: fork(): %s\n", progname, strerror(errno)); return EX_OSERR; case 0: dmarcf_stdio(); break; default: return EX_OK; } } if (pidfile != NULL) { f = fopen(pidfile, "w"); if (f != NULL) { fprintf(f, "%ld\n", (long) getpid()); (void) fclose(f); } else { if (curconf->conf_dolog) { syslog(LOG_ERR, "can't write pid to %s: %s", pidfile, strerror(errno)); } } } sa.sa_handler = dmarcf_sighandler; sigemptyset(&sa.sa_mask); sigaddset(&sa.sa_mask, SIGHUP); sigaddset(&sa.sa_mask, SIGINT); sigaddset(&sa.sa_mask, SIGTERM); sigaddset(&sa.sa_mask, SIGUSR1); sa.sa_flags = 0; if (sigaction(SIGHUP, &sa, NULL) != 0 || sigaction(SIGINT, &sa, NULL) != 0 || sigaction(SIGTERM, &sa, NULL) != 0 || sigaction(SIGUSR1, &sa, NULL) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "[parent] sigaction(): %s", strerror(errno)); } } if (maxrestartrate_n > 0) dmarcf_restart_check(maxrestartrate_n, 0); while (!quitloop) { status = dmarcf_socket_cleanup(sock); if (status != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "[parent] socket cleanup failed: %s", strerror(status)); } return EX_UNAVAILABLE; } pid = fork(); switch (pid) { case -1: if (curconf->conf_dolog) { syslog(LOG_ERR, "fork(): %s", strerror(errno)); } return EX_OSERR; case 0: sa.sa_handler = SIG_DFL; if (sigaction(SIGHUP, &sa, NULL) != 0 || sigaction(SIGINT, &sa, NULL) != 0 || sigaction(SIGTERM, &sa, NULL) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "[child] sigaction(): %s", strerror(errno)); } } quitloop = TRUE; break; default: for (;;) { wpid = wait(&status); if (wpid == -1 && errno == EINTR) { if (die) { dmarcf_killchild(pid, diesig, curconf->conf_dolog); while (wpid != pid) wpid = wait(&status); if (pidfile != NULL) (void) unlink(pidfile); exit(EX_OK); } else if (reload) { dmarcf_killchild(pid, SIGUSR1, curconf->conf_dolog); reload = FALSE; continue; } } if (pid != wpid) continue; if (wpid != -1 && curconf->conf_dolog) { if (WIFSIGNALED(status)) { syslog(LOG_NOTICE, "terminated with signal %d, restarting", WTERMSIG(status)); } else if (WIFEXITED(status)) { if (WEXITSTATUS(status) == EX_CONFIG || WEXITSTATUS(status) == EX_SOFTWARE) { syslog(LOG_NOTICE, "exited with status %d", WEXITSTATUS(status)); quitloop = TRUE; } else { syslog(LOG_NOTICE, "exited with status %d, restarting", WEXITSTATUS(status)); } } } if (conffile != NULL) reload = TRUE; break; } break; } if (maxrestarts > 0 && restarts >= maxrestarts) { if (curconf->conf_dolog) { syslog(LOG_ERR, "maximum restart count exceeded"); } return EX_UNAVAILABLE; } if (maxrestartrate_n > 0 && maxrestartrate_t > 0 && !dmarcf_restart_check(0, maxrestartrate_t)) { if (curconf->conf_dolog) { syslog(LOG_ERR, "maximum restart rate exceeded"); } return EX_UNAVAILABLE; } restarts++; } } if (filemask != -1) (void) umask((mode_t) filemask); if (mdebug > 0) (void) smfi_setdbg(mdebug); if (!testmode) { /* try to clean up the socket */ status = dmarcf_socket_cleanup(sock); if (status != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "socket cleanup failed: %s", strerror(status)); } fprintf(stderr, "%s: socket cleanup failed: %s\n", progname, strerror(status)); if (!autorestart && pidfile != NULL) (void) unlink(pidfile); return EX_UNAVAILABLE; } smfilter.xxfi_flags = SMFIF_ADDHDRS|SMFIF_QUARANTINE; #ifdef SMFIF_SETSYMLIST smfilter.xxfi_flags |= SMFIF_SETSYMLIST; #endif /* SMFIF_SETSYMLIST */ /* register with the milter interface */ if (smfi_register(smfilter) == MI_FAILURE) { if (curconf->conf_dolog) syslog(LOG_ERR, "smfi_register() failed"); fprintf(stderr, "%s: smfi_register() failed\n", progname); if (!autorestart && pidfile != NULL) (void) unlink(pidfile); return EX_UNAVAILABLE; } #ifdef HAVE_SMFI_OPENSOCKET /* try to establish the milter socket */ if (smfi_opensocket(FALSE) == MI_FAILURE) { if (curconf->conf_dolog) syslog(LOG_ERR, "smfi_opensocket() failed"); fprintf(stderr, "%s: smfi_opensocket() failed\n", progname); return EX_UNAVAILABLE; } #endif /* HAVE_SMFI_OPENSOCKET */ } if (!autorestart && dofork) { pid_t pid; pid = fork(); switch (pid) { case -1: if (curconf->conf_dolog) { int saveerrno; saveerrno = errno; syslog(LOG_ERR, "fork(): %s", strerror(errno)); errno = saveerrno; } fprintf(stderr, "%s: fork(): %s\n", progname, strerror(errno)); return EX_OSERR; case 0: dmarcf_stdio(); break; default: return EX_OK; } } /* write out the pid */ if (!autorestart && pidfile != NULL) { f = fopen(pidfile, "w"); if (f != NULL) { fprintf(f, "%ld\n", (long) getpid()); (void) fclose(f); } else { if (curconf->conf_dolog) { syslog(LOG_ERR, "can't write pid to %s: %s", pidfile, strerror(errno)); } } } /* ** Block SIGUSR1 for use of our reload thread, and SIGHUP, SIGINT ** and SIGTERM for use of libmilter's signal handling thread. */ sigemptyset(&sigset); sigaddset(&sigset, SIGUSR1); sigaddset(&sigset, SIGHUP); sigaddset(&sigset, SIGTERM); sigaddset(&sigset, SIGINT); status = pthread_sigmask(SIG_BLOCK, &sigset, NULL); if (status != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "pthread_sigprocmask(): %s", strerror(status)); } fprintf(stderr, "%s: pthread_sigprocmask(): %s\n", progname, strerror(status)); return EX_OSERR; } pthread_mutex_init(&conf_lock, NULL); pthread_rwlock_init(&hash_lock, NULL); /* initialize libopendmarc */ (void) memset(&libopendmarc, '\0', sizeof libopendmarc); if (curconf->conf_pslist != NULL) { libopendmarc.tld_type = OPENDMARC_TLD_TYPE_MOZILLA; strncpy(libopendmarc.tld_source_file, curconf->conf_pslist, sizeof libopendmarc.tld_source_file - 1); } if (opendmarc_policy_library_init(&libopendmarc) != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "opendmarc_policy_library_init() failed"); } if (!autorestart && pidfile != NULL) (void) unlink(pidfile); return EX_OSERR; } /* figure out who I am */ if (pw == NULL) pw = getpwuid(getuid()); if (pw == NULL) myname = "postmaster"; else myname = pw->pw_name; /* perform test mode */ if (testfile != NULL) { status = dmarcf_testfiles(testfile, stricttest, verbose); return status; } if (curconf->conf_dolog) { memset(argstr, '\0', sizeof argstr); end = &argstr[sizeof argstr - 1]; n = sizeof argstr; for (c = 1, p = argstr; c < argc && p < end; c++) { if (strchr(argv[c], ' ') != NULL) { status = snprintf(p, n, "%s \"%s\"", c == 1 ? "args:" : "", argv[c]); } else { status = snprintf(p, n, "%s %s", c == 1 ? "args:" : "", argv[c]); } p += status; n -= status; } syslog(LOG_INFO, "%s v%s starting (%s)", DMARCF_PRODUCT, VERSION, argstr); memset(argstr, '\0', sizeof argstr); strlcpy(argstr, "(none)", sizeof argstr); n = sizeof argstr; for (c = 0; curconf->conf_trustedauthservids != NULL && curconf->conf_trustedauthservids[c] != NULL; c++) { if (c == 0) { strlcpy(argstr, curconf->conf_trustedauthservids[c], n); } else { strlcat(argstr, ", ", n); strlcat(argstr, curconf->conf_trustedauthservids[c], n); } } syslog(LOG_INFO, "additional trusted authentication services: %s", argstr); } /* spawn the SIGUSR1 handler */ status = pthread_create(&rt, NULL, dmarcf_reloader, NULL); if (status != 0) { if (curconf->conf_dolog) { syslog(LOG_ERR, "pthread_create(): %s", strerror(status)); } if (!autorestart && pidfile != NULL) (void) unlink(pidfile); return EX_OSERR; } /* call the milter mainline */ errno = 0; status = smfi_main(); /* shut down libopendmarc */ (void) opendmarc_policy_library_shutdown(&libopendmarc); if (curconf->conf_dolog) { syslog(LOG_INFO, "%s v%s terminating with status %d, errno = %d", DMARCF_PRODUCT, VERSION, status, errno); } /* release memory */ dmarcf_config_free(curconf); if (ignore != NULL) dmarcf_freelist(ignore); /* tell the reloader thread to die */ die = TRUE; (void) raise(SIGUSR1); if (!autorestart && pidfile != NULL) (void) unlink(pidfile); return status; } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc.conf.5.in000066400000000000000000000340611416002254500232540ustar00rootroot00000000000000.TH opendmarc.conf 5 "The Trusted Domain Project" .SH NAME .B opendmarc.conf \- Configuration file for opendmarc .SH LOCATION .I @SYSCONFDIR@/opendmarc.conf .SH DESCRIPTION .I opendmarc(8) implements the proposed .B DMARC specification for message authentication, policy enforcement, and reporting. This file is its configuration file. Blank lines are ignored. Lines containing a hash ("#") character are truncated at the hash character to allow for comments in the file. Other content should be the name of a parameter, followed by white space, followed by the value of that parameter, each on a separate line. For parameters that are Boolean in nature, only the first byte of the value is processed. For positive values, the following are accepted: "T", "t", "Y", "y", "1". For negative values, the following are accepted: "F", "f", "N", "n", "0". Some, but not all, of these parameters are also available as command line options to .I opendmarc(8). However, new parameters are generally not added as command line options so the complete set of options is available here, and thus use of the configuration file is encouraged. In some future release, the set of available command line options is likely to get trimmed. See the .I opendmarc(8) man page for details about how and when the configuration file contents are reloaded. Unless otherwise stated, Boolean values default to "false", integer values default to 0, and string and dataset values default to being undefined. .SH PARAMETERS .TP .I AuthservID (string) Sets the "authserv-id" to use when generating the Authentication-Results: header field after verifying a message. The default is to use the name of the MTA processing the message. If the string "HOSTNAME" is provided, the name of the host running the filter (as returned by the .I gethostname(3) function) will be used. .TP .I AuthservIDWithJobID (Boolean) If "true", requests that the authserv-id portion of the added Authentication-Results: header fields contain the job ID of the message being evaluated. .TP .I AutoRestart (Boolean) Automatically re-start on failures. Use with caution; if the filter fails instantly after it starts, this can cause a tight .I fork(2) loop. .TP .I AutoRestartCount (integer) Sets the maximum automatic restart count. After this number of automatic restarts, the filter will give up and terminate. A value of 0 implies no limit; this is the default. .TP .I AutoRestartRate (string) Sets the maximum automatic restart rate. If the filter begins restarting faster than the rate defined here, it will give up and terminate. This is a string of the form .I n/t[u] where .I n is an integer limiting the count of restarts in the given interval and .I t[u] defines the time interval through which the rate is calculated; .I t is an integer and .I u defines the units thus represented ("s" or "S" for seconds, the default; "m" or "M" for minutes; "h" or "H" for hours; "d" or "D" for days). For example, a value of "10/1h" limits the restarts to 10 in one hour. There is no default, meaning restart rate is not limited. .TP .I Background (Boolean) Causes .I opendmarc to fork and exits immediately, leaving the service running in the background. The default is "true". .TP .I BaseDirectory (string) If set, instructs the filter to change to the specified directory using .I chdir(2) before doing anything else. This means any files referenced elsewhere in the configuration file can be specified relative to this directory. It's also useful for arranging that any crash dumps will be saved to a specific location. .TP .I ChangeRootDirectory (string) Requests that the operating system change the effective root directory of the process to the one specified here prior to beginning execution. .B chroot (2) requires superuser access. A warning will be generated if .I UserID is not also set. .TP .I CopyFailuresTo (string) Adds the specified recipient to the message's envelope if it fails the DMARC evaluation. .TP .I DomainWhitelist (string) A brief list of whitelisted domains for which ARC signature headers are trusted as determined by evaluating entries in the "arc.chain" field found in a locally generated Authentication-Results header. This list will be concatenated with DomainWhitelistFile (if provided). .TP .I DomainWhitelistFile (string) A comprehensive list of whitelisted domains for which ARC signature headers are trusted as determined by evaluating entries in the "arc.chain" field found in a locally generated Authentication-Results header. This list will be concatenated with DomainWhitelist (if provided). .TP .I DomainWhitelistSize (integer) Sets the capacity of the whitelisted domains data structure. The value specifies the maximum number of entries including domains listed in the DomainWhitelist configuration parameter and the domains listed in the DomainWhiteListFile. The final size will be increased by approximately 20% to increase the efficiency of the hashing algorithm. .TP .I DNSTimeout (integer) Sets the DNS timeout in seconds. A value of 0 causes an infinite wait. The default is 5. Ignored if not using an asynchronous resolver package. .TP .I EnableCoredumps (Boolean) On systems that have such support, make an explicit request to the kernel to dump cores when the filter crashes for some reason. Some modern UNIX systems suppress core dumps during crashes for security reasons if the user ID has changed during the lifetime of the process. Currently only supported on Linux. .TP .I FailureReports (Boolean) Enables generation of failure reports when the DMARC test fails and the purported sender of the message has requested such reports. Reports are formatted per RFC6591. .TP .I FailureReportsBcc (string) When failure reports are enabled and one is to be generated, always send one to the address(es) specified here. If a failure report is requested by the domain owner, the address(es) are added in a Bcc: field. If no request is made, they address(es) are used in a To: field. There is no default. .TP .I FailureReportsOnNone (Boolean) Supplementary to the previous setting, enables generation of failure reports for sending domains that publish a "none" policy. .TP .I FailureReportsSentBy (string) Sets the value of the From: field to be used when sending failure reports (see above). The default is to use the userid of the user executing the filter and the local host name to construct an email address. .TP .I HistoryFile (string) If set, specifies the location of a text file to which records are written that can be used to generate DMARC aggregate reports. Records are batches of rows containing information about a single received message, and include all relevant information needed to generate a DMARC aggregate report. It is expected that this will not be used in its raw form, but rather periodically imported into a relational database from which the aggregate reports can be extracted using .B opendmarc-importstats(8). .TP .I HoldQuarantinedMessages (Boolean) If set, the milter will signal to the mta that messages with p=quarantine, which fail dmarc authentication, should be held in the MTA's "Hold" or "Quarantine" queue. The name varies by MTA. If false, messsages will be accepted and passed along with the regular mail flow, and the quarantine will be left up to downstream MTA/MDA/MUA filters, if any, to handle by re-evaluating the headers, including the Authentication-Results header added by this filter. The default is "false". .TP .I HoldQuarantinedMessages (Boolean) If set, the milter will signal to the mta that messages with p=quarantine, which fail dmarc authentication, should be held in the MTA's "Hold" or "Quarantine" queue. The name varies by MTA. If false, messsages will be accepted and passed along with the regular mail flow, and the quarantine will be left up to downstream MTA/MDA/MUA filters, if any, to handle by re-evaluating the headers, including the Authentication-Results header added by this filter. The default is "false". .TP .I IgnoreAuthenticatedClients (Boolean) If set, causes mail from authenticated clients (i.e., those that used SMTP AUTH) to be ignored by the filter. The default is "false". .TP .I IgnoreHosts (string) Specifies the path to a file that contains a list of hostnames, IP addresses, and/or CIDR expressions identifying hosts whose SMTP connections are to be ignored by the filter. If not specified, defaults to "127.0.0.1" only. .TP .I IgnoreMailFrom (string) Gives a list of domain names whose mail (based on the From: domain) is to be ignored by the filter. The list should be comma-separated. Matching against this list is case-insensitive. The default is an empty list, meaning no mail is ignored. .TP .I MilterDebug (integer) Sets the debug level to be requested from the milter library. The default is 0. .TP .I PidFile (string) Specifies the path to a file that should be created at process start containing the process ID. .TP .I PublicSuffixList (string) Specifies the path to a file that contains top-level domains (TLDs) that will be used to compute the Organizational Domain for a given domain name, as described in the DMARC specification. If not provided, the filter will not be able to determine the Organizational Domain and only the presented domain will be evaluated. This file should be periodically updated. One location to retrieve the file from is https://publicsuffix.org/list/ .TP .I RecordAllMessages (Boolean) If set and .I HistoryFile is in use, all received messages are recorded to the history file. If not set (the default), only messages for which the From: domain published a DMARC record will be recorded in the history file. .TP .I RejectFailures (Boolean) If set, messages will be rejected if they fail the DMARC evaluation, or temp-failed if evaluation could not be completed. By default, no message will be rejected or temp-failed regardless of the outcome of the DMARC evaluation of the message. Instead, an Authentication-Results header field will be added. The default is "false". .TP .I RejectMultiValueFrom (Boolean) If set, messages with multiple addresses in the From: field of the message will be rejected unless all domain names in that field are the same. They will otherwise be ignored by the filter (the default). .TP .I ReportCommand (string) Indicates the shell command to which failure reports should be passed for delivery when .I FailureReports is enabled. Defaults to .I /usr/sbin/sendmail. .TP .I RequiredHeaders (Boolean) If set, the filter will ensure the header of the message conforms to the basic header field count restrictions laid out in RFC5322, Section 3.6. Messages failing this test are rejected without further processing. A From: field from which no domain name could be extracted will also be rejected. .TP .I Socket (string) Specifies the socket that should be established by the filter to receive connections from .I sendmail(8) in order to provide service. .I socketspec is in one of two forms: .I local:path, which creates a UNIX domain socket at the specified .I path, or .I inet:port[@host] or .I inet6:port[@host] which creates a TCP socket on the specified .I port for the appropriate protocol family. If the .I host is not given as either a hostname or an IP address, the socket will be listening on all interfaces. This option is mandatory either in the configuration file or on the command line. If an IP address is used, it must be enclosed in square brackets. .TP .I SoftwareHeader (Boolean) Causes .I opendmarc to add a "DMARC-Filter" header field indicating the presence of this filter in the path of the message from injection to delivery. The product's name, version, and the job ID are included in the header field's contents. .TP .I SPFIgnoreResults (Boolean) Causes the filter to ignore any SPF results in the header of the message. This is useful if you want the filter to perform SPF checks itself, or because you don't trust the arriving header. The default is "false". .TP .I SPFSelfValidate (Boolean) Causes the filter to perform a fallback SPF check itself when it can find no SPF results in the message header. If SPFIgnoreResults is also set, it never looks for SPF results in headers and always performs the SPF check itself when this is set. The default is "false". .TP .I Syslog (Boolean) Log via calls to .I syslog(3) any interesting activity. .TP .I SyslogFacility (string) Log via calls to .I syslog(3) using the named facility. The facility names are the same as the ones allowed in .I syslog.conf(5). The default is "mail". .TP .I TrustedAuthservIDs (string) Provides a list of authserv-ids that are to be used to identify Authentication-Results header fields whose contents are to be assumed as valid input for the DMARC assessment. To provide a list, separate values by commas. If the string "HOSTNAME" is provided, the name of the host running the filter (as returned by the .I gethostname(3) function) will be used. Matching against this list is case-insensitive. The default is to use the value of .I AuthservID. .TP .I UMask (integer) Requests a specific permissions mask to be used for file creation. This only really applies to creation of the socket when .I Socket specifies a UNIX domain socket, and to the .I PidFile (if any); temporary files are created by the .I mkstemp(3) function that enforces a specific file mode on creation regardless of the process umask. See .I umask(2) for more information. .TP .I UserID (string) Attempts to become the specified userid before starting operations. The value is of the form .I userid[:group]. The process will be assigned all of the groups and primary group ID of the named .I userid unless an alternate .I group is specified. .SH FILES .TP .I @SYSCONFDIR@/opendmarc.conf Default location of this file. .SH VERSION This man page covers version @VERSION@ of .I opendmarc. .SH COPYRIGHT Copyright (c) 2012-2015, 2018, 2021, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I opendmarc(8), opendmarc-importstats(8), sendmail(8) .P RFC4408 \- Sender Policy Framework .P RFC5451 \- Message Header Field for Indicating Message Authentication Status .P RFC5965 \- An Extensible Format for Email Feedback Reports .P RFC6376 \- DomainKeys Identified Mail .P RFC6591 \- Authentication Failure Reporting Using the Abuse Reporting Format OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc.conf.sample000066400000000000000000000361631416002254500237710ustar00rootroot00000000000000## opendmarc.conf -- configuration file for OpenDMARC filter ## ## Copyright (c) 2012-2015, 2018, 2021, The Trusted Domain Project. ## All rights reserved. ## DEPRECATED CONFIGURATION OPTIONS ## ## The following configuration options are no longer valid. They should be ## removed from your existing configuration file to prevent potential issues. ## Failure to do so may result in opendmarc being unable to start. ## ## Renamed in 1.3.0: ## ForensicReports became FailureReports ## ForensicReportsBcc became FailureReportsBcc ## ForensicReportsOnNone became FailureReportsOnNone ## ForensicReportsSentBy became FailureReportsSentBy ## CONFIGURATION OPTIONS ## AuthservID (string) ## defaults to MTA name ## ## Sets the "authserv-id" to use when generating the Authentication-Results: ## header field after verifying a message. If the string "HOSTNAME" is ## provided, the name of the host running the filter (as returned by the ## gethostname(3) function) will be used. # # AuthservID name ## AuthservIDWithJobID { true | false } ## default "false" ## ## If "true", requests that the authserv-id portion of the added ## Authentication-Results header fields contain the job ID of the message ## being evaluated. # # AuthservIDWithJobID false ## AutoRestart { true | false } ## default "false" ## ## Automatically re-start on failures. Use with caution; if the filter fails ## instantly after it starts, this can cause a tight fork(2) loop. # # AutoRestart false ## AutoRestartCount n ## default 0 ## ## Sets the maximum automatic restart count. After this number of automatic ## restarts, the filter will give up and terminate. A value of 0 implies no ## limit. # # AutoRestartCount 0 ## AutoRestartRate n/t[u] ## default (no limit) ## ## Sets the maximum automatic restart rate. If the filter begins restarting ## faster than the rate defined here, it will give up and terminate. This ## is a string of the form n/t[u] where n is an integer limiting the count ## of restarts in the given interval and t[u] defines the time interval ## through which the rate is calculated; t is an integer and u defines the ## units thus represented ("s" or "S" for seconds, the default; "m" or "M" ## for minutes; "h" or "H" for hours; "d" or "D" for days). For example, a ## value of "10/1h" limits the restarts to 10 in one hour. There is no ## default, meaning restart rate is not limited. # # AutoRestartRate n/t[u] ## Background { true | false } ## default "true" ## ## Causes opendmarc to fork and exits immediately, leaving the service ## running in the background. # # Background true ## BaseDirectory (string) ## default (none) ## ## If set, instructs the filter to change to the specified directory using ## chdir(2) before doing anything else. This means any files referenced ## elsewhere in the configuration file can be specified relative to this ## directory. It's also useful for arranging that any crash dumps will be ## saved to a specific location. # # BaseDirectory /var/run/opendmarc ## ChangeRootDirectory (string) ## default (none) ## ## Requests that the operating system change the effective root directory of ## the process to the one specified here prior to beginning execution. ## chroot(2) requires superuser access. A warning will be generated if ## UserID is not also set. # # ChangeRootDirectory /var/chroot/opendmarc ## CopyFailuresTo (string) ## default (none) ## ## Requests addition of the specified email address to the envelope of ## any message that fails the DMARC evaluation. # # CopyFailuresTo postmaster@localhost ## DomainWhitelist (string) ## default (none) ## ## A brief list of whitelisted domains for which ARC signature headers are ## trusted as determined by evaluating entries in the "arc.chain" field found ## in a locally generated Authentication-Results header. ## ## This list will be concatenated with DomainWhitelistFile (if provided). ## # # DomainWhitelist example.com ## DomainWhitelistFile path ## default (none) ## ## A comprehensive list of whitelisted domains for which ARC signature headers ## are trusted as determined by evaluating entries in the "arc.chain" field ## found in a locally generated Authentication-Results header. ## ## This list will be concatenated with DomainWhitelist (if provided). ## # # DomainWhitelistFile /usr/local/etc/opendmarc/whitelist.domains ## DomainWhitelistSize ## default 3000 ## ## The maximum number of entries in the DomainWhitelist including both entries ## in the DomainWhitelist configuration parameter (above) and entries in the ## DomainWhitelistFile. This number will be increased by approximately 20% to ## increase the efficiency of the hashing algorithm. ## # # DomainWhitelistSize 3000 ## DNSTimeout (integer) ## default 5 ## ## Sets the DNS timeout in seconds. A value of 0 causes an infinite wait. ## (NOT YET IMPLEMENTED) # # DNSTimeout 5 ## EnableCoredumps { true | false } ## default "false" ## ## On systems that have such support, make an explicit request to the kernel ## to dump cores when the filter crashes for some reason. Some modern UNIX ## systems suppress core dumps during crashes for security reasons if the ## user ID has changed during the lifetime of the process. Currently only ## supported on Linux. # # EnableCoreDumps false ## FailureReports { true | false } ## default "false" ## ## Enables generation of failure reports when the DMARC test fails and the ## purported sender of the message has requested such reports. Reports are ## formatted per RFC6591. # # FailureReports false ## FailureReportsBcc (string) ## default (none) ## ## When failure reports are enabled and one is to be generated, always ## send one to the address(es) specified here. If a failure report is ## requested by the domain owner, the address(es) are added in a Bcc: field. ## If no request is made, they address(es) are used in a To: field. There ## is no default. # # FailureReportsBcc postmaster@example.coom ## FailureReportsOnNone { true | false } ## default "false" ## ## Supplements the "FailureReports" setting by generating reports for ## domains that advertise "none" policies. By default, reports are only ## generated (when enabled) for sending domains advertising a "quarantine" ## or "reject" policy. # # FailureReportsOnNone false ## FailureReportsSentBy string ## default "USER@HOSTNAME" ## ## Specifies the email address to use in the From: field of failure ## reports generated by the filter. The default is to use the userid of ## the user running the filter and the local hostname to construct an ## email address. "postmaster" is used in place of the userid if a name ## could not be determined. # # FailureReportsSentBy USER@HOSTNAME ## HistoryFile path ## default (none) ## ## If set, specifies the location of a text file to which records are written ## that can be used to generate DMARC aggregate reports. Records are groups ## of rows containing information about a single received message, and ## include all relevant information needed to generate a DMARC aggregate ## report. It is expected that this will not be used in its raw form, but ## rather periodically imported into a relational database from which the ## aggregate reports can be extracted by a tool such as opendmarc-import(8). # # HistoryFile /var/run/opendmarc.dat ## HoldQuarantinedMessages { true | false } ## default "false" ## ## If set, the milter will signal to the mta that messages with ## p=quarantine, which fail dmarc authentication, should be held in ## the MTA's "Hold" or "Quarantine" queue. The name varies by MTA. ## If false, messsages will be accepted and passed along with the ## regular mail flow, and the quarantine will be left up to downstream ## MTA/MDA/MUA filters, if any, to handle by re-evaluating the headers, ## including the Authentication-Results header added by OpenDMARC # # HoldQuarantinedMessages false ## IgnoreAuthenticatedClients { true | false } ## default "false" ## ## If set, causes mail from authenticated clients (i.e., those that used ## SMTP AUTH) to be ignored by the filter. # # IgnoreAuthenticatedClients false ## HoldQuarantinedMessages { true | false } ## default "false" ## ## If set, the milter will signal to the mta that messages with ## p=quarantine, which fail dmarc authentication, should be held in ## the MTA's "Hold" or "Quarantine" queue. The name varies by MTA. ## If false, messsages will be accepted and passed along with the ## regular mail flow, and the quarantine will be left up to downstream ## MTA/MDA/MUA filters, if any, to handle by re-evaluating the headers, ## including the Authentication-Results header added by OpenDMARC # # HoldQuarantinedMessages false ## IgnoreHosts path ## default (internal) ## ## Specifies the path to a file that contains a list of hostnames, IP ## addresses, and/or CIDR expressions identifying hosts whose SMTP ## connections are to be ignored by the filter. If not specified, defaults ## to "127.0.0.1" only. # # IgnoreHosts /usr/local/etc/opendmarc/ignore.hosts ## IgnoreMailFrom domain[,...] ## default (none) ## ## Gives a list of domain names whose mail (based on the From: domain) is to ## be ignored by the filter. The list should be comma-separated. Matching ## against this list is case-insensitive. The default is an empty list, ## meaning no mail is ignored. # # IgnoreMailFrom example.com ## MilterDebug (integer) ## default 0 ## ## Sets the debug level to be requested from the milter library. # # MilterDebug 0 ## PidFile path ## default (none) ## ## Specifies the path to a file that should be created at process start ## containing the process ID. # # PidFile /var/run/opendmarc.pid ## PublicSuffixList path ## default (none) ## ## Specifies the path to a file that contains top-level domains (TLDs) that ## will be used to compute the Organizational Domain for a given domain name, ## as described in the DMARC specification. If not provided, the filter will ## not be able to determine the Organizational Domain and only the presented ## domain will be evaluated. This file should be periodically updated. ## One location to retrieve the file from is https://publicsuffix.org/list/ # # PublicSuffixList path ## RecordAllMessages { true | false } ## default "false" ## ## If set and "HistoryFile" is in use, all received messages are recorded ## to the history file. If not set (the default), only messages for which ## the From: domain published a DMARC record will be recorded in the ## history file. # # RecordAllMessages false ## RejectFailures { true | false } ## default "false" ## ## If set, messages will be rejected if they fail the DMARC evaluation, or ## temp-failed if evaluation could not be completed. By default, no message ## will be rejected or temp-failed regardless of the outcome of the DMARC ## evaluation of the message. Instead, an Authentication-Results header ## field will be added. # # RejectFailures false ## RejectMultiValueFrom { true | false } ## default "false" ## ## If set, messages with multiple addresses in the From: field of the message ## will be rejected unless all domains in the field are the same. They will ## otherwise be ignored by the filter (the default). # # RejectMultiValueFrom false ## ReportCommand string ## default "/usr/sbin/sendmail -t" ## ## Indicates the shell command to which failure reports should be passed for ## delivery when "FailureReports" is enabled. # # ReportCommand /usr/sbin/sendmail -t ## RequiredHeaders { true | false } ## default "false" ## ## If set, the filter will ensure the header of the message conforms to the ## basic header field count restrictions laid out in RFC5322, Section 3.6. ## Messages failing this test are rejected without further processing. A ## From: field from which no domain name could be extracted will also be ## rejected. # # RequiredHeaders false ## Socket socketspec ## default (none) ## ## Specifies the socket that should be established by the filter to receive ## connections from sendmail(8) in order to provide service. socketspec is ## in one of two forms: local:path, which creates a UNIX domain socket at ## the specified path, or inet:port[@host] or inet6:port[@host] which creates ## a TCP socket on the specified port for the appropriate protocol family. ## If the host is not given as either a hostname or an IP address, the ## socket will be listening on all interfaces. This option is mandatory ## either in the configuration file or on the command line. If an IP ## address is used, it must be enclosed in square brackets. # # Socket inet:8893@localhost ## SoftwareHeader { true | false } ## default "false" ## ## Causes the filter to add a "DMARC-Filter" header field indicating the ## presence of this filter in the path of the message from injection to ## delivery. The product's name, version, and the job ID are included in ## the header field's contents. # # SoftwareHeader false ## SPFIgnoreResults { true | false } ## default "false" ## ## Causes the filter to ignore any SPF results in the header of the ## message. This is useful if you want the filter to perform SPF checks ## itself, or because you don't trust the arriving header. # # SPFIgnoreResults false ## SPFSelfValidate { true | false } ## default false ## ## Enable internal spf checking with --with-spf ## To use libspf2 instead: --with-spf --with-spf2-include=path --with-spf2-lib=path ## ## Causes the filter to perform a fallback SPF check itself when ## it can find no SPF results in the message header. If SPFIgnoreResults ## is also set, it never looks for SPF results in headers and ## always performs the SPF check itself when this is set. # # SPFSelfValidate false ## Syslog { true | false } ## default "false" ## ## Log via calls to syslog(3) any interesting activity. # # Syslog false ## SyslogFacility facility-name ## default "mail" ## ## Log via calls to syslog(3) using the named facility. The facility names ## are the same as the ones allowed in syslog.conf(5). # # SyslogFacility mail ## TrustedAuthservIDs string ## default HOSTNAME ## ## Specifies one or more "authserv-id" values to trust as relaying true ## upstream DKIM and SPF results. The default is to use the name of ## the MTA processing the message. To specify a list, separate each entry ## with a comma. The key word "HOSTNAME" will be replaced by the name of ## the host running the filter as reported by the gethostname(3) function. # # TrustedAuthservIDs HOSTNAME ## UMask mask ## default (none) ## ## Requests a specific permissions mask to be used for file creation. This ## only really applies to creation of the socket when Socket specifies a ## UNIX domain socket, and to the HistoryFile and PidFile (if any); temporary ## files are normally created by the mkstemp(3) function that enforces a ## specific file mode on creation regardless of the process umask. See ## umask(2) for more information. # # UMask 077 ## UserID user[:group] ## default (none) ## ## Attempts to become the specified userid before starting operations. ## The process will be assigned all of the groups and primary group ID of ## the named userid unless an alternate group is specified. # # UserID opendmarc OpenDMARC-rel-opendmarc-1-4-2/opendmarc/opendmarc.h000066400000000000000000000037241416002254500220100ustar00rootroot00000000000000/* ** Copyright (c) 2012, 2013, 2015, 2018, The Trusted Domain Project. ** All rights reserved. */ #ifndef _OPENDMARC_H_ #define _OPENDMARC_H_ #define DMARCF_PRODUCT "OpenDMARC Filter" #define DMARCF_PRODUCTNS "OpenDMARC-Filter" #include "build-config.h" /* system includes */ #include #ifdef HAVE_STDBOOL_H # include #endif /* HAVE_STDBOOL_H */ /* libmilter */ #include #include "dmarc.h" /* make sure we have TRUE and FALSE */ #ifndef FALSE # define FALSE 0 #endif /* !FALSE */ #ifndef TRUE # define TRUE 1 #endif /* !TRUE */ /* defaults, limits, etc. */ #define BUFRSZ 2048 #define DEFCONFFILE CONFIG_BASE "/opendmarc.conf" #define DEFREPORTCMD "/usr/sbin/sendmail -t -odq" #define JOBIDUNKNOWN "(unknown-jobid)" #define MAXARGV 65536 #define MAXHEADER 1024 #define TEMPFILE "/var/tmp/dmarcXXXXXX" #define AUTHRESULTSHDR "Authentication-Results" #define SWHEADERNAME "DMARC-Filter" #define DMARC_TEMPFAIL_SMTP "451" #define DMARC_TEMPFAIL_ESC "4.7.1" #define DMARC_REJECT_SMTP "550" #define DMARC_REJECT_ESC "5.7.1" #define DMARC_RESULT_REJECT 0 #define DMARC_RESULT_DISCARD 1 #define DMARC_RESULT_ACCEPT 2 #define DMARC_RESULT_TEMPFAIL 3 #define DMARC_RESULT_QUARANTINE 4 #define DMARC_ARC_POLICY_RESULT_PASS 0 #define DMARC_ARC_POLICY_RESULT_UNUSED 1 #define DMARC_ARC_POLICY_RESULT_FAIL 2 /* prototypes, etc., exported for test.c */ extern char *progname; extern sfsistat mlfi_connect __P((SMFICTX *, char *, _SOCK_ADDR *)); #ifdef WITH_SPF extern sfsistat mlfi_helo __P((SMFICTX *, char *)); #endif /* WITH_SPF */ extern sfsistat mlfi_envfrom __P((SMFICTX *, char **)); extern sfsistat mlfi_header __P((SMFICTX *, char *, char *)); extern sfsistat mlfi_eoh __P((SMFICTX *)); extern sfsistat mlfi_eom __P((SMFICTX *)); extern sfsistat mlfi_abort __P((SMFICTX *)); extern sfsistat mlfi_close __P((SMFICTX *)); #define MAX_OF(x, y) ((x) >= (y)) ? (x) : (y) #define MIN_OF(x, y) ((x) <= (y)) ? (x) : (y) #endif /* _OPENDMARC_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/parse.c000066400000000000000000000304461416002254500211460ustar00rootroot00000000000000/* ** Copyright (c) 2005, 2007, 2008 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009, 2010, 2012, 2021, The Trusted Domain Project. ** All rights reserved. */ /* system inludes */ #include #include #include #include #include #include /* opendmarc includes */ #include "util.h" #ifndef FALSE # define FALSE 0 #endif /* ! FALSE */ #ifndef TRUE # define TRUE 1 #endif /* ! TRUE */ /* types */ typedef unsigned long cmap_elem_type; /* symbolic names */ #define MAILPARSE_OK 0 /* success */ #define MAILPARSE_ERR_PUNBALANCED 1 /* unbalanced parentheses */ #define MAILPARSE_ERR_QUNBALANCED 2 /* unbalanced quotes */ #define MAILPARSE_ERR_SUNBALANCED 3 /* unbalanced sq. brackets */ #define MAILPARSE_ERR_MULTIVALUE 4 /* multiple possible values */ /* a bitmap for the "specials" character class */ #define CMAP_NBITS (sizeof(cmap_elem_type) * CHAR_BIT) #define CMAP_NELEMS ((1 + UCHAR_MAX) / CMAP_NBITS) #define CMAP_INDEX(i) ((unsigned char)(i) / CMAP_NBITS) #define CMAP_BIT(i) (1L << (unsigned char)(i) % CMAP_NBITS) #define CMAP_TST(ar, c) ((ar)[CMAP_INDEX(c)] & CMAP_BIT(c)) #define CMAP_SET(ar, c) ((ar)[CMAP_INDEX(c)] |= CMAP_BIT(c)) static unsigned char const SPECIALS[] = "<>@,;:\\\"/[]?="; #ifdef MAILPARSE_TEST /* ** DMARCF_MAIL_UNESCAPE -- remove escape characters from a string ** ** Parameters: ** s -- the string to be unescaped ** ** Return value: ** s. */ static char * dmarcf_mail_unescape(char *s) { char *w; char const *r, *p, *e; if (s == NULL) return NULL; r = w = s; e = s + strlen(s); while ((p = memchr(r, '\\', e - s)) != NULL) { if (p > s) { if (r != w) memmove(w, r, p - r); w += p - r; } if (p[1] == '\0') { r = p + 1; } else { *w++ = p[1]; r = p + 2; } } if (r > w) { if (e > r) { memmove(w, r, e - r); w += e - r; } *w = '\0'; } return s; } #endif /* MAILPARSE_TEST */ /* ** DMARCF_MAIL_MATCHING_PAREN -- return the location past matching opposite ** parentheses ** ** Parameters: ** s -- start of string to be processed ** e -- end of string to be processed ** open_paren -- open parenthesis character ** close_paren -- close parenthesis character ** ** Return value: ** Location of the final close parenthesis character in the string. ** For example, given "xxx((yyyy)zz)aaaa", would return the location ** of the second ")". There may be more beyond that, but at that point ** everything is balanced. */ static u_char * dmarcf_mail_matching_paren(u_char *s, u_char *e, int open_paren, int close_paren) { int paren = 1; for (; s < e; s++) { if (*s == close_paren) { if (--paren == 0) break; } else if (*s == open_paren) { paren++; } else if (*s == '\\') { if (s[1] != '\0') s++; } } return s; } /* ** DMARCF_FIRST_SPECIAL -- find the first "special" character ** ** Parameters: ** p -- input string ** e -- end of input string ** special_out -- pointer to the first special character found ** ** Return value: ** 0 on success, or an MAILPARSE_ERR_* on failure. */ static int dmarcf_mail_first_special(u_char *p, u_char *e, u_char **special_out) { size_t i; cmap_elem_type is_special[CMAP_NELEMS] = { 0 }; u_char *at_ptr = NULL; /* set up special finder */ for (i = 0; SPECIALS[i] != '\0'; i++) CMAP_SET(is_special, SPECIALS[i]); for (; p < e && *p != '\0'; p++) { /* skip white space between tokens */ while (p < e && (*p == '(' || (isascii(*p) && isspace(*p)))) { if (*p != '(') { p++; } else { p = dmarcf_mail_matching_paren(p + 1, e, '(', ')'); if (*p == '\0') return MAILPARSE_ERR_PUNBALANCED; else p++; } } if (*p == '\0') break; if (*p == '"') { p = dmarcf_mail_matching_paren(p + 1, e, '\0', '"'); if (*p == '\0') return MAILPARSE_ERR_QUNBALANCED; } else if (*p == '[') { p = dmarcf_mail_matching_paren(p + 1, e, '\0', ']'); if (*p == '\0') return MAILPARSE_ERR_SUNBALANCED; } else if (CMAP_TST(is_special, *p)) { if (*p == '<') { *special_out = p; return 0; } else if (*p == ':' || *p == ';' || *p == ',') { if (at_ptr != NULL) *special_out = at_ptr; else *special_out = p; return 0; } else if (*p == '@') { at_ptr = p; } } else { while (*p != '\0' && !CMAP_TST(is_special, *p) && (!isascii(*p) || !isspace((unsigned char) *p)) && *p != '(') p++; p--; } } *special_out = p; return 0; } /* ** DMARCF_MAIL_TOKEN -- find the next token ** ** Parameters: ** s -- start of input string ** e -- end of input string ** type_out -- type of token (returned) ** start_out -- start of token (returned) ** end_out -- start of token (returned) ** uncommented_whitespace -- set to TRUE if uncommented whitespace is ** discovered (returned) ** ** Return value: ** 0 on success, or an MAILPARSE_ERR_* on failure. */ static int dmarcf_mail_token(u_char *s, u_char *e, int *type_out, u_char **start_out, u_char **end_out, int *uncommented_whitespace) { u_char *p; int err = 0; size_t i; int token_type; cmap_elem_type is_special[CMAP_NELEMS] = { 0 }; u_char *token_start, *token_end; *start_out = NULL; *end_out = NULL; *type_out = 0; err = 0; /* set up special finder */ for (i = 0; SPECIALS[i] != '\0'; i++) CMAP_SET(is_special, SPECIALS[i]); p = s; /* skip white space between tokens */ while (p < e && (*p == '(' || (isascii((unsigned char) *p) && isspace((unsigned char) *p)))) { if (*p != '(') { *uncommented_whitespace = 1; p++; } else { p = dmarcf_mail_matching_paren(p + 1, e, '(', ')'); if (*p == '\0') return MAILPARSE_ERR_PUNBALANCED; else p++; } } if (p >= e || *p == '\0') return 0; /* our new token starts here */ token_start = p; /* fill in the token contents and type */ if (*p == '"') { token_end = dmarcf_mail_matching_paren(p + 1, e, '\0', '"'); token_type = '"'; if (*token_end != '\0') token_end++; else err = MAILPARSE_ERR_QUNBALANCED; } else if (*p == '[') { token_end = p = dmarcf_mail_matching_paren(p + 1, e, '\0', ']'); token_type = '['; if (*token_end != '\0') token_end++; else err = MAILPARSE_ERR_SUNBALANCED; } else if (CMAP_TST(is_special, *p)) { token_end = p + 1; token_type = *p; } else { while (p < e && *p != '\0' && !CMAP_TST(is_special, *p) && (!isascii(*p) || !isspace((unsigned char) *p)) && *p != '(') p++; token_end = p; token_type = 'x'; } *start_out = token_start; *end_out = token_end; *type_out = token_type; return err; } /* ** DMARCF_MAIL_PARSE -- extract the local-part and hostname from a mail ** header field, e.g. "From:" ** ** Parameters: ** line -- input line ** user_out -- pointer to "local-part" (returned) ** domain_out -- pointer to hostname (returned) ** ** Return value: ** 0 on success, or an MAILPARSE_ERR_* on failure. ** ** Notes: ** Input string is modified. */ int dmarcf_mail_parse(unsigned char *line, unsigned char **user_out, unsigned char **domain_out) { int type; int ws; int err; u_char *e, *special; u_char *tok_s, *tok_e; u_char *w; *user_out = NULL; *domain_out = NULL; err = 0; w = line; e = line + strlen((char *) line); ws = 0; for (;;) { err = dmarcf_mail_first_special(line, e, &special); if (err != 0) return err; /* given the construct we're looking at, do the right thing */ switch (*special) { case '<': /* display name
*/ line = special + 1; for (;;) { err = dmarcf_mail_token(line, e, &type, &tok_s, &tok_e, &ws); if (err != 0) return err; if (type == '>' || type == '\0') { *w = '\0'; return 0; } else if (type == '@') { *w++ = '\0'; *domain_out = w; } else if (type == ',' || type == ':') { /* source route punctuation */ *user_out = NULL; *domain_out = NULL; } else { if (*user_out == NULL) *user_out = w; memmove(w, tok_s, tok_e - tok_s); w += tok_e - tok_s; } line = tok_e; } case ';': case ':': case ',': /* skip a group name or result */ line = special + 1; break; default: /* (display name) addr(display name)ess */ ws = 0; for (;;) { err = dmarcf_mail_token(line, e, &type, &tok_s, &tok_e, &ws); if (err != 0) return err; if (type == '\0' || type == ',' || type == ';') { *w = '\0'; break; } else if (type == '@') { *w++ = '\0'; *domain_out = w; ws = 0; } else { if (*user_out == NULL) *user_out = w; else if (type == 'x' && ws == 1) *w++ = ' '; memmove(w, tok_s, tok_e - tok_s); w += tok_e - tok_s; ws = 0; } line = tok_e; } return 0; } } } /* ** DMARCF_MAIL_PARSE_MULTI -- extract the local-part and hostname from a mail ** header field that might contain multiple ** values, e.g. "To:", "Cc:" ** ** Parameters: ** line -- input line ** users_out -- array of pointers to "local-part" (returned) ** domains_out -- array of pointers to hostname (returned) ** out -- count of entries of the above arrays, not including the NULL ** ** Return value: ** 0 on success, or an DKIM_MAILPARSE_ERR_* on failure. ** ** Notes: ** Input string is modified. */ int dmarcf_mail_parse_multi(unsigned char *line, unsigned char ***users_out, unsigned char ***domains_out, unsigned int *out) { _Bool escaped = FALSE; _Bool quoted = FALSE; _Bool done = FALSE; int a = 0; unsigned int n = 0; int status; int parens = 0; char *p; char *addr; unsigned char **uout = NULL; unsigned char **dout = NULL; unsigned char *u; unsigned char *d; /* walk the input string looking for unenclosed commas */ addr = line; for (p = line; !done; p++) { if (escaped) { escaped = FALSE; continue; } switch (*p) { case '\\': escaped = TRUE; continue; case '"': quoted = !quoted; continue; case '(': parens++; continue; case ')': parens--; continue; case ',': /* skip it if it's quoted or in a comment */ if (parens != 0 || quoted) continue; /* FALLTHROUGH */ case '\0': if (*p == '\0') done = TRUE; else *p = '\0'; status = dmarcf_mail_parse(addr, &u, &d); if (status != 0) { if (uout != NULL) { free(uout); free(dout); } return status; } if (n == 0) { size_t newsize = 2 * sizeof(unsigned char *); uout = (unsigned char **) malloc(newsize); if (uout == NULL) return -1; dout = (unsigned char **) malloc(newsize); if (dout == NULL) { free(uout); return -1; } a = 2; } else if (n + 1 == a) { unsigned char **new; size_t newsize = a * 2 * sizeof(unsigned char *); new = (unsigned char **) realloc(uout, newsize); if (new == NULL) { free(uout); free(dout); return -1; } uout = new; new = (unsigned char **) realloc(dout, newsize); if (new == NULL) { free(uout); free(dout); return -1; } dout = new; a *= 2; } uout[n] = u; dout[n++] = d; uout[n] = (char *) NULL; dout[n] = (char *) NULL; addr = p + 1; break; default: break; } } *users_out = uout; *domains_out = dout; *out = n; return 0; } #ifdef MAILPARSE_TEST char *string_or_null(char *str) { if (str == (char *) NULL) return "null"; else return str; } int main(int argc, char **argv) { int err; unsigned char **domains, **users; if (argc != 2) { fprintf(stderr, "Usage: %s mailheader\n", argv[0]); exit(64); } err = dmarcf_mail_parse_multi(argv[1], &users, &domains); if (err) { printf("error %d\n", err); } else { int n; for (n = 0; domains[n] != (unsigned char *) NULL; n++) { printf("user: '%s'\ndomain: '%s'\n", string_or_null(users[n]), string_or_null(domains[n])); } } return 0; } #endif /* MAILPARSE_TEST */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/parse.h000066400000000000000000000013421416002254500211440ustar00rootroot00000000000000/* ** Copyright (c) 2004 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** Copyright (c) 2009, 2010, 2012, 2021, The Trusted Domain Project. ** All rights reserved. */ #ifndef _DMARCF_MAILPARSE_H_ #define _DMARCF_MAILPARSE_H_ #ifdef __STDC__ # ifndef __P # define __P(x) x # endif /* ! __P */ #else /* __STDC__ */ # ifndef __P # define __P(x) () # endif /* ! __P */ #endif /* __STDC__ */ /* prototypes */ extern int dmarcf_mail_parse __P((unsigned char *, unsigned char **, unsigned char **)); extern int dmarcf_mail_parse_multi __P((char *, unsigned char ***, unsigned char ***, unsigned int *)); #endif /* ! _DMARCF_MAILPARSE_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/test.c000066400000000000000000000320211416002254500210020ustar00rootroot00000000000000/* ** Copyright (c) 2012, 2014-2016, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" /* system includes */ #include #include #include #include #include #include #include #include #include #include #include #include #include /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* libmilter includes */ #include /* opendmarc includes */ #include "test.h" #include "opendmarc.h" /* local types and definitions*/ #define CRLF "\r\n" struct test_context { void * tc_priv; /* private data pointer */ }; char *milter_status[] = { "SMFIS_CONTINUE", "SMFIS_REJECT", "SMFIS_DISCARD", "SMFIS_ACCEPT", "SMFIS_TEMPFAIL" }; #define FCLOSE(x) if ((x) != stdin) \ fclose((x)); #define MLFI_OUTPUT(x,y) ((y) > 1 || ((y) == 1 && (x) != SMFIS_CONTINUE)) #define STRORNULL(x) ((x) == NULL ? "(null)" : (x)) /* globals */ static int tverbose = 0; /* ** DMARCF_TEST_ENVCHECK -- get environment variable or use default ** ** Parameters: ** evname -- environment variable name ** dflt -- default to apply ** ** Return value: ** Value of "evname" if set, otherwise "default". */ static char * dmarcf_test_envcheck(char *evname, char *dflt) { char *v; v = getenv(evname); return (v == NULL ? dflt : v); } /* ** DMARCF_TEST_SETPRIV -- store private pointer ** ** Parameters: ** ctx -- context pointer ** ptr -- pointer to store ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_setpriv(void *ctx, void *ptr) { struct test_context *tc; assert(ctx != NULL); tc = ctx; tc->tc_priv = ptr; return MI_SUCCESS; } /* ** DMARCF_TEST_GETPRIV -- retrieve private pointer ** ** Parameters: ** ctx -- context pointer ** ** Return value: ** The private pointer. */ void * dmarcf_test_getpriv(void *ctx) { struct test_context *tc; assert(ctx != NULL); tc = ctx; return tc->tc_priv; } /* ** DMARCF_TEST_PROGRESS -- send progress message ** ** Parameters: ** ctx -- context pointer ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_progress(void *ctx) { assert(ctx != NULL); if (tverbose > 1) fprintf(stdout, "### PROGRESS\n"); return MI_SUCCESS; } /* ** DMARCF_TEST_SETREPLY -- set reply to use ** ** Parameters: ** ctx -- context pointer ** rcode -- SMTP reply code ** xcode -- SMTP enhanced reply code ** replytxt -- SMTP reply text ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_setreply(void *ctx, char *rcode, char *xcode, char *replytxt) { assert(ctx != NULL); if (tverbose > 1) { fprintf(stdout, "### SETREPLY: rcode='%s' xcode='%s' replytxt='%s'\n", STRORNULL(rcode), STRORNULL(xcode), STRORNULL(replytxt)); } return MI_SUCCESS; } /* ** DMARCF_TEST_INSHEADER -- insert a header ** ** Parameters: ** ctx -- context pointer ** idx -- insertion index ** hname -- header name ** hvalue -- header value ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_insheader(void *ctx, int idx, char *hname, char *hvalue) { assert(ctx != NULL); if (tverbose > 1) { fprintf(stdout, "### INSHEADER: idx=%d hname='%s' hvalue='%s'\n", idx, STRORNULL(hname), STRORNULL(hvalue)); } return MI_SUCCESS; } /* ** DMARCF_TEST_CHGHEADER -- change a header ** ** Parameters: ** ctx -- context pointer ** hname -- header name ** idx -- header index ** hvalue -- header value ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_chgheader(void *ctx, char *hname, int idx, char *hvalue) { assert(ctx != NULL); if (tverbose > 1) { fprintf(stdout, "### CHGHEADER: hname='%s' idx=%d hvalue='%s'\n", STRORNULL(hname), idx, STRORNULL(hvalue)); } return MI_SUCCESS; } /* ** DMARCF_TEST_QUARANTINE -- request message quarantine ** ** Parameters: ** ctx -- context pointer ** reason -- reason string ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_quarantine(void *ctx, char *reason) { assert(ctx != NULL); if (tverbose > 1) { fprintf(stdout, "### QUARANTINE: reason='%s'\n", STRORNULL(reason)); } return MI_SUCCESS; } /* ** DMARCF_TEST_ADDHEADER -- append a header ** ** Parameters: ** ctx -- context pointer ** hname -- header name ** hvalue -- header value ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_addheader(void *ctx, char *hname, char *hvalue) { assert(ctx != NULL); if (tverbose > 1) { fprintf(stdout, "### ADDHEADER: hname='%s' hvalue='%s'\n", STRORNULL(hname), STRORNULL(hvalue)); } return MI_SUCCESS; } /* ** DMARCF_TEST_DELRCPT -- request recipient delete ** ** Parameters: ** ctx -- context pointer ** addr -- address ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_delrcpt(void *ctx, char *addr) { assert(ctx != NULL); assert(addr != NULL); if (tverbose > 1) fprintf(stdout, "### DELRCPT: '%s'\n", addr); return MI_SUCCESS; } /* ** DMARCF_TEST_ADDRCPT -- request recipient add ** ** Parameters: ** ctx -- context pointer ** addr -- address ** ** Return value: ** MI_SUCCESS */ int dmarcf_test_addrcpt(void *ctx, char *addr) { assert(ctx != NULL); assert(addr != NULL); if (tverbose > 1) fprintf(stdout, "### ADDRCPT: '%s'\n", addr); return MI_SUCCESS; } /* ** DMARCF_TEST_GETSYMVAL -- retrieve a symbol value ** ** Parameters: ** ctx -- context pointer ** sym -- symbol name ** ** Return value: ** Pointer to (static) string name. ** ** Note: ** This isn't thread-safe, but test mode is single-threaded anyway. ** This is also a memory leak, but it's a short-lived test program ** anyway. */ char * dmarcf_test_getsymval(void *ctx, char *sym) { static char symout[BUFRSZ]; assert(ctx != NULL); assert(sym != NULL); snprintf(symout, sizeof symout, "DEBUG-%s", sym); return strdup(symout); } /* ** DMARCF_TESTFILE -- read a message and test it ** ** Parameters: ** tctx -- test context handle ** file -- input file path ** strict -- strict CRLF mode? ** verbose -- verbose level ** ** Return value: ** An EX_* constant (see sysexits.h) */ static int dmarcf_testfile(struct test_context *tctx, FILE *f, char *file, _Bool strict, int tverbose) { bool inheaders = TRUE; int lineno = 0; int hslineno = 0; int c; char *p; sfsistat ms; char buf[BUFRSZ]; char line[BUFRSZ]; char *envfrom[2]; assert(tctx != NULL); assert(f != NULL); memset(buf, '\0', sizeof buf); memset(line, '\0', sizeof buf); envfrom[0] = dmarcf_test_envcheck("OPENDMARC_TEST_ENVFROM", ""); envfrom[1] = NULL; ms = mlfi_envfrom((SMFICTX *) tctx, envfrom); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: %s: mlfi_envfrom() returned %s\n", progname, file, milter_status[ms]); } if (ms != SMFIS_CONTINUE) return EX_SOFTWARE; while (!feof(f)) { if (fgets(line, sizeof line, f) == NULL) break; lineno++; c = '\0'; for (p = line; *p != '\0'; p++) { if (*p == '\n') { *p = '\0'; break; } c = *p; } if (c != '\r') { if (strict) /* error */ { fprintf(stderr, "%s: %s: line %d: not CRLF-terminated\n", progname, file, lineno); return EX_DATAERR; } } else if (p != line) /* eat the CR */ { *(p - 1) = '\0'; } if (inheaders) { if (line[0] == '\0') { if (buf[0] != '\0') { char *colon; colon = strchr(buf, ':'); if (colon == NULL) { fprintf(stderr, "%s: %s: line %d: header malformed\n", progname, file, lineno); return EX_DATAERR; } *colon = '\0'; if (*(colon + 1) == ' ') colon++; ms = mlfi_header((SMFICTX *) tctx, buf, colon + 1); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: %s: line %d: mlfi_header() returned %s\n", progname, file, hslineno, milter_status[ms]); } if (ms != SMFIS_CONTINUE) return EX_SOFTWARE; } inheaders = FALSE; memset(buf, '\0', sizeof buf); memset(line, '\0', sizeof buf); continue; } if (line[0] == ' ' || line[0] == '\t') { (void) strlcat(buf, CRLF, sizeof buf); if (strlcat(buf, line, sizeof buf) >= sizeof buf) { fprintf(stderr, "%s: %s: line %d: header '%*s...' too large\n", progname, file, lineno, 20, buf); return EX_DATAERR; } } else { if (buf[0] != '\0') { char *colon; colon = strchr(buf, ':'); if (colon == NULL) { fprintf(stderr, "%s: %s: line %d: header malformed\n", progname, file, lineno); return EX_DATAERR; } *colon = '\0'; if (*(colon + 1) == ' ') colon++; ms = mlfi_header((SMFICTX *) tctx, buf, colon + 1); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: %s: line %d: mlfi_header() returned %s\n", progname, file, hslineno, milter_status[ms]); } if (ms != SMFIS_CONTINUE) return EX_SOFTWARE; hslineno = 0; } if (hslineno == 0) hslineno = lineno; strlcpy(buf, line, sizeof buf); } } } /* unprocessed partial header? */ if (inheaders && buf[0] != '\0') { char *colon; colon = strchr(buf, ':'); if (colon == NULL) { fprintf(stderr, "%s: %s: line %d: header malformed\n", progname, file, lineno); return EX_DATAERR; } *colon = '\0'; if (*(colon + 1) == ' ') colon++; ms = mlfi_header((SMFICTX *) tctx, buf, colon + 1); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: %s: line %d: mlfi_header() returned %s\n", progname, file, lineno, milter_status[ms]); } if (ms != SMFIS_CONTINUE) return EX_SOFTWARE; inheaders = FALSE; memset(buf, '\0', sizeof buf); } /* no headers found */ if (inheaders) { fprintf(stderr, "%s: %s: warning: no headers on input\n", progname, file); } ms = mlfi_eom((SMFICTX *) tctx); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: %s: mlfi_eom() returned %s\n", progname, file, milter_status[ms]); } return EX_OK; } /* ** DMARCF_TESTFILES -- test one or more input messages ** ** Parameters: ** flist -- input file list ** strict -- strict CRLF mode? ** verbose -- verbose level ** ** Return value: ** An EX_* constant (see sysexits.h) */ int dmarcf_testfiles(char *flist, bool strict, int verbose) { char *file; char *ctx; char *addr; FILE *f; int status; int retval; sfsistat ms; struct test_context *tctx; struct sockaddr_in sin; struct addrinfo *ain; assert(flist != NULL); tverbose = verbose; /* set up a fake SMFICTX */ tctx = (struct test_context *) malloc(sizeof(struct test_context)); if (tctx == NULL) { fprintf(stderr, "%s: malloc(): %s\n", progname, strerror(errno)); return EX_OSERR; } tctx->tc_priv = NULL; (void) memset(&sin, '\0', sizeof sin); addr = dmarcf_test_envcheck("OPENDMARC_TEST_CLIENTIP", NULL); if (addr == NULL) { retval = getaddrinfo("127.0.0.1", NULL, NULL, &ain); } else { retval = getaddrinfo(addr, NULL, NULL, &ain); } if (retval != 0) { fprintf(stderr, "%s: getaddrinfo: %s\n", progname, gai_strerror(retval)); return EX_NOHOST; } ms = mlfi_connect((SMFICTX *) tctx, dmarcf_test_envcheck("OPENDMARC_TEST_CLIENTHOST", "localhost"), ain->ai_addr); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: mlfi_connect() returned %s\n", progname, milter_status[ms]); } if (ms != SMFIS_CONTINUE) return EX_SOFTWARE; #ifdef WITH_SPF ms = mlfi_helo((SMFICTX *) tctx, dmarcf_test_envcheck("OPENDMARC_TEST_HELOHOST", "localhost")); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: mlfi_helo() returned %s\n", progname, milter_status[ms]); } if (ms != SMFIS_CONTINUE) return EX_SOFTWARE; #endif /* WITH_SPF */ /* loop through inputs */ for (file = strtok_r(flist, ",", &ctx); file != NULL; file = strtok_r(NULL, ",", &ctx)) { /* open the input */ if (strcmp(file, "-") == 0) { f = stdin; file = "(stdin)"; } else { f = fopen(file, "r"); if (f == NULL) { fprintf(stderr, "%s: %s: fopen(): %s\n", progname, file, strerror(errno)); return EX_UNAVAILABLE; } } status = dmarcf_testfile(tctx, f, file, strict, tverbose); FCLOSE(f); if (status != EX_OK) return status; } ms = mlfi_close((SMFICTX *) tctx); if (MLFI_OUTPUT(ms, tverbose)) { fprintf(stderr, "%s: mlfi_close() returned %s\n", progname, milter_status[ms]); } return EX_OK; } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/test.h000066400000000000000000000020041416002254500210050ustar00rootroot00000000000000/* ** Copyright (c) 2012, The Trusted Domain Project. All rights reserved. */ #ifndef _TEST_H_ #define _TEST_H_ /* system includes */ #include #include /* libmilter includes */ #include /* libopendmarc includes */ #include "dmarc.h" /* PROTOTYPES */ extern int dmarcf_testfiles __P((char *, bool, int)); extern int dmarcf_test_addheader __P((void *, char *, char *)); extern int dmarcf_test_addrcpt __P((void *, char *)); extern int dmarcf_test_chgheader __P((void *, char *, int, char *)); extern int dmarcf_test_delrcpt __P((void *, char *)); extern void *dmarcf_test_getpriv __P((void *)); extern char *dmarcf_test_getsymval __P((void *, char *)); extern int dmarcf_test_insheader __P((void *, int, char *, char *)); extern int dmarcf_test_progress __P((void *)); extern int dmarcf_test_quarantine __P((void *, char *)); extern int dmarcf_test_setpriv __P((void *, void *)); extern int dmarcf_test_setreply __P((void *, char *, char *, char *)); #endif /* _TEST_H_ */ OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/000077500000000000000000000000001416002254500210235ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/Makefile.am000066400000000000000000000020071416002254500230560ustar00rootroot00000000000000# $Id: Makefile.am,v 1.30 2010/09/13 05:32:21 cm-msk Exp $ check_SCRIPTS = if LIVE_TESTS check_SCRIPTS += t-verify-multi-from-reject t-verify-multi-from-malformed \ t-verify-nodata t-verify-nodata-reject \ t-verify-unspec t-verify-received-spf-good t-verify-received-spf-bad \ t-verify-self-spf endif TESTS = $(check_SCRIPTS) EXTRA_DIST = \ t-verify-nodata t-verify-nodata.conf t-verify-nodata.lua \ t-verify-nodata-reject t-verify-nodata-reject.conf \ t-verify-nodata-reject.lua \ t-verify-unspec t-verify-unspec.conf t-verify-unspec.lua \ t-verify-received-spf-good t-verify-received-spf-good.conf \ t-verify-received-spf-good.lua \ t-verify-received-spf-bad t-verify-received-spf-bad.conf \ t-verify-received-spf-bad.lua \ t-verify-self-spf t-verify-self-spf.conf t-verify-self-spf.lua \ t-verify-multi-from-reject t-verify-multi-from-reject.conf \ t-verify-multi-from-reject.lua \ t-verify-multi-from-malformed t-verify-multi-from-malformed.conf \ t-verify-multi-from-malformed.lua MOSTLYCLEANFILES= OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-multi-from-malformed000077500000000000000000000003021416002254500265460ustar00rootroot00000000000000#!/bin/sh # # Test a multi-valued From field that's malformed to ensure we don't crash. # if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest -s $srcdir/t-verify-multi-from-malformed.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-multi-from-malformed.conf000066400000000000000000000000171416002254500274720ustar00rootroot00000000000000Background No OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-multi-from-malformed.lua000066400000000000000000000045471416002254500273420ustar00rootroot00000000000000-- Copyright (c) 2012, 2021, The Trusted Domain Project. All rights reserved. -- Test that a message with a malformed multi-valued From field doesn't crash -- the filter. mt.echo("*** multi-valued From test") -- setup sock = "unix:" .. mt.getcwd() .. "/t-verify-multi-from-malformed.sock" binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-l", "-c", "t-verify-multi-from-malformed.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.05) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost2", "127.0.0.2") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-multi-from-malformed") if mt.mailfrom(conn, "user@paypal.com") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "From", "user1@blackops.org, user2, user3@blackops.org") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_ACCEPT then error("mt.eom() unexpected reply") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-multi-from-reject000077500000000000000000000002251416002254500260600ustar00rootroot00000000000000#!/bin/sh # # Test a multi-valued From field. # if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest -s $srcdir/t-verify-multi-from-reject.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-multi-from-reject.conf000066400000000000000000000000501416002254500267750ustar00rootroot00000000000000Background No RejectMultiValueFrom Yes OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-multi-from-reject.lua000066400000000000000000000046251416002254500266450ustar00rootroot00000000000000-- Copyright (c) 2012, 2021, The Trusted Domain Project. All rights reserved. -- Test that a message with a multi-valued From field doesn't crash the -- filter, and is rejected because the domain names aren't the same. mt.echo("*** multi-valued From test") -- setup sock = "unix:" .. mt.getcwd() .. "/t-verify-multi-from-reject.sock" binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-l", "-c", "t-verify-multi-from-reject.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.05) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost2", "127.0.0.2") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-multi-from-reject") if mt.mailfrom(conn, "user@paypal.com") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "From", "user1@eleet.org, user2@blackops.org, user3@eleet.org") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_REJECT then error("mt.eom() unexpected reply") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-nodata000077500000000000000000000006411416002254500237630ustar00rootroot00000000000000#!/bin/sh # # Test a forged message from paypal.com with no SPF or DKIM data. # # As of 7/1/2012, paypal.com advertises a "p=reject" DMARC policy, so a message # with no SPF or DKIM data on it should be rejected. This version checks # for proper generation of an Authentication-Results field rather than outright # rejection. if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest -s $srcdir/t-verify-nodata.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-nodata-reject000077500000000000000000000006451416002254500252410ustar00rootroot00000000000000#!/bin/sh # # Test a forged message from paypal.com with no SPF or DKIM data. # # As of 7/1/2012, paypal.com advertises a "p=reject" DMARC policy, so a message # with no SPF or DKIM data on it should be rejected. This variant actually # does rejection, rather than testing Authentication-Results header field # generation. if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest -s $srcdir/t-verify-nodata-reject.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-nodata-reject.conf000066400000000000000000000001251416002254500261530ustar00rootroot00000000000000# paypal.com no data message test (should reject) Background No RejectFailures Yes OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-nodata-reject.lua000066400000000000000000000050551416002254500260160ustar00rootroot00000000000000-- Copyright (c) 2012, 2021, The Trusted Domain Project. All rights reserved. -- Test message from paypal.com with no DKIM or SPF DATA -- -- Confirms that a message with no authentication data claiming to be from a -- "p=reject" domain will provoke a rejection. This variant confirms a -- reject request from the filter rather than checking production of an -- Authentication-Results field. mt.echo("*** no data reject test (rejection)") -- setup sock = "unix:" .. mt.getcwd() .. "/t-verify-nodata-reject.sock" binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-l", "-c", "t-verify-nodata-reject.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.05) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost2", "127.0.0.2") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-nodata-reject") if mt.mailfrom(conn, "user@paypal.com") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "From", "user@paypal.com") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_REPLYCODE then error("mt.eom() unexpected reply") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-nodata.conf000066400000000000000000000001021416002254500246740ustar00rootroot00000000000000# paypal.com no data message test (should reject) Background No OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-nodata.lua000066400000000000000000000060631416002254500245440ustar00rootroot00000000000000-- Copyright (c) 2012, 2021, The Trusted Domain Project. All rights reserved. -- Test message from paypal.com with no DKIM or SPF DATA -- -- Confirms that a message with no authentication data claiming to be from a -- "p=reject" domain will provoke a rejection. This variant confirms failure -- by checking for an appropriate Authentication-Results field. mt.echo("*** no data reject test (Authentication-Results)") -- setup sock = "unix:" .. mt.getcwd() .. "/t-verify-nodata.sock" binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-l", "-c", "t-verify-nodata.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.05) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost2", "127.0.0.2") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-nodata") if mt.mailfrom(conn, "user@paypal.com") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "From", "user@paypal.com") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eom() unexpected reply") end -- verify that an Authentication-Results header field got added if not mt.eom_check(conn, MT_HDRINSERT, "Authentication-Results") and not mt.eom_check(conn, MT_HDRADD, "Authentication-Results") then error("no Authentication-Results added") end -- verify that a DMARC fail result was added n = 0 found = 0 while true do ar = mt.getheader(conn, "Authentication-Results", n) if ar == nil then break end if string.find(ar, "dmarc=fail", 1, true) ~= nil then found = 1 break end n = n + 1 end if found == 0 then error("incorrect DMARC result") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-received-spf-bad000077500000000000000000000005001416002254500256070ustar00rootroot00000000000000#!/bin/sh # # Test a message with a Received-SPF header that we can't trust # # DMARC only wants SPF results based on MAIL FROM. This is the positive # case where we have a Received-SPF that is definitely what we want. if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest -s $srcdir/t-verify-received-spf-bad.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-received-spf-bad.conf000066400000000000000000000000171416002254500265330ustar00rootroot00000000000000Background No OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-received-spf-bad.lua000066400000000000000000000063741416002254500264030ustar00rootroot00000000000000-- Copyright (c) 2021, The Trusted Domain Project. All rights reserved. -- Test message with a not-valid (the way DMARC wants it) Received-SPF field -- -- Confirms that a message with a Received-SPF field that indicates a "pass" -- but does not include "identity=mailfrom" and "envelope-from" with the -- right value will not be trusted. mt.echo("*** Received-SPF test (bad)") -- setup sock = "unix:" .. mt.getcwd() .. "/t-verify-received-spf-bad.sock" binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-l", "-c", "t-verify-received-spf-bad.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.05) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost2", "127.0.0.2") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-received-spf-bad") if mt.mailfrom(conn, "user@trusteddomain.org") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "Received-SPF", "pass") ~= nil then error("mt.header(Received-SPF) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Received-SPF) unexpected reply") end if mt.header(conn, "From", "user@trusteddomain.org") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_ACCEPT then error("mt.eom() unexpected reply") end -- verify that an Authentication-Results header field got added if not mt.eom_check(conn, MT_HDRINSERT, "Authentication-Results") and not mt.eom_check(conn, MT_HDRADD, "Authentication-Results") then error("no Authentication-Results added") end -- verify that a DMARC pass result was added n = 0 found = 0 while true do ar = mt.getheader(conn, "Authentication-Results", n) if ar == nil then break end if string.find(ar, "dmarc=fail", 1, true) ~= nil then found = 1 break end n = n + 1 end if found == 0 then error("incorrect DMARC result") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-received-spf-good000077500000000000000000000005061416002254500260170ustar00rootroot00000000000000#!/bin/sh # # Test a message with a Received-SPF header that appears trustworthy # # DMARC only wants SPF results based on MAIL FROM. This is the positive # case where we have a Received-SPF that is definitely what we want. if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest -s $srcdir/t-verify-received-spf-good.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-received-spf-good.conf000066400000000000000000000000171416002254500267350ustar00rootroot00000000000000Background No OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-received-spf-good.lua000066400000000000000000000066751416002254500266110ustar00rootroot00000000000000-- Copyright (c) 2021, The Trusted Domain Project. All rights reserved. -- Test message with a valid (the way DMARC wants it) Received-SPF field -- -- Confirms that a message with a Received-SPF field that indicates a "pass", -- includes "identity=mailfrom", and includes "envelope-from" with the -- right value, will be trusted. Also confirms that quoting inside -- Received-SPF is handled properly, and the local-part is not used as part -- of the comparison. mt.echo("*** Received-SPF test (good)") -- setup sock = "unix:" .. mt.getcwd() .. "/t-verify-received-spf-good.sock" binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-l", "-c", "t-verify-received-spf-good.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.05) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost2", "127.0.0.2") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-received-spf-good") if mt.mailfrom(conn, "user@trusteddomain.org") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "Received-SPF", "pass identity=mailfrom; envelope-from=\"somebody@trusteddomain.org\"") ~= nil then error("mt.header(Received-SPF) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Received-SPF) unexpected reply") end if mt.header(conn, "From", "user@trusteddomain.org") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_ACCEPT then error("mt.eom() unexpected reply") end -- verify that an Authentication-Results header field got added if not mt.eom_check(conn, MT_HDRINSERT, "Authentication-Results") and not mt.eom_check(conn, MT_HDRADD, "Authentication-Results") then error("no Authentication-Results added") end -- verify that a DMARC pass result was added n = 0 found = 0 while true do ar = mt.getheader(conn, "Authentication-Results", n) if ar == nil then break end if string.find(ar, "dmarc=pass", 1, true) ~= nil then found = 1 break end n = n + 1 end if found == 0 then error("incorrect DMARC result") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-self-spf000077500000000000000000000003371416002254500242360ustar00rootroot00000000000000#!/bin/sh # # Test a fake message using our internal SPF implementation. Confirm # the right Authentication-Results is generated. if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest -s $srcdir/t-verify-self-spf.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-self-spf.conf000066400000000000000000000000421416002254500251500ustar00rootroot00000000000000Background No SPFSelfValidate Yes OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-self-spf.lua000066400000000000000000000060551416002254500250160ustar00rootroot00000000000000-- Copyright (c) 2021, The Trusted Domain Project. All rights reserved. -- Test message from trusteddomain.org -- -- Confirms that a message purporting to be from trusteddomain.org -- with an unauthorized client IP address causes the right -- Authentication-Results field to be added. mt.echo("*** self-SPF test") -- setup sock = "unix:" .. mt.getcwd() .. "/t-verify-self-spf.sock" binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-l", "-c", "t-verify-self-spf.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.05) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost2", "66.220.149.251") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-self-spf") if mt.mailfrom(conn, "user@trusteddomain.org") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "From", "user@trusteddomain.org") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_ACCEPT then error("mt.eom() unexpected reply") end -- verify that an Authentication-Results header field got added if not mt.eom_check(conn, MT_HDRINSERT, "Authentication-Results") and not mt.eom_check(conn, MT_HDRADD, "Authentication-Results") then error("no Authentication-Results added") end -- verify that a DMARC fail result was added n = 0 found = 0 while true do ar = mt.getheader(conn, "Authentication-Results", n) if ar == nil then break end if string.find(ar, "spf=fail", 1, true) ~= nil and string.find(ar, "smtp.mailfrom=trusteddomain.org", 1, true) ~= nil then found = 1 end n = n + 1 end if found == 0 then error("malformed SPF result attached") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-unspec000077500000000000000000000002331416002254500240070ustar00rootroot00000000000000#!/bin/sh # # unspecified protocol family test if [ x"$srcdir" = x"" ] then srcdir=`pwd` fi miltertest $MILTERTESTFLAGS -s $srcdir/t-verify-unspec.lua OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-unspec.conf000066400000000000000000000000631416002254500247310ustar00rootroot00000000000000# unspecified protocol family test Background No OpenDMARC-rel-opendmarc-1-4-2/opendmarc/tests/t-verify-unspec.lua000066400000000000000000000056631416002254500246000ustar00rootroot00000000000000-- Copyright (c) 2009, 2010, 2012, 2013, The Trusted Domain Project. -- All rights reserved. -- unspecified protocol family test -- -- Confirms that an unspec message produces the correct result mt.echo("*** unspecified protocol family test") -- setup if TESTSOCKET ~= nil then sock = TESTSOCKET else sock = "unix:" .. mt.getcwd() .. "/t-verify-unspec.sock" end binpath = mt.getcwd() .. "/.." if os.getenv("srcdir") ~= nil then mt.chdir(os.getenv("srcdir")) end -- try to start the filter mt.startfilter(binpath .. "/opendmarc", "-c", "t-verify-unspec.conf", "-p", sock) -- try to connect to it conn = mt.connect(sock, 40, 0.25) if conn == nil then error("mt.connect() failed") end -- send connection information -- mt.negotiate() is called implicitly if mt.conninfo(conn, "localhost", "unspec") ~= nil then error("mt.conninfo() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.conninfo() unexpected reply") end -- send envelope macros and sender data -- mt.helo() is called implicitly mt.macro(conn, SMFIC_MAIL, "i", "t-verify-unspec") if mt.mailfrom(conn, "user@paypal.com") ~= nil then error("mt.mailfrom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.mailfrom() unexpected reply") end -- send headers -- mt.rcptto() is called implicitly if mt.header(conn, "From", "user@paypal.com") ~= nil then error("mt.header(From) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(From) unexpected reply") end if mt.header(conn, "To", "user@example.com") ~= nil then error("mt.header(To) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(To) unexpected reply") end if mt.header(conn, "Date", "Tue, 22 Dec 2009 13:04:12 -0800") ~= nil then error("mt.header(Date) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Date) unexpected reply") end if mt.header(conn, "Subject", "DMARC test") ~= nil then error("mt.header(Subject) failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.header(Subject) unexpected reply") end -- send EOH if mt.eoh(conn) ~= nil then error("mt.eoh() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eoh() unexpected reply") end -- end of message; let the filter react if mt.eom(conn) ~= nil then error("mt.eom() failed") end if mt.getreply(conn) ~= SMFIR_CONTINUE then error("mt.eom() unexpected reply") end -- verify that an Authentication-Results header field got added if not mt.eom_check(conn, MT_HDRINSERT, "Authentication-Results") and not mt.eom_check(conn, MT_HDRADD, "Authentication-Results") then error("no Authentication-Results added") end -- verify that a DMARC fail result was added n = 0 found = 0 while true do ar = mt.getheader(conn, "Authentication-Results", n) if ar == nil then break end if string.find(ar, "dmarc=fail", 1, true) ~= nil then found = 1 break end n = n + 1 end if found == 0 then error("incorrect DMARC result") end mt.disconnect(conn) OpenDMARC-rel-opendmarc-1-4-2/opendmarc/util.c000066400000000000000000000111561416002254500210060ustar00rootroot00000000000000/* ** Copyright (c) 2009-2012, 2014, The Trusted Domain Project. ** All rights reserved. */ #include "build-config.h" /* system includes */ #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_PATHS_H # include #endif /* HAVE_PATHS_H */ #ifndef _PATH_DEVNULL # define _PATH_DEVNULL "/dev/null" #endif /* ! _PATH_DEVNULL */ #ifdef SOLARIS # if SOLARIS <= 20600 # define socklen_t size_t # endif /* SOLARIS <= 20600 */ #endif /* SOLARIS */ #ifndef FALSE # define FALSE 0 #endif /* ! FALSE */ #ifndef TRUE # define TRUE 1 #endif /* ! TRUE */ /* libbsd if found */ #ifdef USE_BSD_H # include #endif /* USE_BSD_H */ /* libstrl if needed */ #ifdef USE_STRL_H # include #endif /* USE_STRL_H */ /* opendmarc_strl if needed */ #ifdef USE_DMARCSTRL_H # include #endif /* USE_DMARCSTRL_H */ /* opendmarc includes */ #include "util.h" static char *optlist[] = { #if DEBUG "DEBUG", #endif /* DEBUG */ #if POLL "POLL", #endif /* POLL */ #if WITH_SPF "WITH_SPF", #endif /* WITH_SPF */ #if HAVE_SPF2_H "WITH_SPF2", #endif /* HAVE_SPF2_H */ NULL }; /* ** DMARCF_OPTLIST -- print active options and FFRs ** ** Parameters: ** where -- where to write the list ** ** Return value: ** None. */ void dmarcf_optlist(FILE *where) { _Bool first = TRUE; int c; assert(where != NULL); for (c = 0; optlist[c] != NULL; c++) { if (first) { fprintf(where, "\tActive code options:\n"); first = FALSE; } fprintf(where, "\t\t%s\n", optlist[c]); } } /* ** DMARCF_SETMAXFD -- increase the file descriptor limit as much as possible ** ** Parameters: ** None. ** ** Return value: ** None. */ void dmarcf_setmaxfd(void) { struct rlimit rlp; if (getrlimit(RLIMIT_NOFILE, &rlp) != 0) { syslog(LOG_WARNING, "getrlimit(): %s", strerror(errno)); } else { rlp.rlim_cur = rlp.rlim_max; if (setrlimit(RLIMIT_NOFILE, &rlp) != 0) { syslog(LOG_WARNING, "setrlimit(): %s", strerror(errno)); } } } /* ** DMARCF_SOCKET_CLEANUP -- try to clean up the socket ** ** Parameters: ** sockspec -- socket specification ** ** Return value: ** 0 -- nothing to cleanup or cleanup successful ** other -- an error code (a la errno) */ int dmarcf_socket_cleanup(char *sockspec) { int s; char *colon; struct sockaddr_un sock; assert(sockspec != NULL); /* we only care about "local" or "unix" sockets */ colon = strchr(sockspec, ':'); if (colon != NULL) { if (strncasecmp(sockspec, "local:", 6) != 0 && strncasecmp(sockspec, "unix:", 5) != 0) return 0; } /* find the filename */ if (colon == NULL) { colon = sockspec; } else { if (*(colon + 1) == '\0') return EINVAL; } /* get a socket */ s = socket(PF_UNIX, SOCK_STREAM, 0); if (s == -1) return errno; /* set up a connection */ memset(&sock, '\0', sizeof sock); #ifdef BSD sock.sun_len = sizeof sock; #endif /* BSD */ sock.sun_family = PF_UNIX; strlcpy(sock.sun_path, colon + 1, sizeof sock.sun_path); /* try to connect */ if (connect(s, (struct sockaddr *) &sock, (socklen_t) sizeof sock) != 0) { /* if ECONNREFUSED, try to unlink */ if (errno == ECONNREFUSED) { close(s); if (unlink(sock.sun_path) == 0) return 0; else return errno; } /* if ENOENT, the socket's not there */ else if (errno == ENOENT) { close(s); return 0; } /* something else happened */ else { int saveerr; saveerr = errno; close(s); return saveerr; } } /* connection apparently succeeded */ close(s); return EADDRINUSE; } /* ** DMARCF_LOWERCASE -- lowercase-ize a string ** ** Parameters: ** str -- string to convert ** ** Return value: ** None. */ void dmarcf_lowercase(u_char *str) { u_char *p; assert(str != NULL); for (p = str; *p != '\0'; p++) { if (isascii(*p) && isupper(*p)) *p = tolower(*p); } } /* ** DMARCF_INET_NTOA -- thread-safe inet_ntoa() ** ** Parameters: ** a -- (struct in_addr) to be converted ** buf -- destination buffer ** buflen -- number of bytes at buf ** ** Return value: ** Size of the resultant string. If the result is greater than buflen, ** then buf does not contain the complete result. */ size_t dmarcf_inet_ntoa(struct in_addr a, char *buf, size_t buflen) { in_addr_t addr; assert(buf != NULL); addr = ntohl(a.s_addr); return snprintf(buf, buflen, "%d.%d.%d.%d", (addr >> 24), (addr >> 16) & 0xff, (addr >> 8) & 0xff, addr & 0xff); } OpenDMARC-rel-opendmarc-1-4-2/opendmarc/util.h000066400000000000000000000012231416002254500210050ustar00rootroot00000000000000/* ** Copyright (c) 2012, The Trusted Domain Project. All rights reserved. */ #ifndef _UTIL_H_ #define _UTIL_H_ /* system includes */ #include #include #include #ifdef __STDC__ # ifndef __P # define __P(x) x # endif /* ! __P */ #else /* __STDC__ */ # ifndef __P # define __P(x) () # endif /* ! __P */ #endif /* __STDC__ */ /* PROTOTYPES */ extern size_t dmarcf_inet_ntoa __P((struct in_addr, char *, size_t)); extern void dmarcf_lowercase __P((u_char *)); extern void dmarcf_optlist __P((FILE *)); extern void dmarcf_setmaxfd __P((void)); extern int dmarcf_socket_cleanup __P((char *)); #endif /* _UTIL_H_ */ OpenDMARC-rel-opendmarc-1-4-2/reports/000077500000000000000000000000001416002254500174075ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/reports/.gitignore000066400000000000000000000003031416002254500213730ustar00rootroot00000000000000*.orig *.rej Makefile.in opendmarc-expire opendmarc-expire.8 opendmarc-import opendmarc-import.8 opendmarc-params opendmarc-params.8 opendmarc-reports opendmarc-reports.8 opendmarc-importstats.8 OpenDMARC-rel-opendmarc-1-4-2/reports/Makefile.am000066400000000000000000000005671416002254500214530ustar00rootroot00000000000000# Copyright (c) 2012, 2013, 2016, The Trusted Domain Project. # All rights reserved. AUTOMAKE_OPTIONS = foreign dist_doc_DATA = README dist_sbin_SCRIPTS = opendmarc-expire opendmarc-import opendmarc-importstats \ opendmarc-params opendmarc-reports dist_man_MANS = opendmarc-expire.8 opendmarc-import.8 opendmarc-params.8 \ opendmarc-reports.8 opendmarc-importstats.8 OpenDMARC-rel-opendmarc-1-4-2/reports/README000066400000000000000000000047201416002254500202720ustar00rootroot00000000000000OPENDMARC REPORTS ================= This directory contains tools necessary to generate DMARC reports at regular intervals. It includes the following: opendmarc-expire perl script to expire old DMARC records from the database; meant to be run from cron opendmarc-expire.8 man page for the above opendmarc-import perl script to import opendmarc history files into the database; meant to be run from cron opendmarc-import.8 man page for the above opendmarc-params perl script to adjust domain-specific opendmarc data in the database opendmarc-params.8 man page for the above opendmarc-reports perl script to generate DMARC reports whenever it is run; meant to be run from cron opendmarc-reports.8 man page for the above The adjacent "db" directory contains an SQL schema to be used with this package. The opendmarc filter populates the tables in that schema as messages are received and DMARC policies evaluated. The scripts in here use the accumulated information to generate reports, and age out old data. To use schema.mysql, enter the MySQL command line tool, connect to the database in which you want to create the required tables, and type "source schema.mysql". DEPENDENCIES ============ The OpenDMARC reports package requires a recent installation of Perl (>= 5) and also the JSON module. The latter can be installed, in most cases, with the following command: sudo perl -MCPAN -e 'install JSON' On debian: sudo apt-get install libjson-perl SETUP ===== 1) From within the MySQL command line environment, "source schema.mysql" to create the required database and tables. You may also wish to set up users and access grants for users that will access this data. 2) Add a HistoryFile entry to opendmarc.conf referring to the location where per-message DMARC details should be recorded. This location should be readable and writable by the user running the filter, but nobody else. 3) Add a cron job that will use opendmarc-import to import the history file's contents at regular and fairly frequent intervals (each minute or at least every five minutes). The included opendmarc-importstats script might be useful here. Ensure the appropriate database access parameters (names, users, passwords) are set in the script. 4) Add a cron job that will run opendmarc-reports to generate and send the XML reports based on recent database entries. -- Copyright (c) 2012-2014, 2016-2018, The Trusted Domain Project. All rights reserved. OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-expire.8.in000066400000000000000000000026711416002254500233550ustar00rootroot00000000000000.TH opendmarc-expire 8 "The Trusted Domain Project" .SH NAME .B opendmarc-expire \- OpenDMARC history data expiration tool .SH SYNOPSIS .B opendmarc-expire [options] .SH DESCRIPTION .B opendmarc-expire expires old records from the database that is part of the OpenDMARC aggregate reporting feature. .SH OPTIONS .TP .I --alltables Expire records in all tables rather than only the large ones. .TP .I --dbhost=host Attempts to connect to the database server on the named .I host. The default is "localhost". .TP .I --dbname=name Requests a connection to the database called .I name. The default is "opendmarc". .TP .I --dbpasswd=password Attempts to authenticate to the database server using the specified .I password. The default is "opendmarc". .TP .I --dbport=port Tries to connect to the database at the specified TCP .I port. The default is 3306. .TP .I --dbuser=user Attempts to authenticate to the database server as the specified .I user. The default is "opendmarc". .TP .I --expire=days Indicates the number of days of data to keep. The default is 180. .TP .I --help Prints a usage message and exits. .TP .I --verbose Requests verbose output. .TP .I --version Prints version number and exits. .SH VERSION This man page covers the version of .I opendmarc-expire that shipped with version @VERSION@ of .I OpenDMARC. .SH COPYRIGHT Copyright (c) 2012, 2014, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I opendmarc(8), .I opendmarc-import(8) OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-expire.in000077500000000000000000000257421416002254500232160ustar00rootroot00000000000000#!/usr/bin/perl # # Copyright (c) 2010-2012, 2014-2016, 2018, The Trusted Domain Project. # All rights reserved. # # Script to age out OpenDMARC aggregate report data ### ### Setup ### use strict; use warnings; use DBI; use File::Basename; use Getopt::Long; use IO::Handle; use POSIX; require DBD::@SQL_BACKEND@; # general my $progname = basename($0); my $version = "@VERSION@"; my $verbose = 0; my $helponly = 0; my $showversion = 0; my $alltables = 0; my $minmsg; my $rowcount; my $dbi_s; my $dbi_h; my $dbi_a; # DB parameters my $def_dbhost = "localhost"; my $def_dbname = "opendmarc"; my $def_dbuser = "opendmarc"; my $def_dbpasswd = "opendmarc"; my $def_dbport = "3306"; my $dbhost; my $dbname; my $dbuser; my $dbpasswd; my $dbport; my $dbscheme = "@SQL_BACKEND@"; my $def_maxage = 180; my $rows; my $maxage; ### ### NO user-serviceable parts beyond this point ### sub usage { print STDERR "$progname: usage: $progname [options]\n"; print STDERR "\t--alltables expire rows from all tables\n"; print STDERR "\t--dbhost=host database host [$def_dbhost]\n"; print STDERR "\t--dbname=name database name [$def_dbname]\n"; print STDERR "\t--dbpasswd=passwd database password [$def_dbpasswd]\n"; print STDERR "\t--dbport=port database port [$def_dbport]\n"; print STDERR "\t--dbuser=user database user [$def_dbuser]\n"; print STDERR "\t--expire=days expiration time, in days [$def_maxage]\n"; print STDERR "\t--help print help and exit\n"; print STDERR "\t--verbose verbose output\n"; print STDERR "\t--version print version and exit\n"; } # parse command line arguments my $opt_retval = &Getopt::Long::GetOptions ('alltables!' => \$alltables, 'dbhost=s' => \$dbhost, 'dbname=s' => \$dbname, 'dbpasswd=s' => \$dbpasswd, 'dbport=s' => \$dbport, 'dbuser=s' => \$dbuser, 'expire=i' => \$maxage, 'help!' => \$helponly, 'verbose!' => \$verbose, 'version!' => \$showversion, ); if (!$opt_retval || $helponly) { usage(); if ($helponly) { exit(0); } else { exit(1); } } if ($showversion) { print STDOUT "$progname v$version\n"; exit(0); } # apply defaults if (!defined($dbhost)) { if (defined($ENV{'OPENDMARC_DBHOST'})) { $dbhost = $ENV{'OPENDMARC_DBHOST'}; } else { $dbhost = $def_dbhost; } } if (!defined($dbname)) { if (defined($ENV{'OPENDMARC_DB'})) { $dbname = $ENV{'OPENDMARC_DB'}; } else { $dbname = $def_dbname; } } if (!defined($dbpasswd)) { if (defined($ENV{'OPENDMARC_PASSWORD'})) { $dbpasswd = $ENV{'OPENDMARC_PASSWORD'}; } else { $dbpasswd = $def_dbpasswd; } } if (!defined($dbport)) { if (defined($ENV{'OPENDMARC_PORT'})) { $dbport = $ENV{'OPENDMARC_PORT'}; } else { $dbport = $def_dbport; } } if (!defined($dbuser)) { if (defined($ENV{'OPENDMARC_USER'})) { $dbuser = $ENV{'OPENDMARC_USER'}; } else { $dbuser = $def_dbuser; } } if (!defined($maxage)) { if (defined($ENV{'OPENDMARC_MAXAGE'})) { $maxage = $ENV{'OPENDMARC_MAXAGE'}; } else { $maxage = $def_maxage; } } # sanity check if ($maxage <= 0) { print STDERR "$progname: invalid expiration time\n"; exit(1); } # # Let's go! # if ($verbose) { print STDERR "$progname: started at " . localtime() . "\n"; } my $dbi_dsn = "DBI:" . $dbscheme . ":database=" . $dbname . ";host=" . $dbhost . ";port=" . $dbport; $dbi_h = DBI->connect($dbi_dsn, $dbuser, $dbpasswd, { PrintError => 0 }); if (!defined($dbi_h)) { print STDERR "$progname: unable to connect to database: $DBI::errstr\n"; exit(1); } if ($verbose) { print STDERR "$progname: connected to database\n"; } # # Expire messages # if ($verbose) { print STDERR "$progname: expiring messages older than $maxage day(s)\n"; } $dbi_s = $dbi_h->prepare("DELETE FROM messages WHERE date <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL ? DAY)"); $rows = $dbi_s->execute($maxage); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } $dbi_s->finish; # # Expire signatures # $dbi_s = $dbi_h->prepare("SELECT MIN(id) FROM messages"); if (!$dbi_s->execute) { print STDERR "$progname: SELECT failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } while ($dbi_a = $dbi_s->fetchrow_arrayref()) { $minmsg = $dbi_a->[0]; } # # We might have emptied the messages table # $dbi_s->finish; if (!defined($minmsg)) { $dbi_s = $dbi_h->prepare("SELECT COUNT(id) FROM messages"); if (!$dbi_s->execute) { print STDERR "$progname: SELECT failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } while ($dbi_a = $dbi_s->fetchrow_arrayref()) { $rowcount = $dbi_a->[0]; } $dbi_s->finish; if (defined($rowcount) && $rowcount == 0) { $dbi_s = $dbi_h->prepare("TRUNCATE TABLE signatures"); if (!$dbi_s->execute) { print STDERR "$progname: TRUNCATE failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } $dbi_s->finish; $dbi_s = $dbi_h->prepare("TRUNCATE TABLE arcauthresults"); if (!$dbi_s->execute) { print STDERR "$progname: TRUNCATE failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } $dbi_s->finish; $dbi_s = $dbi_h->prepare("TRUNCATE TABLE arcseals"); if (!$dbi_s->execute) { print STDERR "$progname: TRUNCATE failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } $dbi_s->finish; } $dbi_h->disconnect; exit(1); } else { if ($verbose) { print STDERR "$progname: expiring signatures on expired messages (id < $minmsg)\n"; } $dbi_s = $dbi_h->prepare("DELETE FROM signatures WHERE message < ?"); $rows = $dbi_s->execute($minmsg); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } $dbi_s->finish; if ($verbose) { print STDERR "$progname: expiring arcauthresults on expired messages (id < $minmsg)\n"; } $dbi_s = $dbi_h->prepare("DELETE FROM arcauthresults WHERE message < ?"); $rows = $dbi_s->execute($minmsg); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } if ($verbose) { print STDERR "$progname: expiring arcseals on expired messages (id < $minmsg)\n"; } $dbi_s = $dbi_h->prepare("DELETE FROM arcseals WHERE message < ?"); $rows = $dbi_s->execute($minmsg); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } } # # Expire request data # if ($verbose) { print STDERR "$progname: expiring request data older than $maxage days\n"; } $dbi_s = $dbi_h->prepare("DELETE FROM requests WHERE lastsent <= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL ? DAY) AND NOT lastsent = '0000-00-00 00:00:00'"); $rows = $dbi_s->execute($maxage); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } $dbi_s->finish; if ($alltables) { if ($verbose) { print STDERR "$progname: expiring unneeded selector data\n"; } $dbi_s = $dbi_h->prepare(q{ DELETE FROM selectors WHERE id NOT IN (SELECT DISTINCT selector FROM signatures) AND id NOT IN (SELECT DISTINCT selector FROM arcseals) }); $rows = $dbi_s->execute(); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } if ($verbose) { print STDERR "$progname: expiring unneeded domain data\n"; } $dbi_s = $dbi_h->prepare(q{ DELETE FROM domains WHERE id NOT IN (SELECT DISTINCT domain FROM requests) AND id NOT IN (SELECT DISTINCT from_domain FROM messages) AND id NOT IN (SELECT DISTINCT env_domain FROM messages) AND id NOT IN (SELECT DISTINCT policy_domain FROM messages) AND id NOT IN (SELECT DISTINCT domain FROM signatures) AND id NOT IN (SELECT DISTINCT domain FROM arcseals) }); $rows = $dbi_s->execute(); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } if ($verbose) { print STDERR "$progname: expiring unneeded IP data\n"; } $dbi_s = $dbi_h->prepare("DELETE FROM ipaddr WHERE id NOT IN (SELECT DISTINCT ip FROM messages)"); $rows = $dbi_s->execute(); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } if ($verbose) { print STDERR "$progname: expiring unneeded reporter data\n"; } $dbi_s = $dbi_h->prepare("DELETE FROM reporters WHERE id NOT IN (SELECT DISTINCT reporter FROM messages)"); $rows = $dbi_s->execute(); if (!$rows) { print STDERR "$progname: DELETE failed: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } elsif ($verbose) { if ($rows eq "0E0") { print STDOUT "$progname: no rows deleted\n"; } else { print STDOUT "$progname: $rows row(s) deleted\n"; } } } # # All done! # if ($verbose) { print STDERR "$progname: terminating at " . localtime() . "\n"; } $dbi_h->disconnect; exit(0); OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-import.8.in000066400000000000000000000036561416002254500233770ustar00rootroot00000000000000.TH opendmarc-import 8 "The Trusted Domain Project" .SH NAME .B opendmarc-import \- OpenDMARC aggregate report data import tool .SH SYNOPSIS .B opendmarc-import [options] .SH DESCRIPTION .B opendmarc-import reads per-message data recorded by an instance of .B opendmarc(8) and inserts it into an SQL database, for later use by .B opendmarc-reports(8) to generate aggregate reports. .SH OPTIONS .TP .I --dbhost=hostname Specifies the hostname on which the SQL server is running. Defaults to the value of the environment variable OPENDMARC_DBHOST, or "localhost" if the environment variable is not set. .TP .I --dbname=name Specifies the SQL database name to be accessed. Defaults to the value of the environment variable OPENDMARC_DB, or "opendmarc" if the environment variable is not set. .TP .I --dbpasswd=password Specifies the password for the SQL database to be accessed. Defaults to the value of the environment variable OPENDMARC_PASSWORD, or "opendmarc" if the environment variable is not set. .TP .I --dbport=port Specifies the TCP port on which the SQL server is expected to be listening. Defaults to the value of the environment variable OPENDMARC_PORT, or 3306 if the environment variable is not set. .TP .I --dbuser=user Specifies the SQL user to be used to access the database. Defaults to the value of the environment variable OPENDMARC_USER, or "opendmarc" if the environment variable is not set. .TP .I --help Prints a help message and terminates. .TP .I --input=file Reads from the named file instead of from standard input (the default). .TP .I --verbose Increase the amount of verbosity written to standard output. .TP .I --version Print version number and exit. .SH VERSION This man page covers the version of .I opendmarc-import that shipped with version @VERSION@ of .I OpenDMARC. .SH COPYRIGHT Copyright (c) 2012, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I opendmarc(8), .I opendmarc.conf(5) .I opendmarc-reports(8) OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-import.in000077500000000000000000000347111416002254500232300ustar00rootroot00000000000000#!/usr/bin/perl # # Copyright (c) 2012, 2014, 2018, The Trusted Domain Project. All rights reserved. # # Script to import per-message DMARC data. ### ### Setup ### use strict; use warnings; use Switch; use DBI; use File::Basename; use Fcntl qw(:flock); use Getopt::Long; use POSIX; use JSON; require DBD::@SQL_BACKEND@; # general my $progname = basename($0); my $version = "@VERSION@"; my $verbose = 0; my $helponly = 0; my $showversion = 0; # DB parameters my $def_dbhost = "localhost"; my $def_dbname = "opendmarc"; my $def_dbuser = "opendmarc"; my $def_dbpasswd = "opendmarc"; my $def_dbport = "3306"; my $def_interval = "86400"; my $def_inputfh = *STDIN; my $dbhost; my $dbname; my $dbuser; my $dbpasswd; my $dbport; my $inputfile; my $inputfh; my $dbscheme = "@SQL_BACKEND@"; my $dbi_a; my $dbi_h; my $dbi_s; my $dbi_t; my $lineno; my $key; my $value; my $data; my @serialized_data; my $action; my $adkim; my $align_dkim; my $align_spf; my $aspf; my $dkim_align; my @dkim_data; my $dkim_domain; my $dkim_selector; my $dkim_result; my $arc; my $arc_policy; my @arc_policy_data; my $envdomain; my $fdomain; my $ipaddr; my $jobid; my $p; my $pct; my $pdomain; my $policy; my $received; my $reporter; my $repuri; my $sigcount = 0; my $sp; my $spf; my @rua; ### ### NO user-serviceable parts beyond this point ### sub get_value { my $table; my $column; my $id; my $out; ($table, $column, $id) = @_; $dbi_t = $dbi_h->prepare("SELECT $column FROM $table WHERE id = ?"); if (!$dbi_t->execute($id)) { print STDERR "$progname: failed to $column value for ID $id: " . $dbi_h->errstr . "\n"; return undef; } while ($dbi_a = $dbi_t->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $out = $dbi_a->[0]; } } return $out; } sub get_table_id { my $name; my $table; my $column; my $fkey_column; my $fkey_value; my $out; my $query; my @query_params; ($name, $table, $column, $fkey_column, $fkey_value) = @_; if ((!defined($name) || $name eq '-') || !defined($table)) { return undef; } if (!defined($column) || length($column) == 0) { $column = "name"; } @query_params = ($name); $query = "SELECT id FROM $table WHERE $column = ?"; if (defined($fkey_column) && defined($fkey_value)) { $query = $query . " AND $fkey_column = ?"; push(@query_params, $fkey_value); } $dbi_t = $dbi_h->prepare($query); if (!$dbi_t->execute(@query_params)) { print STDERR "$progname: failed to retrieve table ID: " . $dbi_h->errstr . "\n"; return undef; } undef $out; while ($dbi_a = $dbi_t->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $out = $dbi_a->[0]; } } $dbi_t->finish; if (!defined($out)) { @query_params = ($name); $query = "INSERT INTO $table ($column) VALUES(?)"; if (defined($fkey_column) && defined($fkey_value)) { $query = "INSERT INTO $table ($column, $fkey_column) VALUES(?, ?)"; push(@query_params, $fkey_value); } $dbi_t = $dbi_h->prepare($query); if (!$dbi_t->execute(@query_params)) { print STDERR "$progname: failed to create table ID: " . $dbi_h->errstr . "\n"; return undef; } $dbi_t = $dbi_h->prepare("SELECT LAST_INSERT_ID()"); if (!$dbi_t->execute()) { print STDERR "$progname: failed to retrieve created table ID: " . $dbi_h->errstr . "\n"; return undef; } while ($dbi_a = $dbi_t->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $out = $dbi_a->[0]; } } $dbi_t->finish; if (!defined($out)) { print STDERR "$progname: failed to retrieve created table ID: " . $dbi_h->errstr . "\n"; return undef; } } return $out; } sub update_db { my $rep_id; my $from_id; my $envfrom_id; my $pdomain_id; my $ipaddr_id; my $msg_id; my $sdomain_id; my $selector_id; my $request_id; if ($verbose) { print STDERR "$progname: updating at line $lineno\n"; } $rep_id = get_table_id($reporter, "reporters"); $from_id = get_table_id($fdomain, "domains"); $envfrom_id = get_table_id($envdomain, "domains"); $pdomain_id = get_table_id($pdomain, "domains"); $ipaddr_id = get_table_id($ipaddr, "ipaddr", "addr"); $request_id = get_table_id($from_id, "requests", "domain"); if (!defined($rep_id) || !defined($from_id) || !defined($envfrom_id) || !defined($pdomain_id) || !defined($ipaddr_id) || !defined($request_id)) { return; } $dbi_s = $dbi_h->prepare(q{ INSERT INTO messages( date, jobid, reporter, policy, disp, ip, env_domain, from_domain, policy_domain, spf, align_spf, align_dkim, sigcount, arc, arc_policy ) VALUES( FROM_UNIXTIME(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) }); if (!$dbi_s->execute( $received, $jobid, $rep_id, $policy, $action, $ipaddr_id, $envfrom_id, $from_id, $pdomain_id, $spf, $align_spf, $align_dkim, $sigcount, $arc, $arc_policy )) { print STDERR "$progname: failed to insert message: " . $dbi_h->errstr . "\n"; return; } $dbi_s->finish; undef $msg_id; $dbi_s = $dbi_h->prepare("SELECT LAST_INSERT_ID()"); if (!$dbi_s->execute()) { print STDERR "$progname: failed to retrieve message ID: " . $dbi_h->errstr . "\n"; return; } while ($dbi_a = $dbi_s->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $msg_id = $dbi_a->[0]; } } $dbi_s->finish; if (!defined($msg_id)) { print STDERR "$progname: failed to retrieve message ID: " . $dbi_h->errstr . "\n"; return; } $dbi_s = $dbi_h->prepare("INSERT INTO signatures (message, domain, selector, pass, error) VALUES(?, ?, ?, ?, ?)"); foreach my $dd (0 .. $#dkim_data) { my $sdomain; my $sdomain_id; my $selector; my $selector_id; my $pass; my $error; $sdomain = $dkim_data[$dd][0]; $selector = $dkim_data[$dd][1]; $pass = $dkim_data[$dd][2]; $error = $dkim_data[$dd][3]; $sdomain_id = get_table_id($sdomain, "domains"); if (!defined($sdomain_id)) { next; } # fetch selector_id or insert into table $selector_id = get_table_id($selector, "selectors", "", "domain", $sdomain_id) || 0; if (!$dbi_s->execute($msg_id, $sdomain_id, $selector_id, $pass, $error)) { print STDERR "$progname: failed to insert DKIM data: " . $dbi_h->errstr . "\n"; $dbi_s->finish; return; } } $dbi_s->finish; $dbi_s = $dbi_h->prepare("INSERT INTO arcauthresults (message, instance, arc_client_addr) VALUES(?, ?, ?)"); foreach my $aar (0 .. $#arc_policy_data) { my $instance; my $arc_client_addr; $instance = $arc_policy_data[$aar]{'i'}; $arc_client_addr = $arc_policy_data[$aar]{'ip'} || ''; if (!$dbi_s->execute($msg_id, $instance, $arc_client_addr)) { print STDERR "$progname: failed to insert ARC-Authentication-Results data: " . $dbi_h->errstr . "\n"; $dbi_s->finish; return; } } $dbi_s->finish; $dbi_s = $dbi_h->prepare("INSERT INTO arcseals (message, domain, selector, instance) VALUES(?, ?, ?, ?)"); foreach my $as (0 .. $#arc_policy_data) { my $sdomain; my $sdomain_id; my $selector; my $selector_id; my $instance; $instance = $arc_policy_data[$as]{'i'}; $sdomain = $arc_policy_data[$as]{'d'}; $selector = $arc_policy_data[$as]{'s'}; $sdomain_id = get_table_id($sdomain, "domains"); if (!defined($sdomain_id)) { next; } # fetch selector_id or insert into table $selector_id = get_table_id($selector, "selectors", "", "domain", $sdomain_id) || 0; if (!$dbi_s->execute($msg_id, $sdomain_id, $selector_id, $instance)) { print STDERR "$progname: failed to insert ARC-Seals data: " . $dbi_h->errstr . "\n"; $dbi_s->finish; return; } } $dbi_s->finish; if (get_value("requests", "locked", $request_id) != 1) { if (scalar @rua > 0) { $repuri = join(",", @rua); $dbi_s = $dbi_h->prepare("UPDATE requests SET repuri = ? WHERE id = ?"); if (!$dbi_s->execute($repuri, $request_id)) { print STDERR "$progname: failed to update reporting URI for $fdomain: " . $dbi_h->errstr . "\n"; $dbi_s->finish; return; } $dbi_s->finish; } else { $dbi_s = $dbi_h->prepare("UPDATE requests SET repuri = '' WHERE id = ?"); if (!$dbi_s->execute($request_id)) { print STDERR "$progname: failed to update reporting URI for $fdomain: " . $dbi_h->errstr . "\n"; $dbi_s->finish; return; } $dbi_s->finish; } $dbi_s = $dbi_h->prepare("UPDATE requests SET adkim = ?, aspf = ?, policy = ?, spolicy = ?, pct = ? WHERE id = ?"); if (!$dbi_s->execute($adkim, $aspf, $p, $sp, $pct, $request_id)) { print STDERR "$progname: failed to update policy data for $fdomain: " . $dbi_h->errstr . "\n"; $dbi_s->finish; return; } } $dbi_s->finish; } sub usage { print STDERR "$progname: usage: $progname [options]\n"; print STDERR "\t--dbhost=host database host [$def_dbhost]\n"; print STDERR "\t--dbname=name database name [$def_dbname]\n"; print STDERR "\t--dbpasswd=passwd database password [$def_dbpasswd]\n"; print STDERR "\t--dbport=port database port [$def_dbport]\n"; print STDERR "\t--dbuser=user database user [$def_dbuser]\n"; print STDERR "\t--input=file input file [STDIN]\n"; print STDERR "\t--help print help and exit\n"; print STDERR "\t--verbose verbose output\n"; print STDERR "\t--version print version and exit\n"; } # parse command line arguments my $opt_retval = &Getopt::Long::GetOptions ('dbhost=s' => \$dbhost, 'dbname=s' => \$dbname, 'dbpasswd=s' => \$dbpasswd, 'dbport=s' => \$dbport, 'dbuser=s' => \$dbuser, 'input=s' => \$inputfile, 'help!' => \$helponly, 'verbose!' => \$verbose, 'version!' => \$showversion, ); if (!$opt_retval || $helponly) { usage(); if ($helponly) { exit(0); } else { exit(1); } } if ($showversion) { print STDOUT "$progname v$version\n"; exit(0); } # apply defaults if (!defined($dbhost)) { if (defined($ENV{'OPENDMARC_DBHOST'})) { $dbhost = $ENV{'OPENDMARC_DBHOST'}; } else { $dbhost = $def_dbhost; } } if (!defined($dbname)) { if (defined($ENV{'OPENDMARC_DB'})) { $dbname = $ENV{'OPENDMARC_DB'}; } else { $dbname = $def_dbname; } } if (!defined($dbpasswd)) { if (defined($ENV{'OPENDMARC_PASSWORD'})) { $dbpasswd = $ENV{'OPENDMARC_PASSWORD'}; } else { $dbpasswd = $def_dbpasswd; } } if (!defined($dbport)) { if (defined($ENV{'OPENDMARC_PORT'})) { $dbport = $ENV{'OPENDMARC_PORT'}; } else { $dbport = $def_dbport; } } if (!defined($dbuser)) { if (defined($ENV{'OPENDMARC_USER'})) { $dbuser = $ENV{'OPENDMARC_USER'}; } else { $dbuser = $def_dbuser; } } if ($verbose) { print STDERR "$progname: started at " . localtime() . "\n"; } if (!defined($inputfile)) { $inputfh = $def_inputfh; } else { open($inputfh, "<", $inputfile) or die "$progname: unable to open $inputfile: $!\n"; if ($verbose) { print STDERR "$progname: opened file $inputfile\n" } } if (!flock($inputfh, LOCK_SH)) { print STDERR "$progname: warning: unable to establish read lock\n"; } my $dbi_dsn = "DBI:" . $dbscheme . ":database=" . $dbname . ";host=" . $dbhost . ";port=" . $dbport; $dbi_h = DBI->connect($dbi_dsn, $dbuser, $dbpasswd, { PrintError => 0 }); if (!defined($dbi_h)) { print STDERR "$progname: unable to connect to database: $DBI::errstr\n"; exit(1); } if ($verbose) { print STDERR "$progname: connected to database\n"; } # # Read history file from stdin. # $lineno = 0; while (<$inputfh>) { $lineno++; chomp; ($key, $value, $data) = split / /, $_, 3; # skip lines that start with a space if (!defined($key)) { next; } if (defined($data) && length($data) > 0) { if ($data =~ /^json:/) { @serialized_data = split /:/, $data, 2; } else { ($dkim_selector, $dkim_result) = split / /, $data } } switch ($key) { case "action" { $action = $value; } case "adkim" { $adkim = $value; } case "align_dkim" { $align_dkim = $value; } case "align_spf" { $align_spf = $value; } case "arc" { $arc = $value; } case "arc_policy" { $arc_policy = $value; # parse json data if (scalar (@serialized_data) == 2) { @arc_policy_data = @{ decode_json($serialized_data[1]) }; } else { @arc_policy_data = []; } } case "aspf" { $aspf = $value; } case "dkim" { my @dkim_entry; push(@dkim_entry, $value); push(@dkim_entry, $dkim_selector); push(@dkim_entry, $dkim_result); if ($dkim_result eq "4" || $dkim_result eq "5") { push(@dkim_entry, 1); } else { push(@dkim_entry, 0); } push(@dkim_data, [ @dkim_entry ]); $sigcount++; } case "from" { $fdomain = $value; } case "job" { if (defined($jobid)) { update_db(); undef $action; undef $adkim; undef $align_dkim; undef $align_spf; undef $arc; undef $arc_policy; undef $aspf; undef @serialized_data; undef @dkim_data; undef @arc_policy_data; undef $envdomain; undef $fdomain; undef $ipaddr; undef $jobid; undef $p; undef $pct; undef $pdomain; undef $policy; undef $received; undef $reporter; undef @rua; $sigcount = 0; undef $sp; undef $spf; } $jobid = $value; } case "ipaddr" { $ipaddr = $value; } case "mfrom" { $envdomain = $value; } case "p" { $p = $value; } case "pct" { $pct = $value; } case "pdomain" { $pdomain = $value; } case "policy" { $policy = $value; } case "received" { $received = $value; } case "reporter" { $reporter = $value; } case "rua" { if ($value ne "-") { push(@rua, $value); } } case "sp" { $sp = $value; } case "spf" { $spf = $value; } else { print STDERR "$progname: unknown key '$key' at line $lineno\n"; } } } if (defined($jobid)) { update_db(); } if (defined($inputfile)) { close($inputfh); } # # all done! # if ($verbose) { print STDERR "$progname: terminating at " . localtime() . "\n"; } $dbi_h->disconnect; exit(0); OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-importstats000077500000000000000000000012101416002254500236660ustar00rootroot00000000000000#!/bin/sh ## ## Copyright (c) 2012, The Trusted Domain Project. All rights reserved. ## ## opendmarc-importstats -- import opendmarc output to MySQL ## ## This is intended to be used via a crontab. If import is successful, ## this code exits quietly so there's no output. If it fails, it does ## "ls -l" on the temporary file, so that cron generates mail to whever ## ran the job. ## setup statsdb="/var/tmp/dmarc.dat" # OPENDMARC_PASSWORD="password"; export OPENDMARC_PASSWORD if [ -s $statsdb ] then mv $statsdb ${statsdb}.OLD.$$ if opendmarc-import < ${statsdb}.OLD.$$ then rm ${statsdb}.OLD.$$ else ls -l ${statsdb}.OLD.$$ fi fi OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-importstats.8.in000066400000000000000000000020031416002254500244370ustar00rootroot00000000000000.TH opendmarc-importstats 8 "The Trusted Domain Project" .SH NAME .B opendmarc-importstats \- import OpenDMARC statistics/history data .SH SYNOPSIS .B opendmarc-importstats .SH DESCRIPTION .B opendmarc-importstats is a fairly trivial shell script, typically executed by .I cron(8), that rotates an OpenDMARC statistics/history data file to a unique filename and then attempts to import it to a local database for later processing by executing .I opendmarc-import(8). On successful import, the unique file is removed; on failure, the script executes .I ls(1) on the file and exits without removing the unique file. The intent of this last step is to cause .I cron to generate a message to a responsible party so that the failure will be investigated. .SH VERSION This man page covers the version of .I opendmarc-importstats that shipped with version @VERSION@ of .I OpenDMARC. .SH COPYRIGHT Copyright (c) 2013, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I cron(8), .I opendmarc(8), .I opendmarc-import(8) OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-params.8.in000066400000000000000000000032741416002254500233440ustar00rootroot00000000000000.TH opendmarc-params 8 "The Trusted Domain Project" .SH NAME .B opendmarc-params \- OpenDMARC reporting parameters setup tool .SH SYNOPSIS .B opendmarc-params [options] domain .SH DESCRIPTION .B opendmarc-params records a specific reporting address for aggregate reports about the named .I domain and flags it as "locked" in the reporting requests database. This is done to allow an administrator to force generation of reports and have them sent to a specific address regardless of what data may (or may not) be found in the DNS for the named domain. .SH OPTIONS .TP .I --dbhost=host Attempts to connect to the database server on the named .I host. The default is "localhost". .TP .I --dbname=name Requests a connection to the database called .I name. The default is "opendmarc". .TP .I --dbpasswd=password Attempts to authenticate to the database server using the specified .I password. The default is "opendmarc". .TP .I --dbport=port Tries to connect to the database at the specified TCP .I port. The default is 3306. .TP .I --dbuser=user Attempts to authenticate to the database server as the specified .I user. The default is "opendmarc". .TP .I --help Prints a usage message and exits. .TP .I --rua=string Sets the reporting URI for the named .I domain to the specified .I string. .TP .I --unlock Unlocks the record for the named .I domain. .TP .I --verbose Requests verbose output. .TP .I --version Prints version number and exits. .SH VERSION This man page covers the version of .I opendmarc-params that shipped with version @VERSION@ of .I OpenDMARC. .SH COPYRIGHT Copyright (c) 2012, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I opendmarc(8), .I opendmarc-import(8), .I opendmarc-reports(8) OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-params.in000077500000000000000000000130521416002254500231740ustar00rootroot00000000000000#!/usr/bin/perl # # Copyright (c) 2012, 2013, The Trusted Domain Project. All rights reserved. # # Script to apply manual changes to DMARC reporting parameters. ### ### Setup ### use strict; use warnings; use Switch; use DBI; use File::Basename; use Getopt::Long; use POSIX; require DBD::@SQL_BACKEND@; # general my $progname = basename($0); my $version = "@VERSION@"; my $verbose = 0; my $helponly = 0; my $showversion = 0; # DB parameters my $def_dbhost = "localhost"; my $def_dbname = "opendmarc"; my $def_dbuser = "opendmarc"; my $def_dbpasswd = "opendmarc"; my $def_dbport = "3306"; my $dbhost; my $dbname; my $dbuser; my $dbpasswd; my $dbport; my $dbscheme = "@SQL_BACKEND@"; my $dbi_a; my $dbi_h; my $dbi_t; my $domain; my $domainid; my $requestid; my $rua; my $unlock; sub get_table_id { my $name; my $table; my $column; my $out; ($name, $table, $column) = @_; if (!defined($name) || !defined($table)) { return undef; } if (!defined($column)) { $column = "name"; } $dbi_t = $dbi_h->prepare("SELECT id FROM $table WHERE $column = ?"); if (!$dbi_t->execute($name)) { print STDERR "$progname: failed to retrieve table ID: " . $dbi_h->errstr . "\n"; return undef; } undef $out; while ($dbi_a = $dbi_t->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $out = $dbi_a->[0]; } } $dbi_t->finish; if (!defined($out)) { $dbi_t = $dbi_h->prepare("INSERT INTO $table ($column) VALUES(?)"); if (!$dbi_t->execute($name)) { print STDERR "$progname: failed to create table ID: " . $dbi_h->errstr . "\n"; return undef; } $dbi_t = $dbi_h->prepare("SELECT LAST_INSERT_ID()"); if (!$dbi_t->execute()) { print STDERR "$progname: failed to retrieve created table ID: " . $dbi_h->errstr . "\n"; return undef; } while ($dbi_a = $dbi_t->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $out = $dbi_a->[0]; } } $dbi_t->finish; if (!defined($out)) { print STDERR "$progname: failed to retrieve created table ID: " . $dbi_h->errstr . "\n"; return undef; } } return $out; } sub usage { print STDERR "$progname: usage: $progname [options] domain\n"; print STDERR "\t--dbhost=host database host [$def_dbhost]\n"; print STDERR "\t--dbname=name database name [$def_dbname]\n"; print STDERR "\t--dbpasswd=passwd database password [$def_dbpasswd]\n"; print STDERR "\t--dbport=port database port [$def_dbport]\n"; print STDERR "\t--dbuser=user database user [$def_dbuser]\n"; print STDERR "\t--rua=string aggregate report URI(s)\n"; print STDERR "\t--help print help and exit\n"; print STDERR "\t--unlock unlocks named record\n"; print STDERR "\t--verbose verbose output\n"; print STDERR "\t--version print version and exit\n"; } # parse command line arguments my $opt_retval = &Getopt::Long::GetOptions ('dbhost=s' => \$dbhost, 'dbname=s' => \$dbname, 'dbpasswd=s' => \$dbpasswd, 'dbport=s' => \$dbport, 'dbuser=s' => \$dbuser, 'help!' => \$helponly, 'rua=s' => \$rua, 'unlock!' => \$unlock, 'verbose!' => \$verbose, 'version!' => \$showversion, ); $domain = $ARGV[0]; if (!$opt_retval || $helponly || !defined($domain)) { usage(); if ($helponly) { exit(0); } else { exit(1); } } if ($showversion) { print STDOUT "$progname v$version\n"; exit(0); } # apply defaults if (!defined($dbhost)) { if (defined($ENV{'OPENDMARC_DBHOST'})) { $dbhost = $ENV{'OPENDMARC_DBHOST'}; } else { $dbhost = $def_dbhost; } } if (!defined($dbname)) { if (defined($ENV{'OPENDMARC_DB'})) { $dbname = $ENV{'OPENDMARC_DB'}; } else { $dbname = $def_dbname; } } if (!defined($dbpasswd)) { if (defined($ENV{'OPENDMARC_PASSWORD'})) { $dbpasswd = $ENV{'OPENDMARC_PASSWORD'}; } else { $dbpasswd = $def_dbpasswd; } } if (!defined($dbport)) { if (defined($ENV{'OPENDMARC_PORT'})) { $dbport = $ENV{'OPENDMARC_PORT'}; } else { $dbport = $def_dbport; } } if (!defined($dbuser)) { if (defined($ENV{'OPENDMARC_USER'})) { $dbuser = $ENV{'OPENDMARC_USER'}; } else { $dbuser = $def_dbuser; } } if ($verbose) { print STDERR "$progname: started at " . localtime() . "\n"; } my $dbi_dsn = "DBI:" . $dbscheme . ":database=" . $dbname . ";host=" . $dbhost . ";port=" . $dbport; $dbi_h = DBI->connect($dbi_dsn, $dbuser, $dbpasswd, { PrintError => 0 }); if (!defined($dbi_h)) { print STDERR "$progname: unable to connect to database: $DBI::errstr\n"; exit(1); } if ($verbose) { print STDERR "$progname: connected to database\n"; } $domainid = get_table_id($domain, "domains", "name"); $requestid = get_table_id($domainid, "requests", "domain"); if ($unlock) { $dbi_t = $dbi_h->prepare("UPDATE requests SET locked = 0 WHERE id = ?"); if (!$dbi_t->execute($requestid)) { print STDERR "$progname: failed to update requests table for $domain: " . $dbi_h->errstr . "\n"; } } else { $dbi_t = $dbi_h->prepare("UPDATE requests SET locked = 1, repuri = ? WHERE id = ?"); if (!$dbi_t->execute($rua, $requestid)) { print STDERR "$progname: failed to update requests table for $domain: " . $dbi_h->errstr . "\n"; } } # # all done! # $dbi_h->disconnect; exit(0); OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-reports.8.in000066400000000000000000000071751416002254500235630ustar00rootroot00000000000000.TH opendmarc-reports 8 "The Trusted Domain Project" .SH NAME .B opendmarc-reports \- OpenDMARC aggregate report generation tool .SH SYNOPSIS .B opendmarc-reports [options] .SH DESCRIPTION .B opendmarc-reports pulls data from an OpenDMARC database and generates periodic aggregate reports. The database is populated by a running .B opendmarc-import(8) on a message history file generated by an .B opendmarc(8) filter as messages arrive and are processed. This includes the collection of reporting URIs, which this script uses to make reports available to those that request them. .SH OPTIONS .TP .I --day Generate reports on day boundaries. Overrides the value of .I --interval (see below). .TP .I --dbhost=hostname Specifies the hostname on which the SQL server is running. Defaults to the value of the environment variable OPENDMARC_DBHOST, or "localhost" if the environment variable is not set. .TP .I --dbname=name Specifies the SQL database name to be accessed. Defaults to the value of the environment variable OPENDMARC_DB, or "opendmarc" if the environment variable is not set. .TP .I --dbpasswd=password Specifies the password for the SQL database to be accessed. Defaults to the value of the environment variable OPENDMARC_PASSWORD, or "opendmarc" if the environment variable is not set. .TP .I --dbport=port Specifies the TCP port on which the SQL server is expected to be listening. Defaults to the value of the environment variable OPENDMARC_PORT, or 3306 if the environment variable is not set. .TP .I --dbuser=user Specifies the SQL user to be used to access the database. Defaults to the value of the environment variable OPENDMARC_USER, or "opendmarc" if the environment variable is not set. .TP .I --domain=name Generates a report (if one is due) for the named domain, rather than checking all of them. .TP .I --help Prints a help message and terminates. .TP .I --interval=secs Generates reports only for hosts that have not had a report generated in at least the last .I secs seconds. .TP .I --nodomain=name Skips generating a report for the named domain. Can be specified multiple times to skip multiple reporting domains. .TP .I --noupdate Suppresses marking the time of the transmission of the report in the database. Normally this would be done to prevent reports from being sent too close together. .TP .I --report-email=addr Generates reports using the specified address, which is used in the report content and in the SMTP transaction. The default is "postmaster@HOSTNAME" where HOSTNAME is replaced by the hostname of the host generating the report. .TP .I --report-org=domain Generates reports using the specified domain name as the organization responsible for the report. This is used to create the archive filename and is included in the report content. The default is the hostname of the host generating the report. .TP .I --smtp-host=host Causes reports to be sent by transmitting them using SMTP to the named .I host which can be an IP address or a hostname. The default is "127.0.0.1". .TP .I --smtp-port=port Causes reports to be sent by transmitting them using SMTP to the specified .I port. The default is 25. .TP .I --utc Instructs the database to change to the UTC timezone when generating output. Otherwise, the database default is used. .TP .I --verbose Increase the amount of verbosity written to standard output. .TP .I --version Print version number and exit. .SH VERSION This man page covers the version of .I opendmarc-reports that shipped with version @VERSION@ of .I OpenDMARC. .SH COPYRIGHT Copyright (c) 2012, 2014, 2015, The Trusted Domain Project. All rights reserved. .SH SEE ALSO .I opendmarc(8), .I opendmarc.conf(5), .I opendmarc-import(8) OpenDMARC-rel-opendmarc-1-4-2/reports/opendmarc-reports.in000077500000000000000000000635111416002254500234140ustar00rootroot00000000000000#!/usr/bin/perl # # Copyright (c) 2012-2016, 2017-2018, The Trusted Domain Project. # All rights reserved. # # Script to generate regular DMARC reports. ### ### Setup ### use strict; use warnings; use Switch; use DBI; use File::Basename; use File::Temp; use Net::Domain qw(hostfqdn hostdomain); use Getopt::Long; use IO::Handle; use IO::Compress::Zip qw(zip); use POSIX; use MIME::Base64; use Net::SMTP; use Time::Local; require DBD::@SQL_BACKEND@; require HTTP::Request; # general my $progname = basename($0); my $version = "@VERSION@"; my $verbose = 0; my $helponly = 0; my $showversion = 0; my $interval; my $gen; my $uri; my $buf; my $mailout; my $boundary; my $tmpout; my $repfile; my $zipfile; my $zipin; my $now = time(); my $repstart; my $repend; my $domain; my $domainid; my $domainset; my $forcedomain; my @skipdomains; my $policy; my $spolicy; my $policystr; my $spolicystr; my $pct; my $repuri; my @repuris; my $lastsent; my $aspf; my $aspfstr; my $adkim; my $adkimstr; my $align_dkim; my $align_dkimstr; my $align_spf; my $align_spfstr; my $spfresult; my $dkimresult; my $disp; my $spfresultstr; my $dkimresultstr; my $dispstr; my $ipaddr; my $fromdomain; my $envdomain; my $dkimdomain; my $dkimselector; my $arc; my $arcstr; my $arcpolicy; my $arcpolicystr; my $repdest; my $smtpstatus; my $smtpfail; my $doupdate = 1; my $testmode = 0; my $keepfiles = 0; my $use_utc = 0; my $daybound = 0; my $report_maxbytes_global = 15728640; # default: 15M, per spec my $msgid; my $rowcount; my $dbi_h; my $dbi_s; my $dbi_s2; my $dbi_a; my $dbi_hash; # DB parameters my $def_dbhost = "localhost"; my $def_dbname = "opendmarc"; my $def_dbuser = "opendmarc"; my $def_dbpasswd = "opendmarc"; my $def_dbport = "3306"; my $def_interval = "86400"; my $dbhost; my $dbname; my $dbuser; my $dbpasswd; my $dbport; my $dbscheme = "@SQL_BACKEND@"; my $repdom = hostdomain(); my $repemail = "postmaster@" . $repdom; my $smtp_server = '127.0.0.1'; my $smtp_port = 25; my $smtp; my $answer; ### ### NO user-serviceable parts beyond this point ### sub usage { print STDERR "$progname: usage: $progname [options]\n"; print STDERR "\t--day send yesterday's data\n"; print STDERR "\t--dbhost=host database host [$def_dbhost]\n"; print STDERR "\t--dbname=name database name [$def_dbname]\n"; print STDERR "\t--dbpasswd=passwd database password [$def_dbpasswd]\n"; print STDERR "\t--dbport=port database port [$def_dbport]\n"; print STDERR "\t--dbuser=user database user [$def_dbuser]\n"; print STDERR "\t--domain=name force a report for named domain\n"; print STDERR "\t--help print help and exit\n"; print STDERR "\t--interval=secs report interval [$def_interval]\n"; print STDERR "\t--keepfiles keep xml files (in local directory)\n"; print STDERR "\t -n synonym for --test\n"; print STDERR "\t--nodomain=name omit a report for named domain\n"; print STDERR "\t--noupdate don't record report transmission\n"; print STDERR "\t--report-email reporting contact [$repemail]\n"; print STDERR "\t--report-org reporting organization [$repdom]\n"; print STDERR "\t--smtp-port smtp server port [$smtp_port]\n"; print STDERR "\t--smtp-server smtp server [$smtp_server]\n"; print STDERR "\t--test don't send reports\n"; print STDERR "\t (implies --keepfiles --noupdate)\n"; print STDERR "\t--utc operate in UTC\n"; print STDERR "\t--verbose verbose output\n"; print STDERR "\t (repeat for increased output)\n"; print STDERR "\t--version print version and exit\n"; } # set locale setlocale(LC_ALL, 'C'); # parse command line arguments my $opt_retval = &Getopt::Long::GetOptions ('day!' => \$daybound, 'dbhost=s' => \$dbhost, 'dbname=s' => \$dbname, 'dbpasswd=s' => \$dbpasswd, 'dbport=s' => \$dbport, 'dbuser=s' => \$dbuser, 'domain=s' => \$forcedomain, 'help!' => \$helponly, 'interval=i' => \$interval, 'keepfiles' => \$keepfiles, 'n|test' => \$testmode, 'nodomain=s' => \@skipdomains, 'report-email=s' => \$repemail, 'report-org=s' => \$repdom, 'smtp-server=s' => \$smtp_server, 'smtp-port=i' => \$smtp_port, 'update!' => \$doupdate, 'utc!' => \$use_utc, 'verbose+' => \$verbose, 'version!' => \$showversion, ); if (!$opt_retval || $helponly) { usage(); if ($helponly) { exit(0); } else { exit(1); } } if ($showversion) { print STDOUT "$progname v$version\n"; exit(0); } # apply defaults if (!defined($dbhost)) { if (defined($ENV{'OPENDMARC_DBHOST'})) { $dbhost = $ENV{'OPENDMARC_DBHOST'}; } else { $dbhost = $def_dbhost; } } if (!defined($dbname)) { if (defined($ENV{'OPENDMARC_DB'})) { $dbname = $ENV{'OPENDMARC_DB'}; } else { $dbname = $def_dbname; } } if (!defined($dbpasswd)) { if (defined($ENV{'OPENDMARC_PASSWORD'})) { $dbpasswd = $ENV{'OPENDMARC_PASSWORD'}; } else { $dbpasswd = $def_dbpasswd; } } if (!defined($dbport)) { if (defined($ENV{'OPENDMARC_PORT'})) { $dbport = $ENV{'OPENDMARC_PORT'}; } else { $dbport = $def_dbport; } } if (!defined($dbuser)) { if (defined($ENV{'OPENDMARC_USER'})) { $dbuser = $ENV{'OPENDMARC_USER'}; } else { $dbuser = $def_dbuser; } } if (defined($interval) && $daybound) { print STDERR "$progname: WARN: --day overrides --interval\n"; } if (!defined($interval) || $daybound) { $interval = $def_interval; } # Test mode requested, don't update last sent and keep xml files $doupdate = ($testmode == 1) ? 0 : $doupdate; $keepfiles = ($testmode == 1) ? 1 : $keepfiles; if ($verbose) { print STDERR "$progname: started at " . localtime($now) . "\n"; } my $dbi_dsn = "DBI:" . $dbscheme . ":database=" . $dbname . ";host=" . $dbhost . ";port=" . $dbport; $dbi_h = DBI->connect($dbi_dsn, $dbuser, $dbpasswd, { PrintError => 0 }); if (!defined($dbi_h)) { print STDERR "$progname: unable to connect to database: $DBI::errstr\n"; exit(1); } if ($verbose >= 2) { print STDERR "$progname: connected to database\n"; } if ($use_utc) { $dbi_s = $dbi_h->prepare("SET TIME_ZONE='+00:00'"); if (!$dbi_s->execute()) { print STDERR "$progname: failed to change to UTC: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } } # # Select domains on which to report # if ($verbose >= 2) { print STDERR "$progname: selecting target domains\n"; } if (defined($forcedomain)) { $dbi_s = $dbi_h->prepare("SELECT name FROM domains WHERE name = ?"); if (!$dbi_s->execute($forcedomain)) { print STDERR "$progname: failed to test for database entry: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } } elsif ($daybound) { $dbi_s = $dbi_h->prepare("SELECT domains.name FROM requests JOIN domains ON requests.domain = domains.id WHERE DATE(lastsent) < DATE(FROM_UNIXTIME(?))"); if (!$dbi_s->execute($now)) { print STDERR "$progname: failed to collect domain names: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } } else { $dbi_s = $dbi_h->prepare("SELECT domains.name FROM requests JOIN domains ON requests.domain = domains.id WHERE lastsent <= DATE_SUB(FROM_UNIXTIME(?), INTERVAL ? SECOND)"); if (!$dbi_s->execute($now, $interval)) { print STDERR "$progname: failed to collect domain names: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } } $domainset = $dbi_s->fetchall_arrayref([0]); $dbi_s->finish; if ($verbose) { print STDERR "$progname: selected " . scalar(@$domainset) . " domain(s)\n"; } # # For each domain: # -- extract reporting address # -- extract messages/signatures to report # -- generate and send report # -- update "last sent" timestamp # $smtp = Net::SMTP->new($smtp_server, 'Port' => $smtp_port, 'Hello' => hostfqdn()); if (!defined($smtp)) { print STDERR "$progname: open SMTP server $smtp_server:$smtp_port failed\n"; exit(1); } foreach (@$domainset) { $domain = $_->[0]; if (!defined($domain)) { next; } if (@skipdomains && grep({$_ eq $domain} @skipdomains) != 0) { next; } if ($verbose >= 2) { print STDERR "$progname: processing $domain\n"; } # extract this domain's reporting parameters $dbi_s = $dbi_h->prepare("SELECT id FROM domains WHERE name = ?"); if (!$dbi_s->execute($domain)) { print STDERR "$progname: can't get ID for domain $domain: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } undef $domainid; while ($dbi_a = $dbi_s->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $domainid = $dbi_a->[0]; } } $dbi_s->finish; if (!defined($domainid)) { print STDERR "$progname: ID for domain $domain not found\n"; next; } $dbi_s = $dbi_h->prepare("SELECT repuri, adkim, aspf, policy, spolicy, pct, UNIX_TIMESTAMP(lastsent) FROM requests WHERE domain = ?"); if (!$dbi_s->execute($domainid)) { print STDERR "$progname: can't get reporting URI for domain $domain: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } undef $repuri; while ($dbi_a = $dbi_s->fetchrow_arrayref()) { if (defined($dbi_a->[0])) { $repuri = $dbi_a->[0]; } if (defined($dbi_a->[1])) { $adkim = $dbi_a->[1]; } if (defined($dbi_a->[2])) { $aspf = $dbi_a->[2]; } if (defined($dbi_a->[3])) { $policy = $dbi_a->[3]; } if (defined($dbi_a->[4])) { $spolicy = $dbi_a->[4]; } if (defined($dbi_a->[5])) { $pct = $dbi_a->[5]; } if (defined($dbi_a->[6])) { $lastsent = $dbi_a->[6]; } } $dbi_s->finish; if (!defined($repuri) || ("" eq $repuri)) { if ($verbose >= 2) { print STDERR "$progname: no reporting URI for domain $domain; skipping\n"; } next; } if ($daybound) { my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($now - $interval); $repstart = timelocal(0, 0, 0, $mday, $mon, $year); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($now); $repend = timelocal(0, 0, 0, $mday, $mon, $year); } else { $repstart = $now - $interval; $repend = $now; } # construct the temporary file $repfile = $repdom . "!" . $domain . "!" . $repstart . "!" . $repend . ".xml"; $zipfile = $repdom . "!" . $domain . "!" . $repstart . "!" . $repend . ".zip"; if (!open($tmpout, ">", $repfile)) { print STDERR "$progname: can't create report file for domain $domain\n"; next; } switch ($adkim) { case ord("r") { $adkimstr = "r"; } case ord("s") { $adkimstr = "s"; } else { $adkimstr = "unknown"; } } switch ($aspf) { case ord("r") { $aspfstr = "r"; } case ord("s") { $aspfstr = "s"; } else { $aspfstr = "unknown"; } } switch ($policy) { case ord("n") { $policystr = "none"; } case ord("q") { $policystr = "quarantine"; } case ord("r") { $policystr = "reject"; } else { $policystr = "unknown"; } } switch ($spolicy) { case 0 { $spolicystr = $policystr; } case ord("n") { $spolicystr = "none"; } case ord("q") { $spolicystr = "quarantine"; } case ord("r") { $spolicystr = "reject"; } else { $spolicystr = "unknown"; } } print $tmpout "\n"; print $tmpout "\n"; print $tmpout " \n"; print $tmpout " $repdom\n"; print $tmpout " $repemail\n"; print $tmpout " $domain:$now\n"; print $tmpout " \n"; print $tmpout " $repstart\n"; print $tmpout " $repend\n"; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " $domain\n"; print $tmpout " $adkimstr\n"; print $tmpout " $aspfstr\n"; print $tmpout "

$policystr

\n"; print $tmpout " $spolicystr\n"; print $tmpout " $pct\n"; print $tmpout "
\n"; if ($daybound) { $dbi_s = $dbi_h->prepare(q{ SELECT messages.id, ipaddr.addr, messages.disp, d1.name, d2.name, messages.spf, messages.align_spf, messages.align_dkim, messages.arc, messages.arc_policy FROM messages JOIN ipaddr ON messages.ip = ipaddr.id JOIN domains d1 ON messages.from_domain = d1.id JOIN domains d2 ON messages.env_domain = d2.id WHERE messages.from_domain = ? AND DATE(messages.date) >= DATE(FROM_UNIXTIME(?)) AND DATE(messages.date) < DATE(FROM_UNIXTIME(?)) }); } else { $dbi_s = $dbi_h->prepare(q{ SELECT messages.id, ipaddr.addr, messages.disp, d1.name, d2.name, messages.spf, messages.align_spf, messages.align_dkim, messages.arc, messages.arc_policy FROM messages JOIN ipaddr ON messages.ip = ipaddr.id JOIN domains d1 ON messages.from_domain = d1.id JOIN domains d2 ON messages.env_domain = d2.id WHERE messages.from_domain = ? AND messages.date > FROM_UNIXTIME(?) AND messages.date <= FROM_UNIXTIME(?) }); } if (!$dbi_s->execute($domainid, $repstart, $repend)) { print STDERR "$progname: can't extract report for domain $domain: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } $rowcount = 0; while ($dbi_a = $dbi_s->fetchrow_arrayref()) { undef $msgid; if (defined($dbi_a->[0])) { $msgid = $dbi_a->[0]; } if (defined($dbi_a->[1])) { $ipaddr = $dbi_a->[1]; } if (defined($dbi_a->[2])) { $disp = $dbi_a->[2]; } if (defined($dbi_a->[3])) { $fromdomain = $dbi_a->[3]; } if (defined($dbi_a->[4])) { $envdomain = $dbi_a->[4]; } if (defined($dbi_a->[5])) { $spfresult = $dbi_a->[5]; } if (defined($dbi_a->[6])) { $align_spf = $dbi_a->[6]; } if (defined($dbi_a->[7])) { $align_dkim = $dbi_a->[7]; } if (defined($dbi_a->[8])) { $arc = $dbi_a->[8]; } if (defined($dbi_a->[9])) { $arcpolicy = $dbi_a->[9]; } if (!defined($msgid)) { next; } $rowcount++; switch ($disp) { case 0 { $dispstr = "reject"; } case 1 { $dispstr = "reject"; } case 2 { $dispstr = "none"; } case 4 { $dispstr = "quarantine"; } else { $dispstr = "unknown"; } } switch ($spfresult) { case 0 { $spfresultstr = "pass"; } case 2 { $spfresultstr = "softfail"; } case 3 { $spfresultstr = "neutral"; } case 4 { $spfresultstr = "temperror"; } case 5 { $spfresultstr = "permerror"; } case 6 { $spfresultstr = "none"; } case 7 { $spfresultstr = "fail"; } case 8 { $spfresultstr = "policy"; } case 9 { $spfresultstr = "nxdomain"; } case 10 { $spfresultstr = "signed"; } case 12 { $spfresultstr = "discard"; } else { $spfresultstr = "unknown"; } } switch ($align_dkim) { case 4 { $align_dkimstr = "pass"; } case 5 { $align_dkimstr = "fail"; } else { $align_dkimstr = "unknown"; } } switch ($align_spf) { case 4 { $align_spfstr = "pass"; } case 5 { $align_spfstr = "fail"; } else { $align_spfstr = "unknown"; } } switch ($arc) { case 1 { $arcstr = "pass"; } else { $arcstr = "fail"; } } switch ($arcpolicy) { case 0 { $arcpolicystr = "pass"; } else { $arcpolicystr = "fail"; } } # retrieve arc_policy seals, join arcauthresults.arc_client_addr (smtp.client_ip) $dbi_s2 = $dbi_h->prepare(q{ SELECT arcseals.instance, domains.name AS domain, selectors.name AS selector, arcauthresults.arc_client_addr as client_ip FROM arcseals JOIN domains on arcseals.domain = domains.id JOIN selectors on arcseals.selector = selectors.id JOIN arcauthresults on arcseals.message = arcauthresults.message AND arcseals.instance = arcauthresults.instance WHERE arcseals.message = ? ORDER BY arcseals.instance DESC }); if (!$dbi_s2->execute($msgid)) { print STDERR "$progname: can't extract report for message $msgid: " . $dbi_h->errstr . "\n"; $dbi_s2->finish; $dbi_s->finish; $dbi_h->disconnect; exit(1); } my $arc_policy_output = "arc=$arcpolicystr"; while ($dbi_hash = $dbi_s2->fetchrow_hashref()) { $arc_policy_output .= " as[$dbi_hash->{instance}].d=$dbi_hash->{domain}"; $arc_policy_output .= " as[$dbi_hash->{instance}].s=$dbi_hash->{selector}"; if ($dbi_hash->{instance} == 1 && (defined($dbi_hash->{client_ip}) && $dbi_hash->{client_ip} ne "")) { $arc_policy_output .= " client-ip[$dbi_hash->{instance}]=$dbi_hash->{client_ip}"; } } $dbi_s2->finish; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " $ipaddr\n"; print $tmpout " 1\n"; print $tmpout " \n"; print $tmpout " $dispstr\n"; print $tmpout " $align_dkimstr\n"; print $tmpout " $align_spfstr\n"; print $tmpout " \n"; print $tmpout " local_policy\n"; print $tmpout " $arc_policy_output\n"; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " $fromdomain\n"; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " \n"; print $tmpout " $envdomain\n"; print $tmpout " $spfresultstr\n"; print $tmpout " \n"; $dbi_s2 = $dbi_h->prepare(q{ SELECT domains.name, selectors.name, pass FROM signatures JOIN domains ON signatures.domain = domains.id JOIN selectors ON signatures.selector = selectors.id WHERE signatures.message = ? }); if (!$dbi_s2->execute($msgid)) { print STDERR "$progname: can't extract report for message $msgid: " . $dbi_h->errstr . "\n"; $dbi_s2->finish; $dbi_s->finish; $dbi_h->disconnect; exit(1); } my %dkim_domain_result_cache = (); while ($dbi_a = $dbi_s2->fetchrow_arrayref()) { undef $dkimdomain; if (defined($dbi_a->[0])) { $dkimdomain = $dbi_a->[0]; } if (defined($dbi_a->[1])) { $dkimselector = $dbi_a->[1]; } if (defined($dbi_a->[2])) { $dkimresult = $dbi_a->[2]; } if (!defined($dkimdomain)) { next; } if (defined($dkim_domain_result_cache{$dkimdomain}{$dkimselector}{$dkimresult})) { next; # no duplicate per-record auth_result dkim sections } $dkim_domain_result_cache{$dkimdomain}{$dkimselector}{$dkimresult}++; switch ($dkimresult) { case 0 { $dkimresultstr = "pass"; } case 2 { $dkimresultstr = "softfail"; } case 3 { $dkimresultstr = "neutral"; } case 4 { $dkimresultstr = "temperror"; } case 5 { $dkimresultstr = "permerror"; } case 6 { $dkimresultstr = "none"; } case 7 { $dkimresultstr = "fail"; } case 8 { $dkimresultstr = "policy"; } case 9 { $dkimresultstr = "nxdomain"; } case 10 { $dkimresultstr = "signed"; } case 12 { $dkimresultstr = "discard"; } else { $dkimresultstr = "unknown"; } } print $tmpout " \n"; print $tmpout " $dkimdomain\n"; print $tmpout " $dkimselector\n"; print $tmpout " $dkimresultstr\n"; print $tmpout " \n"; } $dbi_s2->finish; print $tmpout " \n"; print $tmpout " \n"; } $dbi_s->finish; print $tmpout "
\n"; close($tmpout); if ($rowcount == 0) { if ($verbose >= 2) { print STDERR "$progname: no activity selected for $domain; skipping\n"; } unlink($repfile); next; } # zip the report if (!zip [ $repfile ] => $zipfile) { print STDERR "$progname: can't zip report for domain $domain: $!\n"; next; } if ($keepfiles) { print STDERR "$progname: keeping report file \"$repfile\"\n"; } # decode the URI @repuris = split(',', $repuri); for $repuri (@repuris) { $uri = URI->new($repuri); if (!defined($uri) || !defined($uri->scheme) || $uri->opaque eq "") { print STDERR "$progname: can't parse reporting URI for domain $domain\n"; next; } $repdest = $uri->opaque; my $report_maxbytes = $report_maxbytes_global; # check for max report size if ($repdest =~ m/^(\S+)!(\d{1,15})([kmgt])?$/i) { $repdest = $1; $report_maxbytes = $2; if ($3) { my $letter = lc($3); if ($letter eq 'k') { $report_maxbytes = $report_maxbytes * 1024; } if ($letter eq 'm') { $report_maxbytes = $report_maxbytes * 1048576; } if ($letter eq 'g') { $report_maxbytes = $report_maxbytes * (2**30); } if ($letter eq 't') { $report_maxbytes = $report_maxbytes * (2**40); } } } # Test mode, just report what would have been done if ($testmode) { print STDERR "$progname: would email $domain report for " . "$rowcount records to " . $uri->opaque . "\n"; } # ensure a scheme is present elsif (!defined($uri->scheme)) { if ($verbose >= 2) { print STDERR "$progname: unknown URI scheme in '$repuri' for domain $domain\n"; } next; } # send/post report elsif ($uri->scheme eq "mailto") { my $datestr; my $report_id; if (!open($zipin, $zipfile)) { print STDERR "$progname: can't read zipped report for $domain: $!\n"; next; } $boundary = "report_section"; $report_id = $domain . "-" . $now . "@" . $repdom; $datestr = strftime("%a, %e %b %Y %H:%M:%S %z (%Z)", localtime); $mailout = "To: $repdest\n"; $mailout .= "From: $repemail\n"; $mailout .= "Subject: Report Domain: " . $domain . " Submitter: " . $repdom . " Report-ID: " . $report_id . "\n"; $mailout .= "X-Mailer: " . $progname . " v" . $version ."\n"; $mailout .= "Date: " . $datestr . "\n"; $mailout .= "Message-ID: <$report_id>\n"; $mailout .= "Auto-Submitted: auto-generated\n"; $mailout .= "MIME-Version: 1.0\n"; $mailout .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n"; $mailout .= "\n"; $mailout .= "This is a MIME-encapsulated message.\n"; $mailout .= "\n"; $mailout .= "--$boundary\n"; $mailout .= "Content-Type: text/plain;\n"; $mailout .= "\n"; $mailout .= "This is a DMARC aggregate report for $domain\n"; $mailout .= "generated at " . localtime() . "\n"; $mailout .= "\n"; $mailout .= "--$boundary\n"; $mailout .= "Content-Type: application/zip\n"; $mailout .= "Content-Disposition: attachment; filename=\"$zipfile\"\n"; $mailout .= "Content-Transfer-Encoding: base64\n"; $mailout .= "\n"; while (read($zipin, $buf, 60*57)) { $mailout .= encode_base64($buf); } $mailout .= "\n"; $mailout .= "--$boundary--\n"; my $reportsize = length($mailout); if ($reportsize > $report_maxbytes) { # XXX -- generate an error report here print STDERR "$progname: report was too large ($reportsize bytes) per limitation of URI " . $uri->opaque . " for domain $domain\n"; } else { $smtpstatus = "sent"; $smtpfail = 0; if (!$smtp->mail($repemail) || !$smtp->to($repdest) || !$smtp->data() || !$smtp->datasend($mailout) || !$smtp->dataend()) { $smtpfail = 1; $smtpstatus = "failed to send"; } if ($verbose || $smtpfail) { # now perl voodoo: $answer = ${${*$smtp}{'net_cmd_resp'}}[1] || $smtp->message() || 'unknown error'; chomp($answer); print STDERR "$progname: $smtpstatus report for $domain to $repdest ($answer)\n"; } } $smtp->reset(); close($zipin); } else { print STDERR "$progname: unsupported reporting URI scheme " . $uri->scheme . " for domain $domain\n"; next; } } # update "last sent" timestamp if ($doupdate) { $dbi_s = $dbi_h->prepare("UPDATE requests SET lastsent = FROM_UNIXTIME(?) WHERE domain = ?"); if (!$dbi_s->execute($repend, $domainid)) { print STDERR "$progname: can't update last sent time for domain $domain: " . $dbi_h->errstr . "\n"; $dbi_s->finish; $dbi_h->disconnect; exit(1); } } unlink($zipfile); if (!$keepfiles) { unlink($repfile); } } $smtp->quit(); # # all done! # $dbi_s->finish; if ($verbose) { print STDERR "$progname: terminating at " . localtime() . "\n"; } $dbi_h->disconnect; exit(0); OpenDMARC-rel-opendmarc-1-4-2/www/000077500000000000000000000000001416002254500165355ustar00rootroot00000000000000OpenDMARC-rel-opendmarc-1-4-2/www/index.html000066400000000000000000000025261416002254500205370ustar00rootroot00000000000000 OpenDMARC

OpenDMARC


OpenDMARC is a free open source software implementation of the DMARC specification. You can browse the source code, download the latest released version, and access the bug and other issue trackers here.

This work is part of an initiative of The Trusted Domain Project has been sponsored by TrustSphere, Cloudmark, Sendmail, NLNet, American Greetings, Google, ReturnPath, and LinkedIn. Read more here.


Documentation


Copyright © 2012, 2021, The Trusted Domain Project. All rights reserved.