§
    Ètºf  ã                   ó   — d Z ddlZddlmZ ddlmZ ddlmZmZ dZ	dZ
 G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ dej        ¦  «        Z G d„ d¦  «        Z G d„ dej        ¦  «        Zg d¢ZdS )z 
Ident protocol implementation.
é    N)Údefer)Úbasic)ÚfailureÚlogé   iÿÿ  c                   ó"   — e Zd ZdZdZdefd„ZdS )Ú
IdentErrorz;
    Can't determine connection owner; reason unknown.
    zUNKNOWN-ERRORÚreturnc                 ó   — | j         S ©N)ÚidentDescription©Úselfs    úV/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/protocols/ident.pyÚ__str__zIdentError.__str__   s   € ØÔ$Ð$ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ústrr   © r   r   r	   r	      sA   € € € € € ðð ð 'Ðð%˜ð %ð %ð %ð %ð %ð %r   r	   c                   ó   — e Zd ZdZdZdS )ÚNoUserz�
    The connection specified by the port pair is not currently in use or
    currently not owned by an identifiable entity.
    zNO-USERN©r   r   r   r   r   r   r   r   r   r      s"   € € € € € ðð ð
 !ÐÐÐr   r   c                   ó   — e Zd ZdZdZdS )ÚInvalidPorta  
    Either the local or foreign port was improperly specified. This should
    be returned if either or both of the port ids were out of range (TCP
    port numbers are from 1-65535), negative integers, reals or in any
    fashion not recognized as a non-negative integer.
    zINVALID-PORTNr   r   r   r   r   r   '   s"   € € € € € ðð ð &ÐÐÐr   r   c                   ó   — e Zd ZdZdZdS )Ú
HiddenUserz…
    The server was able to identify the user of this port, but the
    information was not returned at the request of the user.
    zHIDDEN-USERNr   r   r   r   r   r   2   s"   € € € € € ðð ð
 %ÐÐÐr   r   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	ÚIdentServeraá  
    The Identification Protocol (a.k.a., "ident", a.k.a., "the Ident
    Protocol") provides a means to determine the identity of a user of a
    particular TCP connection. Given a TCP port number pair, it returns a
    character string which identifies the owner of that connection on the
    server's system.

    Server authors should subclass this class and override the lookup method.
    The default implementation returns an UNKNOWN-ERROR response for every
    query.
    c                 ó   — |                      d¦  «        }t          |¦  «        dk    r|                      ¦   «          d S 	 t          t          |¦  «        \  }}t
          |cxk    rt          k    r5n n2t
          |cxk    rt          k    rn n|                      ||¦  «         d S |                      t          j
        t          ¦   «         ¦  «        ||¦  «         d S # t          $ r |                      ¦   «          Y d S w xY w)Nú,é   )ÚsplitÚlenÚinvalidQueryÚmapÚintÚ	_MIN_PORTÚ	_MAX_PORTÚ
validQueryÚ	_ebLookupr   ÚFailurer   Ú
ValueError)r   ÚlineÚpartsÚportOnServerÚportOnClients        r   ÚlineReceivedzIdentServer.lineReceivedH   s  € Ø—
’
˜3‘”ˆÝˆu‰:Œ:˜Š?ˆ?Ø×ÒÑÔÐÐÐðÝ-0µ°e©_¬_Ñ*�˜lõ
  Ð:Ð:Ò:Ð:µÒ:Ð:Ð:Ð:Ð:Ý! \Ð>Ð>Ò>Ð>µYÒ>Ð>Ð>Ð>Ð>à—O’O L°,Ñ?Ô?Ð?Ð?Ð?à—N’NÝœ­©¬Ñ6Ô6¸Àlñô ð ð ð øõ ð $ð $ð $Ø×!Ò!Ñ#Ô#Ð#Ð#Ð#Ð#ð$øøøs   Á C ÃC=Ã<C=c                 ó8   — | j                              ¦   «          d S r   )Ú	transportÚloseConnectionr   s    r   r'   zIdentServer.invalidQuery\   s   € ØŒ×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 ó$  — | j                              ¦   «         j        |f}| j                              ¦   «         j        |f}t	          j        | j        ||¦  «                             | j        ||¦  «         	                    | j
        ||¦  «         dS )zß
        Called when a valid query is received to look up and deliver the
        response.

        @param portOnServer: The server port from the query.
        @param portOnClient: The client port from the query.
        N)r6   ÚgetHostÚhostÚgetPeerr   ÚmaybeDeferredÚlookupÚaddCallbackÚ	_cbLookupÚ
