o
    ¯bÈ  ã                   @   s„   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	„ d	ejƒZd
d„ ZdS )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                   @   s@   e Zd ZdZg d¢g d¢gZg d¢gZejde d¡id�Z	dS )	Ú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© r   r   ú9/usr/lib/python3/dist-packages/twisted/runner/inetdtap.pyr      s    þ
r   c                 C   sø  t  ¡ }t ¡ }t| d ƒ�}| |¡ W d   ƒ n1 sw   Y  |jD ]Ó}|j}|j d¡r7t	 
d¡ q&||jfdvrJt	 
d|j|jf ¡ q&zt|jƒ|_W n' tyy   zt |j¡d |_W n tyv   t	 
d|j ¡ Y Y q&w Y nw |jd u r‰t |j¡d |_n0zt|jƒ|_W n' ty¸   zt |j¡d |_W n tyµ   t	 
d	|j ¡ Y Y q&w Y nw |jd
krÝ| d rÃq&|jtjvrÒt	 
d|j ¡ q&tƒ }tj|j |_nt |¡}|dkrñt |j|¡ |¡ q&|dkrùt dƒ‚q&|S )Nr   zrpc/z/Skipping rpc service due to lack of rpc support))r	   Ústream)r
   Údgramz)Skipping unsupported type/protocol: %s/%sé   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)   Úfactoryr   r   r   ÚmakeService0   sp   ÿ


ÿÿþÿþ
þÿþ

ÿrC   )r   r5   r0   ÚsocketÚtwisted.applicationr   r   r#   Útwisted.internet.protocolr   Útwisted.pythonr   r   Útwisted.runnerr   r   ÚIPPROTO_TCPÚIPPROTO_UDPÚprotocolDictr   rC   r   r   r   r   Ú<module>   s   