コード例 #1
0
ファイル: http.py プロジェクト: xzxiongda/supervisor
    def __init__(self, ip, port, logger_object):
        self.ip = ip
        self.port = port
        sock = text_socket.text_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.prebind(sock, logger_object)
        self.bind((ip, port))

        if not ip:
            self.log_info('Computing default hostname', 'warning')
            hostname = socket.gethostname()
            try:
                ip = socket.gethostbyname(hostname)
            except socket.error:
                raise ValueError(
                    'Could not determine IP address for hostname %s, '
                    'please try setting an explicit IP address in the "port" '
                    'setting of your [inet_http_server] section.  For example, '
                    'instead of "port = 9001", try "port = 127.0.0.1:9001."'
                    % hostname)
        try:
            self.server_name = socket.gethostbyaddr (ip)[0]
        except socket.error:
            self.log_info('Cannot do reverse lookup', 'warning')
            self.server_name = ip       # use the IP address as the "hostname"

        self.postbind()
コード例 #2
0
ファイル: asyncore_25.py プロジェクト: alexsilva/supervisor
 def create_socket(self, family, type):
     from supervisor.medusa import text_socket
     self.family_and_type = family, type
     self.socket = text_socket.text_socket(family, type)
     self.socket.setblocking(0)
     self._fileno = self.socket.fileno()
     self.add_channel()
コード例 #3
0
ファイル: datatypes.py プロジェクト: 1T/supervisor
 def create_and_bind(self):
     sock = text_socket.text_socket(socket.AF_INET, socket.SOCK_STREAM)
     try:
         sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         sock.bind(self.addr())
     except:
         sock.close()
         raise
     return sock
コード例 #4
0
ファイル: datatypes.py プロジェクト: 1T/supervisor
 def create_and_bind(self):
     if os.path.exists(self.path):
         os.unlink(self.path)
     sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM)
     try:
         sock.bind(self.addr())
         self._chown()
         self._chmod()
     except:
         sock.close()
         if os.path.exists(self.path):
             os.unlink(self.path)
         raise
     return sock
コード例 #5
0
ファイル: http.py プロジェクト: xzxiongda/supervisor
    def __init__(self, socketname, sockchmod, sockchown, logger_object):
        self.ip = socketname
        self.port = socketname

        # XXX this is insecure.  We really should do something like
        # http://developer.apple.com/samplecode/CFLocalServer/listing6.html
        # (see also http://developer.apple.com/technotes/tn2005/tn2083.html#SECUNIXDOMAINSOCKETS)
        # but it would be very inconvenient for the user to need to get all
        # the directory setup right.

        tempname = "%s.%d" % (socketname, os.getpid())

        try:
            os.unlink(tempname)
        except OSError:
            pass

        while 1:
            sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM)
            try:
                sock.bind(tempname)
                os.chmod(tempname, sockchmod)
                try:
                    # hard link
                    os.link(tempname, socketname)
                except OSError:
                    # Lock contention, or stale socket.
                    used = self.checkused(socketname)
                    if used:
                        # cooperate with 'openhttpserver' in supervisord
                        raise socket.error(errno.EADDRINUSE)

                    # Stale socket -- delete, sleep, and try again.
                    msg = "Unlinking stale socket %s\n" % socketname
                    sys.stderr.write(msg)
                    try:
                        os.unlink(socketname)
                    except:
                        pass
                    sock.close()
                    time.sleep(.3)
                    continue
                else:
                    try:
                        os.chown(socketname, sockchown[0], sockchown[1])
                    except OSError as why:
                        if why.args[0] == errno.EPERM:
                            msg = ('Not permitted to chown %s to uid/gid %s; '
                                   'adjust "sockchown" value in config file or '
                                   'on command line to values that the '
                                   'current user (%s) can successfully chown')
                            raise ValueError(msg % (socketname,
                                                    repr(sockchown),
                                                    pwd.getpwuid(
                                                        os.geteuid())[0],
                                                    ),
                                             )
                        else:
                            raise
                    self.prebind(sock, logger_object)
                    break

            finally:
                try:
                    os.unlink(tempname)
                except OSError:
                    pass

        self.server_name = '<unix domain socket>'
        self.postbind()
コード例 #6
0
ファイル: asyncore_25.py プロジェクト: 1T/supervisor
 def create_socket(self, family, type):
     self.family_and_type = family, type
     self.socket = text_socket.text_socket(family, type)
     self.socket.setblocking(0)
     self._fileno = self.socket.fileno()
     self.add_channel()
コード例 #7
0
ファイル: xmlrpc.py プロジェクト: denghp/supervisor
 def connect(self): # pragma: no cover
     self.sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM)
     # we abuse the host parameter as the socketname
     self.sock.connect(self.socketfile)
コード例 #8
0
    def __init__(self, socketname, sockchmod, sockchown, logger_object):
        self.ip = socketname
        self.port = socketname

        # XXX this is insecure.  We really should do something like
        # http://developer.apple.com/samplecode/CFLocalServer/listing6.html
        # (see also http://developer.apple.com/technotes/tn2005/tn2083.html#SECUNIXDOMAINSOCKETS)
        # but it would be very inconvenient for the user to need to get all
        # the directory setup right.

        tempname = "%s.%d" % (socketname, os.getpid())

        try:
            os.unlink(tempname)
        except OSError:
            pass

        while 1:
            sock = text_socket.text_socket(socket.AF_UNIX, socket.SOCK_STREAM)
            try:
                sock.bind(tempname)
                os.chmod(tempname, sockchmod)
                try:
                    # hard link
                    os.link(tempname, socketname)
                except OSError:
                    # Lock contention, or stale socket.
                    used = self.checkused(socketname)
                    if used:
                        # cooperate with 'openhttpserver' in supervisord
                        raise socket.error(errno.EADDRINUSE)

                    # Stale socket -- delete, sleep, and try again.
                    msg = "Unlinking stale socket %s\n" % socketname
                    sys.stderr.write(msg)
                    try:
                        os.unlink(socketname)
                    except:
                        pass
                    sock.close()
                    time.sleep(.3)
                    continue
                else:
                    try:
                        os.chown(socketname, sockchown[0], sockchown[1])
                    except OSError as why:
                        if why.args[0] == errno.EPERM:
                            msg = (
                                'Not permitted to chown %s to uid/gid %s; '
                                'adjust "sockchown" value in config file or '
                                'on command line to values that the '
                                'current user (%s) can successfully chown')
                            raise ValueError(
                                msg % (
                                    socketname,
                                    repr(sockchown),
                                    pwd.getpwuid(os.geteuid())[0],
                                ), )
                        else:
                            raise
                    self.prebind(sock, logger_object)
                    break

            finally:
                try:
                    os.unlink(tempname)
                except OSError:
                    pass

        self.server_name = '<unix domain socket>'
        self.postbind()
コード例 #9
0
ファイル: xmlrpc.py プロジェクト: alexsilva/supervisor
 def connect(self):  # pragma: no cover
     self.sock = text_socket.text_socket(socket.AF_INET if sys.platform.startswith('win') else socket.AF_INET,
                                         socket.SOCK_STREAM)
     # we abuse the host parameter as the socketname
     self.sock.connect(self.socketfile)