Цель C и тип пользователя ОС
Есть ли способ получить в настоящее время вошедшего в систему типа пользователя (root, admin или normal) через цель C?
Я знаю о NSFullUserName()
который дает имя пользователя, но как получить тип пользователя?
Благодарю.
1 ответ
Решение
Вы можете получить группу пользователей, используя getpwnam
или же getpwuid
затем используйте getgrgid
чтобы получить название группы из GID.
Это C-функции в стандартной библиотеке.
- РЕДАКТИРОВАТЬ: Вот короткий, плохо закодированный пример C ---
Вот небольшой пример, на Mac OS в терминале он должен собираться с помощью make (если вы называете файл getpwnam_example.c
ты можешь сделать $ make getpwnam_example
в том же каталоге, что и файл c).
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <strings.h>
#include <pwd.h>
#include <grp.h>
int main(int argc, char **argv) {
uid_t current_user_id = getuid();
printf("My Current UID is %d\n", current_user_id);
struct passwd *pwentry = getpwuid(current_user_id);
printf("My Current Name is %s\n", pwentry->pw_gecos);
printf("My Current Group ID is %d\n", pwentry->pw_gid);
struct group *grentry = getgrgid(getgid());
printf("My Current Group Name is %s\n", grentry->gr_name);
printf("Am I an admin? ");
struct group *admin_group = getgrnam("admin");
while(*admin_group->gr_mem != NULL) {
if (strcmp(pwentry->pw_name, *admin_group->gr_mem) == 0) {
printf("yes!\n");
}
admin_group->gr_mem++;
}
return 0;
}