1
0
forked from rpms/sos

import sos-4.1-5.el8

This commit is contained in:
CentOS Sources 2021-11-09 05:04:23 -05:00 committed by Stepan Oksanichenko
parent 8defa491d2
commit 76e87b6741
47 changed files with 4600 additions and 2336 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
SOURCES/sos-4.0.tar.gz
SOURCES/sos-4.1.tar.gz
SOURCES/sos-audit-0.3.tgz

View File

@ -1,2 +1,2 @@
f4850f7d3a4cd3e52f58bbc408e8d5e17df04741 SOURCES/sos-4.0.tar.gz
7d4d03af232e2357e3359ad564a59f4c3654eac0 SOURCES/sos-4.1.tar.gz
9d478b9f0085da9178af103078bbf2fd77b0175a SOURCES/sos-audit-0.3.tgz

View File

@ -0,0 +1,387 @@
From 94b9b90c818eb18f0ca8d78fe063dc5b0677c885 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 22 Jun 2021 12:58:03 +0200
Subject: [PATCH] [rhui] add plugin to RHUI
Add a new/revoked plugin for RHUI (newly based on python3 and pulp-3).
Edditionally, collect /etc/pki/pulp certificates except for RSA keys.
Resolves: #2590
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/pulpcore.py | 7 ++++-
sos/report/plugins/rhui.py | 49 ++++++++++++++++++++++++++++++++++
2 files changed, 55 insertions(+), 1 deletion(-)
create mode 100644 sos/report/plugins/rhui.py
diff --git a/sos/report/plugins/pulpcore.py b/sos/report/plugins/pulpcore.py
index ccaac3185..77ceacb92 100644
--- a/sos/report/plugins/pulpcore.py
+++ b/sos/report/plugins/pulpcore.py
@@ -77,7 +77,12 @@ def separate_value(line, sep=':'):
def setup(self):
self.parse_settings_config()
- self.add_copy_spec("/etc/pulp/settings.py")
+ self.add_copy_spec([
+ "/etc/pulp/settings.py",
+ "/etc/pki/pulp/*"
+ ])
+ # skip collecting certificate keys
+ self.add_forbidden_path("/etc/pki/pulp/*.key")
self.add_cmd_output("rq info -u redis://localhost:6379/8",
env={"LC_ALL": "en_US.UTF-8"},
diff --git a/sos/report/plugins/rhui.py b/sos/report/plugins/rhui.py
new file mode 100644
index 000000000..7acd3f49e
--- /dev/null
+++ b/sos/report/plugins/rhui.py
@@ -0,0 +1,49 @@
+# Copyright (C) 2021 Red Hat, Inc., Pavel Moravec <pmoravec@redhat.com>
+
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+from sos.report.plugins import Plugin, RedHatPlugin
+
+
+class Rhui(Plugin, RedHatPlugin):
+
+ short_desc = 'Red Hat Update Infrastructure'
+
+ plugin_name = "rhui"
+ commands = ("rhui-manager",)
+ files = ("/etc/ansible/facts.d/rhui_auth.fact", "/usr/lib/rhui/cds.py")
+
+ def setup(self):
+ self.add_copy_spec([
+ "/etc/rhui/rhui-tools.conf",
+ "/etc/rhui/registered_subscriptions.conf",
+ "/etc/pki/rhui/*",
+ "/var/log/rhui-subscription-sync.log",
+ "/var/cache/rhui/*",
+ "/root/.rhui/*",
+ ])
+ # skip collecting certificate keys
+ self.add_forbidden_path("/etc/pki/rhui/*.key")
+
+ self.add_cmd_output([
+ "rhui-manager status",
+ "rhui-manager cert info",
+ "ls -lR /var/lib/rhui/remote_share",
+ ])
+
+ def postproc(self):
+ # obfuscate admin_pw and secret_key values
+ for prop in ["admin_pw", "secret_key"]:
+ self.do_path_regex_sub(
+ "/etc/ansible/facts.d/rhui_auth.fact",
+ r"(%s\s*=\s*)(.*)" % prop,
+ r"\1********")
+
+
+# vim: set et ts=4 sw=4 :
From bd15dc764c9d4554d8e8f08163228d65ca099985 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Thu, 24 Jun 2021 17:53:27 +0200
Subject: [PATCH 1/4] [plugins] Allow add_forbidden_path to apply glob
recursively
Add option to apply glob.glob to forbidden path recursively.
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/__init__.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/sos/report/plugins/__init__.py b/sos/report/plugins/__init__.py
index 06923300..6fd1a3b2 100644
--- a/sos/report/plugins/__init__.py
+++ b/sos/report/plugins/__init__.py
@@ -1187,12 +1187,14 @@ class Plugin(object):
'symlink': "no"
})
- def add_forbidden_path(self, forbidden):
+ def add_forbidden_path(self, forbidden, recursive=False):
"""Specify a path, or list of paths, to not copy, even if it's part of
an ``add_copy_spec()`` call
:param forbidden: A filepath to forbid collection from
:type forbidden: ``str`` or a ``list`` of strings
+
+ :param recursive: Should forbidden glob be applied recursively
"""
if isinstance(forbidden, str):
forbidden = [forbidden]
@@ -1202,7 +1204,7 @@ class Plugin(object):
for forbid in forbidden:
self._log_info("adding forbidden path '%s'" % forbid)
- for path in glob.glob(forbid):
+ for path in glob.glob(forbid, recursive=recursive):
self.forbidden_paths.append(path)
def get_all_options(self):
--
2.31.1
From b695201baeb629a6543445d98dbb04f357670621 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Thu, 24 Jun 2021 17:57:48 +0200
Subject: [PATCH 2/4] [pulpcore] improve settings.py parsing
- deal with /etc/pulp/settings.py as a one-line string
- parse dbname from it as well
- dont collect any *.key file from whole /etc/pki/pulp dir
Related: #2593
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/pulpcore.py | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/sos/report/plugins/pulpcore.py b/sos/report/plugins/pulpcore.py
index 77ceacb9..be526035 100644
--- a/sos/report/plugins/pulpcore.py
+++ b/sos/report/plugins/pulpcore.py
@@ -28,9 +28,10 @@ class PulpCore(Plugin, IndependentPlugin):
databases_scope = False
self.dbhost = "localhost"
self.dbport = 5432
+ self.dbname = "pulpcore"
self.dbpasswd = ""
# TODO: read also redis config (we dont expect much customisations)
- # TODO: read also db user (pulp) and database name (pulpcore)
+ # TODO: read also db user (pulp)
self.staticroot = "/var/lib/pulp/assets"
self.uploaddir = "/var/lib/pulp/media/upload"
@@ -44,7 +45,10 @@ class PulpCore(Plugin, IndependentPlugin):
return val
try:
- for line in open("/etc/pulp/settings.py").read().splitlines():
+ # split the lines to "one option per line" format
+ for line in open("/etc/pulp/settings.py").read() \
+ .replace(',', ',\n').replace('{', '{\n') \
+ .replace('}', '\n}').splitlines():
# skip empty lines and lines with comments
if not line or line[0] == '#':
continue
@@ -53,11 +57,14 @@ class PulpCore(Plugin, IndependentPlugin):
continue
# example HOST line to parse:
# 'HOST': 'localhost',
- if databases_scope and match(r"\s+'HOST'\s*:\s+\S+", line):
+ pattern = r"\s*['|\"]%s['|\"]\s*:\s*\S+"
+ if databases_scope and match(pattern % 'HOST', line):
self.dbhost = separate_value(line)
- if databases_scope and match(r"\s+'PORT'\s*:\s+\S+", line):
+ if databases_scope and match(pattern % 'PORT', line):
self.dbport = separate_value(line)
- if databases_scope and match(r"\s+'PASSWORD'\s*:\s+\S+", line):
+ if databases_scope and match(pattern % 'NAME', line):
+ self.dbname = separate_value(line)
+ if databases_scope and match(pattern % 'PASSWORD', line):
self.dbpasswd = separate_value(line)
# if line contains closing '}' database_scope end
if databases_scope and '}' in line:
@@ -82,7 +89,7 @@ class PulpCore(Plugin, IndependentPlugin):
"/etc/pki/pulp/*"
])
# skip collecting certificate keys
- self.add_forbidden_path("/etc/pki/pulp/*.key")
+ self.add_forbidden_path("/etc/pki/pulp/**/*.key", recursive=True)
self.add_cmd_output("rq info -u redis://localhost:6379/8",
env={"LC_ALL": "en_US.UTF-8"},
@@ -104,8 +111,8 @@ class PulpCore(Plugin, IndependentPlugin):
_query = "select * from %s where pulp_last_updated > NOW() - " \
"interval '%s days' order by pulp_last_updated" % \
(table, task_days)
- _cmd = "psql -h %s -p %s -U pulp -d pulpcore -c %s" % \
- (self.dbhost, self.dbport, quote(_query))
+ _cmd = "psql -h %s -p %s -U pulp -d %s -c %s" % \
+ (self.dbhost, self.dbport, self.dbname, quote(_query))
self.add_cmd_output(_cmd, env=self.env, suggest_filename=table)
def postproc(self):
--
2.31.1
From 0286034da44bce43ab368dfc6815da7d74d60719 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Thu, 24 Jun 2021 17:59:36 +0200
Subject: [PATCH 3/4] [rhui] call rhui-* commands with proper env and timeout
rhui-manager commands timeout when not being logged in, which
should be reacted by adding proper cmd timeout.
Adding the env.variable ensures potentially unaswered "RHUI Username:"
is also printed/colected.
Further, prevent collecting any *.key file from the whole /etc/pki/rhui
dir.
Related: #2593
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/rhui.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/sos/report/plugins/rhui.py b/sos/report/plugins/rhui.py
index 7acd3f49..5a152427 100644
--- a/sos/report/plugins/rhui.py
+++ b/sos/report/plugins/rhui.py
@@ -29,13 +29,16 @@ class Rhui(Plugin, RedHatPlugin):
"/root/.rhui/*",
])
# skip collecting certificate keys
- self.add_forbidden_path("/etc/pki/rhui/*.key")
+ self.add_forbidden_path("/etc/pki/rhui/**/*.key", recursive=True)
+ # call rhui-manager commands with 1m timeout and
+ # with an env. variable ensuring that "RHUI Username:"
+ # even unanswered prompt gets collected
self.add_cmd_output([
"rhui-manager status",
"rhui-manager cert info",
"ls -lR /var/lib/rhui/remote_share",
- ])
+ ], timeout=60, env={'PYTHONUNBUFFERED': '1'})
def postproc(self):
# obfuscate admin_pw and secret_key values
--
2.31.1
From a656bd239ab86dfd8973f733ae2c0fbd0c57d416 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Thu, 24 Jun 2021 18:01:14 +0200
Subject: [PATCH 4/4] [rhui] fix broken obfuscation
- /etc/ansible/facts.d/rhui_*.fact must be collected by
rhui plugin to let some file to be obfuscated there
- obfuscate also cookies values that can grant login access
Resolves: #2593
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/ansible.py | 3 +++
sos/report/plugins/rhui.py | 7 +++++++
2 files changed, 10 insertions(+)
diff --git a/sos/report/plugins/ansible.py b/sos/report/plugins/ansible.py
index 3e5d3d37..5991b786 100644
--- a/sos/report/plugins/ansible.py
+++ b/sos/report/plugins/ansible.py
@@ -29,4 +29,7 @@ class Ansible(Plugin, RedHatPlugin, UbuntuPlugin):
"ansible --version"
])
+ # let rhui plugin collects the RHUI specific files
+ self.add_forbidden_path("/etc/ansible/facts.d/rhui_*.fact")
+
# vim: set et ts=4 sw=4 :
diff --git a/sos/report/plugins/rhui.py b/sos/report/plugins/rhui.py
index 5a152427..1d479f85 100644
--- a/sos/report/plugins/rhui.py
+++ b/sos/report/plugins/rhui.py
@@ -27,6 +27,7 @@ class Rhui(Plugin, RedHatPlugin):
"/var/log/rhui-subscription-sync.log",
"/var/cache/rhui/*",
"/root/.rhui/*",
+ "/etc/ansible/facts.d/rhui_*.fact",
])
# skip collecting certificate keys
self.add_forbidden_path("/etc/pki/rhui/**/*.key", recursive=True)
@@ -47,6 +48,12 @@ class Rhui(Plugin, RedHatPlugin):
"/etc/ansible/facts.d/rhui_auth.fact",
r"(%s\s*=\s*)(.*)" % prop,
r"\1********")
+ # obfuscate twoo cookies for login session
+ for cookie in ["csrftoken", "sessionid"]:
+ self.do_path_regex_sub(
+ r"/root/\.rhui/.*/cookies.txt",
+ r"(%s\s+)(\S+)" % cookie,
+ r"\1********")
# vim: set et ts=4 sw=4 :
--
2.31.1
From 4e5bebffca9936bcdf4d38aad9989970a15dd72b Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 3 Aug 2021 21:54:33 +0200
Subject: [PATCH] [rhui] Update the plugin on several places
- obfuscate "rhui_manager_password: xxx" in /root/.rhui/answers.yaml*
- no need to collect or obfuscate anything from /etc/ansible/facts.d
- newly detect the plugin via /etc/rhui/rhui-tools.conf file or rhui-manager
command (only)
Resolves: #2637
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/rhui.py | 14 ++++++--------
1 file changed, 6 insertions(+), 8 deletions(-)
diff --git a/sos/report/plugins/rhui.py b/sos/report/plugins/rhui.py
index 1d479f85..52065fb4 100644
--- a/sos/report/plugins/rhui.py
+++ b/sos/report/plugins/rhui.py
@@ -16,8 +16,8 @@ class Rhui(Plugin, RedHatPlugin):
short_desc = 'Red Hat Update Infrastructure'
plugin_name = "rhui"
- commands = ("rhui-manager",)
- files = ("/etc/ansible/facts.d/rhui_auth.fact", "/usr/lib/rhui/cds.py")
+ commands = ("rhui-manager", )
+ files = ("/etc/rhui/rhui-tools.conf", )
def setup(self):
self.add_copy_spec([
@@ -27,7 +27,6 @@ class Rhui(Plugin, RedHatPlugin):
"/var/log/rhui-subscription-sync.log",
"/var/cache/rhui/*",
"/root/.rhui/*",
- "/etc/ansible/facts.d/rhui_*.fact",
])
# skip collecting certificate keys
self.add_forbidden_path("/etc/pki/rhui/**/*.key", recursive=True)
@@ -42,11 +41,10 @@ class Rhui(Plugin, RedHatPlugin):
], timeout=60, env={'PYTHONUNBUFFERED': '1'})
def postproc(self):
- # obfuscate admin_pw and secret_key values
- for prop in ["admin_pw", "secret_key"]:
- self.do_path_regex_sub(
- "/etc/ansible/facts.d/rhui_auth.fact",
- r"(%s\s*=\s*)(.*)" % prop,
+ # hide rhui_manager_password value in (also rotated) answers file
+ self.do_path_regex_sub(
+ r"/root/\.rhui/answers.yaml.*",
+ r"(\s*rhui_manager_password\s*:)\s*(\S+)",
r"\1********")
# obfuscate twoo cookies for login session
for cookie in ["csrftoken", "sessionid"]:
--
2.31.1

View File

@ -1,37 +0,0 @@
From 086c1c5ca52b0ed8b810ad5a293a574ba990e635 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 13 Oct 2020 20:14:35 +0200
Subject: [PATCH] [cleaner] more streamlined sanitize_item method
Remove a duplicate call in both IF branches.
Resolves: #2272
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/cleaner/mappings/ip_map.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/sos/cleaner/mappings/ip_map.py b/sos/cleaner/mappings/ip_map.py
index 45fd9739..e6dffd60 100644
--- a/sos/cleaner/mappings/ip_map.py
+++ b/sos/cleaner/mappings/ip_map.py
@@ -121,13 +121,12 @@ class SoSIPMap(SoSMap):
# network and if it has, replace the default /32 netmask that
# ipaddress applies to no CIDR-notated addresses
self.set_ip_cidr_from_existing_subnet(addr)
- return self.sanitize_ipaddr(addr)
else:
# we have a CIDR notation, so generate an obfuscated network
# address and then generate an IP address within that network's
# range
self.sanitize_network(network)
- return self.sanitize_ipaddr(addr)
+ return self.sanitize_ipaddr(addr)
def sanitize_network(self, network):
"""Obfuscate the network address provided, and if there are host bits
--
2.26.2

View File

@ -1,42 +0,0 @@
From bbd28011f8bb710d64283bd6d3ec68c0fb5430b4 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Fri, 6 Nov 2020 21:28:37 +0100
Subject: [PATCH] [ovirt] collect /etc/pki/ovirt-engine/.truststore
.truststore contains useful public CAs but a_c_s skips collecting
that hidden file.
Closes: #2296
Resolves: #2297
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/ovirt.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/sos/report/plugins/ovirt.py b/sos/report/plugins/ovirt.py
index 4c112cac..127c971c 100644
--- a/sos/report/plugins/ovirt.py
+++ b/sos/report/plugins/ovirt.py
@@ -137,12 +137,15 @@ class Ovirt(Plugin, RedHatPlugin):
"/var/lib/ovirt-engine-reports/jboss_runtime/config"
])
- # Copying host certs.
+ # Copying host certs; extra copy the hidden .truststore file
self.add_forbidden_path([
"/etc/pki/ovirt-engine/keys",
"/etc/pki/ovirt-engine/private"
])
- self.add_copy_spec("/etc/pki/ovirt-engine/")
+ self.add_copy_spec([
+ "/etc/pki/ovirt-engine/",
+ "/etc/pki/ovirt-engine/.truststore",
+ ])
def postproc(self):
"""
--
2.26.2

View File

@ -1,179 +0,0 @@
From 4e46e0c8db3e2ecea7279ae7a781ae2e22a81b69 Mon Sep 17 00:00:00 2001
From: David Vallee Delisle <dvd@redhat.com>
Date: Mon, 31 Aug 2020 18:58:42 -0400
Subject: [PATCH] [openstack_ironic] Missing ironic-inspector configs
We're missing the ironic-inspector configurations, probably because they
were in the RedHatPlugin class, at the bottom of the file and they were
probably missed when updating this plugin. Moving them at the top with
the other `add_copy_spec` will help tracking them in case something
change again.
Revamping also the way we grab logs to check if we're in a container
first.
Resolves: #2223
Signed-off-by: David Vallee Delisle <dvd@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/openstack_ironic.py | 121 +++++++++++++++++--------
1 file changed, 82 insertions(+), 39 deletions(-)
diff --git a/sos/report/plugins/openstack_ironic.py b/sos/report/plugins/openstack_ironic.py
index 314d2a58..57060a27 100644
--- a/sos/report/plugins/openstack_ironic.py
+++ b/sos/report/plugins/openstack_ironic.py
@@ -20,41 +20,95 @@ class OpenStackIronic(Plugin):
profiles = ('openstack', 'openstack_undercloud')
var_puppet_gen = "/var/lib/config-data/puppet-generated/ironic"
+ ins_puppet_gen = var_puppet_gen + "_inspector"
def setup(self):
- self.conf_list = [
- "/etc/ironic/*",
- self.var_puppet_gen + "/etc/ironic/*",
- self.var_puppet_gen + "_api/etc/ironic/*"
- ]
- self.add_copy_spec([
- "/etc/ironic/",
- self.var_puppet_gen + "/etc/xinetd.conf",
- self.var_puppet_gen + "/etc/xinetd.d/",
- self.var_puppet_gen + "/etc/ironic/",
- self.var_puppet_gen + "/etc/httpd/conf/",
- self.var_puppet_gen + "/etc/httpd/conf.d/",
- self.var_puppet_gen + "/etc/httpd/conf.modules.d/*.conf",
- self.var_puppet_gen + "/etc/my.cnf.d/tripleo.cnf",
- self.var_puppet_gen + "_api/etc/ironic/",
- self.var_puppet_gen + "_api/etc/httpd/conf/",
- self.var_puppet_gen + "_api/etc/httpd/conf.d/",
- self.var_puppet_gen + "_api/etc/httpd/conf.modules.d/*.conf",
- self.var_puppet_gen + "_api/etc/my.cnf.d/tripleo.cnf"
- ])
-
- if self.get_option("all_logs"):
+
+ in_container = self.container_exists('.*ironic_api')
+
+ if in_container:
+ self.conf_list = [
+ self.var_puppet_gen + "/etc/ironic/*",
+ self.var_puppet_gen + "/etc/ironic-inspector/*",
+ self.var_puppet_gen + "_api/etc/ironic/*",
+ self.ins_puppet_gen + "/etc/ironic-inspector/*",
+ self.ins_puppet_gen + "/var/lib/httpboot/inspector.ipxe"
+ ]
self.add_copy_spec([
- "/var/log/ironic/",
+ "/var/lib/ironic-inspector/",
+ "/var/log/containers/ironic-inspector/ramdisk/",
+ self.var_puppet_gen + "/etc/xinetd.conf",
+ self.var_puppet_gen + "/etc/xinetd.d/",
+ self.var_puppet_gen + "/etc/ironic/",
+ self.var_puppet_gen + "/etc/ironic-inspector/",
+ self.var_puppet_gen + "/etc/httpd/conf/",
+ self.var_puppet_gen + "/etc/httpd/conf.d/",
+ self.var_puppet_gen + "/etc/httpd/conf.modules.d/*.conf",
+ self.var_puppet_gen + "/etc/my.cnf.d/tripleo.cnf",
+ self.var_puppet_gen + "_api/etc/ironic/",
+ self.var_puppet_gen + "_api/etc/httpd/conf/",
+ self.var_puppet_gen + "_api/etc/httpd/conf.d/",
+ self.var_puppet_gen + "_api/etc/httpd/conf.modules.d/*.conf",
+ self.var_puppet_gen + "_api/etc/my.cnf.d/tripleo.cnf",
+ self.ins_puppet_gen + "/etc/ironic-inspector/*",
+ self.ins_puppet_gen + "/var/lib/httpboot/inspector.ipxe"
])
+
+ if self.get_option("all_logs"):
+ self.add_copy_spec([
+ "/var/log/containers/ironic/",
+ "/var/log/containers/ironic-inspector/"
+ ])
+ else:
+ self.add_copy_spec([
+ "/var/log/containers/ironic/*.log",
+ "/var/log/containers/ironic-inspector/*.log",
+ ])
+
+ for path in ['/var/lib/ironic', '/httpboot', '/tftpboot',
+ self.ins_puppet_gen + '/var/lib/httpboot/',
+ self.ins_puppet_gen + '/var/lib/tftpboot/']:
+ self.add_cmd_output('ls -laRt %s' % path)
+ self.add_cmd_output('ls -laRt %s' %
+ (self.var_puppet_gen + path))
+
+ # Let's get the packages from the containers, always helpful when
+ # troubleshooting.
+ for container_name in ['ironic_inspector_dnsmasq',
+ 'ironic_inspector', 'ironic_pxe_http',
+ 'ironic_pxe_tftp', 'ironic_neutron_agent',
+ 'ironic_conductor', 'ironic_api']:
+ if self.container_exists('.*' + container_name):
+ self.add_cmd_output(self.fmt_container_cmd(container_name,
+ 'rpm -qa'))
+
else:
+ self.conf_list = [
+ "/etc/ironic/*",
+ "/etc/ironic-inspector/*",
+ ]
self.add_copy_spec([
- "/var/log/ironic/*.log",
+ "/etc/ironic/",
+ "/etc/ironic-inspector/",
+ "/var/lib/ironic-inspector/",
+ "/var/log/ironic-inspector/ramdisk/",
+ "/etc/my.cnf.d/tripleo.cnf",
+ "/var/lib/httpboot/inspector.ipxe"
])
- for path in ['/var/lib/ironic', '/httpboot', '/tftpboot']:
- self.add_cmd_output('ls -laRt %s' % path)
- self.add_cmd_output('ls -laRt %s' % (self.var_puppet_gen + path))
+ if self.get_option("all_logs"):
+ self.add_copy_spec([
+ "/var/log/ironic/",
+ "/var/log/ironic-inspector/",
+ ])
+ else:
+ self.add_copy_spec([
+ "/var/log/ironic/*.log",
+ "/var/log/ironic-inspector/*.log",
+ ])
+
+ for path in ['/var/lib/ironic', '/httpboot', '/tftpboot']:
+ self.add_cmd_output('ls -laRt %s' % path)
vars_all = [p in os.environ for p in [
'OS_USERNAME', 'OS_PASSWORD']]
@@ -136,6 +190,7 @@ class RedHatIronic(OpenStackIronic, RedHatPlugin):
def setup(self):
super(RedHatIronic, self).setup()
+ # ironic-discoverd was renamed to ironic-inspector in Liberty
# is the optional ironic-discoverd service installed?
if any([self.is_installed(p) for p in self.discoverd_packages]):
self.conf_list.append('/etc/ironic-discoverd/*')
@@ -146,18 +201,6 @@ class RedHatIronic(OpenStackIronic, RedHatPlugin):
self.add_journal(units="openstack-ironic-discoverd")
self.add_journal(units="openstack-ironic-discoverd-dnsmasq")
- # ironic-discoverd was renamed to ironic-inspector in Liberty
- self.conf_list.append('/etc/ironic-inspector/*')
- self.conf_list.append(self.var_puppet_gen + '/etc/ironic-inspector/*')
- self.add_copy_spec('/etc/ironic-inspector/')
- self.add_copy_spec(self.var_puppet_gen + '/etc/ironic-inspector/')
- self.add_copy_spec('/var/lib/ironic-inspector/')
- if self.get_option("all_logs"):
- self.add_copy_spec('/var/log/ironic-inspector/')
- else:
- self.add_copy_spec('/var/log/ironic-inspector/*.log')
- self.add_copy_spec('/var/log/ironic-inspector/ramdisk/')
-
self.add_journal(units="openstack-ironic-inspector-dnsmasq")
if self.osc_available:
--
2.26.2

View File

@ -1,228 +0,0 @@
From b8da3e3ed94075fa5ccf74a61ce64812b904d0c5 Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Tue, 25 Aug 2020 14:16:52 +0530
Subject: [PATCH] [powerpc]Add support to collect hardware component logs
This patch updates powerpc plugin to collect Hardware and
firmware information.
In this patch we are reading Hardware and firmware version
details through lsvpd, lscfg and lsmcode commands
Related: #2213
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Reported-by: Borislav Stoymirski <borislav.stoymirski@bg.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/powerpc.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/sos/report/plugins/powerpc.py b/sos/report/plugins/powerpc.py
index 6cd8dd14..9f38bd7d 100644
--- a/sos/report/plugins/powerpc.py
+++ b/sos/report/plugins/powerpc.py
@@ -50,7 +50,10 @@ class PowerPC(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin):
"ppc64_cpu --run-mode",
"ppc64_cpu --frequency",
"ppc64_cpu --dscr",
- "diag_encl -v"
+ "diag_encl -v",
+ "lsvpd -D",
+ "lsmcode -A",
+ "lscfg -v"
])
if ispSeries:
--
2.26.2
From 3d25bbfdadf6c5f33dba7522536f744da1940794 Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Tue, 25 Aug 2020 14:21:21 +0530
Subject: [PATCH] [iprconfig]Add support to collect RAID adapter logs
This patch updates iprconfig plugin to collect IBM Power
RAID adapter device driver information.
Related: #2213
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Reported-by: Borislav Stoymirski <borislav.stoymirski@bg.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/iprconfig.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/report/plugins/iprconfig.py b/sos/report/plugins/iprconfig.py
index 08503a78..f7511a6c 100644
--- a/sos/report/plugins/iprconfig.py
+++ b/sos/report/plugins/iprconfig.py
@@ -32,6 +32,7 @@ class IprConfig(Plugin, RedHatPlugin, UbuntuPlugin, DebianPlugin):
"iprconfig -c show-af-disks",
"iprconfig -c show-all-af-disks",
"iprconfig -c show-slots",
+ "iprconfig -c dump"
])
show_ioas = self.collect_cmd_output("iprconfig -c show-ioas")
--
2.26.2
From effdb3b84ab80fa68d41af1438bfae465c571127 Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Tue, 25 Aug 2020 14:30:23 +0530
Subject: [PATCH] [kernel]Add support to collect network debugging logs
This patch is to collect hybrid network debugging messages
Related: #2213
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Reported-by: Luciano Chavez <lnx1138@linux.vnet.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/kernel.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/report/plugins/kernel.py b/sos/report/plugins/kernel.py
index febe2ad0..27e0e4d0 100644
--- a/sos/report/plugins/kernel.py
+++ b/sos/report/plugins/kernel.py
@@ -106,6 +106,7 @@ class Kernel(Plugin, IndependentPlugin):
"/proc/misc",
"/var/log/dmesg",
"/sys/fs/pstore",
+ "/var/log/hcnmgr",
clocksource_path + "available_clocksource",
clocksource_path + "current_clocksource"
])
--
2.26.2
From b3fd83f0cc92b89e7adf8d66c446f3cf5ab1388b Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Mon, 31 Aug 2020 10:56:15 +0530
Subject: [PATCH] [mvcli]Add support to collect mvCLI PCI adapter infomation
This patch is to add new plugin mvcli to collect
SATA drives connected to system backplane adapter information.
infor -o vd ----> If the virtual disk was successfully
created, show a new RAID virtual disk
info -o pd -----> To show all physical disks and IDs:
info -o hba -----> To show all host bus adapters (HBAs):
smart -p 0 -----> To check for errors on a disk:
Related: #2213
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Reported-by: Borislav Stoymirski <borislav.stoymirski@bg.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/mvcli.py | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
create mode 100644 sos/report/plugins/mvcli.py
diff --git a/sos/report/plugins/mvcli.py b/sos/report/plugins/mvcli.py
new file mode 100644
index 00000000..ce7bf77b
--- /dev/null
+++ b/sos/report/plugins/mvcli.py
@@ -0,0 +1,35 @@
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+
+# This sosreport plugin is meant for sas adapters.
+# This plugin logs inforamtion on each adapter it finds.
+
+from sos.report.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class mvCLI(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin):
+
+ short_desc = 'mvCLI Integrated RAID adapter information'
+
+ plugin_name = "mvcli"
+ commands = ("/opt/marvell/bin/mvcli",)
+
+ def setup(self):
+
+ # get list of adapters
+ subcmds = [
+ 'info -o vd',
+ 'info -o pd',
+ 'info -o hba',
+ 'smart -p 0',
+ ]
+
+ self.add_cmd_output(["/opt/marvell/bin/mvcli %s" % s for s in subcmds])
+
+# vim: et ts=4 sw=4
--
2.26.2
From 48ac730fbf4b168604079b18675867c5ed6dc1ae Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Mon, 31 Aug 2020 11:54:52 +0530
Subject: [PATCH] [arcconf]Add support to collect arcconf adapter infomation
This patch is to add new arcconf plugin to collect
SATA drives connected to system backplane adapter information.
arcconf getconfig 1 ----> To list the logical drives and
device configurations
Closes: #2213
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Reported-by: Borislav Stoymirski <borislav.stoymirski@bg.ibm.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/arcconf.py | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
create mode 100644 sos/report/plugins/arcconf.py
diff --git a/sos/report/plugins/arcconf.py b/sos/report/plugins/arcconf.py
new file mode 100644
index 00000000..64d6bb1e
--- /dev/null
+++ b/sos/report/plugins/arcconf.py
@@ -0,0 +1,28 @@
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+
+# This sosreport plugin is meant for sas adapters.
+# This plugin logs inforamtion on each adapter it finds.
+
+from sos.report.plugins import Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin
+
+
+class arcconf(Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin):
+
+ short_desc = 'arcconf Integrated RAID adapter information'
+
+ plugin_name = "arcconf"
+ commands = ("arcconf",)
+
+ def setup(self):
+
+ # get list of adapters
+ self.add_cmd_output("arcconf getconfig 1")
+
+# vim: et ts=4 sw=4
--
2.26.2

