Hello community,

here is the log from the commit of package python-websockify for 
openSUSE:Factory checked in at 2017-09-26 21:16:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-websockify (Old)
 and      /work/SRC/openSUSE:Factory/.python-websockify.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-websockify"

Tue Sep 26 21:16:24 2017 rev:15 rq:528740 version:0.8.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-websockify/python-websockify.changes      
2017-08-29 11:44:16.666656187 +0200
+++ /work/SRC/openSUSE:Factory/.python-websockify.new/python-websockify.changes 
2017-09-26 21:17:37.643361694 +0200
@@ -1,0 +2,6 @@
+Mon Sep 25 08:37:21 UTC 2017 - m...@suse.com
+
+- add u_Add-support-for-inetd.patch: fate#323880
+- add u_Fix-inetd-mode-on-python-2.patch: fate#323880
+
+-------------------------------------------------------------------

New:
----
  u_Add-support-for-inetd.patch
  u_Fix-inetd-mode-on-python-2.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-websockify.spec ++++++
--- /var/tmp/diff_new_pack.ATox3z/_old  2017-09-26 21:17:38.139291971 +0200
+++ /var/tmp/diff_new_pack.ATox3z/_new  2017-09-26 21:17:38.143291409 +0200
@@ -25,6 +25,10 @@
 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 
m...@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 
m...@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 @@
 
 %prep
 %setup -q -n websockify-%{version}
+%patch1 -p1
+%patch2 -p1
 # remove unwanted shebang
 sed -i '1 { /^#!/ d }' websockify/websocket*.py
 # drop unneeded executable bit

++++++ u_Add-support-for-inetd.patch ++++++
>From 1ce74c62c91498f1bf54c030808ba45fb6240aae Mon Sep 17 00:00:00 2001
From: Michal Srb <m...@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()
++++++ u_Fix-inetd-mode-on-python-2.patch ++++++
>From 7b382d043e9b85fab2fcddf46a54d19bbd4d601c Mon Sep 17 00:00:00 2001
From: Michal Srb <m...@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,

Reply via email to