список идентификаторов пользователей / системных настроек> Аккаунты - PullRequest
1 голос
/ 06 июня 2010

Как мне получить массив с 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 Ответ

1 голос
/ 06 июня 2010

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

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

...