chiark / gitweb /
core: move ManagerRunningAs to shared
[elogind.git] / src / shared / dbus-common.c
index 7f0dce5ad393eda0b6292f3e3d793390ffa09a26..0c73d6c6a870b04b1419f6fb9614df56f941a2e8 100644 (file)
@@ -32,6 +32,7 @@
 #include "log.h"
 #include "dbus-common.h"
 #include "util.h"
+#include "missing.h"
 #include "def.h"
 #include "strv.h"
 
@@ -121,7 +122,7 @@ int bus_connect(DBusBusType t, DBusConnection **_bus, bool *_private, DBusError
                          * try via XDG_RUNTIME_DIR first, then
                          * fallback to normal bus access */
 
-                        e = getenv("XDG_RUNTIME_DIR");
+                        e = secure_getenv("XDG_RUNTIME_DIR");
                         if (e) {
                                 char *p;
 
@@ -1253,14 +1254,16 @@ bool bus_error_is_no_service(const DBusError *error) {
         return startswith(error->name, "org.freedesktop.DBus.Error.Spawn.");
 }
 
-int bus_method_call_with_reply(DBusConnection *bus,
-                                       const char *destination,
-                                       const char *path,
-                                       const char *interface,
-                                       const char *method,
-                                       DBusMessage **return_reply,
-                                       DBusError *return_error,
-                                       int first_arg_type, ...) {
+int bus_method_call_with_reply(
+                DBusConnection *bus,
+                const char *destination,
+                const char *path,
+                const char *interface,
+                const char *method,
+                DBusMessage **return_reply,
+                DBusError *return_error,
+                int first_arg_type, ...) {
+
         DBusError error;
         DBusMessage *m, *reply;
         va_list ap;
@@ -1278,16 +1281,16 @@ int bus_method_call_with_reply(DBusConnection *bus,
         va_start(ap, first_arg_type);
         if (!dbus_message_append_args_valist(m, first_arg_type, ap)) {
                 va_end(ap);
-                dbus_message_unref(m);
                 r = log_oom();
                 goto finish;
         }
         va_end(ap);
 
         reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
-        dbus_message_unref(m);
         if (!reply) {
-                log_error("Failed to issue method call: %s", bus_error_message(&error));
+                if (!return_error)
+                        log_error("Failed to issue method call: %s", bus_error_message(&error));
+
                 if (bus_error_is_no_service(&error))
                         r = -ENOENT;
                 else if (dbus_error_has_name(&error, DBUS_ERROR_ACCESS_DENIED))
@@ -1298,13 +1301,18 @@ int bus_method_call_with_reply(DBusConnection *bus,
                         r = -EIO;
                 goto finish;
         }
+
         if (return_reply)
                 *return_reply = reply;
         else
                 dbus_message_unref(reply);
+
 finish:
-        if(return_error)
-                *return_error=error;
+        if (m)
+                dbus_message_unref(m);
+
+        if (return_error)
+                *return_error = error;
         else
                 dbus_error_free(&error);