jaraco / jaraco/keyring

ChainerBackend not deleting password from lower priority backend

Open
#697 2 comments 0 reactions 0 assignees View on GitHub
bug good-first-issue help wanted
Dominant language
Python
Stars
1.5k
Forks
196
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**
Using kdewallet I can see old keyring passwords listed in "Secret Service". New keyring passwords are listed under the "system" passed to set_password. I assume this is because I previously did not have `keyring.backends.kwallet.DBusKeyring` installed.
```
$ python3.11 -m keyring --list-backends
keyring.backends.chainer.ChainerBackend (priority: 10)
keyring.backends.kwallet.DBusKeyring (priority: 5.1)
keyring.backends.SecretService.Keyring (priority: 5)
keyring.backends.fail.Keyring (priority: 0)
```
`$ python3.11 -m keyring get system username` correctly finds the old passwords. `$ python3.11 -m keyring del system username` fails as follows:
```
Traceback (most recent call last):
File "", line 198, in _run_module_as_main
File "", line 88, in _run_code
File "/home/jim/.local/lib/python3.11/site-packages/keyring/__main__.py", line 4, in
cli.main()
File "/home/jim/.local/lib/python3.11/site-packages/keyring/cli.py", line 216, in main
return cli.run(argv)
^^^^^^^^^^^^^
File "/home/jim/.local/lib/python3.11/site-packages/keyring/cli.py", line 120, in run
return method()
^^^^^^^^
File "/home/jim/.local/lib/python3.11/site-packages/keyring/cli.py", line 157, in do_del
delete_password(self.service, self.username)
File "/home/jim/.local/lib/python3.11/site-packages/keyring/core.py", line 73, in delete_password
get_keyring().delete_password(service_name, username)
File "/home/jim/.local/lib/python3.11/site-packages/keyring/backends/chainer.py", line 63, in delete_password
return keyring.delete_password(service, username)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jim/.local/lib/python3.11/site-packages/keyring/backends/kwallet.py", line 150, in delete_password
raise PasswordDeleteError("Password not found")
keyring.errors.PasswordDeleteError: Password not found
```

**Expected behavior**
I would expect to be able to delete any password that I can read.

**Environment**
- OS: openSUSE 15.6

```
$ python3.11 -m pip list | grep keyring
keyring 25.4.1

$ python3.11 -m keyring --list-backends
keyring.backends.chainer.ChainerBackend (priority: 10)
keyring.backends.kwallet.DBusKeyring (priority: 5.1)
keyring.backends.SecretService.Keyring (priority: 5)
keyring.backends.fail.Keyring (priority: 0)
```

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with keyring/backends/chainer.py, then inspect the delete_password implementation in keyring/backends/kwallet.py shown in the traceback. Reproduce the behavior with `python3.11 -m keyring get system username` and `python3.11 -m keyring del system username`; done means a password that can be read from a lower-priority backend can also be deleted.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
backend
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.