From: Vsevolod Stakhov Date: Sat, 8 Jan 2022 14:34:58 +0000 (+0000) Subject: [Minor] Add authentication results parser function X-Git-Tag: 3.2~116 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3f14f4a3e583593cb55bdd5604db3d9af8e65da5;p=thirdparty%2Frspamd.git [Minor] Add authentication results parser function --- diff --git a/lualib/lua_auth_results.lua b/lualib/lua_auth_results.lua index f7a319f483..7b41e6ff52 100644 --- a/lualib/lua_auth_results.lua +++ b/lualib/lua_auth_results.lua @@ -275,4 +275,28 @@ end exports.gen_auth_results = gen_auth_results +local aar_elt_grammar +-- This function parses an ar element to a table of kv pairs that represents different +-- elements +local function parse_ar_element(elt) + + if not aar_elt_grammar then + -- Generate grammar + local lpeg = require "lpeg" + local P = lpeg.P + local S = lpeg.S + local V = lpeg.V + local C = lpeg.C + local space = S(" ")^0 + local doublequoted = space * P'"' * ((1 - S'"\r\n\f\\') + (P'\\' * 1))^0 * '"' * space + local comment = space * P{ "(" * ((1 - S"()") + V(1))^0 * ")" } * space + local name = C((1 - S('=(" '))^1) * space + local pair = lpeg.Cg(name * "=" * space * name) * space + aar_elt_grammar = lpeg.Cf(lpeg.Ct("") * (pair + comment + doublequoted)^1, rawset) + end + + return aar_elt_grammar:match(elt) +end +exports.parse_ar_element = parse_ar_element + return exports