View File

@ -1,70 +0,0 @@
From 019f7c49768f27ef15f39d80db8a03b2aaa453ee Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Mon, 21 Sep 2020 17:33:25 +0200
Subject: [PATCH] [crio] collect /etc/crio/crio.conf.d/
Crio configs can be newly in the dir also.
Resolves: #2240
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/crio.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/report/plugins/crio.py b/sos/report/plugins/crio.py
index dacc0745..e8b566c3 100644
--- a/sos/report/plugins/crio.py
+++ b/sos/report/plugins/crio.py
@@ -31,6 +31,7 @@ class CRIO(Plugin, RedHatPlugin, UbuntuPlugin):
"/etc/crictl.yaml",
"/etc/crio/crio.conf",
"/etc/crio/seccomp.json",
+ "/etc/crio/crio.conf.d/",
"/etc/systemd/system/cri-o.service",
"/etc/sysconfig/crio-*"
])
--
2.26.2
From 7f72a36144b3e235159556689b5129b7453294e3 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 15 Dec 2020 14:19:34 +0100
Subject: [PATCH] [component] Use sysroot from Policy when opts doesn't specify
it
Until --sysroot option is specified, Archive (sub)classes should
be called with sysroot determined from Policy.
Resolves: #2346
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/component.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sos/component.py b/sos/component.py
index 69d3b755..7774c05a 100644
--- a/sos/component.py
+++ b/sos/component.py
@@ -246,13 +246,13 @@ class SoSComponent():
auto_archive = self.policy.get_preferred_archive()
self.archive = auto_archive(archive_name, self.tmpdir,
self.policy, self.opts.threads,
- enc_opts, self.opts.sysroot,
+ enc_opts, self.sysroot,
self.manifest)
else:
self.archive = TarFileArchive(archive_name, self.tmpdir,
self.policy, self.opts.threads,
- enc_opts, self.opts.sysroot,
+ enc_opts, self.sysroot,
self.manifest)
self.archive.set_debug(True if self.opts.debug else False)
--
2.26.2

View File

