Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits:
3ca9eeb3 by Philipp Hörist at 2022-10-16T20:23:18+02:00
fix: Client: Don’t override modified certification errors
When cert errors where detected the certificate-set signal did overwrite
the certficition errors which were already modified by accept_certificate()
This simplifies the code and removes the certificate-set signal
- - - - -
4 changed files:
- nbxmpp/client.py
- nbxmpp/connection.py
- nbxmpp/tcp.py
- nbxmpp/websocket.py
Changes:
=====================================
nbxmpp/client.py
=====================================
@@ -232,6 +232,8 @@ class Client(Observable):
@property
def peer_certificate(self):
+ if self._con is not None:
+ return self._con.peer_certificate
return self._peer_certificate, self._peer_certificate_errors
@property
@@ -360,6 +362,8 @@ class Client(Observable):
return
self.state = StreamState.CONNECTING
+ self._peer_certificate = None
+ self._peer_certificate_errors = None
self._reset_error()
self._con = self._get_connection(self._log_context,
@@ -375,7 +379,6 @@ class Client(Observable):
self._con.subscribe('data-sent', self._on_data_sent)
self._con.subscribe('data-received', self._on_data_received)
self._con.subscribe('bad-certificate', self._on_bad_certificate)
- self._con.subscribe('certificate-set', self._on_certificate_set)
self._con.connect()
def _get_connection(self, *args):
@@ -537,12 +540,9 @@ class Client(Observable):
connection.peer_certificate
self._set_error(StreamError.BAD_CERTIFICATE, 'bad certificate')
- def _on_certificate_set(self, connection, _signal_name):
- self._peer_certificate, self._peer_certificate_errors = \
- connection.peer_certificate
-
def accept_certificate(self):
self._log.info('Certificate accepted')
+ assert self._peer_certificate is not None
self._accepted_certificates.append(self._peer_certificate)
self._connect()
=====================================
nbxmpp/connection.py
=====================================
@@ -37,7 +37,6 @@ class Connection(Observable):
data-sent
data-received
bad-certificate
- certificate-set
connection-failed
disconnected
'''
=====================================
nbxmpp/tcp.py
=====================================
@@ -125,11 +125,15 @@ class TCPConnection(Connection):
return False
def _on_certificate_set(self, connection, _param):
- self._peer_certificate = connection.props.peer_certificate
- self._peer_certificate_errors = convert_tls_error_flags(
- connection.props.peer_certificate_errors)
+ if self._peer_certificate is None:
+ # If the cert has errors _check_certificate() will set the cert and
+ # _accept_certificate() will modify the error set. If this is the
+ # case _accept_certificate() modifies the errors.
+ self._peer_certificate = connection.props.peer_certificate
+ self._peer_certificate_errors = convert_tls_error_flags(
+ connection.props.peer_certificate_errors)
+
self._tls_handshake_in_progress = False
- self.notify('certificate-set')
def _on_connect_finished(self, client, result, _user_data):
try:
=====================================
nbxmpp/websocket.py
=====================================
@@ -99,8 +99,6 @@ class WebsocketConnection(Connection):
self._peer_certificate = certificate
self._peer_certificate_errors = convert_tls_error_flags(errors)
- self.notify('certificate-set')
-
if self._accept_certificate():
return
View it on GitLab:
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/3ca9eeb30cd24f99d3e4166b906b09f679993a2a
--
View it on GitLab:
https://dev.gajim.org/gajim/python-nbxmpp/-/commit/3ca9eeb30cd24f99d3e4166b906b09f679993a2a
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits