o b @sdZddlZddlZddlZddlmZmZddlm Z ddl m Z m Z ddl mZmZejejdZGdd d e jZd 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)internetservice) ServerFactory)logusage)inetd inetdconf)tcpudpc@s@eZdZdZgdgdgZgdgZejdedidZ 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 )rpcrz/etc/rpcz$DEPRECATED. RPC procedure table file)filefz/etc/inetd.confzService configuration file) nointernalizDon't run internal servicesrz*.conf) optActionsN) __name__ __module__ __qualname____doc__ optParametersoptFlagsr Completions CompleteFilescompDatarr9/usr/lib/python3/dist-packages/twisted/runner/inetdtap.pyr s  r c Cst}t}t|d }||Wdn1swY|jD]}|j}|jdr7t dq&||j fdvrJt d|j |jfq&zt |j |_ Wn'tyyz t|j d|_ Wntyvt d|j YYq&wYnw|jdurt|j d|_n0zt |j|_Wn'tyz t|jd|_Wntyt d |jYYq&wYnw|jd kr|d rq&|jtjvrt d |jq&t}tj|j|_nt|}|d krt|j||q&|dkrt dq&|S)Nrzrpc/z/Skipping rpc service due to lack of rpc support))r stream)r dgramz)Skipping unsupported type/protocol: %s/%szUnknown user: zUnknown group: internalrzUnknown internal service: r r znot supporting UDP)! appservice MultiServicer InetdConfopen parseFileservicesprotocol startswithrmsg socketTypeintuser ValueErrorpwdgetpwnamKeyErrorgroupgetpwuidgrpgetgrnamprogramnamerinternalProtocolsr InetdFactoryr TCPServerportsetServiceParent RuntimeError)configsconfrrr)factoryrrr makeService0sp             rC)rr5r0sockettwisted.applicationrrr#twisted.internet.protocolrtwisted.pythonrrtwisted.runnerrr IPPROTO_TCP IPPROTO_UDP protocolDictr rCrrrrs