dbus_bool_t _dbus_user_database_get_uid (DBusUserDatabase *db, dbus_uid_t uid, const DBusUserInfo **info, DBusError *error) { *info = _dbus_user_database_lookup (db, uid, NULL, error); return *info != NULL; }
dbus_bool_t _dbus_user_database_get_username (DBusUserDatabase *db, const DBusString *username, const DBusUserInfo **info, DBusError *error) { *info = _dbus_user_database_lookup (db, DBUS_UID_UNSET, username, error); return *info != NULL; }
/** * Checks to see if the UID sent in is the console user * * @param uid UID of person to check * @param error return location for errors * @returns #TRUE if the UID is the same as the console user and there are no errors */ dbus_bool_t _dbus_is_console_user (dbus_uid_t uid, DBusError *error) { DBusUserDatabase *db; const DBusUserInfo *info; dbus_bool_t result = FALSE; #ifdef HAVE_CONSOLE_OWNER_FILE DBusString f; DBusStat st; if (!_dbus_string_init (&f)) { _DBUS_SET_OOM (error); return FALSE; } if (!_dbus_string_append(&f, DBUS_CONSOLE_OWNER_FILE)) { _dbus_string_free(&f); _DBUS_SET_OOM (error); return FALSE; } if (_dbus_stat(&f, &st, NULL) && (st.uid == uid)) { _dbus_string_free(&f); return TRUE; } _dbus_string_free(&f); #endif /* HAVE_CONSOLE_OWNER_FILE */ _dbus_user_database_lock_system (); db = _dbus_user_database_get_system (); if (db == NULL) { dbus_set_error (error, DBUS_ERROR_FAILED, "Could not get system database."); _dbus_user_database_unlock_system (); return FALSE; } /* TPTD: this should be cache-safe, we've locked the DB and _dbus_user_at_console doesn't pass it on. */ info = _dbus_user_database_lookup (db, uid, NULL, error); if (info == NULL) { _dbus_user_database_unlock_system (); return FALSE; } result = _dbus_user_at_console (info->username, error); _dbus_user_database_unlock_system (); return result; }
/** * Checks to see if the UID sent in is the console user * * @param uid UID of person to check * @param error return location for errors * @returns #TRUE if the UID is the same as the console user and there are no errors */ dbus_bool_t _dbus_is_console_user (dbus_uid_t uid, DBusError *error) { DBusUserDatabase *db; const DBusUserInfo *info; dbus_bool_t result = FALSE; #ifdef HAVE_SYSTEMD /* check if we have logind */ if (access ("/run/systemd/seats/", F_OK) >= 0) { int r; /* Check whether this user is logged in on at least one physical seat */ r = sd_uid_get_seats (uid, 0, NULL); if (r < 0) { dbus_set_error (error, _dbus_error_from_errno (-r), "Failed to determine seats of user \"" DBUS_UID_FORMAT "\": %s", uid, _dbus_strerror (-r)); return FALSE; } return (r > 0); } #endif #ifdef HAVE_CONSOLE_OWNER_FILE DBusString f; DBusStat st; if (!_dbus_string_init (&f)) { _DBUS_SET_OOM (error); return FALSE; } if (!_dbus_string_append(&f, DBUS_CONSOLE_OWNER_FILE)) { _dbus_string_free(&f); _DBUS_SET_OOM (error); return FALSE; } if (_dbus_stat(&f, &st, NULL) && (st.uid == uid)) { _dbus_string_free(&f); return TRUE; } _dbus_string_free(&f); #endif /* HAVE_CONSOLE_OWNER_FILE */ if (!_dbus_user_database_lock_system ()) { _DBUS_SET_OOM (error); return FALSE; } db = _dbus_user_database_get_system (); if (db == NULL) { dbus_set_error (error, DBUS_ERROR_FAILED, "Could not get system database."); _dbus_user_database_unlock_system (); return FALSE; } /* TPTD: this should be cache-safe, we've locked the DB and _dbus_user_at_console doesn't pass it on. */ info = _dbus_user_database_lookup (db, uid, NULL, error); if (info == NULL) { _dbus_user_database_unlock_system (); return FALSE; } result = _dbus_user_at_console (info->username, error); _dbus_user_database_unlock_system (); return result; }