summaryrefslogtreecommitdiff
path: root/libnm-glib/nm-secret-agent.c
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2013-03-05 09:16:47 -0600
committerDan Williams <dcbw@redhat.com>2013-04-08 11:30:32 -0500
commit110a40358d26fa05604c59ecc1584635e40347b6 (patch)
treee19747e3829af2f97b937ed6a7137d15bfde0f23 /libnm-glib/nm-secret-agent.c
parent4a21eb08dbf3a3589e27ab2f8973795cdad30a9f (diff)
downloadNetworkManager-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.c11
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