Compare commits

..

1 commit

Author SHA1 Message Date
Pavel Cahyna
1196aafa45 py313compat 2024-02-11 20:29:10 +01:00
8 changed files with 333 additions and 98 deletions

3
.gitignore vendored
View file

@ -11,6 +11,3 @@ OpenIPMI-2.0.18.tar.gz
/OpenIPMI-2.0.29.tar.gz
/OpenIPMI-2.0.31.tar.gz
/OpenIPMI-2.0.32.tar.gz
/OpenIPMI-2.0.34.tar.gz
/OpenIPMI-2.0.35.tar.gz
/OpenIPMI-2.0.36.tar.gz

12
OpenIPMI-ax-python.patch Normal file
View file

@ -0,0 +1,12 @@
diff -urNp a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
--- a/m4/ax_python_devel.m4 2021-08-02 13:15:04.122972905 +0200
+++ b/m4/ax_python_devel.m4 2021-08-02 13:16:17.407749535 +0200
@@ -143,7 +143,7 @@ variable to configure. See ``configure -
#
AC_MSG_CHECKING([for the distutils Python package])
ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
- if test -z "$ac_distutils_result"; then
+ if test $? -eq 0; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])

60
OpenIPMI-c99.patch Normal file
View file

@ -0,0 +1,60 @@
C type errors in the SWIG-generated Perl bindings
The first change fixes an error with newer compilers:
OpenIPMI_wrap.c: In function _wrap_strconstarray_val_set:
OpenIPMI_wrap.c:10491:27: error: assignment to const char ** from incompatible pointer type char **
10491 | if (arg1) (arg1)->val = arg2;
| ^
The second change is also about a compiler error:
In file included from /usr/lib64/perl5/CORE/perl.h:4530,
from OpenIPMI_wrap.c:751:
OpenIPMI_wrap.c: In function _wrap_ipmi_sol_conn_t_write:
/usr/lib64/perl5/CORE/sv.h:1952:31: error: passing argument 3 of Perl_SvPV_helper from incompatible pointer type
1952 | Perl_SvPV_helper(aTHX_ sv, &len, flags, SvPVnormal_type_, \
/usr/lib64/perl5/CORE/sv.h:1972:37: note: in expansion of macro SvPV_flags
1972 | #define SvPV(sv, len) SvPV_flags(sv, len, SV_GMAGIC)
| ^~~~~~~~~~
OpenIPMI_wrap.c:27664:24: note: in expansion of macro SvPV
27664 | (&arg2)->val = SvPV(tempsv, (&arg2)->len);
| ^~~~
In file included from /usr/lib64/perl5/CORE/perl.h:7812:
/usr/lib64/perl5/CORE/sv_inline.h:908:33: note: expected STRLEN * const {aka long unsigned int * const} but argument is of type int *
908 | STRLEN * const lp,
| ~~~~~~~~~~~~~~~^~
But the existing code looks broken on big-endian 64-bit architectures,
too.
Submitted upstream: <https://sourceforge.net/p/openipmi/patches/38/>
diff --git a/swig/OpenIPMI.i b/swig/OpenIPMI.i
index 8e674a94e6f85f62..db2aa1b5292a276f 100644
--- a/swig/OpenIPMI.i
+++ b/swig/OpenIPMI.i
@@ -359,7 +359,7 @@ typedef struct iargarray
%}
typedef struct strconstarray
{
- char **val;
+ const char **val;
int len;
} strconstarray;
typedef struct argarray
diff --git a/swig/perl/OpenIPMI_lang.i b/swig/perl/OpenIPMI_lang.i
index d13b62f09e69e02a..d7482d1135cdc3e4 100644
--- a/swig/perl/OpenIPMI_lang.i
+++ b/swig/perl/OpenIPMI_lang.i
@@ -292,7 +292,9 @@
$1.val = NULL;
$1.len = 0;
} else {
- $1.val = SvPV(tempsv, $1.len);
+ STRLEN len;
+ $1.val = SvPV(tempsv, len);
+ $1.len = len;
}
}

View file

