diff --git a/.python-dmidecode.metadata b/.python-dmidecode.metadata new file mode 100644 index 0000000..28d59f7 --- /dev/null +++ b/.python-dmidecode.metadata @@ -0,0 +1 @@ +e3473db49f81b30aa50f4e05c9a91512399788ab SOURCES/python-dmidecode-3.10.13.tar.xz diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/SIGILL-catcher.patch b/SOURCES/SIGILL-catcher.patch new file mode 100644 index 0000000..f99e474 --- /dev/null +++ b/SOURCES/SIGILL-catcher.patch @@ -0,0 +1,122 @@ +diff --git a/src/util.c b/src/util.c +index 2eebf30..4d1be64 100644 +--- a/src/util.c ++++ b/src/util.c +@@ -44,6 +44,7 @@ + #include + #include + #include ++#include + + #include "types.h" + #include "util.h" +@@ -87,6 +88,23 @@ int checksum(const u8 * buf, size_t len) + return (sum == 0); + } + ++/* Static global variables which should only ++ * be used by the sigill_handler() ++ */ ++static int sigill_error = 0; ++static Log_t *sigill_logobj = NULL; ++ ++void sigill_handler(int ignore_this) { ++ sigill_error = 1; ++ if( sigill_logobj ) { ++ log_append(sigill_logobj, LOGFL_NODUPS, LOG_WARNING, ++ "SIGILL signal caught in mem_chunk()"); ++ } else { ++ fprintf(stderr, ++ "** WARNING ** SIGILL signal caught in mem_chunk()\n"); ++ } ++} ++ + /* + * Copy a physical memory chunk into a memory buffer. + * This function allocates memory. +@@ -100,15 +118,20 @@ void *mem_chunk(Log_t *logp, size_t base, size_t len, const char *devmem) + size_t mmoffset; + void *mmp; + #endif +- +- if((fd = open(devmem, O_RDONLY)) == -1) { +- log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s: %s", devmem, strerror(errno)); +- return NULL; ++ sigill_logobj = logp; ++ signal(SIGILL, sigill_handler); ++ if(sigill_error || (fd = open(devmem, O_RDONLY)) == -1) { ++ log_append(logp, LOGFL_NORMAL, LOG_WARNING, ++ "Failed to open memory buffer (%s): %s", ++ devmem, strerror(errno)); ++ p = NULL; ++ goto exit; + } + +- if((p = malloc(len)) == NULL) { +- log_append(logp, LOGFL_NORMAL, LOG_WARNING, "malloc: %s", strerror(errno)); +- return NULL; ++ if(sigill_error || (p = malloc(len)) == NULL) { ++ log_append(logp, LOGFL_NORMAL, LOG_WARNING,"malloc: %s", strerror(errno)); ++ p = NULL; ++ goto exit; + } + #ifdef USE_MMAP + #ifdef _SC_PAGESIZE +@@ -122,33 +145,49 @@ void *mem_chunk(Log_t *logp, size_t base, size_t len, const char *devmem) + * to read from /dev/mem using regular read() calls. + */ + mmp = mmap(0, mmoffset + len, PROT_READ, MAP_SHARED, fd, base - mmoffset); +- if(mmp == MAP_FAILED) { ++ if(sigill_error || (mmp == MAP_FAILED)) { + log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s (mmap): %s", devmem, strerror(errno)); + free(p); +- return NULL; ++ p = NULL; ++ goto exit; + } + + memcpy(p, (u8 *) mmp + mmoffset, len); +- +- if(munmap(mmp, mmoffset + len) == -1) { ++ if (sigill_error) { ++ log_append(logp, LOGFL_NODUPS, LOG_WARNING, ++ "Failed to do memcpy() due to SIGILL signal"); ++ free(p); ++ p = NULL; ++ goto exit; ++ } ++ ++ if(sigill_error || (munmap(mmp, mmoffset + len) == -1)) { + log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s (munmap): %s", devmem, strerror(errno)); ++ free(p); ++ p = NULL; ++ goto exit; + } + #else /* USE_MMAP */ +- if(lseek(fd, base, SEEK_SET) == -1) { ++ if(sigill_error || (lseek(fd, base, SEEK_SET) == -1)) { + log_append(logp, LOGFL_NORMAL, LOG_WARNING, "%s (lseek): %s", devmem, strerror(errno)); + free(p); +- return NULL; ++ p = NULL; ++ goto exit; + } + +- if(myread(logp, fd, p, len, devmem) == -1) { ++ if(sigill_error || (myread(logp, fd, p, len, devmem) == -1)) { + free(p); +- return NULL; ++ p = NULL; ++ goto exit; + } + #endif /* USE_MMAP */ + + if(close(fd) == -1) + perror(devmem); + ++ exit: ++ signal(SIGILL, SIG_DFL); ++ sigill_logobj = NULL; + return p; + } + diff --git a/SOURCES/dmispec-remove.patch b/SOURCES/dmispec-remove.patch new file mode 100644 index 0000000..76a0191 --- /dev/null +++ b/SOURCES/dmispec-remove.patch @@ -0,0 +1,39 @@ +From 39869fb9346cd46097bd6d70a90f351938d30296 Mon Sep 17 00:00:00 2001 +From: David Sommerseth +Date: Fri, 5 Apr 2013 18:25:23 +0200 +Subject: [PATCH 1/2] Do not add explictly 'dmispec' attributes inside + switch() in dmi_decode() + +The dmispec attribute is added outside the switch() call, and must not be +duplicated. If this happens, an invalid XML file will be generated. +(Un)fortunately, libxml2 is quite forgiving to this error. But xmllint +will complain about it and other XML libraries (such as python-lxml) +may reject such XML data. + +Signed-off-by: David Sommerseth +--- + src/dmidecode.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/dmidecode.c b/src/dmidecode.c +index 17f2130..215c3f4 100644 +--- a/src/dmidecode.c ++++ b/src/dmidecode.c +@@ -4784,7 +4784,6 @@ xmlNode *dmi_decode(xmlNode *prnt_n, dmi_codes_major *dmiMajor, struct dmi_heade + + case 40: /* 3.3.41 Additional Information */ + dmixml_AddAttribute(sect_n, "subtype", "AdditionalInformation"); +- dmixml_AddAttribute(sect_n, "dmispec", "3.3.41"); + + if(h->length < 0x0B) { + break; +@@ -4795,7 +4794,6 @@ xmlNode *dmi_decode(xmlNode *prnt_n, dmi_codes_major *dmiMajor, struct dmi_heade + + case 41: /* 3.3.42 Onboard Device Extended Information */ + dmixml_AddAttribute(sect_n, "subtype", "OnboardDeviceExtendedInformation"); +- dmixml_AddAttribute(sect_n, "dmispec", "3.3.42"); + + if(h->length < 0x0B) { + break; +-- +1.7.10.2 diff --git a/SOURCES/generate-tarball.sh b/SOURCES/generate-tarball.sh new file mode 100755 index 0000000..b266b4b --- /dev/null +++ b/SOURCES/generate-tarball.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +VERSION=$1 + +# git clone ssh://git.fedorahosted.org/git/python-dmidecode.git +# cd python-dmidecode +git archive --format=tar --prefix=python-dmidecode-$VERSION/ -o python-dmidecode-$VERSION.tar v$VERSION +tar -xvf python-dmidecode-$VERSION.tar +rm -r python-dmidecode-$VERSION/debian +tar -cJvf python-dmidecode-$VERSION.tar.xz python-dmidecode-$VERSION diff --git a/SOURCES/installed-invalid.patch b/SOURCES/installed-invalid.patch new file mode 100644 index 0000000..e318883 --- /dev/null +++ b/SOURCES/installed-invalid.patch @@ -0,0 +1,31 @@ +From 69a1c9ca658c9708698cde6aee32af7bb2e16f9a Mon Sep 17 00:00:00 2001 +From: David Sommerseth +Date: Thu, 20 Jun 2013 12:58:12 +0200 +Subject: [PATCH] Fixed a missing break statement in a switch for DMI section + 3.3.7.2 + +This missing break could cause duplicated 'installed' attributes in + or XML tags. This is only happening +when dmi_memory_module_size() is called and only on some hardware. + +Signed-off-by: David Sommerseth +--- + src/dmidecode.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/dmidecode.c b/src/dmidecode.c +index 215c3f4..dae2fef 100644 +--- a/src/dmidecode.c ++++ b/src/dmidecode.c +@@ -1516,6 +1516,7 @@ void dmi_memory_module_size(xmlNode *node, const char *tagname, u8 code) + case 0x7F: + dmixml_AddAttribute(data_n, "installed", "0"); + check_conn = 0; ++ break; + default: + dmixml_AddAttribute(data_n, "installed", "1"); + dmixml_AddAttribute(data_n, "unit", "MB"); +-- +1.7.10.2 + + diff --git a/SPECS/python-dmidecode.spec b/SPECS/python-dmidecode.spec new file mode 100644 index 0000000..fbd6dad --- /dev/null +++ b/SPECS/python-dmidecode.spec @@ -0,0 +1,142 @@ +%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")} +%{!?python_ver: %global python_ver %(%{__python} -c "import sys ; print sys.version[:3]")} + +Summary: Python module to access DMI data +Name: python-dmidecode +Version: 3.10.13 +Release: 9%{?dist} +License: GPLv2 +Group: System Environment/Libraries +URL: http://projects.autonomy.net.au/python-dmidecode/ +Source0: %{name}-%{version}.tar.xz +Source1: generate-tarball.sh +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root +Requires: libxml2-python +BuildRequires: libxml2-python +BuildRequires: libxml2-devel +BuildRequires: python-devel + +# already in restored upstream git +Patch1: SIGILL-catcher.patch +# email: upstream why not in git, planed for release +Patch2: dmispec-remove.patch +# email: git postponed but planned for release +Patch3: installed-invalid.patch + +%description +python-dmidecode is a python extension module that uses the +code-base of the 'dmidecode' utility, and presents the data +as python data structures or as XML data using libxml2. + +%prep +%setup -q +%patch1 -p1 -b .SIGILL-catcher +%patch2 -p1 -b .dmispec-remove +%patch3 -p1 -b .install-invalid + +%build +make build +cd unit-tests +make +cd .. + +%install +rm -rf $RPM_BUILD_ROOT +python src/setup.py install --root $RPM_BUILD_ROOT --prefix=%{_prefix} + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files +%defattr(-,root,root,-) +%doc README doc/README.upstream doc/LICENSE doc/AUTHORS doc/AUTHORS.upstream +%{python_sitearch}/dmidecodemod.so +%{python_sitearch}/dmidecode.py +%{python_sitearch}/dmidecode.py[co] +%if "%{python_ver}" >= "2.5" +%{python_sitearch}/*.egg-info +%endif +%{_datadir}/python-dmidecode/ + +%changelog +* Mon Jun 20 2013 Ales Ledvinka - 3.10.13-9 +- Attribute installed may appear as duplicate and cause invalid XML. + +* Mon Jun 17 2013 Ales Ledvinka - 3.10.13-8 +- Attribute dmispec may cause invalid XML on some hardware. +- Signal handler for SIGILL. + +* Thu Feb 14 2013 Fedora Release Engineering - 3.10.13-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sat Jul 21 2012 Fedora Release Engineering - 3.10.13-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu Jul 19 2012 Ales Ledvinka 3.10.14-5 +- Upstream relocated. Document source tag and tarball generation. + +* Sat Jan 14 2012 Fedora Release Engineering - 3.10.13-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Feb 08 2011 Fedora Release Engineering - 3.10.13-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild + +* Thu Jul 22 2010 David Malcolm - 3.10.13-2 +- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild + +* Tue Jun 15 2010 Roman Rakus - 3.10.13-1 +- Update to new release + +* Fri Mar 12 2010 Nima Talebi - 3.10.12-1 +- Update to new release + +* Tue Feb 16 2010 Nima Talebi - 3.10.11-1 +- Update to new release + +* Tue Jan 12 2010 Nima Talebi - 3.10.10-1 +- Update to new release + +* Thu Jan 07 2010 Nima Talebi - 3.10.9-1 +- Update to new release + + +* Thu Dec 15 2009 Nima Talebi - 3.10.8-1 +- New Upstream release. +- Big-endian and little-endian approved. +- Packaged unit-test to tarball. +- Rewritten unit-test to be able to run as non-root user, where it will not + try to read /dev/mem. +- Added two dmidump data files to the unit-test. + +* Thu Nov 26 2009 David Sommerseth - 3.10.7-3 +- Fixed even more .spec file issues and removed explicit mentioning + of /usr/share/python-dmidecode/pymap.xml + +* Wed Nov 25 2009 David Sommerseth - 3.10.7-2 +- Fixed some .spec file issues (proper Requires, use _datadir macro) + +* Wed Sep 23 2009 Nima Talebi - 3.10.7-1 +- Updated source0 to new 3.10.7 tar ball + +* Wed Jul 13 2009 David Sommerseth - 3.10.6-6 +- Only build the python-dmidecode module, not everything + +* Wed Jul 13 2009 David Sommerseth - 3.10.6-5 +- Added missing BuildRequres for libxml2-python + +* Wed Jul 13 2009 David Sommerseth - 3.10.6-4 +- Added missing BuildRequres for python-devel + +* Wed Jul 13 2009 David Sommerseth - 3.10.6-3 +- Added missing BuildRequres for libxml2-devel + +* Wed Jul 13 2009 David Sommerseth - 3.10.6-2 +- Updated release, to avoid build conflict + +* Wed Jun 10 2009 David Sommerseth - 3.10.6-1 +- Updated to work with the new XML based python-dmidecode + +* Sat Mar 7 2009 Clark Williams - 2.10.3-1 +- Initial build. +