Ë
    ojÈ  ã                   ó¾   — d Z ddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZ ej                   ej"                  dœZ G d„ d	ej&                  «      Zd
„ Zy)zë
Twisted inetd TAP support

The purpose of inetdtap is to provide an inetd-like server, to allow Twisted to
invoke other programs to handle incoming sockets.
This is a useful thing as a "networking swiss army knife" tool, like netcat.
é    N)ÚinternetÚservice)ÚServerFactory)ÚlogÚusage)ÚinetdÚ	inetdconf)ÚtcpÚudpc                   ót   — e Zd ZdZg d¢g d¢gZg d¢gZ ej                  d ej                  d«      i¬«      Z	y)	ÚOptionszù
    To use it, create a file named `sample-inetd.conf` with:

    8123 stream tcp wait some_user /bin/cat -

    You can then run it as in the following example and port 8123 became an
    echo server.

    twistd -n inetd -f sample-inetd.conf
    )ÚrpcÚrz/etc/rpcz$DEPRECATED. RPC procedure table file)ÚfileÚfz/etc/inetd.confzService configuration file)Ú
nointernalÚizDon't run internal servicesr   z*.conf)Ú
optActionsN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚoptParametersÚoptFlagsr   ÚCompletionsÚCompleteFilesÚcompData© ó    ú9/usr/lib/python3/dist-packages/twisted/runner/inetdtap.pyr   r      sG   „ ñ	ò 	IÚFð€Mò
 CÐC€Hà ˆu× Ñ ¨VÐ5H°U×5HÑ5HÈÓ5RÐ,SÔT�Hr   r   c                 ó   — t        j                  «       }t        j                  «       }t	        | d   «      5 }|j                  |«       d d d «       |j                  D �]È  }|j                  }|j                  j                  d«      rt        j                  d«       ŒA||j                  fdvr0t        j                  d|j                  ›d|j                  ›�«       Œ�	 t        |j                  «      |_        |j$                  €(t        j&                  |j                  «      d	   |_        n	 t        |j$                  «      |_        |j,                  dk(  rt| d   r�Œ|j.                  t0        j2                  vr$t        j                  d|j.                  z   «       �ŒAt5        «       }t0        j2                  |j.                     |_        nt1        j6                  |«      }|dk(  r1t9        j:                  |j<                  |«      j?                  |«       �Œ¹|dk(  s�ŒÀtA        d«      ‚ |S # 1 sw Y   �ŒäxY w# t        $ r` 	 t        j                   |j                  «      d   |_        n3# t"        $ r' t        j                  d|j                  z   «       Y Y �Œ<w xY wY �Œ§w xY w# t        $ r` 	 t)        j*                  |j$                  «      d   |_        n3# t"        $ r' t        j                  d
|j$                  z   «       Y Y �Œ¨w xY wY �ŒÄw xY w)Nr   zrpc/z/Skipping rpc service due to lack of rpc support))r
   Ústream)r   Údgramz$Skipping unsupported type/protocol: ú/é   zUnknown user: é   zUnknown group: Úinternalr   zUnknown internal service: r
   r   znot supporting UDP)!Ú
appserviceÚMultiServicer	   Ú	InetdConfÚopenÚ	parseFileÚservicesÚprotocolÚ
startswithr   ÚmsgÚ
socketTypeÚintÚuserÚ
ValueErrorÚpwdÚgetpwnamÚKeyErrorÚgroupÚgetpwuidÚgrpÚgetgrnamÚprogramÚnamer   ÚinternalProtocolsr   ÚInetdFactoryr   Ú	TCPServerÚportÚsetServiceParentÚRuntimeError)ÚconfigÚsÚconfr   r   r.   Úfactorys          r    ÚmakeServicerH   0   sŠ  € Ü×ÑÓ!€AÜ×ÑÓ €DÜ	ˆf�V‰nÓ	ð  Ø�‰�qÔ÷ð —=‘=ó 65ˆØ×#Ñ#ˆà×Ñ×&Ñ& vÔ.Ü�G‰GÐEÔFØà�g×(Ñ(Ð)Ð1VÑVÜ�GŠGà×%Ó% w×'7Ò'7ð9ôð ð	Ü˜wŸ|™|Ó,ˆGŒLð �=‰=Ð äŸL™L¨¯©Ó6°qÑ9ˆG�MðÜ # G§M¡MÓ 2�”ð �?‰?˜jÒ(Ø�lÒ#Ùð �|‰|¤5×#:Ñ#:Ñ:Ü—‘Ð4°w·|±|ÑCÔDÙÜ#“oˆGÜ$×6Ñ6°w·|±|ÑDˆGÕä×(Ñ(¨Ó1ˆGà�uÒÜ×Ñ˜wŸ|™|¨WÓ5×FÑFÀqÖIØ˜ÔÜÐ3Ó4Ð4ðm65ðn €H÷uñ ûô( ò 	ðÜ"Ÿ|™|¨G¯L©LÓ9¸!Ñ<�•øÜò Ü—‘Ð(¨7¯<©<Ñ7Ô8Ûðúò ð	ûô ò ðÜ$'§L¡L°·±Ó$?ÀÑ$B�G•MøÜò Ü—G‘GÐ-°·±Ñ=Ô>Ûðúò "ðúsw   ·H+ÃH8Ä.J$È+H5È8	J!É'I*É)J!É*+JÊJ!ÊJÊJ!Ê J!Ê$	LÊ.'KËLË+LÌLÌLÌLÌL)r   r:   r5   ÚsocketÚtwisted.applicationr   r   r(   Útwisted.internet.protocolr   Útwisted.pythonr   r   Útwisted.runnerr   r	   ÚIPPROTO_TCPÚIPPROTO_UDPÚprotocolDictr   rH   r   r   r    ú<module>rQ      sP   ðñ
ó Û 
Û ç ?Ý 3ß %ß +ð ×)Ñ)°&×2DÑ2DÑE€ôUˆe�m‰mô Uó,=r   