
    i                     N   d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 	 ej
         n# e$ r
 de_
        Y nw xY w	 ej         n# e$ r
 de_        Y nw xY w G d d          Z G d	 d
ej                  ZddZddZedk    r e ej        d          i            dS dS )    )InteractiveConsoleN)hubs)	greenlets	get_errnoz>>> z... c                   2    e Zd Zd Zd Zd Zd Zd Zd ZdS )	FileProxyc                     || _         d S N)f)selfr   s     </usr/local/lib/python3.11/dist-packages/eventlet/backdoor.py__init__zFileProxy.__init__   s        c                     dS )NT r   s    r   isattyzFileProxy.isatty   s    tr   c                     d S r
   r   r   s    r   flushzFileProxy.flush   s    r   c                     	  | j         j        |g|R i | | j                                          d S # t          $ r)}t	          |          t
          j        k    r Y d }~d S d }~ww xY wr
   )r   writer   OSErrorr   errnoEPIPE)r   dataakwes        r   r   zFileProxy.write   s    	DFL((((R(((FLLNNNNN 	 	 	||u{** +*****	s   /3 
A&A!!A&c                 H     | j         j        |                     dd          S )Nz

)r   readlinereplace)r   r   s     r   r!   zFileProxy.readline&   s#    tv"**64888r   c                 ,    t          | j        |          S r
   )getattrr   )r   attrs     r   __getattr__zFileProxy.__getattr__)   s    tvt$$$r   N)	__name__
__module____qualname__r   r   r   r   r!   r&   r   r   r   r   r      sn                9 9 9% % % % %r   r   c                   ,    e Zd Zd Zd Zd Zd Zd ZdS )SocketConsolec                     || _         || _        t          |          | _        t          j                            |            d S r
   )hostportlocalsr   descr   greenletr   )r   r/   r-   r.   s       r   r   zSocketConsole.__init__0   s:     dOO	##D)))))r   c                    	 t          | j                  }|                                 |                                  |                                  d S # |                                  |                                  w xY wr
   )r   r.   interact
switch_outfinalize)r   consoles     r   runzSocketConsole.run7   sn    	(55GOOMMOOOOO OOMMOOOOs   (A *A>c                     t           j        t           j        t           j        f| _        | j        xt           _        xt           _        t           _        t          j        j        | g|R i | d S r
   )	sysstdinstderrstdoutsavedr/   r   r0   switch)r   argsr   s      r   r=   zSocketConsole.switch?   sW    Y
CJ6
.2i7	7CJ!$444444444r   c                 X    | j         \  t          _        t          _        t          _        d S r
   )r<   r8   r9   r:   r;   r   s    r   r3   zSocketConsole.switch_outD   s    ,0J)	3:szzzr   c                     d | _         t          | j                  dk    r1| j        d         }| j        d         }t          d|d|           d S t          d           d S )N   r      zbackdoor closed to :zbackdoor closed)r/   lenr-   print)r   hostports      r   r4   zSocketConsole.finalizeG   sl    	t}""=#D=#DEdd<=====#$$$$$r   N)r'   r(   r)   r   r6   r=   r3   r4   r   r   r   r+   r+   /   s_        * * *  5 5 5
7 7 7% % % % %r   r+   c                 :   |                                  }| j        t          j        k    rd|z  }n#| j        t          j        k    r|\  }}}}|d|}t          d|           	 	 d}	 |                                 }t          ||           n5# t          $ r(}t          |          t          j        k    r Y d}~nd}~ww xY w|r|d                                          n"# |r|d                                          w w xY w# |                                  w xY w)aZ   Blocking function that runs a backdoor server on the socket *sock*,
    accepting connections and running backdoor consoles for each client that
    connects.

    The *locals* argument is a dictionary that will be included in the locals()
    of the interpreters.  It can be convenient to stick important application
    variables in here.
    z%s:%srC   zbackdoor server listening on TNr   )getsocknamefamilysocketAF_INETAF_INET6rE   acceptbackdoorr   r   r   r   close)sockr.   listening_oniprG   _
socketpairr   s           r   backdoor_serverrV   R   sT    ##%%L{fn$$-		'	'%D!Q"$""dd, 
E||
=>>>	*J	*![[]]
V,,,,   Q<<5;.. /....
  *qM'')))  *qM''))))*	* 	

sH   &D *$B C! 
CB<7C! <CC! D !D  D Dc                    | \  }}|j         t          j        k    r|\  }}t          d|d|           nA|j         t          j        k    r|\  }}}}t          d|d|           nt          d           |                    d          }t          |||          }t          j                    }	|		                    d|j
                   dS )a  Sets up an interactive console on a socket with a single connected
    client.  This does not block the caller, as it spawns a new greenlet to
    handle the console.  This is meant to be called from within an accept loop
    (such as backdoor_server).
    zbackdoor to rC   zbackdoor openedrwr   N)rJ   rK   rL   rE   rM   makefiler+   r   get_hubschedule_call_globalr=   )
	conn_infor.   connaddrrF   rG   rT   flr5   hubs
             r   rO   rO   v   s     JD${fn$$
dTTT4401111		'	'dAqTTT4401111   	t		BBf--G
,..CQ/////r   __main__)z	127.0.0.1i(#  r
   )coder   r   rK   r8   eventletr   eventlet.supportr   r   ps1AttributeErrorps2r   r0   r+   rV   rO   r'   listenr   r   r   <module>ri      s   # # # # # #   



        1 1 1 1 1 1 1 1GGG   CGGGGGG   CGGG% % % % % % % %6 %  %  %  %  %I&  %  %  %F! ! ! !H0 0 0 0* zOOHO$788"===== s   . ==A	 	AA