Man page - cuserid(3)

Packages contains this manual

Available languages:

en fr pl ja ru

Manual

getlogin

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
ФАЙЛЫ
АТРИБУТЫ
ВЕРСИИ
СТАНДАРТЫ
СТАНДАРТЫ
ОШИБКИ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

getlogin, getlogin_r, cuserid - возвращает имя пользователя

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <unistd.h>

char *getlogin(void);
int getlogin_r(char
buf [. bufsize ], size_t bufsize );

#include <stdio.h>

char *cuserid(char * string );

Требования макроса тестирования свойств для glibc (см. feature_test_macros (7)):

getlogin_r ():
_POSIX_C_SOURCE >= 199506L

cuserid ():
Since glibc 2.24:
(_XOPEN_SOURCE && ! (_POSIX_C_SOURCE >= 200112L)
|| _GNU_SOURCE
Up to and including glibc 2.23:
_XOPEN_SOURCE

ОПИСАНИЕ

Функция getlogin () возвращает указатель на строку, содержащую имя пользователя, вошедшего в систему c терминала, который является управляющим для процесса, или указатель null, если эта информация не может быть получена. Строка выделяется статически и может быть перезаписана при последующих вызовах этой функции или cuserid ().

Функция getlogin_r () возвращает то же имя пользователя, но в массиве buf размером bufsize .

Функция cuserid () возвращает указатель на строку, содержащую имя пользователя, связанное с идентификатором эффективного пользователя процесса. Если string не равно указателю null, то значение должно быть массивом, который способен вместить как минимум L_cuserid символов; строка возвращается в этом массиве. В противном случае возвращается указатель на строку в фиксированной области. Эта строка выделена статически и может быть перезаписана при последующих вызовах этой функции или функции getlogin ().

Макрос L_cuserid является целочисленной константой, показывающей длину массива, который может понадобиться для хранения имени пользователя. L_cuserid описан в <stdio.h> .

Эти функции позволяют программе точно определить работающего пользователя ( cuserid ()) или пользователя этого сеанса ( getlogin ()) (значения могут различаться, если у программы установлен бит set-user-ID).

В большинстве случаев для определения пользователя полезнее использовать переменную окружения LOGNAME , потому что пользователь может установить LOGNAME каким угодно.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

getlogin () returns a pointer to the username when successful, and NULL on failure, with errno set to indicate the error. getlogin_r () returns 0 when successful, and nonzero on failure.

ОШИБКИ

В POSIX определены:

EMFILE

Было достигнуто ограничение по количеству открытых файловых дескрипторов на процесс.

ENFILE

Достигнуто максимальное количество открытых файлов в системе.

ENXIO

У вызывающего процесса нет управляющего терминала.

ERANGE

(getlogin_r) The length of the username, including the terminating null byte ( '\0' ), is larger than bufsize .

В Linux/glibc также есть:

ENOENT

Нет соответствующей записи в файле utmp.

ENOMEM

Недостаточно памяти для выделения под структуру passwd.

ENOTTY

Стандартный ввод не ссылается на терминал (смотрите ДЕФЕКТЫ).

ФАЙЛЫ

/etc/passwd

файл, содержащий базу паролей

/var/run/utmp

(обычно, /etc/utmp ; в некоторых версиях libc используется /var/adm/utmp )

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes (7).

Image grohtml-632219-1.png

В приведённой выше таблице utent в race:utent означает, что если любая из функций setutent (3), getutent (3) или endutent (3) используется одновременно в нескольких нитях программы, то может возникнуть состязательность по данным. Эти функции вызываются из getlogin () и getlogin_r () поэтому мы используем race:utent для напоминания.

ВЕРСИИ

В OpenBSD имеются getlogin () и setlogin (), а имя пользователя связывается с сеансом даже если не имеется управляющего терминала.

СТАНДАРТЫ

getlogin ()
getlogin_r
()

POSIX.1-2008.

cuserid ()

Отсутствуют.

СТАНДАРТЫ

getlogin ()
getlogin_r
():

POSIX.1-2001. OpenBSD.

cuserid ()

System V, POSIX.1-1988. Removed in POSIX.1-1990. SUSv2. Removed in POSIX.1-2001.

System V has a cuserid () function which uses the real user ID rather than the effective user ID.

ОШИБКИ

К сожалению, зачастую довольно просто «обмануть» getlogin (). Иногда она вообще не работает из-за того, что какая-то программа испортила содержимое файла utmp. Часто функция возвращает только первые 8 символов имени. Пользователь, вошедший в систему с терминала, который является управляющим для нашей программы, необязательно будет пользователем, запустившим программу. Избегайте использования getlogin () из соображений безопасности.

Заметим, что glibc не следует спецификации POSIX и использует stdin вместо /dev/tty . Дефект ( в других современных системах, например SunOS 5.8, HP-UX 11.11 и FreeBSD 4.8, также возвращают имя пользователя если было перенаправление stdin ).

Никто точно не знает что делает cuserid (), поэтому не используйте её в переносимых программах. Вместо неё используйте getpwuid(geteuid()) , если это необходимо. Не используйте cuserid ().

СМОТРИТЕ ТАКЖЕ

logname (1), geteuid (2), getuid (2), utmp (5)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .