getlogin()
e logname
(que apenas chama getlogin()
) obtém o nome de usuário logado procurando pelo tty atual em utmp
e informando o nome de login encontrado no registro utmp
. A razão pela qual eles fazem isso é que eles são projetados para trabalhar em sistemas onde vários nomes de usuários podem mapear para o mesmo uid (uma prática geralmente desaprovada, mas às vezes usada para criar múltiplas contas raiz ou diferentes nomes de login que iniciam shells customizados, mas todos mapeiam para mesmo uid subjacente). Quando usado com essas contas, getpwuid(getuid())
reportará apenas a primeira correspondência do banco de dados passwd, enquanto getlogin()
encontrará a que realmente foi usada para efetuar login.
No entanto, como essa função depende do conteúdo de um arquivo gravável, ela não é digna do mesmo nível de confiança que getpwuid(getuid())
. É verdade que apenas processos privilegiados devem ser capazes de escrever utmp
, mas existem alguns programas "extras" que são frequentemente configurados para serem capazes de escrevê-lo (geralmente sendo setgid- utmp
) como a tela GNU e você pode Não quero confiar naqueles. Eu sei que historicamente em alguns sistemas SysV eu costumava gerenciar, utmp
estava propenso a se corromper ocasionalmente.