diff --git a/_service b/_service new file mode 100644 index 0000000..8ee2b8f --- /dev/null +++ b/_service @@ -0,0 +1,14 @@ + + + https://git.code.sf.net/p/ipmitool/source + git + enable + ipmitool + 1.8.18 + + + *.tar + xz + + + diff --git a/ipmitool-1.8.18.tar.bz2 b/ipmitool-1.8.18.tar.bz2 deleted file mode 100644 index 17740c3..0000000 --- a/ipmitool-1.8.18.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2238d8e6ab9340165918e65e04bfee4b5070635d8821d7c13d3a7aaeb9f25c29 -size 486341 diff --git a/ipmitool-1.8.18.tar.xz b/ipmitool-1.8.18.tar.xz new file mode 100644 index 0000000..3a4f8a7 --- /dev/null +++ b/ipmitool-1.8.18.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f4c195b963b549fe325f32e17a9b24fb59fbe6fe0688a6d7d69381a1edf4478 +size 435312 diff --git a/ipmitool.changes b/ipmitool.changes index 5f41592..1adc101 100644 --- a/ipmitool.changes +++ b/ipmitool.changes @@ -1,3 +1,21 @@ +------------------------------------------------------------------- +Thu Jul 27 18:58:24 UTC 2017 - tchvatal@suse.com + +- Switch to OBS service to generate the tarball and changelog + automatically from git "osc service dr" +- Update to version git checkout 20170406.ecb4cfb: + * Prevent autoreconf from complaining about missing NEWS + * Add git hash and dirty mark to ipmitool version +- Remove patch ipmitool_1_8_18_ecb4cfbff855_to_HEAD.patch as the + patch is directly in the tarball +- Rename patch: + ipmitool_adjust_suse.paths to ipmitool_adjust_suse_paths.patch +- Drop the --pic switch as it was only for static library +- Reduce the suse_version for 1210 check to switch systemd on as + the package is not building on sle11 anyway + * properly depend on systemd-rpm-macros and not full systemd +- Enable switch for file-security to be more strict on open files + ------------------------------------------------------------------- Wed Jul 5 14:07:41 UTC 2017 - trenn@suse.de diff --git a/ipmitool.spec b/ipmitool.spec index fb76629..b5ca699 100644 --- a/ipmitool.spec +++ b/ipmitool.spec @@ -1,7 +1,7 @@ # # spec file for package ipmitool # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,39 +17,30 @@ Name: ipmitool -BuildRequires: libtool -BuildRequires: openssl-devel -BuildRequires: readline-devel -%if 0%{?suse_version} >= 1210 -BuildRequires: systemd -%endif -Url: http://ipmitool.sourceforge.net/ +Version: 1.8.18 +Release: 0 Summary: Utility for IPMI Control License: BSD-3-Clause Group: System/Management -Version: 1.8.18 -Release: 0 -Source: http://heanet.dl.sourceforge.net/sourceforge/%{name}/%{name}-%{version}.tar.bz2 +Url: http://ipmitool.sourceforge.net/ +Source: %{name}/%{name}-%{version}.tar.xz Source1: ipmievd.service Source2: ipmievd.sysconf -Patch0: ipmitool_1_8_18_ecb4cfbff855_to_HEAD.patch - -Patch100: fwum_enhance_output.patch -Patch101: fix_file_permissions.patch -Patch102: several_more_compile_fixes.patch -Patch103: ipmitool_adjust_suse.paths +Patch100: fwum_enhance_output.patch +Patch101: fix_file_permissions.patch +Patch102: several_more_compile_fixes.patch +Patch103: ipmitool_adjust_suse_paths.patch Patch104: hpm_x_compatibility_msg_is_debug_only.patch - - -BuildRoot: %{_tmppath}/%{name}-%{version}-build -# bmc-snmp-proxy needs /usr/sbin/snmpd +BuildRequires: libtool +BuildRequires: openssl-devel +BuildRequires: readline-devel +BuildRequires: systemd-rpm-macros Requires: net-snmp -# ToDo: Convert old init scripts to systemd with next submit iteration %{?systemd_requires} %description This package contains a utility for interfacing with devices that -support the Intelligent Platform Management Interface specification. +support the Intelligent Platform Management Interface specification. IPMI is an open standard for machine health, inventory, and remote power control. @@ -63,50 +54,38 @@ displaying sensor values, displaying the contents of the System Event Log (SEL), printing Field Replaceable Unit (FRU) information, reading and setting LAN configuration, and chassis power control. - - %prep %setup -q -%patch0 -p1 - -%patch100 -p1 -%patch101 -p1 -%patch102 -p1 -%patch103 -p1 -%patch104 -p1 +%autopatch -p1 %build -touch INSTALL NEWS autoreconf -fiv -%configure --with-pic -%{__make} %{?jobs:-j%jobs} +# file-security: enables more security checks on files +%configure \ + --enable-file-security +make %{?_smp_mflags} %install -make DESTDIR=$RPM_BUILD_ROOT install -rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/ipmitool -# exchange-bmc-os-info service +%make_install +rm -rf %{buildroot}%{_datadir}/doc/ipmitool -install -D -m 0755 contrib/exchange-bmc-os-info.init.redhat "$RPM_BUILD_ROOT\ -"/%{_sbindir}/exchange-bmc-os-info -install -D -m 0644 contrib/exchange-bmc-os-info.service.redhat "$RPM_BUILD_ROOT"/usr/lib/systemd/system/exchange-bmc-os-info.service -install -D -m 0644 contrib/exchange-bmc-os-info.sysconf "$RPM_BUILD_ROOT"/%{_sysconfdir}/exchange-bmc-os-info -ln -sf %_sbindir/service ${RPM_BUILD_ROOT}%{_sbindir}/rcexchange-bmc-os-info +# exchange-bmc-os-info service +install -D -m 0755 contrib/exchange-bmc-os-info.init.redhat %{buildroot}/%{_sbindir}/exchange-bmc-os-info +install -D -m 0644 contrib/exchange-bmc-os-info.service.redhat %{buildroot}%{_unitdir}/exchange-bmc-os-info.service +install -D -m 0644 contrib/exchange-bmc-os-info.sysconf %{buildroot}/%{_sysconfdir}/exchange-bmc-os-info +ln -sf service %{buildroot}%{_sbindir}/rcexchange-bmc-os-info # ipmievd service -install -D -m 644 %{S:1} "$RPM_BUILD_ROOT"/usr/lib/systemd/system/ipmievd.service -install -D -m 644 %{S:2} "$RPM_BUILD_ROOT"/%{_sysconfdir}/ipmievd -ln -sf %_sbindir/service ${RPM_BUILD_ROOT}%{_sbindir}/rcipmievd +install -D -m 644 %{SOURCE1} %{buildroot}%{_unitdir}/ipmievd.service +install -D -m 644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/ipmievd +ln -sf service %{buildroot}%{_sbindir}/rcipmievd # bmc-snmp-proxy -install -D -m 755 contrib/bmc-snmp-proxy "$RPM_BUILD_ROOT"/%{_sbindir}/bmc-snmp-proxy -install -D -m 644 contrib/bmc-snmp-proxy.service "$RPM_BUILD_ROOT"/usr/lib/systemd/system/bmc-snmp-proxy.service -install -D -m 755 contrib/bmc-snmp-proxy.sysconf "$RPM_BUILD_ROOT"/%{_sysconfdir}/bmc-snmp-proxy -ln -sf %_sbindir/service ${RPM_BUILD_ROOT}%{_sbindir}/rcbmc-snmp-proxy +install -D -m 755 contrib/bmc-snmp-proxy %{buildroot}/%{_sbindir}/bmc-snmp-proxy +install -D -m 644 contrib/bmc-snmp-proxy.service %{buildroot}%{_unitdir}/bmc-snmp-proxy.service +install -D -m 755 contrib/bmc-snmp-proxy.sysconf %{buildroot}/%{_sysconfdir}/bmc-snmp-proxy +ln -sf service %{buildroot}%{_sbindir}/rcbmc-snmp-proxy -%clean -rm -rf $RPM_BUILD_ROOT - -%if 0%{?suse_version} >= 1210 %pre %service_add_pre bmc-snmp-proxy.service exchange-bmc-os-info.service ipmievd.service @@ -118,10 +97,8 @@ rm -rf $RPM_BUILD_ROOT %postun %service_del_postun bmc-snmp-proxy.service exchange-bmc-os-info.service ipmievd.service -%endif %files -%defattr(644,root,root) %doc AUTHORS COPYING README %{_datadir}/ipmitool %attr(755,root,root) %{_bindir}/ipmitool @@ -134,10 +111,10 @@ rm -rf $RPM_BUILD_ROOT %config(noreplace) %{_sysconfdir}/exchange-bmc-os-info %config(noreplace) %{_sysconfdir}/bmc-snmp-proxy %config(noreplace) %{_sysconfdir}/ipmievd -%{_prefix}/lib/systemd/system/exchange-bmc-os-info.service -%{_prefix}/lib/systemd/system/ipmievd.service -%{_prefix}/lib/systemd/system/bmc-snmp-proxy.service -%doc %{_mandir}/man1/* -%doc %{_mandir}/man8/* +%{_unitdir}/exchange-bmc-os-info.service +%{_unitdir}/ipmievd.service +%{_unitdir}/bmc-snmp-proxy.service +%{_mandir}/man1/* +%{_mandir}/man8/* %changelog diff --git a/ipmitool_1_8_18_ecb4cfbff855_to_HEAD.patch b/ipmitool_1_8_18_ecb4cfbff855_to_HEAD.patch deleted file mode 100644 index c4c3725..0000000 --- a/ipmitool_1_8_18_ecb4cfbff855_to_HEAD.patch +++ /dev/null @@ -1,649 +0,0 @@ -diff --git a/.gitignore b/.gitignore -index 5b8cb0a..58ca89e 100644 ---- a/.gitignore -+++ b/.gitignore -@@ -1,12 +1,30 @@ -+.deps -+.libs -+*.o -+*.lo -+*.la -+*.*~ -+Makefile - Makefile.in - aclocal.m4 - autom4te.cache - compile - config.guess -+config.h - config.h.in -+config.log -+config.status - config.sub - configure - depcomp - install-sh - ltmain.sh -+libtool - missing -+stamp-h1 -+control/ipmitool.spec -+control/pkginfo -+control/prototype -+control/rpmmacros -+src/ipmievd -+src/ipmitool -diff --git a/bootstrap b/bootstrap -index 6347427..c38b12b 100755 ---- a/bootstrap -+++ b/bootstrap -@@ -31,7 +31,15 @@ - # EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - aclocal --libtoolize --automake --copy -+ -+case `uname` in -+ Darwin*) -+ glibtoolize --automake --copy -+ ;; -+ *) -+ libtoolize --automake --copy -+ ;; -+esac - - autoheader - automake --foreign --add-missing --copy -diff --git a/configure.ac b/configure.ac -index 88232a6..ad1657d 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -1,10 +1,11 @@ - dnl - dnl autoconf for ipmitool - dnl --AC_INIT([ipmitool], [1.8.18-csv]) -+m4_define([git_suffix], m4_esyscmd_s(./csv-revision)) -+AC_INIT([ipmitool], [1.8.18git_suffix]) - AC_CONFIG_SRCDIR([src/ipmitool.c]) - AC_CANONICAL_SYSTEM --AM_INIT_AUTOMAKE -+AM_INIT_AUTOMAKE([foreign]) - AM_CONFIG_HEADER(config.h) - AC_PREREQ(2.50) - AC_SUBST(ac_configure_args) -diff --git a/csv-revision b/csv-revision -new file mode 100755 -index 0000000..289c133 ---- /dev/null -+++ b/csv-revision -@@ -0,0 +1,10 @@ -+#!/bin/sh -+ -+git describe --first-parent --tags 2>/dev/null | ( -+ IFS=- read tag rev hash -+ if [ $? ] && [ -n "$rev" ]; then -+ echo .$rev.$hash -+ elif [ -d .git ]; then -+ echo .0.gsnapshot -+ fi -+) -diff --git a/include/ipmitool/ipmi_fru.h b/include/ipmitool/ipmi_fru.h -index 65696ba..d03abfc 100644 ---- a/include/ipmitool/ipmi_fru.h -+++ b/include/ipmitool/ipmi_fru.h -@@ -614,5 +614,6 @@ typedef struct ipmi_fru_bloc { - - int ipmi_fru_main(struct ipmi_intf *intf, int argc, char **argv); - int ipmi_fru_print(struct ipmi_intf *intf, struct sdr_record_fru_locator *fru); -+char *get_fru_area_str(uint8_t *data, uint32_t *offset); - - #endif /* IPMI_FRU_H */ -diff --git a/include/ipmitool/ipmi_picmg.h b/include/ipmitool/ipmi_picmg.h -index 3d70454..0bcbd93 100644 ---- a/include/ipmitool/ipmi_picmg.h -+++ b/include/ipmitool/ipmi_picmg.h -@@ -12,6 +12,7 @@ - #define PICMG_CPCI_MAJOR_VERSION 1 - #define PICMG_ATCA_MAJOR_VERSION 2 - #define PICMG_AMC_MAJOR_VERSION 4 -+#define PICMG_UTCA_MAJOR_VERSION 5 - - /* PICMG commands */ - #define PICMG_GET_PICMG_PROPERTIES_CMD 0x00 -diff --git a/include/ipmitool/ipmi_sel.h b/include/ipmitool/ipmi_sel.h -index 1c325db..a6a2a42 100644 ---- a/include/ipmitool/ipmi_sel.h -+++ b/include/ipmitool/ipmi_sel.h -@@ -579,8 +579,8 @@ static const struct ipmi_event_sensor_types sensor_specific_event_types[] = { - { 0xF1, 0x00, 0xff, "IPMB-A disabled, IPMB-B disabled" }, - { 0xF1, 0x01, 0xff, "IPMB-A enabled, IPMB-B disabled" }, - { 0xF1, 0x02, 0xff, "IPMB-A disabled, IPMB-B enabled" }, -- { 0xF1, 0x03, 0xff, "IPMB-A enabled, IPMP-B enabled" }, -- /* PICNG Moduke Hot Swap */ -+ { 0xF1, 0x03, 0xff, "IPMB-A enabled, IPMB-B enabled" }, -+ /* PICMG Module Hot Swap */ - { 0xF2, 0x00, 0xff, "Module Handle Closed" }, - { 0xF2, 0x01, 0xff, "Module Handle Opened" }, - { 0xF2, 0x02, 0xff, "Quiesced" }, -@@ -599,7 +599,7 @@ static const struct ipmi_event_sensor_types vita_sensor_event_types[] = { - { 0xF1, 0x00, 0xFF, "IPMB-A disabled, IPMB-B disabled" }, - { 0xF1, 0x01, 0xFF, "IPMB-A enabled, IPMB-B disabled" }, - { 0xF1, 0x02, 0xFF, "IPMB-A disabled, IPMB-B enabled" }, -- { 0xF1, 0x03, 0xFF, "IPMB-A enabled, IPMP-B enabled" }, -+ { 0xF1, 0x03, 0xFF, "IPMB-A enabled, IPMB-B enabled" }, - /* VITA FRU Temperature */ - { 0xF3, 0x00, 0xff, "At or below Lower Non-critical" }, - { 0xF3, 0x01, 0xff, "At or below Lower Critical" }, -diff --git a/lib/ipmi_cfgp.c b/lib/ipmi_cfgp.c -index b8af80d..dfc4743 100644 ---- a/lib/ipmi_cfgp.c -+++ b/lib/ipmi_cfgp.c -@@ -30,7 +30,11 @@ - * POSSIBILITY OF SUCH DAMAGE. - */ - --#include -+#ifdef HAVE_MALLOC_H -+# include -+#else -+# include -+#endif - #include - - #include -diff --git a/lib/ipmi_ekanalyzer.c b/lib/ipmi_ekanalyzer.c -index 7a6c63d..f6d8b90 100644 ---- a/lib/ipmi_ekanalyzer.c -+++ b/lib/ipmi_ekanalyzer.c -@@ -37,6 +37,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -2696,12 +2697,19 @@ ipmi_ek_display_board_info_area(FILE *input_file, char *board_type, - int ret = 0; - unsigned char len = 0; - unsigned int size_board = 0; -+ int custom_fields = 0; - if (input_file == NULL || board_type == NULL - || board_length == NULL) { - return (size_t)(-1); - } - file_offset = ftell(input_file); - -+ /* -+ * TODO: This whole file's code is extremely dirty and wicked. -+ * Must eventually switch to using ipmi_fru.c code or some -+ * specialized FRU library. -+ */ -+ - /* Board length*/ - ret = fread(&len, 1, 1, input_file); - if ((ret != 1) || ferror(input_file)) { -@@ -2717,14 +2725,15 @@ ipmi_ek_display_board_info_area(FILE *input_file, char *board_type, - goto out; - } - if (strncmp(board_type, "Custom", 6 ) != 0) { -- unsigned char *data; -+ unsigned char *data, *str; - unsigned int i = 0; -- data = malloc(size_board); -+ data = malloc(size_board + 1); /* Make room for type/length field */ - if (data == NULL) { - lprintf(LOG_ERR, "ipmitool: malloc failure"); - return (size_t)(-1); - } -- ret = fread(data, size_board, 1, input_file); -+ data[0] = len; /* Save the type/length byte in 'data' */ -+ ret = fread(data + 1, size_board, 1, input_file); - if ((ret != 1) || ferror(input_file)) { - lprintf(LOG_ERR, "Invalid board type size!"); - free(data); -@@ -2733,17 +2742,11 @@ ipmi_ek_display_board_info_area(FILE *input_file, char *board_type, - } - printf("%s type: 0x%02x\n", board_type, len); - printf("%s: ", board_type); -- for (i = 0; i < size_board; i++) { -- if ((len & TYPE_CODE) == TYPE_CODE) { -- printf("%c", data[i]); -- } else { -- /* other than language code (binary, BCD, -- * ASCII 6 bit...) is not supported -- */ -- printf("%02x", data[i]); -- } -- } -- printf("\n"); -+ i = 0; -+ str = (unsigned char *)get_fru_area_str(data, &i); -+ printf("%s\n", str); -+ free(str); -+ str = NULL; - free(data); - data = NULL; - (*board_length) -= size_board; -@@ -2756,7 +2759,12 @@ ipmi_ek_display_board_info_area(FILE *input_file, char *board_type, - /* take the rest of data in the area minus 1 byte of - * checksum - */ -- printf("Additional Custom Mfg. length: 0x%02x\n", len); -+ if (custom_fields) { -+ printf("End of Custom Mfg. fields (0x%02x)\n", len); -+ } else { -+ printf("No Additional Custom Mfg. fields (0x%02x)\n", len); -+ } -+ - padding = (*board_length) - 1; - if ((padding > 0) && (!feof(input_file))) { - printf("Unused space: %d (bytes)\n", padding); -@@ -2770,16 +2778,18 @@ ipmi_ek_display_board_info_area(FILE *input_file, char *board_type, - printf("Checksum: 0x%02x\n", checksum); - goto out; - } -+ custom_fields++; - printf("Additional Custom Mfg. length: 0x%02x\n", len); - if ((size_board > 0) && (size_board < (*board_length))) { -- unsigned char * additional_data = NULL; -+ unsigned char *additional_data, *str; - unsigned int i = 0; -- additional_data = malloc(size_board); -+ additional_data = malloc(size_board + 1); /* Make room for type/length field */ - if (additional_data == NULL) { - lprintf(LOG_ERR, "ipmitool: malloc failure"); - return (size_t)(-1); - } -- ret = fread(additional_data, size_board, 1, input_file); -+ additional_data[0] = len; -+ ret = fread(additional_data + 1, size_board, 1, input_file); - if ((ret != 1) || ferror(input_file)) { - lprintf(LOG_ERR, "Invalid Additional Data!"); - if (additional_data != NULL) { -@@ -2788,18 +2798,27 @@ ipmi_ek_display_board_info_area(FILE *input_file, char *board_type, - } - goto out; - } -- printf("Additional Custom Mfg. Data: %02x", -- additional_data[0]); -- for (i = 1; i < size_board; i++) { -- printf("-%02x", additional_data[i]); -- } -- printf("\n"); -+ printf("Additional Custom Mfg. Data: "); -+ i = 0; -+ str = (unsigned char *)get_fru_area_str(additional_data, &i); -+ printf("%s\n", str); -+ free(str); -+ str = NULL; - free(additional_data); - additional_data = NULL; -+ - (*board_length) -= size_board; -+ ret = fread(&len, 1, 1, input_file); -+ if ((ret != 1) || ferror(input_file)) { -+ lprintf(LOG_ERR, "Invalid Length!"); -+ goto out; -+ } -+ (*board_length)--; -+ size_board = (len & 0x3f); - } - else { -- printf("No Additional Custom Mfg. %d\n", *board_length); -+ printf("ERROR: File has insufficient data (%d bytes) for the " -+ "Additional Custom Mfg. field\n", *board_length); - goto out; - } - } -diff --git a/lib/ipmi_fru.c b/lib/ipmi_fru.c -index cf00eff..42c1f19 100644 ---- a/lib/ipmi_fru.c -+++ b/lib/ipmi_fru.c -@@ -107,7 +107,7 @@ char * get_fru_area_str(uint8_t * data, uint32_t * offset) - { - static const char bcd_plus[] = "0123456789 -.:,_"; - char * str; -- int len, off, size, i, j, k, typecode; -+ int len, off, size, i, j, k, typecode, char_idx; - union { - uint32_t bits; - char chars[4]; -@@ -126,15 +126,15 @@ char * get_fru_area_str(uint8_t * data, uint32_t * offset) - - switch (typecode) { - case 0: /* 00b: binary/unspecified */ -- /* hex dump -> 2x length */ -- size = (len*2); -+ case 1: /* 01b: BCD plus */ -+ /* hex dump or BCD -> 2x length */ -+ size = (len * 2); - break; - case 2: /* 10b: 6-bit ASCII */ - /* 4 chars per group of 1-3 bytes */ -- size = ((((len+2)*4)/3) & ~3); -+ size = (((len * 4 + 2) / 3) & ~3); - break; - case 3: /* 11b: 8-bit ASCII */ -- case 1: /* 01b: BCD plus */ - /* no length adjustment */ - size = len; - break; -@@ -149,7 +149,7 @@ char * get_fru_area_str(uint8_t * data, uint32_t * offset) - return NULL; - memset(str, 0, size+1); - -- if (len == 0) { -+ if (size == 0) { - str[0] = '\0'; - *offset = off; - return str; -@@ -157,30 +157,30 @@ char * get_fru_area_str(uint8_t * data, uint32_t * offset) - - switch (typecode) { - case 0: /* Binary */ -- strncpy(str, buf2str(&data[off], len), len*2); -+ strncpy(str, buf2str(&data[off], len), size); - break; - - case 1: /* BCD plus */ -- for (k=0; k> ((k % 2) ? 0 : 4)) & 0x0f)]; - str[k] = '\0'; - break; - - case 2: /* 6-bit ASCII */ -- for (i=j=0; i 1 ? data[off+i+1] : 0); - u.chars[1] = (k > 2 ? data[off+i+2] : 0); --#define CHAR_IDX 3 -+ char_idx = 3; - #else - memcpy((void *)&u.bits, &data[off+i], k); --#define CHAR_IDX 0 -+ char_idx = 0; - #endif - for (k=0; k<4; k++) { -- str[j++] = ((u.chars[CHAR_IDX] & 0x3f) + 0x20); -+ str[j++] = ((u.chars[char_idx] & 0x3f) + 0x20); - u.bits >>= 6; - } - } -@@ -188,8 +188,8 @@ char * get_fru_area_str(uint8_t * data, uint32_t * offset) - break; - - case 3: -- memcpy(str, &data[off], len); -- str[len] = '\0'; -+ memcpy(str, &data[off], size); -+ str[size] = '\0'; - break; - } - -diff --git a/lib/ipmi_picmg.c b/lib/ipmi_picmg.c -index c7d9c8e..2166cbe 100644 ---- a/lib/ipmi_picmg.c -+++ b/lib/ipmi_picmg.c -@@ -37,11 +37,6 @@ - #include - #include - --#define PICMG_EXTENSION_ATCA_MAJOR_VERSION 2 --#define PICMG_EXTENSION_AMC0_MAJOR_VERSION 4 --#define PICMG_EXTENSION_UTCA_MAJOR_VERSION 5 -- -- - #define PICMG_EKEY_MODE_QUERY 0 - #define PICMG_EKEY_MODE_PRINT_ALL 1 - #define PICMG_EKEY_MODE_PRINT_ENABLED 2 -@@ -2367,9 +2362,9 @@ picmg_discover(struct ipmi_intf *intf) { - } else if (rsp->data[0] != 0) { - lprintf(LOG_INFO,"Invalid Get PICMG Properties group extension %#x", - rsp->data[0]); -- } else if ((rsp->data[1] & 0x0F) != PICMG_EXTENSION_ATCA_MAJOR_VERSION -- && (rsp->data[1] & 0x0F) != PICMG_EXTENSION_AMC0_MAJOR_VERSION -- && (rsp->data[1] & 0x0F) != PICMG_EXTENSION_UTCA_MAJOR_VERSION) { -+ } else if ((rsp->data[1] & 0x0F) != PICMG_ATCA_MAJOR_VERSION -+ && (rsp->data[1] & 0x0F) != PICMG_AMC_MAJOR_VERSION -+ && (rsp->data[1] & 0x0F) != PICMG_UTCA_MAJOR_VERSION) { - lprintf(LOG_INFO,"Unknown PICMG Extension Version %d.%d", - (rsp->data[1] & 0x0F), (rsp->data[1] >> 4)); - } else { -diff --git a/lib/ipmi_sdr.c b/lib/ipmi_sdr.c -index 2a9cbe3..167c252 100644 ---- a/lib/ipmi_sdr.c -+++ b/lib/ipmi_sdr.c -@@ -4217,7 +4217,7 @@ ipmi_sdr_get_info(struct ipmi_intf *intf, - * returns pointer to static buffer - */ - static char * --ipmi_sdr_timestamp(uint32_t stamp) -+ipmi_sdr_timestamp(time_t stamp) - { - static char tbuf[40]; - time_t s = (time_t) stamp; -@@ -4240,7 +4240,7 @@ ipmi_sdr_timestamp(uint32_t stamp) - int - ipmi_sdr_print_info(struct ipmi_intf *intf) - { -- uint32_t timestamp; -+ time_t timestamp; - uint16_t free_space; - - struct get_sdr_repository_info_rsp sdr_repository_info; -@@ -4274,21 +4274,51 @@ ipmi_sdr_print_info(struct ipmi_intf *intf) - break; - } - -- timestamp = -- (sdr_repository_info.most_recent_addition_timestamp[3] << 24) | -- (sdr_repository_info.most_recent_addition_timestamp[2] << 16) | -- (sdr_repository_info.most_recent_addition_timestamp[1] << 8) | -- sdr_repository_info.most_recent_addition_timestamp[0]; -- printf("Most recent Addition : %s\n", -- ipmi_sdr_timestamp(timestamp)); -- -- timestamp = -- (sdr_repository_info.most_recent_erase_timestamp[3] << 24) | -- (sdr_repository_info.most_recent_erase_timestamp[2] << 16) | -- (sdr_repository_info.most_recent_erase_timestamp[1] << 8) | -- sdr_repository_info.most_recent_erase_timestamp[0]; -- printf("Most recent Erase : %s\n", -- ipmi_sdr_timestamp(timestamp)); -+ if(sdr_repository_info.delete_sdr_supported && sdr_repository_info.partial_add_sdr_supported) -+ { -+ timestamp = -+ (sdr_repository_info.most_recent_addition_timestamp[3] << 24) | -+ (sdr_repository_info.most_recent_addition_timestamp[2] << 16) | -+ (sdr_repository_info.most_recent_addition_timestamp[1] << 8) | -+ sdr_repository_info.most_recent_addition_timestamp[0]; -+ printf("Most recent Addition : %s\n", -+ ipmi_sdr_timestamp(timestamp)); -+ -+ timestamp = -+ (sdr_repository_info.most_recent_erase_timestamp[3] << 24) | -+ (sdr_repository_info.most_recent_erase_timestamp[2] << 16) | -+ (sdr_repository_info.most_recent_erase_timestamp[1] << 8) | -+ sdr_repository_info.most_recent_erase_timestamp[0]; -+ printf("Most recent Erase : %s\n", -+ ipmi_sdr_timestamp(timestamp)); -+ } -+ else if (sdr_repository_info.partial_add_sdr_supported) -+ { -+ timestamp = -+ (sdr_repository_info.most_recent_addition_timestamp[3] << 24) | -+ (sdr_repository_info.most_recent_addition_timestamp[2] << 16) | -+ (sdr_repository_info.most_recent_addition_timestamp[1] << 8) | -+ sdr_repository_info.most_recent_addition_timestamp[0]; -+ printf("Most recent Addition : %s\n", -+ ipmi_sdr_timestamp(timestamp)); -+ printf("Most recent Erase : NA\n"); -+ } -+ else if(sdr_repository_info.delete_sdr_supported) -+ { -+ printf("Most recent Addition : NA\n"); -+ timestamp = -+ (sdr_repository_info.most_recent_erase_timestamp[3] << 24) | -+ (sdr_repository_info.most_recent_erase_timestamp[2] << 16) | -+ (sdr_repository_info.most_recent_erase_timestamp[1] << 8) | -+ sdr_repository_info.most_recent_erase_timestamp[0]; -+ printf("Most recent Erase : %s\n", -+ ipmi_sdr_timestamp(timestamp)); -+ } -+ else -+ { -+ printf("Most recent Addition : NA\n"); -+ printf("Most recent Erase : NA\n"); -+ } - - printf("SDR overflow : %s\n", - (sdr_repository_info.overflow_flag ? "yes" : "no")); -diff --git a/src/plugins/lanplus/lanplus_crypt_impl.c b/src/plugins/lanplus/lanplus_crypt_impl.c -index d5fac37..9652a5e 100644 ---- a/src/plugins/lanplus/lanplus_crypt_impl.c -+++ b/src/plugins/lanplus/lanplus_crypt_impl.c -@@ -164,11 +164,7 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, - uint8_t * output, - uint32_t * bytes_written) - { -- EVP_CIPHER_CTX ctx; -- EVP_CIPHER_CTX_init(&ctx); -- EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); -- EVP_CIPHER_CTX_set_padding(&ctx, 0); -- -+ EVP_CIPHER_CTX *ctx = NULL; - - *bytes_written = 0; - -@@ -182,6 +178,14 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, - printbuf(input, input_length, "encrypting this data"); - } - -+ ctx = EVP_CIPHER_CTX_new(); -+ if (ctx == NULL) { -+ lprintf(LOG_DEBUG, "ERROR: EVP_CIPHER_CTX_new() failed"); -+ return; -+ } -+ EVP_CIPHER_CTX_init(ctx); -+ EVP_EncryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); -+ EVP_CIPHER_CTX_set_padding(ctx, 0); - - /* - * The default implementation adds a whole block of padding if the input -@@ -191,28 +195,28 @@ lanplus_encrypt_aes_cbc_128(const uint8_t * iv, - assert((input_length % IPMI_CRYPT_AES_CBC_128_BLOCK_SIZE) == 0); - - -- if(!EVP_EncryptUpdate(&ctx, output, (int *)bytes_written, input, input_length)) -+ if(!EVP_EncryptUpdate(ctx, output, (int *)bytes_written, input, input_length)) - { - /* Error */ - *bytes_written = 0; -- return; - } - else - { - uint32_t tmplen; - -- if(!EVP_EncryptFinal_ex(&ctx, output + *bytes_written, (int *)&tmplen)) -+ if(!EVP_EncryptFinal_ex(ctx, output + *bytes_written, (int *)&tmplen)) - { -+ /* Error */ - *bytes_written = 0; -- return; /* Error */ - } - else - { - /* Success */ - *bytes_written += tmplen; -- EVP_CIPHER_CTX_cleanup(&ctx); - } - } -+ /* performs cleanup and free */ -+ EVP_CIPHER_CTX_free(ctx); - } - - -@@ -239,11 +243,7 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, - uint8_t * output, - uint32_t * bytes_written) - { -- EVP_CIPHER_CTX ctx; -- EVP_CIPHER_CTX_init(&ctx); -- EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, key, iv); -- EVP_CIPHER_CTX_set_padding(&ctx, 0); -- -+ EVP_CIPHER_CTX *ctx = NULL; - - if (verbose >= 5) - { -@@ -252,12 +252,20 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, - printbuf(input, input_length, "decrypting this data"); - } - -- - *bytes_written = 0; - - if (input_length == 0) - return; - -+ ctx = EVP_CIPHER_CTX_new(); -+ if (ctx == NULL) { -+ lprintf(LOG_DEBUG, "ERROR: EVP_CIPHER_CTX_new() failed"); -+ return; -+ } -+ EVP_CIPHER_CTX_init(ctx); -+ EVP_DecryptInit_ex(ctx, EVP_aes_128_cbc(), NULL, key, iv); -+ EVP_CIPHER_CTX_set_padding(ctx, 0); -+ - /* - * The default implementation adds a whole block of padding if the input - * data is perfectly aligned. We would like to keep that from happening. -@@ -266,33 +274,33 @@ lanplus_decrypt_aes_cbc_128(const uint8_t * iv, - assert((input_length % IPMI_CRYPT_AES_CBC_128_BLOCK_SIZE) == 0); - - -- if (!EVP_DecryptUpdate(&ctx, output, (int *)bytes_written, input, input_length)) -+ if (!EVP_DecryptUpdate(ctx, output, (int *)bytes_written, input, input_length)) - { - /* Error */ - lprintf(LOG_DEBUG, "ERROR: decrypt update failed"); - *bytes_written = 0; -- return; - } - else - { - uint32_t tmplen; - -- if (!EVP_DecryptFinal_ex(&ctx, output + *bytes_written, (int *)&tmplen)) -+ if (!EVP_DecryptFinal_ex(ctx, output + *bytes_written, (int *)&tmplen)) - { -+ /* Error */ - char buffer[1000]; - ERR_error_string(ERR_get_error(), buffer); - lprintf(LOG_DEBUG, "the ERR error %s", buffer); - lprintf(LOG_DEBUG, "ERROR: decrypt final failed"); - *bytes_written = 0; -- return; /* Error */ - } - else - { - /* Success */ - *bytes_written += tmplen; -- EVP_CIPHER_CTX_cleanup(&ctx); - } - } -+ /* performs cleanup and free */ -+ EVP_CIPHER_CTX_free(ctx); - - if (verbose >= 5) - { diff --git a/ipmitool_adjust_suse.paths b/ipmitool_adjust_suse_paths.patch similarity index 100% rename from ipmitool_adjust_suse.paths rename to ipmitool_adjust_suse_paths.patch