From c3b668f174e5e30cde1a7640dc1d3a75378fc748 Mon Sep 17 00:00:00 2001 From: Vojtech Polasek Date: Fri, 20 Sep 2024 15:22:02 +0200 Subject: [PATCH] modify test scenarios to use the new common.sh script efficiently --- .../tests/arg_not_in_entries.fail.sh | 6 ++++++ .../tests/arg_not_in_etcdefaultgrub.fail.sh | 3 ++- ..._in_etcdefaultgrub_recovery_disabled.fail.sh | 2 ++ ...rg_not_in_grubenv_and_not_referenced.pass.sh | 17 +++++------------ .../arg_not_in_grubenv_but_referenced.fail.sh | 9 +-------- .../tests/correct_recovery_disabled.pass.sh | 15 ++------------- .../tests/correct_value_noupdate.fail.sh | 2 ++ .../tests/wrong_value_entries.fail.sh | 7 ++++++- ...lue_etcdefaultgrub_recovery_disabled.fail.sh | 2 +- .../tests/wrong_value_grubenv.fail.sh | 4 +++- 10 files changed, 30 insertions(+), 37 deletions(-) diff --git a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_entries.fail.sh b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_entries.fail.sh index 5ea0c94e1cc..765e03ce3c4 100644 --- a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_entries.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_entries.fail.sh @@ -5,10 +5,16 @@ source common.sh +{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} + # Removes argument from kernel command line in /boot/loader/entries/*.conf for file in /boot/loader/entries/*.conf ; do if grep -q '^.*{{{ ESCAPED_ARG_NAME }}}=.*' "$file" ; then sed -i 's/\(^.*\){{{ARG_NAME}}}=[^[:space:]]*\(.*\)/\1 \2/' "$file" fi +# ensure that grubenv is not referenced + if grep -q '\$kernelopts' "$file"; then + sed -i 's/^\(options.*\)\$kernelopts\(.*\)$/\1\2/' "$file" + fi done diff --git a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub.fail.sh b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub.fail.sh index 159f00d45d8..8862f974cf6 100644 --- a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub.fail.sh @@ -4,8 +4,9 @@ source common.sh +{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} + # Removes argument from kernel command line in /etc/default/grub if grep -q '^GRUB_CMDLINE_LINUX=.*{{{ARG_NAME}}}=.*"' '/etc/default/grub' ; then sed -i 's/\(^GRUB_CMDLINE_LINUX=".*\){{{ARG_NAME}}}=[^[:space:]]*\(.*"\)/\1 \2/' '/etc/default/grub' fi - diff --git a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub_recovery_disabled.fail.sh b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub_recovery_disabled.fail.sh index f43e394e4c7..c6f6e8ec77c 100644 --- a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub_recovery_disabled.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_etcdefaultgrub_recovery_disabled.fail.sh @@ -4,6 +4,8 @@ source common.sh +{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} + # Removes the argument from kernel command line in /etc/default/grub if grep -q '^GRUB_CMDLINE_LINUX_DEFAULT=.*{{{ARG_NAME}}}=.*"' '/etc/default/grub' ; then sed -i 's/\(^GRUB_CMDLINE_LINUX_DEFAULT=".*\){{{ARG_NAME}}}=[^[:space:]]*\(.*"\)/\1 \2/' '/etc/default/grub' diff --git a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_and_not_referenced.pass.sh b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_and_not_referenced.pass.sh index 1f3954bcfda..59d4ddd5d11 100644 --- a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_and_not_referenced.pass.sh +++ b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_and_not_referenced.pass.sh @@ -8,21 +8,14 @@ {{%- set ARG_NAME_VALUE= ARG_NAME ~ "=correct_value" %}} {{%- endif %}} - source common.sh -# Removes audit argument from kernel command line in /boot/grub2/grubenv -file="/boot/grub2/grubenv" -if grep -q '^.*{{{ARG_NAME}}}=.*' "$file" ; then - sed -i 's/\(^.*\){{{ARG_NAME}}}=[^[:space:]]*\(.*\)/\1 \2/' "$file" -fi - +{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} # ensure that the grubenv entry is not referenced +# also in RHEL 8, after performing previous steps, the only option is $kernelopts +# so add the arg=value there so that the test passes for entry in /boot/loader/entries/*.conf; do - if ! grep -q '\$kernelopts' "$entry"; then - sed -i 's/^(options.*)$/\1 \$kernelopts/' "$entry" + if grep -q '\$kernelopts' "$entry"; then + sed -i 's/^\(options.*\)\$kernelopts\(.*\)$/\1\2 mock {{{ ARG_NAME_VALUE }}}/' "$entry" fi done - -# remediate with grubby, this ill ensure expanded options are in /boot/loader/entries/*.conf -{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} diff --git a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_but_referenced.fail.sh b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_but_referenced.fail.sh index 2dbef6d82c7..6e71637d957 100644 --- a/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_but_referenced.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/arg_not_in_grubenv_but_referenced.fail.sh @@ -5,15 +5,8 @@ source common.sh -# Removes audit argument from kernel command line in /boot/grub2/grubenv -file="/boot/grub2/grubenv" -if grep -q '^.*{{{ARG_NAME}}}=.*' "$file" ; then - sed -i 's/\(^.*\){{{ARG_NAME}}}=[^[:space:]]*\(.*\)/\1 \2/' "$file" -fi - for entry in /boot/loader/entries/*.conf; do if ! grep -q '\$kernelopts' "$entry"; then - sed -i 's/^(options.*)$/\1 \$kernelopts/' "$entry" + sed -i 's/^\(options.*\)$/\1 \$kernelopts/' "$entry" fi done - diff --git a/shared/templates/grub2_bootloader_argument/tests/correct_recovery_disabled.pass.sh b/shared/templates/grub2_bootloader_argument/tests/correct_recovery_disabled.pass.sh index 679c9ed6fe1..a824bf70c57 100644 --- a/shared/templates/grub2_bootloader_argument/tests/correct_recovery_disabled.pass.sh +++ b/shared/templates/grub2_bootloader_argument/tests/correct_recovery_disabled.pass.sh @@ -9,23 +9,14 @@ source common.sh -# configure the argument in kernel command line in /boot/grub2/grubenv -#file="/boot/grub2/grubenv" -#if grep -q '^.*{{{ARG_NAME}}}=.*' "$file"; then - # modify the GRUB command-line if the arg already exists -# sed -i 's/\(^.*\){{{ARG_NAME}}}=[^[:space:]]*\(.*\)/\1 {{{ARG_NAME_VALUE}}} \2/' "$file" -#else - # no arg is present, append it -# sed -i 's/\(^.*\(vmlinuz\|kernelopts\).*\)/\1 {{{ARG_NAME_VALUE}}}/' "$file" -#fi - +{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} # Correct the form of default kernel command line in GRUB /etc/default/grub and applies value through Grubby if grep -q '^GRUB_CMDLINE_LINUX_DEFAULT=.*{{{ ESCAPED_ARG_NAME }}}=.*"' '/etc/default/grub' ; then # modify the GRUB command-line if an arg=value already exists sed -i 's/\(^GRUB_CMDLINE_LINUX_DEFAULT=".*\){{{ ARG_NAME }}}=[^[:space:]]*\(.*"\)/\1 {{{ ARG_NAME_VALUE }}} \2/' '/etc/default/grub' else - # no audit=arg is present, append it + # no arg is present, append it sed -i 's/\(^GRUB_CMDLINE_LINUX_DEFAULT=".*\)"/\1 {{{ ARG_NAME_VALUE }}}"/' '/etc/default/grub' fi @@ -39,5 +30,3 @@ sed -i 's/\(^.*GRUB_DISABLE_RECOVERY=\).*/\1true/' '/etc/default/grub' if ! grep -q '^GRUB_CMDLINE_LINUX_DEFAULT=.*$' '/etc/default/grub'; then echo 'GRUB_CMDLINE_LINUX_DEFAULT="{{{ ARG_NAME_VALUE }}}"' >> /etc/default/grub fi - -{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} diff --git a/shared/templates/grub2_bootloader_argument/tests/correct_value_noupdate.fail.sh b/shared/templates/grub2_bootloader_argument/tests/correct_value_noupdate.fail.sh index 47751307640..bae032f54a8 100644 --- a/shared/templates/grub2_bootloader_argument/tests/correct_value_noupdate.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/correct_value_noupdate.fail.sh @@ -8,6 +8,8 @@ {{%- set ARG_NAME_VALUE= ARG_NAME ~ "=correct_value" %}} {{%- endif %}} +source common.sh + # Clean up rm -f /etc/default/grub.d/* echo "GRUB_CMDLINE_LINUX=\"\"" > /etc/default/grub diff --git a/shared/templates/grub2_bootloader_argument/tests/wrong_value_entries.fail.sh b/shared/templates/grub2_bootloader_argument/tests/wrong_value_entries.fail.sh index 3f5914807d3..87e9a599cc9 100644 --- a/shared/templates/grub2_bootloader_argument/tests/wrong_value_entries.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/wrong_value_entries.fail.sh @@ -5,8 +5,9 @@ source common.sh -# Removes argument from kernel command line in /boot/loader/entries/*.conf +{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} +# Breaks argument from kernel command line in /boot/loader/entries/*.conf for file in /boot/loader/entries/*.conf ; do if grep -q '^.*{{{ ESCAPED_ARG_NAME }}}=.*' "$file" ; then # modify the GRUB command-line if an ={{{ARG_NAME}}} arg already exists @@ -15,4 +16,8 @@ for file in /boot/loader/entries/*.conf ; do # no {{{ARG_NAME}}}=arg is present, append it sed -i 's/\(^.*\(vmlinuz\|kernelopts\).*\)/\1 {{{ARG_NAME}}}=wrong/' "$file" fi +# ensure that grubenv is not referenced + if grep -q '\$kernelopts' "$file"; then + sed -i 's/^\(options.*\)\$kernelopts\(.*\)$/\1\2/' "$file" + fi done diff --git a/shared/templates/grub2_bootloader_argument/tests/wrong_value_etcdefaultgrub_recovery_disabled.fail.sh b/shared/templates/grub2_bootloader_argument/tests/wrong_value_etcdefaultgrub_recovery_disabled.fail.sh index 57e37743fb3..4464d9f3c0c 100644 --- a/shared/templates/grub2_bootloader_argument/tests/wrong_value_etcdefaultgrub_recovery_disabled.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/wrong_value_etcdefaultgrub_recovery_disabled.fail.sh @@ -20,7 +20,7 @@ if grep -q '^GRUB_CMDLINE_LINUX_DEFAULT=.*{{{ ESCAPED_ARG_NAME }}}=.*"' '/etc/d # modify the GRUB command-line if an arg=value already exists sed -i 's/\(^GRUB_CMDLINE_LINUX_DEFAULT=".*\){{{ ARG_NAME }}}=[^[:space:]]*\(.*"\)/\1 {{{ ARG_NAME }}}={{{ ARG_NAME_VALUE_WRONG }}} \2/' '/etc/default/grub' else - # no audit=arg is present, append it + # no arg is present, append it sed -i 's/\(^GRUB_CMDLINE_LINUX_DEFAULT=".*\)"/\1 {{{ ARG_NAME }}}={{{ ARG_NAME_VALUE_WRONG }}}"/' '/etc/default/grub' fi diff --git a/shared/templates/grub2_bootloader_argument/tests/wrong_value_grubenv.fail.sh b/shared/templates/grub2_bootloader_argument/tests/wrong_value_grubenv.fail.sh index 9dfb70d903d..259bc41ffc0 100644 --- a/shared/templates/grub2_bootloader_argument/tests/wrong_value_grubenv.fail.sh +++ b/shared/templates/grub2_bootloader_argument/tests/wrong_value_grubenv.fail.sh @@ -5,6 +5,8 @@ source common.sh +{{{ grub2_bootloader_argument_remediation(ARG_NAME, ARG_NAME_VALUE) }}} + # Break the argument in kernel command line in /boot/grub2/grubenv file="/boot/grub2/grubenv" if grep -q '^.*{{{ARG_NAME}}}=.*' "$file" ; then @@ -19,6 +21,6 @@ fi # othervise contents of grubenv are ignored for entry in /boot/loader/entries/*.conf; do if ! grep -q '\$kernelopts' "$entry"; then - sed -i 's/^(options.*)$/\1 \$kernelopts/' "$entry" + sed -i 's/^\(options.*\)$/\1 \$kernelopts/' "$entry" fi done