File: //usr/lib/python3/dist-packages/twisted/runner/__pycache__/inetdtap.cpython-38.pyc
U
W[�
� @ s� d Z ddlZddlZddlZddlmZmZ ddlmZm Z ddl
mZ ddlm
Z
mZ ejejd�ZG dd � d e j�Zd
d� ZdS )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)�inetd� inetdconf)�log�usage)�
ServerFactory)�internet�service)�tcp�udpc @ sJ e Zd ZdZddddgdddd ggZd
ddggZejde�d
�id�Z dS )�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
Zrpc�rz/etc/rpcz$DEPRECATED. RPC procedure table file�file�fz/etc/inetd.confzService configuration file�
nointernal�izDon't run internal servicesz*.conf)Z
optActionsN)
�__name__�
__module__�__qualname__�__doc__Z
optParametersZoptFlagsr ZCompletionsZ
CompleteFilesZcompData� r r �9/usr/lib/python3/dist-packages/twisted/runner/inetdtap.pyr s
��r c C s t �� }t�� }t| d ��}|�|� W 5 Q R X |jD �]�}|j}|j�d�r\t �
d� q8||jfdkr�t �
d|j|jf � q8zt|j
�|_
W nV tk
r� zt�|j
�d |_
W n* tk
r� t �
d|j
� Y Y q8Y nX Y nX |jd k�r
t�|j
�d |_nlzt|j�|_W nZ tk
�rt zt�|j�d |_W n, tk
�rn t �
d |j � Y Y q8Y nX Y nX |jd
k�r�| d �r�q8|jtjk�r�t �
d|j � q8t� }tj|j |_n
t�|�}|d
k�r�t�|j|��|� q8|dkr8t d��q8|S )Nr
zrpc/z/Skipping rpc service due to lack of rpc support))r �stream)r
Zdgramz)Skipping unsupported type/protocol: %s/%s� zUnknown user: � zUnknown group: Zinternalr zUnknown internal service: r r
znot supporting UDP)!�
appserviceZMultiServicer Z InetdConf�openZ parseFile�services�protocol�
startswithr �msgZ
socketType�int�user�
ValueError�pwd�getpwnam�KeyError�group�getpwuid�grpZgetgrnamZprogram�namer ZinternalProtocolsr ZInetdFactoryr Z TCPServerZportZsetServiceParent�RuntimeError)Zconfig�s�confr r r �factoryr r r �makeService1 s\
�
r. )r r# r( ZsocketZtwisted.runnerr r Ztwisted.pythonr r Ztwisted.internet.protocolr Ztwisted.applicationr r r ZIPPROTO_TCPZIPPROTO_UDPZprotocolDictr r. r r r r �<module> s