如何检查用户列表是否已登录?

时间:2014-03-27 09:34:25

标签: c linux login

我有一个用于检查用户是否登录的用户列表的功能。(粗略地说,用户与服务器有活动连接)。

这是代码:

static int is_login(char *user)
{
    int found = 0;
    struct utmpx *u;
    setutxent();
    while ((u = getutxent())) {
            if ((strcmp(u->ut_user,user)==0) && (u->ut_type ==USER_PROCESS)) {
                    found = 1;
                    break;
            } else  {
                    found =0;
            }
    }
    endutxent();
    return found;
}

不要弄错。这段代码很好用。唯一的问题是/ var / run / utmp权限未设置为可读。例如:chmod /var/run/utmp 600.。更糟糕的是,如果服务器没有utmp。而是使用一个utmps。是否有任何其他功能可以与getutxent()做同样的事情?到目前为止,我发现的只有getpwuid(getuid())getlogin(),它只返回登录控制终端的用户。

这是我测试过的

#include <unistd.h>
#include <stdio.h>
#include <pwd.h>

int main()
{
    char *name;
    struct passwd *pass;
    while(pass = getpwuid(getuid())) //I've tested also with getlogin(), but without the struct ofcourse.
    {
            name = pass->pw_name;
            printf("user = %s\n",name);
    }
    return 0;
}

在运行此测试程序时,我使用另外两个不同的用户登录到该系统,但这两个用户的名字没有显示在屏幕上。

1 个答案:

答案 0 :(得分:1)

我正在使用与您相同的功能处理项目(例如登录事件监控),但我必须依赖/var/log/secure文件。它为我提供了更多的信息。也许你应该考虑到它。