Fix chronyd_specify_remote_server remediation - #15100
Conversation
…there_are_servers_in_ntp_compatible_config_file Signed-off-by: Alan Moore <alan.moore@canonical.com>
Signed-off-by: Alan Moore <alan.moore@canonical.com>
Signed-off-by: Alan Moore <alan.moore@canonical.com>
|
Hi @alanmcanonical. Thanks for your PR. I'm waiting for a ComplianceAsCode member to verify that this patch is reasonable to test. If it is, they should reply with Tip We noticed you've done this a few times! Consider joining the org to skip this step and gain Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
|
This datastream diff is auto generated by the check Click here to see the full diffbash remediation for rule 'xccdf_org.ssgproject.content_rule_chronyd_specify_remote_server' differs.
--- xccdf_org.ssgproject.content_rule_chronyd_specify_remote_server
+++ xccdf_org.ssgproject.content_rule_chronyd_specify_remote_server
@@ -6,17 +6,34 @@
config_file="/etc/chrony.conf"
-if ! grep -q '^[[:space:]]*\(server\|pool\)[[:space:]]\+[[:graph:]]\+' "$config_file" ; then
- if ! grep -q '#[[:space:]]*server' "$config_file" ; then
- for server in $(echo "$var_multiple_time_servers" | tr ',' '\n') ; do
- printf '\nserver %s' "$server" >> "$config_file"
- done
- else
- sed -i 's/#[ \t]*server/server/g' "$config_file"
- fi
- if [[ -s "$config_file" ]] && [[ -n "$(tail -c 1 -- "$config_file" || true)" ]]; then
- LC_ALL=C sed -i --follow-symlinks '$a'\\ "$config_file"
- fi
+if [[ ! -f $config_file ]]; then
+ touch "$config_file"
+fi
+
+IFS="," read -r -a SERVERS <<< "$var_multiple_time_servers"
+
+valid_pattern=""
+for server in "${SERVERS[@]}"; do
+ escaped_server="${server//./\\.}"
+ if [ -z "$valid_pattern" ]; then
+ valid_pattern="${escaped_server}"
+ else
+ valid_pattern="${valid_pattern}|${escaped_server}"
+ fi
+done
+
+if [ -n "$valid_pattern" ]; then
+ sed -i -E "/^[[:space:]]*server[[:space:]]/ { /^[[:space:]]*server[[:space:]]+(${valid_pattern})([[:space:]]|$)/! s/^[[:space:]]*server/# server/ }" "$config_file"
+fi
+
+for server in "${SERVERS[@]}" ; do
+ escaped_server="${server//./\\.}"
+ if ! grep -q "^[[:space:]]*server[[:space:]]\+${escaped_server}\([[:space:]]\|$\)" "$config_file" ; then
+ printf '\nserver %s' "$server" >> "$config_file"
+ fi
+done
+if [[ -s "$config_file" ]] && [[ -n "$(tail -c 1 -- "$config_file" || true)" ]]; then
+ LC_ALL=C sed -i --follow-symlinks '$a'\\ "$config_file"
fi
else
bash remediation for rule 'xccdf_org.ssgproject.content_rule_chronyd_or_ntpd_specify_multiple_servers' differs.
--- xccdf_org.ssgproject.content_rule_chronyd_or_ntpd_specify_multiple_servers
+++ xccdf_org.ssgproject.content_rule_chronyd_or_ntpd_specify_multiple_servers
@@ -8,13 +8,28 @@
/usr/sbin/pidof ntpd || config_file="/etc/chrony.conf"
if ! [ "$(grep -c '^server' "$config_file")" -gt 1 ] ; then
- if ! grep -q '#[[:space:]]*server' "$config_file" ; then
- for server in $(echo "$var_multiple_time_servers" | tr ',' '\n') ; do
- printf '\nserver %s' "$server" >> "$config_file"
- done
- else
- sed -i 's/#[ \t]*server/server/g' "$config_file"
+ IFS="," read -r -a SERVERS <<< "$var_multiple_time_servers"
+
+ valid_pattern=""
+ for server in "${SERVERS[@]}"; do
+ escaped_server="${server//./\\.}"
+ if [ -z "$valid_pattern" ]; then
+ valid_pattern="${escaped_server}"
+ else
+ valid_pattern="${valid_pattern}|${escaped_server}"
+ fi
+ done
+
+ if [ -n "$valid_pattern" ]; then
+ sed -i -E "/^[[:space:]]*server[[:space:]]/ { /^[[:space:]]*server[[:space:]]+(${valid_pattern})([[:space:]]|$)/! s/^[[:space:]]*server/# server/ }" "$config_file"
fi
+
+ for server in "${SERVERS[@]}" ; do
+ escaped_server="${server//./\\.}"
+ if ! grep -q "^[[:space:]]*server[[:space:]]\+${escaped_server}\([[:space:]]\|$\)" "$config_file" ; then
+ printf '\nserver %s' "$server" >> "$config_file"
+ fi
+ done
if [[ -s "$config_file" ]] && [[ -n "$(tail -c 1 -- "$config_file" || true)" ]]; then
LC_ALL=C sed -i --follow-symlinks '$a'\\ "$config_file"
fi
bash remediation for rule 'xccdf_org.ssgproject.content_rule_chronyd_or_ntpd_specify_remote_server' differs.
--- xccdf_org.ssgproject.content_rule_chronyd_or_ntpd_specify_remote_server
+++ xccdf_org.ssgproject.content_rule_chronyd_or_ntpd_specify_remote_server
@@ -8,13 +8,28 @@
/usr/sbin/pidof ntpd || config_file="/etc/chrony.conf"
if ! grep -q ^server "$config_file" ; then
- if ! grep -q '#[[:space:]]*server' "$config_file" ; then
- for server in $(echo "$var_multiple_time_servers" | tr ',' '\n') ; do
- printf '\nserver %s' "$server" >> "$config_file"
- done
- else
- sed -i 's/#[ \t]*server/server/g' "$config_file"
+ IFS="," read -r -a SERVERS <<< "$var_multiple_time_servers"
+
+ valid_pattern=""
+ for server in "${SERVERS[@]}"; do
+ escaped_server="${server//./\\.}"
+ if [ -z "$valid_pattern" ]; then
+ valid_pattern="${escaped_server}"
+ else
+ valid_pattern="${valid_pattern}|${escaped_server}"
+ fi
+ done
+
+ if [ -n "$valid_pattern" ]; then
+ sed -i -E "/^[[:space:]]*server[[:space:]]/ { /^[[:space:]]*server[[:space:]]+(${valid_pattern})([[:space:]]|$)/! s/^[[:space:]]*server/# server/ }" "$config_file"
fi
+
+ for server in "${SERVERS[@]}" ; do
+ escaped_server="${server//./\\.}"
+ if ! grep -q "^[[:space:]]*server[[:space:]]\+${escaped_server}\([[:space:]]\|$\)" "$config_file" ; then
+ printf '\nserver %s' "$server" >> "$config_file"
+ fi
+ done
if [[ -s "$config_file" ]] && [[ -n "$(tail -c 1 -- "$config_file" || true)" ]]; then
LC_ALL=C sed -i --follow-symlinks '$a'\\ "$config_file"
fi |
|
test result |
Signed-off-by: Alan Moore <alan.moore@canonical.com>
Signed-off-by: Alan Moore <alan.moore@canonical.com>
…nterpreting backslashes Signed-off-by: Alan Moore <alan.moore@canonical.com>
Signed-off-by: Alan Moore <alan.moore@canonical.com>
Signed-off-by: Alan Moore <alan.moore@canonical.com>
test result |
Description:
Rationale:
server|pool [[:graph:]]+not exists: run the macro, else: do nothing.# serverdoesn't exist: append urls, else uncomment those lines. Its regex only matching#[[:space:]]*serverinstead of targeting server like#\s*server\s+0.pool.ntp.org