summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <smcv@collabora.com>2018-01-12 19:12:41 +0000
committerSimon McVittie <smcv@collabora.com>2018-03-02 14:51:05 +0000
commit5a07eda31e6c2fd3d4965ed7ff46991ac86c615b (patch)
tree279ee287231fecaef81c54f4150dbc391d0d8980
parent03c0db9ff51dedeb98f42c715a70a1bd10c7f595 (diff)
DBusTransport, DBusConnection: Add internal getter for the credentials
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
-rw-r--r--dbus/dbus-connection-internal.h3
-rw-r--r--dbus/dbus-connection.c19
-rw-r--r--dbus/dbus-transport.c16
-rw-r--r--dbus/dbus-transport.h2
4 files changed, 40 insertions, 0 deletions
diff --git a/dbus/dbus-connection-internal.h b/dbus/dbus-connection-internal.h
index 483573212..05b69e3c9 100644
--- a/dbus/dbus-connection-internal.h
+++ b/dbus/dbus-connection-internal.h
@@ -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
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index c525b6dc1..b097cc6e0 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -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
diff --git a/dbus/dbus-transport.c b/dbus/dbus-transport.c
index f2a961503..2337dd358 100644
--- a/dbus/dbus-transport.c
+++ b/dbus/dbus-transport.c
@@ -1476,6 +1476,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().
*
* @param transport the transport
diff --git a/dbus/dbus-transport.h b/dbus/dbus-transport.h
index 9e3787ddb..a76430273 100644
--- a/dbus/dbus-transport.h
+++ b/dbus/dbus-transport.h
@@ -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,