Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package netavark for openSUSE:Factory 
checked in at 2024-12-11 21:00:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/netavark (Old)
 and      /work/SRC/openSUSE:Factory/.netavark.new.29675 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "netavark"

Wed Dec 11 21:00:35 2024 rev:16 rq:1229708 version:1.13.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/netavark/netavark.changes        2024-11-29 
00:08:52.889429226 +0100
+++ /work/SRC/openSUSE:Factory/.netavark.new.29675/netavark.changes     
2024-12-11 21:04:15.888793116 +0100
@@ -1,0 +2,9 @@
+Tue Dec 10 06:53:58 UTC 2024 - madhankumar.chellamu...@suse.com
+
+- Update to version 1.13.1:
+  * Release v1.13.1
+  * Release notes for v1.13.1
+  * setup: on av errors cleanup again
+  * nftables: add daddr match to port forward jump rule
+
+-------------------------------------------------------------------

Old:
----
  netavark-1.13.0.tar.gz

New:
----
  netavark-1.13.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ netavark.spec ++++++
--- /var/tmp/diff_new_pack.xJx0Ci/_old  2024-12-11 21:04:17.348854050 +0100
+++ /var/tmp/diff_new_pack.xJx0Ci/_new  2024-12-11 21:04:17.348854050 +0100
@@ -19,7 +19,7 @@
 %define major_minor %((v=%{version}; echo ${v%.*}))
 
 Name:           netavark
-Version:        1.13.0
+Version:        1.13.1
 Release:        0
 Summary:        Container network stack
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.xJx0Ci/_old  2024-12-11 21:04:17.376855219 +0100
+++ /var/tmp/diff_new_pack.xJx0Ci/_new  2024-12-11 21:04:17.380855386 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/containers/netavark.git</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="scm">git</param>
-    <param name="revision">v1.13.0</param>
+    <param name="revision">v1.13.1</param>
     <param name="match-tag">*</param>
     <param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
     <param name="versionrewrite-replacement">\1</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.xJx0Ci/_old  2024-12-11 21:04:17.404856387 +0100
+++ /var/tmp/diff_new_pack.xJx0Ci/_new  2024-12-11 21:04:17.408856554 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/containers/netavark.git</param>
-              <param 
name="changesrevision">00e74728cc65aac7cdc6ba0ac74fc12e947bb04c</param></service></servicedata>
+              <param 
name="changesrevision">0935a20455c3e6292a29b2a7b1a4030716b96be5</param></service></servicedata>
 (No newline at EOF)
 

++++++ netavark-1.13.0.tar.gz -> netavark-1.13.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/netavark-1.13.0/Cargo.lock 
new/netavark-1.13.1/Cargo.lock
--- old/netavark-1.13.0/Cargo.lock      2024-10-29 16:04:38.000000000 +0100
+++ new/netavark-1.13.1/Cargo.lock      2024-12-04 18:59:45.000000000 +0100
@@ -1280,7 +1280,7 @@
 
 [[package]]
 name = "netavark"
