From 0f83337f0f0a49a576c40d9859c381b929487957 Mon Sep 17 00:00:00 2001 From: Mateus Rodrigues de Morais Date: Mon, 2 Jul 2018 17:58:36 -0300 Subject: [PATCH 1/2] Fix FreeBSD libpsl tests --- src/libpsl-native/src/getuserfrompid.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/libpsl-native/src/getuserfrompid.cpp b/src/libpsl-native/src/getuserfrompid.cpp index fe34733..1c136a7 100644 --- a/src/libpsl-native/src/getuserfrompid.cpp +++ b/src/libpsl-native/src/getuserfrompid.cpp @@ -15,6 +15,10 @@ #include #endif +#if __FreeBSD__ +#include +#endif + char* GetUserFromPid(pid_t pid) { @@ -45,6 +49,22 @@ 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; + } + + return GetPwUid(oldp.ki_uid); + #else return NULL; From 4b838af5476069645cf25969a36d0d1b92b31e4c Mon Sep 17 00:00:00 2001 From: Mateus de Morais Date: Wed, 6 Feb 2019 00:31:52 +0800 Subject: [PATCH 2/2] cleaned PR --- src/libpsl-native/src/getuserfrompid.cpp | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/src/libpsl-native/src/getuserfrompid.cpp b/src/libpsl-native/src/getuserfrompid.cpp index 1c136a7..e110ed2 100644 --- a/src/libpsl-native/src/getuserfrompid.cpp +++ b/src/libpsl-native/src/getuserfrompid.cpp @@ -32,7 +32,7 @@ char* GetUserFromPid(pid_t pid) return GetFileOwner(path.c_str()); -#elif defined(__APPLE__) && defined(__MACH__) +#elif (defined(__APPLE__) && defined(__MACH__)) || defined(__FreeBSD__) // Get effective owner of pid from sysctl struct kinfo_proc oldp; @@ -47,23 +47,11 @@ char* GetUserFromPid(pid_t pid) return NULL; } - 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; - } - +#if defined(__FreeBSD__) return GetPwUid(oldp.ki_uid); +#else + return GetPwUid(oldp.kp_eproc.e_ucred.cr_uid); +#endif #else