spf-discuss
[Top] [All Lists]

ANNOUNCE: Mail::SPF::Query 1.992 and 1.993 released with Caller-ID support

2004-02-25 21:37:38
On Wed, Feb 25, 2004 at 01:34:05PM +0100, Ernesto Baschny wrote:
| 
| Being in the perl-mood, here is the same stuff in form of a perl module,
| which can be used from other scripts:
| 
|   http://www.baschny.de/spf/LMAP-CID2SPF-0.9.tar.gz
| 
| This also includes the cid2spf script, so this will be the thing
| that I will be maintaining. Should install with the standard
| "perl Makefile.PL; make; make test; make install" procedure.
| 

Mail::SPF::Query version 1.992 has been released; it fixes a couple of
minor bugs and adds support for "fallback" and "override" functionality.

"fallback" lets you pretend a domain has an SPF record.

"override" lets you override a domain's existing SPF record.

http://spf.pobox.com/Mail-SPF-Query-1.992.tar.gz

                                 * * *

Mail::SPF::Query version 1.993 has been released; it adds support for
Caller-ID lookups.  You will need Expat, XML::Parser, and LMAP::CID2SPF
from http://www.baschny.de/spf/LMAP-CID2SPF-0.9.tar.gz (note that the
CID2SPF module name may change in the future; experiment at your own risk.)

Caller-ID may be a patented technology and you may require a license
from Microsoft to use it.  If this worries you, you should download
version 1.992 instead.

Much of Caller-ID's mail server declaration syntax can be translated
into a subset of SPF.  Caller-ID is described in detail at
http://www.microsoft.com/mscorp/twc/privacy/spam_callerid.mspx

The following output demonstrates a lookup against Hotmail.com.

20040225-23:28:48 mengwong(_at_)dumbo:~% perl -MMail::SPF::Query -le 'my $query 
= Mail::SPF::Query->new(ipv4=>$ARGV[0], helo=>$ARGV[1], sender=>$ARGV[2], 
debug=>0); print "result: $_" for $query->result;' 131.107.8.12 
helo.example.com mengwong(_at_)hotmail(_dot_)com
result: pass
result: Please see 
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com:
 131.107.0.0/16 contains 131.107.8.12
result: dumbo.pobox.com: domain of mengwong(_at_)hotmail(_dot_)com designates 
131.107.8.12 as permitted sender
result: v=spf1 include:_ep.list1._ep.hotmail.com 
include:_ep.list2._ep.hotmail.com include:_ep.list3._ep.hotmail.com ?all


