Как я могу получить основную и другие группы в настоящее время вошедшего в систему пользователя в Perl? - PullRequest
3 голосов
/ 03 декабря 2008

Согласно этому сайту Я могу просто написать

$user = getlogin();

но функции обработки групп, похоже, не могут принять имя пользователя / идентификатор пользователя в качестве параметра. Должен ли я действительно перебирать все строки файла / etc / group и извлекать из него имена групп?

Ответы [ 2 ]

8 голосов
/ 03 декабря 2008

Нет необходимости разбирать системные файлы, в UNIX-подобной операционной системе я бы использовал встроенные интерфейсы для системных вызовов getpwuid и getgrgid:

use strict;
use warnings;

# use $< for the real uid and $> for the effective uid
my ($user, $passwd, $uid, $gid ) = getpwuid $< ;
my $group = getgrgid $gid ;

printf "user: %s (%d), group: %s (%d)\n", $user, $uid, $group, $gid;

Что-то попроще, как

my $group = getgrgid $(

также будет работать, так как $ (и $) уже должны содержать GID и EGID.

Наконец, функция getgroups, определенная в модуле POSIX,

use POSIX qw(getgroups)

, как предлагает dsw, также должно позволять вам получать вторичные группы, если ваша ОС (в отличие, например, от Linux) поддерживает одновременное использование нескольких активных групп.

Поиск неактивных вторичных групп может действительно включать анализ файла / etc / group, Прямо или через комбинированное использование встроенного в getgrend и стандартного модуля User :: grent.

4 голосов
/ 03 декабря 2008

Вы должны использовать модуль POSIX . В частности, функции getpw*, getgr* и getu* содержатся в нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...