diff options
Diffstat (limited to 'dbus/dbus-auth.c')
-rw-r--r-- | dbus/dbus-auth.c | 29 |
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); |