}
}
- if (!_dbus_credentials_add_from_user (auth->desired_identity, data))
+ if (!_dbus_credentials_add_from_user (auth->desired_identity, data,
+ &error))
{
- _dbus_verbose ("%s: Did not get a valid username from client\n",
- DBUS_AUTH_NAME (auth));
+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
+ {
+ dbus_error_free (&error);
+ goto out;
+ }
+
+ _dbus_verbose ("%s: Did not get a valid username from client: %s\n",
+ DBUS_AUTH_NAME (auth), error.message);
+ dbus_error_free (&error);
return send_rejected (auth);
}
}
else
{
+ DBusError error = DBUS_ERROR_INIT;
+
if (!_dbus_credentials_add_from_user (auth->desired_identity,
- &auth->identity))
+ &auth->identity,
+ &error))
{
- _dbus_verbose ("%s: could not get credentials from uid string\n",
- DBUS_AUTH_NAME (auth));
+ if (dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY))
+ {
+ dbus_error_free (&error);
+ return FALSE;
+ }
+
+ _dbus_verbose ("%s: could not get credentials from uid string: %s\n",
+ DBUS_AUTH_NAME (auth), error.message);
+ dbus_error_free (&error);
return send_rejected (auth);
}
}
* @returns #TRUE if the username existed and we got some credentials
*/
dbus_bool_t
-_dbus_credentials_add_from_user (DBusCredentials *credentials,
- const DBusString *username)
+_dbus_credentials_add_from_user (DBusCredentials *credentials,
+ const DBusString *username,
+ DBusError *error)
{
- return _dbus_credentials_add_windows_sid (credentials,
- _dbus_string_get_const_data(username));
+ if (!_dbus_credentials_add_windows_sid (credentials,
+ _dbus_string_get_const_data (username)))
+ {
+ _DBUS_SET_OOM (error);
+ return FALSE;
+ }
+
+ return TRUE;
}
/**
dbus_bool_t _dbus_send_credentials_socket (DBusSocket server_fd,
DBusError *error);
-dbus_bool_t _dbus_credentials_add_from_user (DBusCredentials *credentials,
- const DBusString *username);
+dbus_bool_t _dbus_credentials_add_from_user (DBusCredentials *credentials,
+ const DBusString *username,
+ DBusError *error);
+
dbus_bool_t _dbus_credentials_add_from_current_process (DBusCredentials *credentials);
DBUS_PRIVATE_EXPORT
dbus_bool_t _dbus_append_user_from_current_process (DBusString *str);
* @returns #TRUE if the username existed and we got some credentials
*/
dbus_bool_t
-_dbus_credentials_add_from_user (DBusCredentials *credentials,
- const DBusString *username)
+_dbus_credentials_add_from_user (DBusCredentials *credentials,
+ const DBusString *username,
+ DBusError *error)
{
DBusUserDatabase *db;
const DBusUserInfo *info;
return TRUE;
}
- /* FIXME: this can't distinguish ENOMEM from other errors */
if (!_dbus_user_database_lock_system ())
- return FALSE;
+ {
+ _DBUS_SET_OOM (error);
+ return FALSE;
+ }
db = _dbus_user_database_get_system ();
if (db == NULL)
{
_dbus_user_database_unlock_system ();
+ _DBUS_SET_OOM (error);
return FALSE;
}
if (!_dbus_user_database_get_username (db, username,
- &info, NULL))
+ &info, error))
{
_dbus_user_database_unlock_system ();
return FALSE;
if (!_dbus_credentials_add_unix_uid(credentials, info->uid))
{
_dbus_user_database_unlock_system ();
+ _DBUS_SET_OOM (error);
return FALSE;
}