[sos/f17] Update sos to 2.2-29.fc17

Bryn Reeves bmr at fedoraproject.org
Fri Jun 22 11:14:03 UTC 2012


commit 7444bf1890aa25e59740b2fd65995a96cc8a678d
Author: Bryn M. Reeves <bmr at errorists.org>
Date:   Fri Jun 22 12:12:08 2012 +0100

    Update sos to 2.2-29.fc17
    
    This synchronises sos in F17 to the current upstream sos-2.2 branch and
    includes all patches from RHEL6 not already present.

 sos-2.2-bz704383-fix-lvm-data-collection.patch     |   22 ++
 ....2-bz709491-add-vmmemctl-to-vmware-plugin.patch |   18 +
 sos-bz582259.patch                                 |   34 ++
 sos-bz584253.patch                                 |   47 +++
 sos-bz585942.patch                                 |   59 ++++
 sos-bz600813-collect-repolist-by-default.patch     |   27 ++
 sos-bz622407-cluster-el6-fixes.patch               |  351 +++++++++++++++++++
 sos-bz622527-add-anacrontab.patch                  |   10 +
 sos-bz622528-redhat-release-6-fixes.patch          |   20 +
 sos-bz622784-filesys-no-print-regex-debug.patch    |   11 +
 sos-bz622784-parted-dumpe2fs-s390.patch            |   31 ++
 sos-bz624162-add-sssd.patch                        |   33 ++
 sos-bz659467-startup-drop-LC_ALL.patch             |   12 +
 sos-bz673244-add-infiniband-plugin.patch           |   36 ++
 sos-bz675559-devicemapper-collect-ls-tree.patch    |   11 +
 sos-bz676522-collect-etc-dhcp.patch                |    9 +
 sos-bz676656-add-iscsi-target-plugin.patch         |   33 ++
 sos-bz678665-collect-entitlement-certs.patch       |   27 ++
 sos-bz679433-filesys-add-lsblk-output.patch        |   11 +
 sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch   |   23 ++
 sos-bz683219-truncate-large-files.patch            |   26 ++
 sos-bz683404-fix-autofs-LC_ALL-usage.patch         |   12 +
 sos-bz689387-use-sha256-in-fips-mode.patch         |   82 +++++
 sos-bz691477-fix-lsusb-and-add-t-and-v.patch       |   14 +
 sos-bz691477-support-new-usbutils.patch            |   29 ++
 ...neral-collect-etc-init-and-fix-whitespace.patch |   30 ++
 sos-bz697899-collect-brctl-output.patch            |   36 ++
 sos-bz713449-dont-strip-command-output.patch       |   12 +
 sos-bz714293-collect-etc-rhsm.patch                |   11 +
 ...ipv6-neighbour-table-to-networking-plugin.patch |   11 +
 sos-bz726360-qpidd-extend.patch                    |   52 +++
 sos-bz726427-add-ethtool-acg.patch                 |   13 +
 sos-bz729455-collect-basic-cgroups-data.patch      |   31 ++
 sos-bz730641-fix-prox-net.patch                    |   12 +
 sos-bz736718-fix-hardware-plugin-paths.patch       |   12 +
 sos-bz736718-fix-hardware.py-exec.patch            |   12 +
 sos-bz739080-collect-stderr.patch                  |   21 ++
 sos-bz749262-fix-sat-proxy-package-detection.patch |   39 ++
 sos-bz749279-fix-rhn-el6-tomcat.patch              |   19 +
 sos-bz749919-add-modprobe-dot-d.patch              |   11 +
 sos-bz750607-forbid-more-pki-paths.patch           |   11 +
 sos-bz751273-fix-brctl-showstp.patch               |   12 +
 sos-bz752549-add-gluster-module.patch              |   99 ++++++
 sos-bz752549-gluster-forbid-more-pem-paths.patch   |   11 +
 sos-bz752666-cloudforms-debug.patch                |   31 ++
 sos-bz760424-gather-cpufreq-info.patch             |   11 +
 sos-bz760995-fence_virt-conf.patch                 |   11 +
 sos-bz766583-allow-nonroot-symlinks.patch          |  260 ++++++++++++++
 sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch    |   12 +
 ...bz771393-improve-report-name-sanitization.patch |   42 +++
 ...501-fix-rsyslog-collection-and-size-limit.patch |   30 ++
 sos-bz782339-unbreak-logging.patch                 |  182 ++++++++++
 sos-bz782589-fix-symlink-target-collection.patch   |   14 +
 sos-bz784061-gluster-sunrpc.patch                  |   34 ++
 sos-bz784862-collect-proc-irq.patch                |   11 +
 sos-bz784874-collect-proc-cgroups.patch            |   11 +
 sos-bz789096-kernel_realtime.patch                 |   51 +++
 sos-bz790402-obscure-anaconda-ks-passwords.patch   |   21 ++
 sos-bz810702-hw-collect-mcelog.patch               |   11 +
 sos-bz812395-ipa-updates.patch                     |  108 ++++++
 sos-bz814474-libvirt-wildcard-logs.patch           |    9 +
 sos-bz822442-collect-etc-swift-in-gluster.patch    |   13 +
 sos.spec                                           |  366 ++++++++++++++++++--
 sources                                            |    2 +-
 64 files changed, 2648 insertions(+), 25 deletions(-)
