From e60179b91f0a9ddb1467cf0e0a1fa6d59124e1b1 Mon Sep 17 00:00:00 2001 From: Landy Chan Date: Wed, 30 Oct 2019 13:51:20 -0700 Subject: [PATCH 1/2] Added regex identifier --- lib/inspec/utils/nginx_parser.rb | 6 +++++- test/unit/utils/nginx_parser_test.rb | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/inspec/utils/nginx_parser.rb b/lib/inspec/utils/nginx_parser.rb index de91fc6af..3b8a20ff8 100644 --- a/lib/inspec/utils/nginx_parser.rb +++ b/lib/inspec/utils/nginx_parser.rb @@ -25,8 +25,12 @@ class NginxParser < Parslet::Parser str('"') >> (str('"').absent? >> any).repeat.as(:identifier) >> str('"') >> space.repeat end + rule(:regex_identifier) do + (str("~") >> match('\S').repeat).as(:identifier) >> space >> space.repeat + end + rule(:identifier) do - standard_identifier | quoted_identifier + standard_identifier | quoted_identifier | regex_identifier end rule(:standard_value) do diff --git a/test/unit/utils/nginx_parser_test.rb b/test/unit/utils/nginx_parser_test.rb index 11ad3fdaf..96dadd81e 100644 --- a/test/unit/utils/nginx_parser_test.rb +++ b/test/unit/utils/nginx_parser_test.rb @@ -85,6 +85,10 @@ describe NginxParser do it "parses quoted identifiers for assignments" do _(parsestr(%{"~^\/opcache-api" 1;})).must_equal "[{:assignment=>{:identifier=>\"~^/opcache-api\"@1, :args=>[{:value=>\"1\"@17}]}}]" end + + it "parses regex identifiers for assignments" do + _(parsestr(%{~^\/opcache-api 1;})).must_equal "[{:assignment=>{:identifier=>\"~^/opcache-api\"@0, :args=>[{:value=>\"1\"@15}]}}]" + end end describe NginxTransform do From 9e38bec3962443d9331e81d04b5e0d0dfc8bbfed Mon Sep 17 00:00:00 2001 From: Landy Chan Date: Wed, 30 Oct 2019 15:16:21 -0700 Subject: [PATCH 2/2] Added wildcard and dot-prefixed identifier support. Combined regex identifier into standard identifier Signed-off-by: Landy Chan --- lib/inspec/utils/nginx_parser.rb | 8 ++------ test/unit/utils/nginx_parser_test.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/inspec/utils/nginx_parser.rb b/lib/inspec/utils/nginx_parser.rb index 3b8a20ff8..f032a2d41 100644 --- a/lib/inspec/utils/nginx_parser.rb +++ b/lib/inspec/utils/nginx_parser.rb @@ -18,19 +18,15 @@ class NginxParser < Parslet::Parser end rule(:standard_identifier) do - (match("[a-zA-Z]") >> match('\S').repeat).as(:identifier) >> space >> space.repeat + (match("[a-zA-Z~*.]") >> match('\S').repeat).as(:identifier) >> space >> space.repeat end rule(:quoted_identifier) do str('"') >> (str('"').absent? >> any).repeat.as(:identifier) >> str('"') >> space.repeat end - rule(:regex_identifier) do - (str("~") >> match('\S').repeat).as(:identifier) >> space >> space.repeat - end - rule(:identifier) do - standard_identifier | quoted_identifier | regex_identifier + standard_identifier | quoted_identifier end rule(:standard_value) do diff --git a/test/unit/utils/nginx_parser_test.rb b/test/unit/utils/nginx_parser_test.rb index 96dadd81e..8adb3264c 100644 --- a/test/unit/utils/nginx_parser_test.rb +++ b/test/unit/utils/nginx_parser_test.rb @@ -89,6 +89,15 @@ describe NginxParser do it "parses regex identifiers for assignments" do _(parsestr(%{~^\/opcache-api 1;})).must_equal "[{:assignment=>{:identifier=>\"~^/opcache-api\"@0, :args=>[{:value=>\"1\"@15}]}}]" end + + it "parses wildcard identifiers for assignments" do + _(parsestr(%{*.example.org qa;})).must_equal "[{:assignment=>{:identifier=>\"*.example.org\"@0, :args=>[{:value=>\"qa\"@14}]}}]" + end + + it "parses dot-prefixed identifiers for assignments" do + _(parsestr(%{.example.com test;})).must_equal "[{:assignment=>{:identifier=>\".example.com\"@0, :args=>[{:value=>\"test\"@13}]}}]" + end + end describe NginxTransform do