GETLOGIN(3)

НАЗВАНИЕ
getlogin, cuserid - получает имя пользователя

СИНТАКСИС
#include <unistd.h>

char * getlogin ( void );

#include <stdio.h>

char * cuserid(char *string);

ОПИСАНИЕ
getlogin возвращает указатель на строку, содержащую имя пользователя, вошедшего в систему c терминала, который является управляющим для процесса. Если эту информацию получить невозможно, этой функцией возвращается пустой указатель. Строка выделяется статически и может быть заново записана при последующих вызовах этой функции или cuserid.

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

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

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

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

НАЙДЕННЫЕ ОШИБКИ

ENOMEM
    (недостаточно памяти для размещения структуры passwd).

ФАЙЛЫ
/etc/passwd	файл базы данных паролей
/var/run/utmp	(традиционно /etc/utmp;
			в некоторых версиях libc использовались /var/adm/utmp)

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1. В System V имеется функция cuserid, использующая идентификатор реального пользователя вместо идентификатора эффективного пользователя. Функция cuserid была включена в версию POSIX 1988 года, но не упомянута в версии 1990.

НАЙДЕННЫЕ ОШИБКИ
К сожалению, зачастую довольно просто "обмануть" getlogin(). Иногда она вообще не работает из-за того, что какая-то программа перепутала содержимое файла utmp. Часто функция возвращает только первые 8 символов имени. Пользователь, вошедший в систему с терминала, который является управляющим для нашей программы, необязательно будет пользователем, запустившим программу. Избегайте использования getlogin() из соображений безопасности.

Hикто точно не знает, как работает cuserid(), поэтому избегайте ее использования в переносимых программах, а вместо нее используйте getpwuid(geteuid()), если это необходимо. Еще раз: HЕ ИСПОЛЬЗУЙТЕ cuserid().

СМ. ТАКЖЕ
geteuid(2), getuid(2)