Version 2.0.3 - January 15, 2007 * IPv6 compatibility test fix to support Python 2.2 * Change DNS queries to only check Type SPF in Harsh mode * pyspf requires pydns, python-pyspf requires python-pydns * Record matching mechanism and add to Received-SPF header. * Test for RFC4408 6.2/4, and fix spf.py to comply. * Permerror for more than one exp or redirect modifier. * Parse op= modifier Version 2.0.2 - January 4, 2007 * Update openspf URLs * Update Readme to better describe available pyspf interfaces * Add basic description of type99.py and spfquery.py scripts * Add usage instructions for type99.py DNS RR type conversion script * Add spfquery.py usage instructions * Incorporate downstream feedback from Debian packager * Fix key-value quoting in get_header Version 2.0.1 - December 08, 2006 * Prevent cache poisoning attack * Prevent malformed RR attack * Update license on a few files we missed last time Version 2.0 - November 20, 2006 * Completed RFC 4408 compliance * Added spf.check2 for RFC 4408 compatible result codes * Full IP6 support * Fedora Core compatible RPM spec file * Update README, licenses Version 1.8 - July 26, 2006 * YAML test suite syntax * trailing dot support (RFC4408 8.1) Version 1.7 - July 21, 2005 * Strict processing limits per newly official SPF RFC * Fixed several parsing bugs under RFC * Support official IANA SPF record (type99) * Extended SPF processing results beyond strict RFC limits * Validate spf.py against test suite, and add Received-SPF support to spf.py * Support best_guess for SPF * Support SPF delegation Version 1.6 - December 18, 2003 * Arik Baratz pointed out endian problems using socket.inet_ntoa() and socket.inet_aton(). Use struct.pack("!L", struct.unpack("!L") to fix. Version 1.5 - December 17, 2003 * Replace DNS.addr2bin() and DNS.bin2addr() with socket.inet_ntoa() and socket.inet_aton(). New code supports n, n.n, and n.n.n formats for IPv4 addresses, and gets rid of annoying Python 2.4 future warnings Version 1.4 - December 16, 2003 * Greg Connor discovered that SPF queries to altavista.com were broken. This was testing to see if a mechanism needs to be macro expanded _before_ leading ? + - characters were removed. * Fixed include handling to be a real mechanism: -include must work. Version 1.3.1 - December 14, 2003 * Forgot to include new test file in distribution. * Forgot CHANGELOG in distribution. Version 1.3 - December 13, 2003 * Add %{o} (original sender domain) macro * The ./spf.py {spf} {ipaddr} {sender} {helo} command line didn't print out the results. Oops. * Support default= so Meng's test #6 'v=spf1 default=deny' works * Any IP address '127.*.*.*' automatically pass, so all Meng's tests work * Follow DNS CNAMES * Cache DNS results, including additional info, reducing DNS query load * Support Python 2.2 (doesn't have bool, True, False: those are added in Python 2.2.1) Version 1.2 - December 11, 2003 * Added exp= (explanation) and redirect= modifiers * Added macros Version 1.1 - December 9, 2003 * Meng Weng Wong added PTR code, THANK YOU Version 1.0 - December 9, 2003 * Initial Version