Fix libvirt password regex

The anchor at the end of the qemu XML password regex causes it to
not match in some cases. Remove it as it is unneccessary anyway.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>`
Fix logging exception in Plugin.collect_strings()

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Fix exception in Policy::get_pkg_list()

If the current working directory (as reported by getcwd()) does
not exist the package manager component of the policy may fail
to initialise:

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Traceback (most recent call last):
  File "/sbin/sosreport", line 23, in <module>
    main(sys.argv[1:])
  File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1228, in main
    sos = SoSReport(args)
  File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 530, in __init__
    self.policy = sos.policies.load()
  File "/usr/lib/python2.7/site-packages/sos/policies/__init__.py", line 39, in load
    cache['policy'] = policy()
  File "/usr/lib/python2.7/site-packages/sos/policies/redhat.py", line 165, in __init__
    super(FedoraPolicy, self).__init__()
  File "/usr/lib/python2.7/site-packages/sos/policies/redhat.py", line 49, in __init__
    if self.package_manager.all_pkgs()['filesystem']['version'][0] == '3':
  File "/usr/lib/python2.7/site-packages/sos/policies/__init__.py", line 108, in all_pkgs
    self.packages = self.get_pkg_list()
  File "/usr/lib/python2.7/site-packages/sos/policies/__init__.py", line 95, in get_pkg_list
    name, version = pkg.split("|")
ValueError: need more than 1 value to unpack

Fix this by ensuring that the string contains at least one pipe
character before splitting.

There are many reasons that the package manager could spit out
unexpected lines with the package list so this improves the
general robustness of this code.

Fixes RHBZ#1091683.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Drop cwd/umask shenanigans from TarFileArchive::finalize()

It was necessary to save and restore old_cwd and the umask around
calls to an external archive program. This isn't needed when
using native python implementations and causes problems in the
case that the current working directory no longer exists:

Creating compressed archive...
going to finalize
did finalize exception: [Errno 2] No such file or directory
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Traceback (most recent call last):
  File "/sbin/sosreport", line 23, in <module>
    main(sys.argv[1:])
  File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1233, in main
    sos.execute()
  File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1222, in execute
    return self.final_work()
  File "/usr/lib/python2.7/site-packages/sos/sosreport.py", line 1159, in final_work
    raise e
OSError: [Errno 2] No such file or directory

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Make calls to TarFile.add() use absolute path for 'name'

Always use an absolute path when calling TarFile.add() in
TarFileArchive._build_archive() and set arcname explicitly to the
(relative) path name to use in the archive.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
sosreport: Add support for new ppc64-diag elog format

Reviewed-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Signed-off-by: Samuel Mendoza-Jonas <samjc.mj@gmail.com>

Minor fixups for missing comas and to apply to the current tree.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Drop Windows support

The Windows port is unmaintained (and likely broken). Drop the
support for now. If there's interest in developing and maintaining
the port in the future this can be easily reverted.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Don't use a glob to collect /var/log/boot.log

Using a glob to pick up the boot logs means that we can pull in
unexpected content, e.g. /var/log/bootchart which may be large.

Just pick up the log file we're interested in. Fixes Issue #150.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Add tuned configuration paths to tuned plugin

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Add oVirt plugin

Add a plugin for oVirt based on the RHEV log collector plugin
with improvements and suggestions from Sandro Bonazzola.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Fix call_ext_prog() use in oVirt plugin

The oVirt plugin tried to use the old tuple based return values
for self.call_ext_prog(). Convert it to use the dictionary values
instead.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Set global{locking_type=0} when running lvm2 commands

The lvm2 commands that sos issues are all read-only. Disable
locking when running the commands to avoid blocking if another
process or node is holding a lock.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
travis-ci supports python 3.4

now that travis-ci supports python 3.4 we make the unittests pass on that
version a requirement.

Signed-off-by: Adam Stokes <adam.stokes@ubuntu.com>
Add postprocessing for /etc/fstab passwords

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Fix call_ext_prog() use in abrt, s390, veritas, xen and yum

Several plugins still tried to use the old tuple based return
values for self.call_ext_prog(). Convert them to use the
dictionary values instead.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Make do_path_regex_sub() honour string regex arguments

The Plugin.do_path_regex_sub() method to apply regex substitutions
to paths matching a pattern documents that it accepts either a
compiled re object or a regular expression as a string:

    '''Apply a regexp substituation to a set of files archived by
    sos. The set of files to be substituted is generated by matching
    collected file pathnames against pathexp which may be a regular
    expression string or compiled re object. The portion of the file
    to be replaced is specified via regexp and the replacement string
    is passed in subst.'''

It lies. Attempting to pass a string for the 'pathexp' parameter
will result in:

    Traceback (most recent call last):
      File "/usr/sbin/sosreport", line 23, in <module>
        main(sys.argv[1:])
      File "/usr/lib/python2.6/site-packages/sos/sosreport.py", line 1229, in main
        sos.execute()
    AttributeError: 'str' object has no attribute 'match'

    > /usr/lib/python2.6/site-packages/sos/plugins/__init__.py(219)do_path_regex_sub()
    -> match = pathexp.match

Look to see if the object we are passed has a 'match()' method and
call re.compile on it if it does not.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Elide bootloader password in grub plugin

The grub.conf configuration file collected by the grub plugin may
contain a plaintext or md5 hashed bootloader password. Add a regex
substitution for all files matching '.*\/grub\.conf' and replace
the password with '*'s.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Make sure grub password regex handles all cases

The regex to match passwords in grub.conf needs to handle both
the --md5 and non-md5 cases and to apply the substitution only
to the secret part (password or password hash).

This needs to deal with the fact that python will return 'None'
for unmatched pattern groups leading to an exception in re.subn()
if not all referenced groups match for a given string (in contrast
to e.g. the perl approach of treating these groups as the empty
string).

Make this explicit by using an empty alternate in the possibly
unmatched '--md5' group:

            r"(password\s*)(--md5\s*|\s*)(.*)",
            r"\1\2********"

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
Elide passwords in grub2 plugin

Remove both plaintext and pbkdf2 passwords from grub configuration
files and command output. Since grub does not mandate any
particular location for its authentication data we have to apply
these liberaly (to all grub*.cfg as well as to all /etc/grub.d
fragments and the output of grub2-mkconfig).

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>
[ovirt] elide passwords in {iso,image}uploader.conf

These two configuration files may contain passwords of the form:

Add do_file_sub() calls to the plugin's postproc to remove these.

Signed-off-by: Bryn M. Reeves <bmr@redhat.com>