addErrbackr-   )r   r2   r3   Ú
serverAddrÚ
clientAddrs        r   r,   zIdentServer.validQuery_   sƒ   € ð ”^×+Ò+Ñ-Ô-Ô2°LÐ@ˆ
Ø”^×+Ò+Ñ-Ô-Ô2°LÐ@ˆ
ÝÔ˜DœK¨°ZÑ@Ô@×LÒLØŒN˜L¨,ñ	
ô 	
ç
Š*�T”^ \°<Ñ
@Ô
@Ð
@Ð
@Ð
@r   c                 óH   — |\  }}|                       d||||fz  ¦  «         d S )Nz%d, %d : USERID : %s : %s)ÚsendLine)r   ÚresultÚsportÚcportÚsysNameÚuserIds         r   r?   zIdentServer._cbLookupm   s3   € Ø"Ñˆ�&Ø�ŠÐ1°U¸EÀ7ÈFÐ4SÑSÑTÔTÐTÐTÐTr   c                 óö   —  |j         t          ¦  «        r"|                      d|||j        fz  ¦  «         d S t	          j        |¦  «         |                      d||t          |j        ¦  «        fz  ¦  «         d S )Nz%d, %d : ERROR : %s)Úcheckr	   rD   Úvaluer   Úerr)r   r   rF   rG   s       r   r-   zIdentServer._ebLookupq   s†   € Øˆ7Œ=�Ñ$Ô$ð 	Ø�MŠMÐ/°5¸%ÀÄÐ2OÑOÑPÔPÐPÐPÐPåŒG�GÑÔÐØ�MŠMØ%¨°µzÀ'Ä-Ñ7PÔ7PÐ(QÑQñô ð ð ð r   c                 ó   — t          ¦   «         ‚)aq  
        Lookup user information about the specified address pair.

        Return value should be a two-tuple of system name and username.
        Acceptable values for the system name may be found online at::

            U{http://www.iana.org/assignments/operating-system-names}

        This method may also raise any IdentError subclass (or IdentError
        itself) to indicate user information will not be provided for the
        given query.

        A Deferred may also be returned.

        @param serverAddress: A two-tuple representing the server endpoint
        of the address being queried.  The first element is a string holding
        a dotted-quad IP address.  The second element is an integer
        representing the port.

        @param clientAddress: Like I{serverAddress}, but represents the
        client endpoint of the address being queried.
        ©r	   )r   ÚserverAddressÚclientAddresss      r   r=   zIdentServer.lookupz   s   € õ. ‰lŒlÐr   N)
