Author: asterix
Date: 2007-12-27 00:59:54 +0100 (Thu, 27 Dec 2007)
New Revision: 9194
Modified:
trunk/src/common/connection.py
trunk/src/config.py
trunk/src/gajim.py
Log:
don't propose to add certificate to cacerts.pem file if it's useless, and don't add it if it is already in. fixes #720
Modified: trunk/src/common/connection.py
===================================================================
--- trunk/src/common/connection.py 2007-12-26 21:44:37 UTC (rev 9193)
+++ trunk/src/common/connection.py 2007-12-26 23:59:54 UTC (rev 9194)
@@ -318,7 +318,7 @@
ssl_fingerprint = \
self.connection.Connection.ssl_fingerprint_sha1
self.dispatch('NEW_ACC_CONNECTED', (conf, is_form, ssl_msg,
- ssl_cert, ssl_fingerprint))
+ errnum, ssl_cert, ssl_fingerprint))
self.connection.UnregisterDisconnectHandler(
self._on_new_account)
self.disconnect(on_purpose=True)
@@ -589,7 +589,7 @@
text += _('\nSSL Error: %s') % ssl_error[errnum]
else:
text += _('\nUnknown SSL error: %d') % errnum
- self.dispatch('SSL_ERROR', (text, con.Connection.ssl_cert_pem,
+ self.dispatch('SSL_ERROR', (text, errnum, con.Connection.ssl_cert_pem,
con.Connection.ssl_fingerprint_sha1))
return True
if hasattr(con.Connection, 'ssl_fingerprint_sha1'):
Modified: trunk/src/config.py
===================================================================
--- trunk/src/config.py 2007-12-26 21:44:37 UTC (rev 9193)
+++ trunk/src/config.py 2007-12-26 23:59:54 UTC (rev 9194)
@@ -3225,12 +3225,22 @@
if checked:
hostname = gajim.connections[self.account].new_account_info[
'hostname']
- f = open(gajim.MY_CACERTS, 'a')
- f.write(hostname + '\n')
- f.write(self.ssl_cert + '\n\n')
- f.close()
- gajim.connections[self.account].new_account_info[
- 'ssl_fingerprint_sha1'] = self.ssl_fingerprint
+ # Check if cert is already in file
+ certs = ''
+ if os.path.isfile(gajim.MY_CACERTS):
+ f = open(gajim.MY_CACERTS)
+ certs = f.read()
+ f.close()
+ if self.ssl_cert in certs:
+ dialogs.ErrorDialog(_('Certificate Already in File'),
+ _('This certificate is already in file %s, so it\'s not added again.') % gajim.MY_CACERTS)
+ else:
+ f = open(gajim.MY_CACERTS, 'a')
+ f.write(hostname + '\n')
+ f.write(self.ssl_cert + '\n\n')
+ f.close()
+ gajim.connections[self.account].new_account_info[
+ 'ssl_fingerprint_sha1'] = self.ssl_fingerprint
self.notebook.set_current_page(4) # show fom page
elif cur_page == 4:
if self.is_form:
@@ -3271,7 +3281,7 @@
self.progressbar.pulse()
return True # loop forever
- def new_acc_connected(self, form, is_form, ssl_msg, ssl_cert,
+ def new_acc_connected(self, form, is_form, ssl_msg, ssl_err, ssl_cert,
ssl_fingerprint):
'''connection to server succeded, present the form to the user.'''
if self.update_progressbar_timeout_id is not None:
@@ -3296,8 +3306,12 @@
'SSL Error: %s\n'
'Do you still want to connect to this server?') % (hostname,
ssl_msg))
- text = _('Add this certificate to the list of trusted certificates.\nSHA1 fingerprint of the certificate:\n%s') % ssl_fingerprint
- self.xml.get_widget('ssl_checkbutton').set_label(text)
+ if ssl_err in (18, 27):
+ text = _('Add this certificate to the list of trusted certificates.\nSHA1 fingerprint of the certificate:\n%s') % ssl_fingerprint
+ self.xml.get_widget('ssl_checkbutton').set_label(text)
+ else:
+ self.xml.get_widget('ssl_checkbutton').set_no_show_all(True)
+ self.xml.get_widget('ssl_checkbutton').hide()
self.notebook.set_current_page(3) # show SSL page
else:
self.notebook.set_current_page(4) # show form page
Modified: trunk/src/gajim.py
===================================================================
--- trunk/src/gajim.py 2007-12-26 21:44:37 UTC (rev 9193)
+++ trunk/src/gajim.py 2007-12-26 23:59:54 UTC (rev 9194)
@@ -1019,11 +1019,11 @@
return
def handle_event_new_acc_connected(self, account, array):
- #('NEW_ACC_CONNECTED', account, (infos, is_form, ssl_msg, ssl_cert,
- # ssl_fingerprint))
+ #('NEW_ACC_CONNECTED', account, (infos, is_form, ssl_msg, ssl_err,
+ # ssl_cert, ssl_fingerprint))
if self.instances.has_key('account_creation_wizard'):
self.instances['account_creation_wizard'].new_acc_connected(array[0],
- array[1], array[2], array[3], array[4])
+ array[1], array[2], array[3], array[4], array[5])
def handle_event_new_acc_not_connected(self, account, array):
#('NEW_ACC_NOT_CONNECTED', account, (reason))
@@ -2191,25 +2191,39 @@
instance.unique_room_id_error(data[0])
def handle_event_ssl_error(self, account, data):
- # ('SSL_ERROR', account, (text, cert, sha1_fingerprint))
+ # ('SSL_ERROR', account, (text, errnum, cert, sha1_fingerprint))
server = gajim.config.get_per('accounts', account, 'hostname')
- def on_ok(is_checked):
+ def on_ok(is_checked=False):
if is_checked:
- f = open(gajim.MY_CACERTS, 'a')
- f.write(server + '\n')
- f.write(data[1] + '\n\n')
- f.close()
+ # Check if cert is already in file
+ certs = ''
+ if os.path.isfile(gajim.MY_CACERTS):
+ f = open(gajim.MY_CACERTS)
+ certs = f.read()
+ f.close()
+ if data[2] in certs:
+ dialogs.ErrorDialog(_('Certificate Already in File'),
+ _('This certificate is already in file %s, so it\'s not added again.') % gajim.MY_CACERTS)
+ else:
+ f = open(gajim.MY_CACERTS, 'a')
+ f.write(server + '\n')
+ f.write(data[2] + '\n\n')
+ f.close()
gajim.config.set_per('accounts', account, 'ssl_fingerprint_sha1',
- data[2])
+ data[3])
gajim.connections[account].ssl_certificate_accepted()
def on_cancel():
gajim.connections[account].disconnect(on_purpose=True)
self.handle_event_status(account, 'offline')
pritext = _('Error verifying SSL certificate')
sectext = _('There was an error verifying the SSL certificate of your jabber server: %(error)s\nDo you still want to connect to this server?') % {'error': data[0]}
- checktext = _('Add this certificate to the list of trusted certificates.\nSHA1 fingerprint of the certificate:\n%s') % data[2]
- dialogs.ConfirmationDialogCheck(pritext, sectext, checktext,
- on_response_ok=on_ok, on_response_cancel=on_cancel)
+ if data[1] in (18, 27):
+ checktext = _('Add this certificate to the list of trusted certificates.\nSHA1 fingerprint of the certificate:\n%s') % data[3]
+ dialogs.ConfirmationDialogCheck(pritext, sectext, checktext,
+ on_response_ok=on_ok, on_response_cancel=on_cancel)
+ else:
+ dialogs.ConfirmationDialog(pritext, sectext,
+ on_response_ok=on_ok, on_response_cancel=on_cancel)
def handle_event_fingerprint_error(self, account, data):
# ('FINGERPRINT_ERROR', account, (fingerprint,))