20040225-23:28:55 mengwong(_at_)dumbo:~% perl -MMail::SPF::Query -le 'my $query 
= Mail::SPF::Query->new(ipv4=>$ARGV[0], helo=>$ARGV[1], sender=>$ARGV[2], 
debug=>1); print "result: $_" for $query->result;' 131.107.8.12 
helo.example.com mengwong(_at_)hotmail(_dot_)com
|         hotmail.com new: ipv4=131.107.8.12, sender(_at_)ΠõæTCì¤ê?(?2Ø, 
helo=helo.example.com
|        mengwong hotmail.com localpart is mengwong
|        mengwong hotmail.com   DirectiveSet->new(): doing TXT query on 
hotmail.com
|        mengwong hotmail.com   myquery: doing TXT query on hotmail.com
|        mengwong hotmail.com   DirectiveSet->new(): TXT query on hotmail.com 
returned error=, last_dns_error=
|        mengwong hotmail.com   DirectiveSet->new(): will try fallbacks.
|        mengwong hotmail.com   DirectiveSet->new(): fallback search failed.
|        mengwong hotmail.com   DirectiveSet->new(): doing TXT query on 
_ep.hotmail.com
|        mengwong hotmail.com   myquery: doing TXT query on _ep.hotmail.com
|        mengwong hotmail.com   DirectiveSet->new(): TXT query on hotmail.com 
returned error=, last_dns_error=NOERROR
|        mengwong hotmail.com   CID2SPF:  in: <ep xmlns='http://ms.net/1' 
testing='true'><out><m><indirect>list1._ep.hotmail.com</indirect><indirect>list2._ep.hotmail.com</indirect><indirect>list3._ep.hotmail.com</indirect></m></out></ep>
|        mengwong hotmail.com   CID2SPF: out: v=spf1 
include:_ep.list1._ep.hotmail.com include:_ep.list2._ep.hotmail.com 
include:_ep.list3._ep.hotmail.com ?all
|        mengwong hotmail.com   DirectiveSet->new(): SPF policy:  
include:_ep.list1._ep.hotmail.com include:_ep.list2._ep.hotmail.com 
include:_ep.list3._ep.hotmail.com ?all
|        mengwong hotmail.com   lookup:   TXT  
include:_ep.list1._ep.hotmail.com include:_ep.list2._ep.hotmail.com 
include:_ep.list3._ep.hotmail.com ?all
|        mengwong hotmail.com   lookup:   TXT prefix=+, lhs=include, 
rhs=_ep.list1._ep.hotmail.com
|        mengwong hotmail.com   lookup:   TXT prefix=+, lhs=include, 
rhs=_ep.list2._ep.hotmail.com
|        mengwong hotmail.com   lookup:   TXT prefix=+, lhs=include, 
rhs=_ep.list3._ep.hotmail.com
|        mengwong hotmail.com   lookup:   TXT prefix=?, lhs=all, rhs=
|        mengwong hotmail.com   lookup:  mec 
mechanisms=+include(_ep.list1._ep.hotmail.com) 
+include(_ep.list2._ep.hotmail.com) +include(_ep.list3._ep.hotmail.com) ?all()
|        mengwong hotmail.com   evaluate_mechanism: 
+include(_ep.list1._ep.hotmail.com) for domain=hotmail.com
|        mengwong hotmail.com   mechanism include: recursing into 
_ep.list1._ep.hotmail.com
|        mengwong hotmail.com   clone: new object:
||       mengwong _ep.list1._ep.hotmail.com clone:               parent = 
Mail::SPF::Query=HASH(0x80f001c)
||       mengwong _ep.list1._ep.hotmail.com clone:                 ipv4 = 
131.107.8.12
||       mengwong _ep.list1._ep.hotmail.com clone:                 helo = 
helo.example.com
||       mengwong _ep.list1._ep.hotmail.com clone:         lookup_count = 1
||       mengwong _ep.list1._ep.hotmail.com clone:  default_explanation = 
Please see http://spf.pobox.com/why.html?sender=%{S}&ip=%{I}&receiver=%{xR}
||       mengwong _ep.list1._ep.hotmail.com clone:          loop_report = 
ARRAY(0x8303ba4)
||       mengwong _ep.list1._ep.hotmail.com clone:           spf_source = 
domain of mengwong(_at_)hotmail(_dot_)com
||       mengwong _ep.list1._ep.hotmail.com clone:        directive_set = 
DirectiveSet=HASH(0x8393fa4)
||       mengwong _ep.list1._ep.hotmail.com clone:               domain = 
_ep.list1._ep.hotmail.com
||       mengwong _ep.list1._ep.hotmail.com clone:              trusted =
||       mengwong _ep.list1._ep.hotmail.com clone:                debug = 1
||       mengwong _ep.list1._ep.hotmail.com clone:                guess =
||       mengwong _ep.list1._ep.hotmail.com clone:       last_dns_error = 
NOERROR
||       mengwong _ep.list1._ep.hotmail.com clone:            localpart = 
mengwong
||       mengwong _ep.list1._ep.hotmail.com clone: spf_error_explanation = SPF 
record error
||       mengwong _ep.list1._ep.hotmail.com clone:       default_record =
||       mengwong _ep.list1._ep.hotmail.com clone:                depth = 1
||       mengwong _ep.list1._ep.hotmail.com clone:          orig_domain = 
hotmail.com
||       mengwong _ep.list1._ep.hotmail.com clone:                  res = 
Net::DNS::Resolver=HASH(0x80fabc8)
||       mengwong _ep.list1._ep.hotmail.com clone:           myhostname = 
dumbo.pobox.com
||       mengwong _ep.list1._ep.hotmail.com clone:                local =
||       mengwong _ep.list1._ep.hotmail.com clone:          Reversed_IP = 
12.8.107.131
||       mengwong _ep.list1._ep.hotmail.com clone:             sanitize = 
CODE(0x8329ca4)
||       mengwong _ep.list1._ep.hotmail.com clone:               sender = 
mengwong(_at_)hotmail(_dot_)com
||       mengwong _ep.list1._ep.hotmail.com   DirectiveSet->new(): doing TXT 
query on _ep._ep.list1._ep.hotmail.com
||       mengwong _ep.list1._ep.hotmail.com   myquery: doing TXT query on 
_ep.list1._ep.hotmail.com
||       mengwong _ep.list1._ep.hotmail.com   DirectiveSet->new(): TXT query on 
_ep.list1._ep.hotmail.com returned error=, last_dns_error=NOERROR
||       mengwong _ep.list1._ep.hotmail.com   CID2SPF:  in: <ep 
xmlns='http://ms.net/1' 
testing='true'><out><m><r>209.240.192.0/19</r><r>65.52.0.0/14</r><r>131.107.0.0/16</r><r>157.54.0.0/15</r><r>157.56.0.0/14</r><r>157.60.0.0/16</r><r>167.220.0.0/16</r><r>204.79.135.0/24</r><r>204.79.188.0/24</r><r>204.79.252.0/24</r><r>207.46.0.0/16</r><r>199.2.137.0/24</r><r>199.103.90.0/23</r></m></out></ep>
||       mengwong _ep.list1._ep.hotmail.com   CID2SPF: out: v=spf1 
ip4:209.240.192.0/19 ip4:65.52.0.0/14 ip4:131.107.0.0/16 ip4:157.54.0.0/15 
ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16 ip4:204.79.135.0/24 
ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24 
ip4:199.103.90.0/23 ?all
||       mengwong _ep.list1._ep.hotmail.com   DirectiveSet->new(): SPF policy:  
ip4:209.240.192.0/19 ip4:65.52.0.0/14 ip4:131.107.0.0/16 ip4:157.54.0.0/15 
ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16 ip4:204.79.135.0/24 
ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24 
ip4:199.103.90.0/23 ?all
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT  
ip4:209.240.192.0/19 ip4:65.52.0.0/14 ip4:131.107.0.0/16 ip4:157.54.0.0/15 
ip4:157.56.0.0/14 ip4:157.60.0.0/16 ip4:167.220.0.0/16 ip4:204.79.135.0/24 
ip4:204.79.188.0/24 ip4:204.79.252.0/24 ip4:207.46.0.0/16 ip4:199.2.137.0/24 
ip4:199.103.90.0/23 ?all
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=209.240.192.0/19
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=65.52.0.0/14
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=131.107.0.0/16
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=157.54.0.0/15
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=157.56.0.0/14
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=157.60.0.0/16
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=167.220.0.0/16
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=204.79.135.0/24
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=204.79.188.0/24
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=204.79.252.0/24
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=207.46.0.0/16
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=199.2.137.0/24
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=+, lhs=ip4, 
rhs=199.103.90.0/23
||       mengwong _ep.list1._ep.hotmail.com   lookup:   TXT prefix=?, lhs=all, 
rhs=
||       mengwong _ep.list1._ep.hotmail.com   lookup:  mec 
mechanisms=+ip4(209.240.192.0/19) +ip4(65.52.0.0/14) +ip4(131.107.0.0/16) 
+ip4(157.54.0.0/15) +ip4(157.56.0.0/14) +ip4(157.60.0.0/16) 
+ip4(167.220.0.0/16) +ip4(204.79.135.0/24) +ip4(204.79.188.0/24) 
+ip4(204.79.252.0/24) +ip4(207.46.0.0/16) +ip4(199.2.137.0/24) 
+ip4(199.103.90.0/23) ?all()
||       mengwong _ep.list1._ep.hotmail.com   evaluate_mechanism: 
+ip4(209.240.192.0/19) for domain=_ep.list1._ep.hotmail.com
||       mengwong _ep.list1._ep.hotmail.com   mechanism ip4: looking for 
131.107.8.12 in 209.240.192.0/19
||       mengwong _ep.list1._ep.hotmail.com   evaluate_mechanism: 
+ip4(209.240.192.0/19) returned
||       mengwong _ep.list1._ep.hotmail.com   evaluate_mechanism: 
+ip4(65.52.0.0/14) for domain=_ep.list1._ep.hotmail.com
||       mengwong _ep.list1._ep.hotmail.com   mechanism ip4: looking for 
131.107.8.12 in 65.52.0.0/14
||       mengwong _ep.list1._ep.hotmail.com   evaluate_mechanism: 
+ip4(65.52.0.0/14) returned
||       mengwong _ep.list1._ep.hotmail.com   evaluate_mechanism: 
+ip4(131.107.0.0/16) for domain=_ep.list1._ep.hotmail.com
||       mengwong _ep.list1._ep.hotmail.com   mechanism ip4: looking for 
131.107.8.12 in 131.107.0.0/16
||       mengwong _ep.list1._ep.hotmail.com   evaluate_mechanism: 
+ip4(131.107.0.0/16) returned hit 131.107.0.0/16 contains 131.107.8.12
||       mengwong _ep.list1._ep.hotmail.com   saving result pass to cache point 
and returning.
||       mengwong _ep.list1._ep.hotmail.com   macro_substitute_item: S: 
field=S, num=, reverse=, delim=., newval=mengwong%40hotmail.com
||       mengwong _ep.list1._ep.hotmail.com   macro_substitute_item: I: 
field=I, num=, reverse=, delim=., newval=131.107.8.12
||       mengwong _ep.list1._ep.hotmail.com   macro_substitute_item: xR: 
field=xR, num=, reverse=, delim=., newval=dumbo.pobox.com
||       mengwong _ep.list1._ep.hotmail.com   macro_substitute: Please see 
http://spf.pobox.com/why.html?sender=%{S}&ip=%{I}&receiver=%{xR} -> Please see 
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com
|        mengwong hotmail.com   mechanism include: got back result pass / 
131.107.0.0/16 contains 131.107.8.12 /
|        mengwong hotmail.com   evaluate_mechanism: 
+include(_ep.list1._ep.hotmail.com) returned hit 131.107.0.0/16 contains 
131.107.8.12
|        mengwong hotmail.com   saving result pass to cache point and returning.
|        mengwong hotmail.com   macro_substitute_item: S: field=S, num=, 
reverse=, delim=., newval=mengwong%40hotmail.com
|        mengwong hotmail.com   macro_substitute_item: I: field=I, num=, 
reverse=, delim=., newval=131.107.8.12
|        mengwong hotmail.com   macro_substitute_item: xR: field=xR, num=, 
reverse=, delim=., newval=dumbo.pobox.com
|        mengwong hotmail.com   macro_substitute: Please see 
http://spf.pobox.com/why.html?sender=%{S}&ip=%{I}&receiver=%{xR} -> Please see 
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com
result: pass
result: Please see 
http://spf.pobox.com/why.html?sender=mengwong%40hotmail.com&ip=131.107.8.12&receiver=dumbo.pobox.com:
 131.107.0.0/16 contains 131.107.8.12
result: dumbo.pobox.com: domain of mengwong(_at_)hotmail(_dot_)com designates 
131.107.8.12 as permitted sender
result: v=spf1 include:_ep.list1._ep.hotmail.com 
include:_ep.list2._ep.hotmail.com include:_ep.list3._ep.hotmail.com ?all

-------
To unsubscribe, change your address, or temporarily deactivate your 
subscription, 
please go to http://v2.listbox.com/member/?listname(_at_)Ë`Ì{5¤¨wâÇSÓ°)h


<Prev in Thread] Current Thread [Next in Thread>