diff --git a/CHANGES.rst b/CHANGES.rst index 57daae65..912d571f 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,9 @@ +v23.11.0 +-------- + +* #603: In ``libsecret``, check that the service is available before + declaring viability. + v23.10.0 -------- diff --git a/keyring/backends/libsecret.py b/keyring/backends/libsecret.py index c97e0d33..cf16dbec 100644 --- a/keyring/backends/libsecret.py +++ b/keyring/backends/libsecret.py @@ -7,7 +7,6 @@ from ..errors import ( PasswordDeleteError, PasswordSetError, - ExceptionRaisedContext, KeyringLocked, ) @@ -50,10 +49,15 @@ def collection(self): @properties.classproperty def priority(cls): - with ExceptionRaisedContext() as exc: - Secret.__name__ - if exc: + if not available: raise RuntimeError("libsecret required") + + # Make sure there is actually a secret service running + try: + Secret.Service.get_sync(Secret.ServiceFlags.OPEN_SESSION, None) + except GLib.Error as error: + raise RuntimeError("Can't open a session to the secret service") from error + return 4.8 def get_password(self, service, username):