From f666efed0de21343ad8b847bf2c7def0b3e2625b Mon Sep 17 00:00:00 2001 From: Beniamino Galvani Date: Tue, 13 Sep 2016 14:54:08 +0200 Subject: [PATCH] clients: fix matching of connection path Since we use g_str_has_prefix() to match a request_id with the connection path, there can be wrong matches. For example: request_id: /org/freedesktop/NetworkManager/Settings/10/802-1x connection: /org/freedesktop/NetworkManager/Settings/1 would match. Add a trailing slash to the connection path stored in the agent to prevent this. --- clients/common/nm-secret-agent-simple.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/clients/common/nm-secret-agent-simple.c b/clients/common/nm-secret-agent-simple.c index 0c90eba36e..550fefa809 100644 --- a/clients/common/nm-secret-agent-simple.c +++ b/clients/common/nm-secret-agent-simple.c @@ -751,10 +751,18 @@ nm_secret_agent_simple_enable (NMSecretAgentSimple *self, const char *path) { NMSecretAgentSimplePrivate *priv = NM_SECRET_AGENT_SIMPLE_GET_PRIVATE (self); GList *requests, *iter; + gs_free char *path_full = NULL; - if (g_strcmp0 (path, priv->path) != 0) { + /* The path is only used to match a request_id with the current + * connection. Since the request_id is "${CONNECTION_PATH}/${SETTING}", + * add a trailing '/' to the path to match the full connection path. + */ + path_full = path ? g_strdup_printf ("%s/", path) : NULL; + + if (g_strcmp0 (path_full, priv->path) != 0) { g_free (priv->path); - priv->path = g_strdup (path); + priv->path = path_full; + path_full = NULL; } if (priv->enabled)