]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
DBusTransport, DBusConnection: Add internal getter for the credentials
authorSimon McVittie <smcv@collabora.com>
Fri, 12 Jan 2018 19:12:41 +0000 (19:12 +0000)
committerSimon McVittie <smcv@collabora.com>
Fri, 2 Mar 2018 14:51:05 +0000 (14:51 +0000)
We have a lot of dbus_connection_get_foo() and
_dbus_transport_get_foo() that are actually rather redundant.

Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=103737

dbus/dbus-connection-internal.h
dbus/dbus-connection.c
dbus/dbus-transport.c
dbus/dbus-transport.h

index 48357321262c9d9b9dba7e12628458bba0d60bf7..05b69e3c93645dc8bc569dbad723e96a00891368 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <dbus/dbus-internals.h>
 #include <dbus/dbus-connection.h>
+#include <dbus/dbus-credentials.h>
 #include <dbus/dbus-message.h>
 #include <dbus/dbus-transport.h>
 #include <dbus/dbus-resources.h>
@@ -117,6 +118,8 @@ void              _dbus_connection_set_pending_fds_function       (DBusConnectio
 DBUS_PRIVATE_EXPORT
 dbus_bool_t       _dbus_connection_get_linux_security_label       (DBusConnection  *connection,
                                                                    char           **label_p);
+DBUS_PRIVATE_EXPORT
+DBusCredentials  *_dbus_connection_get_credentials                (DBusConnection  *connection);
 
 /* if DBUS_ENABLE_STATS */
 DBUS_PRIVATE_EXPORT
index c525b6dc19fae70a15f669bd139b0aaa6ca4856f..b097cc6e07348f1396bbc81141f6e544f2f7fdff 100644 (file)
@@ -5380,6 +5380,25 @@ _dbus_connection_get_linux_security_label (DBusConnection  *connection,
   return result;
 }
 
+DBusCredentials *
+_dbus_connection_get_credentials (DBusConnection *connection)
+{
+  DBusCredentials *result;
+
+  _dbus_assert (connection != NULL);
+
+  CONNECTION_LOCK (connection);
+
+  if (!_dbus_transport_try_to_authenticate (connection->transport))
+    result = NULL;
+  else
+    result = _dbus_transport_get_credentials (connection->transport);
+
+  CONNECTION_UNLOCK (connection);
+
+  return result;
+}
+
 /**
  * Gets the Windows user SID of the connection if known.  Returns
  * #TRUE if the ID is filled in.  Always returns #FALSE on non-Windows
index f2a961503b255a8f70ade8c61c68aebb964817b5..2337dd35834b1aad8c37d2a036ed77ebcf08e7c4 100644 (file)
@@ -1475,6 +1475,22 @@ _dbus_transport_get_linux_security_label (DBusTransport  *transport,
     }
 }
 
+/**
+ * If the transport has already been authenticated, return its
+ * credentials. If not, return #NULL.
+ *
+ * The caller must ref the returned credentials object if it wants to
+ * keep it.
+ */
+DBusCredentials *
+_dbus_transport_get_credentials (DBusTransport  *transport)
+{
+  if (!transport->authenticated)
+    return FALSE;
+
+  return _dbus_auth_get_identity (transport->auth);
+}
+
 /**
  * See dbus_connection_get_windows_user().
  *
index 9e3787ddbb77825ba7cce9a4d9022ff046876c2e..a764302736db0e5bf5b8a2b577234eba59e36c89 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <dbus/dbus-internals.h>
 #include <dbus/dbus-connection.h>
+#include <dbus/dbus-credentials.h>
 #include <dbus/dbus-protocol.h>
 #include <dbus/dbus-address.h>
 
@@ -89,6 +90,7 @@ dbus_bool_t        _dbus_transport_get_windows_user       (DBusTransport
                                                            char                      **windows_sid_p);
 dbus_bool_t        _dbus_transport_get_linux_security_label (DBusTransport            *transport,
                                                            char                      **label_p);
+DBusCredentials   *_dbus_transport_get_credentials        (DBusTransport  *transport);
 
 void               _dbus_transport_set_windows_user_function (DBusTransport              *transport,
                                                               DBusAllowWindowsUserFunction   function,