From 3e97c51418e6d27e9a81906f347fcb7c78e27d4f Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 14 Apr 2024 15:23:16 +0200 Subject: Adding upstream version 0.20.0. Signed-off-by: Daniel Baumann --- vendor/gipfl/socket/src/UnixSocketInspection.php | 89 ++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 vendor/gipfl/socket/src/UnixSocketInspection.php (limited to 'vendor/gipfl/socket/src/UnixSocketInspection.php') diff --git a/vendor/gipfl/socket/src/UnixSocketInspection.php b/vendor/gipfl/socket/src/UnixSocketInspection.php new file mode 100644 index 0000000..e1e9819 --- /dev/null +++ b/vendor/gipfl/socket/src/UnixSocketInspection.php @@ -0,0 +1,89 @@ +stream); + $remotePid = static::getRemotePidFromSocket($socket); + $stat = static::statProcFile($remotePid); + $uid = $stat['uid']; + $gid = $stat['gid']; + $userInfo = static::getUserInfo($uid); + $gecosParts = preg_split('/,/', $userInfo['gecos']); + $fullName = trim(array_shift($gecosParts)); + $groupInfo = static::getGroupInfo($gid); + + return new UnixSocketPeer( + $remotePid, + $uid, + $gid, + $userInfo['name'], + strlen($fullName) ? $fullName : null, + $groupInfo['name'] + ); + } + + protected static function getRemotePidFromSocket($socket) + { + // SO_PEERCRED = 17 + $remotePid = socket_get_option($socket, SOL_SOCKET, 17); + if (! is_int($remotePid) || ! $remotePid > 0) { + throw new RuntimeException("Remote PID expected, got " . var_export($remotePid)); + } + + return $remotePid; + } + + protected static function statProcFile($pid) + { + $procDir = "/proc/$pid"; + if (file_exists($procDir)) { + return stat($procDir); + } else { + throw new RuntimeException("Got no proc dir ($procDir) for remote node"); + } + } + + protected static function getUserInfo($uid) + { + $userInfo = posix_getpwuid($uid); + + if ($userInfo === false) { + throw new RuntimeException("Unable to resolve remote UID '$uid'"); + } + + return $userInfo; + } + + protected static function getGroupInfo($gid) + { + $groupInfo = posix_getgrgid($gid); + + if ($groupInfo === false) { + throw new RuntimeException("Unable to resolve remote GID '$gid'"); + } + + return $groupInfo; + } +} -- cgit v1.2.3