@ -1,211 +0,0 @@
From a3b493a8accc338158faa53b9e221067323b75f5 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Thu, 24 Sep 2020 10:06:17 -0400
Subject: [PATCH] [redhat] Ease upload url determination logic
The logic for determining if an archive should be uploaded to the
Customer Portal was too strict, ease it to now properly only block on a
missing case number since username and passwords may now be provided via
env vars.
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/policies/__init__.py | 6 ++++--
sos/policies/redhat.py | 8 ++++++--
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
index 9a1aac07..215739bd 100644
--- a/sos/policies/__init__.py
+++ b/sos/policies/__init__.py
@@ -1427,8 +1427,8 @@ class LinuxPolicy(Policy):
"""Should be overridden by policies to determine if a password needs to
be provided for upload or not
"""
- if ((not self.upload_password and not self._upload_password) and
- self.upload_user):
+ if not self.get_upload_password() and (self.get_upload_user() !=
+ self._upload_user):
msg = (
"Please provide the upload password for %s: "
% self.upload_user
@@ -1472,7 +1473,8 @@ class LinuxPolicy(Policy):
Print a more human-friendly string than vendor URLs
"""
self.upload_archive = archive
- self.upload_url = self.get_upload_url()
+ if not self.upload_url:
+ self.upload_url = self.get_upload_url()
if not self.upload_url:
raise Exception("No upload destination provided by policy or by "
"--upload-url")
diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py
index 34b421f3..f2f847a5 100644
--- a/sos/policies/redhat.py
+++ b/sos/policies/redhat.py
@@ -320,12 +320,16 @@ support representative.
"Enter your Red Hat Customer Portal username (empty to use "
"public dropbox): ")
)
+ if not self.upload_user:
+ self.upload_url = RH_FTP_HOST
+ self.upload_user = self._upload_user
def get_upload_url(self):
+ if self.upload_url:
+ return self.upload_url
if self.commons['cmdlineopts'].upload_url:
return self.commons['cmdlineopts'].upload_url
- if (not self.case_id or not self.upload_user or not
- self.upload_password):
+ if not self.case_id:
# Cannot use the RHCP. Use anonymous dropbox
self.upload_user = self._upload_user
self.upload_directory = self._upload_directory
--
2.26.2
From 11cc6f478a9b41ce81b5b74faab5ca42930262ee Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Thu, 24 Sep 2020 10:17:25 -0400
Subject: [PATCH] [policy] Use user-provided FTP directory if specified
Fixes an issue whereby we ignore a user-provided FTP directory.
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/policies/__init__.py | 2 +-
sos/policies/redhat.py | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
index 215739bd..32f271d9 100644
--- a/sos/policies/__init__.py
+++ b/sos/policies/__init__.py
@@ -1677,7 +1677,7 @@ class LinuxPolicy(Policy):
password = self.get_upload_password()
if not directory:
- directory = self._upload_directory
+ directory = self.upload_directory or self._upload_directory
try:
session = ftplib.FTP(url, user, password)
diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py
index f2f847a5..d079406f 100644
--- a/sos/policies/redhat.py
+++ b/sos/policies/redhat.py
@@ -332,7 +332,8 @@ support representative.
if not self.case_id:
# Cannot use the RHCP. Use anonymous dropbox
self.upload_user = self._upload_user
- self.upload_directory = self._upload_directory
+ if self.upload_directory is None:
+ self.upload_directory = self._upload_directory
self.upload_password = None
return RH_FTP_HOST
else:
--
2.26.2
From caa9a2f2a511689080d019ffab61a4de5787d8be Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Thu, 24 Sep 2020 10:25:00 -0400
Subject: [PATCH] [policy] Handle additional failure conditions for FTP uploads
Adds a timeout and a timeout handler for FTP connections, rather than
letting the connection attempt continue indefinitely.
Second, adds exception handling for an edge case where the connection to
the FTP server fails, but does not generate an exception from the ftplib
module.
Additionally, correct the type-ing of the error numbers being checked so
that we actually match them.
Resolves: #2245
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/policies/__init__.py | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
index 32f271d9..826d022e 100644
--- a/sos/policies/__init__.py
+++ b/sos/policies/__init__.py
@@ -1680,15 +1680,20 @@ class LinuxPolicy(Policy):
directory = self.upload_directory or self._upload_directory
try:
- session = ftplib.FTP(url, user, password)
+ session = ftplib.FTP(url, user, password, timeout=15)
+ if not session:
+ raise Exception("connection failed, did you set a user and "
+ "password?")
session.cwd(directory)
+ except socket.timeout:
+ raise Exception("timeout hit while connecting to %s" % url)
except socket.gaierror:
raise Exception("unable to connect to %s" % url)
except ftplib.error_perm as err:
errno = str(err).split()[0]
- if errno == 503:
+ if errno == '503':
raise Exception("could not login as '%s'" % user)
- if errno == 550:
+ if errno == '550':
raise Exception("could not set upload directory to %s"
% directory)
--
2.26.2
From 21720a0f8c9cf6739e26470b2280e005f0f3e3f1 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Thu, 15 Oct 2020 13:45:37 +0200
Subject: [PATCH] [policy] Use FTP server when user isnt set in batch mode
Caling "sos report --upload --case-id=123 --batch" should fallback
to uploading to FTP server as the upload user is unknown and can't
be prompted in batch mode.
Resolves: #2276
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/policies/redhat.py | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/sos/policies/redhat.py b/sos/policies/redhat.py
index d079406f..3a65b9fa 100644
--- a/sos/policies/redhat.py
+++ b/sos/policies/redhat.py
@@ -324,13 +324,21 @@ support representative.
self.upload_url = RH_FTP_HOST
self.upload_user = self._upload_user
+ def _upload_user_set(self):
+ user = self.get_upload_user()
+ return user and (user != 'anonymous')
+
def get_upload_url(self):
if self.upload_url:
return self.upload_url
if self.commons['cmdlineopts'].upload_url:
return self.commons['cmdlineopts'].upload_url
- if not self.case_id:
- # Cannot use the RHCP. Use anonymous dropbox
+ # anonymous FTP server should be used as fallback when either:
+ # - case id is not set, or
+ # - upload user isn't set AND batch mode prevents to prompt for it
+ if (not self.case_id) or \
+ ((not self._upload_user_set()) and
+ self.commons['cmdlineopts'].batch):
self.upload_user = self._upload_user
if self.upload_directory is None:
self.upload_directory = self._upload_directory
--
2.26.2

View File

@ -0,0 +1,32 @@
From bbb7f8bf522960a8ca7625f539e9e5d109abb704 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Wed, 19 May 2021 08:31:45 +0200
Subject: [PATCH] [networking] collect also tc filter show ingress
Both "tc -s filter show dev %eth [|ingress]" commands required as
they provide different output.
Resolves: #2550
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/networking.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sos/report/plugins/networking.py b/sos/report/plugins/networking.py
index acfa027f..35646268 100644
--- a/sos/report/plugins/networking.py
+++ b/sos/report/plugins/networking.py
@@ -156,7 +156,8 @@ class Networking(Plugin):
"ethtool --phy-statistics " + eth,
"ethtool --show-priv-flags " + eth,
"ethtool --show-eee " + eth,
- "tc -s filter show dev " + eth
+ "tc -s filter show dev " + eth,
+ "tc -s filter show dev " + eth + " ingress",
], tags=eth)
# skip EEPROM collection by default, as it might hang or
--
2.26.3

View File

@ -1,36 +0,0 @@
From 6a4e3fb718a5c3249425dc4ae167b977abdb7f2e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Renaud=20M=C3=A9trich?= <rmetrich@redhat.com>
Date: Thu, 8 Oct 2020 11:51:13 +0200
Subject: [PATCH] [filesys] never collect content of /proc/fs/panfs
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
panfs (from Panasas company) provides statistics under /proc/fs/panfs
which makes sosreports become several hundreds of GBs. This path must
hence be blacklisted.
Resolves: #2262
Signed-off-by: Renaud Métrich <rmetrich@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/filesys.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/sos/report/plugins/filesys.py b/sos/report/plugins/filesys.py
index 3baec3ce..57f608d0 100644
--- a/sos/report/plugins/filesys.py
+++ b/sos/report/plugins/filesys.py
@@ -43,6 +43,8 @@ class Filesys(Plugin, DebianPlugin, UbuntuPlugin, CosPlugin):
"lslocks"
])
+ self.add_forbidden_path('/proc/fs/panfs')
+
if self.get_option('lsof'):
self.add_cmd_output("lsof -b +M -n -l -P", root_symlink="lsof")
--
2.26.2

View File

@ -1,49 +0,0 @@
From be347440d5f8d650791ff044970c5e65ee8ec2a3 Mon Sep 17 00:00:00 2001
From: Jose Castillo <jcastillo@redhat.com>
Date: Mon, 12 Oct 2020 13:47:47 +0100
Subject: [PATCH] [kdump] Collect new kdump logfiles
Two new logfiles are available in kdump:
/var/log/kdump.log
/var/crash/*/kexec-kdump.log
The path for the second logfile mentioned above is the
default one, but this patch deals with a change in
default directory the same way that we do with the
file vmcore-dmesg.txt.
Resolves: RHBZ#1817042 and RHBZ#1887390.
Resolves: #2270
Signed-off-by: Jose Castillo <jcastillo@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/kdump.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/sos/report/plugins/kdump.py b/sos/report/plugins/kdump.py
index 41d08b5b..4eccb3ff 100644
--- a/sos/report/plugins/kdump.py
+++ b/sos/report/plugins/kdump.py
@@ -71,7 +71,8 @@ class RedHatKDump(KDump, RedHatPlugin):
self.add_copy_spec([
"/etc/kdump.conf",
"/etc/udev/rules.d/*kexec.rules",
- "/var/crash/*/vmcore-dmesg.txt"
+ "/var/crash/*/vmcore-dmesg.txt",
+ "/var/log/kdump.log"
])
try:
path = self.read_kdump_conffile()
@@ -80,6 +81,7 @@ class RedHatKDump(KDump, RedHatPlugin):
path = "/var/crash"
self.add_copy_spec("{}/*/vmcore-dmesg.txt".format(path))
+ self.add_copy_spec("{}/*/kexec-kdump.log".format(path))
class DebianKDump(KDump, DebianPlugin, UbuntuPlugin):
--
2.26.2

View File

@ -1,40 +0,0 @@
From a0cb4efb473a553fa034aaa8980635897adf1894 Mon Sep 17 00:00:00 2001
From: Jose Castillo <jcastillo@redhat.com>
Date: Tue, 26 Jan 2021 16:20:44 +0100
Subject: [PATCH] [kdump] Gather the file kexec-dmesg.log
Moved the file name from kexec-kdump.log to
the right one, kexec-dmesg.log and
added it to the list of files to gather via
add_copy_spec as per #1546.
Resolves: RHBZ#1817042
Resolves: #2386
Signed-off-by: Jose Castillo <jcastillo@redhat.com>
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/kdump.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sos/report/plugins/kdump.py b/sos/report/plugins/kdump.py
index 4eccb3ffe..6bcb7f74d 100644
--- a/sos/report/plugins/kdump.py
+++ b/sos/report/plugins/kdump.py
@@ -72,6 +72,7 @@ def setup(self):
"/etc/kdump.conf",
"/etc/udev/rules.d/*kexec.rules",
"/var/crash/*/vmcore-dmesg.txt",
+ "/var/crash/*/kexec-dmesg.log",
"/var/log/kdump.log"
])
try:
@@ -81,7 +82,7 @@ def setup(self):
path = "/var/crash"
self.add_copy_spec("{}/*/vmcore-dmesg.txt".format(path))
- self.add_copy_spec("{}/*/kexec-kdump.log".format(path))
+ self.add_copy_spec("{}/*/kexec-dmesg.log".format(path))
class DebianKDump(KDump, DebianPlugin, UbuntuPlugin):

View File

@ -1,36 +0,0 @@
From 22b19739d94f0a40fb8dfd3236e63991a0c027b9 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Wed, 14 Oct 2020 08:33:28 +0200
Subject: [PATCH] [stratis] Collect key list and report engine
Required for troubleshooting Stratis-engine v. 2.1.0.
Resolves: #2274
Closes: #2273
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/stratis.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/sos/report/plugins/stratis.py b/sos/report/plugins/stratis.py
index b6071d32..a41c9476 100644
--- a/sos/report/plugins/stratis.py
+++ b/sos/report/plugins/stratis.py
@@ -24,8 +24,11 @@ class Stratis(Plugin, RedHatPlugin):
'pool list',
'filesystem list',
'blockdev list',
+ 'key list',
'daemon redundancy',
- 'daemon version'
+ 'daemon version',
+ 'report engine_state_report',
+ '--version',
]
self.add_cmd_output(["stratis %s" % subcmd for subcmd in subcmds])
--
2.26.2

View File

@ -1,34 +0,0 @@
From c07bdbc94269603d2b910ccafa289512478160aa Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Mon, 26 Oct 2020 14:11:56 -0400
Subject: [PATCH] [sos] Fix use of relative paths for --tmp-dir
Fixes an issue where the use of relative paths for `--tmp-dir` causes a
failure in the building of the final archive. Previously, a relative
path would cause the tarball to be produced in a nested directory under
the temp directory of the same name, which would in turn cause
compression and all further operations for the archive to fail.
Fix this by converting relative paths in the option to the absolute path
internally.
Resolves: RHBZ#1891562
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/component.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/component.py b/sos/component.py
index 0aef770c6..b44fdf829 100644
--- a/sos/component.py
+++ b/sos/component.py
@@ -138,7 +138,7 @@ def get_tmpdir_default(self):
use a standardized env var to redirect to the host's filesystem instead
"""
if self.opts.tmp_dir:
- return self.opts.tmp_dir
+ return os.path.abspath(self.opts.tmp_dir)
tmpdir = '/var/tmp'

View File

@ -1,32 +0,0 @@
From 1c6efee74557f433dfc5b67fb8ab76b0d9e6f988 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 8 Dec 2020 20:02:37 +0100
Subject: [PATCH] [collector] allow overriding plain --cluster-type
In few user scenarios, it is useful to force sos collect to override
cluster type, but let it generate list of nodes by itself. For that,
it is sufficient to set the self.cluster_type accordingly.
Resolves: #2331
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/collector/__init__.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py
index 1abb08ae..bd84acaf 100644
--- a/sos/collector/__init__.py
+++ b/sos/collector/__init__.py
@@ -764,6 +764,7 @@ class SoSCollector(SoSComponent):
self.cluster = self.clusters['jbon']
else:
self.cluster = self.clusters[self.opts.cluster_type]
+ self.cluster_type = self.opts.cluster_type
self.cluster.master = self.master
else:
--
2.26.2

View File

@ -1,53 +0,0 @@
From 169898b47b26734a8cdcb748157f7314f7f8821b Mon Sep 17 00:00:00 2001
From: Erik Bernoth <ebernoth@redhat.com>
Date: Tue, 10 Nov 2020 18:32:40 +0100
Subject: [PATCH] [component] Add log verbosity from presets
Closes: #2289
The main problem this tries to solve was that preset verbosity was
ignored in logging.
With a simple test this could be reproduced:
sudo sh -c "source /path/to/repo/sosreport/venv/bin/activate; \
cd /tmp/foo; sos report --preset sostestpreset; cd -"
The bug is that without a change of code there are no messages from the
plugin `host` (no lines of output start wiht "[plugin:host]").
The problem is that the logging is set in the inherited __init__() method
from Component, but the presets are only handled afterwards in the
Report's __init__().
Since it is good to have logging configured from the beginning, the
only option is to reconfigure it after the preset config is known.
The simplest method is to reinitialize the logging, although maybe not
the most efficient.
Signed-off-by: Erik Bernoth <ebernoth@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/__init__.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sos/report/__init__.py b/sos/report/__init__.py
index 2e97010b..c6b0c21c 100644
--- a/sos/report/__init__.py
+++ b/sos/report/__init__.py
@@ -153,6 +153,12 @@ class SoSReport(SoSComponent):
self.opts.merge(self.preset.opts)
# re-apply any cmdline overrides to the preset
self.opts = self.apply_options_from_cmdline(self.opts)
+ if hasattr(self.preset.opts, 'verbosity') and \
+ self.preset.opts.verbosity > 0:
+ print('\nWARNING: It is not recommended to set verbosity via the '
+ 'preset as it might have\nunforseen consequences for your '
+ 'report logs.\n')
+ self._setup_logging()
self._set_directories()
--
2.26.2

View File

@ -1,56 +0,0 @@
From c2ddb50fbbb045daffa6fe5cf489fe47aeef4590 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Wed, 9 Dec 2020 10:21:32 -0500
Subject: [PATCH] [options] Fix --log-size=0 being ignored and unreported
otherwise
The `--log-size` option was being silently ignored, due to a too-loose
conditional in `Component.apply_options_from_cmdline()` which was
inadvertently filtering out the option when a user set it to 0. Note
that this did not affect `sos.conf` settings for this same value.
Similarly, reporting the effective options after preset and cmdline
merging was skipping log-size when it was set to 0, since we normally
want to filter out null-value options (which imply they were not
invoked). Adding an explicit check for `log-size` here is the easiest
route forward to allow the reporting we expect.
Closes: #2334
Resolves: #2335
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/component.py | 2 +-
sos/options.py | 3 +++
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/sos/component.py b/sos/component.py
index 00f27f5e..69d3b755 100644
--- a/sos/component.py
+++ b/sos/component.py
@@ -192,7 +192,7 @@ class SoSComponent():
for opt, val in codict.items():
if opt not in cmdopts.arg_defaults.keys():
continue
- if val and val != opts.arg_defaults[opt]:
+ if val is not None and val != opts.arg_defaults[opt]:
setattr(opts, opt, val)
return opts
diff --git a/sos/options.py b/sos/options.py
index ba3db130..b82a7d36 100644
--- a/sos/options.py
+++ b/sos/options.py
@@ -282,6 +282,9 @@ class SoSOptions():
"""
if name in ("add_preset", "del_preset", "desc", "note"):
return False
+ # Exception list for options that still need to be reported when 0
+ if name in ['log_size', 'plugin_timeout'] and value == 0:
+ return True
return has_value(name, value)
def argify(name, value):
--
2.26.2

View File

@ -1,56 +0,0 @@
From 15e54577289a29e72c636f8987859e91c3a55a7c Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Thu, 10 Dec 2020 20:23:03 +0100
Subject: [PATCH] [report] collect broken symlinks
Information about broken symlink destination is useful information
that sos report should collect. Currently it stops doing so as
stat-ing the symlink to determine filesize fails.
Closes: #2333
Resolves: #2338
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/__init__.py | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/sos/report/plugins/__init__.py b/sos/report/plugins/__init__.py
index 510e116e..1527caea 100644
--- a/sos/report/plugins/__init__.py
+++ b/sos/report/plugins/__init__.py
@@ -1449,11 +1449,16 @@ class Plugin(object):
continue
try:
- filestat = os.stat(_file)
+ file_size = os.stat(_file)[stat.ST_SIZE]
except OSError:
- self._log_info("failed to stat '%s'" % _file)
- continue
- current_size += filestat[stat.ST_SIZE]
+ # if _file is a broken symlink, we should collect it,
+ # otherwise skip it
+ if os.path.islink(_file):
+ file_size = 0
+ else:
+ self._log_info("failed to stat '%s', skipping" % _file)
+ continue
+ current_size += file_size
if sizelimit and current_size > sizelimit:
limit_reached = True
@@ -1467,8 +1472,7 @@ class Plugin(object):
strfile = (
file_name.replace(os.path.sep, ".") + ".tailed"
)
- add_size = (sizelimit + filestat[stat.ST_SIZE]
- - current_size)
+ add_size = sizelimit + file_size - current_size
self.add_string_as_file(tail(_file, add_size), strfile)
rel_path = os.path.relpath('/', os.path.dirname(_file))
link_path = os.path.join(rel_path, 'sos_strings',
--
2.26.2

View File

@ -1,32 +0,0 @@
From debb61f8137c53bdaf8d4473756c68c5e4d5cca2 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 5 Jan 2021 13:35:34 +0100
Subject: [PATCH] [collector] declare sysroot for each component
Commit 7f72a36 requires self.sysroot to exist for each component,
but it is not set for sos-collector. Let pre-fill self.sysroot
every time.
Resolves: #2358
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/component.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/component.py b/sos/component.py
index bd008761..223c3812 100644
--- a/sos/component.py
+++ b/sos/component.py
@@ -108,6 +108,7 @@ class SoSComponent():
try:
import sos.policies
self.policy = sos.policies.load(sysroot=self.opts.sysroot)
+ self.sysroot = self.policy.host_sysroot()
except KeyboardInterrupt:
self._exit(0)
self._is_root = self.policy.is_root()
--
2.26.2

View File

@ -1,33 +0,0 @@
From cd56e096afc8ef06c215c45cbf025bda60f0169c Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 5 Jan 2021 15:06:24 +0100
Subject: [PATCH] [component] honour plugopts from config file
Currently, config file plugopts are ignored as we overwrite it
in apply_options_from_cmdline by empty list default value from
cmdline.
Resolves: #2359
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/component.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/component.py b/sos/component.py
index 7774c05a..bd008761 100644
--- a/sos/component.py
+++ b/sos/component.py
@@ -192,7 +192,7 @@ class SoSComponent():
for opt, val in codict.items():
if opt not in cmdopts.arg_defaults.keys():
continue
- if val is not None and val != opts.arg_defaults[opt]:
+ if val not in [None, [], ''] and val != opts.arg_defaults[opt]:
setattr(opts, opt, val)
return opts
--
2.26.2

View File

@ -1,33 +0,0 @@
From 03642cf2e5619f11c762b63c61c9c69fb2b00cdf Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 8 Dec 2020 19:33:07 +0100
Subject: [PATCH] [plugins] Dont stop collecting by empty specfile when
sizelimit=0
When sizelimit=0, collecting an empty file would set limit_reached
wrongly and stop collecting further files. Let fix this corner case.
Resolves: #2330
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/report/plugins/__init__.py b/sos/report/plugins/__init__.py
index deb46c93..510e116e 100644
--- a/sos/report/plugins/__init__.py
+++ b/sos/report/plugins/__init__.py
@@ -1483,7 +1483,7 @@ class Plugin(object):
self._add_copy_paths([_file])
# in the corner case we just reached the sizelimit, we
# should collect the whole file and stop
- limit_reached = (current_size == sizelimit)
+ limit_reached = (sizelimit and current_size == sizelimit)
if self.manifest:
self.manifest.files.append({
'specification': copyspec,
--
2.26.2

View File

@ -1,35 +0,0 @@
From 486a7918934041306bae8ccc11da2196e8f4c9bb Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Wed, 13 Jan 2021 10:57:58 -0500
Subject: [PATCH] [Policy] Handle additional FTP authentication issues
It was found that some implementations will return a 530 rather than a
503 as the more specific error for incorrect passwords. Handle this
error code explicitly, and then also add a catch-all for any other
ftplib errors that may get raised.
Resolves: #2368
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/policies/__init__.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/sos/policies/__init__.py b/sos/policies/__init__.py
index c5fb4801e..a4f550c96 100644
--- a/sos/policies/__init__.py
+++ b/sos/policies/__init__.py
@@ -477,9 +477,13 @@ def upload_ftp(self, url=None, directory=None, user=None, password=None):
errno = str(err).split()[0]
if errno == '503':
raise Exception("could not login as '%s'" % user)
+ if errno == '530':
+ raise Exception("invalid password for user '%s'" % user)
if errno == '550':
raise Exception("could not set upload directory to %s"
% directory)
+ raise Exception("error trying to establish session: %s"
+ % str(err))
try:
with open(self.upload_archive, 'rb') as _arcfile:

View File

@ -1,60 +0,0 @@
From aca8bd83117e177f2beac6b9434d36d446a7de64 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Mon, 18 Jan 2021 22:45:43 +0100
Subject: [PATCH] [networking] Collect 'ethtool -e <device>' conditionally only
EEPROM dump collection might hang on specific types of devices, or
negatively impact the system otherwise. As a safe option, sos report
should collect the command when explicitly asked via a plugopt only.
Resolves: #2376
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/networking.py | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/sos/report/plugins/networking.py b/sos/report/plugins/networking.py
index e4236ed9..5bdb697e 100644
--- a/sos/report/plugins/networking.py
+++ b/sos/report/plugins/networking.py
@@ -27,7 +27,8 @@ class Networking(Plugin):
("namespaces", "Number of namespaces to collect, 0 for unlimited. " +
"Incompatible with the namespace_pattern plugin option", "slow", 0),
("ethtool_namespaces", "Define if ethtool commands should be " +
- "collected for namespaces", "slow", True)
+ "collected for namespaces", "slow", True),
+ ("eepromdump", "collect 'ethtool -e' for all devices", "slow", False)
]
# switch to enable netstat "wide" (non-truncated) output mode
@@ -141,16 +142,15 @@ class Networking(Plugin):
"ethtool --show-eee " + eth
], tags=eth)
- # skip EEPROM collection for 'bnx2x' NICs as this command
- # can pause the NIC and is not production safe.
- bnx_output = {
- "cmd": "ethtool -i %s" % eth,
- "output": "bnx2x"
- }
- bnx_pred = SoSPredicate(self,
- cmd_outputs=bnx_output,
- required={'cmd_outputs': 'none'})
- self.add_cmd_output("ethtool -e %s" % eth, pred=bnx_pred)
+ # skip EEPROM collection by default, as it might hang or
+ # negatively impact the system on some device types
+ if self.get_option("eepromdump"):
+ cmd = "ethtool -e %s" % eth
+ self._log_warn("WARNING (about to collect '%s'): collecting "
+ "an eeprom dump is known to cause certain NIC "
+ "drivers (e.g. bnx2x/tg3) to interrupt device "
+ "operation" % cmd)
+ self.add_cmd_output(cmd)
# Collect information about bridges (some data already collected via
# "ip .." commands)
--
2.26.2

View File

@ -0,0 +1,284 @@
From 00d12ad3cf24dcc6c73e9bcf63db1d3f17e58bb1 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Thu, 1 Jul 2021 10:50:54 -0400
Subject: [PATCH] [sosnode] Properly format skip-commands and skip-files on
nodes
Fixes an issue where options provided for `skip-commands` and
`skip-files` were not properly formatted, thus causing an exception
during the finalization of the node's sos command.
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/collector/sosnode.py | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/sos/collector/sosnode.py b/sos/collector/sosnode.py
index 6597d236..426edcba 100644
--- a/sos/collector/sosnode.py
+++ b/sos/collector/sosnode.py
@@ -734,11 +734,12 @@ class SosNode():
if self.check_sos_version('4.1'):
if self.opts.skip_commands:
sos_opts.append(
- '--skip-commands=%s' % (quote(self.opts.skip_commands))
+ '--skip-commands=%s' % (
+ quote(','.join(self.opts.skip_commands)))
)
if self.opts.skip_files:
sos_opts.append(
- '--skip-files=%s' % (quote(self.opts.skip_files))
+ '--skip-files=%s' % (quote(','.join(self.opts.skip_files)))
)
if self.check_sos_version('4.2'):
--
2.31.1
From de7edce3f92ed50abcb28dd0dbcbeb104dc7c679 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Fri, 2 Jul 2021 09:52:11 +0200
Subject: [PATCH] [collector] fix a typo in --plugin-option
Sos report uses --plugin-option or --plugopts.
Relevant: #2606
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/collector/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py
index 6d96d692..f072287e 100644
--- a/sos/collector/__init__.py
+++ b/sos/collector/__init__.py
@@ -272,7 +272,7 @@ class SoSCollector(SoSComponent):
help="chroot executed commands to SYSROOT")
sos_grp.add_argument('-e', '--enable-plugins', action="extend",
help='Enable specific plugins for sosreport')
- sos_grp.add_argument('-k', '--plugin-options', action="extend",
+ sos_grp.add_argument('-k', '--plugin-option', action="extend",
help='Plugin option as plugname.option=value')
sos_grp.add_argument('--log-size', default=0, type=int,
help='Limit the size of individual logs (in MiB)')
--
2.31.1
From 24a79ae8df8f29276f6139c68d4ba9b05114f951 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Fri, 2 Jul 2021 09:53:47 +0200
Subject: [PATCH] [options] allow variant option names in config file
While cmdline allows --plugin-option as well as --plugopts,
it stores the value under `plugopts` key. Therefore parsing
config file ignores --plugin-option.
Similarly for --name/--label and --profile/--profiles.
When processing config file, we must unify those potentially duplicit
keys.
Resolves: #2606
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/options.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/sos/options.py b/sos/options.py
index 1eda55d6..a014a022 100644
--- a/sos/options.py
+++ b/sos/options.py
@@ -186,9 +186,18 @@ class SoSOptions():
if 'verbose' in odict.keys():
odict['verbosity'] = int(odict.pop('verbose'))
# convert options names
+ # unify some of them if multiple variants of the
+ # cmdoption exist
+ rename_opts = {
+ 'name': 'label',
+ 'plugin_option': 'plugopts',
+ 'profile': 'profiles'
+ }
for key in list(odict):
if '-' in key:
odict[key.replace('-', '_')] = odict.pop(key)
+ if key in rename_opts:
+ odict[rename_opts[key]] = odict.pop(key)
# set the values according to the config file
for key, val in odict.items():
if isinstance(val, str):
--
2.31.1
From c7d3644c0c64e9e5439806250592a55c8e2de26f Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Thu, 1 Jul 2021 08:11:15 +0200
Subject: [PATCH] [report,collect] unify --map-file arguments
Unify --map[-file] argument among report/collect/clean.
Resolves: #2602
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/cleaner/__init__.py | 2 +-
sos/collector/__init__.py | 2 +-
sos/report/__init__.py | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/sos/cleaner/__init__.py b/sos/cleaner/__init__.py
index 7414b55e0..4c9837826 100644
--- a/sos/cleaner/__init__.py
+++ b/sos/cleaner/__init__.py
@@ -192,7 +192,7 @@ def add_parser_options(cls, parser):
'file for obfuscation'))
clean_grp.add_argument('--no-update', dest='no_update', default=False,
action='store_true',
- help='Do not update the --map file with new '
+ help='Do not update the --map-file with new '
'mappings from this run')
clean_grp.add_argument('--keep-binary-files', default=False,
action='store_true',
diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py
index 7b8cfcf72..6d96d6923 100644
--- a/sos/collector/__init__.py
+++ b/sos/collector/__init__.py
@@ -427,7 +427,7 @@ def add_parser_options(cls, parser):
cleaner_grp.add_argument('--no-update', action='store_true',
default=False, dest='no_update',
help='Do not update the default cleaner map')
- cleaner_grp.add_argument('--map', dest='map_file',
+ cleaner_grp.add_argument('--map-file', dest='map_file',
default='/etc/sos/cleaner/default_mapping',
help=('Provide a previously generated mapping'
' file for obfuscation'))
diff --git a/sos/report/__init__.py b/sos/report/__init__.py
index 7ad2d24a4..411c4eb03 100644
--- a/sos/report/__init__.py
+++ b/sos/report/__init__.py
@@ -341,7 +341,7 @@ def add_parser_options(cls, parser):
cleaner_grp.add_argument('--no-update', action='store_true',
default=False, dest='no_update',
help='Do not update the default cleaner map')
- cleaner_grp.add_argument('--map', dest='map_file',
+ cleaner_grp.add_argument('--map-file', dest='map_file',
default='/etc/sos/cleaner/default_mapping',
help=('Provide a previously generated mapping'
' file for obfuscation'))
From fd75745e7a5a6c5def8e6d23190227872b9912c3 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Wed, 11 Aug 2021 10:48:41 -0400
Subject: [PATCH] [sosnode] Fix passing of plugin options when using
`--only-plugins`
Fixes the handling of plugin options passed by `sos collect` to each
node by first aligning the SoSOption name to those of `report`
(`plugopts`), and second re-arranges the handling of plugin options and
preset options passed by the user when also using `--only-plugins` so
that the former are preserved and passed only with the `--only-plugins`
option value.
Resolves: #2641
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/collector/__init__.py | 5 +++--
sos/collector/sosnode.py | 34 +++++++++++++++++-----------------
2 files changed, 20 insertions(+), 19 deletions(-)
diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py
index 57ef074e..70b7a69e 100644
--- a/sos/collector/__init__.py
+++ b/sos/collector/__init__.py
@@ -84,7 +84,7 @@ class SoSCollector(SoSComponent):
'only_plugins': [],
'password': False,
'password_per_node': False,
- 'plugin_options': [],
+ 'plugopts': [],
'plugin_timeout': None,
'cmd_timeout': None,
'preset': '',
@@ -273,7 +273,8 @@ class SoSCollector(SoSComponent):
help="chroot executed commands to SYSROOT")
sos_grp.add_argument('-e', '--enable-plugins', action="extend",
help='Enable specific plugins for sosreport')
- sos_grp.add_argument('-k', '--plugin-option', action="extend",
+ sos_grp.add_argument('-k', '--plugin-option', '--plugopts',
+ action="extend", dest='plugopts',
help='Plugin option as plugname.option=value')
sos_grp.add_argument('--log-size', default=0, type=int,
help='Limit the size of individual logs (in MiB)')
diff --git a/sos/collector/sosnode.py b/sos/collector/sosnode.py
index 426edcba..5d05c297 100644
--- a/sos/collector/sosnode.py
+++ b/sos/collector/sosnode.py
@@ -667,10 +667,10 @@ class SosNode():
if self.cluster.sos_plugin_options:
for opt in self.cluster.sos_plugin_options:
- if not any(opt in o for o in self.plugin_options):
+ if not any(opt in o for o in self.plugopts):
option = '%s=%s' % (opt,
self.cluster.sos_plugin_options[opt])
- self.plugin_options.append(option)
+ self.plugopts.append(option)
# set master-only options
if self.cluster.check_node_is_master(self):
@@ -688,7 +688,7 @@ class SosNode():
self.only_plugins = list(self.opts.only_plugins)
self.skip_plugins = list(self.opts.skip_plugins)
self.enable_plugins = list(self.opts.enable_plugins)
- self.plugin_options = list(self.opts.plugin_options)
+ self.plugopts = list(self.opts.plugopts)
self.preset = list(self.opts.preset)
def finalize_sos_cmd(self):
@@ -754,6 +754,20 @@ class SosNode():
os.path.join(self.host.sos_bin_path, self.sos_bin)
)
+ if self.plugopts:
+ opts = [o for o in self.plugopts
+ if self._plugin_exists(o.split('.')[0])
+ and self._plugin_option_exists(o.split('=')[0])]
+ if opts:
+ sos_opts.append('-k %s' % quote(','.join(o for o in opts)))
+
+ if self.preset:
+ if self._preset_exists(self.preset):
+ sos_opts.append('--preset=%s' % quote(self.preset))
+ else:
+ self.log_debug('Requested to enable preset %s but preset does '
+ 'not exist on node' % self.preset)
+
if self.only_plugins:
plugs = [o for o in self.only_plugins if self._plugin_exists(o)]
if len(plugs) != len(self.only_plugins):
@@ -792,20 +806,6 @@ class SosNode():
if enable:
sos_opts.append('--enable-plugins=%s' % quote(enable))
- if self.plugin_options:
- opts = [o for o in self.plugin_options
- if self._plugin_exists(o.split('.')[0])
- and self._plugin_option_exists(o.split('=')[0])]
- if opts:
- sos_opts.append('-k %s' % quote(','.join(o for o in opts)))
-
- if self.preset:
- if self._preset_exists(self.preset):
- sos_opts.append('--preset=%s' % quote(self.preset))
- else:
- self.log_debug('Requested to enable preset %s but preset does '
- 'not exist on node' % self.preset)
-
self.sos_cmd = "%s %s" % (sos_cmd, ' '.join(sos_opts))
self.log_info('Final sos command set to %s' % self.sos_cmd)
self.manifest.add_field('final_sos_command', self.sos_cmd)
--
2.31.1

View File

@ -0,0 +1,39 @@
From 4fb834ec862228afb276ccbd45aa86c66044ea66 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Mon, 15 Mar 2021 09:09:51 +0100
Subject: [PATCH] [gluster] collect public keys from the right dir
Collection of glusterfind dir is achieved by /var/lib/gluster
so it doesn't be collected explicitly.
/var/lib/glusterd/glusterfind/.keys/ subdir is required to be
explicitly collected, as add_copy_spec uses glob.glob() that skips
hidden files.
Resolves: #2451
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/gluster.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/sos/report/plugins/gluster.py b/sos/report/plugins/gluster.py
index e1a89df2..952cab63 100644
--- a/sos/report/plugins/gluster.py
+++ b/sos/report/plugins/gluster.py
@@ -76,9 +76,8 @@ class Gluster(Plugin, RedHatPlugin):
"/var/lib/glusterd/",
# collect nfs-ganesha related configuration
"/run/gluster/shared_storage/nfs-ganesha/",
- # collect status files and public ssh keys
- "/var/lib/glusterd/.keys/",
- "/var/lib/glusterd/glusterfind/"
+ # collect public ssh keys (a_s_c skips implicit hidden files)
+ "/var/lib/glusterd/glusterfind/.keys/",
] + glob.glob('/run/gluster/*tier-dht/*'))
if not self.get_option("all_logs"):
--
2.26.3

View File

@ -1,95 +0,0 @@
From 51e8213fd3a83e717fe7ef35d48d5c541b077c5f Mon Sep 17 00:00:00 2001
From: Jose Castillo <jcastillo@redhat.com>
Date: Mon, 8 Feb 2021 16:25:34 +0100
Subject: [PATCH] [gluster] Add glusterd public keys and status files
This patch helps capture some missing files in the
gluster plugin, i.e.:
Files inside /var/lib/glusterd/glusterfind, like
*.status files, that store the required timestamps,
*.pem.pub files, that store ssh public keys.
We also need to omit the glusterfind_*_secret.pem,
which contains the openssh private key.
Files inside /var/lib/glusterd/.keys, that contains
*.pem.pub, the ssh public key.
Closes: RHBZ#1925035, RHBZ#1925419
Resolves: #2411
Signed-off-by: Jose Castillo <jcastillo@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/gluster.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/sos/report/plugins/gluster.py b/sos/report/plugins/gluster.py
index 7b6a9298..e1a89df2 100644
--- a/sos/report/plugins/gluster.py
+++ b/sos/report/plugins/gluster.py
@@ -55,6 +55,9 @@ class Gluster(Plugin, RedHatPlugin):
def setup(self):
self.add_forbidden_path("/var/lib/glusterd/geo-replication/secret.pem")
+ self.add_forbidden_path(
+ "/var/lib/glusterd/glusterfind/glusterfind_*_secret.pem"
+ )
self.add_cmd_output([
"gluster peer status",
@@ -72,7 +75,10 @@ class Gluster(Plugin, RedHatPlugin):
"/etc/glusterfs",
"/var/lib/glusterd/",
# collect nfs-ganesha related configuration
- "/run/gluster/shared_storage/nfs-ganesha/"
+ "/run/gluster/shared_storage/nfs-ganesha/",
+ # collect status files and public ssh keys
+ "/var/lib/glusterd/.keys/",
+ "/var/lib/glusterd/glusterfind/"
] + glob.glob('/run/gluster/*tier-dht/*'))
if not self.get_option("all_logs"):
--
2.26.2
From 4fb834ec862228afb276ccbd45aa86c66044ea66 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Mon, 15 Mar 2021 09:09:51 +0100
Subject: [PATCH] [gluster] collect public keys from the right dir
Collection of glusterfind dir is achieved by /var/lib/gluster
so it doesn't be collected explicitly.
/var/lib/glusterd/glusterfind/.keys/ subdir is required to be
explicitly collected, as add_copy_spec uses glob.glob() that skips
hidden files.
Resolves: #2451
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/gluster.py | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/sos/report/plugins/gluster.py b/sos/report/plugins/gluster.py
index e1a89df2..952cab63 100644
--- a/sos/report/plugins/gluster.py
+++ b/sos/report/plugins/gluster.py
@@ -76,9 +76,8 @@ class Gluster(Plugin, RedHatPlugin):
"/var/lib/glusterd/",
# collect nfs-ganesha related configuration
"/run/gluster/shared_storage/nfs-ganesha/",
- # collect status files and public ssh keys
- "/var/lib/glusterd/.keys/",
- "/var/lib/glusterd/glusterfind/"
+ # collect public ssh keys (a_s_c skips implicit hidden files)
+ "/var/lib/glusterd/glusterfind/.keys/",
] + glob.glob('/run/gluster/*tier-dht/*'))
if not self.get_option("all_logs"):
--
2.26.2

View File

@ -1,101 +0,0 @@
From 271c35b9be95cf4957150fd702823fbb46ddaa6b Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Tue, 19 Jan 2021 19:54:26 +0530
Subject: [PATCH 1/2] [powerpc]:Add support to collect HNV infomation
This patch is to update powerpc plugin to collect
Hyper-V Network Virtualization information.
/var/log/hcnmgr -- hybridnetwork debugging messages. Must collect
/var/ct/IBM.DRM.stderr -- DynamicRM log messages
/var/ct/IW/log/mc/IBM.DRM/trace* -- IBM DRM traces
lsdevinfo
ournalctl
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
---
sos/report/plugins/kernel.py | 1 -
sos/report/plugins/powerpc.py | 9 +++++++--
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/sos/report/plugins/kernel.py b/sos/report/plugins/kernel.py
index 27e0e4d00..febe2ad0a 100644
--- a/sos/report/plugins/kernel.py
+++ b/sos/report/plugins/kernel.py
@@ -106,7 +106,6 @@ def setup(self):
"/proc/misc",
"/var/log/dmesg",
"/sys/fs/pstore",
- "/var/log/hcnmgr",
clocksource_path + "available_clocksource",
clocksource_path + "current_clocksource"
])
diff --git a/sos/report/plugins/powerpc.py b/sos/report/plugins/powerpc.py
index d29eb0a63..c63551cad 100644
--- a/sos/report/plugins/powerpc.py
+++ b/sos/report/plugins/powerpc.py
@@ -63,7 +63,10 @@ def setup(self):
"/proc/ppc64/systemcfg",
"/var/log/platform",
"/var/log/drmgr",
- "/var/log/drmgr.0"
+ "/var/log/drmgr.0",
+ "/var/log/hcnmgr",
+ "/var/ct/IBM.DRM.stderr",
+ "/var/ct/IW/log/mc/IBM.DRM/trace*"
])
ctsnap_path = self.get_cmd_output_path(name="ctsnap", make=True)
self.add_cmd_output([
@@ -74,8 +77,10 @@ def setup(self):
"serv_config -l",
"bootlist -m both -r",
"lparstat -i",
- "ctsnap -xrunrpttr -d %s" % (ctsnap_path)
+ "ctsnap -xrunrpttr -d %s" % (ctsnap_path),
+ "lsdevinfo"
])
+ self.add_service_status("hcn-init")
if isPowerNV:
self.add_copy_spec([
From 692eba8eeec6254bdb356a6bfdc8cfa1f77bfbbc Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Tue, 19 Jan 2021 19:58:53 +0530
Subject: [PATCH 2/2] [scsi]:Add support to collect SCSI debugging logs
This patch updates scsi plugin to collect
additional logs for SCSI devices
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
---
sos/report/plugins/scsi.py | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/sos/report/plugins/scsi.py b/sos/report/plugins/scsi.py
index 50cfca0f7..28d1396c6 100644
--- a/sos/report/plugins/scsi.py
+++ b/sos/report/plugins/scsi.py
@@ -29,10 +29,18 @@ def setup(self):
])
self.add_cmd_output("lsscsi -i", suggest_filename="lsscsi")
- self.add_cmd_output("sg_map -x")
- self.add_cmd_output("lspath")
- self.add_cmd_output("lsmap -all")
- self.add_cmd_output("lsnports")
+
+ self.add_cmd_output([
+ "sg_map -x",
+ "lspath",
+ "lsmap -all",
+ "lsnports",
+ "lsscsi -H",
+ "lsscsi -g",
+ "lsscsi -d",
+ "lsscsi -s",
+ "lsscsi -L"
+ ])
scsi_hosts = glob("/sys/class/scsi_host/*")
self.add_blockdev_cmd("udevadm info -a %(dev)s", devices=scsi_hosts,

View File

@ -0,0 +1,243 @@
From fc0218638f3e865c4315823e72aef2f46d012d07 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Wed, 14 Apr 2021 11:55:03 -0400
Subject: [PATCH 1/2] [clean] Load maps from all archives before obfuscation
loop
Previously, maps were being prepped via archives after extraction. This
reduced the amount of file IO being done, but made it so that necessary
obfuscations from later archives in a series would not be obfuscated in
the archives obfuscated before those later archives were extracted.
Fix this by extracting the map prep files into memory for each archive
to prep the maps before we enter the obfuscation loop entirely.
Closes: #2490
Related: RHBZ#1930181
Resolves: #2492
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/cleaner/__init__.py | 69 +++++++++++++++-----------
sos/cleaner/parsers/username_parser.py | 13 +++--
2 files changed, 45 insertions(+), 37 deletions(-)
diff --git a/sos/cleaner/__init__.py b/sos/cleaner/__init__.py
index b9eb61ef..d10cdc55 100644
--- a/sos/cleaner/__init__.py
+++ b/sos/cleaner/__init__.py
@@ -292,6 +292,7 @@ third party.
# we have at least one valid target to obfuscate
self.completed_reports = []
+ self.preload_all_archives_into_maps()
self.obfuscate_report_paths()
if not self.completed_reports:
@@ -473,6 +474,44 @@ third party.
self.ui_log.info("Exiting on user cancel")
os._exit(130)
+ def preload_all_archives_into_maps(self):
+ """Before doing the actual obfuscation, if we have multiple archives
+ to obfuscate then we need to preload each of them into the mappings
+ to ensure that node1 is obfuscated in node2 as well as node2 being
+ obfuscated in node1's archive.
+ """
+ self.log_info("Pre-loading multiple archives into obfuscation maps")
+ for _arc in self.report_paths:
+ is_dir = os.path.isdir(_arc)
+ if is_dir:
+ _arc_name = _arc
+ else:
+ archive = tarfile.open(_arc)
+ _arc_name = _arc.split('/')[-1].split('.tar')[0]
+ # for each parser, load the map_prep_file into memory, and then
+ # send that for obfuscation. We don't actually obfuscate the file
+ # here, do that in the normal archive loop
+ for _parser in self.parsers:
+ if not _parser.prep_map_file:
+ continue
+ _arc_path = os.path.join(_arc_name, _parser.prep_map_file)
+ try:
+ if is_dir:
+ _pfile = open(_arc_path, 'r')
+ content = _pfile.read()
+ else:
+ _pfile = archive.extractfile(_arc_path)
+ content = _pfile.read().decode('utf-8')
+ _pfile.close()
+ if isinstance(_parser, SoSUsernameParser):
+ _parser.load_usernames_into_map(content)
+ for line in content.splitlines():
+ if isinstance(_parser, SoSHostnameParser):
+ _parser.load_hostname_into_map(line)
+ self.obfuscate_line(line, _parser.prep_map_file)
+ except Exception as err:
+ self.log_debug("Could not prep %s: %s" % (_arc_path, err))
+
def obfuscate_report(self, report):
"""Individually handle each archive or directory we've discovered by
running through each file therein.
@@ -493,7 +532,6 @@ third party.
start_time = datetime.now()
arc_md.add_field('start_time', start_time)
archive.extract()
- self.prep_maps_from_archive(archive)
archive.report_msg("Beginning obfuscation...")
file_list = archive.get_file_list()
@@ -542,35 +580,6 @@ third party.
self.ui_log.info("Exception while processing %s: %s"
% (report, err))
- def prep_maps_from_archive(self, archive):
- """Open specific files from an archive and try to load those values
- into our mappings before iterating through the entire archive.
-
- Positional arguments:
-
- :param archive SoSObfuscationArchive: An open archive object
- """
- for parser in self.parsers:
- if not parser.prep_map_file:
- continue
- prep_file = archive.get_file_path(parser.prep_map_file)
- if not prep_file:
- self.log_debug("Could not prepare %s: %s does not exist"
- % (parser.name, parser.prep_map_file),
- caller=archive.archive_name)
- continue
- # this is a bit clunky, but we need to load this particular
- # parser in a different way due to how hostnames are validated for
- # obfuscation
- if isinstance(parser, SoSHostnameParser):
- with open(prep_file, 'r') as host_file:
- hostname = host_file.readline().strip()
- parser.load_hostname_into_map(hostname)
- if isinstance(parser, SoSUsernameParser):
- parser.load_usernames_into_map(prep_file)
- self.obfuscate_file(prep_file, parser.prep_map_file,
- archive.archive_name)
-
def obfuscate_file(self, filename, short_name=None, arc_name=None):
"""Obfuscate and individual file, line by line.
diff --git a/sos/cleaner/parsers/username_parser.py b/sos/cleaner/parsers/username_parser.py
index 5223c018..2bb6c7f3 100644
--- a/sos/cleaner/parsers/username_parser.py
+++ b/sos/cleaner/parsers/username_parser.py
@@ -39,16 +39,15 @@ class SoSUsernameParser(SoSCleanerParser):
super(SoSUsernameParser, self).__init__(conf_file)
self.mapping.load_names_from_options(opt_names)
- def load_usernames_into_map(self, fname):
+ def load_usernames_into_map(self, content):
"""Since we don't get the list of usernames from a straight regex for
this parser, we need to override the initial parser prepping here.
"""
- with open(fname, 'r') as lastfile:
- for line in lastfile.read().splitlines()[1:]:
- user = line.split()[0]
- if user in self.skip_list:
- continue
- self.mapping.get(user)
+ for line in content.splitlines()[1:]:
+ user = line.split()[0]
+ if user in self.skip_list:
+ continue
+ self.mapping.get(user)
def parse_line(self, line):
count = 0
--
2.26.3
From b713f458bfa92427147de754ea36054bfde53d71 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Wed, 14 Apr 2021 12:22:28 -0400
Subject: [PATCH 2/2] [clean] Remove duplicate file skipping within
obfuscate_line()
A redundant file skipping check was being executed within
`obfuscate_line()` that would cause subsequent archives being obfuscated
to skip line obfuscation within a file, despite iterating through the
entire file.
Remove this redundant check, thus allowing proper obfuscation.
Closes: #2490
Related: RHBZ#1930181
Resolves: #2492
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/cleaner/__init__.py | 11 +++--------
sos/cleaner/obfuscation_archive.py | 2 --
2 files changed, 3 insertions(+), 10 deletions(-)
diff --git a/sos/cleaner/__init__.py b/sos/cleaner/__init__.py
index d10cdc55..bdd24f95 100644
--- a/sos/cleaner/__init__.py
+++ b/sos/cleaner/__init__.py
@@ -508,7 +508,7 @@ third party.
for line in content.splitlines():
if isinstance(_parser, SoSHostnameParser):
_parser.load_hostname_into_map(line)
- self.obfuscate_line(line, _parser.prep_map_file)
+ self.obfuscate_line(line)
except Exception as err:
self.log_debug("Could not prep %s: %s" % (_arc_path, err))
@@ -606,7 +606,7 @@ third party.
if not line.strip():
continue
try:
- line, count = self.obfuscate_line(line, short_name)
+ line, count = self.obfuscate_line(line)
subs += count
tfile.write(line)
except Exception as err:
@@ -631,7 +631,7 @@ third party.
pass
return string_data
- def obfuscate_line(self, line, filename):
+ def obfuscate_line(self, line):
"""Run a line through each of the obfuscation parsers, keeping a
cumulative total of substitutions done on that particular line.
@@ -639,16 +639,11 @@ third party.
:param line str: The raw line as read from the file being
processed
- :param filename str: Filename the line was read from
Returns the fully obfuscated line and the number of substitutions made
"""
count = 0
for parser in self.parsers:
- if filename and any([
- re.match(_s, filename) for _s in parser.skip_files
- ]):
- continue
try:
line, _count = parser.parse_line(line)
count += _count
diff --git a/sos/cleaner/obfuscation_archive.py b/sos/cleaner/obfuscation_archive.py
index 84ca30cd..c64ab13b 100644
--- a/sos/cleaner/obfuscation_archive.py
+++ b/sos/cleaner/obfuscation_archive.py
@@ -219,8 +219,6 @@ class SoSObfuscationArchive():
:param filename str: Filename relative to the extracted
archive root
"""
- if filename in self.file_sub_list:
- return True
if not os.path.isfile(self.get_file_path(filename)):
return True
--
2.26.3

View File

@ -0,0 +1,99 @@
From 3b439fb64d8d65b0c09aa8452bf0181ec20f8bcf Mon Sep 17 00:00:00 2001
From: Jose Castillo <jcastillo@redhat.com>
Date: Wed, 3 Mar 2021 13:03:16 +0100
Subject: [PATCH] [man] Multiple fixes in man pages
This patch fixes references to sosreport, to the
preferred 'sos report'. Also adds "SEE ALSO" consistently
for all man pages, and fixes a MAINTAINER line.
Resolves: #2432
Signed-off-by: Jose Castillo <jcastillo@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
man/en/sos-clean.1 | 5 +++++
man/en/sos-collect.1 | 1 +
man/en/sos-report.1 | 22 ++++++++++++++--------
3 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/man/en/sos-clean.1 b/man/en/sos-clean.1
index 0c62ed07..d64a0ec7 100644
--- a/man/en/sos-clean.1
+++ b/man/en/sos-clean.1
@@ -77,6 +77,11 @@ Default: 4
.TP
.B \-\-no-update
Do not write the mapping file contents to /etc/sos/cleaner/default_mapping
+.SH SEE ALSO
+.BR sos (1)
+.BR sos-report (1)
+.BR sos-collect (1)
+
.SH MAINTAINER
.nf
Jake Hunsaker <jhunsake@redhat.com>
diff --git a/man/en/sos-collect.1 b/man/en/sos-collect.1
index d4e5e648..da36542d 100644
--- a/man/en/sos-collect.1
+++ b/man/en/sos-collect.1
@@ -330,6 +330,7 @@ Sosreport option. Override the default compression type.
.SH SEE ALSO
.BR sos (1)
.BR sos-report (1)
+.BR sos-clean (1)
.SH MAINTAINER
Jake Hunsaker <jhunsake@redhat.com>
diff --git a/man/en/sos-report.1 b/man/en/sos-report.1
index e7fae97b..81005959 100644
--- a/man/en/sos-report.1
+++ b/man/en/sos-report.1
@@ -38,11 +38,12 @@ sosreport \- Collect and package diagnostic and support data
[-h|--help]\fR
.SH DESCRIPTION
-\fBsosreport\fR generates an archive of configuration and diagnostic
-information from the running system. The archive may be stored locally
-or centrally for recording or tracking purposes or may be sent to
-technical support representatives, developers or system administrators
-to assist with technical fault-finding and debugging.
+\fBreport\fR is an sos subcommand that generates an archive of
+configuration and diagnostic information from the running system.
+The archive may be stored locally or centrally for recording or
+tracking purposes or may be sent to technical support representatives,
+developers or system administrators to assist with technical
+fault-finding and debugging.
.LP
Sos is modular in design and is able to collect data from a wide
range of subsystems and packages that may be installed. An
@@ -110,8 +111,8 @@ User defined presets are saved under /var/lib/sos/presets as JSON-formatted file
.B \--add-preset ADD_PRESET [options]
Add a preset with name ADD_PRESET that enables [options] when called.
-For example, 'sosreport --add-preset mypreset --log-size=50 -n logs' will enable
-a user to run 'sosreport --preset mypreset' that sets the maximum log size to
+For example, 'sos report --add-preset mypreset --log-size=50 -n logs' will enable
+a user to run 'sos report --preset mypreset' that sets the maximum log size to
50 and disables the logs plugin.
Note: to set a description for the preset that is displayed with \fB--list-presets\fR,
@@ -343,9 +344,14 @@ been tested for this port or may still be under active development.
.TP
.B \--help
Display usage message.
+.SH SEE ALSO
+.BR sos (1)
+.BR sos-clean (1)
+.BR sos-collect (1)
+
.SH MAINTAINER
.nf
-Bryn M. Reeves <bmr@redhat.com>
+Jake Hunsaker <jhunsake@redhat.com>
.fi
.SH AUTHORS & CONTRIBUTORS
See \fBAUTHORS\fR file in the package documentation.
--
2.26.3

View File

@ -0,0 +1,50 @@
From 153c0154050a111fd7e5bcf4a685f906a1dea737 Mon Sep 17 00:00:00 2001
From: Jose Castillo <jcastillo@redhat.com>
Date: Wed, 10 Mar 2021 15:33:50 +0100
Subject: [PATCH] [ds] Mask password and encription keys in ldif files
Both /etc/dirsrv/slapd*/dse.ldif{,.startOK} files contain
sensitive information :
- all the nsSymmetricKey entries : symmetric encryption key
- nsslapd-rootpw : the admin password's hash
This patch masks these entries in the files we collect.
Resolves: #2442
Signed-off-by: Jose Castillo <jcastillo@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/ds.py | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/sos/report/plugins/ds.py b/sos/report/plugins/ds.py
index f4d68d6e..d467dc89 100644
--- a/sos/report/plugins/ds.py
+++ b/sos/report/plugins/ds.py
@@ -74,4 +74,22 @@ class DirectoryServer(Plugin, RedHatPlugin):
self.add_cmd_output("ls -l /var/lib/dirsrv/slapd-*/db/*")
+ def postproc(self):
+ # Example for scrubbing rootpw hash
+ #
+ # nsslapd-rootpw: AAAAB3NzaC1yc2EAAAADAQABAAABAQDeXYA3juyPqaUuyfWV2HuIM
+ # v3gebb/5cvx9ehEAFF2yIKvsQN2EJGTV+hBM1DEOB4eyy/H11NqcNwm/2QsagDB3PVwYp
+ # 9VKN3BdhQjlhuoYKhLwgtYUMiGL8AX5g1qxjirIkTRJwjbXkSNuQaXig7wVjmvXnB2o7B
+ # zLtu99DiL1AizfVeZTYA+OVowYKYaXYljVmVKS+g3t29Obaom54ZLpfuoGMmyO64AJrWs
+ #
+ # to
+ #
+ # nsslapd-rootpw:********
+
+ regexppass = r"(nsslapd-rootpw(\s)*:(\s)*)(\S+)([\r\n]\s.*)*\n"
+ regexpkey = r"(nsSymmetricKey(\s)*::(\s)*)(\S+)([\r\n]\s.*)*\n"
+ repl = r"\1********\n"
+ self.do_path_regex_sub('/etc/dirsrv/*', regexppass, repl)
+ self.do_path_regex_sub('/etc/dirsrv/*', regexpkey, repl)
+
# vim: set et ts=4 sw=4 :
--
2.26.3

View File

@ -0,0 +1,315 @@
From 90b6b709e9f4002376b656b155d00d85382f1828 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Mon, 29 Mar 2021 16:23:01 +0200
Subject: [PATCH] [report] add --cmd-timeout option
Add --cmd-timeout option to configure command timeout. Plugin-specific
option of the same name (i.e. -k logs.cmd-timeout=60) can control the
timeout per plugin.
Option defaults and global/plugin-specific option preference follows the
--plugin-timeout rules.
Resolves: #2466
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
man/en/sos-report.1 | 18 +++++++++-
sos/collector/__init__.py | 3 ++
sos/collector/sosnode.py | 5 +++
sos/options.py | 3 +-
sos/report/__init__.py | 5 ++-
sos/report/plugins/__init__.py | 63 ++++++++++++++++++++++++----------
6 files changed, 76 insertions(+), 21 deletions(-)
diff --git a/man/en/sos-report.1 b/man/en/sos-report.1
index 81005959..51cf3436 100644
--- a/man/en/sos-report.1
+++ b/man/en/sos-report.1
@@ -17,6 +17,7 @@ sosreport \- Collect and package diagnostic and support data
[--label label] [--case-id id]\fR
[--threads threads]\fR
[--plugin-timeout TIMEOUT]\fR
+ [--cmd-timeout TIMEOUT]\fR
[-s|--sysroot SYSROOT]\fR
[-c|--chroot {auto|always|never}\fR
[--tmp-dir directory]\fR
@@ -247,7 +248,7 @@ Specify a timeout in seconds to allow each plugin to run for. A value of 0
means no timeout will be set. A value of -1 is used to indicate the default
timeout of 300 seconds.
-Note that this options sets the timeout for all plugins. If you want to set
+Note that this option sets the timeout for all plugins. If you want to set
a timeout for a specific plugin, use the 'timeout' plugin option available to
all plugins - e.g. '-k logs.timeout=600'.
@@ -255,6 +256,21 @@ The plugin-specific timeout option will override this option. For example, using
\'--plugin-timeout=60 -k logs.timeout=600\' will set a timeout of 600 seconds for
the logs plugin and 60 seconds for all other enabled plugins.
.TP
+.B \--cmd-timeout TIMEOUT
+Specify a timeout limit in seconds for a command execution. Same defaults logic
+from --plugin-timeout applies here.
+
+This option sets the command timeout for all plugins. If you want to set a cmd
+timeout for a specific plugin, use the 'cmd-timeout' plugin option available to
+all plugins - e.g. '-k logs.cmd-timeout=600'.
+
+Again, the same plugin/global precedence logic as for --plugin-timeout applies
+here.
+
+Note that setting --cmd-timeout (or -k logs.cmd-timeout) high should be followed
+by increasing the --plugin-timeout equivalent, otherwise the plugin can easily
+timeout on slow commands execution.
+.TP
.B \--case-id NUMBER
Specify a case identifier to associate with the archive.
Identifiers may include alphanumeric characters, commas and periods ('.').
diff --git a/sos/collector/__init__.py b/sos/collector/__init__.py
index 406c8f35..1ae73508 100644
--- a/sos/collector/__init__.py
+++ b/sos/collector/__init__.py
@@ -82,6 +82,7 @@ class SoSCollector(SoSComponent):
'password_per_node': False,
'plugin_options': [],
'plugin_timeout': None,
+ 'cmd_timeout': None,
'preset': '',
'save_group': '',
'since': '',
@@ -276,6 +277,8 @@ class SoSCollector(SoSComponent):
help='Do not collect env vars in sosreports')
sos_grp.add_argument('--plugin-timeout', type=int, default=None,
help='Set the global plugin timeout value')
+ sos_grp.add_argument('--cmd-timeout', type=int, default=None,
+ help='Set the global command timeout value')
sos_grp.add_argument('--since', default=None,
help=('Escapes archived files older than date. '
'This will also affect --all-logs. '
diff --git a/sos/collector/sosnode.py b/sos/collector/sosnode.py
index a1679655..dbbee12e 100644
--- a/sos/collector/sosnode.py
+++ b/sos/collector/sosnode.py
@@ -664,6 +664,11 @@ class SosNode():
'--skip-files=%s' % (quote(self.opts.skip_files))
)
+ if self.check_sos_version('4.2'):
+ if self.opts.cmd_timeout:
+ sos_opts.append('--cmd-timeout=%s'
+ % quote(str(self.opts.cmd_timeout)))
+
sos_cmd = sos_cmd.replace(
'sosreport',
os.path.join(self.host.sos_bin_path, self.sos_bin)
diff --git a/sos/options.py b/sos/options.py
index b82a7d36..1eda55d6 100644
--- a/sos/options.py
+++ b/sos/options.py
@@ -283,7 +283,8 @@ class SoSOptions():
if name in ("add_preset", "del_preset", "desc", "note"):
return False
# Exception list for options that still need to be reported when 0
- if name in ['log_size', 'plugin_timeout'] and value == 0:
+ if name in ['log_size', 'plugin_timeout', 'cmd_timeout'] \
+ and value == 0:
return True
return has_value(name, value)
diff --git a/sos/report/__init__.py b/sos/report/__init__.py
index 25478ba7..945d0fc1 100644
--- a/sos/report/__init__.py
+++ b/sos/report/__init__.py
@@ -107,6 +107,7 @@ class SoSReport(SoSComponent):
'only_plugins': [],
'preset': 'auto',
'plugin_timeout': 300,
+ 'cmd_timeout': 300,
'profiles': [],
'since': None,
'verify': False,
@@ -266,6 +267,8 @@ class SoSReport(SoSComponent):
help="A preset identifier", default="auto")
report_grp.add_argument("--plugin-timeout", default=None,
help="set a timeout for all plugins")
+ report_grp.add_argument("--cmd-timeout", default=None,
+ help="set a command timeout for all plugins")
report_grp.add_argument("-p", "--profile", "--profiles",
action="extend", dest="profiles", type=str,
default=[],
@@ -709,7 +712,7 @@ class SoSReport(SoSComponent):
self.ui_log.info(_("The following plugin options are available:"))
for (plug, plugname, optname, optparm) in self.all_options:
- if optname in ('timeout', 'postproc'):
+ if optname in ('timeout', 'postproc', 'cmd-timeout'):
continue
# format option value based on its type (int or bool)
if type(optparm["enabled"]) == bool:
diff --git a/sos/report/plugins/__init__.py b/sos/report/plugins/__init__.py
index 02625eb1..779119af 100644
--- a/sos/report/plugins/__init__.py
+++ b/sos/report/plugins/__init__.py
@@ -472,6 +472,9 @@ class Plugin(object):
_default_plug_opts = [
('timeout', 'Timeout in seconds for plugin. The default value (-1) ' +
'defers to the general plugin timeout, 300 seconds', 'fast', -1),
+ ('cmd-timeout', 'Timeout in seconds for a command execution. The ' +
+ 'default value (-1) defers to the general cmd timeout, 300 ' +
+ 'seconds', 'fast', -1),
('postproc', 'Enable post-processing collected plugin data', 'fast',
True)
]
@@ -532,16 +535,15 @@ class Plugin(object):
self.manifest.add_list('commands', [])
self.manifest.add_list('files', [])
- @property
- def timeout(self):
- """Returns either the default plugin timeout value, the value as
- provided on the commandline via -k plugin.timeout=value, or the value
- of the global --plugin-timeout option.
+ def timeout_from_options(self, optname, plugoptname, default_timeout):
+ """Returns either the default [plugin|cmd] timeout value, the value as
+ provided on the commandline via -k plugin.[|cmd-]timeout=value, or the
+ value of the global --[plugin|cmd]-timeout option.
"""
_timeout = None
try:
- opt_timeout = self.get_option('plugin_timeout')
- own_timeout = int(self.get_option('timeout'))
+ opt_timeout = self.get_option(optname)
+ own_timeout = int(self.get_option(plugoptname))
if opt_timeout is None:
_timeout = own_timeout
elif opt_timeout is not None and own_timeout == -1:
@@ -551,10 +553,30 @@ class Plugin(object):
else:
return None
except ValueError:
- return self.plugin_timeout # Default to known safe value
+ return default_timeout # Default to known safe value
if _timeout is not None and _timeout > -1:
return _timeout
- return self.plugin_timeout
+ return default_timeout
+
+ @property
+ def timeout(self):
+ """Returns either the default plugin timeout value, the value as
+ provided on the commandline via -k plugin.timeout=value, or the value
+ of the global --plugin-timeout option.
+ """
+ _timeout = self.timeout_from_options('plugin_timeout', 'timeout',
+ self.plugin_timeout)
+ return _timeout
+
+ @property
+ def cmdtimeout(self):
+ """Returns either the default command timeout value, the value as
+ provided on the commandline via -k plugin.cmd-timeout=value, or the
+ value of the global --cmd-timeout option.
+ """
+ _cmdtimeout = self.timeout_from_options('cmd_timeout', 'cmd-timeout',
+ self.cmd_timeout)
+ return _cmdtimeout
def set_timeout_hit(self):
self._timeout_hit = True
@@ -1235,8 +1257,8 @@ class Plugin(object):
"""
global_options = (
- 'all_logs', 'allow_system_changes', 'log_size', 'plugin_timeout',
- 'since', 'verify'
+ 'all_logs', 'allow_system_changes', 'cmd_timeout', 'log_size',
+ 'plugin_timeout', 'since', 'verify'
)
if optionname in global_options:
@@ -1505,7 +1527,7 @@ class Plugin(object):
'tags': _spec_tags
})
- def add_blockdev_cmd(self, cmds, devices='block', timeout=300,
+ def add_blockdev_cmd(self, cmds, devices='block', timeout=None,
sizelimit=None, chroot=True, runat=None, env=None,
binary=False, prepend_path=None, whitelist=[],
blacklist=[], tags=[]):
@@ -1569,7 +1591,7 @@ class Plugin(object):
whitelist=whitelist, blacklist=blacklist,
tags=_dev_tags)
- def _add_device_cmd(self, cmds, devices, timeout=300, sizelimit=None,
+ def _add_device_cmd(self, cmds, devices, timeout=None, sizelimit=None,
chroot=True, runat=None, env=None, binary=False,
prepend_path=None, whitelist=[], blacklist=[],
tags=[]):
@@ -1627,7 +1649,7 @@ class Plugin(object):
changes=soscmd.changes)
def add_cmd_output(self, cmds, suggest_filename=None,
- root_symlink=None, timeout=cmd_timeout, stderr=True,
+ root_symlink=None, timeout=None, stderr=True,
chroot=True, runat=None, env=None, binary=False,
sizelimit=None, pred=None, subdir=None,
changes=False, foreground=False, tags=[]):
@@ -1849,7 +1871,7 @@ class Plugin(object):
self._log_debug("added string ...'%s' as '%s'" % (summary, filename))
def _collect_cmd_output(self, cmd, suggest_filename=None,
- root_symlink=False, timeout=cmd_timeout,
+ root_symlink=False, timeout=None,
stderr=True, chroot=True, runat=None, env=None,
binary=False, sizelimit=None, subdir=None,
changes=False, foreground=False, tags=[]):
@@ -1883,6 +1905,8 @@ class Plugin(object):
if self._timeout_hit:
return
+ if timeout is None:
+ timeout = self.cmdtimeout
_tags = []
if isinstance(tags, str):
@@ -1975,7 +1999,7 @@ class Plugin(object):
return result
def collect_cmd_output(self, cmd, suggest_filename=None,
- root_symlink=False, timeout=cmd_timeout,
+ root_symlink=False, timeout=None,
stderr=True, chroot=True, runat=None, env=None,
binary=False, sizelimit=None, pred=None,
subdir=None, tags=[]):
@@ -2044,7 +2068,7 @@ class Plugin(object):
tags=tags
)
- def exec_cmd(self, cmd, timeout=cmd_timeout, stderr=True, chroot=True,
+ def exec_cmd(self, cmd, timeout=None, stderr=True, chroot=True,
runat=None, env=None, binary=False, pred=None,
foreground=False, container=False, quotecmd=False):
"""Execute a command right now and return the output and status, but
@@ -2095,6 +2119,9 @@ class Plugin(object):
if not self.test_predicate(cmd=True, pred=pred):
return _default
+ if timeout is None:
+ timeout = self.cmdtimeout
+
if chroot or self.commons['cmdlineopts'].chroot == 'always':
root = self.sysroot
else:
@@ -2331,7 +2358,7 @@ class Plugin(object):
def add_journal(self, units=None, boot=None, since=None, until=None,
lines=None, allfields=False, output=None,
- timeout=cmd_timeout, identifier=None, catalog=None,
+ timeout=None, identifier=None, catalog=None,
sizelimit=None, pred=None, tags=[]):
"""Collect journald logs from one of more units.
--
2.26.3

View File

@ -0,0 +1,30 @@
From 0d56e43299009ffa91f665d85b5a08ba76da9c1f Mon Sep 17 00:00:00 2001
From: Jose Castillo <jcastillo@redhat.com>
Date: Wed, 17 Mar 2021 13:10:36 +0100
Subject: [PATCH] [cups] Add gathering cups-browsed logs
Gather logs from the service cups-browsed sent
to the journal.
Resolves: #2452
Signed-off-by: Jose Castillo <jcastillo@redhat.com>
Signed-off-by: Bryan Quigley <code@bryanquigley.com>
---
sos/report/plugins/cups.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/report/plugins/cups.py b/sos/report/plugins/cups.py
index 29a903e8..ab7b6b70 100644
--- a/sos/report/plugins/cups.py
+++ b/sos/report/plugins/cups.py
@@ -40,5 +40,6 @@ class Cups(Plugin, IndependentPlugin):
])
self.add_journal(units="cups")
+ self.add_journal(units="cups-browsed")
# vim: set et ts=4 sw=4 :
--
2.26.3

