From b4bc5646e4ef01273dec00c67b81fdbe615a2d36 Mon Sep 17 00:00:00 2001 From: Roland Walker Date: Fri, 6 Feb 2026 04:59:08 -0500 Subject: [PATCH] include port and socket in keyring identifier It is possible to have different credentials when connecting to the same host on different ports, for instance. Incidentally recast a variable name as "keychain_identifier". --- changelog.md | 1 + mycli/main.py | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/changelog.md b/changelog.md index 9beef04f..8d80e4b4 100644 --- a/changelog.md +++ b/changelog.md @@ -11,6 +11,7 @@ Bug Fixes -------- * Link to `--ssl`/`--no-ssl` GitHub issue in deprecation warning. * Don't emit keyring-updated message unless needed. +* Include port and socket in keyring identifier. 1.49.0 (2026/02/02) diff --git a/mycli/main.py b/mycli/main.py index 229e1539..fecd4f7d 100755 --- a/mycli/main.py +++ b/mycli/main.py @@ -600,12 +600,12 @@ def connect( # 5. cnf (.my.cnf / etc) # 6. keyring - keychain_user = f'{user}@{host}' + keychain_identifier = f'{user}@{host}:{int_port}:{socket}' keychain_domain = 'mycli.net' keychain_retrieved = False if passwd is None and use_keyring and not reset_keyring: - passwd = keyring.get_password(keychain_domain, keychain_user) + passwd = keyring.get_password(keychain_domain, keychain_identifier) keychain_retrieved = True # if no password was found from all of the above sources, ask for a password @@ -614,9 +614,9 @@ def connect( if reset_keyring or (use_keyring and not keychain_retrieved): try: - saved_pw = keyring.get_password(keychain_domain, keychain_user) + saved_pw = keyring.get_password(keychain_domain, keychain_identifier) if passwd != saved_pw or reset_keyring: - keyring.set_password(keychain_domain, keychain_user, passwd) + keyring.set_password(keychain_domain, keychain_identifier, passwd) click.secho('Password saved to the system keyring', err=True) except Exception as e: click.secho(f'Password not saved to the system keyring: {e}', err=True, fg='red')