diff options
author | Dan Williams <dcbw@redhat.com> | 2013-03-05 09:16:47 -0600 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2013-04-08 11:30:32 -0500 |
commit | 110a40358d26fa05604c59ecc1584635e40347b6 (patch) | |
tree | e19747e3829af2f97b937ed6a7137d15bfde0f23 /libnm-glib/nm-secret-agent.c | |
parent | 4a21eb08dbf3a3589e27ab2f8973795cdad30a9f (diff) | |
download | NetworkManager-110a40358d26fa05604c59ecc1584635e40347b6.tar.gz |
libnm-glib: never call NM D-Bus methods if NM isn't running
Though the client shouldn't be calling anything when NM isn't running
(because clients have nm_client_get_manager_running()), make sure
that NMClient never calls a NetworkManager method when NM isn't
on the bus.
Next, ensure NMObject doesn't try to refresh properties when NM isn't
running. Creating an NMClient may trigger a property refresh request,
but if NM isn't running, defer that until NM starts, to ensure that
we don't D-Bus autostart NM.
Third, ensure NMRemoteSettings doesn't attempt to list connections
unless NM is running.
This prevents service activation of NetworkManager in lieu of dbus-glib
learning about DBUS_HEADER_FLAG_NO_AUTO_START.
Diffstat (limited to 'libnm-glib/nm-secret-agent.c')
-rw-r--r-- | libnm-glib/nm-secret-agent.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/libnm-glib/nm-secret-agent.c b/libnm-glib/nm-secret-agent.c index 400d042766..b573592d6b 100644 --- a/libnm-glib/nm-secret-agent.c +++ b/libnm-glib/nm-secret-agent.c @@ -589,6 +589,9 @@ nm_secret_agent_register (NMSecretAgent *self) g_return_val_if_fail (class->save_secrets != NULL, FALSE); g_return_val_if_fail (class->delete_secrets != NULL, FALSE); + if (!priv->nm_owner && !priv->private_bus) + return FALSE; + priv->suppress_auto = FALSE; /* Export our secret agent interface before registering with the manager */ @@ -631,6 +634,9 @@ nm_secret_agent_unregister (NMSecretAgent *self) g_return_val_if_fail (priv->bus != NULL, FALSE); g_return_val_if_fail (priv->manager_proxy != NULL, FALSE); + if (!priv->nm_owner && !priv->private_bus) + return FALSE; + dbus_g_proxy_call_no_reply (priv->manager_proxy, "Unregister", G_TYPE_INVALID); _internal_unregister (self); @@ -829,6 +835,8 @@ nm_secret_agent_init (NMSecretAgent *self) "NameOwnerChanged", G_CALLBACK (name_owner_changed), self, NULL); + + get_nm_owner (self); } priv->manager_proxy = _nm_dbus_new_proxy_for_connection (priv->bus, @@ -839,7 +847,8 @@ nm_secret_agent_init (NMSecretAgent *self) return; } - priv->auto_register_id = g_idle_add (auto_register_cb, self); + if (priv->nm_owner || priv->private_bus) + priv->auto_register_id = g_idle_add (auto_register_cb, self); } static void |