On 22/10/15 11:52, Erebus wrote:
> Package: augeas-lenses
> Version: 1.2.0-0.2
> Severity: serious
> Justification: httpd lens is broken in 1.2
>
> Dear Maintainer,
>
> I have learned that augeas-lenses v1.2 includes a broken httpd lens. In
> particular, the 1.2 lens throws errors when an httpd config happens to end
> with
> a comment. This is causing trouble for several other projects.
>
> This issue is fixed in upstream version 1.4.
>
> See also: https://github.com/letsencrypt/letsencrypt/issues/981
Attached is a patch against upstream's Augeas 1.2.0 tarball to resolve
the issue reported on the letsencrypt issue when parsing ssl.conf.
--
Dominic Cleal
Red Hat Engineering
>From 875b63ce9c0eaa72fc1451697b18c60ba50b8165 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Rapha=C3=ABl=20Pinson?=
Date: Tue, 11 Mar 2014 17:41:35 +0100
Subject: [PATCH] Httpd: Allow eol comments after section tags
(cherry picked from commit 3af5c7d44c838b52bbdaf1beb8780fd6a471a77e)
Httpd: Define an eol_comment in section to allow for \n before comment
(cherry picked from commit fb749ea4d1ba4ecd95a5cec6aa7b20b010ef04a8)
Httpd: Do not pass empty as body to section
This causes a conflict with eol_comment over newlines.
`empty` is just a generic part of `section`, not really a body.
(cherry picked from commit 97d3d931fefdfe816e6fb1d6e55a779742f255fa)
Httpd: Make \ illegal in char_arg_dir
Add tests to check non-recursive behaviour
of partial lenses
Fix #223
(cherry picked from commit 3df041be9196a8ca0b7a3e8c90a47b800500cba1)
Httpd: Properly manage eol after opening tag
Allow comments and empty lines after opening tag.
Fix #220
(cherry picked from commit 34980ae52bf4367664ad0551a15c2d1e5a3f2ac4)
---
lenses/httpd.aug| 9 ---
lenses/tests/test_httpd.aug | 62 +
2 files changed, 68 insertions(+), 3 deletions(-)
diff --git a/lenses/httpd.aug b/lenses/httpd.aug
index caea9b6..331d807 100644
--- a/lenses/httpd.aug
+++ b/lenses/httpd.aug
@@ -59,7 +59,7 @@ let empty = Util.empty_dos
let indent = Util.indent
(* borrowed from shellvars.aug *)
-let char_arg_dir = /[^ '"\t\r\n]|"|'/
+let char_arg_dir = /[^\\ '"\t\r\n]|"|'/
let char_arg_sec = /[^ '"\t\r\n>]|"|'/
let dquot = /"([^"\\\r\n]|.)*"/
let squot = /'([^'\\\r\n]|.)*'/
@@ -77,13 +77,16 @@ let directive = [ indent . label "directive" . store word .
(sep_spc . argv arg_dir)? . eol ]
let section (body:lens) =
+(* opt_eol includes empty lines *)
+let opt_eol = del /([ \t]*#?\r?\n)*/ "\n" in
let inner = (sep_spc . argv arg_sec)? . sep_osp .
- dels ">" . eol . body* . indent . dels "" . opt_eol . ((body|comment) . (body|empty|comment)*)? .
+ indent . dels "" ">" . eol ]
-let rec content = section (content|directive|comment|empty)
+let rec content = section (content|directive)
let lns = (content|directive|comment|empty)*
diff --git a/lenses/tests/test_httpd.aug b/lenses/tests/test_httpd.aug
index af6cdc1..bed6cc6 100644
--- a/lenses/tests/test_httpd.aug
+++ b/lenses/tests/test_httpd.aug
@@ -1,5 +1,11 @@
module Test_httpd =
+(* Check that we can iterate on directive *)
+let _ = Httpd.directive+
+
+(* Check that we can do a non iterative section *)
+let _ = Httpd.section Httpd.directive
+
(* directives testing *)
let d1 = "ServerRoot \"/etc/apache2\"\n"
test Httpd.directive get d1 =
@@ -339,3 +345,59 @@ test Httpd.lns get conf2 =
{ }
}
+(* Eol comment *)
+test Httpd.lns get " # a comment
+MyDirective Foo
+\n" =
+ { "a"
+{ "#comment" = "a comment" }
+{ "directive" = "MyDirective" { "arg" = "Foo" } } }
+
+test Httpd.lns get "
+# a comment
+\n" =
+ { "a" { "#comment" = "a comment" } }
+
+(* GH #220 *)
+let double_comment = "
+##
+## Comment
+##
+\n"
+
+test Httpd.lns get double_comment =
+ { "IfDefine"
+{ "arg" = "Foo" }
+{ "#comment" = "#" }
+{ "#comment" = "# Comment" }
+{ "#comment" = "#" }
+ }
+
+let single_comment = "
+#
+## Comment
+##
+\n"
+
+test Httpd.lns get single_comment =
+ { "IfDefine"
+{ "arg" = "Foo" }
+{ "#comment" = "# Comment" }
+{ "#comment" = "#" }
+ }
+
+let single_empty = "
+#
+
+\n"
+test Httpd.lns get single_empty =
+ { "IfDefine"
+{ "arg" = "Foo" }
+ }
+
+let eol_empty = " #
+\n"
+test Httpd.lns get eol_empty =
+ { "IfDefine"
+{ "arg" = "Foo" }
+ }
--
2.4.3