userdb: Use "goto out" pattern for _dbus_groups_from_uid()

This makes it easier to verify that _dbus_user_database_unlock_system()
is called on all exit paths. The only early-return is when locking the
userdb failed.

Signed-off-by: Simon McVittie <smcv@collabora.com>
This commit is contained in:
Simon McVittie 2023-06-29 17:51:48 +01:00
parent 8de818153b
commit 6f6f861a3a

View file

@ -353,6 +353,8 @@ _dbus_groups_from_uid (dbus_uid_t uid,
{
DBusUserDatabase *db;
const DBusUserInfo *info;
dbus_bool_t ret = FALSE;
*group_ids = NULL;
*n_group_ids = 0;
@ -366,15 +368,11 @@ _dbus_groups_from_uid (dbus_uid_t uid,
if (db == NULL)
{
_DBUS_SET_OOM (error);
_dbus_user_database_unlock_system ();
return FALSE;
goto out;
}
if (!_dbus_user_database_get_uid (db, uid, &info, error))
{
_dbus_user_database_unlock_system ();
return FALSE;
}
goto out;
_dbus_assert (info->uid == uid);
@ -384,8 +382,7 @@ _dbus_groups_from_uid (dbus_uid_t uid,
if (*group_ids == NULL)
{
_DBUS_SET_OOM (error);
_dbus_user_database_unlock_system ();
return FALSE;
goto out;
}
*n_group_ids = info->n_group_ids;
@ -393,7 +390,10 @@ _dbus_groups_from_uid (dbus_uid_t uid,
memcpy (*group_ids, info->group_ids, info->n_group_ids * sizeof (dbus_gid_t));
}
ret = TRUE;
out:
_DBUS_ASSERT_ERROR_XOR_BOOL (error, ret);
_dbus_user_database_unlock_system ();
return TRUE;
return ret;
}
/** @} */