| Server IP : 109.234.162.214 / Your IP : 216.73.216.112 Web Server : Apache System : Linux servd162214.srv.odns.fr 4.18.0-372.26.1.lve.1.el8.x86_64 #1 SMP Fri Sep 16 14:08:19 EDT 2022 x86_64 User : carpe ( 1178) PHP Version : 8.0.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /opt/imunify360/venv/lib/python3.11/site-packages/defence360agent/internals/ |
Upload File : |
import asyncio
import socket
import logging
import struct
logger = logging.getLogger(__name__)
class UnixSocketAuthProtocol(asyncio.Protocol):
"""
This protocol uses SO_PEERCRED attribute of unix socket
to get authentication data (pid, uid, gid)
After connect, this values are stored in object's
_pid, _uid, _gid attributes
"""
# ucred struct format (3 integers)
# struct ucred
# {
# pid_t pid; /* PID of sending process. */
# uid_t uid; /* UID of sending process. */
# gid_t gid; /* GID of sending process. */
# };
#
STRUCT_FORMAT = "3i"
def connection_made(self, transport):
self._transport = transport
conn = self._transport.get_extra_info("socket")
creds = conn.getsockopt(
socket.SOL_SOCKET,
socket.SO_PEERCRED,
struct.calcsize(self.STRUCT_FORMAT),
)
self._pid, self._uid, self._gid = struct.unpack(
self.STRUCT_FORMAT, creds
)
logger.debug(
"New socket connection from pid=%s, uid=%s, gid=%s",
self._pid,
self._uid,
self._gid,
)