View File

@ -0,0 +1,62 @@
From d03c2fa4439c87783293c922b2825cf86e8818bd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pawe=C5=82=20Po=C5=82awski?= <ppolawsk@redhat.com>
Date: Fri, 12 Mar 2021 12:42:30 +0100
Subject: [PATCH] [sssd] Enable collecting SSSD memory cache
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
SSSD plugin by default collects only logs and configuration.
This patch enables collecting memory cache maintained
by SSSD daemon. Cache does not contain any client sensible
data so can be safely included in the sos-report.
Resolves: #2444
Signed-off-by: Paweł Poławski <ppolawsk@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/sssd.py | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/sos/report/plugins/sssd.py b/sos/report/plugins/sssd.py
index 9469c41c..aeb68c4f 100644
--- a/sos/report/plugins/sssd.py
+++ b/sos/report/plugins/sssd.py
@@ -10,6 +10,7 @@
from sos.report.plugins import (Plugin, RedHatPlugin, DebianPlugin,
UbuntuPlugin, SoSPredicate)
+from glob import glob
class Sssd(Plugin):
@@ -22,11 +23,22 @@ class Sssd(Plugin):
def setup(self):
self.add_copy_spec([
+ # main config file
"/etc/sssd/sssd.conf",
- "/var/log/sssd/*",
- "/var/lib/sss/pubconf/krb5.include.d/*",
# SSSD 1.14
- "/etc/sssd/conf.d/*.conf"
+ "/etc/sssd/conf.d/*.conf",
+ # dynamic Kerberos configuration
+ "/var/lib/sss/pubconf/krb5.include.d/*"
+ ])
+
+ # add individual log files
+ self.add_copy_spec(glob("/var/log/sssd/*log*"))
+
+ # add memory cache
+ self.add_copy_spec([
+ "/var/lib/sss/mc/passwd",
+ "/var/lib/sss/mc/group",
+ "/var/lib/sss/mc/initgroups"
])
# call sssctl commands only when sssd service is running,
--
2.26.3

