From 2261c7ee3a45c2816aa500d34b8e08b8c12ac6aa Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues de Morais Date: Thu, 28 Jun 2018 16:01:48 -0300 Subject: [PATCH 1/4] test for directory with S_ISDIR --- src/libpsl-native/src/isfile.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/libpsl-native/src/isfile.cpp b/src/libpsl-native/src/isfile.cpp index 531282d5856..63fb3c77538 100644 --- a/src/libpsl-native/src/isfile.cpp +++ b/src/libpsl-native/src/isfile.cpp @@ -31,5 +31,8 @@ bool IsFile(const char* path) assert(path); struct stat buf; - return lstat(path, &buf) == 0; + lstat(path, &buf); + + return S_ISDIR(buf.st_mode) == 0; + // return lstat(path, &buf) == 0; } From e56a6c4bc9c42ba0d0a4c413f31d4508c7a65b75 Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues de Morais Date: Thu, 28 Jun 2018 16:13:56 -0300 Subject: [PATCH 2/4] fix isfile.cpp for IsFileTest.CannotGetOwnerOfFakeFile --- src/libpsl-native/src/isfile.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/libpsl-native/src/isfile.cpp b/src/libpsl-native/src/isfile.cpp index 63fb3c77538..b8165774e2d 100644 --- a/src/libpsl-native/src/isfile.cpp +++ b/src/libpsl-native/src/isfile.cpp @@ -31,8 +31,11 @@ bool IsFile(const char* path) assert(path); struct stat buf; - lstat(path, &buf); + if (lstat(path, &buf) == -1) + { + // TODO: throw error on path doesn't exist? + return false; + } return S_ISDIR(buf.st_mode) == 0; - // return lstat(path, &buf) == 0; } From b45d4f86206343b569dcff2bf447b7f1085467e9 Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues de Morais Date: Thu, 28 Jun 2018 19:23:45 -0300 Subject: [PATCH 3/4] fix test case for GetUserFromPid --- src/libpsl-native/src/getuserfrompid.cpp | 28 ++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/src/libpsl-native/src/getuserfrompid.cpp b/src/libpsl-native/src/getuserfrompid.cpp index fe34733a235..46ab2e8c460 100644 --- a/src/libpsl-native/src/getuserfrompid.cpp +++ b/src/libpsl-native/src/getuserfrompid.cpp @@ -15,6 +15,13 @@ #include #endif +#if __FreeBSD__ +#include +#include +#include +#include +#endif + char* GetUserFromPid(pid_t pid) { @@ -28,14 +35,14 @@ char* GetUserFromPid(pid_t pid) return GetFileOwner(path.c_str()); -#elif defined(__APPLE__) && defined(__MACH__) +#elif (defined(__APPLE__) && defined(__MACH__)) // Get effective owner of pid from sysctl struct kinfo_proc oldp; size_t oldlenp = sizeof(oldp); int name[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, pid}; u_int namelen = sizeof(name)/sizeof(int); - + // Read-only query int ret = sysctl(name, namelen, &oldp, &oldlenp, NULL, 0); if (ret != 0 || oldlenp == 0) @@ -45,6 +52,23 @@ char* GetUserFromPid(pid_t pid) return GetPwUid(oldp.kp_eproc.e_ucred.cr_uid); +#elif defined(__FreeBSD__) + + // Get effective owner of pid from sysctl + struct kinfo_proc oldp; + size_t oldlenp = sizeof(oldp); + int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pid }; + u_int namelen = sizeof(name)/sizeof(int); + + int ret = sysctl(name, namelen, &oldp, &oldlenp, NULL, 0); + if (ret != 0 || oldlenp == 0) + { + return NULL; + } + + // TODO: Real of effective user ID? + return GetPwUid(oldp.ki_uid); + #else return NULL; From c7a8b430783282e306eba8e18e5b4066799bbe04 Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues de Morais Date: Thu, 28 Jun 2018 19:29:47 -0300 Subject: [PATCH 4/4] cleanup getuserfrompid.cpp --- src/libpsl-native/src/getuserfrompid.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/libpsl-native/src/getuserfrompid.cpp b/src/libpsl-native/src/getuserfrompid.cpp index 46ab2e8c460..8c52669f559 100644 --- a/src/libpsl-native/src/getuserfrompid.cpp +++ b/src/libpsl-native/src/getuserfrompid.cpp @@ -16,10 +16,7 @@ #endif #if __FreeBSD__ -#include -#include #include -#include #endif char* GetUserFromPid(pid_t pid) @@ -35,7 +32,7 @@ char* GetUserFromPid(pid_t pid) return GetFileOwner(path.c_str()); -#elif (defined(__APPLE__) && defined(__MACH__)) +#elif defined(__APPLE__) && defined(__MACH__) // Get effective owner of pid from sysctl struct kinfo_proc oldp;