Enquanto procurava pelas fontes de screen
, descobri que ele utiliza a função POSIX getlogin()
para obter o login da sessão. Não é, geralmente, armazenado em uma variável. MAS existe a função complementar setlogin()
, que faz o truque (pelo menos para mim no FreeBSD8.2):
#include <stdio.h>
#include <unistd.h>
int main(int argc, char ** argv)
{
if (argc == 1)
{
char * l = getlogin();
printf("Current login: %s\n", l ? l : "(NULL)");
}
else
{
int s = setlogin(argv[1]);
printf("setlogin(\"%s\") returned %d\n", argv[1], s);
if (s) perror("setlogin");
}
return 0;
}
Certamente, para setlogin()
ter sucesso, ele deve ser executado com privilégios de superusuário.