Bug 48825

Summary: Не отображается список пользователей при запуске системы | экран приветствие [GDM]
Product: Sisyphus Reporter: Олег Щавелев <oleg>
Component: accountsserviceAssignee: Alexey Shabalin <shaba>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: aen, antohami, aris, fomchenkovsv, iqqator, ldv, nickel, rider, ruslandh, shaba, sin, toxblh
Version: unstable   
Hardware: all   
OS: Linux   
See Also: https://bugzilla.altlinux.org/show_bug.cgi?id=47499
https://bugzilla.altlinux.org/show_bug.cgi?id=47726
https://bugzilla.altlinux.org/show_bug.cgi?id=35210
Bug Depends on:    
Bug Blocks: 46625    
Attachments:
Description Flags
экран приветствие после установки ALT Regular Gnome
none
патч
none
патч none

Description Олег Щавелев 2023-12-16 08:36:07 MSK
Created attachment 15219 [details]
экран приветствие после установки ALT Regular Gnome

Стенды с ошибкой:
=================
* Sisyphus 20230819
* Kernel: 6.6.6-un-def-alt1
* GNOME 45.2

Версия программы:
=================
Sisyphus 20230819


Шаги, приводящие к ошибке:
=================
* Установить ALT Regular Gnome, ветка tested
* Запустить операционную систему, экран приветствие в GDM

Результат:
==========
Отсутствует список пользователей. Для авторизации необходимо вести пользователя, как системного.

Ожидаемый результат:
==========
При запуске системы, на экране приветствия отображается список пользователей.