---
diff --git a/sos-2.2-bz704383-fix-lvm-data-collection.patch b/sos-2.2-bz704383-fix-lvm-data-collection.patch
new file mode 100644
index 0000000..7e868f0
--- /dev/null
+++ b/sos-2.2-bz704383-fix-lvm-data-collection.patch
@@ -0,0 +1,22 @@
+diff -up sos-2.2/sos/plugins/devicemapper.py.orig sos-2.2/sos/plugins/devicemapper.py
+--- sos-2.2/sos/plugins/devicemapper.py.orig	2011-08-13 13:45:57.508883390 +0100
++++ sos-2.2/sos/plugins/devicemapper.py	2011-08-13 13:47:19.384833623 +0100
+@@ -34,12 +34,12 @@ class devicemapper(sos.plugintools.Plugi
+         self.collectExtOutput("/sbin/dmsetup status")
+         self.collectExtOutput("/sbin/dmsetup ls --tree")
+ 
+-        self.collectExtOutput("/usr/sbin/vgdisplay -vv", root_symlink = "vgdisplay")
+-        self.collectExtOutput("/usr/sbin/vgscan -vvv")
+-        self.collectExtOutput("/usr/sbin/pvscan -v")
+-        self.collectExtOutput("/usr/sbin/lvs -a -o +devices")
+-        self.collectExtOutput("/usr/sbin/pvs -a -v")
+-        self.collectExtOutput("/usr/sbin/vgs -v")
++        self.collectExtOutput("/sbin/vgdisplay -vv", root_symlink = "vgdisplay")
++        self.collectExtOutput("/sbin/vgscan -vvv")
++        self.collectExtOutput("/sbin/pvscan -v")
++        self.collectExtOutput("/sbin/lvs -a -o +devices")
++        self.collectExtOutput("/sbin/pvs -a -v")
++        self.collectExtOutput("/sbin/vgs -v")
+         self.collectExtOutput("/sbin/mdadm -D /dev/md*")
+ 
+         self.addCopySpec("/etc/lvm")
diff --git a/sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch b/sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch
new file mode 100644
index 0000000..7cd4e6f
--- /dev/null
+++ b/sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch
@@ -0,0 +1,18 @@
+diff -up sos-2.2/sos/plugins/vmware.py.orig sos-2.2/sos/plugins/vmware.py
+--- sos-2.2/sos/plugins/vmware.py.orig	2011-08-13 12:57:46.112712491 +0100
++++ sos-2.2/sos/plugins/vmware.py	2011-08-13 13:00:22.064760692 +0100
+@@ -19,7 +19,7 @@ class vmware(sos.plugintools.PluginBase)
+     """VMWare related information
+     """
+     def checkenabled(self):
+-        if os.path.exists("/usr/bin/vmware"):
++        if os.path.exists("/usr/bin/vmware") or os.path.exists("/usr/init.d/vmware-tools"):
+             return True
+         return False
+         
+@@ -27,4 +27,5 @@ class vmware(sos.plugintools.PluginBase)
+         self.collectExtOutput("/usr/bin/vmware -v")
+         self.addCopySpec("/etc/vmware/locations")
+         self.addCopySpec("/etc/vmware/config")
++	self.addCopySpec("/proc/vmmemctl")
+         return
diff --git a/sos-bz582259.patch b/sos-bz582259.patch
new file mode 100644
index 0000000..38b006f
--- /dev/null
+++ b/sos-bz582259.patch
@@ -0,0 +1,34 @@
+diff -up sos-2.2/sos/plugins/cluster.py.bz582259 sos-2.2/sos/plugins/cluster.py
+--- sos-2.2/sos/plugins/cluster.py.bz582259	2010-07-29 11:34:08.904167916 -0400
++++ sos-2.2/sos/plugins/cluster.py	2010-07-29 11:34:23.483159810 -0400
+@@ -34,7 +34,8 @@ class cluster(sos.plugintools.PluginBase
+                               "gfs-utils", "gnbd", "kmod-gfs", "kmod-gnbd", "lvm2-cluster", "gfs2-utils" ]
+ 
+         elif rhelver == 6:
+-            self.packages = [ "luci", "ricci" ]
++            self.packages = [ "ricci", "corosync", "openais",
++                              "cman", "clusterlib", "fence-agents" ]
+ 
+         self.files = [ "/etc/cluster/cluster.conf" ]
+         return sos.plugintools.PluginBase.checkenabled(self)
+@@ -69,6 +70,10 @@ class cluster(sos.plugintools.PluginBase
+             serv_check.extend( [ "cman", "rgmanager" ] )
+             if self.has_gfs():
+                 serv_check.extend( ["gfs", "clvmd"] )
++        elif rhelver == 6:
++            serv_check.extend( [ "fenced", "corosync", "dlm_controld"] )
++            if self.has_gfs():
++                serv_check.extend( ["gfs_controld"] )
+ 
+         # check that kernel module packages are installed for
+         # running kernel version
+@@ -156,7 +161,8 @@ class cluster(sos.plugintools.PluginBase
+            self.addDiagnose("one or more nodes have manual fencing agent configured (data integrity is not guaranteed)")
+ 
+         # if fence_ilo or fence_drac, make sure acpid is not running
+-        ret, hostname, time = self.callExtProg("/bin/uname -n").split(".")[0]
++        ret, hostname, time = self.callExtProg("/bin/uname -n")
++        hostname = hostname.split(".")[0]
+         if len(xpathContext.xpathEval('/cluster/clusternodes/clusternode[@name = "%s" and /cluster/fencedevices/fencedevice[@agent="fence_rsa" or @agent="fence_drac"]/@name=fence/method/device/@name]' % hostname )):
+            ret, out, time = self.callExtProg("/sbin/service acpid status")
+            if ret == 0 or self.policy().runlevelDefault() in self.policy().runlevelByService("acpid"):
diff --git a/sos-bz584253.patch b/sos-bz584253.patch
new file mode 100644
index 0000000..228f5fc
--- /dev/null
+++ b/sos-bz584253.patch
@@ -0,0 +1,47 @@
+diff -up sos-2.2/Makefile.bz585942 sos-2.2/Makefile
+--- sos-2.2/Makefile.bz585942	2010-07-29 11:41:52.260909433 -0400
++++ sos-2.2/Makefile	2010-07-29 11:41:56.277909635 -0400
+@@ -37,6 +37,7 @@ install:
+ 	install -m644 LICENSE README TODO $(DESTDIR)/usr/share/$(NAME)/.
+ 	install -m644 $(NAME).conf $(DESTDIR)/etc/$(NAME).conf
+ 	install -m644 gpgkeys/rhsupport.pub $(DESTDIR)/usr/share/$(NAME)/.
++	sed 's/@SOSVERSION@/$(VERSION)/g'<sos/__init__.py.in >sos/__init__.py
+ 	for d in $(SUBDIRS); do make DESTDIR=`cd $(DESTDIR); pwd` -C $$d install; [ $$? = 0 ] || exit 1; done
+ 
+ $(NAME)-$(VERSION).tar.gz: clean gpgkey
+
+diff -up sos-2.2/sos/sosreport.py.bz584253 sos-2.2/sos/sosreport.py
+--- sos-2.2/sos/sosreport.py.bz584253	2010-07-29 11:43:53.718936059 -0400
++++ sos-2.2/sos/sosreport.py	2010-07-29 11:44:01.279936234 -0400
+@@ -46,8 +46,8 @@ from itertools import *
+ from collections import deque
+ 
+ from sos import _sos as _
++from sos import __version__
+ 
+-__version__ = 2.1
+ if os.path.isfile('/etc/fedora-release'):
+     __distro__ = 'Fedora'
+ else:
+@@ -655,8 +655,9 @@ No changes will be made to your system.
+                     raise
+                 else:
+                     error_log = open(logdir + "/sosreport-plugin-errors.txt", "a")
++                    etype, eval, etrace = sys.exc_info()
+                     traceback.print_exception(etype, eval, etrace, limit=2, file=sys.stdout)
+-                    error_log.write(traceback.format_exc)
++                    error_log.write(traceback.format_exc())
+                     error_log.close()
+ 
+             tmpcount += len(plug.diagnose_msgs)
+@@ -727,8 +728,9 @@ No changes will be made to your system.
+                 raise
+             else:
+                 error_log = open(logdir + "/sosreport-plugin-errors.txt", "a")
++                etype, eval, etrace = sys.exc_info()
+                 traceback.print_exception(etype, eval, etrace, limit=2, file=sys.stdout)
+-                error_log.write(traceback.format_exc)
++                error_log.write(traceback.format_exc())
+                 error_log.close()
+ 
+     print
diff --git a/sos-bz585942.patch b/sos-bz585942.patch
new file mode 100644
index 0000000..84295f0
--- /dev/null
+++ b/sos-bz585942.patch
@@ -0,0 +1,59 @@
+--- sos-2.2/sos/__init__.py	2010-03-26 16:24:08.000000000 -0400
++++ /dev/null	2010-07-28 23:09:21.745168185 -0400
+@@ -1,26 +0,0 @@
+-## Copyright 2010 Red Hat, Inc.
+-## Author: Adam Stokes <astokes at fedoraproject.org>
+-
+-## This program is free software; you can redistribute it and/or modify
+-## it under the terms of the GNU General Public License as published by
+-## the Free Software Foundation; either version 2 of the License, or
+-## (at your option) any later version.
+-
+-## This program is distributed in the hope that it will be useful,
+-## but WITHOUT ANY WARRANTY; without even the implied warranty of
+-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+-## GNU General Public License for more details.
+-
+-## You should have received a copy of the GNU General Public License
+-## along with this program; if not, write to the Free Software
+-## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+-
+-import gettext
+-
+-gettext_dir = "/usr/share/locale"
+-gettext_app = "sos"
+-
+-gettext.bindtextdomain(gettext_app, gettext_dir)
+-
+-def _sos(msg):
+-    return gettext.dgettext(gettext_app, msg)
+--- /dev/null	2010-07-28 23:09:21.745168185 -0400
++++ sos-2.2/sos/__init__.py.in	2010-07-29 12:21:12.237102733 -0400
+@@ -0,0 +1,27 @@
++## Copyright 2010 Red Hat, Inc.
++## Author: Adam Stokes <astokes at fedoraproject.org>
++
++## This program is free software; you can redistribute it and/or modify
++## it under the terms of the GNU General Public License as published by
++## the Free Software Foundation; either version 2 of the License, or
++## (at your option) any later version.
++
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++import gettext
++
++gettext_dir = "/usr/share/locale"
++gettext_app = "sos"
++
++gettext.bindtextdomain(gettext_app, gettext_dir)
++
++__version__="@SOSVERSION@"
++def _sos(msg):
++    return gettext.dgettext(gettext_app, msg)
diff --git a/sos-bz600813-collect-repolist-by-default.patch b/sos-bz600813-collect-repolist-by-default.patch
new file mode 100644
index 0000000..fd7cbb4
--- /dev/null
+++ b/sos-bz600813-collect-repolist-by-default.patch
@@ -0,0 +1,27 @@
+diff -up sos-2.2/sos/plugins/yum.py.orig sos-2.2/sos/plugins/yum.py
+--- sos-2.2/sos/plugins/yum.py.orig	2011-08-12 12:33:23.768711944 +0100
++++ sos-2.2/sos/plugins/yum.py	2011-08-12 12:54:20.547487066 +0100
+@@ -19,8 +19,8 @@ class yum(sos.plugintools.PluginBase):
+     """yum information
+     """
+ 
+-    optionList = [("yumlist", "list repositories and packages", "slow", False)]
+-    optionList = [("yumdebug", "gather yum debugging data", "slow", False)]
++    optionList = [("yumlist", "list repositories and packages", "slow", False),
++                  ("yumdebug", "gather yum debugging data", "slow", False)]
+ 
+     def checkenabled(self):
+         self.files = [ "/etc/yum.conf" ]
+@@ -43,9 +43,10 @@ class yum(sos.plugintools.PluginBase):
+         self.addCopySpec("/etc/yum.conf")
+         self.addCopySpec("/var/log/yum.log")
+ 
++        # Get a list of channels the machine is subscribed to.
++        self.collectExtOutput("yum -C repolist")
++
+         if self.getOption("yumlist"):
+-            # Get a list of channels the machine is subscribed to.
+-            self.collectExtOutput("/bin/echo \"repo list\" | /usr/bin/yum shell")
+             # List various information about available packages
+             self.collectExtOutput("/usr/bin/yum list")
+ 
diff --git a/sos-bz622407-cluster-el6-fixes.patch b/sos-bz622407-cluster-el6-fixes.patch
new file mode 100644
index 0000000..c612fa3
--- /dev/null
+++ b/sos-bz622407-cluster-el6-fixes.patch
@@ -0,0 +1,351 @@
+diff -up sos-2.2/sos/plugins/cluster.py.orig sos-2.2/sos/plugins/cluster.py
+--- sos-2.2/sos/plugins/cluster.py.orig	2011-02-04 14:50:31.510521528 -0500
++++ sos-2.2/sos/plugins/cluster.py	2011-02-04 14:51:19.485399800 -0500
+@@ -14,12 +14,12 @@
+ 
+ import sos.plugintools
+ import os, re
+-import time, libxml2
+-import glob
++from glob import glob
+ 
+ class cluster(sos.plugintools.PluginBase):
+     """cluster suite and GFS related information
+     """
++
+     optionList = [("gfslockdump", 'gather output of gfs lockdumps', 'slow', False),
+                   ('lockdump', 'gather dlm lockdumps', 'slow', False)]
+ 
+@@ -40,190 +40,9 @@ class cluster(sos.plugintools.PluginBase
+         self.files = [ "/etc/cluster/cluster.conf" ]
+         return sos.plugintools.PluginBase.checkenabled(self)
+ 
+-    def has_gfs(self):
+-        return (len(self.doRegexFindAll(r'^\S+\s+\S+\s+gfs\s+.*$', "/etc/mtab")) > 0)
+-
+-    def diagnose(self):
++    def setup(self):
+         rhelver = self.policy().rhelVersion()
+ 
+-        # check if the minimum set of packages is installed
+-        # for RHEL4 RHCS(ccs, cman, cman-kernel, magma, magma-plugins, (dlm, dlm-kernel) || gulm, perl-Net-Telnet, rgmanager, fence)
+-        # RHEL4 GFS (GFS, GFS-kernel, ccs, lvm2-cluster, fence)
+-
+-        pkgs_check = []
+-        mods_check = []
+-        serv_check = []
+-
+-        if rhelver == 4:
+-            pkgs_check.extend( [ "ccs", "cman", "magma", "magma-plugins", "perl-Net-Telnet", "rgmanager", "fence" ] )
+-            mods_check.extend( [ "cman", "dlm" ] )
+-            if self.has_gfs():
+-                mods_check.append("gfs")
+-            serv_check.extend( [ "cman", "ccsd", "rgmanager", "fenced" ] )
+-            if self.has_gfs():
+-                serv_check.extend( ["gfs", "clvmd"] )
+-        elif rhelver == 5:
+-            pkgs_check.extend ( [ "cman", "perl-Net-Telnet", "rgmanager" ] )
+-            mods_check.extend( [ "dlm" ] )
+-            if self.has_gfs():
+-                mods_check.extend( ["gfs", "gfs2"] )
+-            serv_check.extend( [ "cman", "rgmanager" ] )
+-            if self.has_gfs():
+-                serv_check.extend( ["gfs", "clvmd"] )
+-        elif rhelver == 6:
+-            serv_check.extend( [ "fenced", "corosync", "dlm_controld"] )
+-            if self.has_gfs():
+-                serv_check.extend( ["gfs_controld"] )
+-
+-        # check that kernel module packages are installed for
+-        # running kernel version
+-
+-        for modname in mods_check:
+-            found = 0
+-
+-            if self.policy().allPkgsByNameRegex( "^" + modname ):
+-                found = 1
+-
+-                ret, out, time = self.callExtProg('/sbin/modinfo -F vermagic ' + modname)
+-
+-            if ret == 0:
+-                found = 2
+-
+-            if len(self.fileGrep("^%s\s+" % modname, "/proc/modules")) > 0:
+-                found = 3
+-
+-            if found == 0:
+-                self.addDiagnose("required kernel module is missing: %s" % modname)
+-            elif found == 1:
+-                self.addDiagnose("required module is not available for current kernel: %s" % modname)
+-            elif found == 2:
+-                self.addDiagnose("required module is available but not loaded: %s" % modname)
+-
+-        for pkg in pkgs_check:
+-           if not self.isInstalled(pkg):
+-               self.addDiagnose("required package is missing: %s" % pkg)
+-
+-        if rhelver == "4":
+-           # (dlm, dlm-kernel) || gulm
+-           if not ((self.isInstalled("dlm") and self.isInstalled("dlm-kernel")) or self.isInstalled("gulm")):
+-               self.addDiagnose("required packages are missing: (dlm, dlm-kernel) || gulm")
+-
+-        # check if all the needed daemons are active at sosreport time
+-        # check if they are started at boot time in RHEL4 RHCS (cman, ccsd, rgmanager, fenced)
+-        # and GFS (gfs, ccsd, clvmd, fenced)
+-
+-        for service in serv_check:
+-           ret, out, time = self.callExtProg("/sbin/service %s status &> /dev/null" % service)
+-           if ret != 0:
+-               self.addDiagnose("service %s is not running" % service)
+-
+-           if not self.policy().runlevelDefault() in self.policy().runlevelByService(service):
+-               self.addDiagnose("service %s is not started in default runlevel" % service)
+-
+-        # FIXME: missing important cman services
+-        # FIXME: any cman service whose state != run ?
+-        # Fence Domain:    "default"                           2   2 run       -
+-
+-        # is cluster quorate
+-        if not self.is_cluster_quorate():
+-           self.addDiagnose("cluster node is not quorate")
+-
+-        # if there is no cluster.conf, diagnose() finishes here.
+-        try:
+-           os.stat("/etc/cluster/cluster.conf")
+-        except:
+-           self.addDiagnose("/etc/cluster/cluster.conf is missing")
+-           return
+-
+-        # setup XML xpath context
+-        xml = libxml2.parseFile("/etc/cluster/cluster.conf")
+-        xpathContext = xml.xpathNewContext()
+-
+-        # make sure that the node names are valid according to RFC 2181
+-        for hostname in xpathContext.xpathEval('/cluster/clusternodes/clusternode/@name'):
+-           if not re.match('^[a-zA-Z]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*$', hostname.content):
+-               self.addDiagnose("node name (%s) contains invalid characters" % hostname.content)
+-
+-        # do not rely on DNS to resolve node names, must have them in /etc/hosts
+-        for hostname in xpathContext.xpathEval('/cluster/clusternodes/clusternode/@name'):
+-           if len(self.fileGrep(r'^.*\W+%s' % hostname.content , "/etc/hosts")) == 0:
+-               self.addDiagnose("node %s is not defined in /etc/hosts" % hostname.content)
+-
+-        # check fencing (warn on no fencing)
+-        if len(xpathContext.xpathEval("/cluster/clusternodes/clusternode[not(fence/method/device)]")):
+-           if self.has_gfs():
+-               self.addDiagnose("one or more nodes have no fencing agent configured: fencing is required for GFS to work")
+-           else:
+-               self.addDiagnose("one or more nodes have no fencing agent configured: the cluster infrastructure might not work as intended")
+-
+-        # check fencing (warn on manual)
+-        if len(xpathContext.xpathEval("/cluster/clusternodes/clusternode[/cluster/fencedevices/fencedevice[@agent='fence_manual']/@name=fence/method/device/@name]")):
+-           self.addDiagnose("one or more nodes have manual fencing agent configured (data integrity is not guaranteed)")
+-
+-        # if fence_ilo or fence_drac, make sure acpid is not running
+-        ret, hostname, time = self.callExtProg("/bin/uname -n")
+-        hostname = hostname.split(".")[0]
+-        if len(xpathContext.xpathEval('/cluster/clusternodes/clusternode[@name = "%s" and /cluster/fencedevices/fencedevice[@agent="fence_rsa" or @agent="fence_drac"]/@name=fence/method/device/@name]' % hostname )):
+-           ret, out, time = self.callExtProg("/sbin/service acpid status")
+-           if ret == 0 or self.policy().runlevelDefault() in self.policy().runlevelByService("acpid"):
+-               self.addDiagnose("acpid is enabled, this may cause problems with your fencing method.")
+-
+-        # check for fs exported via nfs without nfsid attribute
+-        if len(xpathContext.xpathEval("/cluster/rm/service//fs[not(@fsid)]/nfsexport")):
+-            for xmlNode in xpathContext.xpathEval("/cluster/rm/service//fs[not(@fsid)]"):
+-                fsRefAttribute = xmlNode.xpathEval("@ref")
+-                if (len(fsRefAttribute) > 0) :
+-                    fsRefName = fsRefAttribute[0].content
+-                    if len(xpathContext.xpathEval("cluster/rm/resources/fs[@name='%s'][not(@fsid)]" % fsRefName)):
+-                        self.addDiagnose("one or more nfs export do not have a fsid attribute set.")
+-                        break
+-                    else:
+-                        self.addDiagnose("one or more nfs export do not have a fsid attribute set.")
+-
+-        # cluster.conf file version and the in-memory cluster configuration version matches
+-        status, cluster_version, time = self.callExtProg("cman_tool status | grep 'Config version'")
+-        if not status:
+-            cluster_version = cluster_version[16:]
+-        else:
+-            cluster_version = None
+-        conf_version = xpathContext.xpathEval("/cluster/@config_version")[0].content
+-
+-        if status == 0 and conf_version != cluster_version:
+-           self.addDiagnose("cluster.conf and in-memory configuration version differ (%s != %s)" % (conf_version, cluster_version) )
+-
+-        status, output, time = self.callExtProg("/usr/sbin/rg_test test /etc/cluster/cluster.conf")
+-        if output.find("Error: ") > 0:
+-           self.addDiagnose("configuration errors are present according to rg_test")
+-
+-        # make sure the first part of the lock table matches the cluster name
+-        # and that the locking protocol is sane
+-        cluster_name = xpathContext.xpathEval("/cluster/@name")[0].content
+-
+-        for fs in self.fileGrep(r'^[^#][/\w]*\W*[/\w]*\W*gfs', "/etc/fstab"):
+-           # for each gfs entry
+-           fs = fs.split()
+-           lockproto = self.get_gfs_sb_field(fs[0], "sb_lockproto")
+-           if lockproto and lockproto != self.get_locking_proto():
+-               self.addDiagnose("gfs mountpoint (%s) is using the wrong locking protocol (%s)" % (fs[0], lockproto) )
+-
+-           locktable = self.get_gfs_sb_field(fs[0], "sb_locktable")
+-           try: locktable = locktable.split(":")[0]
+-           except: continue
+-           if locktable != cluster_name:
+-               self.addDiagnose("gfs mountpoint (%s) is using the wrong locking table" % fs[0])
+-        
+-        # Check for existence of weak-updates in gfs2 prior to 2.6.18-128
+-        if rhelver == 5:
+-            ret, vermagic, time = self.callExtProg("modinfo -F vermagic gfs2")
+-            # just kernel release from vermagic line
+-            vermagic = vermagic.split()[0].lstrip('2.6.18-')
+-            vermagic = vermagic[:vermagic.find('.')]
+-            if int(vermagic) < 128:
+-                self.addDiagnose('GFS2 is being used via weak-updates, kmod-gfs2 should be uninstalled and system reboot' \
+-                                 'to allow for kernel provided gfs2 module to be used.')
+-
+-    def setup(self):
+-        self.collectExtOutput("/sbin/fdisk -l")
+         self.addCopySpec("/etc/cluster.conf")
+         self.addCopySpec("/etc/cluster.xml")
+         self.addCopySpec("/etc/cluster")
+@@ -231,79 +50,82 @@ class cluster(sos.plugintools.PluginBase
+         self.addCopySpec("/etc/sysconfig/cman")
+         self.addCopySpec("/var/lib/ricci")
+         self.addCopySpec("/var/lib/luci")
++        self.addCopySpec("/var/log/cluster")
++        self.addCopySpec("/var/log/luci/luci.log")
++
++        if self.getOption('gfslockdump'):
++          self.do_gfslockdump()
++
++        if self.getOption('lockdump'):
++          self.do_lockdump()
++
+         self.collectExtOutput("/usr/sbin/rg_test test /etc/cluster/cluster.conf")
+-        self.collectExtOutput("cman_tool status")
+-        self.collectExtOutput("cman_tool -a nodes")
+-        self.collectOutputNow("group_tool ls -g1")
+-        self.collectOutputNow("group_tool dump")
+-        self.collectExtOutput("ccs_tool lsnode")
+         self.collectExtOutput("fence_tool ls -n")
+-        self.collectExtOutput("dlm_tool ls -n")
+         self.collectExtOutput("gfs_control ls -n")
+-        self.collectExtOutput("fence_tool dump", root_symlink="fenced.txt")
+-        self.collectExtOutput("dlm_tool dump", root_symlink="dlm_controld.txt")
+-        self.collectExtOutput("gfs_control dump", root_symlink="gfs_controld.txt")
+-        self.collectExtOutput("dlm_tool log_plock", root_symlink="log_plock.txt")
+-        self.addCopySpec("/var/log/cluster")
+-        self.addCopySpec("/var/log/luci/luci.log")
+-        
+-        self.collectExtOutput("clustat")
++        self.collectExtOutput("dlm_tool log_plock")
+ 
++        self.collectExtOutput("/sbin/fdisk -l")
++        self.collectOutputNow("clustat")
++        self.collectOutputNow("group_tool dump")
++        self.collectExtOutput("cman_tool services")
++        self.collectExtOutput("cman_tool nodes")
++        self.collectExtOutput("cman_tool status")
++        self.collectExtOutput("ccs_tool lsnode")
+         self.collectExtOutput("/sbin/ipvsadm -L")
+ 
+-        if self.getOption('gfslockdump'): self.do_gfslockdump()
+-        if self.getOption('lockdump'): self.do_lockdump()
+-
+-        return
++        if rhelver is 4:
++          self.addCopySpec("/proc/cluster/*")
++          self.collectExtOutput("cman_tool nodes")
++          
++        if rhelver is not 4: # 5+
++          self.collectExtOutput("cman_tool -a nodes")
++        
++        if rhelver is 5:
++          self.collectExtOutput("group_tool -v")
++          self.collectExtOutput("group_tool dump fence")
++          self.collectExtOutput("group_tool dump gfs")
++
++        if rhelver not in (4,5): # 6+
++          self.collectExtOutput("corosync-quorumtool -l")
++          self.collectExtOutput("corosync-quorumtool -s")
++          self.collectExtOutput("corosync-cpgtool")
++          self.collectExtOutput("corosync-objctl")
++          self.collectExtOutput("group_tool ls -g1")
++          self.collectExtOutput("gfs_control ls -n")
++          self.collectExtOutput("gfs_control dump")
++          self.collectExtOutput("fence_tool dump")
++          self.collectExtOutput("dlm_tool dump")
++          self.collectExtOutput("dlm_tool ls -n")
+ 
+     def do_lockdump(self):
+-        status, output, time= self.callExtProg("cman_tool services")
+-        if status:
+-            # command somehow failed
+-            return False
+-
+         rhelver = self.policy().rhelVersion()
+ 
+-        if rhelver == "4":
+-            regex = r'^DLM Lock Space:\s*"([^"]*)".*$'
+-        elif rhelver == "5Server" or rhelver == "5Client":
+-            regex = r'^dlm\s+[^\s]+\s+([^\s]+)\s.*$'
+-
+-        reg=re.compile(regex,re.MULTILINE)
+-        for lockspace in reg.findall(output):
+-           ret, out, time = self.callExtProg("echo %s > /proc/cluster/dlm_locks" % lockspace)
+-           self.collectOutputNow("cat /proc/cluster/dlm_locks", root_symlink = "dlm_locks_%s" % lockspace)
+-
+-    def get_locking_proto(self):
+-        # FIXME: what's the best way to find out ?
+-        return "lock_dlm"
+-        return "lock_gulm"
++        if rhelver is 4:
++          status, output, time = self.callExtProg("cman_tool services")
++          for lockspace in re.compile(r'^DLM Lock Space:\s*"([^"]*)".*$', re.MULTILINE).findall(output):
++              self.callExtProg("echo %s > /proc/cluster/dlm_locks" % lockspace)
++              self.collectOutputNow("cat /proc/cluster/dlm_locks",
++                  suggest_filename = "dlm_locks_%s" % lockspace)
++
++        if rhelver is 5:
++          status, output, time = self.callExtProg("group_tool")
++          for lockspace in re.compile(r'^dlm\s+[^\s]+\s+([^\s]+)$', re.MULTILINE).findall(output):
++            self.collectExtOutput("dlm_tool lockdebug '%s'" % lockspace,
++                suggest_filename = "dlm_locks_%s" % lockspace)
++
++        else: # RHEL6 or recent Fedora
++          status, output, time = self.callExtProg("dlm_tool ls")
++          for lockspace in re.compile(r'^name\s+([^\s]+)$', re.MULTILINE).findall(output):
++            self.collectExtOutput("dlm_tool lockdebug -svw '%s'" % lockspace,
++                suggest_filename = "dlm_locks_%s" % lockspace)
+ 
+     def do_gfslockdump(self):
+         for mntpoint in self.doRegexFindAll(r'^\S+\s+([^\s]+)\s+gfs\s+.*$', "/proc/mounts"):
+-           self.collectExtOutput("/sbin/gfs_tool lockdump %s" % mntpoint, root_symlink = "gfs_lockdump_" + self.mangleCommand(mntpoint) )
+-
+-    def do_rgmanager_bt(self):
+-        # FIXME: threads backtrace via SIGALRM
+-        return
++           self.collectExtOutput("/sbin/gfs_tool lockdump %s" % mntpoint,
++               suggest_filename = "gfs_lockdump_" + self.mangleCommand(mntpoint))
+ 
+     def postproc(self):
+-        for cluster_conf in glob.glob("/etc/cluster/cluster.conf*"):
++        for cluster_conf in glob("/etc/cluster/cluster.conf*"):
+             self.doRegexSub(cluster_conf, r"(\s*\<fencedevice\s*.*\s*passwd\s*=\s*)\S+(\")", r"\1%s" %('"***"'))
+         return
+ 
+-    def is_cluster_quorate(self):
+-        ret, output, time = self.callExtProg("cman_tool status | grep '^Membership state: '")
+-        try:
+-            if output[18:] == "Cluster-Member":
+-                return True
+-        except:
+-            pass
+-        return False
+-
+-    def get_gfs_sb_field(self, device, field):
+-        for ret, line, time in self.callExtProg("/sbin/gfs_tool sb %s all" % device).split("\n"):
+-            if re.match('^\W*%s = ' % field, line):
+-                return line.split("=")[1].strip()
+-        return False
+-
diff --git a/sos-bz622527-add-anacrontab.patch b/sos-bz622527-add-anacrontab.patch
new file mode 100644
index 0000000..24602e9
--- /dev/null
+++ b/sos-bz622527-add-anacrontab.patch
@@ -0,0 +1,10 @@
+--- sos-2.2/sos/plugins/system.py	
++++ sos-2.2/sos/plugins/system.py	
+@@ -21,6 +21,7 @@ class system(sos.plugintools.PluginBase)
+         self.addCopySpec("/proc/sys")
+         self.addCopySpec("/etc/sysctl.conf")
+         self.addCopySpec("/etc/cron*")
++        self.addCopySpec("/etc/anacrontab")
+         self.addCopySpec("/var/spool/cron*")
+         self.addCopySpec("/var/log/cron*")
+         self.addCopySpec("/etc/syslog.conf")
diff --git a/sos-bz622528-redhat-release-6-fixes.patch b/sos-bz622528-redhat-release-6-fixes.patch
new file mode 100644
index 0000000..0ade2f3
--- /dev/null
+++ b/sos-bz622528-redhat-release-6-fixes.patch
@@ -0,0 +1,20 @@
+diff -up sos-2.2/sos/policyredhat.py.orig sos-2.2/sos/policyredhat.py
+--- sos-2.2/sos/policyredhat.py.orig	2011-02-03 20:24:14.000000000 +0000
++++ sos-2.2/sos/policyredhat.py	2011-02-03 20:24:51.000000000 +0000
+@@ -153,12 +153,14 @@ class SosPolicy:
+ 
+     def rhelVersion(self):
+         try:
+-            pkgname = self.pkgByName("redhat-release")["version"]
++            pkg = self.pkgByName("redhat-release") or \
++            self.allPkgsByNameRegex("redhat-release-.*")[-1]
++            pkgname = pkg["version"]
+             if pkgname[0] == "4":
+                 return 4
+             elif pkgname in [ "5Server", "5Client" ]:
+                 return 5
+-            elif pkgname == "6":
++            elif pkgname[0] == "6":
+                 return 6
+         except: pass
+         return False
diff --git a/sos-bz622784-filesys-no-print-regex-debug.patch b/sos-bz622784-filesys-no-print-regex-debug.patch
new file mode 100644
index 0000000..8ba63e9
--- /dev/null
+++ b/sos-bz622784-filesys-no-print-regex-debug.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/filesys.py.orig sos-2.2/sos/plugins/filesys.py
+--- sos-2.2/sos/plugins/filesys.py.orig	2011-04-05 16:40:02.000000000 +0100
++++ sos-2.2/sos/plugins/filesys.py	2011-04-05 16:40:14.000000000 +0100
+@@ -62,7 +62,6 @@ class filesys(sos.plugintools.PluginBase
+         else:
+             part_in_disk = re.compile("^/dev/[a-z]+$")
+             for dev in partlist:
+-                print part_in_disk.match(dev)
+                 if bool(part_in_disk.match(dev)):
+                     devlist.append(dev)
+ 
diff --git a/sos-bz622784-parted-dumpe2fs-s390.patch b/sos-bz622784-parted-dumpe2fs-s390.patch
new file mode 100644
index 0000000..b0435b1
--- /dev/null
+++ b/sos-bz622784-parted-dumpe2fs-s390.patch
@@ -0,0 +1,31 @@
+diff -up sos-2.2/sos/plugins/filesys.py.orig sos-2.2/sos/plugins/filesys.py
+--- sos-2.2/sos/plugins/filesys.py.orig	2011-02-04 17:02:54.632926253 +0000
++++ sos-2.2/sos/plugins/filesys.py	2011-02-04 17:02:58.463947027 +0000
+@@ -49,12 +49,22 @@ class filesys(sos.plugintools.PluginBase
+                 partlist.append('/dev/' + line.split()[-1])
+         except IOError:
+             exit(1)
+-        for dev in partlist:
+-            ret, hdparm, time = self.callExtProg('/sbin/hdparm -g %s' %(dev))
+-            if(ret == 0):
+-                start_geo = hdparm.strip().split("\n")[-1].strip().split()[-1]
+-                if(start_geo == "0"):
++        if os.path.exists("/sbin/hdparm"):
++            for dev in partlist:
++                ret, hdparm, time = self.callExtProg('/sbin/hdparm -g %s' %(dev))
++                if(ret == 0):
++                    start_geo = hdparm.strip().split("\n")[-1].strip().split()[-1]
++                    if(start_geo == "0"):
++      	                devlist.append(dev)
++            # Cheaper heuristic as RHEL* does not ship hdparm for S390(x)
++            # Skips least dm-.* correctly
++        else:
++            part_in_disk = re.compile("^/dev/[a-z]+$")
++            for dev in partlist:
++                print part_in_disk.match(dev)
++                if bool(part_in_disk.match(dev)):
+                     devlist.append(dev)
++
+         for i in devlist: 
+             self.collectExtOutput("/sbin/parted -s %s print" % (i))
+ 
diff --git a/sos-bz624162-add-sssd.patch b/sos-bz624162-add-sssd.patch
new file mode 100644
index 0000000..b9ed363
--- /dev/null
+++ b/sos-bz624162-add-sssd.patch
@@ -0,0 +1,33 @@
+diff -up sos-2.2/sos/plugins/sssd.py.orig sos-2.2/sos/plugins/sssd.py
+--- sos-2.2/sos/plugins/sssd.py.orig	2011-02-24 19:26:40.000000000 +0000
++++ sos-2.2/sos/plugins/sssd.py	2011-02-24 19:27:19.000000000 +0000
+@@ -0,0 +1,29 @@
++## Copyright (C) 2007 Red Hat, Inc., Pierre Carrier <pcarrier at redhat.com>
++
++### This program is free software; you can redistribute it and/or modify
++## it under the terms of the GNU General Public License as published by
++## the Free Software Foundation; either version 2 of the License, or
++## (at your option) any later version.
++
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++import sos.plugintools
++import os
++
++class sssd(sos.plugintools.PluginBase):
++    """sssd-related Diagnostic Information
++    """
++
++    def checkenabled(self):
++       return self.isInstalled("sssd")
++
++    def setup(self):
++        self.addCopySpec("/etc/sssd")
++        self.addCopySpec("/var/log/sssd/*")
diff --git a/sos-bz659467-startup-drop-LC_ALL.patch b/sos-bz659467-startup-drop-LC_ALL.patch
new file mode 100644
index 0000000..00e69fe
--- /dev/null
+++ b/sos-bz659467-startup-drop-LC_ALL.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/plugins/startup.py.orig sos-2.2/sos/plugins/startup.py
+--- sos-2.2/sos/plugins/startup.py.orig	2011-02-25 11:55:10.000000000 +0000
++++ sos-2.2/sos/plugins/startup.py	2011-02-25 11:55:24.000000000 +0000
+@@ -22,7 +22,7 @@ class startup(sos.plugintools.PluginBase
+     def setup(self):
+         self.addCopySpec("/etc/rc.d")
+         
+-        self.collectExtOutput("LC_ALL=C /sbin/chkconfig --list", root_symlink = "chkconfig")
++        self.collectExtOutput("/sbin/chkconfig --list", root_symlink = "chkconfig")
+         if self.getOption('servicestatus'):
+             self.collectExtOutput("/sbin/service --status-all")
+         self.collectExtOutput("/sbin/runlevel")
diff --git a/sos-bz673244-add-infiniband-plugin.patch b/sos-bz673244-add-infiniband-plugin.patch
new file mode 100644
index 0000000..92146f0
--- /dev/null
+++ b/sos-bz673244-add-infiniband-plugin.patch
@@ -0,0 +1,36 @@
+diff -up sos-2.2/sos/plugins/infiniband.py.orig sos-2.2/sos/plugins/infiniband.py
+--- sos-2.2/sos/plugins/infiniband.py.orig        2011-08-12 20:51:28.450712897 +0100
++++ sos-2.2/sos/plugins/infiniband.py        2011-08-12 21:02:17.143789131 +0100
+@@ -0,0 +1,32 @@
++## Copyright (C) 2011 Red Hat
++
++### This program is free software; you can redistribute it and/or modify
++## it under the terms of the GNU General Public License as published by
++## the Free Software Foundation; either version 2 of the License, or
++## (at your option) any later version.
++
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++import sos.plugintools
++
++class infiniband(sos.plugintools.PluginBase):
++    """Infiniband related information
++    """
++
++    def checkenabled(self):
++         if self.cInfo["policy"].pkgByName("libibverbs-utils"):
++             return True
++         return False
++
++    def setup(self):
++        self.collectExtOutput("/usr/bin/ibv_devices")
++        self.collectExtOutput("/usr/bin/ibv_devinfo")
++        return
++
diff --git a/sos-bz675559-devicemapper-collect-ls-tree.patch b/sos-bz675559-devicemapper-collect-ls-tree.patch
new file mode 100644
index 0000000..d763ea3
--- /dev/null
+++ b/sos-bz675559-devicemapper-collect-ls-tree.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/devicemapper.py.orig sos-2.2/sos/plugins/devicemapper.py
+--- sos-2.2/sos/plugins/devicemapper.py.orig	2011-02-25 12:02:20.000000000 +0000
++++ sos-2.2/sos/plugins/devicemapper.py	2011-02-25 12:02:38.000000000 +0000
+@@ -32,6 +32,7 @@ class devicemapper(sos.plugintools.Plugi
+         self.collectExtOutput("/sbin/dmsetup info -c")
+         self.collectExtOutput("/sbin/dmsetup table")
+         self.collectExtOutput("/sbin/dmsetup status")
++        self.collectExtOutput("/sbin/dmsetup ls --tree")
+ 
+         self.collectExtOutput("/usr/sbin/vgdisplay -vv", root_symlink = "vgdisplay")
+         self.collectExtOutput("/usr/sbin/vgscan -vvv")
diff --git a/sos-bz676522-collect-etc-dhcp.patch b/sos-bz676522-collect-etc-dhcp.patch
new file mode 100644
index 0000000..660cb5f
--- /dev/null
+++ b/sos-bz676522-collect-etc-dhcp.patch
@@ -0,0 +1,9 @@
+diff -up sos-2.2/sos/plugins/dhcp.py.orig sos-2.2/sos/plugins/dhcp.py
+--- sos-2.2/sos/plugins/dhcp.py.orig	2011-02-25 11:59:12.000000000 +0000
++++ sos-2.2/sos/plugins/dhcp.py	2011-02-25 11:59:57.000000000 +0000
+@@ -26,4 +26,5 @@ class dhcp(sos.plugintools.PluginBase):
+         self.addCopySpec("/etc/sysconfig/dhcrelay")
+         self.addCopySpec("/etc/sysconfig/dhcpd")
+         self.addCopySpec("/etc/dhcpd.conf")
++        self.addCopySpec("/etc/dhcp")
+         return
diff --git a/sos-bz676656-add-iscsi-target-plugin.patch b/sos-bz676656-add-iscsi-target-plugin.patch
new file mode 100644
index 0000000..bccab85
--- /dev/null
+++ b/sos-bz676656-add-iscsi-target-plugin.patch
@@ -0,0 +1,33 @@
+diff -up sos-2.2/sos/plugins/iscsitarget.py.orig sos-2.2/sos/plugins/iscsitarget.py
+--- sos-2.2/sos/plugins/iscsitarget.py.orig	2011-08-12 21:31:06.822774059 +0100
++++ sos-2.2/sos/plugins/iscsitarget.py	2011-08-12 21:17:01.115712664 +0100
+@@ -0,0 +1,29 @@
++## Copyright (C) 2007-2010 Red Hat, Inc., Ben Turner <bturner at redhat.com>
++
++### This program is free software; you can redistribute it and/or modify
++## it under the terms of the GNU General Public License as published by
++## the Free Software Foundation; either version 2 of the License, or
++## (at your option) any later version.
++
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++import sos.plugintools
++
++class iscsitarget(sos.plugintools.PluginBase):
++    """iscsi-target related information
++    """
++
++    def checkenabled(self):
++        self.packages = [ "scsi-target-utils" ]
++        return sos.plugintools.PluginBase.checkenabled(self)
++
++    def setup(self):
++        self.addCopySpec("/etc/tgt/targets.conf")
++        self.collectExtOutput("tgtadm --lld iscsi --op show --mode target")
diff --git a/sos-bz678665-collect-entitlement-certs.patch b/sos-bz678665-collect-entitlement-certs.patch
new file mode 100644
index 0000000..9f40eee
--- /dev/null
+++ b/sos-bz678665-collect-entitlement-certs.patch
@@ -0,0 +1,27 @@
+diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py
+--- sos-2.2/sos/plugins/general.py.orig	2011-02-24 19:41:50.000000000 +0000
++++ sos-2.2/sos/plugins/general.py	2011-02-24 19:43:02.000000000 +0000
+@@ -25,6 +25,7 @@ class general(sos.plugintools.PluginBase
+                   ("all_logs", "collect all log files defined in syslog.conf", "", False)]
+ 
+     def setup(self):
++        rhelver = self.policy().rhelVersion()
+         self.addCopySpec("/etc/redhat-release")
+         self.addCopySpec("/etc/fedora-release")
+         self.addCopySpec("/etc/inittab")
+@@ -49,8 +50,14 @@ class general(sos.plugintools.PluginBase
+         self.collectExtOutput("/usr/sbin/alternatives --display java", root_symlink = "java")
+         self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java")
+ 
++	# new entitlement certificate support
++	if rhelver == 6 or rhelver == 5:
++		self.addCopySpec("/etc/pki/product/*.pem")
++		self.addCopySpec("/etc/pki/consumer/cert.pem")
++		self.addCopySpec("/etc/pki/entitlement/*.pem")
++		self.addForbiddenPath("/etc/pki/entitlement/key.pem")
++
+         if self.getOption('all_logs'):
+-            rhelver = self.policy().rhelVersion()
+             if rhelver == 5 or rhelver == 4:
+                 logs=self.doRegexFindAll(r"^\S+\s+(\/.*log.*)\s+$", "/etc/syslog.conf")
+                 for i in logs:
diff --git a/sos-bz679433-filesys-add-lsblk-output.patch b/sos-bz679433-filesys-add-lsblk-output.patch
new file mode 100644
index 0000000..52109e1
--- /dev/null
+++ b/sos-bz679433-filesys-add-lsblk-output.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/filesys.py.orig sos-2.2/sos/plugins/filesys.py
+--- sos-2.2/sos/plugins/filesys.py.orig	2011-02-25 12:21:24.000000000 +0000
++++ sos-2.2/sos/plugins/filesys.py	2011-02-25 12:38:14.000000000 +0000
+@@ -37,6 +37,7 @@ class filesys(sos.plugintools.PluginBase
+         if self.getOption('lsof'):
+             self.collectExtOutput("/usr/sbin/lsof -b +M -n -l -P", root_symlink = "lsof")
+         self.collectExtOutput("/sbin/blkid -c /dev/null")
++        self.collectExtOutput("/bin/lsblk")
+         
+         part_titlep = re.compile("^major")
+         blankp = re.compile("^$")
diff --git a/sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch b/sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch
new file mode 100644
index 0000000..035c747
--- /dev/null
+++ b/sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch
@@ -0,0 +1,23 @@
+diff -up sos-2.2/sos/plugins/ldap.py.orig sos-2.2/sos/plugins/ldap.py
+--- sos-2.2/sos/plugins/ldap.py.orig        2011-08-12 21:38:49.342684154 +0100
++++ sos-2.2/sos/plugins/ldap.py        2011-08-12 21:48:37.714760213 +0100
+@@ -19,7 +19,7 @@ class ldap(sos.plugintools.PluginBase):
+     """LDAP related information
+     """
+     def checkenabled(self):
+-        self.packages = [ "openldap" ]
++        self.packages = [ "openldap", "nss-pam-ldapd" ]
+         self.files = [ "/etc/openldap/ldap.conf" ]
+         return sos.plugintools.PluginBase.checkenabled(self)
+ 
+@@ -43,8 +43,10 @@ class ldap(sos.plugintools.PluginBase):
+ 
+     def setup(self):
+         self.addCopySpec("/etc/ldap.conf")
++        self.addCopySpec("/etc/nslcd.conf")
+         self.addCopySpec("/etc/openldap")
+ 
+     def postproc(self):
+         self.doRegexSub("/etc/ldap.conf", r"(\s*bindpw\s*)\S+", r"\1***")
++        self.doRegexSub("/etc/nslcd.conf", r"(\s*bindpw\s*)\S+", r"\1***")
+         return
diff --git a/sos-bz683219-truncate-large-files.patch b/sos-bz683219-truncate-large-files.patch
new file mode 100644
index 0000000..498978a
--- /dev/null
+++ b/sos-bz683219-truncate-large-files.patch
@@ -0,0 +1,26 @@
+diff -up sos-2.2/sos/plugintools.py.orig sos-2.2/sos/plugintools.py
+--- sos-2.2/sos/plugintools.py.orig	2011-08-15 01:33:35.900753944 +0100
++++ sos-2.2/sos/plugintools.py	2011-08-15 01:33:43.762754017 +0100
+@@ -286,11 +286,19 @@ class PluginBase:
+         files = glob.glob(fname)
+         files.sort()
+         cursize = 0
++        limit_reached = False
++        sizelimit *= 1024 * 1024 # in MB
+         for flog in files:
+             cursize += os.stat(flog)[ST_SIZE]
+-            if sizelimit and (cursize / 1024 / 1024) > sizelimit:
+-               break
+-            self.addCopySpec(flog)
++            if sizelimit and cursize > sizelimit:
++                limit_reached = True
++            else:
++                self.addCopySpec(flog)
++            # Truncate the first file (others would likely be compressed),
++            # ensuring we get at least some logs
++            if flog == files[0] and limit_reached:
++                self.collectExtOutput("tail -c%d %s" % (sizelimit, flog),
++                    "tail_" + os.path.basename(flog))
+ 
+     def addCopySpec(self, copyspec):
+         """ Add a file specification (can be file, dir,or shell glob) to be
diff --git a/sos-bz683404-fix-autofs-LC_ALL-usage.patch b/sos-bz683404-fix-autofs-LC_ALL-usage.patch
new file mode 100644
index 0000000..7656e0d
--- /dev/null
+++ b/sos-bz683404-fix-autofs-LC_ALL-usage.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/plugins/autofs.py.orig sos-2.2/sos/plugins/autofs.py
+--- sos-2.2/sos/plugins/autofs.py.orig	2011-08-12 21:54:09.405697055 +0100
++++ sos-2.2/sos/plugins/autofs.py	2011-08-12 21:54:21.403820531 +0100
+@@ -54,7 +54,7 @@ class autofs(sos.plugintools.PluginBase)
+         self.collectExtOutput("ps auxwww | grep automount")
+         self.collectExtOutput("/bin/egrep -e 'automount|pid.*nfs' /proc/mounts")
+         self.collectExtOutput("/bin/mount | egrep -e 'automount|pid.*nfs'")
+-        self.collectExtOutput("LC_ALL=C /sbin/chkconfig --list autofs")
++        self.collectExtOutput("/sbin/chkconfig --list autofs")
+         if self.checkdebug():
+             self.addCopySpec(self.getdaemondebug())
+         return
diff --git a/sos-bz689387-use-sha256-in-fips-mode.patch b/sos-bz689387-use-sha256-in-fips-mode.patch
new file mode 100644
index 0000000..ba140d8
--- /dev/null
+++ b/sos-bz689387-use-sha256-in-fips-mode.patch
@@ -0,0 +1,82 @@
+diff -up sos-2.2/sos/policyredhat.py.orig sos-2.2/sos/policyredhat.py
+--- sos-2.2/sos/policyredhat.py.orig	2011-04-07 11:57:19.000000000 +0100
++++ sos-2.2/sos/policyredhat.py	2011-04-07 11:59:55.000000000 +0100
+@@ -24,10 +24,7 @@ from tempfile import gettempdir
+ from sos.helpers import *
+ import random
+ import re
+-try:
+-    from hashlib import md5
+-except ImportError:
+-    from md5 import md5
++import hashlib
+ import rpm
+ import time
+ from subprocess import Popen, PIPE
+@@ -68,7 +65,7 @@ class SosPolicy:
+     def __init__(self):
+         self.report_file = ""
+         self.report_file_ext = ""
+-        self.report_md5 = ""
++        self.report_checksum = ""
+         self.reportName = ""
+         self.ticketNumber = ""
+ 
+@@ -306,31 +303,49 @@ class SosPolicy:
+            print _("There was a problem encrypting your report.")
+            sys.exit(1)
+ 
++    def getChecksumAlgorithm(self):
++        checksum = "md5"
++        # this is the canonical check for FIPS
++        try:
++            fp = open("/proc/sys/crypto/fips_enabled", "r")
++        except:
++            return checksum
++        fips_enabled = fp.read()
++        if fips_enabled.find("1") >= 0:
++             checksum = "sha256"
++        fp.close()
++        return checksum
++        
+     def displayResults(self):
+         # make sure a report exists
+         if not self.report_file:
+            return False
+ 
+-        # calculate md5
++        # determine checksum algo and instantiate
++        checksum = self.getChecksumAlgorithm()
++        digest = hashlib.new(checksum)
++
++        # calculate checksum
+         fp = open(self.report_file, "r")
+-        self.report_md5 = md5(fp.read()).hexdigest()
++        digest.update(fp.read())
+         fp.close()
++        self.report_checksum = digest.hexdigest()
+ 
+         self.renameResults("sosreport-%s-%s-%s.%s" % (self.reportName, 
+                                                       time.strftime("%Y%m%d%H%M%S"),
+-                                                      self.report_md5[-4:], 
++                                                      self.report_checksum[-4:], 
+                                                       self.report_file_ext))
+ 
+-        # store md5 into file
+-        fp = open(self.report_file + ".md5", "w")
+-        fp.write(self.report_md5 + "\n")
++        # store checksum into file
++        fp = open(self.report_file + "." + checksum, "w")
++        fp.write(self.report_checksum + "\n")
+         fp.close()
+ 
+         print
+         print _("Your sosreport has been generated and saved in:\n  %s") % self.report_file
+         print
+-        if len(self.report_md5):
+-            print _("The md5sum is: ") + self.report_md5
++        if len(self.report_checksum):
++            print _("The " + checksum + "sum is: ") + self.report_checksum
+             print
+         print _("Please send this file to your support representative.")
+         print
diff --git a/sos-bz691477-fix-lsusb-and-add-t-and-v.patch b/sos-bz691477-fix-lsusb-and-add-t-and-v.patch
new file mode 100644
index 0000000..9fd8828
--- /dev/null
+++ b/sos-bz691477-fix-lsusb-and-add-t-and-v.patch
@@ -0,0 +1,14 @@
+diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py
+--- sos-2.2/sos/plugins/hardware.py.orig	2011-08-12 22:00:08.588682606 +0100
++++ sos-2.2/sos/plugins/hardware.py	2011-08-12 22:12:23.255788988 +0100
+@@ -44,7 +44,9 @@ class hardware(sos.plugintools.PluginBas
+         if self.policy().getArch().endswith("386"):
+             self.collectExtOutput("/usr/sbin/x86info -a")
+ 
+-        self.collectExtOutput("/sbin/lsusb")
++        self.collectExtOutput("/usr/sbin/lsusb")
++        self.collectExtOutput("/usr/sbin/lsusb -v")
++        self.collectExtOutput("/usr/sbin/lsusb -t 2>&1", suggest_filename = "lsusb_-t")
+         self.collectExtOutput("/usr/bin/lshal")
+         self.collectExtOutput("/usr/bin/systool -c fc_host -v")
+         self.collectExtOutput("/usr/bin/systool -c scsi_host -v")
diff --git a/sos-bz691477-support-new-usbutils.patch b/sos-bz691477-support-new-usbutils.patch
new file mode 100644
index 0000000..e40a68d
--- /dev/null
+++ b/sos-bz691477-support-new-usbutils.patch
@@ -0,0 +1,29 @@
+diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py
+--- sos-2.2/sos/plugins/hardware.py.orig	2011-09-23 16:00:34.000000000 +0100
++++ sos-2.2/sos/plugins/hardware.py	2011-09-23 16:00:55.000000000 +0100
+@@ -13,6 +13,7 @@
+ ## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ 
+ import sos.plugintools
++import os
+ 
+ class hardware(sos.plugintools.PluginBase):
+     """hardware related information
+@@ -44,9 +45,14 @@ class hardware(sos.plugintools.PluginBas
+         if self.policy().getArch().endswith("386"):
+             self.collectExtOutput("/usr/sbin/x86info -a")
+ 
+-        self.collectExtOutput("/usr/sbin/lsusb")
+-        self.collectExtOutput("/usr/sbin/lsusb -v")
+-        self.collectExtOutput("/usr/sbin/lsusb -t 2>&1", suggest_filename = "lsusb_-t")
++        if os.path.exists("/usr/bin/lsusb"):
++            self.collectExtOutput("/usr/bin/lsusb")
++            self.collectExtOutput("/usr/bin/lsusb -v")
++            self.collectExtOutput("/usr/bin/lsusb -t 2>&1", suggest_filename = "lsusb_-t")
++        elif os.path.exists("/sbin/lsusb"):  
++            self.collectExtOutput("/sbin/lsusb")
++            self.collectExtOutput("/sbin/lsusb -v")
++            self.collectExtOutput("/sbin/lsusb -t 2>&1", suggest_filename = "lsusb_-t")
+         self.collectExtOutput("/usr/bin/lshal")
+         self.collectExtOutput("/usr/bin/systool -c fc_host -v")
+         self.collectExtOutput("/usr/bin/systool -c scsi_host -v")
diff --git a/sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch b/sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch
new file mode 100644
index 0000000..4f32dec
--- /dev/null
+++ b/sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch
@@ -0,0 +1,30 @@
+diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py
+--- sos-2.2/sos/plugins/general.py.orig	2011-08-14 12:09:59.224806981 +0100
++++ sos-2.2/sos/plugins/general.py	2011-08-14 12:12:37.567686798 +0100
+@@ -29,6 +29,7 @@ class general(sos.plugintools.PluginBase
+         self.addCopySpec("/etc/redhat-release")
+         self.addCopySpec("/etc/fedora-release")
+         self.addCopySpec("/etc/inittab")
++        self.addCopySpec("/etc/init")
+         self.addCopySpec("/etc/sos.conf")
+         self.addCopySpec("/etc/sysconfig")
+         self.addCopySpec("/proc/stat")
+@@ -50,12 +51,12 @@ class general(sos.plugintools.PluginBase
+         self.collectExtOutput("/usr/sbin/alternatives --display java", root_symlink = "java")
+         self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java")
+ 
+-	# new entitlement certificate support
+-	if rhelver == 6 or rhelver == 5:
+-		self.addCopySpec("/etc/pki/product/*.pem")
+-		self.addCopySpec("/etc/pki/consumer/cert.pem")
+-		self.addCopySpec("/etc/pki/entitlement/*.pem")
+-		self.addForbiddenPath("/etc/pki/entitlement/key.pem")
++        # new entitlement certificate support
++        if rhelver == 6 or rhelver == 5:
++                self.addCopySpec("/etc/pki/product/*.pem")
++                self.addCopySpec("/etc/pki/consumer/cert.pem")
++                self.addCopySpec("/etc/pki/entitlement/*.pem")
++                self.addForbiddenPath("/etc/pki/entitlement/key.pem")
+ 
+         if self.getOption('all_logs'):
+             if rhelver == 5 or rhelver == 4:
diff --git a/sos-bz697899-collect-brctl-output.patch b/sos-bz697899-collect-brctl-output.patch
new file mode 100644
index 0000000..b839a3c
--- /dev/null
+++ b/sos-bz697899-collect-brctl-output.patch
@@ -0,0 +1,36 @@
+diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py
+--- sos-2.2/sos/plugins/networking.py.orig        2011-08-15 01:44:30.290816400 +0100
++++ sos-2.2/sos/plugins/networking.py        2011-08-15 02:03:36.814212707 +0100
+@@ -21,6 +21,20 @@ class networking(sos.plugintools.PluginB
+     """
+     optionList = [("traceroute", "collects a traceroute to rhn.redhat.com", "slow", False)]
+ 
++    def get_bridge_name(self,brctlFile):
++        """Return a dictionary for which key are bridge name according to the
++        output of brctl show stored in brctlFile.
++        """
++        out=[]
++        fp = open(brctlFile, 'r')
++        for line in fp.readlines():
++            if line.startswith("bridge name") or line.isspace():
++                continue
++            brName, brRest = line.split(None, 1)
++            out.append(brName)
++        fp.close()
++        return out
++
+     def get_interface_name(self,ifconfigFile):
+         """Return a dictionary for which key are interface name according to the
+         output of ifconifg-a stored in ifconfigFile.
+@@ -77,6 +91,10 @@ class networking(sos.plugintools.PluginB
+                 self.collectExtOutput("/sbin/ethtool -g "+eth)
+         if self.getOption("traceroute"):
+             self.collectExtOutput("/bin/traceroute -n rhn.redhat.com")
+-            
++        if os.path.exists("/usr/sbin/brctl"):
++            brctlFile=self.collectOutputNow("/usr/sbin/brctl show")
++            if brctlFile:
++                for brName in self.get_bridge_name(brctlFile):
++                    self.collectExtOutput("/usr/sbin/brctl showstp "+brName)
+         return
+ 
diff --git a/sos-bz713449-dont-strip-command-output.patch b/sos-bz713449-dont-strip-command-output.patch
new file mode 100644
index 0000000..2b2f346
--- /dev/null
+++ b/sos-bz713449-dont-strip-command-output.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/helpers.py.orig sos-2.2/sos/helpers.py
+--- sos-2.2/sos/helpers.py.orig	2011-08-14 13:15:07.018884665 +0100
++++ sos-2.2/sos/helpers.py	2011-08-14 13:15:21.880027577 +0100
+@@ -55,7 +55,7 @@ def sosGetCommandOutput(command, timeout
+ 
+     p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, bufsize=-1)
+     stdout, stderr = p.communicate()
+-    return (p.returncode, stdout.strip(), 0)
++    return (p.returncode, stdout, 0)
+ 
+ def commonPrefix(l1, l2, common = []):
+     ''' return a list of common elements at the start of all sequences,
diff --git a/sos-bz714293-collect-etc-rhsm.patch b/sos-bz714293-collect-etc-rhsm.patch
new file mode 100644
index 0000000..4537ee8
--- /dev/null
+++ b/sos-bz714293-collect-etc-rhsm.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py
+--- sos-2.2/sos/plugins/general.py.orig	2011-08-14 23:16:32.000000000 +0100
++++ sos-2.2/sos/plugins/general.py	2011-08-14 23:16:56.000000000 +0100
+@@ -56,6 +56,7 @@ class general(sos.plugintools.PluginBase
+                 self.addCopySpec("/etc/pki/product/*.pem")
+                 self.addCopySpec("/etc/pki/consumer/cert.pem")
+                 self.addCopySpec("/etc/pki/entitlement/*.pem")
++                self.addCopySpec("/etc/rhsm/")
+                 self.addForbiddenPath("/etc/pki/entitlement/key.pem")
+ 
+         if self.getOption('all_logs'):
diff --git a/sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch b/sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch
new file mode 100644
index 0000000..d948a26
--- /dev/null
+++ b/sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py
+--- sos-2.2/sos/plugins/networking.py.orig	2011-08-14 12:18:17.784697343 +0100
++++ sos-2.2/sos/plugins/networking.py	2011-08-14 12:18:37.709228057 +0100
+@@ -66,6 +66,7 @@ class networking(sos.plugintools.PluginB
+         self.collectExtOutput("/sbin/ifenslave -a")
+         self.collectExtOutput("/sbin/ip mroute show")
+         self.collectExtOutput("/sbin/ip maddr show")
++        self.collectExtOutput("/sbin/ip neigh show")
+         if ifconfigFile:
+             for eth in self.get_interface_name(ifconfigFile):
+                 self.collectExtOutput("/sbin/ethtool "+eth)
diff --git a/sos-bz726360-qpidd-extend.patch b/sos-bz726360-qpidd-extend.patch
new file mode 100644
index 0000000..80dd372
--- /dev/null
+++ b/sos-bz726360-qpidd-extend.patch
@@ -0,0 +1,52 @@
+diff -up sos-2.2/sos/plugins/qpidd.py.orig sos-2.2/sos/plugins/qpidd.py
+--- sos-2.2/sos/plugins/qpidd.py.orig        2011-08-13 12:00:24.054712827 +0100
++++ sos-2.2/sos/plugins/qpidd.py        2011-08-13 12:00:26.419712889 +0100
+@@ -19,25 +19,36 @@ class qpidd(sos.plugintools.PluginBase):
+     """
+     def checkenabled(self):
+         """ checks if mrg enabled """
+-        if self.cInfo["policy"].pkgByName("qpidd") and \
+-        self.cInfo["policy"].pkgByName("python-qpid"):
++        if self.cInfo["policy"].pkgByName("qpid-cpp-server") and \
++        self.cInfo["policy"].pkgByName("qpid-tools"):
+             return True
+         return False
+ 
+     def setup(self):
+         """ performs data collection for mrg """
+         self.addCopySpec("/etc/qpidd.conf")
+-        self.collectExtOutput("/usr/bin/qpid-stat -q")
++        self.addCopySpec("/etc/sasl2/qpidd.conf")
++        self.addCopySpec("/etc/qpid/qpidc.conf")
++        self.addCopySpec("/etc/sesame/sesame.conf")
++        self.addCopySpec("/etc/cumin/cumin.conf")
++        self.addCopySpec("/etc/corosync/corosync.conf")
++        self.addCopySpec("/var/lib/sesame")
++        self.addCopySpec("/var/log/qpidd.log")
++        self.addCopySpec("/var/log/sesame")
++        self.addCopySpec("/var/log/cumin")
++        self.addCopySpec("/var/log/cluster")
++        
++        self.collectExtOutput("/usr/bin/qpid-config queues")
++        self.collectExtOutput("/usr/bin/qpid-config exchanges")
++        self.collectExtOutput("/usr/bin/qpid-config exchanges -b")
++        self.collectExtOutput("/usr/bin/qpid-stat -b")
+         self.collectExtOutput("/usr/bin/qpid-stat -e")
+-        self.collectExtOutput("/usr/bin/qpid-stat -b")
+-        self.addCopySpec("/var/lib/qpid/syslog")
+-        self.collectExtOutput("/usr/bin/qpid-config")
+-        self.collectExtOutput("/usr/bin/qpid-config -b exchanges")
+-        self.collectExtOutput("/usr/bin/qpid-config -b queues")
++        self.collectExtOutput("/usr/bin/qpid-stat -q")
++        self.collectExtOutput("/usr/bin/qpid-stat -u")
+         self.collectExtOutput("/usr/bin/qpid-stat -c")
+-        self.collectExtOutput("/usr/bin/qpid-route link list")
+         self.collectExtOutput("/usr/bin/qpid-route route list")
+-        self.addCopySpec("/etc/ais/openais.conf")
++        self.collectExtOutput("/usr/bin/qpid-route link list")
++        self.collectExtOutput("/usr/bin/qpid-cluster")
++        self.collectExtOutput("/usr/bin/qpid-cluster -c")
+         self.collectExtOutput("ls -lR /var/lib/qpidd")
+-        self.addCopySpec("/var/log/cumin.log")
+-        self.addCopySpec("/var/log/mint.log")
++        self.collectExtOutput("ls -lR /opt/rh-qpid")
diff --git a/sos-bz726427-add-ethtool-acg.patch b/sos-bz726427-add-ethtool-acg.patch
new file mode 100644
index 0000000..7431af7
--- /dev/null
+++ b/sos-bz726427-add-ethtool-acg.patch
@@ -0,0 +1,13 @@
+diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py
+--- sos-2.2/sos/plugins/networking.py.orig	2011-08-12 20:45:07.618990769 +0100
++++ sos-2.2/sos/plugins/networking.py	2011-08-12 20:46:27.203697655 +0100
+@@ -72,6 +72,9 @@ class networking(sos.plugintools.PluginB
+                 self.collectExtOutput("/sbin/ethtool -i "+eth)
+                 self.collectExtOutput("/sbin/ethtool -k "+eth)
+                 self.collectExtOutput("/sbin/ethtool -S "+eth)
++                self.collectExtOutput("/sbin/ethtool -a "+eth)
++                self.collectExtOutput("/sbin/ethtool -c "+eth)
++                self.collectExtOutput("/sbin/ethtool -g "+eth)
+         if self.getOption("traceroute"):
+             self.collectExtOutput("/bin/traceroute -n rhn.redhat.com")
+             
diff --git a/sos-bz729455-collect-basic-cgroups-data.patch b/sos-bz729455-collect-basic-cgroups-data.patch
new file mode 100644
index 0000000..900a1d1
--- /dev/null
+++ b/sos-bz729455-collect-basic-cgroups-data.patch
@@ -0,0 +1,31 @@
+diff -up sos-2.2/sos/plugins/cgroups.py.orig sos-2.2/sos/plugins/cgroups.py
+--- sos-2.2/sos/plugins/cgroups.py.orig	2011-08-14 12:26:35.446697966 +0100
++++ sos-2.2/sos/plugins/cgroups.py	2011-08-14 12:26:40.768745167 +0100
+@@ -0,0 +1,27 @@
++### This program is free software; you can redistribute it and/or modify
++## it under the terms of the GNU General Public License as published by
++## the Free Software Foundation; either version 2 of the License, or
++## (at your option) any later version.
++
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++import sos.plugintools
++
++class cgroups(sos.plugintools.PluginBase):
++    """cgroup subsystem information
++    """
++
++    def setup(self):
++        self.addCopySpec("/etc/sysconfig/cgconfig")
++        self.addCopySpec("/etc/sysconfig/cgred.conf")
++        self.addCopySpec("/etc/cgsnapshot_blacklist.conf")
++        self.addCopySpec("/etc/cgconfig.conf")
++        self.addCopySpec("/etc/cgrules.conf")
++        return
diff --git a/sos-bz730641-fix-prox-net.patch b/sos-bz730641-fix-prox-net.patch
new file mode 100644
index 0000000..5ba0048
--- /dev/null
+++ b/sos-bz730641-fix-prox-net.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py
+--- sos-2.2/sos/plugins/networking.py.orig	2012-03-06 11:18:02.339316914 +0000
++++ sos-2.2/sos/plugins/networking.py	2012-03-06 11:18:04.615316966 +0000
+@@ -58,7 +58,7 @@ class networking(sos.plugintools.PluginB
+             self.writeTextToCommand(cmd,"IPTables module "+tablename+" not loaded\n")
+ 
+     def setup(self):
+-        self.addCopySpec("/proc/net")
++        self.addCopySpec("/proc/net/")
+         self.addCopySpec("/etc/nsswitch.conf")
+         self.addCopySpec("/etc/yp.conf")
+         self.addCopySpec("/etc/inetd.conf")
diff --git a/sos-bz736718-fix-hardware-plugin-paths.patch b/sos-bz736718-fix-hardware-plugin-paths.patch
new file mode 100644
index 0000000..8ccc253
--- /dev/null
+++ b/sos-bz736718-fix-hardware-plugin-paths.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py
+--- sos-2.2/sos/plugins/hardware.py.orig	2011-09-09 16:14:41.000000000 +0100
++++ sos-2.2/sos/plugins/hardware.py	2011-09-09 16:14:53.000000000 +0100
+@@ -36,7 +36,7 @@ class hardware(sos.plugintools.PluginBas
+         self.addCopySpec("/proc/s390dbf/tape")
+         self.addCopySpec("/sys/bus/scsi")
+         self.addCopySpec("/sys/state")
+-        self.collectExtOutput("/usr/share/rhn/up2dateclient/hardware.py")
++        self.collectExtOutput("/usr/share/rhn/up2date_client/hardware.py")
+         self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci")
+ 
+         self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode")
diff --git a/sos-bz736718-fix-hardware.py-exec.patch b/sos-bz736718-fix-hardware.py-exec.patch
new file mode 100644
index 0000000..51a013d
--- /dev/null
+++ b/sos-bz736718-fix-hardware.py-exec.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py
+--- sos-2.2/sos/plugins/hardware.py.orig	2011-09-23 15:34:51.000000000 +0100
++++ sos-2.2/sos/plugins/hardware.py	2011-09-23 15:34:58.000000000 +0100
+@@ -36,7 +36,7 @@ class hardware(sos.plugintools.PluginBas
+         self.addCopySpec("/proc/s390dbf/tape")
+         self.addCopySpec("/sys/bus/scsi")
+         self.addCopySpec("/sys/state")
+-        self.collectExtOutput("/usr/share/rhn/up2date_client/hardware.py")
++        self.collectExtOutput("python /usr/share/rhn/up2date_client/hardware.py", suggest_filename="hardware.py")
+         self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci")
+ 
+         self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode")
diff --git a/sos-bz739080-collect-stderr.patch b/sos-bz739080-collect-stderr.patch
new file mode 100644
index 0000000..13cd796
--- /dev/null
+++ b/sos-bz739080-collect-stderr.patch
@@ -0,0 +1,21 @@
+diff -up sos-2.2/sos/helpers.py.orig sos-2.2/sos/helpers.py
+--- sos-2.2/sos/helpers.py.orig	2012-03-06 13:03:15.121460956 +0000
++++ sos-2.2/sos/helpers.py	2012-03-06 13:03:16.400460986 +0000
+@@ -27,7 +27,7 @@ helper functions used by sosreport and p
+ """
+ import os, sys
+ import logging
+-from subprocess import Popen, PIPE
++from subprocess import Popen, PIPE, STDOUT
+ 
+ def importPlugin(pluginname, name):
+     """ Import a plugin to extend capabilities of sosreport
+@@ -53,7 +53,7 @@ def sosGetCommandOutput(command, timeout
+         # soslog.log(logging.VERBOSE, "binary '%s' does not exist or is not runnable" % cmdfile)
+         return (127, "", 0)
+ 
+-    p = Popen(command, shell=True, stdout=PIPE, stderr=PIPE, bufsize=-1)
++    p = Popen(command, shell=True, stdout=PIPE, stderr=STDOUT, bufsize=-1)
+     stdout, stderr = p.communicate()
+     return (p.returncode, stdout, 0)
+ 
diff --git a/sos-bz749262-fix-sat-proxy-package-detection.patch b/sos-bz749262-fix-sat-proxy-package-detection.patch
new file mode 100644
index 0000000..648d93b
--- /dev/null
+++ b/sos-bz749262-fix-sat-proxy-package-detection.patch
@@ -0,0 +1,39 @@
+diff -up sos-2.2/sos/plugins/rhn.py.orig sos-2.2/sos/plugins/rhn.py
+--- sos-2.2/sos/plugins/rhn.py.orig	2012-03-06 11:22:14.336322665 +0000
++++ sos-2.2/sos/plugins/rhn.py	2012-03-06 11:22:23.937322883 +0000
+@@ -28,8 +28,13 @@ class rhn(sos.plugintools.PluginBase):
+     def checkenabled(self):
+         # enable if any related package is installed
+ 
+-        self.satellite = self.isInstalled("rhns-satellite-tools")
+-        self.proxy = self.isInstalled("rhns-proxy-tools")
++        self.satellite = self.isInstalled("rhns-satellite-tools") \
++                        or self.isInstalled("spacewalk-java") \
++                        or self.isInstalled("rhn-base")
++        
++        self.proxy = self.isInstalled("rhns-proxy-tools") \
++                    or self.isInstalled("spacewalk-proxy-management") \
++                    or self.isInstalled("rhn-proxy-management")
+ 
+         if self.satellite or self.proxy:
+             return True
+@@ -72,15 +77,15 @@ class rhn(sos.plugintools.PluginBase):
+                self.addCopySpec("/etc/tomcat5")
+                self.addCopySpec("/var/log/tomcat5")
+ 
+-            self.addCopySpec("/etc/tomcat5")
+-            self.addCopySpec("/var/log/tomcat5")
++            self.addCopySpec("/etc/tomcat5/")
++            self.addCopySpec("/var/log/tomcat5/")
+ 
+         if self.proxy:
+             # copying configuration information
+-            self.addCopySpec("/etc/squid")
++            self.addCopySpec("/etc/squid/")
+ 
+             # copying logs
+-            self.addCopySpec("/var/log/squid")
++            self.addCopySpec("/var/log/squid/")
+ 
+         return
+ 
diff --git a/sos-bz749279-fix-rhn-el6-tomcat.patch b/sos-bz749279-fix-rhn-el6-tomcat.patch
new file mode 100644
index 0000000..ab923e6
--- /dev/null
+++ b/sos-bz749279-fix-rhn-el6-tomcat.patch
@@ -0,0 +1,19 @@
+diff -up sos-2.2/sos/plugins/rhn.py.orig sos-2.2/sos/plugins/rhn.py
+--- sos-2.2/sos/plugins/rhn.py.orig	2012-03-06 16:33:35.648748925 +0000
++++ sos-2.2/sos/plugins/rhn.py	2012-03-06 16:33:38.357748986 +0000
+@@ -72,13 +72,8 @@ class rhn(sos.plugintools.PluginBase):
+             self.addCopySpec("/etc/tnsnames.ora")   
+             self.addCopySpec("/etc/jabberd")
+ 
+-            # tomcat (4.x and newer satellites only)
+-            if not self.policy().pkgNVRA(satellite)[1].startswith("3."):
+-               self.addCopySpec("/etc/tomcat5")
+-               self.addCopySpec("/var/log/tomcat5")
+-
+-            self.addCopySpec("/etc/tomcat5/")
+-            self.addCopySpec("/var/log/tomcat5/")
++            self.addCopySpec("/etc/tomcat6/")
++            self.addCopySpec("/var/log/tomcat6/")
+ 
+         if self.proxy:
+             # copying configuration information
diff --git a/sos-bz749919-add-modprobe-dot-d.patch b/sos-bz749919-add-modprobe-dot-d.patch
new file mode 100644
index 0000000..a304a4c
--- /dev/null
+++ b/sos-bz749919-add-modprobe-dot-d.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py
+--- sos-2.2/sos/plugins/kernel.py.orig	2012-03-06 11:20:52.499320796 +0000
++++ sos-2.2/sos/plugins/kernel.py	2012-03-06 11:20:59.206320950 +0000
+@@ -64,6 +64,7 @@ class kernel(sos.plugintools.PluginBase)
+         self.addCopySpec("/etc/conf.modules")
+         self.addCopySpec("/etc/modules.conf")
+         self.addCopySpec("/etc/modprobe.conf")
++        self.addCopySpec("/etc/modprobe.d/")
+         self.collectExtOutput("/usr/sbin/dkms status")
+         self.addCopySpec("/proc/cmdline")
+         self.addCopySpec("/proc/driver")
diff --git a/sos-bz750607-forbid-more-pki-paths.patch b/sos-bz750607-forbid-more-pki-paths.patch
new file mode 100644
index 0000000..40f98f0
--- /dev/null
+++ b/sos-bz750607-forbid-more-pki-paths.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py
+--- sos-2.2/sos/plugins/general.py.orig	2011-11-01 18:33:37.631824485 +0000
++++ sos-2.2/sos/plugins/general.py	2011-11-01 18:33:47.084880437 +0000
+@@ -58,6 +58,7 @@ class general(sos.plugintools.PluginBase
+                 self.addCopySpec("/etc/pki/entitlement/*.pem")
+                 self.addCopySpec("/etc/rhsm/")
+                 self.addForbiddenPath("/etc/pki/entitlement/key.pem")
++                self.addForbiddenPath("/etc/pki/entitlement/*-key.pem")
+ 
+         if self.getOption('all_logs'):
+             if rhelver == 5 or rhelver == 4:
diff --git a/sos-bz751273-fix-brctl-showstp.patch b/sos-bz751273-fix-brctl-showstp.patch
new file mode 100644
index 0000000..6e6be56
--- /dev/null
+++ b/sos-bz751273-fix-brctl-showstp.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py
+--- sos-2.2/sos/plugins/networking.py.orig	2012-03-06 11:20:00.128319602 +0000
++++ sos-2.2/sos/plugins/networking.py	2012-03-06 11:20:10.820319845 +0000
+@@ -28,7 +28,7 @@ class networking(sos.plugintools.PluginB
+         out=[]
+         fp = open(brctlFile, 'r')
+         for line in fp.readlines():
+-            if line.startswith("bridge name") or line.isspace():
++            if line.startswith("bridge name") or line.isspace() or line[:1].isspace():
+                 continue
+             brName, brRest = line.split(None, 1)
+             out.append(brName)
diff --git a/sos-bz752549-add-gluster-module.patch b/sos-bz752549-add-gluster-module.patch
new file mode 100644
index 0000000..132b15f
--- /dev/null
+++ b/sos-bz752549-add-gluster-module.patch
@@ -0,0 +1,99 @@
+diff -up sos-2.2/sos/plugins/gluster.py.orig ./sos/plugins/gluster.py
+--- sos-2.2/sos/plugins/gluster.py.orig	2012-03-08 13:31:14.393436730 +0000
++++ sos-2.2/sos/plugins/gluster.py	2012-03-08 13:30:55.024434492 +0000
+@@ -0,0 +1,84 @@
++### This program is free software; you can redistribute it and/or modify
++## it under the terms of the GNU General Public License as published by
++## the Free Software Foundation; either version 2 of the License, or
++## (at your option) any later version.
++
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++import os.path
++import sos.plugintools
++
++class gluster(sos.plugintools.PluginBase):
++    '''gluster related information'''
++
++    def defaultenabled(self):
++        return True
++
++    def get_volume_names(self, volume_file):
++        """Return a dictionary for which key are volume names according to the
++        output of gluster volume info stored in volume_file.
++        """
++        out=[]
++        fp = open(volume_file, 'r')
++        for line in fp.readlines():
++            if not line.startswith("Volume Name:"):
++                continue
++            volname = line[12:-1]
++            out.append(volname)
++        fp.close()
++        return out
++
++    def checkenabled(self):
++        packages = ["glusterfs", "glusterfs-core"]
++        return os.path.exists("/etc/glusterd")               \
++            or os.path.exists("/var/lib/glusterd")           \
++            or sos.plugintools.PluginBase.checkenabled(self)
++
++    def setup(self):
++        self.collectExtOutput("/usr/sbin/gluster peer status")
++
++        # check package version handling rename of glusterfs-core -> glusterfs
++        pkg = self.policy().pkgByName("glusterfs-core");
++        if not pkg:
++            pkg = self.policy().pkgByName("glusterfs");
++            # need to handle "no package" case for users who enable with -e/-o
++            if not pkg:
++                return
++
++        gluster_major = int((pkg["version"])[:1])
++        gluster_minor = int((pkg["version"])[2:3])
++        if (gluster_major == 3) and (gluster_minor <= 2):
++            self.addCopySpec("/etc/glusterd/")
++            self.addForbiddenPath("/etc/glusterd/geo-replication/secret.pem")
++        else:
++            self.addCopySpec("/var/lib/glusterd/")
++
++        # glusterfs-server rpm scripts stash this on migration to 3.3.x
++        self.addCopySpec("/etc/glusterd.rpmsave")
++
++        # common to all versions
++        self.addCopySpec("/etc/glusterfs")
++
++        # This will fail on <3.3.x but has no harmful side-effects 
++        volume_file = self.collectOutputNow("/usr/sbin/gluster volume info",
++                        "gluster_volume_info")
++        if volume_file:
++            for volname in self.get_volume_names(volume_file):
++                self.collectExtOutput("gluster volume statedump %s" % volname)
++                self.collectExtOutput("gluster volume status %s detail" % volname)
++                self.collectExtOutput("gluster volume status %s clients" % volname)
++                self.collectExtOutput("gluster volume status %s mem" % volname)
++                self.collectExtOutput("gluster volume status %s callpool" % volname)
++                self.collectExtOutput("gluster volume status %s inode" % volname)
++                self.collectExtOutput("gluster volume status %s fd" % volname)
++
++        self.collectExtOutput("gluster volume status")
++        # collect this last as some of the other actions create log entries
++        self.addCopySpec("/var/log/glusterfs")
+diff -up sos-2.2/sos/plugins/gluster.py.orig sos-2.2/sos/plugins/gluster.py
+--- sos-2.2/sos/plugins/gluster.py.orig	2012-05-02 14:09:06.768072384 +0100
++++ sos-2.2/sos/plugins/gluster.py	2012-05-02 14:10:10.568449078 +0100
+@@ -73,6 +73,7 @@ class gluster(sos.plugintools.PluginBase
+         if volume_file:
+             for volname in self.get_volume_names(volume_file):
+                 self.collectExtOutput("gluster volume statedump %s" % volname)
++                self.collectExtOutput("gluster volume statedump %s nfs" % volname)
+                 self.collectExtOutput("gluster volume status %s detail" % volname)
+                 self.collectExtOutput("gluster volume status %s clients" % volname)
+                 self.collectExtOutput("gluster volume status %s mem" % volname)
diff --git a/sos-bz752549-gluster-forbid-more-pem-paths.patch b/sos-bz752549-gluster-forbid-more-pem-paths.patch
new file mode 100644
index 0000000..501113d
--- /dev/null
+++ b/sos-bz752549-gluster-forbid-more-pem-paths.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/gluster.py.orig sos-2.2/sos/plugins/gluster.py
+--- sos-2.2/sos/plugins/gluster.py.orig	2012-04-23 18:25:15.698646073 +0100
++++ sos-2.2/sos/plugins/gluster.py	2012-04-23 18:25:25.257646291 +0100
+@@ -59,6 +59,7 @@ class gluster(sos.plugintools.PluginBase
+             self.addForbiddenPath("/etc/glusterd/geo-replication/secret.pem")
+         else:
+             self.addCopySpec("/var/lib/glusterd/")
++            self.addForbiddenPath("/var/lib/glusterd/geo-replication/secret.pem")
+ 
+         # glusterfs-server rpm scripts stash this on migration to 3.3.x
+         self.addCopySpec("/etc/glusterd.rpmsave")
diff --git a/sos-bz752666-cloudforms-debug.patch b/sos-bz752666-cloudforms-debug.patch
new file mode 100644
index 0000000..dd6e1e9
--- /dev/null
+++ b/sos-bz752666-cloudforms-debug.patch
@@ -0,0 +1,31 @@
+diff -up sos-2.2/sos/plugins/cloudforms.py.orig ./sos/plugins/cloudforms.py
+--- sos-2.2/sos/plugins/cloudforms.py.orig	2012-03-08 12:35:06.415447641 +0000
++++ sos-2.2/sos/plugins/cloudforms.py	2012-03-08 12:45:53.485443241 +0000
+@@ -0,0 +1,27 @@
++import sos.plugintools
++import os
++
++class cloudforms(sos.plugintools.PluginBase):
++    """CloudForms related information
++    """
++
++    def defaultenabled(self):
++        return True
++
++    def checkenabled(self):
++        self.packages = ["katello", "katello-common",
++                        "katello-headpin", "aeolus-conductor"]
++        self.files = ["/usr/share/katello/script/katello-debug",
++                        "/usr/bin/aeolus-debug"]
++        return sos.plugintools.PluginBase.checkenabled(self)
++
++    def setup(self):
++        katello_debug = "/usr/share/katello/script/katello-debug"
++        aeolus_debug = "/usr/bin/aeolus-debug"
++        if os.path.isfile(katello_debug):
++            katello_debug_path = os.path.join(self.cInfo['dstroot'],"katello-debug")
++            self.collectExtOutput("%s --notar -d %s" % (katello_debug, katello_debug_path))
++        if os.path.isfile(aeolus_debug):
++            aeolus_debug_path = os.path.join(self.cInfo['dstroot'],"aeolus-debug")
++            self.collectExtOutput("%s --notar -d %s" % (aeolus_debug, aeolus_debug_path))
++
diff --git a/sos-bz760424-gather-cpufreq-info.patch b/sos-bz760424-gather-cpufreq-info.patch
new file mode 100644
index 0000000..bb29079
--- /dev/null
+++ b/sos-bz760424-gather-cpufreq-info.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py
+--- sos-2.2/sos/plugins/hardware.py.orig	2012-03-06 11:18:50.687318018 +0000
++++ sos-2.2/sos/plugins/hardware.py	2012-03-06 11:19:04.559318335 +0000
+@@ -41,6 +41,7 @@ class hardware(sos.plugintools.PluginBas
+         self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci")
+ 
+         self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode")
++	self.collectExtOutput("/usr/bin/cpufreq-info")
+ 
+         if self.policy().getArch().endswith("386"):
+             self.collectExtOutput("/usr/sbin/x86info -a")
diff --git a/sos-bz760995-fence_virt-conf.patch b/sos-bz760995-fence_virt-conf.patch
new file mode 100644
index 0000000..8990805
--- /dev/null
+++ b/sos-bz760995-fence_virt-conf.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/cluster.py.orig sos-2.2/sos/plugins/cluster.py
+--- sos-2.2/sos/plugins/cluster.py.orig	2012-03-06 11:16:10.917314372 +0000
++++ sos-2.2/sos/plugins/cluster.py	2012-03-06 11:16:24.354314679 +0000
+@@ -48,6 +48,7 @@ class cluster(sos.plugintools.PluginBase
+         self.addCopySpec("/etc/cluster")
+         self.addCopySpec("/etc/sysconfig/cluster")
+         self.addCopySpec("/etc/sysconfig/cman")
++	self.addCopySpec("/etc/fence_virt.conf")
+         self.addCopySpec("/var/lib/ricci")
+         self.addCopySpec("/var/lib/luci")
+         self.addCopySpec("/var/log/cluster")
diff --git a/sos-bz766583-allow-nonroot-symlinks.patch b/sos-bz766583-allow-nonroot-symlinks.patch
new file mode 100644
index 0000000..62c01f6
--- /dev/null
+++ b/sos-bz766583-allow-nonroot-symlinks.patch
@@ -0,0 +1,260 @@
+diff -up sos-2.2/sos/plugins/devicemapper.py.orig sos-2.2/sos/plugins/devicemapper.py
+--- sos-2.2/sos/plugins/devicemapper.py.orig	2012-03-06 14:23:24.361570691 +0000
++++ sos-2.2/sos/plugins/devicemapper.py	2012-03-06 14:23:27.535570770 +0000
+@@ -34,7 +34,7 @@ class devicemapper(sos.plugintools.Plugi
+         self.collectExtOutput("/sbin/dmsetup status")
+         self.collectExtOutput("/sbin/dmsetup ls --tree")
+ 
+-        self.collectExtOutput("/sbin/vgdisplay -vv", root_symlink = "vgdisplay")
++        self.collectExtOutput("/sbin/vgdisplay -vv", symlink = "vgdisplay")
+         self.collectExtOutput("/sbin/vgscan -vvv")
+         self.collectExtOutput("/sbin/pvscan -v")
+         self.collectExtOutput("/sbin/lvs -a -o +devices")
+diff -up sos-2.2/sos/plugins/filesys.py.orig sos-2.2/sos/plugins/filesys.py
+--- sos-2.2/sos/plugins/filesys.py.orig	2012-03-06 14:23:24.364570691 +0000
++++ sos-2.2/sos/plugins/filesys.py	2012-03-06 14:23:27.536570767 +0000
+@@ -30,12 +30,12 @@ class filesys(sos.plugintools.PluginBase
+         self.addCopySpec("/proc/mounts")
+         self.addCopySpec("/proc/mdstat")
+         self.addCopySpec("/etc/raidtab")
+-        mounts = self.collectOutputNow("/bin/mount -l", root_symlink = "mount")
++        mounts = self.collectOutputNow("/bin/mount -l", symlink = "mount")
+         self.addCopySpec("/etc/mdadm.conf")
+         
+-        self.collectExtOutput("/bin/df -al", root_symlink = "df")
++        self.collectExtOutput("/bin/df -al", symlink = "df")
+         if self.getOption('lsof'):
+-            self.collectExtOutput("/usr/sbin/lsof -b +M -n -l -P", root_symlink = "lsof")
++            self.collectExtOutput("/usr/sbin/lsof -b +M -n -l -P", symlink = "lsof")
+         self.collectExtOutput("/sbin/blkid -c /dev/null")
+         self.collectExtOutput("/bin/lsblk")
+         
+diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py
+--- sos-2.2/sos/plugins/general.py.orig	2012-03-06 14:23:24.366570691 +0000
++++ sos-2.2/sos/plugins/general.py	2012-03-06 14:23:27.536570767 +0000
+@@ -43,12 +43,12 @@ class general(sos.plugintools.PluginBase
+         self.addCopySpec("/var/log/pm/suspend.log")
+         self.addCopySpec("/var/log/up2date")
+         self.addCopySpec("/etc/exports")        
+-        self.collectExtOutput("/bin/hostname", root_symlink = "hostname")
+-        self.collectExtOutput("/bin/date", root_symlink = "date")
+-        self.collectExtOutput("/usr/bin/uptime", root_symlink = "uptime")
++        self.collectExtOutput("/bin/hostname", symlink = "hostname")
++        self.collectExtOutput("/bin/date", symlink = "date")
++        self.collectExtOutput("/usr/bin/uptime", symlink = "uptime")
+         self.collectExtOutput("/bin/dmesg")
+         self.addCopySpec("/root/anaconda-ks.cfg")
+-        self.collectExtOutput("/usr/sbin/alternatives --display java", root_symlink = "java")
++        self.collectExtOutput("/usr/sbin/alternatives --display java", symlink = "java")
+         self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java")
+ 
+         # new entitlement certificate support
+diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py
+--- sos-2.2/sos/plugins/hardware.py.orig	2012-03-06 14:23:24.368570691 +0000
++++ sos-2.2/sos/plugins/hardware.py	2012-03-06 14:23:27.537570765 +0000
+@@ -38,9 +38,9 @@ class hardware(sos.plugintools.PluginBas
+         self.addCopySpec("/sys/bus/scsi")
+         self.addCopySpec("/sys/state")
+         self.collectExtOutput("python /usr/share/rhn/up2date_client/hardware.py", suggest_filename="hardware.py")
+-        self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", root_symlink = "lspci")
++        self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", symlink = "lspci")
+ 
+-        self.collectExtOutput("/usr/sbin/dmidecode", root_symlink = "dmidecode")
++        self.collectExtOutput("/usr/sbin/dmidecode", symlink = "dmidecode")
+ 	self.collectExtOutput("/usr/bin/cpufreq-info")
+ 
+         if self.policy().getArch().endswith("386"):
+diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py
+--- sos-2.2/sos/plugins/kernel.py.orig	2012-03-06 14:23:24.371570691 +0000
++++ sos-2.2/sos/plugins/kernel.py	2012-03-06 14:23:27.537570765 +0000
+@@ -41,8 +41,8 @@ class kernel(sos.plugintools.PluginBase)
+         ]
+ 
+     def setup(self):
+-        self.collectExtOutput("/bin/uname -a", root_symlink = "uname")
+-        self.moduleFile = self.collectOutputNow("/sbin/lsmod", root_symlink = "lsmod")
++        self.collectExtOutput("/bin/uname -a", symlink = "uname")
++        self.moduleFile = self.collectOutputNow("/sbin/lsmod", symlink = "lsmod")
+ 
+         if self.getOption('modinfo'):
+             runcmd = ""
+diff -up sos-2.2/sos/plugins/lsbrelease.py.orig sos-2.2/sos/plugins/lsbrelease.py
+--- sos-2.2/sos/plugins/lsbrelease.py.orig	2012-03-06 14:23:24.373570691 +0000
++++ sos-2.2/sos/plugins/lsbrelease.py	2012-03-06 14:23:27.538570762 +0000
+@@ -25,6 +25,6 @@ class lsbrelease(sos.plugintools.PluginB
+             return
+     def setup(self):
+         self.collectExtOutput("/usr/bin/lsb_release -a")
+-        self.collectExtOutput("/usr/bin/lsb_release -d", suggest_filename = "lsb_release", root_symlink = "lsb-release")
++        self.collectExtOutput("/usr/bin/lsb_release -d", suggest_filename = "lsb_release", symlink = "lsb-release")
+         self.addCopySpec("/etc/lsb-release*")
+         return    
+diff -up sos-2.2/sos/plugins/memory.py.orig sos-2.2/sos/plugins/memory.py
+--- sos-2.2/sos/plugins/memory.py.orig	2012-03-06 14:23:24.375570691 +0000
++++ sos-2.2/sos/plugins/memory.py	2012-03-06 14:23:27.538570762 +0000
+@@ -24,7 +24,7 @@ class memory(sos.plugintools.PluginBase)
+         self.addCopySpec("/proc/slabinfo")
+         
+         self.collectExtOutput("/bin/dmesg | grep -e 'e820.' -e 'aperature.'")
+-        self.collectExtOutput("/usr/bin/free", root_symlink = "free")
++        self.collectExtOutput("/usr/bin/free", symlink = "free")
+         self.collectExtOutput("/usr/bin/free -m")
+         return
+ 
+diff -up sos-2.2/sos/plugins/networking.py.orig sos-2.2/sos/plugins/networking.py
+--- sos-2.2/sos/plugins/networking.py.orig	2012-03-06 14:23:24.378570691 +0000
++++ sos-2.2/sos/plugins/networking.py	2012-03-06 14:23:27.539570760 +0000
+@@ -66,14 +66,14 @@ class networking(sos.plugintools.PluginB
+         self.addCopySpec("/etc/xinetd.d")
+         self.addCopySpec("/etc/host*")
+         self.addCopySpec("/etc/resolv.conf")
+-        ifconfigFile=self.collectOutputNow("/sbin/ifconfig -a", root_symlink = "ifconfig")
+-        self.collectExtOutput("/sbin/route -n", root_symlink = "route")
++        ifconfigFile=self.collectOutputNow("/sbin/ifconfig -a", symlink = "ifconfig")
++        self.collectExtOutput("/sbin/route -n", symlink = "route")
+         self.collectIPTable("filter")
+         self.collectIPTable("nat")
+         self.collectIPTable("mangle")
+         self.collectExtOutput("/bin/netstat -s")
+         self.collectExtOutput("/bin/netstat -agn")
+-        self.collectExtOutput("/bin/netstat -neopa", root_symlink = "netstat")
++        self.collectExtOutput("/bin/netstat -neopa", symlink = "netstat")
+         self.collectExtOutput("/sbin/ip route show table all")
+         self.collectExtOutput("/sbin/ip link")
+         self.collectExtOutput("/sbin/ip address")
+diff -up sos-2.2/sos/plugins/process.py.orig sos-2.2/sos/plugins/process.py
+--- sos-2.2/sos/plugins/process.py.orig	2012-03-06 14:23:24.380570691 +0000
++++ sos-2.2/sos/plugins/process.py	2012-03-06 14:23:27.539570760 +0000
+@@ -20,11 +20,11 @@ class process(sos.plugintools.PluginBase
+     """process information
+     """
+     def setup(self):
+-        self.collectExtOutput("/bin/ps auxwww", root_symlink = "ps")
++        self.collectExtOutput("/bin/ps auxwww", symlink = "ps")
+         self.collectExtOutput("/bin/ps auxwwwm")
+         self.collectExtOutput("/bin/ps alxwww")
+-        self.collectExtOutput("/usr/bin/pstree", root_symlink = "pstree")
+-        self.collectExtOutput("/usr/sbin/lsof -b +M -n -l", root_symlink = "lsof")
++        self.collectExtOutput("/usr/bin/pstree", symlink = "pstree")
++        self.collectExtOutput("/usr/sbin/lsof -b +M -n -l", symlink = "lsof")
+         return
+ 
+     def find_mountpoint(s):
+diff -up sos-2.2/sos/plugins/rhn.py.orig sos-2.2/sos/plugins/rhn.py
+--- sos-2.2/sos/plugins/rhn.py.orig	2012-03-06 14:23:24.383570691 +0000
++++ sos-2.2/sos/plugins/rhn.py	2012-03-06 14:23:27.540570760 +0000
+@@ -64,9 +64,9 @@ class rhn(sos.plugintools.PluginBase):
+         self.addCopySpec("/var/log/nocpulse/TSDBLocalQueue/TSDBLocalQueue.log")
+ 
+         self.addCopySpec("/root/ssl-build")
+-        self.collectExtOutput("rpm -qa --last", root_symlink = "rpm-manifest")
+-        self.collectExtOutput("/usr/bin/rhn-schema-version", root_symlink = "database-schema-version")
+-        self.collectExtOutput("/usr/bin/rhn-charsets", root_symlink = "database-character-sets")
++        self.collectExtOutput("rpm -qa --last", symlink = "rpm-manifest")
++        self.collectExtOutput("/usr/bin/rhn-schema-version", symlink = "database-schema-version")
++        self.collectExtOutput("/usr/bin/rhn-charsets", symlink = "database-character-sets")
+ 
+         if self.satellite:
+             self.addCopySpec("/etc/tnsnames.ora")   
+diff -up sos-2.2/sos/plugins/rpm.py.orig sos-2.2/sos/plugins/rpm.py
+--- sos-2.2/sos/plugins/rpm.py.orig	2012-03-06 14:23:24.385570691 +0000
++++ sos-2.2/sos/plugins/rpm.py	2012-03-06 14:23:27.540570760 +0000
+@@ -24,9 +24,9 @@ class rpm(sos.plugintools.PluginBase):
+         self.addCopySpec("/var/log/rpmpkgs")
+ 
+         if self.getOption("rpmq"):
+-            self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-59s %s\\n\",$1,$2}'|sort", root_symlink = "installed-rpms")
++            self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-59s %s\\n\",$1,$2}'|sort", symlink = "installed-rpms")
+ 
+         if self.getOption("rpmva"):
+-            self.collectExtOutput("/bin/rpm -Va", root_symlink = "rpm-Va", timeout = 3600)
++            self.collectExtOutput("/bin/rpm -Va", symlink = "rpm-Va", timeout = 3600)
+         return
+ 
+diff -up sos-2.2/sos/plugins/sar.py.orig sos-2.2/sos/plugins/sar.py
+--- sos-2.2/sos/plugins/sar.py.orig	2012-03-06 14:23:24.387570691 +0000
++++ sos-2.2/sos/plugins/sar.py	2012-03-06 14:23:27.540570760 +0000
+@@ -27,7 +27,7 @@ class sar(sos.plugintools.PluginBase):
+                 sar_filename = 'sar' + fname[2:4]
+                 if sar_filename not in dirList:
+                     sar_command = "/bin/sh -c \"LANG=C /usr/bin/sar -A -f /var/log/sa/" + fname + "\""
+-                    self.collectOutputNow(sar_command, sar_filename, root_symlink=sar_filename)
++                    self.collectOutputNow(sar_command, sar_filename, symlink=sar_filename)
+         return
+ 
+     def checkenabled(self):
+diff -up sos-2.2/sos/plugins/selinux.py.orig sos-2.2/sos/plugins/selinux.py
+--- sos-2.2/sos/plugins/selinux.py.orig	2012-03-06 14:23:24.389570691 +0000
++++ sos-2.2/sos/plugins/selinux.py	2012-03-06 14:23:27.540570760 +0000
+@@ -31,7 +31,7 @@ class selinux(sos.plugintools.PluginBase
+     def checkenabled(self):
+         # is selinux enabled ?
+         try:
+-            if self.collectOutputNow("/usr/sbin/sestatus", root_symlink = "sestatus").split(":")[1].strip() == "disabled":
++            if self.collectOutputNow("/usr/sbin/sestatus", symlink = "sestatus").split(":")[1].strip() == "disabled":
+                 return False
+         except:
+             pass
+diff -up sos-2.2/sos/plugins/startup.py.orig sos-2.2/sos/plugins/startup.py
+--- sos-2.2/sos/plugins/startup.py.orig	2012-03-06 14:23:24.392570691 +0000
++++ sos-2.2/sos/plugins/startup.py	2012-03-06 14:23:27.541570762 +0000
+@@ -22,7 +22,7 @@ class startup(sos.plugintools.PluginBase
+     def setup(self):
+         self.addCopySpec("/etc/rc.d")
+         
+-        self.collectExtOutput("/sbin/chkconfig --list", root_symlink = "chkconfig")
++        self.collectExtOutput("/sbin/chkconfig --list", symlink = "chkconfig")
+         if self.getOption('servicestatus'):
+             self.collectExtOutput("/sbin/service --status-all")
+         self.collectExtOutput("/sbin/runlevel")
+diff -up sos-2.2/sos/plugintools.py.orig sos-2.2/sos/plugintools.py
+--- sos-2.2/sos/plugintools.py.orig	2012-03-06 14:23:19.578570582 +0000
++++ sos-2.2/sos/plugintools.py	2012-03-06 14:23:27.541570762 +0000
+@@ -302,7 +302,7 @@ class PluginBase:
+             # ensuring we get at least some logs
+             if flog == files[0] and limit_reached:
+                 self.collectExtOutput("tail -c%d %s" % (sizelimit, flog),
+-                    "tail_" + os.path.basename(flog))
++                    "tail_" + os.path.basename(flog), flog[1:])
+ 
+     def addCopySpec(self, copyspec):
+         """ Add a file specification (can be file, dir,or shell glob) to be
+@@ -324,11 +324,11 @@ class PluginBase:
+         status, shout, runtime = sosGetCommandOutput(prog)
+         return (status, shout, runtime)
+ 
+-    def collectExtOutput(self, exe, suggest_filename = None, root_symlink = None, timeout = 300):
++    def collectExtOutput(self, exe, suggest_filename = None, symlink = None, timeout = 300):
+         """
+         Run a program and collect the output
+         """
+-        self.collectProgs.append( (exe, suggest_filename, root_symlink, timeout) )
++        self.collectProgs.append( (exe, suggest_filename, symlink, timeout) )
+ 
+     def fileGrep(self, regexp, fname):
+         try:
+@@ -360,7 +360,7 @@ class PluginBase:
+ 
+         return outfn
+ 
+-    def collectOutputNow(self, exe, suggest_filename = None, root_symlink = False, timeout = 300):
++    def collectOutputNow(self, exe, suggest_filename = None, symlink = False, timeout = 300):
+         """ Execute a command and save the output to a file for inclusion in
+         the report
+         """
+@@ -385,11 +385,13 @@ class PluginBase:
+                 outfd.write(shout+"\n")
+             outfd.close()
+ 
+-            if root_symlink:
++            if symlink:
++                dst_from_root = outfn[len(self.cInfo['dstroot'])+1:]
++                target = ("../" * string.count(symlink, "/")) + dst_from_root
+                 curdir = os.getcwd()
+                 os.chdir(self.cInfo['dstroot'])
+                 try:
+-                    os.symlink(outfn[len(self.cInfo['dstroot'])+1:], root_symlink.strip("/."))
++                    os.symlink(target, symlink.strip("/."))
+                 except:
+                     pass
+                 os.chdir(curdir)
diff --git a/sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch b/sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch
new file mode 100644
index 0000000..4fa18a0
--- /dev/null
+++ b/sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch
@@ -0,0 +1,12 @@
+diff -up sos-2.2/sos/plugins/rpm.py.orig sos-2.2/sos/plugins/rpm.py
+--- sos-2.2/sos/plugins/rpm.py.orig	2012-03-06 13:13:42.455475271 +0000
++++ sos-2.2/sos/plugins/rpm.py	2012-03-06 13:13:43.919475297 +0000
+@@ -24,7 +24,7 @@ class rpm(sos.plugintools.PluginBase):
+         self.addCopySpec("/var/log/rpmpkgs")
+ 
+         if self.getOption("rpmq"):
+-            self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-60s%s\\n\",$1,$2}'|sort", root_symlink = "installed-rpms")
++            self.collectExtOutput("/bin/rpm -qa --qf=\"%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}~~%{INSTALLTIME:date}\n\" --nosignature --nodigest|/bin/awk -F ~~ '{printf \"%-59s %s\\n\",$1,$2}'|sort", root_symlink = "installed-rpms")
+ 
+         if self.getOption("rpmva"):
+             self.collectExtOutput("/bin/rpm -Va", root_symlink = "rpm-Va", timeout = 3600)
diff --git a/sos-bz771393-improve-report-name-sanitization.patch b/sos-bz771393-improve-report-name-sanitization.patch
new file mode 100644
index 0000000..856b31f
--- /dev/null
+++ b/sos-bz771393-improve-report-name-sanitization.patch
@@ -0,0 +1,42 @@
+diff -up sos-2.2/sos/policyredhat.py.orig sos-2.2/sos/policyredhat.py
+--- sos-2.2/sos/policyredhat.py.orig	2012-03-06 21:40:00.126168412 +0000
++++ sos-2.2/sos/policyredhat.py	2012-03-06 21:46:14.875176961 +0000
+@@ -60,6 +60,12 @@ def memoized(function):
+             return result
+     return f
+ 
++def sanitizeReportName(report_name):
++    return re.sub(r"[^-a-zA-Z.0-9]", "", report_name)
++
++def sanitizeTicketNumber(ticket_number):
++    return re.sub(r"[^0-9]", "", ticket_number)
++
+ class SosPolicy:
+     "This class implements various policies for sos"
+     def __init__(self):
+@@ -208,10 +214,7 @@ class SosPolicy:
+         if not self.cInfo['cmdlineopts'].batch:
+             try:
+                 self.reportName = raw_input(_("Please enter your first initial and last name [%s]: ") % localname)
+-                self.reportName = re.sub(r"[^a-zA-Z.0-9]", "", self.reportName)
+-
+                 self.ticketNumber = raw_input(_("Please enter the case number that you are generating this report for: "))
+-                self.ticketNumber = re.sub(r"[^0-9]", "", self.ticketNumber)
+                 print
+             except:
+                 print
+@@ -222,11 +225,12 @@ class SosPolicy:
+         
+         if self.cInfo['cmdlineopts'].customerName:
+             self.reportName = self.cInfo['cmdlineopts'].customerName        
+-            self.reportName = re.sub(r"[^a-zA-Z.0-9]", "", self.reportName)
+ 
+         if self.cInfo['cmdlineopts'].ticketNumber:
+             self.ticketNumber = self.cInfo['cmdlineopts'].ticketNumber
+-            self.ticketNumber = re.sub(r"[^0-9]", "", self.ticketNumber)
++
++        self.reportName = sanitizeReportName(self.reportName)
++        self.ticketNumber = sanitizeTicketNumber(self.ticketNumber)
+ 
+         return
+ 
diff --git a/sos-bz771501-fix-rsyslog-collection-and-size-limit.patch b/sos-bz771501-fix-rsyslog-collection-and-size-limit.patch
new file mode 100644
index 0000000..7944157
--- /dev/null
+++ b/sos-bz771501-fix-rsyslog-collection-and-size-limit.patch
@@ -0,0 +1,30 @@
+diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py
+--- sos-2.2/sos/plugins/general.py.orig	2012-03-06 13:16:08.835478612 +0000
++++ sos-2.2/sos/plugins/general.py	2012-03-06 13:16:12.151478685 +0000
+@@ -61,18 +61,14 @@ class general(sos.plugintools.PluginBase
+                 self.addForbiddenPath("/etc/pki/entitlement/*-key.pem")
+ 
+         if self.getOption('all_logs'):
+-            if rhelver == 5 or rhelver == 4:
+-                logs=self.doRegexFindAll(r"^\S+\s+(\/.*log.*)\s+$", "/etc/syslog.conf")
+-                for i in logs:
+-                    if not os.path.isfile(i): continue
+-                    self.addCopySpec(i)
+-
+-            if rhelver == 6:
+-                logs=self.doRegexFindAll(r"^\S+\s+(\/.*log.*)\s+$", "/etc/rsyslog.conf")
+-                for i in logs:
+-                    if not os.path.isfile(i): continue
+-                    self.addCopySpec(i)
+-
++            logs = self.doRegexFindAll("^\S+\s+(-?\/.*$)\s+", "/etc/syslog.conf")
++            if self.cInfo["policy"].pkgByName("rsyslog") or os.path.exists("/etc/rsyslog.conf"):
++                logs += self.doRegexFindAll("^\S+\s+(-?\/.*$)\s+", "/etc/rsyslog.conf")
++            for i in logs:
++                if i.startswith("-"):
++                    i = i[1:]
++                if os.path.isfile(i):
++                    self.addCopySpecLimit(i, sizelimit = self.isOptionEnabled("syslogsize"))
+         return
+ 
+     def postproc(self):
diff --git a/sos-bz782339-unbreak-logging.patch b/sos-bz782339-unbreak-logging.patch
new file mode 100644
index 0000000..ff3dadb
--- /dev/null
+++ b/sos-bz782339-unbreak-logging.patch
@@ -0,0 +1,182 @@
+diff -up ./sos/plugintools.py.orig ./sos/plugintools.py
+--- ./sos/plugintools.py.orig	2012-03-06 21:26:16.048149609 +0000
++++ ./sos/plugintools.py	2012-03-06 21:26:22.901149765 +0000
+@@ -67,8 +67,8 @@ class PluginBase:
+ 
+         self.must_exit = False
+ 
+-        self.soslog = logging.getLogger('sos')
+-        self.proflog = logging.getLogger('sosprofile')
++        self.soslog = self.cInfo['soslog']
++        self.proflog = self.cInfo['proflog']
+ 
+         # get the option list into a dictionary
+         for opt in self.optionList:
+@@ -105,7 +105,7 @@ class PluginBase:
+                     except KeyboardInterrupt:
+                       raise KeyboardInterrupt
+                     except Exception, e:
+-                        # self.soslog.debug("problem at path %s (%s)" % (abspath,e))
++                        self.soslog.info("could not apply regex substitution at path %s (%s)" % (abspath,e))
+                         break
+         return False
+ 
+@@ -137,7 +137,7 @@ class PluginBase:
+             return ''
+ 
+         if not os.path.exists(srcpath):
+-            # self.soslog.debug("file or directory %s does not exist" % srcpath)
++            self.soslog.info("file or directory %s does not exist" % srcpath)
+             return
+ 
+         if os.path.islink(srcpath):
+@@ -162,19 +162,19 @@ class PluginBase:
+ 
+             # make sure the link doesn't already exists
+             if os.path.exists(dstslname):
+-                # self.soslog.debug("skipping symlink creation: already exists (%s)" % dstslname)
++                self.soslog.info("skipping symlink creation: already exists (%s)" % dstslname)
+                 return
+ 
+             # make sure the dst dir exists
+             if not (os.path.exists(os.path.dirname(dstslname)) and os.path.isdir(os.path.dirname(dstslname))):
+                 os.makedirs(os.path.dirname(dstslname))
+ 
+-            # self.soslog.debug("creating symlink %s -> %s" % (dstslname, rpth))
++            self.soslog.debug("creating symlink %s -> %s" % (dstslname, rpth))
+ 
+             try:
+                 os.symlink(rpth, dstslname)
+             except OSError:
+-                # self.soslog.debug("skipping symlink creation: already exists (%s)" % dstslname)
++                self.soslog.info("skipping symlink creation: already exists (%s)" % dstslname)
+                 return
+             if os.path.isabs(link):
+                 self.doCopyFileOrDir(link)
+@@ -195,17 +195,17 @@ class PluginBase:
+ 
+         # if we get here, it's definitely a regular file (not a symlink or dir)
+ 
+-        # self.soslog.debug("copying file %s" % srcpath)
++        self.soslog.debug("copying file %s" % srcpath)
+         try:
+             tdstpath, abspath = self.__copyFile(srcpath)
+-        except EnvironmentError:
+-            # self.soslog.debug("error copying file %s (already exists)" % (srcpath))
++        except PluginException:
++            self.soslog.debug("error copying file %s (already exists)" % (srcpath))
+             return
+         except IOError:
+-            # self.soslog.debug("error copying file %s (IOError)" % (srcpath))
++            self.soslog.info("error copying file %s (IOError)" % (srcpath))
+             return 
+         except:
+-            # self.soslog.debug("error copying file %s (SOMETHING HAPPENED)" % (srcpath))
++            self.soslog.exception("error copying file %s" % (srcpath))
+             return 
+ 
+         self.copiedFiles.append({'srcpath':srcpath, 'dstpath':tdstpath, 'symlink':"no"}) # save in our list
+@@ -285,7 +285,7 @@ class PluginBase:
+         """Add a file specification (with limits)
+         """
+         if not ( fname and len(fname) ):
+-            # self.soslog.warning("invalid file path")
++            self.soslog.warning("invalid file path")
+             return False
+         files = glob.glob(fname)
+         files.sort()
+@@ -309,7 +309,7 @@ class PluginBase:
+         copied into the sosreport by this module
+         """
+         if not ( copyspec and len(copyspec) ):
+-            # self.soslog.warning("invalid file path")
++            self.soslog.warning("invalid file path")
+             return False
+         # Glob case handling is such that a valid non-glob is a reduced glob
+         for filespec in glob.glob(copyspec):
+@@ -399,7 +399,7 @@ class PluginBase:
+             outfn_strip = outfn[len(self.cInfo['cmddir'])+1:]
+ 
+         else:
+-            # self.soslog.debug("could not run command: %s" % exe)
++            self.soslog.info("could not run command: %s" % exe)
+             outfn = None
+             outfn_strip = None
+ 
+@@ -463,11 +463,11 @@ class PluginBase:
+ 
+         for progs in izip(self.collectProgs):
+             prog, suggest_filename, root_symlink, timeout = progs[0]
+-            # self.soslog.debug("collecting output of '%s'" % prog)
++            self.soslog.debug("collecting output of '%s'" % prog)
+             try:
+                 self.collectOutputNow(prog, suggest_filename, root_symlink, timeout)
+             except Exception, e:
+-                self.soslog.debug("error collection output of '%s', traceback follows:" % prog)
++                self.soslog.info("error collection output of '%s', traceback follows:" % prog)
+ 
+     def exit_please(self):
+         """ This function tells the plugin that it should exit ASAP"""
+diff -up ./sos/sosreport.py.orig ./sos/sosreport.py
+--- ./sos/sosreport.py.orig	2012-03-06 21:26:16.051149609 +0000
++++ ./sos/sosreport.py	2012-03-06 21:26:22.902149765 +0000
+@@ -361,17 +361,16 @@ def sosreport(opts):
+     soslog = logging.getLogger('sos')
+     soslog.setLevel(logging.DEBUG)
+ 
+-    logging.VERBOSE  = logging.INFO - 1
+-    logging.VERBOSE2 = logging.INFO - 2
+-    logging.VERBOSE3 = logging.INFO - 3
+-    logging.addLevelName(logging.VERBOSE, "verbose")
+-    logging.addLevelName(logging.VERBOSE2,"verbose2")
+-    logging.addLevelName(logging.VERBOSE3,"verbose3")
+-
+     if GlobalVars.__cmdLineOpts__.profiler:
+         proflog = logging.getLogger('sosprofile')
+         proflog.setLevel(logging.DEBUG)
+-        
++    else:
++        proflog = None
++
++    # limit verbosity to DEBUG
++    if GlobalVars.__cmdLineOpts__.verbosity > 3:
++        GlobalVars.__cmdLineOpts__.verbosity = 3 
++
+     # if stdin is not a tty, disable colors and don't ask questions
+     if not sys.stdin.isatty():
+         GlobalVars.__cmdLineOpts__.nocolors = True
+@@ -380,7 +379,11 @@ def sosreport(opts):
+     # log to a file
+     flog = logging.FileHandler(logdir + "/sos.log")
+     flog.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s'))
+-    flog.setLevel(logging.VERBOSE3)
++    if GlobalVars.__cmdLineOpts__.verbosity > 0:
++        # standard log levels have a step of 10
++        flog.setLevel(logging.INFO - (GlobalVars.__cmdLineOpts__.verbosity * 10))
++    else:
++        flog.setLevel(logging.INFO)
+     soslog.addHandler(flog)
+ 
+     if GlobalVars.__cmdLineOpts__.profiler:
+@@ -393,9 +396,10 @@ def sosreport(opts):
+     # define a Handler which writes INFO messages or higher to the sys.stderr
+     console = logging.StreamHandler(sys.stderr)
+     if GlobalVars.__cmdLineOpts__.verbosity > 0:
+-        console.setLevel(20 - GlobalVars.__cmdLineOpts__.verbosity)
++        # standard log levels have a step of 10
++        console.setLevel(logging.WARNING - (GlobalVars.__cmdLineOpts__.verbosity * 10))
+     else:
+-        console.setLevel(logging.INFO)
++        console.setLevel(logging.WARNING)
+     console.setFormatter(logging.Formatter('%(message)s'))
+     soslog.addHandler(console)
+ 
+@@ -403,7 +407,7 @@ def sosreport(opts):
+ 
+     # set up dict so everyone can share the following
+     commons = {'dstroot': GlobalVars.dstroot, 'cmddir': cmddir, 'logdir': logdir, 'rptdir': rptdir,
+-               'soslog': soslog, 'policy': GlobalVars.policy, 'verbosity' : GlobalVars.__cmdLineOpts__.verbosity,
++               'soslog': soslog, 'proflog': proflog, 'policy': GlobalVars.policy, 'verbosity' : GlobalVars.__cmdLineOpts__.verbosity,
+                'xmlreport' : xmlrep, 'cmdlineopts':GlobalVars.__cmdLineOpts__, 'config':config }
+ 
+     # Make policy aware of the commons
diff --git a/sos-bz782589-fix-symlink-target-collection.patch b/sos-bz782589-fix-symlink-target-collection.patch
new file mode 100644
index 0000000..64ad8ce
--- /dev/null
+++ b/sos-bz782589-fix-symlink-target-collection.patch
@@ -0,0 +1,14 @@
+diff -up sos-2.2/sos/plugintools.py.orig sos-2.2/sos/plugintools.py
+--- sos-2.2/sos/plugintools.py.orig	2012-03-06 11:21:31.658321690 +0000
++++ sos-2.2/sos/plugintools.py	2012-03-06 11:21:35.126321769 +0000
+@@ -176,6 +176,10 @@ class PluginBase:
+             except OSError:
+                 # self.soslog.debug("skipping symlink creation: already exists (%s)" % dstslname)
+                 return
++            if os.path.isabs(link):
++                self.doCopyFileOrDir(link)
++            else:
++                self.doCopyFileOrDir(os.path.join(os.path.dirname(srcpath), link))
+ 
+             self.copiedFiles.append({'srcpath':srcpath, 'dstpath':rpth, 'symlink':"yes", 'pointsto':link})
+             return
diff --git a/sos-bz784061-gluster-sunrpc.patch b/sos-bz784061-gluster-sunrpc.patch
new file mode 100644
index 0000000..09ed1b3
--- /dev/null
+++ b/sos-bz784061-gluster-sunrpc.patch
@@ -0,0 +1,34 @@
+diff -up sos-2.2/sos/plugins/sunrpc.py.orig sos-2.2/sos/plugins/sunrpc.py
+--- sos-2.2/sos/plugins/sunrpc.py.orig	2012-03-06 16:55:25.004778800 +0000
++++ sos-2.2/sos/plugins/sunrpc.py	2012-03-06 16:55:27.598778861 +0000
+@@ -0,0 +1,30 @@
++## Copyright (C) 2012 Red Hat, Inc., Bryn M. Reeves <bmr at redhat.com>
++
++### This program is free software; you can redistribute it and/or modify
++## it under the terms of the GNU General Public License as published by
++## the Free Software Foundation; either version 2 of the License, or
++## (at your option) any later version.
++
++## This program is distributed in the hope that it will be useful,
++## but WITHOUT ANY WARRANTY; without even the implied warranty of
++## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++## GNU General Public License for more details.
++
++## You should have received a copy of the GNU General Public License
++## along with this program; if not, write to the Free Software
++## Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
++
++import sos.plugintools
++
++class sunrpc(sos.plugintools.PluginBase):
++    """Sun RPC related information
++    """
++    def checkenabled(self):
++       if self.policy().runlevelDefault() in self.policy().runlevelByService("rpcbind"):
++          return True
++       return False
++
++    def setup(self):
++        self.collectExtOutput("/usr/sbin/rpcinfo -p localhost")
++        return
++
diff --git a/sos-bz784862-collect-proc-irq.patch b/sos-bz784862-collect-proc-irq.patch
new file mode 100644
index 0000000..d7112ad
--- /dev/null
+++ b/sos-bz784862-collect-proc-irq.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py
+--- sos-2.2/sos/plugins/kernel.py.orig	2012-03-06 13:01:19.000000000 +0000
++++ sos-2.2/sos/plugins/kernel.py	2012-03-06 13:10:38.638471077 +0000
+@@ -65,6 +65,7 @@ class kernel(sos.plugintools.PluginBase)
+         self.addCopySpec("/etc/modules.conf")
+         self.addCopySpec("/etc/modprobe.conf")
+         self.addCopySpec("/etc/modprobe.d/")
++	self.addCopySpec("/proc/irq/")
+         self.collectExtOutput("/usr/sbin/dkms status")
+         self.addCopySpec("/proc/cmdline")
+         self.addCopySpec("/proc/driver")
diff --git a/sos-bz784874-collect-proc-cgroups.patch b/sos-bz784874-collect-proc-cgroups.patch
new file mode 100644
index 0000000..11ae42d
--- /dev/null
+++ b/sos-bz784874-collect-proc-cgroups.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/cgroups.py.orig sos-2.2/sos/plugins/cgroups.py
+--- sos-2.2/sos/plugins/cgroups.py.orig	2012-03-06 13:08:55.774468733 +0000
++++ sos-2.2/sos/plugins/cgroups.py	2012-03-06 13:08:58.710468796 +0000
+@@ -19,6 +19,7 @@ class cgroups(sos.plugintools.PluginBase
+     """
+ 
+     def setup(self):
++        self.addCopySpec("/proc/cgroups")
+         self.addCopySpec("/etc/sysconfig/cgconfig")
+         self.addCopySpec("/etc/sysconfig/cgred.conf")
+         self.addCopySpec("/etc/cgsnapshot_blacklist.conf")
diff --git a/sos-bz789096-kernel_realtime.patch b/sos-bz789096-kernel_realtime.patch
new file mode 100644
index 0000000..8d87428
--- /dev/null
+++ b/sos-bz789096-kernel_realtime.patch
@@ -0,0 +1,51 @@
+diff -up sos-2.2/sos/plugins/kernel.py.orig sos-2.2/sos/plugins/kernel.py
+--- sos-2.2/sos/plugins/kernel.py.orig	2012-03-06 11:22:54.880323589 +0000
++++ sos-2.2/sos/plugins/kernel.py	2012-03-06 11:23:17.034324094 +0000
+@@ -71,6 +71,11 @@ class kernel(sos.plugintools.PluginBase)
+         self.addCopySpec("/proc/zoneinfo")
+         self.addCopySpec("/proc/sys/kernel/tainted")
+         self.addCopySpec("/proc/buddyinfo")
++        self.addCopySpec("/proc/softirqs")
++        self.addCopySpec("/proc/timer*")
++        self.addCopySpec("/proc/lock*")
++        self.addCopySpec("/sys/devices/system/clocksource/clocksource0/available_clocksource")
++        self.addCopySpec("/sys/devices/system/clocksource/clocksource0/current_clocksource")
+ 
+         return
+ 
+diff -up sos-2.2/sos/plugins/kernel_realtime.py.orig sos-2.2/sos/plugins/kernel_realtime.py
+--- sos-2.2/sos/plugins/kernel_realtime.py.orig	2012-03-06 11:23:54.319324945 +0000
++++ sos-2.2/sos/plugins/kernel_realtime.py	2012-03-06 11:23:17.034324094 +0000
+@@ -0,0 +1,32 @@
++# Copyright 2012 Red Hat Inc.
++# Guy Streeter <streeter redhat com>
++# Bryn M. Reeves <bmr at redhat.com>
++#
++#   This program is free software; you can redistribute it and/or
++#   modify it under the terms of the GNU General Public License
++#   as published by the Free Software Foundation; version 2.
++#
++#   This application is distributed in the hope that it will be useful,
++#   but WITHOUT ANY WARRANTY; without even the implied warranty of
++#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++#   General Public License for more details.
++
++import sos.plugintools
++import os
++
++class kernel_realtime(sos.plugintools.PluginBase):
++    '''Information specific to the realtime kernel
++    '''
++
++    def checkenabled(self):
++        if os.path.exists('/sys/kernel/realtime'):
++            return True
++        return False
++
++    def setup(self):
++        self.addCopySpec('/etc/rtgroups')
++        self.addCopySpec('/proc/sys/kernel/sched_rt_period_us')
++        self.addCopySpec('/proc/sys/kernel/sched_rt_runtime_us')
++        self.addCopySpec('/sys/kernel/realtime')
++        if self.isInstalled('tuna'):
++            self.collectExtOutput('/usr/bin/tuna -CP')
diff --git a/sos-bz790402-obscure-anaconda-ks-passwords.patch b/sos-bz790402-obscure-anaconda-ks-passwords.patch
new file mode 100644
index 0000000..37ba00c
--- /dev/null
+++ b/sos-bz790402-obscure-anaconda-ks-passwords.patch
@@ -0,0 +1,21 @@
+diff -up sos-2.2/sos/plugins/anaconda.py.orig sos-2.2/sos/plugins/anaconda.py
+--- sos-2.2/sos/plugins/anaconda.py.orig	2012-03-06 16:34:44.673750500 +0000
++++ sos-2.2/sos/plugins/anaconda.py	2012-03-06 16:34:57.638750796 +0000
+@@ -32,3 +32,6 @@ class anaconda(sos.plugintools.PluginBas
+         self.addCopySpec("/var/log/anaconda.xlog")
+         return
+ 
++    def postproc(self):
++        self.doRegexSub("/root/anaconda-ks.cfg", r"(\s*rootpw\s*).*", r"\1*** PASSWORD ELIDED ***")
++        return
+diff -up sos-2.2/sos/plugins/general.py.orig sos-2.2/sos/plugins/general.py
+--- sos-2.2/sos/plugins/general.py.orig	2012-03-06 16:34:54.774750731 +0000
++++ sos-2.2/sos/plugins/general.py	2012-03-06 16:34:57.638750796 +0000
+@@ -47,7 +47,6 @@ class general(sos.plugintools.PluginBase
+         self.collectExtOutput("/bin/date", symlink = "date")
+         self.collectExtOutput("/usr/bin/uptime", symlink = "uptime")
+         self.collectExtOutput("/bin/dmesg")
+-        self.addCopySpec("/root/anaconda-ks.cfg")
+         self.collectExtOutput("/usr/sbin/alternatives --display java", symlink = "java")
+         self.collectExtOutput("/usr/bin/readlink -f /usr/bin/java")
+ 
diff --git a/sos-bz810702-hw-collect-mcelog.patch b/sos-bz810702-hw-collect-mcelog.patch
new file mode 100644
index 0000000..16c492c
--- /dev/null
+++ b/sos-bz810702-hw-collect-mcelog.patch
@@ -0,0 +1,11 @@
+diff -up sos-2.2/sos/plugins/hardware.py.orig sos-2.2/sos/plugins/hardware.py
+--- sos-2.2/sos/plugins/hardware.py.orig	2012-05-18 11:32:58.359804933 +0100
++++ sos-2.2/sos/plugins/hardware.py	2012-05-18 11:33:17.075915442 +0100
+@@ -37,6 +37,7 @@ class hardware(sos.plugintools.PluginBas
+         self.addCopySpec("/proc/s390dbf/tape")
+         self.addCopySpec("/sys/bus/scsi")
+         self.addCopySpec("/sys/state")
++        self.addCopySpec("/var/log/mcelog")
+         self.collectExtOutput("python /usr/share/rhn/up2date_client/hardware.py", suggest_filename="hardware.py")
+         self.collectExtOutput("""/bin/echo -e "lspci:\n" ; /sbin/lspci ; /bin/echo -e "\nlspci -nvv:\n" ; /sbin/lspci -nvv ; /bin/echo -e "\nlspci -tv:\n" ; /sbin/lspci -tv""", suggest_filename = "lspci", symlink = "lspci")
+ 
diff --git a/sos-bz812395-ipa-updates.patch b/sos-bz812395-ipa-updates.patch
new file mode 100644
index 0000000..d1d336c
--- /dev/null
+++ b/sos-bz812395-ipa-updates.patch
@@ -0,0 +1,108 @@
+diff -up sos-2.2/sos/plugins/apache.py.orig sos-2.2/sos/plugins/apache.py
+--- sos-2.2/sos/plugins/apache.py.orig	2012-05-15 18:27:52.822404631 +0100
++++ sos-2.2/sos/plugins/apache.py	2012-05-15 18:28:03.005464754 +0100
+@@ -18,10 +18,16 @@ class apache(sos.plugintools.PluginBase)
+     """Apache related information
+     """
+     optionList = [("log", "gathers all apache logs", "slow", False)]
++
++    def checkenabled(self):
++        if self.isInstalled("httpd"):
++            return True
++        return False
+     
+     def setup(self):
+         self.addCopySpec("/etc/httpd/conf/httpd.conf")
+         self.addCopySpec("/etc/httpd/conf.d/*.conf")
++        self.addForbiddenPath("/etc/httpd/conf/password.conf")
+         if self.getOption("log"):
+             self.addCopySpec("/var/log/httpd/*")
+         return
+diff -up sos-2.2/sos/plugins/ipa.py.orig sos-2.2/sos/plugins/ipa.py
+--- sos-2.2/sos/plugins/ipa.py.orig	2012-05-15 18:27:52.823404637 +0100
++++ sos-2.2/sos/plugins/ipa.py	2012-05-15 18:28:03.006464760 +0100
+@@ -20,18 +20,56 @@ import os
+ class ipa(sos.plugintools.PluginBase):
+     """IPA diagnostic information
+     """
+-    # ntp and dirserver stuff are covered in existing sos plugins, so we really only
+-    # need to get kerberos and ipa specific addons.
++
++    ipa_server = False
++    ipa_client = False
+ 
+     def checkenabled(self):
+-       if self.isInstalled("ipa-server") or os.path.exists("/etc/ipa"):
+-          return True
+-       return False
++        self.ipa_server = self.isInstalled("ipa-server")
++        self.ipa_client = self.isInstalled("ipa-client")
++        if self.ipa_server or self.ipa_client:
++            return True
++        return False
+ 
+     def setup(self):
+-        self.addCopySpec("/etc/dirsrv/ds.keytab")
+-        self.addCopySpec("/etc/ipa/ipa.conf")
+-        self.addCopySpec("/etc/krb5.conf")
+-        self.addCopySpec("/etc/krb5.keytab")
++        self.addCopySpec("/etc/hosts")
++        if self.ipa_server:
++            self.addCopySpec("/var/log/ipaserver-install.log")
++            self.addCopySpec("/var/log/ipareplica-install.log")
++        if self.ipa_client:
++            self.addCopySpec("/var/log/ipaclient-install.log")
++
++        self.addCopySpec("/var/log/ipaupgrade.log")
++
++        self.addCopySpec("/var/log/krb5kdc.log")
++
++        self.addCopySpec("/var/log/pki-ca/debug")
++        self.addCopySpec("/var/log/pki-ca/catalina.out")
++        self.addCopySpec("/var/log/pki-ca/system")
++        self.addCopySpec("/var/log/pki-ca/transactions")
++        self.addForbiddenPath("/etc/pki/nssdb/key*")
++        self.addForbiddenPath("/etc/pki-ca/flatfile.txt")
++        self.addForbiddenPath("/etc/pki-ca/password.conf")
++        self.addForbiddenPath("/var/lib/pki-ca/alias/key*")
++
++        self.addCopySpec("/var/log/dirsrv/slapd-*/logs/access")
++        self.addCopySpec("/var/log/dirsrv/slapd-*/logs/errors")
++        self.addCopySpec("/etc/dirsrv/slapd-*/dse.ldif")
++        self.addCopySpec("/etc/dirsrv/slapd-*/schema/99user.ldif")
++        self.addForbiddenPath("/etc/dirsrv/slapd-*/key*")
++        self.addForbiddenPath("/etc/dirsrv/slapd-*/pin.txt")
++        self.addForbiddenPath("/etc/dirsrv/slapd-*/pwdfile.txt")
++
++        self.collectExtOutput("ls -la /etc/dirsrv/slapd-*/schema/")
++
++        self.collectExtOutput("ipa-getcert list")
++
++        self.collectExtOutput("certutil -L -d /etc/httpd/alias/")
++        self.collectExtOutput("certutil -L -d /etc/dirsrv/slapd-*/")
++
++        self.collectExtOutput("klist -ket /etc/dirsrv/ds.keytab")
++        self.collectExtOutput("klist -ket /etc/httpd/conf/ipa.keytab")
++        self.collectExtOutput("klist -ket /etc/krb5.keytab")
++
+         return
+ 
+diff -up sos-2.2/sos/plugins/named.py.orig sos-2.2/sos/plugins/named.py
+--- sos-2.2/sos/plugins/named.py.orig	2012-05-15 18:27:52.825404648 +0100
++++ sos-2.2/sos/plugins/named.py	2012-05-15 18:28:03.006464760 +0100
+@@ -40,5 +40,15 @@ class named(sos.plugintools.PluginBase):
+                 self.addCopySpec(self.getDnsDir(cfg))
+                 self.addForbiddenPath(join(self.getDnsDir(cfg),"chroot/dev"))
+                 self.addForbiddenPath(join(self.getDnsDir(cfg),"chroot/proc"))
++
++        self.addCopySpec("/etc/named/")
+         self.addCopySpec("/etc/sysconfig/named")
++        self.collectExtOutput("klist -ket /etc/named.keytab")
++        self.addForbiddenPath("/etc/named.keytab")
+         return
++
++    def postproc(self):
++        match = r"(\s*arg \"password )[^\"]*"
++        subst = r"\1*** PASSWORD REDACTED ***"
++        self.doRegexSub("/etc/named.conf", match, subst)
++
diff --git a/sos-bz814474-libvirt-wildcard-logs.patch b/sos-bz814474-libvirt-wildcard-logs.patch
new file mode 100644
index 0000000..f179867
--- /dev/null
+++ b/sos-bz814474-libvirt-wildcard-logs.patch
@@ -0,0 +1,9 @@
+diff -up sos-2.2/sos/plugins/libvirt.py.orig sos-2.2/sos/plugins/libvirt.py
+--- sos-2.2/sos/plugins/libvirt.py.orig	2012-05-01 18:33:36.212641798 +0100
++++ sos-2.2/sos/plugins/libvirt.py	2012-05-01 18:37:09.736902492 +0100
+@@ -18,4 +18,4 @@ class libvirt(sos.plugintools.PluginBase
+     """
+     def setup(self):
+         self.addCopySpec("/etc/libvirt/")
+-        self.addCopySpec("/var/log/libvirt/")
++        self.addCopySpec("/var/log/libvirt*")
diff --git a/sos-bz822442-collect-etc-swift-in-gluster.patch b/sos-bz822442-collect-etc-swift-in-gluster.patch
new file mode 100644
index 0000000..b5e9117
--- /dev/null
+++ b/sos-bz822442-collect-etc-swift-in-gluster.patch
@@ -0,0 +1,13 @@
+diff -up sos-2.2/sos/plugins/gluster.py.orig sos-2.2/sos/plugins/gluster.py
+--- sos-2.2/sos/plugins/gluster.py.orig	2012-05-23 13:48:59.093154956 +0100
++++ sos-2.2/sos/plugins/gluster.py	2012-05-23 13:53:17.685160857 +0100
+@@ -61,6 +61,9 @@ class gluster(sos.plugintools.PluginBase
+             self.addCopySpec("/var/lib/glusterd/")
+             self.addForbiddenPath("/var/lib/glusterd/geo-replication/secret.pem")
+ 
++        # collect unified file and object storage configuration
++        self.addCopySpec("/etc/swift/")
++
+         # glusterfs-server rpm scripts stash this on migration to 3.3.x
+         self.addCopySpec("/etc/glusterd.rpmsave")
+ 
diff --git a/sos.spec b/sos.spec
index 9c79e5a..e1565b2 100644
--- a/sos.spec
+++ b/sos.spec
@@ -3,7 +3,7 @@
 Summary: A set of tools to gather troubleshooting information from a system
 Name: sos
 Version: 2.2
-Release: 3%{?dist}
+Release: 29%{?dist}
 Group: Applications/System
 Source0: https://fedorahosted.org/releases/s/o/sos/%{name}-%{version}.tar.gz
 License: GPLv2+
@@ -16,9 +16,73 @@ Requires: libxml2-python
 Requires: tar
 Requires: bzip2
 Requires: xz
+Requires: rpm-python
 Provides: sysreport = 1.4.3-13
 Obsoletes: sysreport
 
+Patch0:  sos-bz582259.patch
+Patch1:  sos-bz584253.patch
+Patch2:  sos-bz585942.patch
+Patch3:  sos-bz622527-add-anacrontab.patch
+Patch4:  sos-bz622528-redhat-release-6-fixes.patch
+Patch5:  sos-bz622784-parted-dumpe2fs-s390.patch
+Patch6:  sos-bz624162-add-sssd.patch
+Patch7:  sos-bz622407-cluster-el6-fixes.patch
+Patch8:  sos-bz678665-collect-entitlement-certs.patch
+Patch9:  sos-bz659467-startup-drop-LC_ALL.patch
+Patch10: sos-bz676522-collect-etc-dhcp.patch
+Patch11: sos-bz675559-devicemapper-collect-ls-tree.patch
+Patch12: sos-bz679433-filesys-add-lsblk-output.patch
+Patch13: sos-bz622784-filesys-no-print-regex-debug.patch
+Patch14: sos-bz689387-use-sha256-in-fips-mode.patch
+Patch15: sos-bz600813-collect-repolist-by-default.patch
+Patch16: sos-bz673244-add-infiniband-plugin.patch
+patch17: sos-bz676656-add-iscsi-target-plugin.patch
+Patch18: sos-bz682124-add-nslcd-conf-to-ldap-plugin.patch
+Patch19: sos-bz683404-fix-autofs-LC_ALL-usage.patch
+Patch20: sos-bz691477-fix-lsusb-and-add-t-and-v.patch
+Patch21: sos-bz726360-qpidd-extend.patch
+Patch22: sos-bz726427-add-ethtool-acg.patch
+Patch23: sos-2.2-bz704383-fix-lvm-data-collection.patch
+Patch24: sos-2.2-bz709491-add-vmmemctl-to-vmware-plugin.patch
+Patch25: sos-bz694813-general-collect-etc-init-and-fix-whitespace.patch
+Patch26: sos-bz713449-dont-strip-command-output.patch
+Patch27: sos-bz721163-add-ipv6-neighbour-table-to-networking-plugin.patch
+Patch28: sos-bz729455-collect-basic-cgroups-data.patch
+Patch29: sos-bz714293-collect-etc-rhsm.patch
+Patch30: sos-bz683219-truncate-large-files.patch
+Patch31: sos-bz697899-collect-brctl-output.patch
+Patch32: sos-bz736718-fix-hardware-plugin-paths.patch
+Patch33: sos-bz736718-fix-hardware.py-exec.patch
+Patch34: sos-bz691477-support-new-usbutils.patch
+Patch35: sos-bz750607-forbid-more-pki-paths.patch
+Patch36: sos-bz760995-fence_virt-conf.patch
+Patch37: sos-bz730641-fix-prox-net.patch
+Patch38: sos-bz760424-gather-cpufreq-info.patch
+Patch39: sos-bz751273-fix-brctl-showstp.patch
+Patch40: sos-bz749919-add-modprobe-dot-d.patch
+Patch41: sos-bz782589-fix-symlink-target-collection.patch
+Patch42: sos-bz749262-fix-sat-proxy-package-detection.patch
+Patch43: sos-bz739080-collect-stderr.patch
+Patch44: sos-bz784874-collect-proc-cgroups.patch
+Patch45: sos-bz784862-collect-proc-irq.patch
+Patch46: sos-bz767827-fix-rpm-qa-for-long-pkg-name.patch
+Patch47: sos-bz766583-allow-nonroot-symlinks.patch
+Patch48: sos-bz771501-fix-rsyslog-collection-and-size-limit.patch
+Patch49: sos-bz749279-fix-rhn-el6-tomcat.patch
+Patch50: sos-bz790402-obscure-anaconda-ks-passwords.patch
+Patch51: sos-bz784061-gluster-sunrpc.patch
+Patch52: sos-bz752666-cloudforms-debug.patch
+Patch53: sos-bz782339-unbreak-logging.patch
+Patch54: sos-bz771393-improve-report-name-sanitization.patch
+Patch55: sos-bz789096-kernel_realtime.patch
+Patch56: sos-bz752549-add-gluster-module.patch
+Patch57: sos-bz752549-gluster-forbid-more-pem-paths.patch
+Patch58: sos-bz814474-libvirt-wildcard-logs.patch
+Patch59: sos-bz810702-hw-collect-mcelog.patch
+Patch60: sos-bz822442-collect-etc-swift-in-gluster.patch
+Patch61: sos-bz812395-ipa-updates.patch
+
 %description
 Sos is a set of tools that gathers information about system
 hardware and configuration. The information can then be used for
@@ -27,6 +91,69 @@ support technicians and developers.
 
 %prep
 %setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+%patch22 -p1
+%patch23 -p1
+%patch24 -p1
+%patch25 -p1
+%patch26 -p1
+%patch27 -p1
+%patch28 -p1
+%patch29 -p1
+%patch30 -p1
+%patch31 -p1
+%patch32 -p1
+%patch33 -p1
+%patch34 -p1
+%patch35 -p1
+%patch36 -p1
+%patch37 -p1
+%patch38 -p1
+%patch39 -p1
+%patch40 -p1
+%patch41 -p1
+%patch42 -p1
+%patch43 -p1
+%patch44 -p1
+%patch45 -p1
+%patch46 -p1
+%patch47 -p1
+%patch48 -p1
+%patch49 -p1
+%patch50 -p1
+%patch51 -p1
+%patch52 -p1
+%patch53 -p1
+%patch54 -p1
+%patch55 -p1
+%patch56 -p1
+%patch57 -p1
+%patch58 -p1
+%patch59 -p1
+%patch60 -p1
+%patch61 -p1
 
 %build
 make
@@ -50,33 +177,228 @@ rm -rf ${RPM_BUILD_ROOT}
 %config(noreplace) %{_sysconfdir}/sos.conf
 
 %changelog
-* Sat Jan 14 2012 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.2-3
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
-
-* Wed Feb 09 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 2.2-2
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
-
-* Thu Jul 22 2010 David Malcolm <dmalcolm at redhat.com> - 2.2-1
-- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild
-
-* Thu May 20 2010 Adam Stokes <ajs at redhat dot com> = 2.2-0
-- Corosync plugin added
-- Cluster plugin updated
-
-* Thu Apr 22 2010 Adam Stokes <ajs at redhat dot com> = 2.1-0
-- Include --help in manpage
-- If tmp-dir is defined then put compressed archive there
-
-* Sun Apr 11 2010 Adam Stokes <ajs at redhat dot com> = 2.0-0
-- Bump release to 2
-- Fix problem where sos generates error on newline in hostname
-- Remove references to sysreport*
-
-* Tue Mar 30 2010 Adam Stokes <ajs at redhat dot com> = 1.9-5
-- Remove references to rh-upload
-
-* Fri Mar 26 2010 Adam Stokes <ajs at redhat dot com> = 1.9-4
+* Wed May 23 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-29.el6
+- Collect the swift configuration directory in gluster module
+  Resolves: bz822442
+- Update IPA module and related plug-ins
+  Resolves: bz812395
+
+* Fri May 18 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-28.el6
+- Collect mcelog files in the hardware module
+  Resolves: bz810702
+
+* Wed May 02 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-27.el6
+- Add nfs statedump collection to gluster module
+  Resolves: bz752549
+
+* Tue May 01 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-26.el6
+- Use wildcard to match possible libvirt log paths
+  Resolves: bz814474
+
+* Mon Apr 23 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-25.el6
+- Add forbidden paths for new location of gluster private keys
+  Resolves: bz752549
+
+* Fri Mar  9 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-24.el6
+- Fix katello and aeolus command string syntax
+  Resolves: bz752666
+- Remove stray hunk from gluster module patch
+  Resolves: bz784061
+
+* Thu Mar  8 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-22.el6
+- Correct aeolus debug invocation in CloudForms module
+  Resolves: bz752666
+- Update gluster module for gluster-3.3
+  Resolves: bz784061
+- Add additional command output to gluster module
+  Resolves: bz768641
+- Add support for collecting gluster configuration and logs
+  Resolves: bz752549
+
+* Wed Mar  7 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-19.el6
+- Collect additional diagnostic information for realtime systems
+  Resolves: bz789096
+- Improve sanitization of RHN user and case number in report name
+  Resolves: bz771393
+- Fix verbose output and debug logging
+  Resolves: bz782339 
+- Add basic support for CloudForms data collection
+  Resolves: bz752666
+- Add support for Subscription Asset Manager diagnostics
+  Resolves: bz752670
+
+* Tue Mar  6 2012 Bryn M. Reeves <bmr at redhat.com> = 2.2-18.el6
+- Collect fence_virt.conf in cluster module
+  Resolves: bz760995
+- Fix collection of /proc/net directory tree
+  Resolves: bz730641
+- Gather output of cpufreq-info when present
+  Resolves: bz760424
+- Fix brctl showstp output when bridges contain multiple interfaces
+  Resolves: bz751273
+- Add /etc/modprobe.d to kernel module
+  Resolves: bz749919
+- Ensure relative symlink targets are correctly handled when copying
+  Resolves: bz782589
+- Fix satellite and proxy package detection in rhn plugin
+  Resolves: bz749262
+- Collect stderr output from external commands
+  Resolves: bz739080
+- Collect /proc/cgroups in the cgroups module
+  Resolve: bz784874
+- Collect /proc/irq in the kernel module
+  Resolves: bz784862
+- Fix installed-rpms formatting for long package names
+  Resolves: bz767827
+- Add symbolic links for truncated log files
+  Resolves: bz766583
+- Collect non-standard syslog and rsyslog log files
+  Resolves: bz771501
+- Use correct paths for tomcat6 in RHN module
+  Resolves: bz749279
+- Obscure root password if present in anacond-ks.cfg
+  Resolves: bz790402
+- Do not accept embedded forward slashes in RHN usernames
+  Resolves: bz771393
+- Add new sunrpc module to collect rpcinfo for gluster systems
+  Resolves: bz784061
+
+* Tue Nov  1 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-17
+- Do not collect subscription manager keys in general plugin
+  Resolves: bz750607
+ 
+* Fri Sep 23 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-16
+- Fix execution of RHN hardware.py from hardware plugin
+  Resolves: bz736718
+- Fix hardware plugin to support new lsusb path
+  Resolves: bz691477
+
+* Fri Sep 09 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-15
+- Fix brctl collection when a bridge contains no interfaces
+  Resolves: bz697899
+- Fix up2dateclient path in hardware plugin
+  Resolves: bz736718
+
+* Mon Aug 15 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-14
+- Collect brctl show and showstp output
+  Resolves: bz697899
+- Collect nslcd.conf in ldap plugin
+  Resolves: bz682124
+
+* Sun Aug 14 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-11
+- Truncate files that exceed specified size limit
+  Resolves: bz683219
+- Add support for collecting Red Hat Subscrition Manager configuration
+  Resolves: bz714293
+- Collect /etc/init on systems using upstart
+  Resolves: bz694813
+- Don't strip whitespace from output of external programs
+  Resolves: bz713449
+- Collect ipv6 neighbour table in network module
+  Resolves: bz721163
+- Collect basic cgroups configuration data
+  Resolves: bz729455
+
+* Sat Aug 13 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-10
+- Fix collection of data from LVM2 reporting tools in devicemapper plugin
+  Resolves: bz704383
+- Add /proc/vmmemctl collection to vmware plugin
+  Resolves: bz709491
+
+* Fri Aug 12 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-9
+- Collect yum repository list by default
+  Resolves: bz600813
+- Add basic Infiniband plugin
+  Resolves: bz673244
+- Add plugin for scsi-target-utils iSCSI target
+  Resolves: bz677124
+- Fix autofs plugin LC_ALL usage
+  Resolves: bz683404
+- Fix collection of lsusb and add collection of -t and -v outputs
+  Resolves: bz691477
+- Extend data collection by qpidd plugin
+  Resolves: bz726360
+- Add ethtool pause, coalesce and ring (-a, -c, -g) options to network plugin
+  Resolves: bz726427
+
+* Thu Apr 07 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-8
+- Use sha256 for report digest when operating in FIPS mode
+  Resolves: bz689387
+ 
+* Tue Apr 05 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-7
+- Fix parted and dumpe2fs output on s390
+  Resolves: bz622784
+
+* Fri Feb 25 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-6
+- Fix collection of chkconfig output in startup.py
+  Resolves: bz659467
+- Collect /etc/dhcp in dhcp.py plugin
+  Resolves: bz676522
+- Collect dmsetup ls --tree output in devicemapper.py
+  Resolves: bz675559
+- Collect lsblk output in filesys.py
+  Resolves: bz679433
+
+* Thu Feb 24 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-4
+- Fix collection of logs and config files in sssd.py
+  Resolves: bz624162
+- Add support for collecting entitlement certificates in rhn.py
+  Resolves: bz678665
+
+* Thu Feb 03 2011 Bryn M. Reeves <bmr at redhat.com> = 2.2-3
+- Fix cluster plugin dlm lockdump for el6
+  Resolves: bz622407
+- Add sssd plugin to collect configuration and logs
+  Resolves: bz624162
+- Collect /etc/anacrontab in system plugin
+  Resolves: bz622527
+- Correct handling of redhat-release for el6
+  Resolves: bz622528
+
+* Thu Jul 29 2010 Adam Stokes <ajs at redhat dot com> = 2.2-2
+- Resolves: bz582259
+- Resolves: bz585942
+- Resolves: bz584253
+- Resolves: bz581817
+
+* Thu Jun 10 2010 Adam Stokes <ajs at redhat dot com> = 2.2-0
+- Resolves: bz581921
+- Resolves: bz584253
+- Resolves: bz562651
+- Resolves: bz566170
+- Resolves: bz586450
+- Resolves: bz588223
+- Resolves: bz559737
+- Resolves: bz586405
+- Resolves: bz598978
+- Resolves: bz584763
+
+* Wed Apr 28 2010 Adam Stokes <ajs at redhat dot com> = 2.1-0
+- Resolves: bz585923
+- Resolves: bz585942
+- Resolves: bz586409
+- Resolves: bz586389
+- Resolves: bz548096
+- Resolves: bz557828
+- Resolves: bz563637
+- Resolves: bz584253
+- Resolves: bz462823
+- Resolves: bz528881
+- Resolves: bz566170
+- Resolves: bz578787
+- Resolves: bz581817
+- Resolves: bz581826
+- Resolves: bz584695
+- Resolves: bz568637
+- Resolves: bz584767
+- Resolves: bz586370
+
+* Mon Apr 12 2010 Adam Stokes <ajs at redhat dot com> = 2.0-0
+- Resolves: bz580015
+
+* Tue Mar 30 2010 Adam Stokes <ajs at redhat dot com> = 1.9-3
 - fix setup.py to autocompile translations and man pages
+- rebase 1.9
 
 * Fri Mar 19 2010 Adam Stokes <ajs at redhat dot com> = 1.9-2
 - updated translations
@@ -133,10 +455,6 @@ rm -rf ${RPM_BUILD_ROOT}
 * Wed Feb 25 2009 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.8-10
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
 
-* Wed Jan 21 2009 Adam Stokes <ajs at redhat dot com> - 1.8-9
-- Resolves: bz436053 /usr/share/sos is not owned by any package
-- Resolves: bz434626 Wrong directory structure for translations
-
 * Mon Dec 29 2008 Adam Stokes <ajs at redhat dot com> - 1.8-5
 - removed source defines as python manifest handles this
 
diff --git a/sources b/sources
index 5b2e59a..a876920 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-907db46b18a1552fa4fcfed97fa10a99  sos-2.2.tar.gz
+14a1c1e96dac3e8d25064c8435a5e0ec  sos-2.2.tar.gz


More information about the scm-commits mailing list