Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-iptables for openSUSE:Factory
checked in at 2026-08-18 16:36:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-iptables (Old)
and /work/SRC/openSUSE:Factory/.python-iptables.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-iptables"
Tue Aug 18 16:36:05 2026 rev:10 rq:1371598 version:1.2.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-iptables/python-iptables.changes
2024-08-23 22:27:54.379990164 +0200
+++
/work/SRC/openSUSE:Factory/.python-iptables.new.1258/python-iptables.changes
2026-08-18 16:36:40.730348313 +0200
@@ -1,0 +2,7 @@
+Mon Aug 17 15:57:22 UTC 2026 - Markéta Machová <[email protected]>
+
+- Upgrade to 1.2.0
+ * bump sources archive to version 1.2.0
+ * fix cpython expression to also match armv7hl flavor of lib
+
+-------------------------------------------------------------------
Old:
----
v1.0.1.tar.gz
New:
----
v1.2.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-iptables.spec ++++++
--- /var/tmp/diff_new_pack.z7Soym/_old 2026-08-18 16:36:41.425373177 +0200
+++ /var/tmp/diff_new_pack.z7Soym/_new 2026-08-18 16:36:41.427373249 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-iptables
#
-# Copyright (c) 2024 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
Name: python-iptables
-Version: 1.0.1
+Version: 1.2.0
Release: 0
Summary: Python bindings for iptables
License: Apache-2.0
@@ -63,6 +63,6 @@
%license NOTICE
%doc doc README.md
%{python_sitearch}/iptc
-%{python_sitearch}/libxtwrapper.cpython*-linux-gnu.so
+%{python_sitearch}/libxtwrapper.cpython*.so
%{python_sitearch}/python_iptables-%{version}.dist-info
++++++ v1.0.1.tar.gz -> v1.2.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/.github/workflows/build.yaml
new/python-iptables-1.2.0/.github/workflows/build.yaml
--- old/python-iptables-1.0.1/.github/workflows/build.yaml 2023-01-22
21:50:31.000000000 +0100
+++ new/python-iptables-1.2.0/.github/workflows/build.yaml 2025-04-07
00:11:08.000000000 +0200
@@ -6,9 +6,10 @@
tags:
- "v*"
pull_request:
+
jobs:
build-and-test:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-20.04
strategy:
matrix:
python-version:
@@ -19,9 +20,9 @@
- "3.11"
steps:
- name: Check out code
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v2
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Build package
@@ -35,15 +36,15 @@
run: sudo PATH=$PATH coverage run setup.py test
release:
- runs-on: ubuntu-latest
+ runs-on: ubuntu-20.04
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
needs:
- build-and-test
steps:
- name: Check out code
- uses: actions/checkout@v2
+ uses: actions/checkout@v4
- name: Set up Python
- uses: actions/setup-python@v2
+ uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Build package
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/doc/conf.py
new/python-iptables-1.2.0/doc/conf.py
--- old/python-iptables-1.0.1/doc/conf.py 2023-01-22 21:50:31.000000000
+0100
+++ new/python-iptables-1.2.0/doc/conf.py 2025-04-07 00:11:08.000000000
+0200
@@ -196,6 +196,6 @@
# Example configuration for intersphinx: refer to the Python standard library.
-intersphinx_mapping = {'http://docs.python.org/': None}
+intersphinx_mapping = {'python': ('http://docs.python.org/', None)}
autoclass_content="both"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/iptc/ip4tc.py
new/python-iptables-1.2.0/iptc/ip4tc.py
--- old/python-iptables-1.0.1/iptc/ip4tc.py 2023-01-22 21:50:31.000000000
+0100
+++ new/python-iptables-1.2.0/iptc/ip4tc.py 2025-04-07 00:11:08.000000000
+0200
@@ -42,10 +42,14 @@
def is_table_available(name):
try:
+ if name in Table.existing_table_names:
+ return Table.existing_table_names[name]
Table(name)
+ Table.existing_table_names[name] = True
return True
except IPTCError:
pass
+ Table.existing_table_names[name] = False
return False
@@ -669,6 +673,11 @@
does not take any value in the iptables extension, an empty string i.e. ""
should be used.
"""
+
+ STANDARD_TARGETS = ["", "ACCEPT", "DROP", "REJECT", "RETURN", "REDIRECT",
"SNAT", "DNAT", \
+ "MASQUERADE", "MIRROR", "TOS", "MARK", "QUEUE", "LOG"]
+ """This is the constant for all standard targets."""
+
def __init__(self, rule, name=None, target=None, revision=None, goto=None):
"""
*rule* is the Rule object this match belongs to; it can be changed
@@ -784,6 +793,8 @@
self.reset()
def _is_standard_target(self):
+ if self._name in Target.STANDARD_TARGETS:
+ return False
for t in self._rule.tables:
if t.is_chain(self._name):
return True
@@ -1572,6 +1583,8 @@
"""This is the constant for all tables."""
_cache = dict()
+ existing_table_names = dict()
+ """Dictionary to check faster if a table is available."""
def __new__(cls, name, autocommit=None):
obj = Table._cache.get(name, None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/iptc/ip6tc.py
new/python-iptables-1.2.0/iptc/ip6tc.py
--- old/python-iptables-1.0.1/iptc/ip6tc.py 2023-01-22 21:50:31.000000000
+0100
+++ new/python-iptables-1.2.0/iptc/ip6tc.py 2025-04-07 00:11:08.000000000
+0200
@@ -19,10 +19,14 @@
def is_table6_available(name):
try:
+ if name in Table6.existing_table_names:
+ return Table6.existing_table_names[name]
Table6(name)
+ Table6.existing_table_names[name] = True
return True
except IPTCError:
pass
+ Table6.existing_table_names[name] = False
return False
@@ -412,22 +416,19 @@
def get_in_interface(self):
intf = ""
if self.entry.ipv6.invflags & ip6t_ip6.IP6T_INV_VIA_IN:
- intf = "".join(["!", intf])
- iface = bytearray(_IFNAMSIZ)
- iface[:len(self.entry.ipv6.iniface)] = self.entry.ipv6.iniface
- mask = bytearray(_IFNAMSIZ)
- mask[:len(self.entry.ipv6.iniface_mask)] = self.entry.ipv6.iniface_mask
- if mask[0] == 0:
+ intf = "!"
+
+ iface = self.entry.ipv6.iniface.decode()
+ mask = self.entry.ipv6.iniface_mask
+
+ if len(mask) == 0:
return None
- for i in range(_IFNAMSIZ):
- if mask[i] != 0:
- intf = "".join([intf, chr(iface[i])])
- else:
- if iface[i - 1] != 0:
- intf = "".join([intf, "+"])
- else:
- intf = intf[:-1]
- break
+
+ intf += iface
+ if len(iface) == len(mask):
+ intf += '+'
+ intf = intf[:_IFNAMSIZ]
+
return intf
def set_in_interface(self, intf):
@@ -456,23 +457,19 @@
def get_out_interface(self):
intf = ""
if self.entry.ipv6.invflags & ip6t_ip6.IP6T_INV_VIA_OUT:
- intf = "".join(["!", intf])
- iface = bytearray(_IFNAMSIZ)
- iface[:len(self.entry.ipv6.outiface)] = self.entry.ipv6.outiface
- mask = bytearray(_IFNAMSIZ)
- mask[:len(self.entry.ipv6.outiface_mask)] = \
- self.entry.ipv6.outiface_mask
- if mask[0] == 0:
+ intf = "!"
+
+ iface = self.entry.ipv6.outiface.decode()
+ mask = self.entry.ipv6.outiface_mask
+
+ if len(mask) == 0:
return None
- for i in range(_IFNAMSIZ):
- if mask[i] != 0:
- intf = "".join([intf, chr(iface[i])])
- else:
- if iface[i - 1] != 0:
- intf = "".join([intf, "+"])
- else:
- intf = intf[:-1]
- break
+
+ intf += iface
+ if len(iface) == len(mask):
+ intf += '+'
+ intf = intf[:_IFNAMSIZ]
+
return intf
def set_out_interface(self, intf):
@@ -579,6 +576,8 @@
"""This is the constant for all tables."""
_cache = dict()
+ existing_table_names = dict()
+ """Dictionary to check faster if a table is available."""
def __new__(cls, name, autocommit=None):
obj = Table6._cache.get(name, None)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/iptc/util.py
new/python-iptables-1.2.0/iptc/util.py
--- old/python-iptables-1.0.1/iptc/util.py 2023-01-22 21:50:31.000000000
+0100
+++ new/python-iptables-1.2.0/iptc/util.py 2025-04-07 00:11:08.000000000
+0200
@@ -3,7 +3,6 @@
import sys
import ctypes
import ctypes.util
-from distutils.sysconfig import get_python_lib
from itertools import product
from subprocess import Popen, PIPE
from sys import version_info
@@ -14,6 +13,12 @@
if name == 'SO':
return '.so'
raise Exception('Not implemented')
+try:
+ from distutils.sysconfig import get_python_lib
+except ModuleNotFoundError:
+ import sysconfig
+ def get_python_lib():
+ return sysconfig.get_path("purelib")
def _insert_ko(modprobe, modname):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/iptc/version.py
new/python-iptables-1.2.0/iptc/version.py
--- old/python-iptables-1.0.1/iptc/version.py 2023-01-22 21:50:31.000000000
+0100
+++ new/python-iptables-1.2.0/iptc/version.py 2025-04-07 00:11:08.000000000
+0200
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
__pkgname__ = "python-iptables"
-__version__ = "1.0.1"
+__version__ = "1.2.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/setup.py
new/python-iptables-1.2.0/setup.py
--- old/python-iptables-1.0.1/setup.py 2023-01-22 21:50:31.000000000 +0100
+++ new/python-iptables-1.2.0/setup.py 2025-04-07 00:11:08.000000000 +0200
@@ -3,7 +3,6 @@
"""python-iptables setup script"""
from setuptools import setup, Extension
-#from distutils.core import setup, Extension
# make pyflakes happy
__pkgname__ = None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/python-iptables-1.0.1/tests/test_iptc.py
new/python-iptables-1.2.0/tests/test_iptc.py
--- old/python-iptables-1.0.1/tests/test_iptc.py 2023-01-22
21:50:31.000000000 +0100
+++ new/python-iptables-1.2.0/tests/test_iptc.py 2025-04-07
00:11:08.000000000 +0200
@@ -423,7 +423,9 @@
def test_rule_interface(self):
# valid interfaces
rule = iptc.Rule6()
- for intf in ["eth0", "eth+", "ip6tnl1", "ip6tnl+", "!ppp0", "!ppp+"]:
+
+ max_length_valid_interface_name = "0123456789abcde"
+ for intf in ["eth0", "eth+", "ip6tnl1", "ip6tnl+", "!ppp0", "!ppp+",
max_length_valid_interface_name]:
rule.in_interface = intf
self.assertEquals(intf, rule.in_interface)
rule.out_interface = intf