PHP 8.5.2
Preview: inetd.py Size: 1.97 KB
//lib/python3/dist-packages/twisted/runner/inetd.py

# Copyright (c) Twisted Matrix Laboratories.
# See LICENSE for details.

#

"""
Twisted inetd.

Maintainer: Andrew Bennetts

Future Plans: Bugfixes.  Specifically for UDP and Sun-RPC, which don't work
correctly yet.
"""

import os

from twisted.internet import fdesc, process, reactor
from twisted.internet.protocol import Protocol, ServerFactory
from twisted.protocols import wire

# A dict of known 'internal' services (i.e. those that don't involve spawning
# another process.
internalProtocols = {
    "echo": wire.Echo,
    "chargen": wire.Chargen,
    "discard": wire.Discard,
    "daytime": wire.Daytime,
    "time": wire.Time,
}


class InetdProtocol(Protocol):
    """Forks a child process on connectionMade, passing the socket as fd 0."""

    def connectionMade(self):
        sockFD = self.transport.fileno()
        childFDs = {0: sockFD, 1: sockFD}
        if self.factory.stderrFile:
            childFDs[2] = self.factory.stderrFile.fileno()

        # processes run by inetd expect blocking sockets
        # FIXME: maybe this should be done in process.py?  are other uses of
        #        Process possibly affected by this?
        fdesc.setBlocking(sockFD)
        if 2 in childFDs:
            fdesc.setBlocking(childFDs[2])

        service = self.factory.service
        uid = service.user
        gid = service.group

        # don't tell Process to change our UID/GID if it's what we
        # already are
        if uid == os.getuid():
            uid = None
        if gid == os.getgid():
            gid = None

        process.Process(
            None,
            service.program,
            service.programArgs,
            os.environ,
            None,
            None,
            uid,
            gid,
            childFDs,
        )

        reactor.removeReader(self.transport)
        reactor.removeWriter(self.transport)


class InetdFactory(ServerFactory):
    protocol = InetdProtocol
    stderrFile = None

    def __init__(self, service):
        self.service = service

Directory Contents

Dirs: 3 × Files: 6

Name Size Perms Modified Actions
- drwxr-xr-x 2026-01-08 12:55:41
Edit Download
test DIR
- drwxr-xr-x 2026-01-08 12:56:22
Edit Download
- drwxr-xr-x 2026-01-08 12:56:23
Edit Download
1.97 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
4.93 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
3.45 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
13.14 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
2.49 KB lrw-r--r-- 2024-08-27 10:30:39
Edit Download
124 B lrw-r--r-- 2024-08-27 10:30:39
Edit Download

If ZipArchive is unavailable, a .tar will be created (no compression).