]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: add virFirewallDGetPolicies()
authorEric Garver <eric@garver.life>
Thu, 22 Sep 2022 15:13:20 +0000 (11:13 -0400)
committerLaine Stump <laine@redhat.com>
Sat, 5 Nov 2022 18:34:37 +0000 (14:34 -0400)
Signed-off-by: Eric Garver <eric@garver.life>
Reviewed-by: Laine Stump <laine@redhat.com>
src/libvirt_private.syms
src/util/virfirewalld.c
src/util/virfirewalld.h

index 5bc58d928198652889eed1db3096b1c4ec7451e8..e150251062a90112d58e471b25696729bc87be5e 100644 (file)
@@ -2360,6 +2360,7 @@ virFirewallStartTransaction;
 # util/virfirewalld.h
 virFirewallDApplyRule;
 virFirewallDGetBackend;
+virFirewallDGetPolicies;
 virFirewallDGetVersion;
 virFirewallDGetZones;
 virFirewallDInterfaceSetZone;
index c909901833f7d076433f2784473b7d70122df820..0912508dbc451333a0559b41ff15a9e033e02942 100644 (file)
@@ -223,6 +223,47 @@ virFirewallDGetZones(char ***zones, size_t *nzones)
     return 0;
 }
 
+/**
+ * virFirewallDGetPolicies:
+ * @policies: array of char *, each entry is a null-terminated policy name
+ * @npolicies: number of entries in @policies
+ *
+ * Get the number of currently active firewalld policies, and their names
+ * in an array of null-terminated strings. The memory pointed to by
+ * @policies will belong to the caller, and must be freed.
+ *
+ * Returns 0 on success, -1 (and failure logged) on error
+ */
+int
+virFirewallDGetPolicies(char ***policies, size_t *npolicies)
+{
+    GDBusConnection *sysbus = virGDBusGetSystemBus();
+    g_autoptr(GVariant) reply = NULL;
+    g_autoptr(GVariant) array = NULL;
+
+    *npolicies = 0;
+    *policies = NULL;
+
+    if (!sysbus)
+        return -1;
+
+    if (virGDBusCallMethod(sysbus,
+                           &reply,
+                           G_VARIANT_TYPE("(as)"),
+                           NULL,
+                           VIR_FIREWALL_FIREWALLD_SERVICE,
+                           "/org/fedoraproject/FirewallD1",
+                           "org.fedoraproject.FirewallD1.policy",
+                           "getPolicies",
+                           NULL) < 0)
+        return -1;
+
+    g_variant_get(reply, "(@as)", &array);
+    *policies = g_variant_dup_strv(array, npolicies);
+
+    return 0;
+}
+
 
 /**
  * virFirewallDZoneExists:
index c396802a2f56abc29595dbe73483530013f49ad5..ef05896e2b8bc1dec89a9285234145d5805c7f72 100644 (file)
@@ -33,6 +33,7 @@ int virFirewallDGetVersion(unsigned long *version);
 int virFirewallDGetBackend(void);
 int virFirewallDIsRegistered(void);
 int virFirewallDGetZones(char ***zones, size_t *nzones);
+int virFirewallDGetPolicies(char ***policies, size_t *npolicies);
 bool virFirewallDZoneExists(const char *match);
 int virFirewallDApplyRule(virFirewallLayer layer,
                           char **args, size_t argsLen,