diff --git a/src/libpsl-native/src/getuserfrompid.cpp b/src/libpsl-native/src/getuserfrompid.cpp index fe34733a235..8c52669f559 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) { @@ -35,7 +39,7 @@ char* GetUserFromPid(pid_t pid) 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 +49,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; diff --git a/src/libpsl-native/src/isfile.cpp b/src/libpsl-native/src/isfile.cpp index 531282d5856..b8165774e2d 100644 --- a/src/libpsl-native/src/isfile.cpp +++ b/src/libpsl-native/src/isfile.cpp @@ -31,5 +31,11 @@ bool IsFile(const char* path) assert(path); struct stat buf; - return lstat(path, &buf) == 0; + if (lstat(path, &buf) == -1) + { + // TODO: throw error on path doesn't exist? + return false; + } + + return S_ISDIR(buf.st_mode) == 0; }