View File

@ -0,0 +1,29 @@
From dddabb07a88d398ed7b8a878e95acfd968af6698 Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Tue, 23 Mar 2021 17:58:30 +0530
Subject: [PATCH] This patch is to update kernel plugin to collect
dynamic_debug log files for ibmvNIC
Resolves: #2458
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Signed-off-by: Bryan Quigley <code@bryanquigley.com>
---
sos/report/plugins/kernel.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/report/plugins/kernel.py b/sos/report/plugins/kernel.py
index febe2ad0..dd7b6939 100644
--- a/sos/report/plugins/kernel.py
+++ b/sos/report/plugins/kernel.py
@@ -106,6 +106,7 @@ class Kernel(Plugin, IndependentPlugin):
"/proc/misc",
"/var/log/dmesg",
"/sys/fs/pstore",
+ "/sys/kernel/debug/dynamic_debug/control",
clocksource_path + "available_clocksource",
clocksource_path + "current_clocksource"
])
--
2.26.3

View File

@ -0,0 +1,147 @@
From 808d9f35ac504a58c337ffed14b39119a591808f Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 27 Apr 2021 22:16:08 +0200
Subject: [PATCH] [pulpcore] add plugin for pulp-3
Pulp-3 / pulpcore as a revolution from pulp-2 needs a separate
plugin, since both plugins have nothing in common and there might
be deployments where is active both pulp-2 and pulp-3.
Resolves: #2278
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/pulpcore.py | 120 +++++++++++++++++++++++++++++++++
1 file changed, 120 insertions(+)
create mode 100644 sos/report/plugins/pulpcore.py
diff --git a/sos/report/plugins/pulpcore.py b/sos/report/plugins/pulpcore.py
new file mode 100644
index 00000000..20403814
--- /dev/null
+++ b/sos/report/plugins/pulpcore.py
@@ -0,0 +1,120 @@
+# Copyright (C) 2021 Red Hat, Inc., Pavel Moravec <pmoravec@redhat.com>
+
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+from sos.report.plugins import Plugin, IndependentPlugin
+from pipes import quote
+from re import match
+
+
+class PulpCore(Plugin, IndependentPlugin):
+
+ short_desc = 'Pulp-3 aka pulpcore'
+
+ plugin_name = "pulpcore"
+ commands = ("pulpcore-manager",)
+ files = ("/etc/pulp/settings.py",)
+ option_list = [
+ ('task-days', 'days of tasks history', 'fast', 7)
+ ]
+
+ def parse_settings_config(self):
+ databases_scope = False
+ self.dbhost = "localhost"
+ self.dbport = 5432
+ self.dbpasswd = ""
+ # TODO: read also redis config (we dont expect much customisations)
+ # TODO: read also db user (pulp) and database name (pulpcore)
+ self.staticroot = "/var/lib/pulp/assets"
+ self.uploaddir = "/var/lib/pulp/media/upload"
+
+ def separate_value(line, sep=':'):
+ # an auxiliary method to parse values from lines like:
+ # 'HOST': 'localhost',
+ val = line.split(sep)[1].lstrip().rstrip(',')
+ if (val.startswith('"') and val.endswith('"')) or \
+ (val.startswith('\'') and val.endswith('\'')):
+ val = val[1:-1]
+ return val
+
+ try:
+ for line in open("/etc/pulp/settings.py").read().splitlines():
+ # skip empty lines and lines with comments
+ if not line or line[0] == '#':
+ continue
+ if line.startswith("DATABASES"):
+ databases_scope = True
+ continue
+ # example HOST line to parse:
+ # 'HOST': 'localhost',
+ if databases_scope and match(r"\s+'HOST'\s*:\s+\S+", line):
+ self.dbhost = separate_value(line)
+ if databases_scope and match(r"\s+'PORT'\s*:\s+\S+", line):
+ self.dbport = separate_value(line)
+ if databases_scope and match(r"\s+'PASSWORD'\s*:\s+\S+", line):
+ self.dbpasswd = separate_value(line)
+ # if line contains closing '}' database_scope end
+ if databases_scope and '}' in line:
+ databases_scope = False
+ if line.startswith("STATIC_ROOT = "):
+ self.staticroot = separate_value(line, sep='=')
+ if line.startswith("CHUNKED_UPLOAD_DIR = "):
+ self.uploaddir = separate_value(line, sep='=')
+ except IOError:
+ # fallback when the cfg file is not accessible
+ pass
+ # set the password to os.environ when calling psql commands to prevent
+ # printing it in sos logs
+ # we can't set os.environ directly now: other plugins can overwrite it
+ self.env = {"PGPASSWORD": self.dbpasswd}
+
+ def setup(self):
+ self.parse_settings_config()
+
+ self.add_copy_spec("/etc/pulp/settings.py")
+
+ self.add_cmd_output("rq info -u redis://localhost:6379/8",
+ env={"LC_ALL": "en_US.UTF-8"},
+ suggest_filename="rq_info")
+ self.add_cmd_output("curl -ks https://localhost/pulp/api/v3/status/",
+ suggest_filename="pulp_status")
+ dynaconf_env = {"LC_ALL": "en_US.UTF-8",
+ "PULP_SETTINGS": "/etc/pulp/settings.py",
+ "DJANGO_SETTINGS_MODULE": "pulpcore.app.settings"}
+ self.add_cmd_output("dynaconf list", env=dynaconf_env)
+ for _dir in [self.staticroot, self.uploaddir]:
+ self.add_cmd_output("ls -l %s" % _dir)
+
+ task_days = self.get_option('task-days')
+ for table in ['core_task', 'core_taskgroup',
+ 'core_reservedresourcerecord',
+ 'core_taskreservedresourcerecord',
+ 'core_groupprogressreport', 'core_progressreport']:
+ _query = "select * from %s where pulp_last_updated > NOW() - " \
+ "interval '%s days' order by pulp_last_updated" % \
+ (table, task_days)
+ _cmd = "psql -h %s -p %s -U pulp -d pulpcore -c %s" % \
+ (self.dbhost, self.dbport, quote(_query))
+ self.add_cmd_output(_cmd, env=self.env, suggest_filename=table)
+
+ def postproc(self):
+ # TODO obfuscate from /etc/pulp/settings.py :
+ # SECRET_KEY = "eKfeDkTnvss7p5WFqYdGPWxXfHnsbDBx"
+ # 'PASSWORD': 'tGrag2DmtLqKLTWTQ6U68f6MAhbqZVQj',
+ self.do_path_regex_sub(
+ "/etc/pulp/settings.py",
+ r"(SECRET_KEY\s*=\s*)(.*)",
+ r"\1********")
+ self.do_path_regex_sub(
+ "/etc/pulp/settings.py",
+ r"(PASSWORD\S*\s*:\s*)(.*)",
+ r"\1********")
+
+
+# vim: set et ts=4 sw=4 :
--
2.26.3

