aboutsummaryrefslogtreecommitdiffstats
path: root/src/ragel
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2016-06-15 17:08:43 +0100
committerVsevolod Stakhov <vsevolod@highsecure.ru>2016-06-15 17:08:43 +0100
commit03ff229b475f33081610ebff7e2256d2cac98a9d (patch)
tree2effbb08bac79d0fd94eb993dd8fca598e15f74a /src/ragel
parent64f5a8946087eca07abab3356dfc8fa339cdd6b4 (diff)
downloadrspamd-03ff229b475f33081610ebff7e2256d2cac98a9d.tar.gz
rspamd-03ff229b475f33081610ebff7e2256d2cac98a9d.zip
[Feature] Further relax parser
Diffstat (limited to 'src/ragel')
-rw-r--r--src/ragel/smtp_received.rl8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/ragel/smtp_received.rl b/src/ragel/smtp_received.rl
index 67a52e7cf..f4a0ed7ba 100644
--- a/src/ragel/smtp_received.rl
+++ b/src/ragel/smtp_received.rl
@@ -23,7 +23,8 @@
( Domain >Real_Domain_Start %Real_Domain_End FWS address_literal >Real_IP_Start %Real_IP_End );
Extended_Domain = Domain >Real_Domain_Start %Real_Domain_End | # Used to be a real domain
( Domain >Reported_Domain_Start %Reported_Domain_End FWS "(" TCP_info ")" ) | # Here domain is something specified by remote side
- ( address_literal >Real_Domain_Start %Real_Domain_End FWS "(" TCP_info ")" );
+ ( address_literal >Real_Domain_Start %Real_Domain_End FWS "(" TCP_info ")" ) |
+ address_literal >Real_IP_Start %Real_IP_End; # Not RFC conforming, but many MTA try this
ccontent = ctext | FWS | '(' @{ fcall balanced_ccontent; };
balanced_ccontent := ccontent* ')' @{ fret; };
@@ -31,7 +32,7 @@
CFWS = ((FWS? comment)+ FWS?) | FWS;
From_domain = "FROM"i FWS Extended_Domain >From_Start %From_End;
- By_domain = CFWS "BY"i FWS Extended_Domain >By_Start %By_End;
+ By_domain = "BY"i FWS Extended_Domain >By_Start %By_End;
Via = CFWS "VIA"i FWS Link;
With = CFWS "WITH"i FWS Protocol;
@@ -45,7 +46,8 @@
For = CFWS "FOR"i FWS ( Path | Mailbox ) %For_End;
Additional_Registered_Clauses = CFWS Atom FWS String;
Opt_info = Via? With? ID? For? Additional_Registered_Clauses?;
- Received = From_domain By_domain Opt_info CFWS? ";" FWS date_time >Date_Start %Date_End CFWS?;
+ # Here we make From part optional just because many received headers lack it
+ Received = From_domain? CFWS? By_domain? CFWS? Opt_info CFWS? ";" FWS date_time >Date_Start %Date_End CFWS?;
prepush {
if (top >= st_storage.size) {