diff options
Diffstat (limited to 'tools/skrewt.c')
-rw-r--r-- | tools/skrewt.c | 39 |
1 files changed, 31 insertions, 8 deletions
diff --git a/tools/skrewt.c b/tools/skrewt.c index a7e144f..bcbfb16 100644 --- a/tools/skrewt.c +++ b/tools/skrewt.c @@ -39,6 +39,7 @@ void usage(const int sts){ #include "qq_exit_codes.h" #include "utils.h" +#include "sepofra.h" ///////////////////////////////////////////////////////// // Case insensitive comparison of strings @@ -224,8 +225,15 @@ Received: from ip68-231-191-153.tc.ph.cox.net (HELO asclepias.av8n.net) (smtp@68 #endif #if 0 /* good for testing */ +// random mail from FAA /home/jsd/Maildir/cur/1343769926.24228.cloud\:2\, +// has a good SPF result buried inside, at an earlier hop: +/home/jsd/Maildir/cur/1342372942.24810.cloud:2, + +// has a good SPF as delivered to us: +/home/jsd/Maildir/cur/1343671179.10420.cloud:2, + // The following msg has no message-id, but does have an // authorized submitter: /home/jsd/Maildir/cur/1342363199.24320.cloud:2, @@ -352,14 +360,29 @@ int skrewt::interstage(){ if (saw_blank_line) {/* ignore */} // Note that the headers are in reverse-chronological order: cerr << progid <<" Return-path: " << return_path <<endl; - cerr << " Received: " << received_from <<endl; - int rslt = krunch_rfrom(); - if (rslt) return rslt; - cerr << " rDNS: " << proximta_rDNS << endl; - cerr << " HELO: " << proximta_HELO << endl; - cerr << " IP: " << proximta_IP << endl; - cerr << " AuthUser: " << proximta_AuthUser << endl; - cerr << " Mid '" << message_id << "'" << endl; + + { // parse the 'Received: from' line: + cerr << " Received: " << received_from <<endl; + int rslt = krunch_rfrom(); + if (rslt) return rslt; + cerr << " rDNS: " << proximta_rDNS << endl; + cerr << " HELO: " << proximta_HELO << endl; + cerr << " IP: " << proximta_IP << endl; + cerr << " AuthUser: " << proximta_AuthUser << endl; + cerr << " Mid '" << message_id << "'" << endl; + } + + sepofra my_spf; + try { + my_spf.check(proximta_IP, + proximta_HELO, + return_path, + "junk", 0/* verbosity */); + cerr << "*** " << my_spf.explain() << endl; + } catch (bad_thing foo) { + cerr << "Caught bad thing: " << foo.what() << endl; + return ex_syserr; + } // The logic here is: In order: // 1) If whitelisted, accept. No greylisting, no spam-checking. |