View File

@ -0,0 +1,30 @@
From c998ea8c1c950586f91fc9728ee66590740968a5 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Tue, 11 May 2021 15:59:40 +0200
Subject: [PATCH] [saphana] remove redundant unused argument of get_inst_info
get_inst_info does not use and isnt called with 'prefix' argument
Resolves: #2535
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/saphana.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/report/plugins/saphana.py b/sos/report/plugins/saphana.py
index 82c497b4..00e84b59 100644
--- a/sos/report/plugins/saphana.py
+++ b/sos/report/plugins/saphana.py
@@ -51,7 +51,7 @@ class saphana(Plugin, RedHatPlugin):
inst = inst.strip()[-2:]
self.get_inst_info(sid, sidadm, inst)
- def get_inst_info(self, prefix, sid, sidadm, inst):
+ def get_inst_info(self, sid, sidadm, inst):
proc_cmd = 'su - %s -c "sapcontrol -nr %s -function GetProcessList"'
status_fname = "%s_%s_status" % (sid, inst)
self.add_cmd_output(
--
2.26.3

View File

@ -0,0 +1,121 @@
From 60105e0705f3483b9a3e8e98dafd6f0e1e277ab7 Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Mon, 19 Apr 2021 16:55:52 +0530
Subject: [PATCH 1/3] [block]:Patch to update block pluging to collect disk
info
This patch is to update block plugin to collect
state of sda
Resolves: #2504
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
---
sos/report/plugins/block.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sos/report/plugins/block.py b/sos/report/plugins/block.py
index f93b3231..c959d667 100644
--- a/sos/report/plugins/block.py
+++ b/sos/report/plugins/block.py
@@ -38,7 +38,8 @@ class Block(Plugin, IndependentPlugin):
"/run/blkid/blkid.tab",
"/proc/partitions",
"/proc/diskstats",
- "/sys/block/*/queue/"
+ "/sys/block/*/queue/",
+ "/sys/block/sd*/device/state",
])
cmds = [
--
2.26.3
From c6e0fe5cebd0d9581950db75fa2d234713b7e15a Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Mon, 26 Apr 2021 23:09:19 +0530
Subject: [PATCH 2/3] [snapper]:Ptach to update snapper plugin to collect
snapper info
This patch is to Introduce snapper plugin to collect
/usr/lib/snapper/ information to check executable
permission for installation-helper command
Resolves: #2504
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
---
sos/report/plugins/snapper.py | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
create mode 100644 sos/report/plugins/snapper.py
diff --git a/sos/report/plugins/snapper.py b/sos/report/plugins/snapper.py
new file mode 100644
index 00000000..9ef5fec2
--- /dev/null
+++ b/sos/report/plugins/snapper.py
@@ -0,0 +1,27 @@
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+from sos.report.plugins import Plugin, IndependentPlugin
+
+
+class Snapper(Plugin, IndependentPlugin):
+
+ short_desc = 'System snapper'
+
+ plugin_name = 'snapper'
+ commands = ("snapper",)
+
+ def setup(self):
+
+ self.add_cmd_output([
+ "ls -la /usr/lib/snapper/",
+ "snapper --version",
+ "snapper list"
+ ])
+
+# vim: set et ts=4 sw=4 :
--
2.26.3
From 61ff5ce165e654a02fe80b9de5ec8e49ed808ec9 Mon Sep 17 00:00:00 2001
From: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
Date: Mon, 19 Apr 2021 17:49:08 +0530
Subject: [PATCH 3/3] [kernel]:Patch to update kernel plugin to collect debug
info
This patch is to update kernel plugin to collect
page allocation failure info
Resolves: #2504
Signed-off-by: Mamatha Inamdar <mamatha4@linux.vnet.ibm.com>
---
sos/report/plugins/kernel.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/sos/report/plugins/kernel.py b/sos/report/plugins/kernel.py
index dd7b6939..9d53ca03 100644
--- a/sos/report/plugins/kernel.py
+++ b/sos/report/plugins/kernel.py
@@ -107,6 +107,8 @@ class Kernel(Plugin, IndependentPlugin):
"/var/log/dmesg",
"/sys/fs/pstore",
"/sys/kernel/debug/dynamic_debug/control",
+ "/sys/kernel/debug/extfrag/unusable_index",
+ "/sys/kernel/debug/extfrag/extfrag_index",
clocksource_path + "available_clocksource",
clocksource_path + "current_clocksource"
])
--
2.26.3

View File

@ -0,0 +1,36 @@
From 575ddeddf2f6e1d6a639922f9ccc51c7e46fbe12 Mon Sep 17 00:00:00 2001
From: Seiichi Ikarashi <s.ikarashi@jp.fujitsu.com>
Date: Fri, 14 May 2021 09:49:33 +0900
Subject: [PATCH] [networking] Add nstat command support
As netstat command is being deprecated,
we need nstat as an alternative to "netstat -s".
Signed-off-by: Seiichi Ikarashi <s.ikarashi@fujitsu.com>
---
sos/report/plugins/networking.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/sos/report/plugins/networking.py b/sos/report/plugins/networking.py
index 8b4614bb..acfa027f 100644
--- a/sos/report/plugins/networking.py
+++ b/sos/report/plugins/networking.py
@@ -87,6 +87,7 @@ class Networking(Plugin):
root_symlink="netstat")
self.add_cmd_output([
+ "nstat -zas",
"netstat -s",
"netstat %s -agn" % self.ns_wide,
"ip route show table all",
@@ -198,6 +199,7 @@ class Networking(Plugin):
ns_cmd_prefix + "netstat %s -neopa" % self.ns_wide,
ns_cmd_prefix + "netstat -s",
ns_cmd_prefix + "netstat %s -agn" % self.ns_wide,
+ ns_cmd_prefix + "nstat -zas",
])
ss_cmd = ns_cmd_prefix + "ss -peaonmi"
--
2.26.3

View File

