diff options
author | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-06-15 17:08:43 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@highsecure.ru> | 2016-06-15 17:08:43 +0100 |
commit | 03ff229b475f33081610ebff7e2256d2cac98a9d (patch) | |
tree | 2effbb08bac79d0fd94eb993dd8fca598e15f74a /src/ragel | |
parent | 64f5a8946087eca07abab3356dfc8fa339cdd6b4 (diff) | |
download | rspamd-03ff229b475f33081610ebff7e2256d2cac98a9d.tar.gz rspamd-03ff229b475f33081610ebff7e2256d2cac98a9d.zip |
[Feature] Further relax parser
Diffstat (limited to 'src/ragel')
-rw-r--r-- | src/ragel/smtp_received.rl | 8 |
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) { |