Skip to content

Commit 6938a73

Browse files
committed
Users (Linux): fix detection of client ip
1 parent cee9df1 commit 6938a73

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

src/detection/users/users_linux.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
#define setutxent setutent
1111
#define getutxent getutent
1212
#endif
13+
#ifdef __linux__
14+
#include <netinet/in.h>
15+
#include <arpa/inet.h>
16+
#endif
1317

1418
const char* ffDetectUsers(FFlist* users)
1519
{
@@ -33,11 +37,11 @@ const char* ffDetectUsers(FFlist* users)
3337
ffStrbufInitS(&user->hostName, n->ut_host);
3438
ffStrbufInitS(&user->sessionName, n->ut_line);
3539
#ifdef __linux__
36-
if(n->ut_addr_v6[0] || n->ut_addr_v6[1] || n->ut_addr_v6[2] || n->ut_addr_v6[3])
37-
ffStrbufInitF(&user->clientIp, "%u.%u.%u.%u", n->ut_addr_v6[0], n->ut_addr_v6[1], n->ut_addr_v6[2], n->ut_addr_v6[3]);
38-
else
39-
#endif
40+
// https://www.linuxquestions.org/questions/programming-9/get-the-ip-addr-out-from-an-int32_t-value-287687/#post1458622
41+
ffStrbufInitS(&user->clientIp, inet_ntoa((struct in_addr) { .s_addr = (in_addr_t) n->ut_addr_v6[0] }));
42+
#else
4043
ffStrbufInit(&user->clientIp);
44+
#endif
4145
user->loginTime = (uint64_t) n->ut_tv.tv_sec * 1000 + (uint64_t) n->ut_tv.tv_usec / 1000;
4246
}
4347

0 commit comments

Comments
 (0)