summaryrefslogtreecommitdiff
path: root/tools/skrewt.c
diff options
context:
space:
mode:
authorJohn Denker <jsd@av8n.com>2012-07-31 18:48:21 -0700
committerJohn Denker <jsd@av8n.com>2012-07-31 18:48:21 -0700
commitcff5a7b49c4151fdc55e085b150385259d0dc781 (patch)
tree2b454bf555a8422e4bde885967f58cb4240404d3 /tools/skrewt.c
parentea83c5d01a7e075dc5cd7ddf808e2a275f2dd68b (diff)
might actually have a working SPF check
Diffstat (limited to 'tools/skrewt.c')
-rw-r--r--tools/skrewt.c39
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.