r   r   r   r   r4   r'   r,   r?   r-   r=   r   r   r   r!   r!   ;   s~   € € € € € ð
ð 
ðð ð ð((ð (ð (ðAð Að AðUð Uð Uðð ð ðð ð ð ð r   r!   c                   ón   — e Zd ZdZdZ	 ddlmZ efd„Z[n# e$ r dd„ZY nw xY wd„ Z	d	„ Z
d
„ Zd„ Zd„ ZdS )ÚProcServerMixinzDImplements lookup() to grab entries for responses from /proc/net/tcpÚLINUXr   )Úgetpwuidc                 ó$   —  ||¦  «        d         S ©Nr   r   ©r   ÚuidrU   s      r   ÚgetUsernamezProcServerMixin.getUsernameœ   s   € Ø�8˜C‘=”= Ô#Ð#r   Nc                 ó   — t          ¦   «         ‚r   rO   rX   s      r   rZ   zProcServerMixin.getUsername¢   s   € Ý‘,”,Ðr   c              #   óº   K  — t          d¦  «        5 }|                     ¦   «          |D ]}|                     ¦   «         V — Œ	 d d d ¦  «         d S # 1 swxY w Y   d S )Nz/proc/net/tcp)ÚopenÚreadlineÚstrip)r   ÚfÚLs      r   ÚentrieszProcServerMixin.entries¥   s©   è è € Ý�/Ñ"Ô"ð 	  aØ�JŠJ‰LŒLˆLØð  ð  �Ø—g’g‘i”i����ð ð	 ð 	 ð 	 ñ 	 ô 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 ð 	 øøøð 	 ð 	 ð 	 ð 	 ð 	 ð 	 s   ’0AÁAÁAc                 óº   — d                      t          t          t          j        dt          j        dt          |d¦  «        ¦  «        ¦  «        ¦  «        ¦  «        S )Nú.Ú4Bz=Lé   )Újoinr(   r   ÚstructÚunpackÚpackr)   )r   Úhexstrs     r   ÚdottedQuadFromHexStringz'ProcServerMixin.dottedQuadFromHexString«   sE   € Ø�xŠxÝ••V”] 4­¬°T½3¸vÀr¹?¼?Ñ)KÔ)KÑLÔLÑMÔMñ
ô 
ð 	
r   c                 ó„   — |                      d¦  «        \  }}|                      |¦  «        }t          |d¦  «        }||fS )Nú:rf   )r%   rl   r)   )r   ÚpackedÚaddrÚports       r   ÚunpackAddresszProcServerMixin.unpackAddress°   sA   € Ø—\’\ #Ñ&Ô&‰
ˆˆdØ×+Ò+¨DÑ1Ô1ˆÝ�4˜‰}Œ}ˆØ�TˆzÐr   c                 ó  — |                      ¦   «                              ¦   «         }|                      |d         ¦  «        \  }}|                      |d         ¦  «        \  }}t          |d         ¦  «        }||f||f|fS )Nr   r$   é   )r_   r%   rr   r)   )r   r0   r1   Ú	localAddrÚ	localPortÚ
remoteAddrÚ
remotePortrY   s           r   Ú	parseLinezProcServerMixin.parseLine¶   sy   € Ø—
’
‘”×"Ò"Ñ$Ô$ˆØ#×1Ò1°%¸´(Ñ;Ô;Ñˆ	�9Ø!%×!3Ò!3°E¸!´HÑ!=Ô!=Ñˆ
�JÝ�%˜”(‰mŒmˆØ˜9Ð%¨
°JÐ'?ÀÐDÐDr   c                 óê   — |                       ¦   «         D ]Q}|                      |¦  «        \  }}}||k    r0|d         |d         k    r| j        |                      |¦  «        fc S ŒRt	          ¦   «         ‚)Nr   )rb   ry   ÚSYSTEM_NAMErZ   r   )r   rP   rQ   Úentru   rw   rY   s          r   r=   zProcServerMixin.lookup½   s}   € Ø—<’<‘>”>ð 	Að 	AˆCØ)-¯ª¸Ñ)<Ô)<Ñ&ˆI�z 3Ø˜]Ò*Ð*¨y¸¬|¸}ÈQÔ?OÒ/OÐ/OØÔ(¨$×*:Ò*:¸3Ñ*?Ô*?Ð@Ð@Ð@Ð@øå‰hŒhˆr   r   )r   r   r   r   r{   ÚpwdrU   rZ   ÚImportErrorrb   rl   rr   ry   r=   r   r   r   rS   rS   ”   sÛ   € € € € € ØNÐNà€Kð
Ø Ð Ð Ð Ð Ð à,4ð 	$ð 	$ð 	$ð 	$ð ˆHøØð ð ð ð	ð 	ð 	ð 	ð 	ð 	ðøøøð
 ð  ð  ð
ð 
ð 
ð
ð ð ðEð Eð Eðð ð ð ð s   Š —	#¢#rS   c                   ó8   — e Zd ZeeeefZd„ Zd„ Z	d„ Z
d„ Zd„ ZdS )ÚIdentClientc                 ó   — g | _         d S r   )Úqueriesr   s    r   Ú__init__zIdentClient.__init__É   s   € ØˆŒˆˆr   c                 ó  — | j                              t          j        ¦   «         ||f¦  «         t	          | j         ¦  «        dk    r| j         d         d         S |                      d||fz  ¦  «         | j         d         d         S )zK
        Lookup user information about the specified address pair.
        r   éÿÿÿÿr   ú%d, %d)r‚   Úappendr   ÚDeferredr&   rD   )r   r2   r3   s      r   r=   zIdentClient.lookupÌ   s~   € ð 	Œ×Ò�Uœ^Ñ-Ô-¨|¸\ÐJÑKÔKÐKÝˆtŒ|ÑÔ˜qÒ Ð Ø”< Ô# AÔ&Ð&à�Š�h ,°Ð!=Ñ=Ñ>Ô>Ð>ØŒ|˜BÔ Ô"Ð"r   c                 ó8  — | j         st          j        d|›�¦  «         d S | j                              d¦  «        \  }}}|                      ||¦  «         | j         r>|                      d| j         d         d         | j         d         d         fz  ¦  «         d S d S )NzUnexpected server response: r   r†   r   r$   )r‚   r   ÚmsgÚpopÚparseResponserD   )r   r0   ÚdÚ_s       r   r4   zIdentClient.lineReceived×   s¬   € ØŒ|ð 	SÝŒGÐ;°4Ð;Ð;Ñ<Ô<Ð<Ð<Ð<à”l×&Ò& qÑ)Ô)‰GˆAˆq�!Ø×Ò˜q $Ñ'Ô'Ð'ØŒ|ð SØ—’˜h¨$¬,°q¬/¸!Ô*<¸d¼lÈ1¼oÈaÔ>PÐ)QÑQÑRÔRÐRÐRÐRðSð Sr   c                 óx   — | j         D ]*}|d                              t          |¦  «        ¦  «         Œ+g | _         d S rW   )r‚   Úerrbackr	   )r   ÚreasonÚqs      r   ÚconnectionLostzIdentClient.connectionLostà   s?   € Ø”ð 	-ð 	-ˆAØˆaŒD�LŠL� FÑ+Ô+Ñ,Ô,Ð,Ð,ØˆŒˆˆr   c                 óÊ  — |                      dd¦  «        }t          |¦  «        dk    r$|                     t          |¦  «        ¦  «         d S t	          t
          j        |¦  «        \  }}}|dk    rZ| j        D ].}|j        |k    r!|                      ||¦  «        ¦  «          d S Œ/|                     t          |¦  «        ¦  «         d S | 	                    ||f¦  «         d S )Nrn   r$   é   ÚERROR)
