diff --git a/SOURCES/0001-Use-python-re-to-parse-service-output-in.patch b/SOURCES/0001-Use-python-re-to-parse-service-output-in.patch new file mode 100644 index 0000000..5356be8 --- /dev/null +++ b/SOURCES/0001-Use-python-re-to-parse-service-output-in.patch @@ -0,0 +1,72 @@ +From 1a583e3c0d67a63cef1b1a433f176b7983d39812 Mon Sep 17 00:00:00 2001 +From: Matt Martz +Date: Wed, 26 Oct 2022 16:06:43 -0500 +Subject: [PATCH] [stable-2.13] Use python re to parse service output instead + of grep (#79015) (#79051) + +* Use python re to parse service output instead of grep. Fixes #78541 + +* Add clog frag + +* Add an extra guard to abort if rc is 4, and /etc/init.d is missing +(cherry picked from commit 4458128) + +Co-authored-by: Matt Martz +--- + .../fragments/78541-service-facts-re.yml | 3 +++ + lib/ansible/modules/service_facts.py | 20 +++++++++++-------- + 2 files changed, 15 insertions(+), 8 deletions(-) + create mode 100644 changelogs/fragments/78541-service-facts-re.yml + +diff --git a/changelogs/fragments/78541-service-facts-re.yml b/changelogs/fragments/78541-service-facts-re.yml +new file mode 100644 +index 0000000000..b96d584246 +--- /dev/null ++++ b/changelogs/fragments/78541-service-facts-re.yml +@@ -0,0 +1,3 @@ ++bugfixes: ++- service_facts - Use python re to parse service output instead of grep ++ (https://github.com/ansible/ansible/issues/78541) +diff --git a/lib/ansible/modules/service_facts.py b/lib/ansible/modules/service_facts.py +index 996b47fd59..60555fdc4a 100644 +--- a/lib/ansible/modules/service_facts.py ++++ b/lib/ansible/modules/service_facts.py +@@ -89,6 +89,7 @@ ansible_facts: + ''' + + ++import os + import platform + import re + from ansible.module_utils.basic import AnsibleModule +@@ -104,16 +105,19 @@ class BaseService(object): + class ServiceScanService(BaseService): + + def _list_sysvinit(self, services): +- +- rc, stdout, stderr = self.module.run_command("%s --status-all 2>&1 | grep -E \"\\[ (\\+|\\-) \\]\"" % self.service_path, use_unsafe_shell=True) ++ rc, stdout, stderr = self.module.run_command("%s --status-all" % self.service_path) ++ if rc == 4 and not os.path.exists('/etc/init.d'): ++ # This function is not intended to run on Red Hat but it could happen ++ # if `chkconfig` is not installed. `service` on RHEL9 returns rc 4 ++ # when /etc/init.d is missing, add the extra guard of checking /etc/init.d ++ # instead of solely relying on rc == 4 ++ return + if rc != 0: + self.module.warn("Unable to query 'service' tool (%s): %s" % (rc, stderr)) +- for line in stdout.split("\n"): +- line_data = line.split() +- if len(line_data) < 4: +- continue # Skipping because we expected more data +- service_name = " ".join(line_data[3:]) +- if line_data[1] == "+": ++ p = re.compile(r'^\s*\[ (?P\+|\-) \]\s+(?P.+)$', flags=re.M) ++ for match in p.finditer(stdout): ++ service_name = match.group('name') ++ if match.group('state') == "+": + service_state = "running" + else: + service_state = "stopped" +-- +2.30.2 + diff --git a/SPECS/ansible-core.spec b/SPECS/ansible-core.spec index e9cd4ac..e346e92 100644 --- a/SPECS/ansible-core.spec +++ b/SPECS/ansible-core.spec @@ -38,7 +38,7 @@ Name: ansible-core Summary: SSH-based configuration management, deployment, and task execution system Version: 2.13.3 -Release: 1%{?dist} +Release: 2%{?dist} ExcludeArch: i686 Group: Development/Libraries @@ -56,6 +56,8 @@ Source6: resolvelib-d935f9fd07246d9641436c7a8e6ae39423374e28.tar.gz # Deps to build man pages Source7: straightplugin-6634ea8e1e89d5bb23804f50e676f196c52c46ed.tar.gz +Patch0: 0001-Use-python-re-to-parse-service-output-in.patch + URL: http://ansible.com # We conflict old ansible, and any version of ansible-base. @@ -125,6 +127,7 @@ developed for ansible. %setup -q -T -b 6 -n resolvelib-d935f9fd07246d9641436c7a8e6ae39423374e28 %setup -q -T -b 7 -n straightplugin-6634ea8e1e89d5bb23804f50e676f196c52c46ed %setup -q -n ansible-%{commitId} +%patch0 -p 1 # Fix all Python shebangs recursively in ansible-test # -p preserves timestamps @@ -218,6 +221,9 @@ cp -p lib/ansible_core.egg-info/PKG-INFO . %{python39_sitelib}/ansible_test %changelog +* Thu Dec 08 2022 Dimitri Savineau - 2.13.3-2 +- Use python re to parse service output instead of grep (rhbz#2151902) + * Wed Aug 15 2022 James Marshall - 2.13.3-1 - ansible-core 2.13.3 release (rhbz#2118475)