From ddb0ad1c599cc0e2d53b9d482aa2e1b89eb11455 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Sep 27 2022 11:13:42 +0000 Subject: import rig-1.1-6.el9 --- diff --git a/.gitignore b/.gitignore index 518ff51..e0a7c22 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/rig-1.0.tar.gz +SOURCES/rig-1.1.tar.gz diff --git a/.rig.metadata b/.rig.metadata index e1549a0..159d0d0 100644 --- a/.rig.metadata +++ b/.rig.metadata @@ -1 +1 @@ -d1e8869283fb8c687c997a9afb41f604a8f6dea7 SOURCES/rig-1.0.tar.gz +5d4696794a5f5ff18d05a8595bbc53562b5f372a SOURCES/rig-1.1.tar.gz diff --git a/SOURCES/rig-fix-rig-list.patch b/SOURCES/rig-fix-rig-list.patch new file mode 100644 index 0000000..eecd961 --- /dev/null +++ b/SOURCES/rig-fix-rig-list.patch @@ -0,0 +1,96 @@ +From dedd8733d6cac622903a58cf7a94503cdbd13d88 Mon Sep 17 00:00:00 2001 +From: Jake Hunsaker +Date: Tue, 24 May 2022 12:06:46 -0400 +Subject: [PATCH] [BaseRig] Fix fatal error when querying rig list during + pre_action() + +If a rig used the sosreport action, and specified `--initial-sos`, *and* +queried `rig list` immediately after the rig was deployed, there was a +race condition where the status query would have failed and terminated +the rig during `pre_action()` execution. + +Fix this, by first not detaching until all `pre_action`s are completed, +and second better handle failed `status` queries better generically. + +Signed-off-by: Jake Hunsaker +--- + rigging/__init__.py | 19 +++++++++++++++---- + rigging/rigs/__init__.py | 6 +++--- + 2 files changed, 18 insertions(+), 7 deletions(-) + +diff --git a/rigging/__init__.py b/rigging/__init__.py +index 245d2d1..04ad08e 100644 +--- a/rigging/__init__.py ++++ b/rigging/__init__.py +@@ -234,6 +234,7 @@ class RigConnection(): + """ + + def __init__(self, socket_name): ++ self.name = socket_name + self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + _address = "/var/run/rig/%s" % socket_name + try: +@@ -278,10 +279,20 @@ class RigConnection(): + Returns + dict of rig's status information + """ +- ret = json.loads(self._rig_communicate('status').decode()) +- if ret['success']: +- return ast.literal_eval(ret['result']) +- raise Exception ++ try: ++ ret = json.loads(self._rig_communicate('status').decode()) ++ if ret['success']: ++ return ast.literal_eval(ret['result']) ++ except Exception as err: ++ print("Error retreiving status for %s: %s" % (self.name, err)) ++ return { ++ 'id': self.name, ++ 'pid': '', ++ 'rig_type': '', ++ 'watch': 'Error retrieving status', ++ 'trigger': '', ++ 'status': 'Unknown' ++ } + + def info(self): + """ +diff --git a/rigging/rigs/__init__.py b/rigging/rigs/__init__.py +index 1d2f2df..f14f312 100644 +--- a/rigging/rigs/__init__.py ++++ b/rigging/rigs/__init__.py +@@ -77,6 +77,7 @@ class BaseRig(): + self.resource_name = self.__class__.__name__.lower() + self.parser_usage = self.parser_usage % {'name': self.resource_name} + self.pool = None ++ self.archive_name = None + self.parser = parser + self.restart_count = 0 + subparser = self.parser.add_subparsers() +@@ -484,7 +485,6 @@ class BaseRig(): + conn.sendall(self._fmt_return(command=req['command'], + output='No such attribute', + success=False)) +- continue + + def _register_actions(self): + """ +@@ -536,13 +536,13 @@ class BaseRig(): + Main entry point for rigs. + """ + try: ++ self.setup() ++ self._register_actions() + # detach from console + if not self.args['foreground']: + print(self.id) + self._detach() + self.detached = True +- self.setup() +- self._register_actions() + if self.detached: + for action in self._actions: + self._actions[action].detached = True +-- +2.34.3 + diff --git a/SOURCES/rig-full-random-temp.patch b/SOURCES/rig-full-random-temp.patch new file mode 100644 index 0000000..a9d6c47 --- /dev/null +++ b/SOURCES/rig-full-random-temp.patch @@ -0,0 +1,59 @@ +From 90c5505d82b288bbc0b2e8b01e85b78d18a0bd18 Mon Sep 17 00:00:00 2001 +From: Jake Hunsaker +Date: Thu, 9 Jun 2022 14:26:02 -0400 +Subject: [PATCH] [rig] Use `tempfile` module for temp directory creation + +Previously, a change was made to temp directory creation in an effort to +make it more secure. While that was largely handled, it left us with an +unhandled error in an edge case configuration. Rather than putting a +band-aid over that again, re-write the temp directory creation process +to leverage the `tempfile` module, so that we can safely and completely +ignore the id/name of a rig, and leave the use of that for the +communication socket. + +Signed-off-by: Jake Hunsaker +--- + rigging/rigs/__init__.py | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/rigging/rigs/__init__.py b/rigging/rigs/__init__.py +index f14f312..29bb8b4 100644 +--- a/rigging/rigs/__init__.py ++++ b/rigging/rigs/__init__.py +@@ -18,6 +18,7 @@ import string + import socket + import sys + import tarfile ++import tempfile + import time + + from argparse import Action +@@ -110,7 +111,7 @@ class BaseRig(): + self.log_debug("Initializing %s rig %s" % + (self.resource_name, self.id)) + self._sock, self._sock_address = self._create_rig_socket() +- self._tmp_dir = self._create_temp_dir() ++ self._create_temp_dir() + self.files = [] + + def set_rig_id(self): +@@ -196,11 +197,11 @@ class BaseRig(): + Create a temp directory for rig to use for saving created files too + """ + try: +- _dir = "%s.%s/" % (RIG_TMP_DIR_PREFIX, self.id) +- os.makedirs(_dir) +- return _dir +- except OSError: +- raise CannotConfigureRigError('failed to create temp directory') ++ self._tmp_dir = tempfile.mkdtemp(prefix='rig.', dir='/var/tmp') ++ except Exception as err: ++ raise CannotConfigureRigError( ++ "failed to create temp directory: %s" % err ++ ) + + def _load_args(self): + """ +-- +2.35.3 + diff --git a/SPECS/rig.spec b/SPECS/rig.spec index caf1e61..13a9ddc 100644 --- a/SPECS/rig.spec +++ b/SPECS/rig.spec @@ -1,7 +1,7 @@ Name: rig Summary: Monitor a system for events and trigger specific actions -Version: 1.0 -Release: 4%{?dist} +Version: 1.1 +Release: 6%{?dist} Url: https://github.com/TurboTurtle/rig Source0: %{url}/archive/%{name}-%{version}.tar.gz License: GPLv2 @@ -12,6 +12,9 @@ BuildRequires: python3-setuptools BuildRequires: python3dist(systemd-python) BuildRequires: python3dist(psutil) +Patch1: rig-fix-rig-list.patch +Patch2: rig-full-random-temp.patch + %description Rig is a utility designed to watch or monitor specific system resources (e.g. log files, journals, system activity, etc...) and then take specific action @@ -20,6 +23,8 @@ troubleshooting and data collection for randomly occurring events. %prep %setup -q +%patch1 -p1 +%patch2 -p1 %build %py3_build @@ -40,6 +45,16 @@ install -p -m644 man/en/rig.1 ${RPM_BUILD_ROOT}%{_mandir}/man1/ %doc README.md %changelog +* Tue Jun 14 2022 Jake Hunsaker - 1.1-6 +- Backport change to temp dir creation to ignore rig ID + +* Thu Jun 02 2022 Jake Hunsaker - 1.1-4 +- Backport fix for rig list race condition + +* Fri May 04 2022 Jake Hunsaker - 1.1-2 +- Rebase to version 1.1 + Related: RHBZ#2077096 + * Tue Aug 10 2021 Mohan Boddu - 1.0-4 - Rebuilt for IMA sigs, glibc 2.34, aarch64 flags Related: rhbz#1991688