forked from pool/python-websockify
Accepting request 528735 from home:michalsrb:branches:fate323880
- add u_Add-support-for-inetd.patch: fate#323880 - add u_Fix-inetd-mode-on-python-2.patch: fate#323880 OBS-URL: https://build.opensuse.org/request/show/528735 OBS-URL: https://build.opensuse.org/package/show/devel:languages:python/python-websockify?expand=0&rev=26
This commit is contained in:
@@ -1,3 +1,9 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Sep 25 08:37:21 UTC 2017 - msrb@suse.com
|
||||
|
||||
- add u_Add-support-for-inetd.patch: fate#323880
|
||||
- add u_Fix-inetd-mode-on-python-2.patch: fate#323880
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri Aug 25 09:42:56 UTC 2017 - tbechtold@suse.com
|
||||
|
||||
|
||||
@@ -25,6 +25,10 @@ License: LGPL-3.0 and MPL-2.0 and BSD-2-Clause and BSD-3-Clause
|
||||
Group: Development/Languages/Python
|
||||
Url: https://github.com/kanaka/websockify
|
||||
Source: https://files.pythonhosted.org/packages/source/w/websockify/websockify-%{version}.tar.gz
|
||||
# PATCH-FEATURE-UPSTREAM u_Add-support-for-inetd.patch fate#323880 msrb@suse.com -- https://github.com/novnc/websockify/pull/293
|
||||
Patch1: u_Add-support-for-inetd.patch
|
||||
# PATCH-FEATURE-UPSTREAM u_Fix-inetd-mode-on-python-2.patch fate#323880 msrb@suse.com -- https://github.com/novnc/websockify/pull/293
|
||||
Patch2: u_Fix-inetd-mode-on-python-2.patch
|
||||
BuildRequires: %{python_module devel}
|
||||
BuildRequires: %{python_module setuptools}
|
||||
BuildRequires: python-rpm-macros
|
||||
@@ -68,6 +72,8 @@ This package contains common files.
|
||||
|
||||
%prep
|
||||
%setup -q -n websockify-%{version}
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
# remove unwanted shebang
|
||||
sed -i '1 { /^#!/ d }' websockify/websocket*.py
|
||||
# drop unneeded executable bit
|
||||
|
||||
173
u_Add-support-for-inetd.patch
Normal file
173
u_Add-support-for-inetd.patch
Normal file
@@ -0,0 +1,173 @@
|
||||
From 1ce74c62c91498f1bf54c030808ba45fb6240aae Mon Sep 17 00:00:00 2001
|
||||
From: Michal Srb <msrb@suse.com>
|
||||
Date: Mon, 31 Jul 2017 15:38:52 +0200
|
||||
Subject: [PATCH] Add support for inetd.
|
||||
|
||||
---
|
||||
websockify/websocketproxy.py | 52 +++++++++++++++++++++++++++---------------
|
||||
websockify/websockifyserver.py | 28 +++++++++++++++--------
|
||||
2 files changed, 52 insertions(+), 28 deletions(-)
|
||||
|
||||
Index: websockify-0.8.0/websockify/websocketproxy.py
|
||||
===================================================================
|
||||
--- websockify-0.8.0.orig/websockify/websocketproxy.py
|
||||
+++ websockify-0.8.0/websockify/websocketproxy.py
|
||||
@@ -285,12 +285,17 @@ class WebSocketProxy(websocket.WebSocket
|
||||
else:
|
||||
dst_string = "%s:%s" % (self.target_host, self.target_port)
|
||||
|
||||
+ if self.listen_fd != None:
|
||||
+ src_string = "socket %d" % self.listen_fd
|
||||
+ else:
|
||||
+ src_string = "%s:%s" % (self.listen_host, self.listen_port)
|
||||
+
|
||||
if self.token_plugin:
|
||||
- msg = " - proxying from %s:%s to targets generated by %s" % (
|
||||
- self.listen_host, self.listen_port, type(self.token_plugin).__name__)
|
||||
+ msg = " - proxying from %s to targets generated by %s" % (
|
||||
+ src_string, type(self.token_plugin).__name__)
|
||||
else:
|
||||
- msg = " - proxying from %s:%s to %s" % (
|
||||
- self.listen_host, self.listen_port, dst_string)
|
||||
+ msg = " - proxying from %s to %s" % (
|
||||
+ src_string, dst_string)
|
||||
|
||||
if self.ssl_target:
|
||||
msg += " (using SSL)"
|
||||
@@ -377,6 +382,8 @@ def websockify_init():
|
||||
help="connect to SSL target as SSL client")
|
||||
parser.add_option("--unix-target",
|
||||
help="connect to unix socket target", metavar="FILE")
|
||||
+ parser.add_option("--inetd",
|
||||
+ help="inetd mode, receive listening socket from stdin", action="store_true")
|
||||
parser.add_option("--web", default=None, metavar="DIR",
|
||||
help="run webserver on same port. Serve files from DIR.")
|
||||
parser.add_option("--wrap-mode", default="exit", metavar="MODE",
|
||||
@@ -447,15 +454,10 @@ def websockify_init():
|
||||
|
||||
del opts.target_cfg
|
||||
|
||||
- # Sanity checks
|
||||
- if len(args) < 2 and not (opts.token_plugin or opts.unix_target):
|
||||
- parser.error("Too few arguments")
|
||||
if sys.argv.count('--'):
|
||||
opts.wrap_cmd = args[1:]
|
||||
else:
|
||||
opts.wrap_cmd = None
|
||||
- if len(args) > 2:
|
||||
- parser.error("Too many arguments")
|
||||
|
||||
if not websocket.ssl and opts.ssl_target:
|
||||
parser.error("SSL target requested and Python SSL module not loaded.");
|
||||
@@ -463,28 +465,42 @@ def websockify_init():
|
||||
if opts.ssl_only and not os.path.exists(opts.cert):
|
||||
parser.error("SSL only and %s not found" % opts.cert)
|
||||
|
||||
- # Parse host:port and convert ports to numbers
|
||||
- if args[0].count(':') > 0:
|
||||
- opts.listen_host, opts.listen_port = args[0].rsplit(':', 1)
|
||||
- opts.listen_host = opts.listen_host.strip('[]')
|
||||
+ if opts.inetd:
|
||||
+ opts.listen_fd = sys.stdin.fileno()
|
||||
else:
|
||||
- opts.listen_host, opts.listen_port = '', args[0]
|
||||
+ if len(args) < 1:
|
||||
+ parser.error("Too few arguments")
|
||||
+ arg = args.pop(0)
|
||||
+ # Parse host:port and convert ports to numbers
|
||||
+ if arg.count(':') > 0:
|
||||
+ opts.listen_host, opts.listen_port = arg.rsplit(':', 1)
|
||||
+ opts.listen_host = opts.listen_host.strip('[]')
|
||||
+ else:
|
||||
+ opts.listen_host, opts.listen_port = '', arg
|
||||
|
||||
- try: opts.listen_port = int(opts.listen_port)
|
||||
- except: parser.error("Error parsing listen port")
|
||||
+ try: opts.listen_port = int(opts.listen_port)
|
||||
+ except: parser.error("Error parsing listen port")
|
||||
+
|
||||
+ del opts.inetd
|
||||
|
||||
if opts.wrap_cmd or opts.unix_target or opts.token_plugin:
|
||||
opts.target_host = None
|
||||
opts.target_port = None
|
||||
else:
|
||||
- if args[1].count(':') > 0:
|
||||
- opts.target_host, opts.target_port = args[1].rsplit(':', 1)
|
||||
+ if len(args) < 1:
|
||||
+ parser.error("Too few arguments")
|
||||
+ arg = args.pop(0)
|
||||
+ if arg.count(':') > 0:
|
||||
+ opts.target_host, opts.target_port = arg.rsplit(':', 1)
|
||||
opts.target_host = opts.target_host.strip('[]')
|
||||
else:
|
||||
parser.error("Error parsing target")
|
||||
try: opts.target_port = int(opts.target_port)
|
||||
except: parser.error("Error parsing target port")
|
||||
|
||||
+ if len(args) > 0 and opts.wrap_cmd == None:
|
||||
+ parser.error("Too many arguments")
|
||||
+
|
||||
if opts.token_plugin is not None:
|
||||
if '.' not in opts.token_plugin:
|
||||
opts.token_plugin = (
|
||||
Index: websockify-0.8.0/websockify/websocket.py
|
||||
===================================================================
|
||||
--- websockify-0.8.0.orig/websockify/websocket.py
|
||||
+++ websockify-0.8.0/websockify/websocket.py
|
||||
@@ -601,8 +601,8 @@ class WebSocketServer(object):
|
||||
class Terminate(Exception):
|
||||
pass
|
||||
|
||||
- def __init__(self, RequestHandlerClass, listen_host='',
|
||||
- listen_port=None, source_is_ipv6=False,
|
||||
+ def __init__(self, RequestHandlerClass, listen_fd=None,
|
||||
+ listen_host='', listen_port=None, source_is_ipv6=False,
|
||||
verbose=False, cert='', key='', ssl_only=None,
|
||||
daemon=False, record='', web='',
|
||||
file_only=False,
|
||||
@@ -613,6 +613,7 @@ class WebSocketServer(object):
|
||||
# settings
|
||||
self.RequestHandlerClass = RequestHandlerClass
|
||||
self.verbose = verbose
|
||||
+ self.listen_fd = listen_fd
|
||||
self.listen_host = listen_host
|
||||
self.listen_port = listen_port
|
||||
self.prefer_ipv6 = source_is_ipv6
|
||||
@@ -658,8 +659,11 @@ class WebSocketServer(object):
|
||||
|
||||
# Show configuration
|
||||
self.msg("WebSocket server settings:")
|
||||
- self.msg(" - Listen on %s:%s",
|
||||
- self.listen_host, self.listen_port)
|
||||
+ if self.listen_fd != None:
|
||||
+ self.msg(" - Listen on fd %d", self.listen_fd)
|
||||
+ else:
|
||||
+ self.msg(" - Listen on %s:%s",
|
||||
+ self.listen_host, self.listen_port)
|
||||
self.msg(" - Flash security policy server")
|
||||
if self.web:
|
||||
if self.file_only:
|
||||
@@ -965,12 +969,16 @@ class WebSocketServer(object):
|
||||
is a WebSockets client then call new_websocket_client() method (which must
|
||||
be overridden) for each new client connection.
|
||||
"""
|
||||
- lsock = self.socket(self.listen_host, self.listen_port, False,
|
||||
- self.prefer_ipv6,
|
||||
- tcp_keepalive=self.tcp_keepalive,
|
||||
- tcp_keepcnt=self.tcp_keepcnt,
|
||||
- tcp_keepidle=self.tcp_keepidle,
|
||||
- tcp_keepintvl=self.tcp_keepintvl)
|
||||
+
|
||||
+ if self.listen_fd != None:
|
||||
+ lsock = socket.fromfd(self.listen_fd, socket.AF_INET, socket.SOCK_STREAM)
|
||||
+ else:
|
||||
+ lsock = self.socket(self.listen_host, self.listen_port, False,
|
||||
+ self.prefer_ipv6,
|
||||
+ tcp_keepalive=self.tcp_keepalive,
|
||||
+ tcp_keepcnt=self.tcp_keepcnt,
|
||||
+ tcp_keepidle=self.tcp_keepidle,
|
||||
+ tcp_keepintvl=self.tcp_keepintvl)
|
||||
|
||||
if self.daemon:
|
||||
keepfd = self.get_log_fd()
|
||||
27
u_Fix-inetd-mode-on-python-2.patch
Normal file
27
u_Fix-inetd-mode-on-python-2.patch
Normal file
@@ -0,0 +1,27 @@
|
||||
From 7b382d043e9b85fab2fcddf46a54d19bbd4d601c Mon Sep 17 00:00:00 2001
|
||||
From: Michal Srb <msrb@suse.com>
|
||||
Date: Tue, 1 Aug 2017 15:35:34 +0200
|
||||
Subject: [PATCH] Fix inetd mode on Python 2.
|
||||
|
||||
In python 2 the ssl.wrap_socket doesn't work on sockets created using socket.fromfd.
|
||||
The workaround is to wrap the socket returned by socket.fromfd into another socket
|
||||
object using the private _sock constructor parameter.
|
||||
---
|
||||
websockify/websockifyserver.py | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
Index: websockify-0.8.0/websockify/websocket.py
|
||||
===================================================================
|
||||
--- websockify-0.8.0.orig/websockify/websocket.py
|
||||
+++ websockify-0.8.0/websockify/websocket.py
|
||||
@@ -972,6 +972,10 @@ class WebSocketServer(object):
|
||||
|
||||
if self.listen_fd != None:
|
||||
lsock = socket.fromfd(self.listen_fd, socket.AF_INET, socket.SOCK_STREAM)
|
||||
+ if sys.hexversion < 0x3000000:
|
||||
+ # For python 2 we have to wrap the "raw" socket into a socket object,
|
||||
+ # otherwise ssl wrap_socket doesn't work.
|
||||
+ lsock = socket.socket(_sock=lsock)
|
||||
else:
|
||||
lsock = self.socket(self.listen_host, self.listen_port, False,
|
||||
self.prefer_ipv6,
|
||||
Reference in New Issue
Block a user