summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-auth.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-auth.c')
-rw-r--r--dbus/dbus-auth.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/dbus/dbus-auth.c b/dbus/dbus-auth.c
index 6412185b..2a1bbd4c 100644
--- a/dbus/dbus-auth.c
+++ b/dbus/dbus-auth.c
@@ -211,6 +211,8 @@ typedef struct
int failures; /**< Number of times client has been rejected */
int max_failures; /**< Number of times we reject before disconnect */
+
+ DBusString guid; /**< Our globally unique ID in hex encoding */
} DBusAuthServer;
@@ -1923,20 +1925,35 @@ process_command (DBusAuth *auth)
* @returns the new object or #NULL if no memory
*/
DBusAuth*
-_dbus_auth_server_new (void)
+_dbus_auth_server_new (const DBusString *guid)
{
DBusAuth *auth;
DBusAuthServer *server_auth;
+ DBusString guid_copy;
- auth = _dbus_auth_new (sizeof (DBusAuthServer));
- if (auth == NULL)
+ if (!_dbus_string_init (&guid_copy))
return NULL;
+ if (!_dbus_string_copy (guid, 0, &guid_copy, 0))
+ {
+ _dbus_string_free (&guid_copy);
+ return NULL;
+ }
+
+ auth = _dbus_auth_new (sizeof (DBusAuthServer));
+ if (auth == NULL)
+ {
+ _dbus_string_free (&guid_copy);
+ return NULL;
+ }
+
auth->side = auth_side_server;
auth->state = &server_state_waiting_for_auth;
server_auth = DBUS_AUTH_SERVER (auth);
+ server_auth->guid = guid_copy;
+
/* perhaps this should be per-mechanism with a lower
* max
*/
@@ -2012,6 +2029,12 @@ _dbus_auth_unref (DBusAuth *auth)
{
_dbus_list_clear (& DBUS_AUTH_CLIENT (auth)->mechs_to_try);
}
+ else
+ {
+ _dbus_assert (DBUS_AUTH_IS_SERVER (auth));
+
+ _dbus_string_free (& DBUS_AUTH_SERVER (auth)->guid);
+ }
if (auth->keyring)
_dbus_keyring_unref (auth->keyring);