Я пытаюсь найти способ получить список всех групп, к которым у пользователя Unix есть доступ. Я хочу иметь возможность передать либо имя пользователя unix, либо uid пользователя в программу на c ++ в качестве аргумента, а затем вернуть список групп, к которым у этого пользователя есть доступ.
Я немного читал об этом, и, насколько я вижу, этого можно добиться с помощью getgroups (), но я не могу найти пример того, как это сделать, передав конкретное имя пользователя или uid в getgroups. Кажется, что все примеры, которые я нашел, просто отображают все группы для моей учетной записи пользователя или того, кто является эффективным идентификатором пользователя, запускающего программу.
Пожалуйста, вы можете помочь мне с тем, как я могу это сделать?
Я могу получить всю информацию об учетной записи пользователя из struct passwd и могу передать argv [1], которое является именем пользователя unix, и передать его getgrgid:
(getpwnam_r (argv [1], my_passwd, pwdbuffer, pwdlinelen, &tempPwdPtr))! = 0)
Я просто не знаю, как использовать значение argv [1] и выяснить все группы, к которым пользователь unix имеет доступ с помощью getgroups
использование getgrouplist(3)
функция, она делает именно то, что вы хотите. Это ожидаемое имя пользователя, поэтому, если вы хотите перечислить все группы, в которые входит пользователь с указанным UID, вам необходимо сначала преобразовать UID в имя пользователя с помощью getpwuid_r(3)
функция.
Других решений пока нет …