Дополнительно:
==============
Для отображения списка пользователей, необходимо завести нового пользователя. Мы можем завести нового пользователя, как через ЦУС, так и через настройки рабочего окружения GNOME.
Comment 1 Yuri N. Sedunov 2023-12-16 11:25:00 MSK
Исследуйте проблему, найдите правильный компонент.
Comment 2 Антон Мидюков 2023-12-16 11:48:56 MSK
(Ответ для Олег Щавелев на комментарий #0)
> Дополнительно:
> ==============
> Для отображения списка пользователей, необходимо завести нового
> пользователя. Мы можем завести нового пользователя, как через ЦУС, так и
> через настройки рабочего окружения GNOME.

Проблема гораздо интереснее.
17 ноября обновился fwupd 1.9.5-alt1 -> 1.9.8-alt1
После этого все создаваемые пользователи подвержены проблеме.
В gdm скрывается первый пользователь, зарегистрированный уже после того, как в системе установлен fwupd >= 1.9.8-alt1. Если скрытого пользователя удалить, то скроется следующий за ним пользователь. Пользователи, созданные до обновления fwupd, проблеме не подвержены.
Comment 3 Антон Мидюков 2023-12-16 11:50:54 MSK
(Ответ для Антон Мидюков на комментарий #2)
> (Ответ для Олег Щавелев на комментарий #0)
> > Дополнительно:
> > ==============
> > Для отображения списка пользователей, необходимо завести нового
> > пользователя. Мы можем завести нового пользователя, как через ЦУС, так и
> > через настройки рабочего окружения GNOME.
> 
> Проблема гораздо интереснее.
> 17 ноября обновился fwupd 1.9.5-alt1 -> 1.9.8-alt1
> После этого все создаваемые пользователи подвержены проблеме.
> В gdm скрывается первый пользователь, зарегистрированный уже после того, как
> в системе установлен fwupd >= 1.9.8-alt1. Если скрытого пользователя
> удалить, то скроется следующий за ним пользователь. Пользователи, созданные
> до обновления fwupd, проблеме не подвержены.

Но так как даунгрейд fwupd проблему не решает, мне сложно предположить, что происходит, и что с этим сделать можно.
Comment 4 Антон Мидюков 2023-12-16 11:53:36 MSK
Пока на регулярку.
Comment 5 Олег Щавелев 2023-12-17 08:53:40 MSK
(Ответ для Антон Мидюков на комментарий #2)
> (Ответ для Олег Щавелев на комментарий #0)
> > Дополнительно:
> > ==============
> > Для отображения списка пользователей, необходимо завести нового
> > пользователя. Мы можем завести нового пользователя, как через ЦУС, так и
> > через настройки рабочего окружения GNOME.
> 
> Проблема гораздо интереснее.
> 17 ноября обновился fwupd 1.9.5-alt1 -> 1.9.8-alt1
> После этого все создаваемые пользователи подвержены проблеме.
> В gdm скрывается первый пользователь, зарегистрированный уже после того, как
> в системе установлен fwupd >= 1.9.8-alt1. Если скрытого пользователя
> удалить, то скроется следующий за ним пользователь. Пользователи, созданные
> до обновления fwupd, проблеме не подвержены.

Антон, протестировал, ровно так и происходит. 

fwupd-efi-1.4-alt2.x86_64
fwupd-1.9.10-alt1.x86_64
Comment 6 iQQator 2023-12-18 09:12:58 MSK
В результате изысканий причины ошибки обнаружил следующее:

- `accounts-daemon` определяет заблокированность пользователя через структуру `spent`которая в свою очередь в поле `passwd` имеет последний элемент из файла `/etc/shadow` 

- в файле `/etc/shadow` последним элементом стоит `fwupd-refresh:!*:` что возвращает значение `!*` (заблокирован)

- именно fwupd принес нового пользователя в `/etc/shadow` - в сравнении с системой в котором использовался старый пакет `fwupd`

- удивительно что accountsservice либо не знает что используется TCB либо чего-то не видит.

Проверки гипотезы о том что данный пользователь все ломает:

- Если добавить свою запись вида `username:*:...` то все начинает работать как ожидается и даже лучше ) появляется возможность смены login name, и автовход.

- Если просто удалить (на время) эту запись или просто убрать ! (блок), то просто появляется наш пользователь в списке пользователей на экране входа.
Comment 7 Олег Щавелев 2023-12-18 09:35:37 MSK
(Ответ для iQQator на комментарий #6)
> - Если просто удалить (на время) эту запись или просто убрать ! (блок), то
> просто появляется наш пользователь в списке пользователей на экране входа.

Очень здорово, посмотреть в рамках обсуждения проблемы, репорт по ссылке:
https://bugzilla.altlinux.org/47499, и возможно перевесить репорт на компонент accountsservice?
Comment 8 Антон Мидюков 2023-12-26 20:08:40 MSK
fwupd 1.9.8-alt1 получил новый файл /lib/sysusers.d/fwupd.conf:
u fwupd-refresh - "Firmware update daemon" /var/lib/fwupd

Тем не менее пользователь fwupd-refresh при установке пакета не создаётся. В /etc/tcb/ каталога пользователя нет. В результате появляется странная запись в /etc/shadow:
fwupd-refresh:!*:19717::::::

т.е. заблокированный пользователь.
У всех пакетов с конфигами в /lib/sysusers.d/ при установке создаётся пользователь. Поэтому делаю вывод, что нужно исправить fwupd, создавать при установке пользователя fwupd-refresh.
Comment 9 Антон Мидюков 2023-12-26 20:12:16 MSK
Перевешиваю на мантейнера Egor Ignatov, собирающего пакет fwupd последний год.
Comment 10 Антон Мидюков 2024-01-06 08:06:22 MSK
https://bugzilla.altlinux.org/show_bug.cgi?id=47499#c7
(Ответ для Toxblh на комментарий)
> По итогу багу нашлась в коде, завёл issue в upstream:
> https://gitlab.freedesktop.org/accountsservice/accountsservice/-/issues/121 
> 
> До исправления, можно сделать временное решение - отсортировать passwd,
> подняв пользователя на самый верх или сортировку по убыванию uid.
Comment 11 Антон Мидюков 2024-01-10 16:51:35 MSK
Подписываю Евгения Синельникова.
Comment 12 Фомченков Семен 2024-01-26 21:46:40 MSK
Отчёт о тестировании:

Стенд с ошибкой:
=================
alt-server 10.1 - обновленный до Sisyphus на момент 26.01.24

Шаги, приводящие к ошибке:
==========================
1) Установить пакет gnome-default
2) Перезагрузить систему

Результат:
==========
В интерфейсе LightDM отсутствует список пользователей, требуется ввести логин и пароль для авторизации.

Ожидаемый результат:
====================
При запуске системы, на экране приветствия LightDM отображается список доступных для входа пользователей.
Comment 13 Toxblh 2024-02-19 02:02:44 MSK
Created attachment 15570 [details]
патч

Патч которым починил поведение на ожидаемое. Больше shadow пользователи предыдущие перед нашим, не влияют на него. 

Ну и тесты пофиксил, а то не проходили при сборке
Comment 14 Toxblh 2024-02-19 02:03:33 MSK
Comment on attachment 15570 [details]
патч

>diff --git a/src/daemon.c b/src/daemon.c
>index aa9d050..d51be4d 100644
>--- a/src/daemon.c
>+++ b/src/daemon.c
>@@ -304,7 +304,8 @@ entry_generator_fgetpwent (Daemon       *daemon,
>                 pwent = fgetpwent (generator_state->fp);
>                 if (pwent != NULL) {
>                         shadow_entry_buffers = g_hash_table_lookup (generator_state->shadow_users, pwent->pw_name);
>-
>+                        *spent = NULL;
>+                        
>                         if (shadow_entry_buffers != NULL) {
>                                 *spent = &shadow_entry_buffers->spbuf;
>                         }
>diff --git a/tests/test-libaccountsservice.py b/tests/test-libaccountsservice.py
>index 723ab51..69b9083 100644
>--- a/tests/test-libaccountsservice.py
>+++ b/tests/test-libaccountsservice.py
>@@ -115,8 +115,8 @@ class TestAccountsServicePreExistingUser(AccountsServiceTestBase):
>             self.assertTrue(user_objects[instance].is_loaded())
> 
>         for user in user_objects:
>-            self.assertEquals(user.get_user_name(), 'pizza')
>-            self.assertEquals(user.get_uid(), 2001)
>+            self.assertEqual(user.get_user_name(), 'pizza')
>+            self.assertEqual(user.get_uid(), 2001)
> 
> @unittest.skipUnless(have_accounts_service,
>                      'AccountsService gi introspection not available')
Comment 15 Toxblh 2024-02-19 02:04:47 MSK
Created attachment 15571 [details]
патч
Comment 16 Олег Щавелев 2024-02-22 20:23:52 MSK
Здравствуйте Алексей. Я проверил таск 341187 по ссылке
https://git.altlinux.org/tasks/341187/

Стенды
=================
* Sisyphus 20240122
* Kernel: 6.6.17-un-def-alt1
* GNOME 45.4

Версия программы:
=================
accountsservice-23.13.9-alt2

Шаги:
=================
* Установить ALT Regular Gnome, ветка tested
* Обновить пакет по таску 341187
* Запустить операционную систему, экран входа в GDM

Результат:
==========
При запуске системы, на экране входа отображается список пользователей.

Дополнительно:
==============
Скриншоты экрана входа до и после установки пакета по заданию 341187
https://disk.yandex.ru/d/4r8D8fFRaxekjQ
Comment 17 Repository Robot 2024-02-26 14:56:02 MSK
accountsservice-23.13.9-alt2 -> sisyphus:

 Wed Feb 21 2024 Alexey Shabalin <shaba@altlinux> 23.13.9-alt2
 - Sync with upstream main branch
 - Fixed show users list (ALT#48825).
 - Fix Url tag (ALT#49452)