In order for the new SDN ipsets to show up we need to adapt the
existing API endpoints so they read the SDN configuration. We reload
the SDN configuration explicitly, in order to return only the IPSets
the user is allowed to see.

Signed-off-by: Stefan Hanreich <s.hanre...@proxmox.com>
---
 src/PVE/API2/Firewall/Cluster.pm | 12 +++++++++++-
 src/PVE/API2/Firewall/VM.pm      | 10 +++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/src/PVE/API2/Firewall/Cluster.pm b/src/PVE/API2/Firewall/Cluster.pm
index 48ad90d..4d51b34 100644
--- a/src/PVE/API2/Firewall/Cluster.pm
+++ b/src/PVE/API2/Firewall/Cluster.pm
@@ -9,6 +9,7 @@ use PVE::Firewall;
 use PVE::API2::Firewall::Aliases;
 use PVE::API2::Firewall::Rules;
 use PVE::API2::Firewall::Groups;
+use PVE::API2::Firewall::Helpers;
 use PVE::API2::Firewall::IPSet;
 
 #fixme: locking?
@@ -255,7 +256,16 @@ __PACKAGE__->register_method({
 
        my $conf = PVE::Firewall::load_clusterfw_conf();
 
-       return PVE::Firewall::Helpers::collect_refs($conf, $param->{type}, 
"dc");
+       # we are explicitly loading the SDN config here with the scope of the 
current
+       # API user, so we only return the IPSets that the user can actually use
+       my $allowed_vms = PVE::API2::Firewall::Helpers::get_allowed_vms();
+       my $allowed_vnets = PVE::API2::Firewall::Helpers::get_allowed_vnets();
+       my $sdn_conf = PVE::Firewall::load_sdn_conf($allowed_vms, 
$allowed_vnets);
+
+       my $cluster_refs = PVE::Firewall::Helpers::collect_refs($conf, 
$param->{type}, "dc");
+       my $sdn_refs = PVE::Firewall::Helpers::collect_refs($sdn_conf, 
$param->{type}, "sdn");
+
+       return [@$sdn_refs, @$cluster_refs];
     }});
 
 1;
diff --git a/src/PVE/API2/Firewall/VM.pm b/src/PVE/API2/Firewall/VM.pm
index 4222103..2d25735 100644
--- a/src/PVE/API2/Firewall/VM.pm
+++ b/src/PVE/API2/Firewall/VM.pm
@@ -8,6 +8,7 @@ use PVE::JSONSchema qw(get_standard_option);
 use PVE::Cluster;
 use PVE::Firewall;
 use PVE::API2::Firewall::Rules;
+use PVE::API2::Firewall::Helpers;
 use PVE::API2::Firewall::Aliases;
 
 
@@ -281,10 +282,17 @@ sub register_handlers {
            my $cluster_conf = PVE::Firewall::load_clusterfw_conf();
            my $fw_conf = PVE::Firewall::load_vmfw_conf($cluster_conf, 
$rule_env, $param->{vmid});
 
+           # we are explicitly loading the SDN config here with the scope of 
the current
+           # API user, so we only return the IPSets that the user can actually 
use
+           my $allowed_vms = PVE::API2::Firewall::Helpers::get_allowed_vms();
+           my $allowed_vnets = 
PVE::API2::Firewall::Helpers::get_allowed_vnets();
+           my $sdn_conf = PVE::Firewall::load_sdn_conf($allowed_vms, 
$allowed_vnets);
+
            my $dc_refs = PVE::Firewall::Helpers::collect_refs($cluster_conf, 
$param->{type}, 'dc');
+           my $sdn_refs = PVE::Firewall::Helpers::collect_refs($sdn_conf, 
$param->{type}, "sdn");
            my $vm_refs = PVE::Firewall::Helpers::collect_refs($fw_conf, 
$param->{type}, 'guest');
 
-           return [@$dc_refs, @$vm_refs];
+           return [@$dc_refs, @$sdn_refs, @$vm_refs];
        }});
 }
 
-- 
2.39.5


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

Reply via email to