%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /opt/imunify360/venv/lib64/python3.8/site-packages/defence360agent/internals/
Upload File :
Create Path :
Current File : //opt/imunify360/venv/lib64/python3.8/site-packages/defence360agent/internals/auth_protocol.py

"""
This program is free software: you can redistribute it and/or modify it under 
the terms of the GNU General Public License as published by 
the Free Software Foundation, either version 3 of the License, 
or (at your option) any later version.


This program is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
See the GNU General Public License for more details.


You should have received a copy of the GNU General Public License
 along with this program.  If not, see <https://www.gnu.org/licenses/>.

Copyright © 2019 Cloud Linux Software Inc.

This software is also available under ImunifyAV commercial license,
see <https://www.imunify360.com/legal/eula>
"""
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)

Zerion Mini Shell 1.0