diff options
| author | Kali Kaneko <kali@leap.se> | 2013-06-23 23:53:13 +0900 | 
|---|---|---|
| committer | Kali Kaneko <kali@leap.se> | 2013-06-23 23:53:13 +0900 | 
| commit | 53668de6f4ced844b10fc34fbc5ba77b00d54825 (patch) | |
| tree | 3d6be7573fcef2538aa59101250aff28a4921dbd | |
| parent | b777dbfd4df7f4f0e4c2596fcc4000c2aba05a08 (diff) | |
| parent | 440f2036e36985e9536644b28af0e62cea8704eb (diff) | |
Merge remote-tracking branch 'chiiph/bug/disable_bad_keyring' into develop
| -rw-r--r-- | changes/bug-2960_disable_keyring | 2 | ||||
| -rw-r--r-- | src/leap/gui/login.py | 4 | ||||
| -rw-r--r-- | src/leap/gui/mainwindow.py | 7 | ||||
| -rw-r--r-- | src/leap/gui/wizard.py | 8 | ||||
| -rw-r--r-- | src/leap/util/keyring_helpers.py | 34 | 
5 files changed, 48 insertions, 7 deletions
| diff --git a/changes/bug-2960_disable_keyring b/changes/bug-2960_disable_keyring new file mode 100644 index 00000000..d1787c3c --- /dev/null +++ b/changes/bug-2960_disable_keyring @@ -0,0 +1,2 @@ +  o Only use the Keyring with it's using a known good backend. Closes +    #2960
\ No newline at end of file diff --git a/src/leap/gui/login.py b/src/leap/gui/login.py index c367b2fb..8fc6ec24 100644 --- a/src/leap/gui/login.py +++ b/src/leap/gui/login.py @@ -24,6 +24,8 @@ import keyring  from PySide import QtCore, QtGui  from ui_login import Ui_LoginWidget +from leap.util.keyring_helpers import has_keyring +  logger = logging.getLogger(__name__) @@ -58,7 +60,7 @@ class LoginWidget(QtGui.QWidget):          self.ui.chkRemember.stateChanged.connect(              self._remember_state_changed) -        self.ui.chkRemember.setEnabled(keyring.get_keyring() is not None) +        self.ui.chkRemember.setEnabled(has_keyring())          self.ui.lnPassword.setEchoMode(QtGui.QLineEdit.Password) diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py index 2ed01917..9dc1e006 100644 --- a/src/leap/gui/mainwindow.py +++ b/src/leap/gui/mainwindow.py @@ -55,6 +55,7 @@ from leap.services.eip.vpnlaunchers import (VPNLauncherException,                                              EIPNoPkexecAvailable,                                              EIPNoPolkitAuthAgentAvailable)  from leap.util import __version__ as VERSION +from leap.util.keyring_helpers import has_keyring  from leap.services.mail.smtpconfig import SMTPConfig @@ -435,7 +436,7 @@ class MainWindow(QtGui.QMainWindow):                  self._login_widget.set_user(possible_username)              if possible_password is not None:                  self._login_widget.set_password(possible_password) -                self._login_widget.set_remember(True) +                self._login_widget.set_remember(has_keyring())                  self._login()              self._wizard = None              self._settings.set_properprovider(True) @@ -454,7 +455,7 @@ class MainWindow(QtGui.QMainWindow):                  logger.error('Username@provider malformed. %r' % (e, ))                  saved_user = None -            if saved_user is not None: +            if saved_user is not None and has_keyring():                  # fill the username                  self._login_widget.set_user(username) @@ -740,7 +741,7 @@ class MainWindow(QtGui.QMainWindow):          self._login_widget.set_status(self.tr("Logging in..."), error=False)          self._login_widget.set_enabled(False) -        if self._login_widget.get_remember(): +        if self._login_widget.get_remember() and has_keyring():              # in the keyring and in the settings              # we store the value 'usename@provider'              username_domain = (username + '@' + provider).encode("utf8") diff --git a/src/leap/gui/wizard.py b/src/leap/gui/wizard.py index 066a7db3..34eba84c 100644 --- a/src/leap/gui/wizard.py +++ b/src/leap/gui/wizard.py @@ -31,6 +31,7 @@ from leap.config.providerconfig import ProviderConfig  from leap.crypto.srpregister import SRPRegister  from leap.util.privilege_policies import is_missing_policy_permissions  from leap.util.request_helpers import get_content +from leap.util.keyring_helpers import has_keyring  from leap.services.eip.providerbootstrapper import ProviderBootstrapper  from leap.services import get_available @@ -170,7 +171,7 @@ class Wizard(QtGui.QWizard):          return self._password      def get_remember(self): -        return self.ui.chkRemember.isChecked() +        return has_keyring() and self.ui.chkRemember.isChecked()      def get_services(self):          return self._selected_services @@ -286,8 +287,9 @@ class Wizard(QtGui.QWizard):              self._set_registration_fields_visibility(False)              # Allow the user to remember his password -            self.ui.chkRemember.setVisible(True) -            self.ui.chkRemember.setEnabled(True) +            if has_keyring(): +                self.ui.chkRemember.setVisible(True) +                self.ui.chkRemember.setEnabled(True)              self.page(self.REGISTER_USER_PAGE).set_completed()              self.button(QtGui.QWizard.BackButton).setEnabled(False) diff --git a/src/leap/util/keyring_helpers.py b/src/leap/util/keyring_helpers.py new file mode 100644 index 00000000..b3dd0175 --- /dev/null +++ b/src/leap/util/keyring_helpers.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# privilege_policies.py +# Copyright (C) 2013 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. + +""" + +""" + +import keyring + +OBSOLETE_KEYRINGS = [ +    keyring.backends.file.EncryptedKeyring, +    keyring.backends.file.PlaintextKeyring +] + +def has_keyring(): +    """ + +    """ +    kr = keyring.get_keyring() +    return kr is not None and kr.__class__ not in OBSOLETE_KEYRINGS | 
