From 2db77cc25004cdfd15de17e5a8df787921586d23 Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Wed, 16 Jul 2014 15:46:18 +0200 Subject: [PATCH] Fix for tornado 4.0 --- butterfly.server.py | 3 ++- butterfly/__init__.py | 2 +- butterfly/routes.py | 12 +++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/butterfly.server.py b/butterfly.server.py index 2778048..8ac4e88 100755 --- a/butterfly.server.py +++ b/butterfly.server.py @@ -222,7 +222,8 @@ else: from butterfly import application -http_server = tornado_systemd.SystemdHTTPServer(application, ssl_options=ssl_opts) +http_server = tornado_systemd.SystemdHTTPServer( + application, ssl_options=ssl_opts) http_server.listen(port, address=host) url = "http%s://%s:%d/*" % ( "s" if not tornado.options.options.unsecure else "", host, port) diff --git a/butterfly/__init__.py b/butterfly/__init__.py index 661e742..5b5de48 100644 --- a/butterfly/__init__.py +++ b/butterfly/__init__.py @@ -14,7 +14,7 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see . -__version__ = '1.5.3' +__version__ = '1.5.4' import os diff --git a/butterfly/routes.py b/butterfly/routes.py index 95a4c18..9380873 100644 --- a/butterfly/routes.py +++ b/butterfly/routes.py @@ -176,7 +176,11 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler): # or login is explicitly turned off if ( not tornado.options.options.unsecure and - tornado.options.options.login): + tornado.options.options.login and not ( + self.socket.local and + self.caller == self.callee and + server == self.callee + )): # User is authed by ssl, setting groups try: os.initgroups(self.callee.name, self.callee.gid) @@ -241,6 +245,7 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler): self.fd, self.shell_handler, ioloop.READ | ioloop.ERROR) def open(self, user, path): + self.fd = None if self.request.headers['Origin'] not in ( 'http://%s' % self.request.headers['Host'], 'https://%s' % self.request.headers['Host']): @@ -275,7 +280,7 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler): if not self.callee and not self.user and self.socket.local: self.callee = self.caller else: - user = utils.parse_cert(self.request.get_ssl_certificate()) + user = utils.parse_cert(self.stream.socket.getpeercert()) assert user, 'No user in certificate' self.user = user try: @@ -323,7 +328,8 @@ class TermWebSocket(Route, tornado.websocket.WebSocketHandler): self.close() def on_close(self): - self.log.info('Closing fd %d' % self.fd) + if self.fd is not None: + self.log.info('Closing fd %d' % self.fd) if getattr(self, 'pid', 0) == 0: self.log.info('pid is 0')