@ -0,0 +1,78 @@
From b27140a9126ea82efb517d60bf1b8455aaf4f5a6 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Fri, 26 Mar 2021 11:12:33 -0400
Subject: [PATCH] [cleaner] Only skip packaging-based files for the IP parser
Files primarily containing package information, e.g. `installed-rpms` or
`installed-debs`, were previously being skipped by all parsers. In
reality, we only need to skip these for the IP parser due to the fact
that version numbers often generate a match for IP address regexes.
This will also fix a problem where if a system was the build host for
certain packages, the hostname would remain in these files as the
hostname parser was previously not checking these files.
Closes: #2400
Resolves: #2464
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/cleaner/obfuscation_archive.py | 10 ----------
sos/cleaner/parsers/ip_parser.py | 16 ++++++++++++++++
2 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/sos/cleaner/obfuscation_archive.py b/sos/cleaner/obfuscation_archive.py
index 981cc05f..84ca30cd 100644
--- a/sos/cleaner/obfuscation_archive.py
+++ b/sos/cleaner/obfuscation_archive.py
@@ -59,20 +59,10 @@ class SoSObfuscationArchive():
Returns: list of files and file regexes
"""
return [
- 'installed-debs',
- 'installed-rpms',
- 'sos_commands/dpkg',
- 'sos_commands/python/pip_list',
- 'sos_commands/rpm',
- 'sos_commands/yum/.*list.*',
- 'sos_commands/snappy/snap_list_--all',
- 'sos_commands/snappy/snap_--version',
- 'sos_commands/vulkan/vulkaninfo',
'sys/firmware',
'sys/fs',
'sys/kernel/debug',
'sys/module',
- 'var/log/.*dnf.*',
r'.*\.tar$', # TODO: support archive unpacking
# Be explicit with these tar matches to avoid matching commands
r'.*\.tar\.xz',
diff --git a/sos/cleaner/parsers/ip_parser.py b/sos/cleaner/parsers/ip_parser.py
index 3ea7f865..08d1cd05 100644
--- a/sos/cleaner/parsers/ip_parser.py
+++ b/sos/cleaner/parsers/ip_parser.py
@@ -24,6 +24,22 @@ class SoSIPParser(SoSCleanerParser):
# don't match package versions recorded in journals
r'.*dnf\[.*\]:'
]
+
+ skip_files = [
+ # skip these as version numbers will frequently look like IP addresses
+ # when using regex matching
+ 'installed-debs',
+ 'installed-rpms',
+ 'sos_commands/dpkg',
+ 'sos_commands/python/pip_list',
+ 'sos_commands/rpm',
+ 'sos_commands/yum/.*list.*',
+ 'sos_commands/snappy/snap_list_--all',
+ 'sos_commands/snappy/snap_--version',
+ 'sos_commands/vulkan/vulkaninfo',
+ 'var/log/.*dnf.*'
+ ]
+
map_file_key = 'ip_map'
prep_map_file = 'sos_commands/networking/ip_-o_addr'
--
2.26.3

View File

@ -0,0 +1,135 @@
From 206d65618f20995b168dcc63090d1e6871450e90 Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Wed, 26 May 2021 15:45:26 +0200
Subject: [PATCH] [archive] skip copying SELinux context for /proc and /sys
everytime
A supplement of #1399 fix, now also for adding strings or special
device files.
Also adding a (vendor) test case for it.
Resolves: #2560
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/archive.py | 35 +++++++++++----------
tests/vendor_tests/redhat/rhbz1965001.py | 39 ++++++++++++++++++++++++
2 files changed, 56 insertions(+), 18 deletions(-)
create mode 100644 tests/vendor_tests/redhat/rhbz1965001.py
diff --git a/sos/archive.py b/sos/archive.py
index 4dd31d75..b02b2475 100644
--- a/sos/archive.py
+++ b/sos/archive.py
@@ -326,6 +326,20 @@ class FileCacheArchive(Archive):
return None
return dest
+ def _copy_attributes(self, src, dest):
+ # copy file attributes, skip SELinux xattrs for /sys and /proc
+ try:
+ stat = os.stat(src)
+ if src.startswith("/sys/") or src.startswith("/proc/"):
+ shutil.copymode(src, dest)
+ os.utime(dest, ns=(stat.st_atime_ns, stat.st_mtime_ns))
+ else:
+ shutil.copystat(src, dest)
+ os.chown(dest, stat.st_uid, stat.st_gid)
+ except Exception as e:
+ self.log_debug("caught '%s' setting attributes of '%s'"
+ % (e, dest))
+
def add_file(self, src, dest=None):
with self._path_lock:
if not dest:
@@ -348,18 +362,7 @@ class FileCacheArchive(Archive):
else:
self.log_info("File %s not collected: '%s'" % (src, e))
- # copy file attributes, skip SELinux xattrs for /sys and /proc
- try:
- stat = os.stat(src)
- if src.startswith("/sys/") or src.startswith("/proc/"):
- shutil.copymode(src, dest)
- os.utime(dest, ns=(stat.st_atime_ns, stat.st_mtime_ns))
- else:
- shutil.copystat(src, dest)
- os.chown(dest, stat.st_uid, stat.st_gid)
- except Exception as e:
- self.log_debug("caught '%s' setting attributes of '%s'"
- % (e, dest))
+ self._copy_attributes(src, dest)
file_name = "'%s'" % src
else:
# Open file case: first rewind the file to obtain
@@ -388,11 +391,7 @@ class FileCacheArchive(Archive):
content = content.decode('utf8', 'ignore')
f.write(content)
if os.path.exists(src):
- try:
- shutil.copystat(src, dest)
- except OSError as e:
- self.log_error("Unable to add '%s' to archive: %s" %
- (dest, e))
+ self._copy_attributes(src, dest)
self.log_debug("added string at '%s' to FileCacheArchive '%s'"
% (src, self._archive_root))
@@ -501,7 +500,7 @@ class FileCacheArchive(Archive):
self.log_info("add_node: %s - mknod '%s'" % (msg, dest))
return
raise e
- shutil.copystat(path, dest)
+ self._copy_attributes(path, dest)
def name_max(self):
if 'PC_NAME_MAX' in os.pathconf_names:
diff --git a/tests/vendor_tests/redhat/rhbz1965001.py b/tests/vendor_tests/redhat/rhbz1965001.py
new file mode 100644
index 00000000..aa16ba81
--- /dev/null
+++ b/tests/vendor_tests/redhat/rhbz1965001.py
@@ -0,0 +1,39 @@
+# This file is part of the sos project: https://github.com/sosreport/sos
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions of
+# version 2 of the GNU General Public License.
+#
+# See the LICENSE file in the source distribution for further information.
+
+
+import tempfile
+import shutil
+from sos_tests import StageOneReportTest
+
+
+class rhbz1965001(StageOneReportTest):
+ """
+ Copying /proc/sys/vm/{compact_memory,drop_caches} must ignore SELinux
+ context, otherwise an attempt to set the context to files under some
+ directories like /tmp raises an AVC denial, and an ERROR
+ "Unable to add '...' to archive: [Errno 13] Permission denied: '...'
+ is raise.
+
+ https://bugzilla.redhat.com/show_bug.cgi?id=1965001
+
+ :avocado: enable
+ :avocado: tags=stageone
+ """
+
+ sos_cmd = '-o system'
+ # it is crucial to run the test case with --tmp-dir=/tmp/... as that is
+ # (an example of) directory exhibiting the relabel permission deny.
+ # /var/tmp directory allows those relabels.
+ #
+ # the directory shouldn't exist at this moment, otherwise
+ # "check to prevent multiple setUp() runs" in sos_tests.py would fail
+ _tmpdir = '/tmp/rhbz1965001_avocado_test'
+
+ def test_no_permission_denied(self):
+ self.assertSosLogNotContains("Permission denied")
--
2.26.3

View File

@ -0,0 +1,36 @@
From 630dfbee936050698d33b59abd1e243c44e50af8 Mon Sep 17 00:00:00 2001
From: Jan Jansky <jjansky@redhat.com>
Date: Thu, 3 Jun 2021 15:04:57 +0200
Subject: [PATCH] [sssd] sssd plugin when sssd-common
We have reports that sssd logs are not
collected, when we investigated
we found associate wants to collect
sssd related logs also when only
sssd-common package is installed.
We got this confirmed by sbr-idm.
Resolves: #2571
Signed-off-by: Jan Jansky <jjansky@redhat.com>
---
sos/report/plugins/sssd.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/report/plugins/sssd.py b/sos/report/plugins/sssd.py
index 17933935..6f98e90c 100644
--- a/sos/report/plugins/sssd.py
+++ b/sos/report/plugins/sssd.py
@@ -19,7 +19,7 @@ class Sssd(Plugin):
plugin_name = "sssd"
profiles = ('services', 'security', 'identity')
- packages = ('sssd',)
+ packages = ('sssd', 'sssd-common')
def setup(self):
self.add_copy_spec([
--
2.26.3

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,142 @@
From 7e471676fe41dab155a939c60446cc7b7dab773b Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Tue, 20 Jul 2021 11:09:29 -0400
Subject: [PATCH] [username parser] Load usernames from `last` for LDAP users
AD/LDAP users are not reported into `lastlog` generally, however they
are reported in `last`. Conversely, `last` does not report local users
who have not logged in but still exist.
In order to obfuscate both kinds of users, we need to look at both
sources.
For this, first allow parsers to specify multiple prep files. Second,
update the username parser to search through all `lastlog` collections
as well as the `last` collection.
Also includes a small update to the username parser's prep loading logic
to ensure we are iterating over each username discovered only once.
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/cleaner/__init__.py | 38 ++++++++++++++------------
sos/cleaner/parsers/__init__.py | 2 +-
sos/cleaner/parsers/username_parser.py | 24 +++++++++++++---
3 files changed, 42 insertions(+), 22 deletions(-)
diff --git a/sos/cleaner/__init__.py b/sos/cleaner/__init__.py
index ca5f93e5..6aadfe79 100644
--- a/sos/cleaner/__init__.py
+++ b/sos/cleaner/__init__.py
@@ -518,23 +518,27 @@ third party.
for _parser in self.parsers:
if not _parser.prep_map_file:
continue
- _arc_path = os.path.join(_arc_name, _parser.prep_map_file)
- try:
- if is_dir:
- _pfile = open(_arc_path, 'r')
- content = _pfile.read()
- else:
- _pfile = archive.extractfile(_arc_path)
- content = _pfile.read().decode('utf-8')
- _pfile.close()
- if isinstance(_parser, SoSUsernameParser):
- _parser.load_usernames_into_map(content)
- for line in content.splitlines():
- if isinstance(_parser, SoSHostnameParser):
- _parser.load_hostname_into_map(line)
- self.obfuscate_line(line)
- except Exception as err:
- self.log_debug("Could not prep %s: %s" % (_arc_path, err))
+ if isinstance(_parser.prep_map_file, str):
+ _parser.prep_map_file = [_parser.prep_map_file]
+ for parse_file in _parser.prep_map_file:
+ _arc_path = os.path.join(_arc_name, parse_file)
+ try:
+ if is_dir:
+ _pfile = open(_arc_path, 'r')
+ content = _pfile.read()
+ else:
+ _pfile = archive.extractfile(_arc_path)
+ content = _pfile.read().decode('utf-8')
+ _pfile.close()
+ if isinstance(_parser, SoSUsernameParser):
+ _parser.load_usernames_into_map(content)
+ for line in content.splitlines():
+ if isinstance(_parser, SoSHostnameParser):
+ _parser.load_hostname_into_map(line)
+ self.obfuscate_line(line)
+ except Exception as err:
+ self.log_debug("Could not prep %s: %s"
+ % (_arc_path, err))
def obfuscate_report(self, report):
"""Individually handle each archive or directory we've discovered by
diff --git a/sos/cleaner/parsers/__init__.py b/sos/cleaner/parsers/__init__.py
index 3076db39..af6e375e 100644
--- a/sos/cleaner/parsers/__init__.py
+++ b/sos/cleaner/parsers/__init__.py
@@ -50,7 +50,7 @@ class SoSCleanerParser():
skip_line_patterns = []
skip_files = []
map_file_key = 'unset'
- prep_map_file = 'unset'
+ prep_map_file = []
def __init__(self, conf_file=None):
# attempt to load previous run data into the mapping for the parser
diff --git a/sos/cleaner/parsers/username_parser.py b/sos/cleaner/parsers/username_parser.py
index 96ce5f0c..b142e371 100644
--- a/sos/cleaner/parsers/username_parser.py
+++ b/sos/cleaner/parsers/username_parser.py
@@ -25,13 +25,24 @@ class SoSUsernameParser(SoSCleanerParser
name = 'Username Parser'
map_file_key = 'username_map'
- prep_map_file = 'sos_commands/login/lastlog_-u_1000-60000'
+ prep_map_file = [
+ 'sos_commands/login/lastlog_-u_1000-60000',
+ 'sos_commands/login/lastlog_-u_60001-65536',
+ 'sos_commands/login/lastlog_-u_65537-4294967295',
+ # AD users will be reported here, but favor the lastlog files since
+ # those will include local users who have not logged in
+ 'sos_commands/login/last'
+ ]
regex_patterns = []
skip_list = [
'core',
'nobody',
'nfsnobody',
- 'root'
+ 'shutdown',
+ 'reboot',
+ 'root',
+ 'ubuntu',
+ 'wtmp'
]
def __init__(self, conf_file=None, opt_names=None):
@@ -44,11 +54,17 @@ class SoSUsernameParser(SoSCleanerParser):
"""Since we don't get the list of usernames from a straight regex for
this parser, we need to override the initial parser prepping here.
"""
+ users = set()
for line in content.splitlines()[1:]:
- user = line.split()[0]
+ try:
+ user = line.split()[0]
+ except Exception:
+ continue
if user in self.skip_list:
continue
- self.mapping.get(user)
+ users.add(user)
+ for each in users:
+ self.mapping.get(each)
def parse_line(self, line):
count = 0
--
2.31.1

View File

@ -0,0 +1,65 @@
From 6d5cbe90e17534d53d7fe42dff4d8ca734acf594 Mon Sep 17 00:00:00 2001
From: Jake Hunsaker <jhunsake@redhat.com>
Date: Tue, 29 Jun 2021 15:49:00 -0400
Subject: [PATCH] [yum] Fix potential traceback when yum history is empty
Like we did in #969 for `dnf`, fix a potential issue where we would
generate a traceback in the plugin when `yum history` is empty.
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
---
sos/report/plugins/yum.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/report/plugins/yum.py b/sos/report/plugins/yum.py
index 54e222df..aec805e6 100644
--- a/sos/report/plugins/yum.py
+++ b/sos/report/plugins/yum.py
@@ -91,7 +91,7 @@ class Yum(Plugin, RedHatPlugin):
# packages installed/erased/updated per transaction
if self.get_option("yum-history-info"):
history = self.exec_cmd("yum history")
- transactions = None
+ transactions = -1
if history['status'] == 0:
for line in history['output'].splitlines():
try:
--
2.31.1
From a7a4ef73faee6cddba36bf670d4a20ab0521c36f Mon Sep 17 00:00:00 2001
From: Pavel Moravec <pmoravec@redhat.com>
Date: Wed, 30 Jun 2021 13:10:56 +0200
Subject: [PATCH] [plugins] Set default predicate instead of None for
robustness
Just making the code more robustness, it could be dangerous to
set pred = None and then potentially call log_skipped_cmd that
expects "pred" of SoSPredicate type.
Currently such a call flow can not happen, but it is worth to
make the code more robust for potential future changes.
Resolves: #2601
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
---
sos/report/plugins/__init__.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sos/report/plugins/__init__.py b/sos/report/plugins/__init__.py
index 6fd1a3b2..b9cd28ed 100644
--- a/sos/report/plugins/__init__.py
+++ b/sos/report/plugins/__init__.py
@@ -1629,7 +1629,7 @@ class Plugin(object):
def _add_cmd_output(self, **kwargs):
"""Internal helper to add a single command to the collection list."""
- pred = kwargs.pop('pred') if 'pred' in kwargs else None
+ pred = kwargs.pop('pred') if 'pred' in kwargs else SoSPredicate(self)
soscmd = SoSCommand(**kwargs)
self._log_debug("packed command: " + soscmd.__str__())
for _skip_cmd in self.skip_commands:
--
2.31.1

View File

@ -4,8 +4,8 @@
Summary: A set of tools to gather troubleshooting information from a system
Name: sos
Version: 4.0
Release: 12%{?dist}
Version: 4.1
Release: 5%{?dist}
Group: Applications/System
Source0: https://github.com/sosreport/sos/archive/%{version}/sos-%{version}.tar.gz
Source1: sos-audit-%{auditversion}.tgz
@ -20,29 +20,28 @@ Requires: xz
Conflicts: vdsm < 4.40
Obsoletes: sos-collector
Recommends: python3-pexpect
Patch1: sos-bz1827801-streamlined-sanitize_item.patch
Patch2: sos-bz1874295-osp-ironic-inspector-configs.patch
Patch3: sos-bz1880372-power-logs.patch
Patch4: sos-bz1881118-crio-conf-d.patch
Patch5: sos-bz1882368-upload-functionality-issues.patch
Patch6: sos-bz1886782-exclude-panfs.patch
Patch7: sos-bz1887390-kdump-logfiles.patch
Patch8: sos-bz1888012-stratis-new-feature-output.patch
Patch9: sos-bz1891562-tmp-dir-relative-path.patch
Patch10: sos-bz1848095-collect-rhev-pki.patch
Patch11: sos-bz1895316-collector--cluster-type.patch
Patch12: sos-bz1904045-preset-ignores-verbosity.patch
Patch13: sos-bz1905657-empty-file-stops-zero-sizelimit.patch
Patch14: sos-bz1906598-collect-broken-symlinks.patch
Patch15: sos-bz1912889-plugopts-ignored-in-configfile.patch
Patch16: sos-bz1912821-sos-collector-declare-sysroot.patch
Patch17: sos-bz1912910-empty-file-stops-collecting.patch
Patch18: sos-bz1917196-networking-ethtool-e-conditionally.patch
Patch19: sos-bz1887402-kexec-logs.patch
Patch20: sos-bz1916729-ftp-upload-no-passwd.patch
Patch21: sos-bz1925419-gluster-pubkeys-statusfile.patch
Patch22: sos-bz1928650-powerpc-nhv-scsi-logs.patch
Patch23: sos-bz1992957-conversions-and-upgrades.patch
Patch1: sos-bz1930181-collect-cleaning-consistency.patch
Patch2: sos-bz1935603-manpages-see-also.patch
Patch3: sos-bz1937418-add-cmd-timeout.patch
Patch4: sos-bz1937298-ds-mask-password-in-ldif.patch
Patch5: sos-bz1939963-gather-cups-browsed-logs.patch
Patch6: sos-bz1940502-sssd-memcache-and-logs.patch
Patch7: sos-bz1942276-ibmvNIC-dynamic-debugs.patch
Patch8: sos-bz1956673-pulpcore-plugin.patch
Patch9: sos-bz1959413-saphana-traceback.patch
Patch10: sos-bz1961458-collect-nstat.patch
Patch11: sos-bz1961229-snapper-plugin-and-allocation-failures.patch
Patch12: sos-bz1925419-all-gluster-files.patch
Patch13: sos-bz1964499-obfuscate-fqdn-from-dnf-log.patch
Patch14: sos-bz1886711-enhance-tc-hw-offload.patch
Patch15: sos-bz1965001-fix-avc-copystating-proc-sys.patch
Patch16: sos-bz1967613-sssd-common.patch
Patch17: sos-bz1973675-ocp-cluster-cleaner.patch
Patch18: sos-bz1923938-sos-log-effective-options.patch
Patch19: sos-bz1985986-potential-issues-static-analyse.patch
Patch20: sos-bz1959598-conversions-and-upgrades.patch
Patch21: sos-bz1665947-rhui-plugin.patch
Patch22: sos-bz1985037-cleaner-AD-users-obfuscation.patch
%description
@ -76,7 +75,6 @@ support technicians and developers.
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%build
%py3_build
@ -92,12 +90,15 @@ cd %{name}-audit-%{auditversion}
DESTDIR=%{buildroot} ./install.sh
cd ..
mkdir -p %{buildroot}%{_sysconfdir}/sos/cleaner
mkdir -p %{buildroot}%{_sysconfdir}/sos/{cleaner,presets.d,extras.d,groups.d}
%files -f %{name}.lang
%{_sbindir}/sosreport
%{_sbindir}/sos
%{_sbindir}/sos-collector
%dir /etc/sos/presets.d
%dir /etc/sos/extras.d
%dir /etc/sos/groups.d
%{python3_sitelib}/*
%{_mandir}/man1/sosreport.1.gz
%{_mandir}/man1/sos-clean.1.gz
@ -111,6 +112,7 @@ mkdir -p %{buildroot}%{_sysconfdir}/sos/cleaner
%license LICENSE
%config(noreplace) %{_sysconfdir}/sos/sos.conf
%config(noreplace) %{_sysconfdir}/sos/cleaner
%config /usr/config/sos.conf
%package audit
Summary: Audit use of some commands for support purposes
@ -121,7 +123,7 @@ Group: Application/System
Sos-audit provides configuration files for the Linux Auditing System
to track the use of some commands capable of changing the configuration
of the system. Currently storage and filesystem commands are audited.
of the system. Currently storage and filesystem commands are audited.
%post audit
%{_sbindir}/sos-audit.sh
@ -139,21 +141,63 @@ of the system. Currently storage and filesystem commands are audited.
%ghost /etc/audit/rules.d/40-sos-storage.rules
%changelog
* Thu Aug 12 2021 Pavel Moravec <pmoravec@redhat.com> = 4.0-12
- [MigrationResults] collect info about conversions+upgrades
Resolves: bz1992957
* Wed Aug 11 2021 Pavel Moravec <pmoravec@redhat.com> = 4.1-5
- [report,collect] unify --map-file arguments
Resolves: bz1923938
- [rhui] add new plugin for RHUI 4
Resolves: bz1665947
- [username parser] Load usernames from `last` for LDAP users
Resolves: bz1985037
* Wed Mar 17 2021 Pavel Moravec <pmoravec@redhat.com> = 4.0-11
* Mon Jul 26 2021 Pavel Moravec <pmoravec@redhat.com> = 4.1-4
- [options] allow variant option names in config file
Resolves: bz1923938
- [plugins] Set default predicate instead of None
Resolves: bz1985986
- [MigrationResults] collect info about conversions
Resolves: bz1959598
* Mon Jun 21 2021 Pavel Moravec <pmoravec@redhat.com> = 4.1-3
- [gluster] collect public keys from the right dir
Resolves: bz1925419
- [cleaner] Only skip packaging-based files for the IP parse
Resolves: bz1964499
- [networking] collect also tc filter show ingress
Resolves: bz1886711
- [archive] skip copying SELinux context for /proc and /sys
Resolves: bz1965001
- [sssd] sssd plugin when sssd-common
Resolves: bz1967613
- Various OCP/cluster/cleanup enhancements
Resolves: bz1973675
* Thu Mar 11 2021 Pavel Moravec <pmoravec@redhat.com> = 4.0-10
- [powerpc] Collect logs for power specific components (HNV and SCSI)
Resolves: bz1928650
* Tue May 18 2021 Pavel Moravec <pmoravec@redhat.com> = 4.1-2
- Load maps from all archives before obfuscation
Resolves: bz1930181
- Multiple fixes in man pages
Resolves: bz1935603
- [ds] Mask password and encryption keys in ldif files
Resolves: bz1937298
- [report] add --cmd-timeout option
Resolves: bz1937418
- [cups] Add gathering cups-browsed logs
Resolves: bz1939963
- [sssd] Collect memory cache / individual logfiles
Resolves: bz1940502
- Collect ibmvNIC dynamic_debugs
Resolves: bz1942276
- [pulpcore] add plugin for pulp-3
Resolves: bz1956673
- [saphana] remove redundant unused argument of get_inst_info
Resolves: bz1959413
- [networking] Add nstat command support
Resolves: bz1961458
- [snapper] add a new plugin
Resolves: bz1961229
* Fri Mar 05 2021 Pavel Moravec <pmoravec@redhat.com> = 4.0-9
- [gluster] Add glusterd public keys and status files
Resolves: bz1925419
* Mon Apr 26 2021 Pavel Moravec <pmoravec@redhat.com> = 4.1-1
- Rebase on upstream 4.1
Resolves: bz1928679
* Tue Feb 16 2021 Pavel Moravec <pmoravec@redhat.com> = 4.0-8
- Automatically create directory for sos-cleaner default_mapping
@ -216,751 +260,3 @@ of the system. Currently storage and filesystem commands are audited.
* Tue Oct 13 2020 Pavel Moravec <pmoravec@redhat.com> = 4.0-1
- Rebase on upstream 4.0
Resolves: bz1827801
* Wed Aug 19 2020 Pavel Moravec <pmoravec@redhat.com> = 3.9.1-6
- [networking] remove 'ethtool -e' option for bnx2x NICs
Resolves: bz1869724
* Fri Jul 24 2020 Pavel Moravec <pmoravec@redhat.com> = 3.9.1-5
- [logs] collect also non-persistent journal logs
Resolves: bz1850926
- [block] Fix typo in LUKS detection
Resolves: bz1850554
- [powerpc] Fix enablement triggers
Resolves: bz1851923
- [pci] Update gating for lspci commands
Resolves: bz1853700
- [containers_common] collect user-related commands outputs
Resolves: bz1776549
- [gluster] remove only dump files + generated state files
Resolves: bz1857590
- [kubernetes] ignore blank+empty lines in "kubectl get nodes"
Resolves: bz1859888
* Tue Jun 23 2020 Pavel Moravec <pmoravec@redhat.com> = 3.9.1-4
- [gluster] fix gluster volume splitlines iteration
Resolves: bz1843562
- [nfs] merge nfsserver plugin into nfs one
Resolves: bz1844853
- [pacemaker] Fix scrubbing when password contains an equa
Resolves: bz1845386
- [powerpc] Add support to collect component logs
Resolves: bz1843754
* Wed May 27 2020 Pavel Moravec <pmoravec@redhat.com> = 3.9.1-2
- Rebase on upstream 3.9
Resolves: bz1826656
- [redhat] fix RH containers without sysroot Attempting to run
Resolves: bz1825283
- [containers_common] Add plugin for common containers configs
Resolves: bz1823488
- [rabbitmq] Call containerised rabbitmqctl report on
Resolves: bz1819662
- [insights] collect insights-client dump
Resolves: bz1814867
- [nvmetcli] Add new plugin for NVMe Target CLI
Resolves: bz1785546
- [containers_common] collect rootless containers info
Resolves: bz1776549
- [networking] collect iptables when proper kernel modules
Resolves: bz1633006
- [navicli] replace interactive prompt by plugin option
Resolves: bz1457191
- [xdp] Add XDP plugin
Resolves: bz1838123
* Thu May 21 2020 Pavel Moravec <pmoravec@redhat.com> = 3.8-4
- [container_log] fix unscoped 'logdir' variable
Resolves: bz1834421
* Wed May 06 2020 Pavel Moravec <pmoravec@redhat.com> = 3.8-3
- [containers_common] Add plugin for common containers configs
Resolves: bz1823488
* Fri Jan 10 2020 Pavel Moravec <pmoravec@redhat.com> = 3.8-2
- [plugins] improve heuristic for applying --since
Resolves: bz1789049
- [Predicate] Override __bool__ to allow py3 evaluation
Resolves: bz1789018
- [ceph] Add 'ceph insights' command output
Resolves: bz1783034
- [dnf] Collect dnf module list
Resolves: bz1781819
- [kernel,networking] collect bpftool net list for each
Resolves: bz1768956
- [libreswan] New plugin for "libreswan" IPsec
Resolves: bz1741330
- [kernel] collect "bpftool net list"
Resolves: bz1721779
- [grub2] call grub2-config with --no-grubenv-update
Resolves: bz1709682
* Wed Dec 11 2019 Pavel Moravec <pmoravec@redhat.com> = 3.8-1
- Rebase on upstream 3.8
Resolves: bz1779387
* Mon Nov 04 2019 Pavel Moravec <pmoravec@redhat.com> = 3.7-7
- [Plugin, kernel] interim sysroot fixes
Resolves: bz1766915
* Wed Oct 30 2019 Pavel Moravec <pmoravec@redhat.com> = 3.7-6
- [ovirt_hosted_engine] Add gluster deployment and cleanup log
Resolves: bz1744086
- [vdsm]: Fix executing shell commands
Resolves: bz1744110
- [ovn_*] Add support to containerized setups
Resolves: bz1744553
- [ipa] collect ipa-healthcheck logs, kdcproxy configs, httpd cert
Resolves: bz1688764
* Wed Oct 02 2019 Pavel Moravec <pmoravec@redhat.com> = 3.7-5
- [kernel] Don't collect trace file by default
Resolves: bz1738391
* Thu Sep 12 2019 Pavel Moravec <pmoravec@redhat.com> = 3.7-4
- [openvswitch] catch all openvswitch2.* packages
Resolves: bz1745017
* Tue Jul 30 2019 Pavel Moravec <pmoravec@redhat.com> = 3.7-3
- [openstack] Extract Placement plugin from Nova
Resolves: bz1717882
- [utilities] Fix high CPU usage and slow command collection
Resolves: bz1733352
- [peripety] collect proper config file
Resolves: bz1665981
- [sosreport,plugins] Stop plugin execution after timeout hit
Resolves: bz1733469
- [nvme] collect config file everytime
Resolves: bz1665929
* Tue Jul 09 2019 Pavel Moravec <pmoravec@redhat.com> = 3.7-2
- [sar] collect whole sar log dir
Resolves: bz1714243
- [archive] convert absolute symlink targets to relative
Resolves: bz1702806
- [archive] Handle checking container sysroot in _make_leading_paths
Resolves: bz1728214
- [frr] FRR plugin
Resolves: bz1709906
- [policies] redhat policy to use hostname instead of rhn id
Resolves: bz1718087
- Updates to vdsm plugin
Resolves: bz1700780
* Wed Jun 12 2019 Pavel Moravec <pmoravec@redhat.com> = 3.7-1
- Rebase on upstream 3.7
Resolves: bz1684400
- [buildah] parse container list properly even for scratch ones
Resolves: bz1687954
- [PATCH] [maas,mysql,npm,pacemaker,postgresql] fix plugopts data types
Resolves: bz1695583
- [plugins] add vdsm plugin
Resolves: bz1700780
- [openstack_instack] add ansible.log
Resolves: bz1702806
- [pcp] collect pmlogger without a sizelimit
Resolves: bz1719884
- [foreman,satellite] increase plugin default timeouts
Resolves: bz1719885
- [sosreport] [sosreport] initialize disabled plugins properly
Resolves: bz1719886
- [katello] support both locations of qpid SSL certs
Resolves: bz1719887
* Thu May 02 2019 Pavel Moravec <pmoravec@redhat.com> = 3.6-11
- [composer] Collect sources info for all sources
Resolves: bz1678418
* Mon Jan 21 2019 Pavel Moravec <pmoravec@redhat.com> = 3.6-10
- [grub2] Enable plugin by grub2-common package also
Resolves: bz1666214
* Mon Jan 14 2019 Pavel Moravec <pmoravec@redhat.com> = 3.6-9
- [block] proper parsing of luks partition on self device
Resolves: bz1638855
- [networking] Collect NUMA Node of each NIC
Resolves: bz1645085
- [composer] add missing commas in list in add_copy_spec
Resolves: bz1644062
- [opendaylight] Update directory for openDaylight logs
Resolves: bz1642377
* Fri Dec 13 2018 Pavel Moravec <pmoravec@redhat.com> = 3.6-8
- [plugins] fix exception when collecting empty strings
Resolves: bz1632607
- [crypto] collect more configs and commands
Resolves: bz1638492
- [networking] Replace "brctl: by "bridge" commands
Resolves: bz1644021
- [firewalld] collect nftables ruleset
Resolves: bz1644022
- [composer] New plugin for lorax-composer
Resolves: bz1644062
- [Plugin] clean up Plugin.get_option()
Resolves: bz1655984
- [ovirt_node] New plugin for oVirt Node
Resolves: bz1658937
- [podman] Add support for gathering information on podman
Resolves: bz1658938
- [postgresql] Do not limit dump size
Resolves: bz1658939
* Fri Oct 12 2018 Pavel Moravec <pmoravec@redhat.com> = 3.6-7
- [plugin,archive] fix remaining add_link issues
Resolves: bz1627543
- [kernel] dont collect some tracing instance files
Resolves: bz1638637
- [openstack_*] relax enabling of OSP RedHat plugins
Resolves: bz1638638
- [powerpc] Add support to collect DLPAR and LPM related logs
Resolves: bz1637127
* Mon Sep 10 2018 Pavel Moravec <pmoravec@redhat.com> = 3.6-6
- [archive] fix leading path creation
Resolves: bz1627543
- [atomic] Define valid preset for RHEL Atomic
Resolves: bz1627546
- [utilities] wait till AsyncReader p.poll() returns None
Resolves: bz1627544
* Thu Aug 23 2018 Pavel Moravec <pmoravec@redhat.com> = 3.6-5
- [rhv-log-collector-analyzer] Add new plugin for RHV
Resolves: bz1620049
- [kubernetes|etcd] Support OpenShift 3.10 deployments
Resolves: bz1620048
- [krb5|gssproxy] add new plugin, collect more krb5 files
Resolves: bz1607630
- [block] collect luksDump for all encrypted devices
Resolves: bz1599739
- [archive] Dont copystat /sys and /proc paths
Resolves: bz1619234
* Fri Aug 10 2018 Pavel Moravec <pmoravec@redhat.com> = 3.6-4
- [apparmor,ceph] fix typo in add_forbidden_path
Resolves: bz1614955
- [policies] sanitize report label
Resolves: bz1614956
- [policies,process] make lsof execution optional, dont call on RHOSP
Resolves: bz1614957
- [sosreport] Add mechanism to encrypt final archive
Resolves: bz1614952
- [archive] fix stat typo
Resolves: bz1614953
- [rhui] Fix detection of CDS for RHUI3
Resolves: bz1614954
- [archive] fix add_string()/do_*_sub() regression
Resolves: bz1599701
* Fri Aug 10 2018 Bryn M. Reeves <bmr@redhat.com> = 3.6-3
- Clean up spec file and sources
- Integrate sos-audit subpackage
Resolves: bz1601084
* Tue Jul 10 2018 Pavel Moravec <pmoravec@redhat.com> = 3.6-2
- Rebase on upstream 3.6
Resolves: bz1549522
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.5-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Tue Nov 14 2017 Sandro Bonazzola <sbonazzo@fedoraproject.org> - 3.5-1
- Rebase on upstream 3.5
- Resolves: BZ#1513030
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Wed Mar 29 2017 Sandro Bonazzola <sbonazzo@fedoraproject.org> - 3.4-1
- Rebase on upstream 3.4
- Resolves: BZ#1436969
- Resolves: BZ#1427445
* Thu Feb 23 2017 Sandro Bonazzola <sbonazzo@fedoraproject.org> - 3.3-1
- Rebase on upstream 3.3
- Resolves: BZ#1411314
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.2-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Mon Dec 19 2016 Miro Hrončok <mhroncok@redhat.com> - 3.2-5
- Rebuild for Python 3.6
* Tue Jul 19 2016 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.2-4
- https://fedoraproject.org/wiki/Changes/Automatic_Provides_for_Python_RPM_Packages
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3.2-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Wed Dec 16 2015 Bryn M. Reeves <bmr@redhat.com> = 3.2-2
- [sosreport] ensure private temporary directory is removed
- [global] sync rawhide package with upstream
- [ceph] collect /var/lib/ceph and /var/run/ceph
- [sosreport] prepare report in a private subdirectory (CVE-2015-7529)
- [docker] collect journald logs for docker unit
- [sosreport] fix command-line report defaults
- [openstack_neutron] obfuscate server_auth in restproxy.ini
- [memory] collect swapon --show output in bytes
- [sosreport] fix command-line report defaults (proper patch ordering)
- [sapnw] call self methods properly
- [openvswitch] capture the logs, db and OVS bridges details
- [logs] fix reference to missing 'rsyslog_conf' variable
- [sapnw] Add check if saphostctrl is not present, dont use Set
- [Plugin] fix handling of symlinks in non-sysroot environments
- [openstack] Ensure openstack passwords and secrets are obfuscated
- [plugin] pass stderr through _collect_cmd_output
- [kubernetes,plugin] Support running sos inside a container
- [openstack] New Openstack Trove (DBaaS) plugin
- [services] Add more diagnostics to applications
- [openstack_neutron] Obscure passwords and secrets
- [ceph] add calamari and ragos logs and configs
- [iprconfig] enable plugin for ppc64* architectures
- [general] verify --profile contains valid plugins only
- [kernel,mpt,memory] additional kernel-related diagnostics
- [cluster] enable crm_report password scrubbing
- [sosreport] fix command-line report defaults
- [virsh] add new plugin, add listing of qemu
- [sap*,vhostmd] new plugins for SAP
- [cluster] crm_report fails to run because dir already exists
- [foreman] Skip collection of generic resources
- [apache] Added collection of conf.modules.d dir for httpd 2.4
- [pcp] collect /etc/pcp.conf
- [puppet] adding new plugin for puppet
- [block] Don't use parted human readable output
- [general] Better handling --name and --ticket-number in
- [networking] additional ip, firewall and traffic shaping
- [infiniband] add opensm and infiniband-diags support
- [plugins/rabbitmq] Added cluster_status command output
- [networking] re-add 'ip addr' with a root symlink
- [kimchi] add new plugin
- [iprconfig] add plugin for IBM Power RAID adapters
- [ovirt] Collect engine tunables and domain information.
- [activemq] Honour all_logs and get config on RHEL
- [cluster] Add luci to packages for standalone luci servers
- [hpasm] hpasmcli commands hang under timeout
- [mysql] Collect log file
- [chrony] add chrony plugin
- [openstack_sahara] redact secrets from sahara configuration
- [openstack_sahara] add new openstack_sahara plugin
- [openstack_neutron] neutron configuration and logs files not captured
- [ovirt] remove ovirt-engine setup answer file password leak
- [networking] network plugin fails if NetworkManager is disabled
- [cluster] crm_report fails to run because dir already exists
- [mysql] improve handling of dbuser, dbpass and MYSQL_PWD
- [mysql] test for boolean values in dbuser and dbpass
- [plugin] limit path names to PC_NAME_MAX
- [squid] collect files from /var/log/squid
- [sosreport] log plugin exceptions to a file
- [ctdb] fix collection of /etc/sysconfig/ctdb
- [sosreport] fix silent exception handling
- [sosreport] do not make logging calls after OSError
- [sosreport] catch OSError exceptions in SoSReport.execute()
- [anaconda] make useradd password regex tolerant of whitespace
- [mysql] fix handling of mysql.dbpass option
- [navicli] catch exceptions if stdin is unreadable
- [docs] update man page for new options
- [sosreport] make all utf-8 handling user errors=ignore
- [kpatch] do not attempt to collect data if kpatch is not installed
- [archive] drop support for Zip archives
- [sosreport] fix archive permissions regression
- [tomcat] add support for tomcat7 and default log size limits
- [mysql] obtain database password from the environment
- [corosync] add postprocessing for corosync-objctl output
- [ovirt_hosted_engine] fix exception when force-enabled
- [yum] call rhsm-debug with --no-subscriptions
- [powerpc] allow PowerPC plugin to run on ppc64le
- [package] add Obsoletes for sos-plugins-openstack
- [pam] add pam_tally2 and faillock support
- [postgresql] obtain db password from the environment
- [pcp] add Performance Co-Pilot plugin
- [nfsserver] collect /etc/exports.d
- [sosreport] handle --compression-type correctly
- [anaconda] redact passwords in kickstart configurations
- [haproxy] add new plugin
- [keepalived] add new plugin
- [lvm2] set locking_type=0 when calling lvm commands
- [tuned] add new plugin
- [cgroups] collect /etc/sysconfig/cgred
- [plugins] ensure doc text is always displayed for plugins
- [sosreport] fix the distribution version API call
- [docker] add new plugin
- [openstack_*] include broken-out openstack plugins
- [mysql] support MariaDB
- [openstack] do not collect /var/lib/nova
- [grub2] collect grub.cfg on UEFI systems
- [sosreport] handle out-of-space errors gracefully
- [firewalld] new plugin
- [networking] collect NetworkManager status
- [kpatch] new plugin
- [global] update to upstream 3.2 release
- [foreman] add new plugin
* Tue Nov 10 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.2-0.4.a
- Rebuilt for https://fedoraproject.org/wiki/Changes/python3.5
* Fri Jul 17 2015 Miro Hrončok <mhroncok@redhat.com> - 3.2-0.3.a
- Use Python 3 (#1014595)
- Use setup.py instead of make
- Remove some deprecated statements
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.2-0.2.a
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Tue Jun 17 2014 Bryn M. Reeves <bmr@redhat.com> = 3.2-0.1.a
- Make source URL handling compliant with packaging guidelines
- Update to new upstream pre-release sos-3.2-alpha1
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Tue Apr 01 2014 Bryn M. Reeves <bmr@redhat.com> = 3.1-1
- Update to new upstream release sos-3.1
- Add collection of grub configuration for UEFI systems
- Raise a TypeError if add_copy_specs() is called with a string
- Add tests for Plugin.add_copy_spec()/add_copy_specs()
- Update Plugin tests to treat copy_paths as a set
- Use a set for Plugin.copy_paths
- Remove references to 'sub' parameter from plugin tests
- Remove 'sub' parameter from Plugin.add_copy_spec*()
- Drop RedHatPlugin from procenv
- Update plugin_tests.py to match new method names
- Remove obsolete checksum reference from utilities_tests.py
- Refactor Plugin.collect() pathway
- Fix x86 arch detection in processor plugin
- Pythonify Plugin._path_in_pathlist()
- Clean up package checks in processor plugin
- Replace self.policy().pkg_by_name() us in Logs plugin
- Convert infiniband to package list
- Dead code removal: PluginException
- Dead code removal: sos.plugins.common_prefix()
- Add vim tags to all python source files
- Dead code removal: utilities.checksum()
- Dead code removal: DirTree
- Dead code removal: sos_relative_path()
- Remove --profile support
- Fix plugin_test exception on six.PY2
- Call rhsm-debug with the --sos switch
- Do not collect isos in cobbler plugin
- Match plugins against policies
- Update policy_tests.py for validate_plugin change
- Rename validatePlugin to validate_plugin
- Fix broken binary detection in satellite plugin
- Clean up get_cmd_path/make_cmd_path/make_cmd_dirs mess
- Add tuned plugin
- Update systemd support
- Fix remaining use of obsolete 'get_cmd_dir()' in plugins
- Add PowerNV specific debug data
- powerpc: Move VPD related tool under common code
- Remove the rhevm plugin.
- Replace package check with file check in anacron
- Scrub ldap_default_authtok password in sssd plugin
- Eliminate hard-coded /var/log/sa paths in sar plugin
- Remove useless check_enabled() from sar plugin
- Improve error message when cluster.crm_from is invalid
- Fix command output substitution exception
- Add distupgrade plugin
- Fix gluster volume name extraction
- Ensure unused fds are closed when calling subprocesses via Popen
- Pass --no-archive to rhsm-debug script
- postgresql: allow use TCP socket
- postgresql: added license and copyright
- postgresql: add logs about errors / warnings
- postgresql: minor fixes
- Include geo-replication status in gluster plugin
- Make get_cmd_output_now() behaviour match 2.2
- Add rhsm-debug collection to yum plugin
- Always treat rhevm vdsmlogs option as string
- Fix verbose file logging
- Fix get_option() use in cluster plugin
- Fix cluster postproc regression
- Ensure superclass postproc method is called in ldap plugin
- Remove obsolete diagnostics code from ldap plugin
- Fix cluster module crm_report support
* Thu Mar 20 2014 Bryn M. Reeves <bmr@redhat.com> = 3.0-23
- Call rhsm-debug with the --sos switch
* Mon Mar 03 2014 Bryn M. Reeves <bmr@redhat.com>
- Fix package check in anacron plugin
* Wed Feb 12 2014 Bryn M. Reeves <bmr@redhat.com>
- Remove obsolete rhel_version() usage from yum plugin
* Tue Feb 11 2014 Bryn M. Reeves <bmr@redhat.com>
- Prevent unhandled exception during command output substitution
* Mon Feb 10 2014 Bryn M. Reeves <bmr@redhat.com>
- Fix generation of volume names in gluster plugin
- Add distupgrade plugin
* Tue Feb 04 2014 Bryn M. Reeves <bmr@redhat.com>
- Prevent file descriptor leaks when using Popen
- Disable zip archive creation when running rhsm-debug
- Include volume geo-replication status in gluster plugin
* Mon Feb 03 2014 Bryn M. Reeves <bmr@redhat.com>
- Fix get_option use in cluster plugin
- Fix debug logging to file when given '-v'
- Always treat rhevm plugin's vdsmlogs option as a string
- Run the rhsm-debug script from yum plugin
* Fri Jan 31 2014 Bryn M. Reeves <bmr@redhat.com>
- Add new plugin to collect OpenHPI configuration
- Fix cluster plugin crm_report support
- Fix file postprocessing in ldap plugin
- Remove collection of anaconda-ks.cfg from general plugin
* Fri Jan 24 2014 Bryn M. Reeves <bmr@redhat.com>
- Remove debug statements from logs plugin
- Make ethernet interface detection more robust
- Fix specifying multiple plugin options on the command line
- Make log and message levels match previous versions
- Log a warning message when external commands time out
- Remove --upload command line option
- Update sos UI text to match upstream
* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com>
- Mass rebuild 2013-12-27
* Thu Nov 14 2013 Bryn M. Reeves <bmr@redhat.com>
- Fix regressions introduced with --build option
* Tue Nov 12 2013 Bryn M. Reeves <bmr@redhat.com>
- Fix typo in yum plug-in add_forbidden_paths
- Add krb5 plug-in and drop collection of krb5.keytab
* Fri Nov 8 2013 Bryn M. Reeves <bmr@redhat.com>
- Add nfs client plug-in
- Fix traceback when sar module force-enabled
* Thu Nov 7 2013 Bryn M. Reeves <bmr@redhat.com>
- Restore --build command line option
- Collect saved vmcore-dmesg.txt files
- Normalize temporary directory paths
* Tue Nov 5 2013 Bryn M. Reeves <bmr@redhat.com>
- Add domainname output to NIS plug-in
- Collect /var/log/squid in squid plug-in
- Collect mountstats and mountinfo in filesys plug-in
- Add PowerPC plug-in from upstream
* Thu Oct 31 2013 Bryn M. Reeves <bmr@redhat.com>
- Remove version checks in gluster plug-in
- Check for usable temporary directory
- Fix --alloptions command line option
- Fix configuration fail regression
* Wed Oct 30 2013 Bryn M. Reeves <bmr@redhat.com>
- Include /etc/yaboot.conf in boot plug-in
- Fix collection of brctl output in networking plug-in
- Verify limited set of RPM packages by default
- Do not strip newlines from command output
- Limit default sar data collection
* Thu Oct 3 2013 Bryn M. Reeves <bmr@redhat.com>
- Do not attempt to read RPC pseudo files in networking plug-in
- Restrict wbinfo collection to the current domain
- Add obfuscation of luci secrets to cluster plug-in
- Add XFS plug-in
- Fix policy class handling of --tmp-dir
- Do not set batch mode if stdin is not a TTY
- Attempt to continue when reading bad input in interactive mode
* Wed Aug 14 2013 Bryn M. Reeves <bmr@redhat.com>
- Add crm_report support to cluster plug-in
- Fix rhel_version() usage in cluster and s390 plug-ins
- Strip trailing newline from command output
* Mon Jun 10 2013 Bryn M. Reeves <bmr@redhat.com>
- Silence 'could not run' messages at default verbosity
- New upstream release
* Thu May 23 2013 Bryn M. Reeves <bmr@redhat.com>
- Always invoke tar with '-f-' option
* Mon Jan 21 2013 Bryn M. Reeves <bmr@redhat.com>
- Fix interactive mode regression when --ticket unspecified
* Fri Jan 18 2013 Bryn M. Reeves <bmr@redhat.com>
- Fix propagation of --ticket parameter in interactive mode
* Thu Jan 17 2013 Bryn M. Reeves <bmr@redhat.com>
- Revert OpenStack patch
* Wed Jan 9 2013 Bryn M. Reeves <bmr@redhat.com>
- Report --name and --ticket values as defaults
- Fix device-mapper command execution logging
- Fix data collection and rename PostreSQL module to pgsql
* Fri Oct 19 2012 Bryn M. Reeves <bmr@redhat.com>
- Add support for content delivery hosts to RHUI module
* Thu Oct 18 2012 Bryn M. Reeves <bmr@redhat.com>
- Add Red Hat Update Infrastructure module
- Collect /proc/iomem in hardware module
- Collect subscription-manager output in general module
- Collect rhsm log files in general module
- Fix exception in gluster module on non-gluster systems
- Fix exception in psql module when dbname is not given
* Wed Oct 17 2012 Bryn M. Reeves <bmr@redhat.com>
- Collect /proc/pagetypeinfo in memory module
- Strip trailing newline from command output
- Add sanlock module
- Do not collect archived accounting files in psacct module
- Call spacewalk-debug from rhn module to collect satellite data
* Mon Oct 15 2012 Bryn M. Reeves <bmr@redhat.com>
- Avoid calling volume status when collecting gluster statedumps
- Use a default report name if --name is empty
- Quote tilde characters passed to shell in RPM module
- Collect KDC and named configuration in ipa module
- Sanitize hostname characters before using as report path
- Collect /etc/multipath in device-mapper module
- New plug-in for PostgreSQL
- Add OpenStack module
- Avoid deprecated sysctls in /proc/sys/net
- Fix error logging when calling external programs
- Use ip instead of ifconfig to generate network interface lists
* Wed May 23 2012 Bryn M. Reeves <bmr@redhat.com>
- Collect the swift configuration directory in gluster module
- Update IPA module and related plug-ins
* Fri May 18 2012 Bryn M. Reeves <bmr@redhat.com>
- Collect mcelog files in the hardware module
* Wed May 02 2012 Bryn M. Reeves <bmr@redhat.com>
- Add nfs statedump collection to gluster module
* Tue May 01 2012 Bryn M. Reeves <bmr@redhat.com>
- Use wildcard to match possible libvirt log paths
* Mon Apr 23 2012 Bryn M. Reeves <bmr@redhat.com>
- Add forbidden paths for new location of gluster private keys
* Fri Mar 9 2012 Bryn M. Reeves <bmr@redhat.com>
- Fix katello and aeolus command string syntax
- Remove stray hunk from gluster module patch
* Thu Mar 8 2012 Bryn M. Reeves <bmr@redhat.com>
- Correct aeolus debug invocation in CloudForms module
- Update gluster module for gluster-3.3
- Add additional command output to gluster module
- Add support for collecting gluster configuration and logs
* Wed Mar 7 2012 Bryn M. Reeves <bmr@redhat.com>
- Collect additional diagnostic information for realtime systems
- Improve sanitization of RHN user and case number in report name
- Fix verbose output and debug logging
- Add basic support for CloudForms data collection
- Add support for Subscription Asset Manager diagnostics
* Tue Mar 6 2012 Bryn M. Reeves <bmr@redhat.com>
- Collect fence_virt.conf in cluster module
- Fix collection of /proc/net directory tree
- Gather output of cpufreq-info when present
- Fix brctl showstp output when bridges contain multiple interfaces
- Add /etc/modprobe.d to kernel module
- Ensure relative symlink targets are correctly handled when copying
- Fix satellite and proxy package detection in rhn plugin
- Collect stderr output from external commands
- Collect /proc/cgroups in the cgroups module
Resolve: bz784874
- Collect /proc/irq in the kernel module
- Fix installed-rpms formatting for long package names
- Add symbolic links for truncated log files
- Collect non-standard syslog and rsyslog log files
- Use correct paths for tomcat6 in RHN module
- Obscure root password if present in anacond-ks.cfg
- Do not accept embedded forward slashes in RHN usernames
- Add new sunrpc module to collect rpcinfo for gluster systems
* Tue Nov 1 2011 Bryn M. Reeves <bmr@redhat.com>
- Do not collect subscription manager keys in general plugin
* Fri Sep 23 2011 Bryn M. Reeves <bmr@redhat.com>
- Fix execution of RHN hardware.py from hardware plugin
- Fix hardware plugin to support new lsusb path
* Fri Sep 09 2011 Bryn M. Reeves <bmr@redhat.com>
- Fix brctl collection when a bridge contains no interfaces
- Fix up2dateclient path in hardware plugin
* Mon Aug 15 2011 Bryn M. Reeves <bmr@redhat.com>
- Collect brctl show and showstp output
- Collect nslcd.conf in ldap plugin
* Sun Aug 14 2011 Bryn M. Reeves <bmr@redhat.com>
- Truncate files that exceed specified size limit
- Add support for collecting Red Hat Subscrition Manager configuration
- Collect /etc/init on systems using upstart
- Don't strip whitespace from output of external programs
- Collect ipv6 neighbour table in network module
- Collect basic cgroups configuration data
* Sat Aug 13 2011 Bryn M. Reeves <bmr@redhat.com>
- Fix collection of data from LVM2 reporting tools in devicemapper plugin
- Add /proc/vmmemctl collection to vmware plugin
* Fri Aug 12 2011 Bryn M. Reeves <bmr@redhat.com>
- Collect yum repository list by default
- Add basic Infiniband plugin
- Add plugin for scsi-target-utils iSCSI target
- Fix autofs plugin LC_ALL usage
- Fix collection of lsusb and add collection of -t and -v outputs
- Extend data collection by qpidd plugin
- Add ethtool pause, coalesce and ring (-a, -c, -g) options to network plugin
* Thu Apr 07 2011 Bryn M. Reeves <bmr@redhat.com>
- Use sha256 for report digest when operating in FIPS mode
* Tue Apr 05 2011 Bryn M. Reeves <bmr@redhat.com>
- Fix parted and dumpe2fs output on s390
* Fri Feb 25 2011 Bryn M. Reeves <bmr@redhat.com>
- Fix collection of chkconfig output in startup.py
- Collect /etc/dhcp in dhcp.py plugin
- Collect dmsetup ls --tree output in devicemapper.py
- Collect lsblk output in filesys.py
* Thu Feb 24 2011 Bryn M. Reeves <bmr@redhat.com>
- Fix collection of logs and config files in sssd.py
- Add support for collecting entitlement certificates in rhn.py
* Thu Feb 03 2011 Bryn M. Reeves <bmr@redhat.com>
- Fix cluster plugin dlm lockdump for el6
- Add sssd plugin to collect configuration and logs
- Collect /etc/anacrontab in system plugin
- Correct handling of redhat-release for el6
* Thu Jul 29 2010 Adam Stokes <ajs at redhat dot com>
* Thu Jun 10 2010 Adam Stokes <ajs at redhat dot com>
* Wed Apr 28 2010 Adam Stokes <ajs at redhat dot com>
* Mon Apr 12 2010 Adam Stokes <ajs at redhat dot com>
* Tue Mar 30 2010 Adam Stokes <ajs at redhat dot com>
- fix setup.py to autocompile translations and man pages
- rebase 1.9
* Fri Mar 19 2010 Adam Stokes <ajs at redhat dot com>
- updated translations
* Thu Mar 04 2010 Adam Stokes <ajs at redhat dot com>
- version bump 1.9
- replaced compression utility with xz
- strip threading/multiprocessing
- simplified progress indicator
- pylint update
- put global vars in class container
- unittests
- simple profiling
- make use of xgettext as pygettext is deprecated
* Mon Jan 18 2010 Adam Stokes <ajs at redhat dot com>
- more sanitizing options for log files
- rhbz fixes from RHEL version merged into trunk
- progressbar update