[sblim-cmpi-sysfs] Fix provider segfaults when enumerating instances of Linux_SysfsAttribute class, Fix provider doesn'
vcrhonek
vcrhonek at fedoraproject.org
Tue Nov 8 15:52:03 UTC 2011
commit 85443ef57184a956d748306e16e73f8ad5346ecd
Author: Vitezslav Crhonek <vcrhonek at redhat.com>
Date: Tue Nov 8 16:51:37 2011 +0100
Fix provider segfaults when enumerating instances of Linux_SysfsAttribute class, Fix provider doesn't show much sysfs entries, Add mofs registration for various CIMOMs
sblim-cmpi-sysfs-1.2.0-provider-segfault.patch | 12 +++
sblim-cmpi-sysfs-1.2.0-sysfs-links.patch | 16 ++++
sblim-cmpi-sysfs.spec | 106 +++++++++++++++++++++---
3 files changed, 122 insertions(+), 12 deletions(-)
---
diff --git a/sblim-cmpi-sysfs-1.2.0-provider-segfault.patch b/sblim-cmpi-sysfs-1.2.0-provider-segfault.patch
new file mode 100644
index 0000000..97127c8
--- /dev/null
+++ b/sblim-cmpi-sysfs-1.2.0-provider-segfault.patch
@@ -0,0 +1,12 @@
+diff -up sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c.orig sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c
+--- sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c.orig 2011-11-03 13:24:11.722220576 +0100
++++ sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c 2011-11-03 13:24:46.621218152 +0100
+@@ -123,7 +123,7 @@ CMPIInstance * Linux_SysfsAttributeUtil
+ }
+
+ /* Read the instance value from the instance file */
+- if ( (fileinfo.st_mode & S_IRUSR) && (instancefile = fopen(instancename,"r")) != NULL) {
++ if ( (fileinfo.st_mode & S_IRUSR) && (fileinfo.st_size > 0) && (instancefile = fopen(instancename,"r")) != NULL) {
+ /* Read in each of the whitespace separated values from the file */
+ fscanf(instancefile, " %s", buffer);
+ while (fscanf(instancefile, " %s", val) != EOF) {
diff --git a/sblim-cmpi-sysfs-1.2.0-sysfs-links.patch b/sblim-cmpi-sysfs-1.2.0-sysfs-links.patch
new file mode 100644
index 0000000..444bd39
--- /dev/null
+++ b/sblim-cmpi-sysfs-1.2.0-sysfs-links.patch
@@ -0,0 +1,16 @@
+diff -up sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c.orig sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c
+--- sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c.orig 2009-05-22 04:45:48.000000000 +0200
++++ sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c 2011-11-03 13:35:01.437175460 +0100
+@@ -91,10 +91,10 @@ CMPIInstance * Linux_SysfsDeviceUtil_mak
+ void * Linux_SysfsDeviceUtil_beginEnumeration( void * location )
+ {
+ FILE * handle;
+- char * findcommand = malloc(strlen((char *)location)+38);
++ char * findcommand = malloc(strlen((char *)location)+41);
+
+ /* Find all the instance names in the target location */
+- sprintf(findcommand, "find %s -maxdepth 1 -mindepth 1 -type d", (char *)location);
++ sprintf(findcommand, "find -L %s -maxdepth 1 -mindepth 1 -type d", (char *)location);
+ handle = popen(findcommand,"r");
+ free(findcommand);
+ return handle;
diff --git a/sblim-cmpi-sysfs.spec b/sblim-cmpi-sysfs.spec
index 79ab1c9..3bee7df 100644
--- a/sblim-cmpi-sysfs.spec
+++ b/sblim-cmpi-sysfs.spec
@@ -2,7 +2,7 @@
Name: sblim-cmpi-sysfs
Version: 1.2.0
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: SBLIM sysfs instrumentation
Group: Applications/System
@@ -11,6 +11,13 @@ URL: http://sblim.wiki.sourceforge.net/
Source0: http://downloads.sourceforge.net/sblim/%{name}-%{version}.tar.bz2
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+# Patch0: already upstream,
+# see http://sourceforge.net/tracker/index.php?func=detail&aid=2818227&group_id=128809&atid=712784
+Patch0: sblim-cmpi-sysfs-1.2.0-provider-segfault.patch
+# Patch1: issue reported upstream, patch not accepted yet,
+# see http://sourceforge.net/tracker/index.php?func=detail&aid=2818223&group_id=128809&atid=712784
+Patch1: sblim-cmpi-sysfs-1.2.0-sysfs-links.patch
+
BuildRequires: sblim-cmpi-devel sblim-cmpi-base-devel
Requires: sblim-cmpi-base cim-server
@@ -28,6 +35,8 @@ SBLIM Base Params Testcase Files for SBLIM Testsuite
%prep
%setup -q
+%patch0 -p1 -b .provider-segfault
+%patch1 -p1 -b .sysfs-links
sed -ri 's,-type d -maxdepth 1 -mindepth 1,-maxdepth 1 -mindepth 1 -type d,g' \
./test/system/linux/*.{sh,system}
@@ -80,32 +89,105 @@ rm -rf $RPM_BUILD_ROOT
%{_datadir}/sblim-testsuite/system/linux/Linux_Sysfs*
-%define SYSFS_SCHEMA %{_datadir}/%{name}/Linux_SysfsAttribute.mof %{_datadir}/%{name}/Linux_SysfsBlockDevice.mof %{_datadir}/%{name}/Linux_SysfsBusDevice.mof %{_datadir}/%{name}/Linux_SysfsInputDevice.mof %{_datadir}/%{name}/Linux_SysfsNetworkDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.mof %{_datadir}/%{name}/Linux_SysfsTTYDevice.mof
-%define SYSFS_REGISTRATION %{_datadir}/%{name}/Linux_SysfsAttribute.registration %{_datadir}/%{name}/Linux_SysfsBlockDevice.registration %{_datadir}/%{name}/Linux_SysfsBusDevice.registration %{_datadir}/%{name}/Linux_SysfsInputDevice.registration %{_datadir}/%{name}/Linux_SysfsNetworkDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.registration %{_datadir}/%{name}/Linux_SysfsTTYDevice.registration
+%define SCHEMA %{_datadir}/%{name}/Linux_SysfsAttribute.mof %{_datadir}/%{name}/Linux_SysfsBlockDevice.mof %{_datadir}/%{name}/Linux_SysfsBusDevice.mof %{_datadir}/%{name}/Linux_SysfsInputDevice.mof %{_datadir}/%{name}/Linux_SysfsNetworkDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.mof %{_datadir}/%{name}/Linux_SysfsTTYDevice.mof
+%define REGISTRATION %{_datadir}/%{name}/Linux_SysfsAttribute.registration %{_datadir}/%{name}/Linux_SysfsBlockDevice.registration %{_datadir}/%{name}/Linux_SysfsBusDevice.registration %{_datadir}/%{name}/Linux_SysfsInputDevice.registration %{_datadir}/%{name}/Linux_SysfsNetworkDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.registration %{_datadir}/%{name}/Linux_SysfsTTYDevice.registration
%pre
-if [ $1 -gt 1 ]; then
+function unregister()
+{
%{_datadir}/%{name}/provider-register.sh -d \
- -r %{SYSFS_REGISTRATION} -m %{SYSFS_SCHEMA} > /dev/null 2>&1 || :;
+ $1 \
+ -m %{SCHEMA} \
+ -r %{REGISTRATION} > /dev/null 2>&1 || :;
+ # don't let registration failure when server not running fail upgrade!
+}
+
+# If upgrading, deregister old version
+if [ $1 -gt 1 ]
+then
+ unregistered=no
+ if [ -e /usr/sbin/cimserver ]; then
+ unregister "-t pegasus";
+ unregistered=yes
+ fi
+
+ if [ -e /usr/sbin/sfcbd ]; then
+ unregister "-t sfcb";
+ unregistered=yes
+ fi
+
+ if [ "$unregistered" != yes ]; then
+ unregister
+ fi
fi
%post
+function register()
+{
+ # The follwoing script will handle the registration for various CIMOMs.
+ %{_datadir}/%{name}/provider-register.sh \
+ $1 \
+ -m %{SCHEMA} \
+ -r %{REGISTRATION} > /dev/null 2>&1 || :;
+ # don't let registration failure when server not running fail install!
+}
+
/sbin/ldconfig
-if [ $1 -ge 1 ]; then
- %{_datadir}/%{name}/provider-register.sh \
- -r %{SYSFS_REGISTRATION} -m %{SYSFS_SCHEMA} > /dev/null 2>&1 || :;
+if [ $1 -ge 1 ]
+then
+ registered=no
+ if [ -e /usr/sbin/cimserver ]; then
+ register "-t pegasus";
+ registered=yes
+ fi
+
+ if [ -e /usr/sbin/sfcbd ]; then
+ register "-t sfcb";
+ registered=yes
+ fi
+
+ if [ "$registered" != yes ]; then
+ register
+ fi
fi
%preun
-if [ $1 -eq 0 ]; then
- %{_datadir}/%{name}/provider-register.sh -d \
- -r %{SYSFS_REGISTRATION} -m %{SYSFS_SCHEMA} > /dev/null 2>&1 || :;
+function unregister()
+{
+ %{_datadir}/%{name}/provider-register.sh -d \
+ $1 \
+ -m %{SCHEMA} \
+ -r %{REGISTRATION} > /dev/null 2>&1 || :;
+ # don't let registration failure when server not running fail erase!
+}
+
+if [ $1 -eq 0 ]
+then
+ unregistered=no
+ if [ -e /usr/sbin/cimserver ]; then
+ unregister "-t pegasus";
+ unregistered=yes
+ fi
+
+ if [ -e /usr/sbin/sfcbd ]; then
+ unregister "-t sfcb";
+ unregistered=yes
+ fi
+
+ if [ "$unregistered" != yes ]; then
+ unregister
+ fi
fi
-
+
%postun -p /sbin/ldconfig
%changelog
+* Tue Nov 08 2011 Vitezslav Crhonek <vcrhonek at redhat.com> - 1.2.0-3
+- Fix provider segfaults when enumerating instances of Linux_SysfsAttribute class
+- Fix provider doesn't show much sysfs entries
+- Add mofs registration for various CIMOMs
+
* Wed Feb 09 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.2.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
More information about the scm-commits
mailing list