NOMBRE¶
getlogin, cuserid - obtiene nombre de usuario
SINOPSIS¶
#include <unistd.h>
char * getlogin ( void );
#include <stdio.h>
char * cuserid ( char *cadena );
DESCRIPCIÓN¶
getlogin devuelve un puntero a una cadena de caracteres que contiene el
nombre del usuario que está en la terminal controladora del proceso, o un
puntero nulo si esta información no puede determinarse. La cadena se
reserva estáticamente y puede ser sobreescrita en subsecuentes llamadas a
esta función o a
cuserid.
cuserid devuelve un puntero a una cadena de caracteres que contiene un
nombre de usuario asociado con el UID efectivo del proceso. Si
cadena
no es un puntero nulo, debe ser un vector que pueda alojar al menos
L_cuserid caracteres; la cadena se coloca en este vector. De otro modo
se devuelve un puntero a una cadena en un área estática. Esta cadena
se reserva estáticamente y puede ser sobreescrita en subsecuentes
llamadas a esta función o a
getlogin.
La macro
L_cuserid es una constante entera que indica cuán grande
puede necesitar ser un vector que almacene un nombre de usuario. Se declara en
stdio.h.
Estas funciones permiten a su programa identificar positivamente al usuario que
lo está ejecutando (
cuserid) o al que ha entrado en esta
sesión (
getlogin). (Que pueden diferir cuando están
implicados programas SUID).
Para la mayoría de los propósitos, es más útil emplear la
variable de ambiente
LOGNAME para saber quién es el usuario. Esto
es más flexible precisamente porque el usuario puede dar un valor
arbitrario a
LOGNAME.
ERRORES¶
- ENOMEM
- Memoria insuficiente para alojar la estructura passwd.
FICHEROS¶
/etc/passwd fichero de datos de cuentas de usuario
/var/run/utmp (traditionally
/etc/utmp; some libc versions used
/var/adm/utmp)
POSIX.1. System V tiene una función
cuserid que usa el UID real en
vez del efectivo. La función
cuserid se incluyó en la
versión de POSIX del año 1988, pero se quitó en la de 1990.
FALLOS¶
Desafortunadamente, es a meundo bastante fácil el liar a getlogin(). A
veces no funciona en absoluto, porque algún programa estropeó el
fichero utmp. Frecuentemente, sólo da los primeros 8 caracteres del
nombre de entrada. El usuario que esté actualmente en la tty controladora
de nuestro programa no tiene por qué ser el que lo hubo ejecutado. Evite
getlogin() para propósitos relacionados con la seguridad.
Nadie sabe con precisión qué es lo que hace cuserid(); evítelo en
programas transportables; evítelo de todas formas siempre: en su lugar
emplee getpwuid(getwuid()), si eso es lo que pretende. NO UTILICE cuserid().
VÉASE TAMBIÉN¶
geteuid(2),
getuid(2)