-version = "1.13.0"
+version = "1.13.1"
 dependencies = [
  "anyhow",
  "chrono",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/netavark-1.13.0/Cargo.toml 
new/netavark-1.13.1/Cargo.toml
--- old/netavark-1.13.0/Cargo.toml      2024-10-29 16:04:38.000000000 +0100
+++ new/netavark-1.13.1/Cargo.toml      2024-12-04 18:59:45.000000000 +0100
@@ -1,6 +1,6 @@
 [package]
 name = "netavark"
-version = "1.13.0"
+version = "1.13.1"
 edition = "2021"
 authors = ["github.com/containers"]
 license = "Apache-2.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/netavark-1.13.0/RELEASE_NOTES.md 
new/netavark-1.13.1/RELEASE_NOTES.md
--- old/netavark-1.13.0/RELEASE_NOTES.md        2024-10-29 16:04:38.000000000 
+0100
+++ new/netavark-1.13.1/RELEASE_NOTES.md        2024-12-04 18:59:45.000000000 
+0100
@@ -1,5 +1,10 @@
 # Release Notes
 
+## v1.13.1
+
+* Fixed a bug where port forwarding rules might not be removed correctly on 
nftables when different host ips are used for the same port. 
([#1129](https://github.com/containers/netavark/issues/1129))
+* On aardvark-dns setup errors properly cleanup interfaces and firewall rules 
again. ([#1121](https://github.com/containers/netavark/issues/1121))
+
 ## v1.13.0
 
 * Fixed bug where port forwarding rules might not be removed correctly on 
nftables
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/netavark-1.13.0/src/commands/setup.rs 
new/netavark-1.13.1/src/commands/setup.rs
--- old/netavark-1.13.0/src/commands/setup.rs   2024-10-29 16:04:38.000000000 
+0100
+++ new/netavark-1.13.1/src/commands/setup.rs   2024-12-04 18:59:45.000000000 
+0100
@@ -3,8 +3,8 @@
 use crate::dns::aardvark::Aardvark;
 use crate::error::{NetavarkError, NetavarkResult};
 use crate::firewall;
-use crate::network::driver::{get_network_driver, DriverInfo};
-use crate::network::netlink::LinkID;
+use crate::network::driver::{get_network_driver, DriverInfo, NetworkDriver};
+use crate::network::netlink::{self, LinkID};
 use crate::network::{self};
 use crate::network::{core_utils, types};
 
@@ -109,17 +109,11 @@
                     Ok((s, a)) => (s, a),
                     Err(e) => {
                         // now teardown the already setup drivers
-                        for dri in drivers.iter().take(i) {
-                            match dri.teardown((&mut hostns.netlink, &mut 
netns.netlink)) {
-                                Ok(_) => {}
-                                Err(e) => {
-                                    error!(
-                                    "failed to cleanup previous networks after 
setup failed: {}",
-                                    e
-                                )
-                                }
-                            };
-                        }
+                        teardown_drivers(
+                            drivers.iter().take(i),
+                            &mut hostns.netlink,
+                            &mut netns.netlink,
+                        );
                         return Err(e);
                     }
                 };
@@ -139,22 +133,19 @@
                     // ignore error when path already exists
                     Err(ref e) if e.kind() == 
std::io::ErrorKind::AlreadyExists => {}
                     Err(e) => {
-                        return Err(std::io::Error::new(
-                            std::io::ErrorKind::Other,
-                            format!("failed to create aardvark-dns directory: 
{e}"),
-                        )
-                        .into());
+                        teardown_drivers(drivers.iter(), &mut hostns.netlink, 
&mut netns.netlink);
+                        return Err(NetavarkError::wrap(
+                            format!("failed to create aardvark-dns directory 
{}", path.display()),
+                            NetavarkError::Io(e),
+                        ));
                     }
                 }
 
                 let aardvark_interface = Aardvark::new(path, rootless, 
aardvark_bin, dns_port);
 
                 if let Err(er) = 
aardvark_interface.commit_netavark_entries(aardvark_entries) {
-                    return Err(std::io::Error::new(
-                        std::io::ErrorKind::Other,
-                        format!("Error while applying dns entries: {er}"),
-                    )
-                    .into());
+                    teardown_drivers(drivers.iter(), &mut hostns.netlink, &mut 
netns.netlink);
+                    return Err(NetavarkError::wrap("error while applying dns 
entries", er));
                 }
             } else {
                 info!(
@@ -170,3 +161,18 @@
         Ok(())
     }
 }
+
+fn teardown_drivers<'a, I>(drivers: I, host: &mut netlink::Socket, netns: &mut 
netlink::Socket)
+where
+    I: Iterator<Item = &'a Box<dyn NetworkDriver + 'a>>,
+{
+    for driver in drivers {
+        if let Err(e) = driver.teardown((host, netns)) {
+            error!(
+                "failed to cleanup network {} after setup failed: {}",
+                driver.network_name(),
+                e
+            );
+        };
+    }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/netavark-1.13.0/src/firewall/nft.rs 
new/netavark-1.13.1/src/firewall/nft.rs
--- old/netavark-1.13.0/src/firewall/nft.rs     2024-10-29 16:04:38.000000000 
+0100
+++ new/netavark-1.13.1/src/firewall/nft.rs     2024-12-04 18:59:45.000000000 
+0100
@@ -1011,14 +1011,18 @@
                     continue;
                 }
             }
-            let daddr_cond: Option<stmt::Statement> =
-                daddr.map(|i| get_ip_match(&i, "daddr", stmt::Operator::EQ));
 
-            // dnat chain: <protocol> dport <port> jump <container_dnat_chain>
-            rules.push(make_rule(
-                DNATCHAIN,
-                vec![dport_cond.clone(), get_jump_action(&subnet_dnat_chain)],
-            ));
+            let mut jump_statements = Vec::with_capacity(3);
+            let daddr_cond: Option<stmt::Statement> = daddr.map(|i| {
+                let daddr = get_ip_match(&i, "daddr", stmt::Operator::EQ);
+                jump_statements.push(daddr.clone());
+                daddr
+            });
+            jump_statements.push(dport_cond.clone());
+            jump_statements.push(get_jump_action(&subnet_dnat_chain));
+
+            // dnat chain: [ip daddr <ip>] <protocol> dport <port> jump 
<container_dnat_chain>
+            rules.push(make_rule(DNATCHAIN, jump_statements));
 
             // Container dnat chain: ip saddr <subnet> ip daddr <host IP> 
<proto> dport <port(s)> jump SETMARKCHAIN
             rules.push(get_subnet_dport_match(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/netavark-1.13.0/test/100-bridge-iptables.bats 
new/netavark-1.13.1/test/100-bridge-iptables.bats
--- old/netavark-1.13.0/test/100-bridge-iptables.bats   2024-10-29 
16:04:38.000000000 +0100
+++ new/netavark-1.13.1/test/100-bridge-iptables.bats   2024-12-04 
18:59:45.000000000 +0100
@@ -1088,3 +1088,12 @@
     assert "${lines[3]}" == "-A NETAVARK_FORWARD -s 10.88.0.0/16 -j ACCEPT" 
"NETAVARK_FORWARD rule 3"
     assert "${#lines[@]}" = 4 "too many NETAVARK_FORWARD rules"
 }
+
+@test "$fw_driver - aardvark-dns error cleanup" {
+    expected_rc=1 run_netavark -a /usr/bin/false --file 
${TESTSDIR}/testfiles/dualstack-bridge-custom-dns-server.json setup 
$(get_container_netns_path)
+    assert_json ".error" "error while applying dns entries: IO error: 
aardvark-dns exited unexpectedly without error message" "aardvark-dns error"
+    run_in_host_netns iptables -S
+    assert "$output" !~ "10.89.3.0/24" "leaked network iptables rules after 
setup error"
+    run_in_host_netns iptables -S -t nat
+    assert "$output" !~ "10.89.3.0/24" "leaked network iptables NAT rules 
after setup error"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/netavark-1.13.0/test/250-bridge-nftables.bats 
new/netavark-1.13.1/test/250-bridge-nftables.bats
--- old/netavark-1.13.0/test/250-bridge-nftables.bats   2024-10-29 
16:04:38.000000000 +0100
+++ new/netavark-1.13.1/test/250-bridge-nftables.bats   2024-12-04 
18:59:45.000000000 +0100
@@ -985,7 +985,7 @@
 }
 
 # regression test for https://github.com/containers/netavark/issues/1068
-@test "$fw_driver - port firewall rule cleanup" {
+@test "$fw_driver - port firewall rule cleanup port protocol" {
     run_netavark --file ${TESTSDIR}/testfiles/bridge-port-tcp-udp.json setup 
$(get_container_netns_path)
 
     local chain="nv_2f259bab_10_88_0_0_nm16_dnat"
@@ -1003,3 +1003,36 @@
 
     expected_rc=1 run_in_host_netns nft list chain inet netavark $chain
 }
+
+# regression test for https://github.com/containers/netavark/issues/1129
+@test "$fw_driver - port firewall rule cleanup host ip" {
+    run_netavark --file ${TESTSDIR}/testfiles/bridge-port-hostip.json setup 
$(get_container_netns_path)
+
+    local chain="nv_2f259bab_10_88_0_0_nm16_dnat"
+    run_in_host_netns nft list chain inet netavark $chain
+
+    run_in_host_netns nft list ruleset
+
+    # extra check so we can be sure that these rules exists before checking 
later of they are removed
+    assert "$output" =~ "ip saddr 10.88.0.0/16 ip daddr 192.168.188.25 tcp 
dport 8080 jump NETAVARK-HOSTPORT-SETMARK"
+    assert "$output" =~ "ip saddr 127.0.0.1 ip daddr 192.168.188.25 tcp dport 
8080 jump NETAVARK-HOSTPORT-SETMARK"
+    assert "$output" =~ "ip daddr 192.168.188.25 tcp dport 8080 dnat ip to 
10.88.0.14:8080"
+    assert "$output" =~ "ip saddr 10.88.0.0/16 ip daddr 192.168.188.24 tcp 
dport 8080 jump NETAVARK-HOSTPORT-SETMARK"
+    assert "$output" =~ "ip saddr 127.0.0.1 ip daddr 192.168.188.24 tcp dport 
8080 jump NETAVARK-HOSTPORT-SETMARK"
+    assert "$output" =~ "ip daddr 192.168.188.24 tcp dport 8080 dnat ip to 
10.88.0.14:8080"
+
+    run_netavark --file ${TESTSDIR}/testfiles/bridge-port-hostip.json teardown 
$(get_container_netns_path)
+
+    expected_rc=1 run_in_host_netns nft list chain inet netavark $chain
+    run_in_host_netns nft list chain inet netavark NETAVARK-HOSTPORT-DNAT
+    assert "$output" == $'table inet netavark {\n\tchain 
NETAVARK-HOSTPORT-DNAT {\n\t}\n}' "NETAVARK-HOSTPORT-DNAT chain must be empty"
+}
+
+@test "$fw_driver - aardvark-dns error cleanup" {
+    expected_rc=1 run_netavark -a /usr/bin/false --file 
${TESTSDIR}/testfiles/dualstack-bridge-custom-dns-server.json setup 
$(get_container_netns_path)
+    assert_json ".error" "error while applying dns entries: IO error: 
aardvark-dns exited unexpectedly without error message" "aardvark-dns error"
+
+    run_in_host_netns nft list table inet netavark
+    assert "$output" !~ "10.89.3.0/24" "leaked network nft rules after setup 
error"
+    assert "$output" !~ "fd10:88:a::/64" "leaked network nft rules after setup 
error"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/netavark-1.13.0/test/testfiles/bridge-port-hostip.json 
new/netavark-1.13.1/test/testfiles/bridge-port-hostip.json
--- old/netavark-1.13.0/test/testfiles/bridge-port-hostip.json  1970-01-01 
01:00:00.000000000 +0100
+++ new/netavark-1.13.1/test/testfiles/bridge-port-hostip.json  2024-12-04 
18:59:45.000000000 +0100
@@ -0,0 +1,52 @@
+{
+    "container_id": 
"f922ffdda5718b26ea585a500d5ad05191da5461b06d6f62e4d1f66ca901a253",
+    "container_name": "sharp_gould",
+    "port_mappings": [
+        {
+            "host_ip": "192.168.188.25",
+            "container_port": 8080,
+            "host_port": 8080,
+            "range": 1,
+            "protocol": "tcp"
+        },
+        {
+            "host_ip": "192.168.188.24",
+            "container_port": 8080,
+            "host_port": 8080,
+            "range": 1,
+            "protocol": "tcp"
+        }
+    ],
+    "networks": {
+        "podman": {
+            "static_ips": [
+                "10.88.0.14"
+            ],
+            "aliases": [
+                "f922ffdda571"
+            ],
+            "interface_name": "eth0"
+        }
+    },
+    "network_info": {
+        "podman": {
+            "name": "podman",
+            "id": 
"2f259bab93aaaaa2542ba43ef33eb990d0999ee1b9924b557b7be53c0b7a1bb9",
+            "driver": "bridge",
+            "network_interface": "podman0",
+            "created": "2024-09-05T15:00:04.45111926+02:00",
+            "subnets": [
+                {
+                    "subnet": "10.88.0.0/16",
+                    "gateway": "10.88.0.1"
+                }
+            ],
+            "ipv6_enabled": false,
+            "internal": false,
+            "dns_enabled": false,
+            "ipam_options": {
+                "driver": "host-local"
+            }
+        }
+    }
+}

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/netavark/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.netavark.new.29675/vendor.tar.gz differ: char 13, 
line 1

Reply via email to