@ -1,13 +1,12 @@
diff --git a/swig/python/OpenIPMI_lang.i b/swig/python/OpenIPMI_lang.i
index 67221fd..d150d81 100644
--- a/swig/python/OpenIPMI_lang.i
+++ b/swig/python/OpenIPMI_lang.i
@@ -541,7 +541,7 @@ static void OI_put_py_state(int current)
#else
static void init_lang(void)
{
- PyEval_InitThreads();
+ /* nothing */
}
#define OI_PY_STATE PyGILState_STATE
#define OI_PY_STATE_GET() PyGILState_Ensure()
diff -ur OpenIPMI-2.0.34/swig/OpenIPMI.i OpenIPMI-2.0.34-python/swig/OpenIPMI.i
--- OpenIPMI-2.0.34/swig/OpenIPMI.i 2024-02-11 19:52:41.555777279 +0100
+++ OpenIPMI-2.0.34-python/swig/OpenIPMI.i 2024-02-11 20:11:59.061132776 +0100
@@ -38,6 +38,7 @@
#include <config.h>
#include <sys/types.h>
#include <sys/socket.h>
+#include <ctype.h>
#ifdef HAVE_GETADDRINFO
#include <netdb.h>
Only in OpenIPMI-2.0.34-python/swig: OpenIPMI.i~

239
OpenIPMI-sysconfig.patch Normal file
View file

