Hello community, here is the log from the commit of package python-keyring for openSUSE:Factory checked in at 2015-12-21 12:03:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-keyring (Old) and /work/SRC/openSUSE:Factory/.python-keyring.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-keyring" Changes: -------- --- /work/SRC/openSUSE:Factory/python-keyring/python-keyring.changes 2015-09-24 07:16:16.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-keyring.new/python-keyring.changes 2015-12-21 12:03:30.000000000 +0100 @@ -1,0 +2,28 @@ +Fri Dec 11 14:45:37 UTC 2015 - michael@stroeder.com + +- Update to version 5.7 +- Removed CONTRIBUTORS.txt because not available in upstream + source anymore. +- dropped patches keyring-import-gi.patch and keyring-gnome-3.18.patch + because they were obsoleted by fixes in upstream source + +5.7 +--- +* Issue #177: Resolve default keyring name on Gnome using the API. +* Issue #145: Add workaround for password exposure through + process status for most passwords containing simple + characters. +5.6 +--- +* Allow keyring to be invoked from command-line with + ``python -m keyring``. +5.5.1 +----- +* Issue #156: Fixed test failures in ``pyfs`` keyring related to + 0.5 release. +5.5 +--- +* Pull Request #176: Use recommended mechanism for checking + GnomeKeyring version. + +------------------------------------------------------------------- Old: ---- keyring-5.4.tar.gz keyring-gnome-3.18.patch keyring-import-gi.patch New: ---- keyring-5.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-keyring.spec ++++++ --- /var/tmp/diff_new_pack.sMTCj3/_old 2015-12-21 12:03:31.000000000 +0100 +++ /var/tmp/diff_new_pack.sMTCj3/_new 2015-12-21 12:03:31.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package python-keyring # -# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,16 +17,13 @@ Name: python-keyring -Version: 5.4 +Version: 5.7 Release: 0 Url: https://bitbucket.org/kang/python-keyring-lib Summary: Store and access your passwords safely License: Python-2.0 and MIT Group: Development/Languages/Python Source: https://pypi.python.org/packages/source/k/keyring/keyring-%{version}.tar.gz -# PATCH-FIX-UPSTREAM keyring-gnome-3.18.patch dimstar@opensuse.org -- Silence a warning when run in GNOME 3.18: gi requires versioned imports now. -Patch0: keyring-gnome-3.18.patch -Patch1: keyring-import-gi.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: python-devel BuildRequires: python-setuptools @@ -57,8 +54,6 @@ %prep %setup -q -n keyring-%{version} -%patch0 -p1 -%patch1 -p1 # For rpmlint warning: remove shebang from python library: sed -i '/^#!/d' keyring/cli.py keyring/backends/_win_crypto.py @@ -88,7 +83,7 @@ %files %defattr(-,root,root) -%doc CONTRIBUTORS.txt README.rst CHANGES.rst +%doc README.rst CHANGES.rst %ghost %{_sysconfdir}/alternatives/keyring %{_bindir}/keyring %{_bindir}/keyring-%{py_ver} ++++++ keyring-5.4.tar.gz -> keyring-5.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/.hgtags new/keyring-5.7/.hgtags --- old/keyring-5.4/.hgtags 2015-08-07 11:40:17.000000000 +0200 +++ new/keyring-5.7/.hgtags 2015-12-07 04:33:32.000000000 +0100 @@ -78,3 +78,7 @@ 4059d5c6c76cb43d9c79dd2f5b849a57ac33bcd5 5.2.1 ec350f6cd8328edc404e6cbfd489b657cf7a2dea 5.3 6d6aa6b6b030f1ea900ab59e7496e8eb105e9af3 5.4 +25fc5b1f44a2a5acf5f314f47b4df1486dae767a 5.5 +41a4a8009d2336bfebe221e735a642d0740651e6 5.5.1 +155b7078a68c14f4a8158e1154fd5c050acbcf2a 5.6 +b627f03618585eeb8df1d7403ac3637ece06d644 5.7 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/.travis.yml new/keyring-5.7/.travis.yml --- old/keyring-5.4/.travis.yml 2015-08-07 10:54:00.000000000 +0200 +++ new/keyring-5.7/.travis.yml 2015-12-07 03:20:38.000000000 +0100 @@ -3,7 +3,6 @@ os: - linux - - osx language: python diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/CHANGES.rst new/keyring-5.7/CHANGES.rst --- old/keyring-5.4/CHANGES.rst 2015-08-07 10:56:07.000000000 +0200 +++ new/keyring-5.7/CHANGES.rst 2015-12-07 04:31:54.000000000 +0100 @@ -3,6 +3,36 @@ ======= --- +5.7 +--- + +* Issue #177: Resolve default keyring name on Gnome using the API. +* Issue #145: Add workaround for password exposure through + process status for most passwords containing simple + characters. + +--- +5.6 +--- + +* Allow keyring to be invoked from command-line with + ``python -m keyring``. + +----- +5.5.1 +----- + +* Issue #156: Fixed test failures in ``pyfs`` keyring related to + 0.5 release. + +--- +5.5 +--- + +* Pull Request #176: Use recommended mechanism for checking + GnomeKeyring version. + +--- 5.4 --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/CONTRIBUTORS.txt new/keyring-5.7/CONTRIBUTORS.txt --- old/keyring-5.4/CONTRIBUTORS.txt 2015-06-22 17:12:17.000000000 +0200 +++ new/keyring-5.7/CONTRIBUTORS.txt 1970-01-01 01:00:00.000000000 +0100 @@ -1,25 +0,0 @@ ------------- -Contributors ------------- - -* Kang Zhang -* Tarek Ziadé -* Marcin Kasperski -* Steve Borho -* Michael Gruenewald -* Jason R. Coombs -* Benji York -* Jonathan Ballet -* Gary Poster -* Patrick Mezard -* Jérôme Laheurte -* Jake Basile -* Jelmer Vernooij -* André Sintzoff -* Thomas Kluyver -* Sebastian Ramacher -* Robert Leftwich -* Kyle Stark -* Daniel Holth -* Manuel de la Peña -* Dmitry Shachnev diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/PKG-INFO new/keyring-5.7/PKG-INFO --- old/keyring-5.4/PKG-INFO 2015-08-07 11:40:25.000000000 +0200 +++ new/keyring-5.7/PKG-INFO 2015-12-07 04:33:42.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: keyring -Version: 5.4 +Version: 5.7 Summary: Store and access your passwords safely. Home-page: http://bitbucket.org/kang/python-keyring-lib Author: Jason R. Coombs @@ -63,6 +63,30 @@ >>> keyring.get_password("system", "username") 'password' + Command-line Utility + ==================== + + Keyring supplies a ``keyring`` command which is installed with the + package. After installing keyring in most environments, the + command should be available for setting, getting, and deleting + passwords. For more information on usage, invoke with no arguments + or with ``--help`` as so:: + + $ keyring --help + $ keyring set system username + Password for 'username' in 'system': + $ keyring get system username + password + + The command-line functionality is also exposed as an executable + package, suitable for invoking from Python like so:: + + $ python -m keyring --help + $ python -m keyring set system username + Password for 'username' in 'system': + $ python -m keyring get system username + password + -------------------------- Configure your keyring lib -------------------------- @@ -267,9 +291,9 @@ python bin/test --help - ------- - Credits - ------- + ---------- + Background + ---------- The project was based on Tarek Ziade's idea in `this post`_. Kang Zhang initially carried it out as a `Google Summer of Code`_ project, and Tarek @@ -277,14 +301,41 @@ .. _this post: http://tarekziade.wordpress.com/2009/03/27/pycon-hallway-session-1-a-keyring... .. _Google Summer of Code: http://socghop.appspot.com/ - - See CONTRIBUTORS.txt for a complete list of contributors. - ======= CHANGES ======= --- + 5.7 + --- + + * Issue #177: Resolve default keyring name on Gnome using the API. + * Issue #145: Add workaround for password exposure through + process status for most passwords containing simple + characters. + + --- + 5.6 + --- + + * Allow keyring to be invoked from command-line with + ``python -m keyring``. + + ----- + 5.5.1 + ----- + + * Issue #156: Fixed test failures in ``pyfs`` keyring related to + 0.5 release. + + --- + 5.5 + --- + + * Pull Request #176: Use recommended mechanism for checking + GnomeKeyring version. + + --- 5.4 --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/README.rst new/keyring-5.7/README.rst --- old/keyring-5.4/README.rst 2015-08-07 10:54:00.000000000 +0200 +++ new/keyring-5.7/README.rst 2015-12-07 03:20:38.000000000 +0100 @@ -55,6 +55,30 @@ >>> keyring.get_password("system", "username") 'password' +Command-line Utility +==================== + +Keyring supplies a ``keyring`` command which is installed with the +package. After installing keyring in most environments, the +command should be available for setting, getting, and deleting +passwords. For more information on usage, invoke with no arguments +or with ``--help`` as so:: + + $ keyring --help + $ keyring set system username + Password for 'username' in 'system': + $ keyring get system username + password + +The command-line functionality is also exposed as an executable +package, suitable for invoking from Python like so:: + + $ python -m keyring --help + $ python -m keyring set system username + Password for 'username' in 'system': + $ python -m keyring get system username + password + -------------------------- Configure your keyring lib -------------------------- @@ -259,9 +283,9 @@ python bin/test --help -------- -Credits -------- +---------- +Background +---------- The project was based on Tarek Ziade's idea in `this post`_. Kang Zhang initially carried it out as a `Google Summer of Code`_ project, and Tarek @@ -269,6 +293,3 @@ .. _this post: http://tarekziade.wordpress.com/2009/03/27/pycon-hallway-session-1-a-keyring... .. _Google Summer of Code: http://socghop.appspot.com/ - -See CONTRIBUTORS.txt for a complete list of contributors. - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring/__main__.py new/keyring-5.7/keyring/__main__.py --- old/keyring-5.4/keyring/__main__.py 1970-01-01 01:00:00.000000000 +0100 +++ new/keyring-5.7/keyring/__main__.py 2015-12-07 03:20:38.000000000 +0100 @@ -0,0 +1,3 @@ +if __name__ == '__main__': + from keyring import cli + cli.main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring/backends/Gnome.py new/keyring-5.7/keyring/backends/Gnome.py --- old/keyring-5.4/keyring/backends/Gnome.py 2015-06-22 17:12:17.000000000 +0200 +++ new/keyring-5.7/keyring/backends/Gnome.py 2015-12-07 04:29:49.000000000 +0100 @@ -1,10 +1,10 @@ import os try: - from gi import Repository - if Repository.get_default().enumerate_versions('GnomeKeyring'): - from gi.repository import GnomeKeyring -except ImportError: + import gi + gi.require_version('GnomeKeyring', '1.0') + from gi.repository import GnomeKeyring +except (ImportError, ValueError): pass from ..backend import KeyringBackend @@ -16,9 +16,11 @@ class Keyring(KeyringBackend): """Gnome Keyring""" - # Name of the keyring to store the passwords in. - # Use None for the default keyring. KEYRING_NAME = None + """ + Name of the keyring in which to store the passwords. + Use None for the default keyring. + """ requisite_vars = [ 'DISPLAY', @@ -35,6 +37,11 @@ raise RuntimeError("Requisite environment vars are not present") return int(cls.has_requisite_vars()) + @property + def keyring_name(self): + system_default = GnomeKeyring.get_default_keyring_sync()[1] + return self.KEYRING_NAME or system_default + @classmethod def has_requisite_vars(cls): """ @@ -86,7 +93,7 @@ GnomeKeyring.Attribute.list_append_string(attrs, 'service', service) GnomeKeyring.Attribute.list_append_string(attrs, 'application', 'python-keyring') result = GnomeKeyring.item_create_sync( - self.KEYRING_NAME, GnomeKeyring.ItemType.NETWORK_PASSWORD, + self.keyring_name, GnomeKeyring.ItemType.NETWORK_PASSWORD, "Password for '%s' on '%s'" % (username, service), attrs, password, True)[0] if result == GnomeKeyring.Result.CANCELLED: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring/backends/OS_X.py new/keyring-5.7/keyring/backends/OS_X.py --- old/keyring-5.4/keyring/backends/OS_X.py 2015-08-01 15:47:59.000000000 +0200 +++ new/keyring-5.7/keyring/backends/OS_X.py 2015-12-07 04:31:37.000000000 +0100 @@ -2,6 +2,7 @@ import subprocess import re import binascii +import functools from ..backend import KeyringBackend from ..errors import PasswordSetError @@ -41,26 +42,62 @@ def set_password(self, service, username, password): if username is None: username = '' - set_error = PasswordSetError("Can't store password in keychain") try: - # set up the call for security. - cmd = [ - 'security', - SecurityCommand('add', self.store), - '-a', username, - '-s', service, - '-w', password, - '-U', - ] - call = subprocess.Popen(cmd, stderr=subprocess.PIPE, - stdout=subprocess.PIPE) - stdoutdata, stderrdata = call.communicate() - code = call.returncode - # check return code. - if code is not 0: - raise set_error - except: - raise set_error + # This two-step process is a stop-gap measure until a ctypes + # implementation can be created. Fall back to the + # command-line version when the username/service/password + # strings contain characters (escapes, newlines, etc.) that + # the interactive security session can't handle. + interactive_call = functools.partial(self._interactive_set, + service, username, password) + direct_call = functools.partial(self._direct_set, + service, username, password) + code = interactive_call() and direct_call() + # check return code + if code: + raise Exception() + except Exception: + raise PasswordSetError("Can't store password in keychain") + + def _interactive_set(self, service, username, password): + """ + Call the security command, supplying parameters through + the input stream to avoid revealing the password in the + process status. + """ + cmd = [ + 'security', + '-i' + ] + security_cmd = "{} -a '{}' -s '{}' -p '{}' -U\n".format( + SecurityCommand('add', self.store), + username, service, password) + call = subprocess.Popen( + cmd, + stdin=subprocess.PIPE, + stderr=subprocess.PIPE, + stdout=subprocess.PIPE) + stdoutdata, stderrdata = call.communicate( + security_cmd.encode('utf-8')) + return call.returncode + + def _direct_set(self, service, username, password): + """ + Call the security command, supplying the parameters on + the command line. + """ + cmd = [ + 'security', + SecurityCommand('add', self.store), + '-a', username, + '-s', service, + '-w', password, + '-U', + ] + call = subprocess.Popen( + cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE) + stdoutdata, stderrdata = call.communicate() + return call.returncode def get_password(self, service, username): if username is None: @@ -74,7 +111,9 @@ '-a', username, '-s', service, ] - call = subprocess.Popen(cmd, stderr=subprocess.PIPE, + call = subprocess.Popen( + cmd, + stderr=subprocess.PIPE, stdout=subprocess.PIPE) stdoutdata, stderrdata = call.communicate() code = call.returncode @@ -112,7 +151,9 @@ '-s', service, ] # set up the call for security. - call = subprocess.Popen(cmd, stderr=subprocess.PIPE, + call = subprocess.Popen( + cmd, + stderr=subprocess.PIPE, stdout=subprocess.PIPE) stdoutdata, stderrdata = call.communicate() code = call.returncode diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring/backends/pyfs.py new/keyring-5.7/keyring/backends/pyfs.py --- old/keyring-5.4/keyring/backends/pyfs.py 2015-06-22 17:12:17.000000000 +0200 +++ new/keyring-5.7/keyring/backends/pyfs.py 2015-12-07 03:20:38.000000000 +0100 @@ -1,5 +1,6 @@ import os import base64 +import sys from ..py27compat import configparser @@ -46,9 +47,8 @@ cache_timeout=None): super(BasicKeyring, self).__init__() self._crypter = crypter - self._filename = (filename or - os.path.join(platform_.data_root(), - self.__class__._filename)) + def_fn = os.path.join(platform_.data_root(), self.__class__._filename) + self._filename = filename or def_fn self._can_create = can_create self._cache_timeout = cache_timeout @@ -80,7 +80,7 @@ return password_encrypted or b'' return self._crypter.decrypt(password_encrypted) - def _open(self, mode='rb'): + def _open(self, mode='r'): """Open the password file in the specified mode """ open_file = None @@ -198,7 +198,7 @@ if not self.config.has_section(service): self.config.add_section(service) self.config.set(service, username, password_base64) - config_file = self._open('w') + config_file = UnicodeWriterAdapter(self._open('w')) self.config.write(config_file) config_file.close() @@ -210,7 +210,7 @@ self.config.remove_option(service, username) except configparser.NoSectionError: raise errors.PasswordDeleteError('Password not found') - config_file = self._open('w') + config_file = UnicodeWriterAdapter(self._open('w')) self.config.write(config_file) config_file.close() @@ -221,6 +221,26 @@ raise RuntimeError("pyfs required") return 2 +class UnicodeWriterAdapter(object): + """ + Wrap an object with a .write method to accept 'str' on Python 2 + and make it a Unicode string. + """ + def __init__(self, orig): + self._orig = orig + + def __getattr__(self, *args, **kwargs): + return getattr(self._orig, *args, **kwargs) + + def write(self, value): + if isinstance(value, str): + value = value.decode('ascii') + return self._orig.write(value) + +if sys.version_info > (3,): + UnicodeWriterAdapter = lambda x: x + + class PlaintextKeyring(BasicKeyring): """Unencrypted Pyfilesystem Keyring """ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring/tests/backends/test_OS_X.py new/keyring-5.7/keyring/tests/backends/test_OS_X.py --- old/keyring-5.4/keyring/tests/backends/test_OS_X.py 2015-06-22 17:12:17.000000000 +0200 +++ new/keyring-5.7/keyring/tests/backends/test_OS_X.py 2015-12-07 03:20:38.000000000 +0100 @@ -14,11 +14,6 @@ def init_keyring(self): return OS_X.Keyring() - @unittest.expectedFailure - def test_delete_present(self): - """Not implemented""" - super(OSXKeychainTestCase, self).test_delete_present() - class SecurityCommandTestCase(unittest.TestCase): def test_SecurityCommand(self): self.assertEqual(OS_X.SecurityCommand('get'), 'get-generic-password') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring/tests/backends/test_pyfs.py new/keyring-5.7/keyring/tests/backends/test_pyfs.py --- old/keyring-5.4/keyring/tests/backends/test_pyfs.py 2015-06-22 17:12:17.000000000 +0200 +++ new/keyring-5.7/keyring/tests/backends/test_pyfs.py 2015-12-07 03:20:38.000000000 +0100 @@ -1,11 +1,11 @@ +from __future__ import unicode_literals + import os import tempfile import textwrap from ..py30compat import unittest -import pytest - import keyring.backend from keyring.backends import pyfs from ..test_backend import BackendBasicTests, random_string @@ -37,9 +37,6 @@ self.assertEqual(password, self.keyring.decrypt(encrypted)) -issue156 = pytest.mark.xfail(reason="pyfs 0.5 breaks everything. Ref #156") - -@issue156 @unittest.skipUnless(pyfs.BasicKeyring.viable, "Need Pyfilesystem") class UnencryptedMemoryPyfilesystemKeyringNoSubDirTestCase( PyfilesystemKeyringTests, unittest.TestCase): @@ -52,7 +49,6 @@ filename=self.keyring_filename) -@issue156 @unittest.skipUnless(pyfs.BasicKeyring.viable, "Need Pyfilesystem") class UnencryptedMemoryPyfilesystemKeyringSubDirTestCase( PyfilesystemKeyringTests, unittest.TestCase): @@ -65,7 +61,6 @@ filename=self.keyring_filename) -@issue156 @unittest.skipUnless(pyfs.BasicKeyring.viable, "Need Pyfilesystem") class UnencryptedLocalPyfilesystemKeyringNoSubDirTestCase( PyfilesystemKeyringTests, unittest.TestCase): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring/tests/test_core.py new/keyring-5.7/keyring/tests/test_core.py --- old/keyring-5.4/keyring/tests/test_core.py 2015-06-22 17:12:17.000000000 +0200 +++ new/keyring-5.7/keyring/tests/test_core.py 2015-12-07 04:31:37.000000000 +0100 @@ -1,14 +1,6 @@ -""" -test_core.py - -Created by Kang Zhang on 2009-08-09 -""" - from __future__ import with_statement import os -import tempfile -import shutil import mock import pytest @@ -29,7 +21,7 @@ yield str(filename) -class TestKeyring(keyring.backend.KeyringBackend): +class ATestKeyring(keyring.backend.KeyringBackend): """A faked keyring for test. """ def __init__(self): @@ -52,7 +44,7 @@ raise errors.PasswordDeleteError("not set") -class TestKeyring2(TestKeyring): +class AnotherTestKeyring(ATestKeyring): """Another faked keyring for test. """ def get_password(self, service, username): @@ -88,7 +80,7 @@ def test_set_keyring_in_runtime(self): """Test the function of set keyring in runtime. """ - keyring.core.set_keyring(TestKeyring()) + keyring.core.set_keyring(ATestKeyring()) keyring.core.set_password("test", "user", "password") assert keyring.core.get_password("test", "user") == PASSWORD_TEXT @@ -103,7 +95,7 @@ # the path for the user created keyring "keyring-path= %s\n" % os.path.dirname(os.path.abspath(__file__)), # the name of the keyring class - "default-keyring=test_core.TestKeyring2\n", + "default-keyring=test_core.AnotherTestKeyring\n", ]) # init the keyring lib, the lib will automaticlly load the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring.egg-info/PKG-INFO new/keyring-5.7/keyring.egg-info/PKG-INFO --- old/keyring-5.4/keyring.egg-info/PKG-INFO 2015-08-07 11:40:25.000000000 +0200 +++ new/keyring-5.7/keyring.egg-info/PKG-INFO 2015-12-07 04:33:40.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: keyring -Version: 5.4 +Version: 5.7 Summary: Store and access your passwords safely. Home-page: http://bitbucket.org/kang/python-keyring-lib Author: Jason R. Coombs @@ -63,6 +63,30 @@ >>> keyring.get_password("system", "username") 'password' + Command-line Utility + ==================== + + Keyring supplies a ``keyring`` command which is installed with the + package. After installing keyring in most environments, the + command should be available for setting, getting, and deleting + passwords. For more information on usage, invoke with no arguments + or with ``--help`` as so:: + + $ keyring --help + $ keyring set system username + Password for 'username' in 'system': + $ keyring get system username + password + + The command-line functionality is also exposed as an executable + package, suitable for invoking from Python like so:: + + $ python -m keyring --help + $ python -m keyring set system username + Password for 'username' in 'system': + $ python -m keyring get system username + password + -------------------------- Configure your keyring lib -------------------------- @@ -267,9 +291,9 @@ python bin/test --help - ------- - Credits - ------- + ---------- + Background + ---------- The project was based on Tarek Ziade's idea in `this post`_. Kang Zhang initially carried it out as a `Google Summer of Code`_ project, and Tarek @@ -277,14 +301,41 @@ .. _this post: http://tarekziade.wordpress.com/2009/03/27/pycon-hallway-session-1-a-keyring... .. _Google Summer of Code: http://socghop.appspot.com/ - - See CONTRIBUTORS.txt for a complete list of contributors. - ======= CHANGES ======= --- + 5.7 + --- + + * Issue #177: Resolve default keyring name on Gnome using the API. + * Issue #145: Add workaround for password exposure through + process status for most passwords containing simple + characters. + + --- + 5.6 + --- + + * Allow keyring to be invoked from command-line with + ``python -m keyring``. + + ----- + 5.5.1 + ----- + + * Issue #156: Fixed test failures in ``pyfs`` keyring related to + 0.5 release. + + --- + 5.5 + --- + + * Pull Request #176: Use recommended mechanism for checking + GnomeKeyring version. + + --- 5.4 --- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/keyring.egg-info/SOURCES.txt new/keyring-5.7/keyring.egg-info/SOURCES.txt --- old/keyring-5.4/keyring.egg-info/SOURCES.txt 2015-08-07 11:40:25.000000000 +0200 +++ new/keyring-5.7/keyring.egg-info/SOURCES.txt 2015-12-07 04:33:41.000000000 +0100 @@ -2,7 +2,6 @@ .hgtags .travis.yml CHANGES.rst -CONTRIBUTORS.txt README.rst buildout.cfg hook-keyring.backend.py @@ -10,6 +9,7 @@ setup.cfg setup.py keyring/__init__.py +keyring/__main__.py keyring/backend.py keyring/cli.py keyring/core.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/keyring-5.4/setup.cfg new/keyring-5.7/setup.cfg --- old/keyring-5.4/setup.cfg 2015-08-07 11:40:25.000000000 +0200 +++ new/keyring-5.7/setup.cfg 2015-12-07 04:33:42.000000000 +0100 @@ -4,6 +4,6 @@ [egg_info] tag_build = -tag_svn_revision = 0 tag_date = 0 +tag_svn_revision = 0