Когда accountsservice составляет список пользователей, которых можно предлагать DM-у для логина, оно тупо открывает /etc/shadow и читает оттуда! Поэтому lightdm, например, не показывает никакого списка пользователей, если accounts-daemon запущен. Сейчас попробую запатчить на getspent() вместо fgetspent()
Э-э-э, Гоша, не торопись, ты, наверное, не разобрался. GDM успешно получает список от accountsservice. ls /var/lib/AccountsService/users/ ?
Created attachment 7688 [details] Use getspent_r() instead of fgetspent_r() (TCB) fgetspent_r() слегка несовмевстимо с TCB (надо по многу раз вызывать для каждого /etc/tcb/<user>/shadow). В данном случае, хоть оно и встречается в итераторе, но вызывается только в первой итерации.
(В ответ на комментарий №1) > Э-э-э, Гоша, не торопись, ты, наверное, не разобрался. > GDM успешно получает список от accountsservice. Возможно, он потом лезет сам куда-то. В коде accountsservice явно написано открывать _файл_ /etc/shadow и читать оттуда с помощью fgetspent_r(). С файлами они рабоают потому что внутри итератора, открытый файл в текущем состоянии можно записать в контекст, а как обеспечить контекст для getpwent(), например, непонятно. Но именно shadow там засасывается целиком в первой итерации, так что fgetspent_r вполне можно поменять на getspent_r, что я и сделал. > ls /var/lib/AccountsService/users/ > ? Пусто
(В ответ на комментарий №3) > > ls /var/lib/AccountsService/users/ > > ? > Пусто Точнее, один я)
(В ответ на комментарий №2) > Created an attachment (id=7688) [details] > Use getspent_r() instead of fgetspent_r() (TCB) Это плохой патч, негодный. Потому что так всё идёт _мимо_ nsswitch, а с патчем getspent_r() ьуда таки ходит. Я лучше посмотрю, так ли нужна информация из shadow по ходу.
Created attachment 7708 [details] Патч, игнорирующий несоответствие /etc/passwd и /etc/shadow Как выяснилось, accountsservice вполне может работать с учётной записью в passwd, даже если в shadow такой нет. См. задание 211373
accountsservice-0.6.50-alt2.S1 -> sisyphus: Tue Aug 14 2018 Fr. Br. George <george@altlinux.ru> 0.6.50-alt2.S1 - Ignore ALT-specific empty /etc/shadow (closes: #35210)