Список идентификаторов пользователей / системных настроек> Аккаунты

Как я могу получить массив с UID и именами?

Я мог бы перебрать от 0 до 99999 и сделать getpwnam(), Однако большинство машин имеют менее 5 учетных записей, поэтому это не оптимально. Я не знаю, какая структура ответственна за это, и поэтому я понятия не имею, что искать.

Есть ли более оптимальное решение, которое может пересечь счета?

Изменить: сразу после того, как я опубликовал, я обнаружил getpwent() для прохождения счетов.

setpwent();
struct passwd *pw;
while ((pw = getpwent())) printf("%d\n", pw->pw_uid);
endpwent();

Однако это не означает, является ли учетная запись системной учетной записью или нет.

Так как же получить учетные записи системных настроек?


Изменить: я нашел командную строку эквивалент этого, dscl команда.

prompt> dscl . -list /Users UniqueID
_mysql                  74
_postfix                27
_spotlight              89
_sshd                   75
_windowserver           88
_www                    70
daemon                  1
johndoe                 501
nobody                  -2
root                    0

1 ответ

Решение

Использование getgrnam("staff") получить групповую запись для группы сотрудников. gr_mem Элемент member, хотя и не объясняется подробно на man-странице, представляется массивом имен пользователей, оканчивающихся указателем NULL.

Чтобы определить, какие пользователи являются администраторами, проделайте то же самое с группой администраторов.

Другие вопросы по тегам