Цель C и тип пользователя ОС - PullRequest
3 голосов
/ 07 июля 2011

Есть ли какой-нибудь способ войти в систему под именем пользователя (root, admin или normal) через цель C?

Я знаю о NSFullUserName(), который дает имя пользователя, но как получить тип пользователя?

Спасибо.

1 Ответ

11 голосов
/ 07 июля 2011

Вы можете получить группу пользователей, используя 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...