c++ - Linux中getlogin函数的使用

标签 c++ linux authentication

当我登录 Linux Suse10 机器并通过 C++ 程序检查 getlogin_r() 时,我得到一个正确的结果作为我的登录名。

int main()
{
    char szUserName[64] = {0};

    int nGet = getlogin_r(szUserName, sizeof(szUserName)-1);
    if(0 != nGet)
        {
            printerr();
        }
    printf("%s\n", szUserName);
    char * szHome = getlogin();
    printf("%s\n", szHome);
    return 0;
}

但是在使用了 su - name2 之后 我现在已经更改了登录名。 但是 getlogin_r() 仍然显示旧的用户名。

一种解决方案是使用 geteuid()。但是出现上述问题的原因是什么

最佳答案

“在使用 su - name2 之后我更改了登录名”- 不,你没有。您更改了用户 ID,而不是登录名。

su 的手册页对 - 选项进行了说明:“提供类似于用户直接登录时所期望的环境。”显然“相似”不同于“相同”。具体来说,su - 不会在/var/run/utmp 中存储登录记录。

关于c++ - Linux中getlogin函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044168/

相关文章:

linux - 在 oracle 过程中运行 shell 脚本

Delphi THTTPRio如何使用认证代理服务器

javascript - 尝试使用 mocha 登录时出现错误 : expected 200 "OK", 得到 401 "Unauthorized"

c++ - 定义用 0 替换

C++11 for_each 传递多个值

c++ - CMake 项目编译良好的 SHARED 库但不使用 STATIC 库

java - HBase 连接拒绝

c++ - Qt Creator编译器配置问题visual studio 2017

linux - 在 Linux 中查找并替换为参数

php - 通过两个独立的 joomla 站点进行 Joomla 身份验证