@ -0,0 +1,239 @@
diff -urNp a/configure b/configure
--- a/configure 2021-08-02 13:38:21.012807239 +0200
+++ b/configure 2021-08-02 14:32:29.884167376 +0200
@@ -13535,20 +13535,20 @@ variable to configure. See \`\`configure
fi
#
- # Check if you have distutils, else fail
+ # Check if you have sysconfig, else fail
#
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the distutils Python package" >&5
-$as_echo_n "checking for the distutils Python package... " >&6; }
- ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
- if test -z "$ac_distutils_result"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the sysconfig Python package" >&5
+$as_echo_n "checking for the sysconfig Python package... " >&6; }
+ ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`
+ if test -z "$ac_sysconfig_result"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
- as_fn_error $? "cannot import Python module \"distutils\".
+ as_fn_error $? "cannot import Python module \"sysconfig\".
Please check your Python installation. The error was:
-$ac_distutils_result" "$LINENO" 5
+$ac_sysconfig_result" "$LINENO" 5
PYTHON_VERSION=""
fi
@@ -13558,10 +13558,10 @@ $ac_distutils_result" "$LINENO" 5
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python include path" >&5
$as_echo_n "checking for Python include path... " >&6; }
if test -z "$PYTHON_CPPFLAGS"; then
- python_path=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_inc ());"`
- plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
+ python_path=`$PYTHON -c "import sysconfig; \
+ print (sysconfig.get_path('include'));"`
+ plat_python_path=`$PYTHON -c "import sysconfig; \
+ print (sysconfig.get_path('include'));"`
if test -n "${python_path}"; then
if test "${plat_python_path}" != "${python_path}"; then
python_path="-I$python_path -I$plat_python_path"
@@ -13587,7 +13587,7 @@ $as_echo_n "checking for Python library
# join all versioning strings, on some systems
# major/minor numbers could be in different list elements
-from distutils.sysconfig import *
+from sysconfig import *
e = get_config_var('VERSION')
if e is not None:
print(e)
@@ -13613,8 +13613,8 @@ _ACEOF
ac_python_libdir=`cat<<EOD | $PYTHON -
# There should be only one
-import distutils.sysconfig
-e = distutils.sysconfig.get_config_var('LIBDIR')
+import sysconfig
+e = sysconfig.get_config_var('LIBDIR')
if e is not None:
print (e)
EOD`
@@ -13622,8 +13622,8 @@ EOD`
# Now, for the library:
ac_python_library=`cat<<EOD | $PYTHON -
-import distutils.sysconfig
-c = distutils.sysconfig.get_config_vars()
+import sysconfig
+c = sysconfig.get_config_vars()
if 'LDVERSION' in c:
print ('python'+c['LDVERSION'])
else:
@@ -13642,9 +13642,9 @@ EOD`
else
# old way: use libpython from python_configdir
ac_python_libdir=`$PYTHON -c \
- "from distutils.sysconfig import get_python_lib as f; \
+ "from sysconfig import get_path as f; \
import os; \
- print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
+ print (os.path.join(f('platstdlib'), 'config'));"`
PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
fi
@@ -13665,8 +13665,8 @@ $as_echo "$PYTHON_LIBS" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Python site-packages path" >&5
$as_echo_n "checking for Python site-packages path... " >&6; }
if test -z "$PYTHON_SITE_PKG"; then
- PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_lib(0,0));"`
+ PYTHON_SITE_PKG=`$PYTHON -c "import sysconfig; \
+ print (sysconfig.get_path('platlib'));"`
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_SITE_PKG" >&5
$as_echo "$PYTHON_SITE_PKG" >&6; }
@@ -13678,8 +13678,8 @@ $as_echo "$PYTHON_SITE_PKG" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra libraries" >&5
$as_echo_n "checking python extra libraries... " >&6; }
if test -z "$PYTHON_EXTRA_LDFLAGS"; then
- PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
- conf = distutils.sysconfig.get_config_var; \
+ PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import sysconfig; \
+ conf = sysconfig.get_config_var; \
print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LDFLAGS" >&5
@@ -13692,8 +13692,8 @@ $as_echo "$PYTHON_EXTRA_LDFLAGS" >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking python extra linking flags" >&5
$as_echo_n "checking python extra linking flags... " >&6; }
if test -z "$PYTHON_EXTRA_LIBS"; then
- PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
- conf = distutils.sysconfig.get_config_var; \
+ PYTHON_EXTRA_LIBS=`$PYTHON -c "import sysconfig; \
+ conf = sysconfig.get_config_var; \
print (conf('LINKFORSHARED'))"`
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EXTRA_LIBS" >&5
diff -urNp a/m4/ax_python_devel.m4 b/m4/ax_python_devel.m4
--- a/m4/ax_python_devel.m4 2021-08-02 13:38:21.025807373 +0200
+++ b/m4/ax_python_devel.m4 2021-08-02 14:36:33.262720424 +0200
@@ -139,17 +139,17 @@ variable to configure. See ``configure -
fi
#
- # Check if you have distutils, else fail
+ # Check if you have sysconfig, else fail
#
- AC_MSG_CHECKING([for the distutils Python package])
- ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+ AC_MSG_CHECKING([for the sysconfig Python package])
+ ac_sysconfig_result=`$PYTHON -c "import sysconfig" 2>&1`
if test $? -eq 0; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
- AC_MSG_ERROR([cannot import Python module "distutils".
+ AC_MSG_ERROR([cannot import Python module "sysconfig".
Please check your Python installation. The error was:
-$ac_distutils_result])
+$ac_sysconfig_result])
PYTHON_VERSION=""
fi
@@ -158,10 +158,10 @@ $ac_distutils_result])
#
AC_MSG_CHECKING([for Python include path])
if test -z "$PYTHON_CPPFLAGS"; then
- python_path=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_inc ());"`
- plat_python_path=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_inc (plat_specific=1));"`
+ python_path=`$PYTHON -c "import sysconfig; \
+ print (sysconfig.get_path('include'));"`
+ plat_python_path=`$PYTHON -c "import sysconfig; \
+ print (sysconfig.get_path('include'));"`
if test -n "${python_path}"; then
if test "${plat_python_path}" != "${python_path}"; then
python_path="-I$python_path -I$plat_python_path"
@@ -185,7 +185,7 @@ $ac_distutils_result])
# join all versioning strings, on some systems
# major/minor numbers could be in different list elements
-from distutils.sysconfig import *
+from sysconfig import *
e = get_config_var('VERSION')
if e is not None:
print(e)
@@ -208,8 +208,8 @@ EOD`
ac_python_libdir=`cat<<EOD | $PYTHON -
# There should be only one
-import distutils.sysconfig
-e = distutils.sysconfig.get_config_var('LIBDIR')
+import sysconfig
+e = sysconfig.get_config_var('LIBDIR')
if e is not None:
print (e)
EOD`
@@ -217,8 +217,8 @@ EOD`
# Now, for the library:
ac_python_library=`cat<<EOD | $PYTHON -
-import distutils.sysconfig
-c = distutils.sysconfig.get_config_vars()
+import sysconfig
+c = sysconfig.get_config_vars()
if 'LDVERSION' in c:
print ('python'+c[['LDVERSION']])
else:
@@ -237,9 +237,9 @@ EOD`
else
# old way: use libpython from python_configdir
ac_python_libdir=`$PYTHON -c \
- "from distutils.sysconfig import get_python_lib as f; \
+ "from sysconfig import get_path as f; \
import os; \
- print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"`
+ print (os.path.join(f('platstdlib'), 'config'));"`
PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version"
fi
@@ -258,8 +258,8 @@ EOD`
#
AC_MSG_CHECKING([for Python site-packages path])
if test -z "$PYTHON_SITE_PKG"; then
- PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
- print (distutils.sysconfig.get_python_lib(0,0));"`
+ PYTHON_SITE_PKG=`$PYTHON -c "import sysconfig; \
+ print (sysconfig.get_path('platlib'));"`
fi
AC_MSG_RESULT([$PYTHON_SITE_PKG])
AC_SUBST([PYTHON_SITE_PKG])
@@ -269,8 +269,8 @@ EOD`
#
AC_MSG_CHECKING(python extra libraries)
if test -z "$PYTHON_EXTRA_LDFLAGS"; then
- PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
- conf = distutils.sysconfig.get_config_var; \
+ PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import sysconfig; \
+ conf = sysconfig.get_config_var; \
print (conf('LIBS') + ' ' + conf('SYSLIBS'))"`
fi
AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
@@ -281,8 +281,8 @@ EOD`
#
AC_MSG_CHECKING(python extra linking flags)
if test -z "$PYTHON_EXTRA_LIBS"; then
- PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
- conf = distutils.sysconfig.get_config_var; \
+ PYTHON_EXTRA_LIBS=`$PYTHON -c "import sysconfig; \
+ conf = sysconfig.get_config_var; \
print (conf('LINKFORSHARED'))"`
fi
AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])

View file

@ -1,35 +1,25 @@
%global _hardened_build 1
%bcond_with python
%bcond_with perl
Summary: IPMI (Intelligent Platform Management Interface) library and tools
Name: OpenIPMI
Version: 2.0.36
Release: 5%{?dist}
Version: 2.0.32
Release: 13%{?dist}
License: LGPL-2.1-or-later and GPL-2.0-or-later or BSD-3-Clause
URL: https://sourceforge.net/projects/openipmi/
Source: https://downloads.sourceforge.net/openipmi/%{name}-%{version}.tar.gz
URL: http://sourceforge.net/projects/openipmi/
Source: http://downloads.sourceforge.net/openipmi/%{name}-%{version}.tar.gz
Source1: openipmi.sysconf
Source2: openipmi-helper
Source3: ipmi.service
Patch1: 0001-man.patch
Patch2: include-config-h-cmdlang.patch
Patch2: OpenIPMI-ax-python.patch
Patch3: OpenIPMI-sysconfig.patch
Patch4: OpenIPMI-c99.patch
Patch5: OpenIPMI-py313compat.patch
BuildRequires: make
BuildRequires: gdbm-devel glib2-devel net-snmp-devel ncurses-devel
%if %{with python} || %{with perl}
BuildRequires: swig
%endif
BuildRequires: openssl-devel
%if %{with python}
BuildRequires: python3-devel
%endif
%if %{with perl}
BuildRequires: perl-devel perl-generators
%endif
BuildRequires: gdbm-devel swig glib2-devel net-snmp-devel ncurses-devel
BuildRequires: openssl-devel python3-devel perl-devel perl-generators
BuildRequires: pkgconfig
BuildRequires: readline-devel
BuildRequires: automake
@ -55,16 +45,13 @@ Summary: The OpenIPMI runtime libraries
The OpenIPMI-libs package contains the runtime libraries for shared binaries
and applications.
%if %{with perl}
%package perl
Summary: IPMI Perl language bindings
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description perl
The OpenIPMI-perl package contains the Perl language bindings for OpenIPMI.
%endif
%if %{with python}
%package -n python3-openipmi
%{?python_provide:%python_provide python3-openipmi}
%{?python_provide:%python_provide python3-OpenIPMI}
@ -77,14 +64,12 @@ Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description -n python3-openipmi
The OpenIPMI-python package contains the Python language bindings for OpenIPMI.
%endif
%package devel
Summary: The development environment for the OpenIPMI project
Requires: pkgconfig
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
Requires: %{name}-lanserv%{?_isa} = %{version}-%{release}
%description devel
The OpenIPMI-devel package contains the development libraries and header files
@ -93,7 +78,6 @@ of the OpenIPMI project.
%package lanserv
Summary: Emulates an IPMI network listener
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: %{name}-libs%{?_isa} = %{version}-%{release}
%description lanserv
This package contains a network IPMI listener.
@ -109,15 +93,8 @@ This package contains a network IPMI listener.
LDFLAGS="%{__global_ldflags} -Wl,--as-needed" \
--disable-dependency-tracking \
--disable-static \
%if %{with python}
--with-pythoninstall=%{python3_sitearch} \
--with-python=%{__python3} \
%else
--with-python=no \
%endif
%if %{without perl}
--with-perl=no \
%endif
--with-tcl=no \
--with-tkinter=no
@ -194,17 +171,13 @@ echo ".so man1/openipmish.1" > %{buildroot}%{_mandir}/man1/ipmish.1
%{_mandir}/man7/ipmi_cmdlang*
%{_mandir}/man7/openipmi_conparms*
%if %{with perl}
%files perl
%attr(644,root,root) %{perl_vendorarch}/OpenIPMI.pm
%{perl_vendorarch}/auto/OpenIPMI
%endif
%if %{with python}
%files -n python3-openipmi
%{python3_sitearch}/*OpenIPMI*
%{python3_sitearch}/__pycache__/OpenIPMI.*.pyc
%endif
%files libs
%{_libdir}/libOpenIPMI*.so.*
@ -228,39 +201,6 @@ echo ".so man1/openipmish.1" > %{buildroot}%{_mandir}/man1/ipmish.1
%{_mandir}/man5/ipmi_sim_cmd.5*
%changelog
* Fri Jan 16 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.36-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild
* Mon Jan 12 2026 Josef Ridky <jridky@redhat.com> - 2.0.36-4
- rebuild for new net-snmp release
* Wed Jul 23 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.36-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild
* Thu Jan 16 2025 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.36-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild
* Thu Aug 22 2024 Fedora Release Monitoring <release-monitoring@fedoraproject.org> - 2.0.36-1
- Update to 2.0.36 (#2302353)
- Resolves CVE-2024-42934
* Wed Jul 17 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.35-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Tue May 7 2024 Pavel Cahyna <pcahyna@redhat.com> - 2.0.35-1
- Switch to https
- Update to 2.0.35 (rhbz#2278007)
drop patch integrated upstream
* Sun Feb 11 2024 Pavel Cahyna <pcahyna@redhat.com> - 2.0.34-1
- Update to 2.0.34 (rhbz#2105023)
- Resolve issues found by rpmdiff
- add a patch to fix getaddrinfo detection to avoid using gethostbyname
- add explicit Requires: on subpackages to avoid the need to test
interoperability between the various combinations of old and new
subpackages
- Conditional Perl & Python module build, by default disabled
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.32-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild

View file

@ -1,12 +0,0 @@
diff -up OpenIPMI-2.0.32/cmdlang/cmdlang.c~ OpenIPMI-2.0.32/cmdlang/cmdlang.c
--- OpenIPMI-2.0.32/cmdlang/cmdlang.c~ 2021-01-22 19:51:28.000000000 +0100
+++ OpenIPMI-2.0.32/cmdlang/cmdlang.c 2022-01-28 11:55:42.375470392 +0100
@@ -32,6 +32,8 @@
*/
+#include <config.h>
+
#include <errno.h>
#include <string.h>
#include <ctype.h>

View file

@ -1 +1 @@
SHA512 (OpenIPMI-2.0.36.tar.gz) = a47725308336f200e88a1eb8641ed5ef03fc8bb43ee47f7a99e39df68640ff912b6842c1710d7e767aeb724fc41fa4ed3b244685812ee985e5200003a45f4015
SHA512 (OpenIPMI-2.0.32.tar.gz) = e409f32e6bbf26756338ada386fa394d48d734b4d6ba4beca700ce60bc3af3d0f41e972a328c4e076ae014f4fbd8598d05d3f879f9c6d76198e6ae1a2ba03e95