Программно добирающийся UID и GID от имени пользователя в Unix?

Следующее должно работать,

AsyncStorage.getAllKeys((err, keys) => {
  AsyncStorage.multiGet(keys, (error, stores) => {
    stores.map((result, i, store) => {
      console.log({ [store[i][0]]: store[i][1] });
      return true;
    });
  });
});
14
задан roalz 30 March 2017 в 13:36
поделиться

4 ответа

Посмотрите на функции getpwnam () и getgrnam () .

21
ответ дан 1 December 2019 в 09:13
поделиться

Вы хотите использовать семейство системных вызовов getpw *, обычно в pwd.h . По сути, это интерфейс C-уровня для информации в /etc/passwd.

3
ответ дан 1 December 2019 в 09:13
поделиться
#include <sys/types.h>
#include <pwd.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
    char *username = ...

    struct passwd *pwd = calloc(1, sizeof(struct passwd));
    if(pwd == NULL)
    {
        fprintf(stderr, "Failed to allocate struct passwd for getpwnam_r.\n");
        exit(1);
    }
    size_t buffer_len = sysconf(_SC_GETPW_R_SIZE_MAX) * sizeof(char);
    char *buffer = malloc(buffer_len);
    if(buffer == NULL)
    {
        fprintf(stderr, "Failed to allocate buffer for getpwnam_r.\n");
        exit(2);
    }
    getpwnam_r(username, pwd, buffer, buffer_len, &pwd);
    if(pwd == NULL)
    {
        fprintf(stderr, "getpwnam_r failed to find requested entry.\n");
        exit(3);
    }
    printf("uid: %d\n", pwd->pw_uid);
    printf("gid: %d\n", pwd->pw_gid);

    free(pwd);
    free(buffer);

    return 0;
}
3
ответ дан 1 December 2019 в 09:13
поделиться

Посмотрите на getpwnam и struct passwd.

1
ответ дан 1 December 2019 в 09:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: