diff options
author | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-10 17:56:44 +0000 |
---|---|---|
committer | davidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-10 17:56:44 +0000 |
commit | 46b5cd9c68e6165d13608b41b5fafcfd93dbbac7 (patch) | |
tree | f906fb507286ebc033be52cdab407602e5d2a651 /net/tools/testserver | |
parent | f8ef310be3f196ae5df2ed39e8b1057c5dddf782 (diff) | |
download | chromium_src-46b5cd9c68e6165d13608b41b5fafcfd93dbbac7.zip chromium_src-46b5cd9c68e6165d13608b41b5fafcfd93dbbac7.tar.gz chromium_src-46b5cd9c68e6165d13608b41b5fafcfd93dbbac7.tar.bz2 |
Update tlslite to 0.4.6.
This lets us get drop many of our patches. It also adds NPN support for free.
On the downside, it introduces a handful of new bugs that need additional
patches.
BUG=115301
Review URL: https://codereview.chromium.org/210323002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263026 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/tools/testserver')
-rwxr-xr-x | net/tools/testserver/testserver.py | 44 | ||||
-rw-r--r-- | net/tools/testserver/testserver_base.py | 8 |
2 files changed, 40 insertions, 12 deletions
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py index 13aafcd..92aee0d 100755 --- a/net/tools/testserver/testserver.py +++ b/net/tools/testserver/testserver.py @@ -39,24 +39,37 @@ import zlib BASE_DIR = os.path.dirname(os.path.abspath(__file__)) ROOT_DIR = os.path.dirname(os.path.dirname(os.path.dirname(BASE_DIR))) -import echo_message -import testserver_base +# Temporary hack to deal with tlslite 0.3.8 -> 0.4.6 upgrade. +# +# TODO(davidben): Remove this when it has cycled through all the bots and +# developer checkouts or when http://crbug.com/356276 is resolved. +try: + os.remove(os.path.join(ROOT_DIR, 'third_party', 'tlslite', + 'tlslite', 'utils', 'hmac.pyc')) +except Exception: + pass # Append at the end of sys.path, it's fine to use the system library. sys.path.append(os.path.join(ROOT_DIR, 'third_party', 'pyftpdlib', 'src')) -sys.path.append(os.path.join(ROOT_DIR, 'third_party', 'tlslite')) -import pyftpdlib.ftpserver -import tlslite -import tlslite.api -# Insert at the beginning of the path, we want this to be used +# Insert at the beginning of the path, we want to use our copies of the library # unconditionally. sys.path.insert(0, os.path.join(ROOT_DIR, 'third_party', 'pywebsocket', 'src')) +sys.path.insert(0, os.path.join(ROOT_DIR, 'third_party', 'tlslite')) + import mod_pywebsocket.standalone from mod_pywebsocket.standalone import WebSocketServer # import manually mod_pywebsocket.standalone.ssl = ssl +import pyftpdlib.ftpserver + +import tlslite +import tlslite.api + +import echo_message +import testserver_base + SERVER_HTTP = 0 SERVER_FTP = 1 SERVER_TCP_ECHO = 2 @@ -142,7 +155,8 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn, ssl_client_auth, ssl_client_cas, ssl_bulk_ciphers, record_resume_info, tls_intolerant, signed_cert_timestamps, fallback_scsv_enabled, ocsp_response): - self.cert_chain = tlslite.api.X509CertChain().parseChain(pem_cert_and_key) + self.cert_chain = tlslite.api.X509CertChain() + self.cert_chain.parsePemList(pem_cert_and_key) # Force using only python implementation - otherwise behavior is different # depending on whether m2crypto Python module is present (error is thrown # when it is). m2crypto uses a C (based on OpenSSL) implementation under @@ -152,7 +166,10 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn, implementations=['python']) self.ssl_client_auth = ssl_client_auth self.ssl_client_cas = [] - self.tls_intolerant = tls_intolerant + if tls_intolerant == 0: + self.tls_intolerant = None + else: + self.tls_intolerant = (3, tls_intolerant) self.signed_cert_timestamps = signed_cert_timestamps self.fallback_scsv_enabled = fallback_scsv_enabled self.ocsp_response = ocsp_response @@ -1436,11 +1453,14 @@ class TestPageHandler(testserver_base.BasePageHandler): self.send_header('Content-Type', 'text/plain') self.end_headers() try: - for (action, sessionID) in self.server.session_cache.log: - self.wfile.write('%s\t%s\n' % (action, sessionID.encode('hex'))) + log = self.server.session_cache.log except AttributeError: self.wfile.write('Pass --https-record-resume in order to use' + ' this request') + return True + + for (action, sessionID) in log: + self.wfile.write('%s\t%s\n' % (action, bytes(sessionID).encode('hex'))) return True def SSLManySmallRecords(self): @@ -1470,7 +1490,7 @@ class TestPageHandler(testserver_base.BasePageHandler): self.send_response(200) self.send_header('Content-Type', 'text/plain') self.end_headers() - channel_id = self.server.tlsConnection.channel_id.tostring() + channel_id = bytes(self.server.tlsConnection.channel_id) self.wfile.write(hashlib.sha256(channel_id).digest().encode('base64')) return True diff --git a/net/tools/testserver/testserver_base.py b/net/tools/testserver/testserver_base.py index 455ca5c..0d3f65f 100644 --- a/net/tools/testserver/testserver_base.py +++ b/net/tools/testserver/testserver_base.py @@ -14,6 +14,8 @@ import struct import sys import warnings +import tlslite.errors + # Ignore deprecation warnings, they make our output more cluttered. warnings.filterwarnings("ignore", category=DeprecationWarning) @@ -71,6 +73,9 @@ class BrokenPipeHandlerMixIn: def handle_error(self, request, client_address): value = sys.exc_info()[1] + if isinstance(value, tlslite.errors.TLSClosedConnectionError): + print "testserver.py: Closed connection" + return if isinstance(value, socket.error): err = value.args[0] if sys.platform in ('win32', 'cygwin'): @@ -81,6 +86,9 @@ class BrokenPipeHandlerMixIn: if err == pipe_err: print "testserver.py: Broken pipe" return + if err == errno.ECONNRESET: + print "testserver.py: Connection reset by peer" + return SocketServer.BaseServer.handle_error(self, request, client_address) |