| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Previously, in _make_leading_paths(), checking host file paths did not
account for non / sysroots, for situations where sos is run in a
container and the host's / is actually mounted under /host for example.
This would lead to copy errors when trying to copy symlinks.
This method now will use sysroot if one is set, thus avoiding copy
errors.
Resolves: #1705
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adds an option to encrypt the resulting archive that sos generates.
There are two methods for doing so:
--encrypt-key Uses a key-pair for asymmetric encryption
--encrypt-pass Uses a password for symmetric encryption
For key-pair encryption, the key-to-be-used must be imported into the
root user's keyring, as gpg does not allow for the use of keyfiles.
If the encryption process fails, sos will not abort as the unencrypted
archive will have already been created. The assumption being that the
archive is still of use and/or the user has another means of encrypting
it.
Resolves: #1320
Signed-off-by: Jake Hunsaker <jhunsake@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A change in the handling of add_string() operations in the archive
class causes the Plugin string substitution methods to fail (since
the archive was enforcing a check that the path did not already
exist - for substitutions this is always the case).
Maintain the check for content that is being copied into the
archive anew, but make the add_string() method override this and
disable the existence checks.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
| |
Moving also building of the command from Archive to Plugin class.
Closes: #1196
Resolves: #1338
Signed-off-by: Pavel Moravec <pmoravec@redhat.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Since plugins are now run concurrently the Archive class must be
re-entrant: different plugins may attempt to create the same
paths in the archive, and since they are executing in parallel
and with no locking, there exists a TOCTOU race between the use
of os.path.{exists,isdir, etc.}() and the subsequent creation of
a new path.
Address this by implementing a simple monitor-style locking scheme
for the FileCacheArchive class. A `_path_lock` member is added to
the class and this must be held across any operation that modifies
the namespace of the archive (including file, directory, symlink,
and special node creation).
Additionally, the `_check_path()` Archive method (which checks
for the existence of path components up to the basename of the
file, creating directories as required) is extended to also carry
out a test for the existence of the path, and if the path does
exist, that the object is of the expected type. A mismatch in the
object type generates a ValueError with an appropriate string
description of the problem.
Benchmarking shows a consistent small improvement with the patch:
this is a result of reduced redundant copy operations that the
previous archive structure allowed (since duplicate operations
are now aborted as soon as the _path_lock is acquired).
Resolves: #1340
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Adding /dev/null as a node will trigger EPERM. This can happen namely
when masking systemd units which symlinks to /dev/null. This fix will
avoid a stacktrace and will generate a INFO message about it.
Test for that situation is also included.
Resolves: #893.
Signed-off-by: Louis Bouchard <louis.bouchard@canonical.com>
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
| |
When add_string receives output from tail() it fails in py3
since tail() returns a byte object. Mimic this behavior.
Signed-off-by: Louis Bouchard <louis.bouchard@canonical.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fix the syntax of the vim modeline used to enable the required
editing mode in all python sources files.
The desired options are:
et - expand tabs (convert tab chars to spaces)
ts=4 - set tabstop to 4 characters
sw=4 - set shiftwidth to 4 characters
Signed-off-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
(edits for commit message, modeline compatibility & options)
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
---
__run__.py | 2 +-
example_plugins/example.py | 2 +-
setup.py | 2 +-
sos/archive.py | 2 +-
sos/plugins/__init__.py | 2 +-
sos/plugins/abrt.py | 2 +-
sos/plugins/acpid.py | 2 +-
sos/plugins/anaconda.py | 2 +-
sos/plugins/anacron.py | 2 +-
sos/plugins/apache.py | 2 +-
sos/plugins/apparmor.py | 2 +-
sos/plugins/apport.py | 2 +-
sos/plugins/apt.py | 2 +-
sos/plugins/ata.py | 2 +-
sos/plugins/auditd.py | 2 +-
sos/plugins/autofs.py | 2 +-
sos/plugins/azure.py | 2 +-
sos/plugins/block.py | 2 +-
sos/plugins/boot.py | 2 +-
sos/plugins/ceph.py | 2 +-
sos/plugins/cgroups.py | 2 +-
sos/plugins/cluster.py | 2 +-
sos/plugins/cobbler.py | 2 +-
sos/plugins/corosync.py | 2 +-
sos/plugins/cron.py | 2 +-
sos/plugins/cs.py | 2 +-
sos/plugins/ctdb.py | 2 +-
sos/plugins/cups.py | 2 +-
sos/plugins/dbus.py | 2 +-
sos/plugins/devicemapper.py | 2 +-
sos/plugins/dhcp.py | 2 +-
sos/plugins/distupgrade.py | 2 +-
sos/plugins/dmraid.py | 2 +-
sos/plugins/docker.py | 2 +-
sos/plugins/dovecot.py | 2 +-
sos/plugins/dpkg.py | 2 +-
sos/plugins/ds.py | 2 +-
sos/plugins/fcoe.py | 2 +-
sos/plugins/filesys.py | 2 +-
sos/plugins/firewalld.py | 2 +-
sos/plugins/foreman.py | 2 +-
sos/plugins/gdm.py | 2 +-
sos/plugins/general.py | 2 +-
sos/plugins/gluster.py | 2 +-
sos/plugins/grub.py | 2 +-
sos/plugins/grub2.py | 2 +-
sos/plugins/haproxy.py | 2 +-
sos/plugins/hardware.py | 2 +-
sos/plugins/hpasm.py | 2 +-
sos/plugins/hts.py | 2 +-
sos/plugins/i18n.py | 2 +-
sos/plugins/infiniband.py | 2 +-
sos/plugins/ipa.py | 2 +-
sos/plugins/ipsec.py | 2 +-
sos/plugins/ipvs.py | 2 +-
sos/plugins/iscsi.py | 2 +-
sos/plugins/iscsitarget.py | 2 +-
sos/plugins/java.py | 2 +-
sos/plugins/juju.py | 2 +-
sos/plugins/kdump.py | 2 +-
sos/plugins/keepalived.py | 2 +-
sos/plugins/kernel.py | 2 +-
sos/plugins/kernelrt.py | 2 +-
sos/plugins/keyutils.py | 2 +-
sos/plugins/kpatch.py | 2 +-
sos/plugins/krb5.py | 2 +-
sos/plugins/kvm.py | 2 +-
sos/plugins/landscape.py | 2 +-
sos/plugins/ldap.py | 2 +-
sos/plugins/libraries.py | 2 +-
sos/plugins/libvirt.py | 2 +-
sos/plugins/lightdm.py | 2 +-
sos/plugins/lilo.py | 2 +-
sos/plugins/logrotate.py | 2 +-
sos/plugins/logs.py | 2 +-
sos/plugins/lsbrelease.py | 2 +-
sos/plugins/lvm2.py | 2 +-
sos/plugins/maas.py | 2 +-
sos/plugins/manageiq.py | 2 +-
sos/plugins/md.py | 2 +-
sos/plugins/megacli.py | 2 +-
sos/plugins/memory.py | 2 +-
sos/plugins/mongodb.py | 2 +-
sos/plugins/mpt.py | 2 +-
sos/plugins/mrggrid.py | 2 +-
sos/plugins/mrgmessg.py | 2 +-
sos/plugins/multipath.py | 2 +-
sos/plugins/mysql.py | 2 +-
sos/plugins/named.py | 2 +-
sos/plugins/navicli.py | 2 +-
sos/plugins/networking.py | 2 +-
sos/plugins/nfs.py | 2 +-
sos/plugins/nfsserver.py | 2 +-
sos/plugins/nis.py | 2 +-
sos/plugins/nscd.py | 2 +-
sos/plugins/ntp.py | 2 +-
sos/plugins/numa.py | 2 +-
sos/plugins/oddjob.py | 2 +-
sos/plugins/openhpi.py | 2 +-
sos/plugins/openshift.py | 2 +-
sos/plugins/openssl.py | 2 +-
sos/plugins/openstack_ceilometer.py | 2 +-
sos/plugins/openstack_cinder.py | 2 +-
sos/plugins/openstack_glance.py | 2 +-
sos/plugins/openstack_heat.py | 2 +-
sos/plugins/openstack_horizon.py | 2 +-
sos/plugins/openstack_keystone.py | 2 +-
sos/plugins/openstack_neutron.py | 2 +-
sos/plugins/openstack_nova.py | 2 +-
sos/plugins/openstack_swift.py | 2 +-
sos/plugins/openstack_trove.py | 2 +-
sos/plugins/openswan.py | 2 +-
sos/plugins/openvswitch.py | 2 +-
sos/plugins/pam.py | 2 +-
sos/plugins/pci.py | 2 +-
sos/plugins/pcp.py | 2 +-
sos/plugins/postfix.py | 2 +-
sos/plugins/postgresql.py | 2 +-
sos/plugins/powerpath.py | 2 +-
sos/plugins/powerpc.py | 2 +-
sos/plugins/ppp.py | 2 +-
sos/plugins/procenv.py | 2 +-
sos/plugins/process.py | 2 +-
sos/plugins/processor.py | 2 +-
sos/plugins/psacct.py | 2 +-
sos/plugins/pxe.py | 2 +-
sos/plugins/python.py | 2 +-
sos/plugins/qpid.py | 2 +-
sos/plugins/quagga.py | 2 +-
sos/plugins/rabbitmq.py | 2 +-
sos/plugins/radius.py | 2 +-
sos/plugins/rhui.py | 2 +-
sos/plugins/rpm.py | 2 +-
sos/plugins/s390.py | 2 +-
sos/plugins/samba.py | 2 +-
sos/plugins/sanlock.py | 2 +-
sos/plugins/sar.py | 2 +-
sos/plugins/satellite.py | 2 +-
sos/plugins/scsi.py | 2 +-
sos/plugins/selinux.py | 2 +-
sos/plugins/sendmail.py | 2 +-
sos/plugins/smartcard.py | 2 +-
sos/plugins/snmp.py | 2 +-
sos/plugins/soundcard.py | 2 +-
sos/plugins/squid.py | 2 +-
sos/plugins/ssh.py | 2 +-
sos/plugins/ssmtp.py | 2 +-
sos/plugins/sssd.py | 2 +-
sos/plugins/startup.py | 2 +-
sos/plugins/sunrpc.py | 2 +-
sos/plugins/symcli.py | 2 +-
sos/plugins/system.py | 2 +-
sos/plugins/systemd.py | 2 +-
sos/plugins/systemtap.py | 2 +-
sos/plugins/sysvipc.py | 2 +-
sos/plugins/targetcli.py | 2 +-
sos/plugins/teamd.py | 2 +-
sos/plugins/tftpserver.py | 2 +-
sos/plugins/tomcat.py | 2 +-
sos/plugins/tuned.py | 2 +-
sos/plugins/udev.py | 2 +-
sos/plugins/unity.py | 2 +-
sos/plugins/upstart.py | 2 +-
sos/plugins/usb.py | 2 +-
sos/plugins/veritas.py | 2 +-
sos/plugins/vmware.py | 2 +-
sos/plugins/vsftpd.py | 2 +-
sos/plugins/x11.py | 2 +-
sos/plugins/xen.py | 2 +-
sos/plugins/xfs.py | 2 +-
sos/plugins/xinetd.py | 2 +-
sos/plugins/yum.py | 2 +-
sos/policies/__init__.py | 2 +-
sos/policies/debian.py | 2 +-
sos/policies/osx.py | 2 +-
sos/policies/redhat.py | 2 +-
sos/policies/ubuntu.py | 2 +-
sos/reporting.py | 2 +-
sos/sosreport.py | 2 +-
sos/utilities.py | 2 +-
tests/archive_tests.py | 2 +-
tests/importer_tests.py | 2 +-
tests/option_tests.py | 2 +-
tests/plugin_tests.py | 2 +-
tests/policy_tests.py | 2 +-
tests/report_tests.py | 2 +-
tests/sosreport_pexpect.py | 2 +-
tests/test_exe.py | 2 +-
tests/utilities_tests.py | 2 +-
189 files changed, 189 insertions(+), 189 deletions(-)
|
|
|
|
|
|
|
|
| |
Remove the ZipArchive class and associated test code.
Fixes #322.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
| |
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
|
|
|
|
|
|
|
| |
The 'u' prefix wasn't reintroduced back into Python 3 until
version 3.3. Use six here to accomodate for that.
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
|
|
|
|
|
|
| |
Fixes Issue #243.
Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
|
|
|
|
|
|
|
|
|
|
|
|
| |
This includes a necessary dependency on python-six for its compability layer
since we are wanting to continue support for both Python 2.7.x and Python 3.x.
In addition, this will allow us to effectively phase out Python 2 support
when/if the time arises that all interested distributions have done away with
Python 2.
This port passes all unittests for both python 2.7.x and python 3.3.x
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
|
|
|
|
| |
Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
|
|
|
|
|
|
| |
The TarFileArchive class currently doesn't allow recursive
directory addition using the add_file() interface - disable those
tests for now.
|
| |
|
|
|
|
| |
unicode filename to a zipfile would fail
|
|
|
|
|
|
|
| |
Pulled up PackageManager implementation to simplify subclass responsibilities
Moved compress method to Archive classes
Re-organized utilities.py
Added tests to exercise more utilities methods
|
| |
|
| |
|
|
Code reorganization
Cross platform support for Windows, OS X and Linux
Dynamically loaded policies
Support for loading plugins from multiple locations
via __path__ modification of sos.plugins
Support for running via Jython
Support for executing from a jarfile
Support for json based reporting infrastructure
- Previous reporting methods still exist
Support for other checksum algorithms (determined by policy)
Support for other compression algorithms (determined by policy)
New plugin API for writing arbitrary information in a new file inside
the report archive.
New plugin API for modifying files that have been added to the
archive.
Added API for global plugin options
- external interface is unavailable at this time
Many small bugfixes
|