summaryrefslogtreecommitdiff
path: root/tools/skrewt.c
diff options
context:
space:
mode:
authorJohn Denker <jsd@av8n.com>2012-08-01 01:05:47 (GMT)
committerJohn Denker <jsd@av8n.com>2012-08-01 01:05:47 (GMT)
commit3f3c46c8ee8ef118ce73da7d3235364edf390cfe (patch)
treea778fd503eae3a1c3baf418628e1c8301e4c540c /tools/skrewt.c
parent2bda79fc4e14a9250ad6ebefb67c7379067a4a42 (diff)
possibly working parse of the 'Received: from' line
Diffstat (limited to 'tools/skrewt.c')
-rw-r--r--tools/skrewt.c32
1 files changed, 27 insertions, 5 deletions
diff --git a/tools/skrewt.c b/tools/skrewt.c
index daa3224..a7e144f 100644
--- a/tools/skrewt.c
+++ b/tools/skrewt.c
@@ -184,6 +184,7 @@ public:
string proximta_HELO;
string proximta_rDNS;
string proximta_IP;
+ string proximta_AuthUser;
string return_path; // envelope MAIL FROM
string boundary;
string to;
@@ -222,6 +223,14 @@ Received: from 24-145-119-127-dhcp.gsv.md.atlanticbb.net (HELO mail.phys-l.org)
Received: from ip68-231-191-153.tc.ph.cox.net (HELO asclepias.av8n.net) (smtp@68.231.191.153) by cloud.av8n.com with SMTP; 15 Jul 2012 14:39:58 -0000
#endif
+#if 0 /* good for testing */
+/home/jsd/Maildir/cur/1343769926.24228.cloud\:2\,
+
+// The following msg has no message-id, but does have an
+// authorized submitter:
+/home/jsd/Maildir/cur/1342363199.24320.cloud:2,
+#endif
+
int skrewt::krunch_rfrom(){
stringstream parse;
parse.str(received_from);
@@ -237,11 +246,22 @@ int skrewt::krunch_rfrom(){
if (word == "(HELO") {
parse >> proximta_HELO;
proximta_HELO = rtrim(proximta_HELO, "()");
+ parse >> word;
} else {
proximta_HELO = proximta_rDNS;
}
-
-
+ size_t len = word.length();
+ if (len<2 || word[0] != '(' || word[len-1] != ')') {
+ cerr << progid << " bad 'Received: from' line ;;; '"
+ << word << "'" << endl;
+ return ex_syserr;
+ }
+ proximta_IP = word.substr(1, len-2);
+ size_t where = proximta_IP.find("@");
+ if (where != string::npos){
+ proximta_AuthUser = proximta_IP.substr(0, where);
+ proximta_IP = proximta_IP.substr(1+where);
+ }
return 0;
}
@@ -335,9 +355,11 @@ int skrewt::interstage(){
cerr << " Received: " << received_from <<endl;
int rslt = krunch_rfrom();
if (rslt) return rslt;
- cerr << " rDNS: " << proximta_rDNS << endl;
- cerr << " HELO: " << proximta_HELO << endl;
- cerr << " Mid '" << message_id << "'" << endl;
+ 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;
// The logic here is: In order:
// 1) If whitelisted, accept. No greylisting, no spam-checking.