]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virgdbus: add DBus reply format check
authorPavel Hrdina <phrdina@redhat.com>
Mon, 21 Sep 2020 13:42:00 +0000 (15:42 +0200)
committerPavel Hrdina <phrdina@redhat.com>
Wed, 23 Sep 2020 10:53:31 +0000 (12:53 +0200)
We used to check the format of reply data with libdbus so we should do
the same with GLib DBus as well.

Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/rpc/virnetdaemon.c
src/util/virfirewalld.c
src/util/virgdbus.c
src/util/virgdbus.h
src/util/virpolkit.c
src/util/virsystemd.c

index 12d4d9bf87975cf0d8cd8cdb19c072311ae207e6..f3a5e9f75c4bd2f66f2d00a276e2753a3180c9e9 100644 (file)
@@ -487,6 +487,7 @@ virNetDaemonCallInhibit(virNetDaemonPtr dmn,
 
     rc = virGDBusCallMethodWithFD(systemBus,
                                   &reply,
+                                  G_VARIANT_TYPE("(h)"),
                                   &replyFD,
                                   NULL,
                                   "org.freedesktop.login1",
index 12448f068127047bc02efdb2359a523f79a970dc..a94ac7c1834ad53bcdafba1efa18b5f7136d19a1 100644 (file)
@@ -95,6 +95,7 @@ virFirewallDGetVersion(unsigned long *version)
 
     if (virGDBusCallMethod(sysbus,
                            &reply,
+                           G_VARIANT_TYPE("(v)"),
                            NULL,
                            VIR_FIREWALL_FIREWALLD_SERVICE,
                            "/org/fedoraproject/FirewallD1",
@@ -147,6 +148,7 @@ virFirewallDGetBackend(void)
 
     if (virGDBusCallMethod(sysbus,
                            &reply,
+                           G_VARIANT_TYPE("(v)"),
                            error,
                            VIR_FIREWALL_FIREWALLD_SERVICE,
                            "/org/fedoraproject/FirewallD1/config",
@@ -207,6 +209,7 @@ virFirewallDGetZones(char ***zones, size_t *nzones)
 
     if (virGDBusCallMethod(sysbus,
                            &reply,
+                           G_VARIANT_TYPE("(as)"),
                            NULL,
                            VIR_FIREWALL_FIREWALLD_SERVICE,
                            "/org/fedoraproject/FirewallD1",
@@ -295,6 +298,7 @@ virFirewallDApplyRule(virFirewallLayer layer,
 
     if (virGDBusCallMethod(sysbus,
                            &reply,
+                           G_VARIANT_TYPE("(s)"),
                            error,
                            VIR_FIREWALL_FIREWALLD_SERVICE,
                            "/org/fedoraproject/FirewallD1",
@@ -357,6 +361,7 @@ virFirewallDInterfaceSetZone(const char *iface,
     message = g_variant_new("(ss)", zone, iface);
 
     return virGDBusCallMethod(sysbus,
+                             NULL,
                              NULL,
                              NULL,
                              VIR_FIREWALL_FIREWALLD_SERVICE,
index 535b19f0a4deafc9b82716e0281f7b0d2364c257..837c8faf1f7f170b9be7d9058e86f270a8dc131a 100644 (file)
@@ -181,6 +181,7 @@ virGDBusCloseSystemBus(void)
  * virGDBusCallMethod:
  * @conn: a DBus connection
  * @reply: pointer to receive reply message, or NULL
+ * @replyType: pointer to GVariantType to validate reply data, or NULL
  * @error: libvirt error pointer or NULL
  * @busName: bus identifier of the target service
  * @objectPath: object path of the target service
@@ -198,6 +199,7 @@ virGDBusCloseSystemBus(void)
 int
 virGDBusCallMethod(GDBusConnection *conn,
                    GVariant **reply,
+                   const GVariantType *replyType,
                    virErrorPtr error,
                    const char *busName,
                    const char *objectPath,
@@ -220,7 +222,7 @@ virGDBusCallMethod(GDBusConnection *conn,
                                       ifaceName,
                                       method,
                                       data,
-                                      NULL,
+                                      replyType,
                                       G_DBUS_CALL_FLAGS_NONE,
                                       VIR_DBUS_METHOD_CALL_TIMEOUT_MILIS,
                                       NULL,
@@ -250,6 +252,7 @@ virGDBusCallMethod(GDBusConnection *conn,
 int
 virGDBusCallMethodWithFD(GDBusConnection *conn,
                          GVariant **reply,
+                         const GVariantType *replyType,
                          GUnixFDList **replyFD,
                          virErrorPtr error,
                          const char *busName,
@@ -274,7 +277,7 @@ virGDBusCallMethodWithFD(GDBusConnection *conn,
                                                         ifaceName,
                                                         method,
                                                         data,
-                                                        NULL,
+                                                        replyType,
                                                         G_DBUS_CALL_FLAGS_NONE,
                                                         VIR_DBUS_METHOD_CALL_TIMEOUT_MILIS,
                                                         dataFD,
@@ -342,6 +345,7 @@ virGDBusIsServiceInList(const char *listMethod,
 
     rc = virGDBusCallMethod(conn,
                             &reply,
+                            G_VARIANT_TYPE("(as)"),
                             NULL,
                             "org.freedesktop.DBus",
                             "/org/freedesktop/DBus",
index 6ea717eea2b73a67cfd4b8f32ce506a0406c7119..ca7073e27c3e5a0d76b37c1af85b7a8ea116e4f9 100644 (file)
@@ -45,6 +45,7 @@ virGDBusCloseSystemBus(void);
 int
 virGDBusCallMethod(GDBusConnection *conn,
                    GVariant **reply,
+                   const GVariantType *replyType,
                    virErrorPtr error,
                    const char *busName,
                    const char *objectPath,
@@ -55,6 +56,7 @@ virGDBusCallMethod(GDBusConnection *conn,
 int
 virGDBusCallMethodWithFD(GDBusConnection *conn,
                          GVariant **reply,
+                         const GVariantType *replyType,
                          GUnixFDList **replyFD,
                          virErrorPtr error,
                          const char *busName,
index 2ad00fd20612e16f21e17773814bb2ac28971662..aad924a065c7936f63a5dcd53d1c2fbb489834ac 100644 (file)
@@ -104,6 +104,7 @@ int virPolkitCheckAuth(const char *actionid,
 
     if (virGDBusCallMethod(sysbus,
                            &reply,
+                           G_VARIANT_TYPE("((bba{ss}))"),
                            NULL,
                            "org.freedesktop.PolicyKit1",
                            "/org/freedesktop/PolicyKit1/Authority",
index 32c830c002472ea830822d03f944595177077a51..8456085476e79c7b3827c1639d6b603c35df9ffa 100644 (file)
@@ -214,6 +214,7 @@ virSystemdGetMachineNameByPID(pid_t pid)
 
     if (virGDBusCallMethod(conn,
                            &reply,
+                           G_VARIANT_TYPE("(o)"),
                            NULL,
                            "org.freedesktop.machine1",
                            "/org/freedesktop/machine1",
@@ -236,6 +237,7 @@ virSystemdGetMachineNameByPID(pid_t pid)
 
     if (virGDBusCallMethod(conn,
                            &reply,
+                           G_VARIANT_TYPE("(v)"),
                            NULL,
                            "org.freedesktop.machine1",
                            object,
@@ -384,6 +386,7 @@ int virSystemdCreateMachine(const char *name,
                                 gprops);
 
         rc = virGDBusCallMethod(conn,
+                                NULL,
                                 NULL,
                                 error,
                                 "org.freedesktop.machine1",
@@ -430,6 +433,7 @@ int virSystemdCreateMachine(const char *name,
                                 gprops);
 
         rc = virGDBusCallMethod(conn,
+                                NULL,
                                 NULL,
                                 NULL,
                                 "org.freedesktop.machine1",
@@ -457,6 +461,7 @@ int virSystemdCreateMachine(const char *name,
                                 gprops);
 
         rc = virGDBusCallMethod(conn,
+                                NULL,
                                 NULL,
                                 NULL,
                                 "org.freedesktop.systemd1",
@@ -507,6 +512,7 @@ int virSystemdTerminateMachine(const char *name)
 
     VIR_DEBUG("Attempting to terminate machine via systemd");
     if (virGDBusCallMethod(conn,
+                           NULL,
                            NULL,
                            error,
                            "org.freedesktop.machine1",
@@ -592,6 +598,7 @@ virSystemdPMSupportTarget(const char *methodName, bool *result)
 
     if (virGDBusCallMethod(conn,
                            &reply,
+                           G_VARIANT_TYPE("(s)"),
                            NULL,
                            "org.freedesktop.login1",
                            "/org/freedesktop/login1",