mirror of
https://github.com/openvswitch/ovs
synced 2025-10-19 14:37:21 +00:00
python: Don't raise an Exception on failure to connect via SSL.
With other socket types, trying to connect and failing will return
an error code, but if an SSL Stream is used, then when
check_connection_completion(sock) is called, SSL will raise an
exception that doesn't derive from socket.error which is handled.
This adds handling for SSL.SysCallError which has the same
arguments as socket.error (errno, string). A future enhancement
could be to go through SSLStream class and implement error
checking for all of the possible exceptions similar to how
lib/stream-ssl.c's interpret_ssl_error() works across the various
methods that are implemented.
Fixes: d90ed7d65b
("python: Add SSL support to the python ovs client library")
Signed-off-by: Terry Wilson <twilson@redhat.com>
Acked-by: Thomas Neuman <thomas.neuman@nutanix.com>
Acked-by: Mark Michelson <mmichels@redhat.com>
Signed-off-by: Ilya Maximets <i.maximets@ovn.org>
This commit is contained in:
committed by
Ilya Maximets
parent
1f66e1a861
commit
08ec09725a
@@ -132,6 +132,10 @@ class Stream(object):
|
||||
IPTOS_PREC_INTERNETCONTROL = 0xc0
|
||||
DSCP_DEFAULT = IPTOS_PREC_INTERNETCONTROL >> 2
|
||||
|
||||
@staticmethod
|
||||
def check_connection_completion(sock):
|
||||
return ovs.socket_util.check_connection_completion(sock)
|
||||
|
||||
@staticmethod
|
||||
def open(name, dscp=DSCP_DEFAULT):
|
||||
"""Attempts to connect a stream to a remote peer. 'name' is a
|
||||
@@ -189,7 +193,7 @@ class Stream(object):
|
||||
if error:
|
||||
return error, None
|
||||
else:
|
||||
err = ovs.socket_util.check_connection_completion(sock)
|
||||
err = cls.check_connection_completion(sock)
|
||||
if err == errno.EAGAIN or err == errno.EINPROGRESS:
|
||||
status = errno.EAGAIN
|
||||
err = 0
|
||||
@@ -261,7 +265,7 @@ class Stream(object):
|
||||
|
||||
def __scs_connecting(self):
|
||||
if self.socket is not None:
|
||||
retval = ovs.socket_util.check_connection_completion(self.socket)
|
||||
retval = self.check_connection_completion(self.socket)
|
||||
assert retval != errno.EINPROGRESS
|
||||
elif sys.platform == 'win32':
|
||||
if self.retry_connect:
|
||||
@@ -761,6 +765,13 @@ Stream.register_method("tcp", TCPStream)
|
||||
|
||||
|
||||
class SSLStream(Stream):
|
||||
@staticmethod
|
||||
def check_connection_completion(sock):
|
||||
try:
|
||||
return Stream.check_connection_completion(sock)
|
||||
except SSL.SysCallError as e:
|
||||
return ovs.socket_util.get_exception_errno(e)
|
||||
|
||||
@staticmethod
|
||||
def needs_probes():
|
||||
return True
|
||||
|
Reference in New Issue
Block a user