diff options
Diffstat (limited to 'nmpass')
| -rw-r--r-- | nmpass/main.py | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/nmpass/main.py b/nmpass/main.py index 3d8c85e..412b009 100644 --- a/nmpass/main.py +++ b/nmpass/main.py @@ -1,6 +1,6 @@ from __future__ import annotations -from asyncio import AbstractEventLoop, new_event_loop +from asyncio import AbstractEventLoop, new_event_loop, sleep from sdbus_async.networkmanager import NetworkConnectionSettings, NetworkManagerSecretAgentInterfaceAsync, NetworkManagerAgentManager, NetworkManagerConnectionProperties, NetworkManagerSettings from sdbus_async.networkmanager.settings import ConnectionProfile, ConnectionSettings, EapolSettings, WirelessSecuritySettings from typing import Any @@ -22,6 +22,9 @@ class NetworkManagerPasswordStoreAgent(NetworkManagerSecretAgentInterfaceAsync): self.loop = loop async def set_agent_owned(self, info: ConnectionSettings) -> None: + # prevent infinite loops + await sleep(1) + assert info.uuid is not None settings_path = await NetworkManagerSettings().get_connection_by_uuid(info.uuid) @@ -60,11 +63,17 @@ class NetworkManagerPasswordStoreAgent(NetworkManagerSecretAgentInterfaceAsync): return {} if setting_name == '802-11-wireless-security': - self.loop.create_task(self.set_agent_owned(profile.connection)) + assert profile.wireless_security is not None + assert profile.wireless_security.psk_flags is not None + if (profile.wireless_security.psk_flags & AGENT_OWNED) == 0: + self.loop.create_task(self.set_agent_owned(profile.connection)) return { setting_name: WirelessSecuritySettings(psk=password).to_dbus() } if setting_name == '802-1x': - self.loop.create_task(self.set_agent_owned(profile.connection)) + assert profile.eapol is not None + assert profile.eapol.password_flags is not None + if (profile.eapol.password_flags & AGENT_OWNED) == 0: + self.loop.create_task(self.set_agent_owned(profile.connection)) return { setting_name: EapolSettings(password=password).to_dbus()} return {} |