diff --git a/SOURCES/0001-Grub-support-in-kernel-command-line-option-names-647.patch b/SOURCES/0001-Grub-support-in-kernel-command-line-option-names-647.patch new file mode 100644 index 0000000..9fa5246 --- /dev/null +++ b/SOURCES/0001-Grub-support-in-kernel-command-line-option-names-647.patch @@ -0,0 +1,58 @@ +From 800b8bb56b983e00f2c95183d0ff226172545d35 Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Wed, 23 Oct 2019 11:35:57 +0200 +Subject: [PATCH] Grub: support '+' in kernel command line option names (#647) + +This way it is possible to parse files that pass options with '+' in the +name to the kernel. + +(cherry picked from commit 2ba77589baee1bf2d43d3a49f8e6f3eb522e5bba) +--- + lenses/grub.aug | 2 +- + lenses/tests/test_grub.aug | 17 +++++++++++++++++ + 2 files changed, 18 insertions(+), 1 deletion(-) + +diff --git a/lenses/grub.aug b/lenses/grub.aug +index 24ad39bc..82c1c37a 100644 +--- a/lenses/grub.aug ++++ b/lenses/grub.aug +@@ -196,7 +196,7 @@ module Grub = + (* View: kernel_args + Parse the file name and args on a kernel or module line. *) + let kernel_args = +- let arg = /[A-Za-z0-9_.$-]+/ - /type|no-mem-option/ in ++ let arg = /[A-Za-z0-9_.$\+-]+/ - /type|no-mem-option/ in + store /(\([a-z0-9,]+\))?\/[^ \t\n]*/ . + (spc . multiboot_arg)? . + (spc . [ key arg . (eq. store /([^ \t\n])*/)?])* . eol +diff --git a/lenses/tests/test_grub.aug b/lenses/tests/test_grub.aug +index 75657203..e50bdc4f 100644 +--- a/lenses/tests/test_grub.aug ++++ b/lenses/tests/test_grub.aug +@@ -258,6 +258,23 @@ password --encrypted ^9^32kwzzX./3WISQ0C /boot/grub/custom.lst + { "md5" } + } } + ++ (* Test kernel options with different special characters. *) ++ test Grub.lns get "title Fedora (2.6.24.4-64.fc8) ++ root (hd0,0) ++ kernel /vmlinuz-2.6.24.4-64.fc8 ro root=/dev/vg00/lv00 with.dot=1 with-dash=1 with_underscore=1 with+plus=1 ++ initrd /initrd-2.6.24.4-64.fc8.img\n" = ++ { "title" = "Fedora (2.6.24.4-64.fc8)" ++ { "root" = "(hd0,0)" } ++ { "kernel" = "/vmlinuz-2.6.24.4-64.fc8" ++ { "ro" } ++ { "root" = "/dev/vg00/lv00" } ++ { "with.dot" = "1" } ++ { "with-dash" = "1" } ++ { "with_underscore" = "1" } ++ { "with+plus" = "1" } ++ } ++ { "initrd" = "/initrd-2.6.24.4-64.fc8.img" } } ++ + (* Test parsing of invalid entries via menu_error *) + test Grub.lns get "default=0\ncrud=no\n" = + { "default" = "0" } +-- +2.24.1 + diff --git a/SOURCES/0001-Krb5-improve-dbmodules-and-includes-630.patch b/SOURCES/0001-Krb5-improve-dbmodules-and-includes-630.patch deleted file mode 100644 index 71755fa..0000000 --- a/SOURCES/0001-Krb5-improve-dbmodules-and-includes-630.patch +++ /dev/null @@ -1,133 +0,0 @@ -From 5a7471c72f0a5a5de43c81e8a058130aaf5b4545 Mon Sep 17 00:00:00 2001 -From: Pino Toscano -Date: Tue, 4 Feb 2020 17:54:22 +0100 -Subject: [PATCH] Krb5: improve [dbmodules] and includes (#630) - -* Krb5: fix/revamp parsing of [dbmodules] subsection - -The [dbmodules] subsection so far was parsed much like the [dbdefaults] -one, and thus it did not handle realms. - -Revamp it a bit to handle realms, and specify the only keyword not in -realm subsections. - -* Krb5: allow include/includedir directives everywhere - -MIT Kerberos allows this, so do not restrict them only before any other -section. ---- - lenses/krb5.aug | 27 +++++++++++++++++++-------- - lenses/tests/test_krb5.aug | 36 +++++++++++++++++++++++++++++++++++- - 2 files changed, 54 insertions(+), 9 deletions(-) - -diff --git a/lenses/krb5.aug b/lenses/krb5.aug -index 46c22656..6b509c42 100644 ---- a/lenses/krb5.aug -+++ b/lenses/krb5.aug -@@ -21,10 +21,11 @@ let closebr = del /[ \t]*\}/ "}" - and realms in the [appdefaults] section. - *) - -+let include_re = /include(dir)?/ - let realm_re = /[A-Z0-9][.a-zA-Z0-9-]*/ - let realm_anycase_re = /[A-Za-z0-9][.a-zA-Z0-9-]*/ - let app_re = /[a-z][a-zA-Z0-9_]*/ --let name_re = /[.a-zA-Z0-9_-]+/ -+let name_re = /[.a-zA-Z0-9_-]+/ - include_re - - let value_br = store /[^;# \t\r\n{}]+/ - let value = store /[^;# \t\r\n]+/ -@@ -130,10 +131,19 @@ let dbdefaults = - simple_section "dbdefaults" keys - - let dbmodules = -- let keys = /db_library|ldap_kerberos_container_dn|ldap_kdc_dn/ -- |/ldap_kadmind_dn|ldap_service_password_file|ldap_servers/ -- |/ldap_conns_per_server/ in -- simple_section "dbmodules" keys -+ let subsec_key = /database_name|db_library|disable_last_success/ -+ |/disable_lockout|ldap_conns_per_server|ldap_(kdc|kadmind)_dn/ -+ |/ldap_(kdc|kadmind)_sasl_mech|ldap_(kdc|kadmind)_sasl_authcid/ -+ |/ldap_(kdc|kadmind)_sasl_authzid|ldap_(kdc|kadmind)_sasl_realm/ -+ |/ldap_kerberos_container_dn|ldap_servers/ -+ |/ldap_service_password_file|mapsize|max_readers|nosync/ -+ |/unlockiter/ in -+ let subsec_option = subsec_entry subsec_key eq comment in -+ let key = /db_module_dir/ in -+ let option = entry key eq value comment in -+ let realm = [ indent . label "realm" . store realm_re . -+ eq_openbr . (subsec_option)* . closebr . eol ] in -+ record "dbmodules" (option|realm) - - (* This section is not documented in the krb5.conf manpage, - but the Fermi example uses it. *) -@@ -152,11 +162,12 @@ let kdc = - let pam = - simple_section "pam" name_re - --let includes = Build.key_value_line /include(dir)?/ Sep.space (store Rx.fspath) -+let includes = Build.key_value_line include_re Sep.space (store Rx.fspath) -+let include_lines = includes . (comment|empty)* - --let lns = (comment|empty|includes)* . -+let lns = (comment|empty)* . - (libdefaults|login|appdefaults|realms|domain_realm -- |logging|capaths|dbdefaults|dbmodules|instance_mapping|kdc|pam)* -+ |logging|capaths|dbdefaults|dbmodules|instance_mapping|kdc|pam|include_lines)* - - let filter = (incl "/etc/krb5.conf.d/*.conf") - . (incl "/etc/krb5.conf") -diff --git a/lenses/tests/test_krb5.aug b/lenses/tests/test_krb5.aug -index f746543b..10b87605 100644 ---- a/lenses/tests/test_krb5.aug -+++ b/lenses/tests/test_krb5.aug -@@ -1029,7 +1029,7 @@ default_ccache_name = KEYRING:persistent:%{uid}\n" = - { } - { "default_ccache_name" = "KEYRING:persistent:%{uid}" } } - --(* Include(dir) test *) -+(* Include(dir) tests *) - let include_test = "include /etc/krb5.other_conf.d/other.conf - includedir /etc/krb5.conf.d/ - " -@@ -1037,3 +1037,37 @@ includedir /etc/krb5.conf.d/ - test Krb5.lns get include_test = - { "include" = "/etc/krb5.other_conf.d/other.conf" } - { "includedir" = "/etc/krb5.conf.d/" } -+ -+let include2_test = "[logging] -+ default = FILE:/var/log/krb5libs.log -+ -+include /etc/krb5.other_conf.d/other.conf -+ -+includedir /etc/krb5.conf.d/ -+" -+ -+test Krb5.lns get include2_test = -+ { "logging" -+ { "default" -+ { "file" = "/var/log/krb5libs.log" } } -+ { } -+ } -+ { "include" = "/etc/krb5.other_conf.d/other.conf" } -+ { } -+ { "includedir" = "/etc/krb5.conf.d/" } -+ -+(* [dbmodules] test *) -+let dbmodules_test = "[dbmodules] -+ ATHENA.MIT.EDU = { -+ disable_last_success = true -+ } -+ db_module_dir = /some/path -+" -+ -+test Krb5.lns get dbmodules_test = -+ { "dbmodules" -+ { "realm" = "ATHENA.MIT.EDU" -+ { "disable_last_success" = "true" } -+ } -+ { "db_module_dir" = "/some/path" } -+ } --- -2.24.1 - diff --git a/SOURCES/0002-Rsyslog-support-multiple-actions-in-filters-and-sele.patch b/SOURCES/0002-Rsyslog-support-multiple-actions-in-filters-and-sele.patch new file mode 100644 index 0000000..26045d1 --- /dev/null +++ b/SOURCES/0002-Rsyslog-support-multiple-actions-in-filters-and-sele.patch @@ -0,0 +1,94 @@ +From 612010470f4217b447b5ed5fe964fce1d895566a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rapha=C3=ABl=20Pinson?= +Date: Tue, 12 Nov 2019 13:33:26 +0100 +Subject: [PATCH] Rsyslog: support multiple actions in filters and selectors + (#653) + +(cherry picked from commit 5181105bae84dc7819a00886f068ad0bb4e6d05a) +--- + lenses/rsyslog.aug | 11 ++++++++--- + lenses/tests/test_rsyslog.aug | 37 +++++++++++++++++++++++++++++++++++ + 2 files changed, 45 insertions(+), 3 deletions(-) + +diff --git a/lenses/rsyslog.aug b/lenses/rsyslog.aug +index 7b9f7dc9..29ff9b10 100644 +--- a/lenses/rsyslog.aug ++++ b/lenses/rsyslog.aug +@@ -65,11 +65,17 @@ let hostname = [ label "hostname" . + ( Syslog.plus | [ Build.xchgs "-" "reverse" ] ) . + Syslog.hostnames . Util.eol . Syslog.entries ] + ++(* View: actions *) ++let actions = ++ let prop_act = [ label "action" . action ] ++ in let act_sep = del /[ \t]*\n&[ \t]*/ "\n& " ++ in Build.opt_list prop_act act_sep ++ + (* View: entry + An entry contains selectors and an action + *) + let entry = [ label "entry" . Syslog.selectors . Syslog.sep_tab . +- [ label "action" . action ] . Util.eol ] ++ actions . Util.eol ] + + (* View: prop_filter + Parses property-based filters, which start with ":" and the property name *) +@@ -78,9 +84,8 @@ let prop_filter = + in let prop_name = [ Util.del_str ":" . label "property" . store Rx.word ] + in let prop_oper = [ label "operation" . store /[A-Za-z!-]+/ ] + in let prop_val = [ label "value" . Quote.do_dquote (store /[^\n"]*/) ] +- in let prop_act = [ label "action" . action ] + in [ label "filter" . prop_name . sep . prop_oper . sep . prop_val . +- Sep.space . prop_act . Util.eol ] ++ Sep.space . actions . Util.eol ] + + let entries = ( Syslog.empty | Util.comment | entry | macro | config_object | prop_filter )* + +diff --git a/lenses/tests/test_rsyslog.aug b/lenses/tests/test_rsyslog.aug +index 9011a2b3..e83613a2 100644 +--- a/lenses/tests/test_rsyslog.aug ++++ b/lenses/tests/test_rsyslog.aug +@@ -222,3 +222,40 @@ test Rsyslog.lns get "*.* ?DynamicFile\n" = + { "dynamic" = "DynamicFile" } + } + } ++ ++(* Multiple actions in filters and selectors *) ++test Rsyslog.lns get ":msg, startswith, \"iptables:\" -/var/log/iptables.log ++& ~ ++# Save boot messages also to boot.log ++local7.* /var/log/boot.log ++local3.err /var/log/nfsen/nfsenlog ++& /var/log/also.log ++\n" = ++ { "filter" ++ { "property" = "msg" } ++ { "operation" = "startswith" } ++ { "value" = "iptables:" } ++ { "action" ++ { "no_sync" } ++ { "file" = "/var/log/iptables.log" } } ++ { "action" ++ { "discard" } } ++ } ++ { "#comment" = "Save boot messages also to boot.log" } ++ { "entry" ++ { "selector" ++ { "facility" = "local7" } ++ { "level" = "*" } } ++ { "action" ++ { "file" = "/var/log/boot.log" } } ++ } ++ { "entry" ++ { "selector" ++ { "facility" = "local3" } ++ { "level" = "err" } } ++ { "action" ++ { "file" = "/var/log/nfsen/nfsenlog" } } ++ { "action" ++ { "file" = "/var/log/also.log" } } } ++ { } ++ +-- +2.24.1 + diff --git a/SOURCES/0003-src-augrun.c-nexttoken-add-more-escape-characters.patch b/SOURCES/0003-src-augrun.c-nexttoken-add-more-escape-characters.patch new file mode 100644 index 0000000..3f34bda --- /dev/null +++ b/SOURCES/0003-src-augrun.c-nexttoken-add-more-escape-characters.patch @@ -0,0 +1,37 @@ +From d37c8aabc29c3989d5f961d8b742b246a5f64cdf Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 17 May 2019 13:47:20 +0200 +Subject: [PATCH] * src/augrun.c (nexttoken): add more escape characters + +Synchonize the list of "pass-through" characters with the set in the +'name_follow' variable in pathx.c: as pathx_escape_name() escapes them, +make sure that aug_srun() accepts them as arguments. +--- + src/augrun.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/src/augrun.c b/src/augrun.c +index 07f865a9..fd710c5f 100644 +--- a/src/augrun.c ++++ b/src/augrun.c +@@ -133,8 +133,16 @@ static char *nexttoken(struct command *cmd, char **line, bool path) { + copy = true; + if (*s == '\\') { + switch (*(s+1)) { ++ case ']': + case '[': +- case ']': /* pass both literally */ ++ case '|': ++ case '/': ++ case '=': ++ case '(': ++ case ')': ++ case '!': ++ case ',': /* pass them literally; ++ * see 'name_follow' in pathx.c */ + nescaped = 2; + break; + case 't': /* insert tab */ +-- +2.24.1 + diff --git a/SOURCES/0004-src-augtool.c-hopefully-fix-readline-quoting-issues.patch b/SOURCES/0004-src-augtool.c-hopefully-fix-readline-quoting-issues.patch new file mode 100644 index 0000000..c76fdb4 --- /dev/null +++ b/SOURCES/0004-src-augtool.c-hopefully-fix-readline-quoting-issues.patch @@ -0,0 +1,42 @@ +From f224dd99c7dc4d2ce4340b2d16cae6b1e0ed7c8d Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Fri, 17 May 2019 15:18:50 +0200 +Subject: [PATCH] * src/augtool.c: hopefully fix readline quoting issues + +Configure the quoting (also using a detector) and word break characters, +so it is possible to autocomplete paths with special characters (like +spaces, which are already quoted by augeas). +--- + src/augtool.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/src/augtool.c b/src/augtool.c +index b42ef630..31a991eb 100644 +--- a/src/augtool.c ++++ b/src/augtool.c +@@ -267,10 +267,22 @@ static char *get_home_dir(uid_t uid) { + return result; + } + ++/* Inspired from: ++ * https://thoughtbot.com/blog/tab-completion-in-gnu-readline ++ */ ++static int quote_detector(char *str, int index) { ++ return index > 0 ++ && str[index - 1] == '\\' ++ && quote_detector(str, index - 1) == 0; ++} ++ + static void readline_init(void) { + rl_readline_name = "augtool"; + rl_attempted_completion_function = readline_completion; + rl_completion_entry_function = readline_path_generator; ++ rl_completer_quote_characters = "\"'"; ++ rl_completer_word_break_characters = (char *) " "; ++ rl_char_is_quoted_p = "e_detector; + + /* Set up persistent history */ + char *home_dir = get_home_dir(getuid()); +-- +2.24.1 + diff --git a/SOURCES/0005-Krb5-improve-dbmodules-and-includes-630.patch b/SOURCES/0005-Krb5-improve-dbmodules-and-includes-630.patch new file mode 100644 index 0000000..283490d --- /dev/null +++ b/SOURCES/0005-Krb5-improve-dbmodules-and-includes-630.patch @@ -0,0 +1,133 @@ +From 63786a83b2e4b14772ee8742fa95d70063ba7b6c Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Tue, 4 Feb 2020 17:54:22 +0100 +Subject: [PATCH] Krb5: improve [dbmodules] and includes (#630) + +* Krb5: fix/revamp parsing of [dbmodules] subsection + +The [dbmodules] subsection so far was parsed much like the [dbdefaults] +one, and thus it did not handle realms. + +Revamp it a bit to handle realms, and specify the only keyword not in +realm subsections. + +* Krb5: allow include/includedir directives everywhere + +MIT Kerberos allows this, so do not restrict them only before any other +section. +--- + lenses/krb5.aug | 27 +++++++++++++++++++-------- + lenses/tests/test_krb5.aug | 36 +++++++++++++++++++++++++++++++++++- + 2 files changed, 54 insertions(+), 9 deletions(-) + +diff --git a/lenses/krb5.aug b/lenses/krb5.aug +index 46c22656..6b509c42 100644 +--- a/lenses/krb5.aug ++++ b/lenses/krb5.aug +@@ -21,10 +21,11 @@ let closebr = del /[ \t]*\}/ "}" + and realms in the [appdefaults] section. + *) + ++let include_re = /include(dir)?/ + let realm_re = /[A-Z0-9][.a-zA-Z0-9-]*/ + let realm_anycase_re = /[A-Za-z0-9][.a-zA-Z0-9-]*/ + let app_re = /[a-z][a-zA-Z0-9_]*/ +-let name_re = /[.a-zA-Z0-9_-]+/ ++let name_re = /[.a-zA-Z0-9_-]+/ - include_re + + let value_br = store /[^;# \t\r\n{}]+/ + let value = store /[^;# \t\r\n]+/ +@@ -130,10 +131,19 @@ let dbdefaults = + simple_section "dbdefaults" keys + + let dbmodules = +- let keys = /db_library|ldap_kerberos_container_dn|ldap_kdc_dn/ +- |/ldap_kadmind_dn|ldap_service_password_file|ldap_servers/ +- |/ldap_conns_per_server/ in +- simple_section "dbmodules" keys ++ let subsec_key = /database_name|db_library|disable_last_success/ ++ |/disable_lockout|ldap_conns_per_server|ldap_(kdc|kadmind)_dn/ ++ |/ldap_(kdc|kadmind)_sasl_mech|ldap_(kdc|kadmind)_sasl_authcid/ ++ |/ldap_(kdc|kadmind)_sasl_authzid|ldap_(kdc|kadmind)_sasl_realm/ ++ |/ldap_kerberos_container_dn|ldap_servers/ ++ |/ldap_service_password_file|mapsize|max_readers|nosync/ ++ |/unlockiter/ in ++ let subsec_option = subsec_entry subsec_key eq comment in ++ let key = /db_module_dir/ in ++ let option = entry key eq value comment in ++ let realm = [ indent . label "realm" . store realm_re . ++ eq_openbr . (subsec_option)* . closebr . eol ] in ++ record "dbmodules" (option|realm) + + (* This section is not documented in the krb5.conf manpage, + but the Fermi example uses it. *) +@@ -152,11 +162,12 @@ let kdc = + let pam = + simple_section "pam" name_re + +-let includes = Build.key_value_line /include(dir)?/ Sep.space (store Rx.fspath) ++let includes = Build.key_value_line include_re Sep.space (store Rx.fspath) ++let include_lines = includes . (comment|empty)* + +-let lns = (comment|empty|includes)* . ++let lns = (comment|empty)* . + (libdefaults|login|appdefaults|realms|domain_realm +- |logging|capaths|dbdefaults|dbmodules|instance_mapping|kdc|pam)* ++ |logging|capaths|dbdefaults|dbmodules|instance_mapping|kdc|pam|include_lines)* + + let filter = (incl "/etc/krb5.conf.d/*.conf") + . (incl "/etc/krb5.conf") +diff --git a/lenses/tests/test_krb5.aug b/lenses/tests/test_krb5.aug +index f746543b..10b87605 100644 +--- a/lenses/tests/test_krb5.aug ++++ b/lenses/tests/test_krb5.aug +@@ -1029,7 +1029,7 @@ default_ccache_name = KEYRING:persistent:%{uid}\n" = + { } + { "default_ccache_name" = "KEYRING:persistent:%{uid}" } } + +-(* Include(dir) test *) ++(* Include(dir) tests *) + let include_test = "include /etc/krb5.other_conf.d/other.conf + includedir /etc/krb5.conf.d/ + " +@@ -1037,3 +1037,37 @@ includedir /etc/krb5.conf.d/ + test Krb5.lns get include_test = + { "include" = "/etc/krb5.other_conf.d/other.conf" } + { "includedir" = "/etc/krb5.conf.d/" } ++ ++let include2_test = "[logging] ++ default = FILE:/var/log/krb5libs.log ++ ++include /etc/krb5.other_conf.d/other.conf ++ ++includedir /etc/krb5.conf.d/ ++" ++ ++test Krb5.lns get include2_test = ++ { "logging" ++ { "default" ++ { "file" = "/var/log/krb5libs.log" } } ++ { } ++ } ++ { "include" = "/etc/krb5.other_conf.d/other.conf" } ++ { } ++ { "includedir" = "/etc/krb5.conf.d/" } ++ ++(* [dbmodules] test *) ++let dbmodules_test = "[dbmodules] ++ ATHENA.MIT.EDU = { ++ disable_last_success = true ++ } ++ db_module_dir = /some/path ++" ++ ++test Krb5.lns get dbmodules_test = ++ { "dbmodules" ++ { "realm" = "ATHENA.MIT.EDU" ++ { "disable_last_success" = "true" } ++ } ++ { "db_module_dir" = "/some/path" } ++ } +-- +2.24.1 + diff --git a/SOURCES/0006-Systemd-fix-parsing-of-envvars-with-spaces-659.patch b/SOURCES/0006-Systemd-fix-parsing-of-envvars-with-spaces-659.patch new file mode 100644 index 0000000..65be7da --- /dev/null +++ b/SOURCES/0006-Systemd-fix-parsing-of-envvars-with-spaces-659.patch @@ -0,0 +1,59 @@ +From 472a143b427afc89ab2fd843cea1f1f97193ceef Mon Sep 17 00:00:00 2001 +From: Pino Toscano +Date: Tue, 4 Feb 2020 18:05:05 +0100 +Subject: [PATCH] Systemd: fix parsing of envvars with spaces (#659) + +Allow spaces inside of values quoted with single or double quotes. + +This amends commit f64d8bc7a7670f3af2549fdcefb64c2b5f22cd0d that added +support for quoted values. +--- + lenses/systemd.aug | 4 ++-- + lenses/tests/test_systemd.aug | 9 +++++++++ + 2 files changed, 11 insertions(+), 2 deletions(-) + +diff --git a/lenses/systemd.aug b/lenses/systemd.aug +index b868e86f..77434367 100644 +--- a/lenses/systemd.aug ++++ b/lenses/systemd.aug +@@ -132,8 +132,8 @@ let entry_env = + let envkv (env_val:lens) = key env_key . Util.del_str "=" . env_val + (* bare has no spaces, and is optionally quoted *) + in let bare = Quote.do_quote_opt (envkv (store /[^#'" \t\n]*[^#'" \t\n\\]/)?) +- in let bare_dqval = envkv (store /"[^#" \t\n]*[^#" \t\n\\]"/) +- in let bare_sqval = envkv (store /'[^#' \t\n]*[^#' \t\n\\]'/) ++ in let bare_dqval = envkv (store /"[^#"\t\n]*[^#"\t\n\\]"/) ++ in let bare_sqval = envkv (store /'[^#'\t\n]*[^#'\t\n\\]'/) + (* quoted has at least one space, and must be quoted *) + in let quoted = Quote.do_quote (envkv (store /[^#"'\n]*[ \t]+[^#"'\n]*/)) + in let envkv_quoted = [ bare ] | [ bare_dqval ] | [ bare_sqval ] | [ quoted ] +diff --git a/lenses/tests/test_systemd.aug b/lenses/tests/test_systemd.aug +index 3397456e..19c57075 100644 +--- a/lenses/tests/test_systemd.aug ++++ b/lenses/tests/test_systemd.aug +@@ -206,6 +206,8 @@ FOO=BAR + Environment=\"LANG=foo bar\" FOO=BAR + Environment=OPTIONS=\"-LS0-6d\" + Environment=OPTIONS='-LS0-6d' ++Environment=VAR=\"with some spaces\" VAR2='more spaces' ++Environment=VAR='with some spaces' + " + (* Test: Systemd.lns *) + test Systemd.lns get env = +@@ -247,6 +249,13 @@ test Systemd.lns get env = + { "Environment" + { "OPTIONS" = "'-LS0-6d'" } + } ++ { "Environment" ++ { "VAR" = "\"with some spaces\"" } ++ { "VAR2" = "'more spaces'" } ++ } ++ { "Environment" ++ { "VAR" = "'with some spaces'" } ++ } + } + + (* Variable: unit *) +-- +2.24.1 + diff --git a/SPECS/augeas.spec b/SPECS/augeas.spec index 51d3523..a4bf7fb 100644 --- a/SPECS/augeas.spec +++ b/SPECS/augeas.spec @@ -1,13 +1,18 @@ Name: augeas Version: 1.12.0 -Release: 2%{?dist}.1 +Release: 5%{?dist} Summary: A library for changing configuration files Group: System Environment/Libraries License: LGPLv2+ URL: http://augeas.net/ Source0: http://download.augeas.net/%{name}-%{version}.tar.gz -Patch1: 0001-Krb5-improve-dbmodules-and-includes-630.patch +Patch1: 0001-Grub-support-in-kernel-command-line-option-names-647.patch +Patch2: 0002-Rsyslog-support-multiple-actions-in-filters-and-sele.patch +Patch3: 0003-src-augrun.c-nexttoken-add-more-escape-characters.patch +Patch4: 0004-src-augtool.c-hopefully-fix-readline-quoting-issues.patch +Patch5: 0005-Krb5-improve-dbmodules-and-includes-630.patch +Patch6: 0006-Systemd-fix-parsing-of-envvars-with-spaces-659.patch BuildRequires: readline-devel libselinux-devel libxml2-devel BuildRequires: autoconf, automake @@ -114,9 +119,17 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/pkgconfig/augeas.pc %changelog -* Mon Feb 10 2020 Pino Toscano - 1.12.0-2.el8_1.1 +* Mon Feb 10 2020 Pino Toscano - 1.12.0-5 +- Fix completion with special characters in augtool. (RHBZ#1232224) - Krb5: improve handling of [dbmodules]; allow include/includedir directives - everywhere (RHBZ#1800552) + everywhere (RHBZ#1798486) +- Systemd: improve parsing of quoted variables of Environment (RHBZ#1798922) + +* Thu Nov 14 2019 Pino Toscano - 1.12.0-4 +- Rsyslog: support multiple actions in filters and selectors (RHBZ#1660884) + +* Thu Nov 07 2019 Pino Toscano - 1.12.0-3 +- Grub: handle '+' in kernel command line options (RHBZ#1769314) * Mon Jun 03 2019 Pino Toscano - 1.12.0-2 - Disable static libraries, not needed in RHEL.