If a bridge has `bridge_ports` set to `none` we just skip the field.
Later we use the existance of the field to determine whether the type
should be `bridge`. This led to bridges without `bridge_ports` not
being recognized as bridges.

In the `/nodes/{}/network` endpiont we do permission checks for
bridges, and if interfaces were missing the type=bridge field no
permission checks were done. This led to interfaces being returned
even if the user did not have permission to access them.

This fixes this by also setting the type to `bridge` for empty bridges.

Signed-off-by: Hannes Laimer <h.lai...@proxmox.com>
---
as Fabian noted on v1, this probably also makes sense to add to
stable-bookworm

changes since v1, thanks @Fabian:
 - fix problem were `bonds` were also recognized as bridges

 src/PVE/INotify.pm | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm
index bbcb9f8..898b522 100644
--- a/src/PVE/INotify.pm
+++ b/src/PVE/INotify.pm
@@ -994,7 +994,10 @@ SECTION: while (defined($line = <$fh>)) {
                     } elsif ($id eq 'slaves' || $id eq 'bridge_ports') {
                         my $devs = {};
                         foreach my $p (split(/\s+/, $value)) {
-                            next if $p eq 'none';
+                            if ($p eq 'none') {
+                                $d->{'is_empty_bridge'} = $id eq 
'bridge_ports';
+                                next;
+                            }
                             $devs->{$p} = 1;
                         }
                         my $str = join(' ', sort keys %{$devs});
@@ -1077,7 +1080,8 @@ OUTER:
 
         my $ip_link = $ip_links->{$altnames->{$iface} // $iface};
 
-        if (defined $d->{'bridge_ports'}) {
+        if (defined $d->{'bridge_ports'} || $d->{'is_empty_bridge'}) {
+            delete $d->{'is_empty_bridge'} if defined $d->{'is_empty_bridge'};
             $d->{type} = 'bridge';
             if (!defined($d->{bridge_stp})) {
                 $d->{bridge_stp} = 'off';
-- 
2.47.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to