r%   r&   r�   r	   r(   r   r_   Ú
errorTypesr   Úcallback)r   Údeferredr0   r1   ÚportsÚtypeÚaddInfoÚets           r   rŒ   zIdentClient.parseResponseå   sð   € Ø—
’
˜3 Ñ"Ô"ˆÝˆu‰:Œ:˜Š?ˆ?Ø×Ò�Z¨Ñ-Ô-Ñ.Ô.Ð.Ð.Ð.å#&¥s¤y°%Ñ#8Ô#8Ñ ˆE�4˜Ø�wŠˆØœ/ð ð �BØÔ*¨gÒ5Ð5Ø ×(Ò(¨¨¨D©¬Ñ2Ô2Ð2Ø˜˜ð 6ð × Ò ¥¨DÑ!1Ô!1Ñ2Ô2Ð2Ð2Ð2à×!Ò! 4¨ /Ñ2Ô2Ð2Ð2Ð2r   N)r   r   r   r	   r   r   r   r—   rƒ   r=   r4   r“   rŒ   r   r   r   r€   r€   Æ   sp   € € € € € Ø˜f k°:Ð>€Jðð ð ð	#ð 	#ð 	#ðSð Sð Sðð ð ð
3ð 3ð 3ð 3ð 3r   r€   )r	   r   r   r   r!   r€   rS   )r   rh   Útwisted.internetr   Útwisted.protocolsr   Útwisted.pythonr   r   r*   r+   Ú	Exceptionr	   r   r   r   ÚLineOnlyReceiverr!   rS   r€   Ú__all__r   r   r   ú<module>r¤      sª  ðð
ð ð €€€à "Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'à€	Ø€	ð%ð %ð %ð %ð %�ñ %ô %ð %ð!ð !ð !ð !ð !ˆZñ !ô !ð !ð&ð &ð &ð &ð &�*ñ &ô &ð &ð%ð %ð %ð %ð %�ñ %ô %ð %ðVð Vð Vð Vð V�%Ô(ñ Vô Vð Vðr/ð /ð /ð /ð /ñ /ô /ð /ðd,3ð ,3ð ,3ð ,3ð ,3�%Ô(ñ ,3ô ,3ð ,3ð^ð ð €€€r   