mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-05-01 05:38:04 +02:00
When secret providers return the connection hash in GetSecrets(), this hash should only contain secrets. However, some providers also return non-secret properties. for_each_secret() iterated over all entries of the @secrets hash and triggered the assertion in nm_setting_get_secret_flags() (see below). NM should not assert against user provided input. Change nm_setting_get_secret_flags() to silently return FALSE, if the property is not a secret. Indeed, handling of secrets is very different for NMSettingVpn and others. Hence nm_setting_get_secret_flags() has only an inconsistent behavior and we have to fix all call sites to do the right thing (depending on whether we have a VPN setting or not). Now for_each_secret() checks whether the property is a secret without hitting the assertion. Adjust all other calls of nm_setting_get_secret_flags(), to anticipate non-secret flags and assert/warn where appropriate. Also, agent_secrets_done_cb() clears now all non-secrets properties from the hash, using the new argument @remove_non_secrets when calling for_each_secret(). #0 0x0000003370c504e9 in g_logv () from /lib64/libglib-2.0.so.0 #1 0x0000003370c5063f in g_log () from /lib64/libglib-2.0.so.0 #2 0x00007fa4b0c1c156 in get_secret_flags (setting=0x1e3ac60, secret_name=0x1ea9180 "security", verify_secret=1, out_flags=0x7fff7507857c, error=0x0) at nm-setting.c:1091 #3 0x00007fa4b0c1c2b2 in nm_setting_get_secret_flags (setting=0x1e3ac60, secret_name=0x1ea9180 "security", out_flags=0x7fff7507857c, error=0x0) at nm-setting.c:1124 #4 0x0000000000463d03 in for_each_secret (connection=0x1deb2f0, secrets=0x1e9f860, callback=0x464f1b <has_system_owned_secrets>, callback_data=0x7fff7507865c) at settings/nm-settings-connection.c:203 #5 0x000000000046525f in agent_secrets_done_cb (manager=0x1dddf50, call_id=1, agent_dbus_owner=0x1ddb9e0 ":1.39", agent_username=0x1e51710 "thom", agent_has_modify=1, setting_name=0x1e91f90 "802-11-wireless-security", flags=NM_SETTINGS_GET_SECRETS_FLAG_ALLOW_INTERACTION, secrets=0x1e9f860, error=0x0, user_data=0x1deb2f0, other_data2=0x477d61 <get_secrets_cb>, other_data3=0x1ea92a0) at settings/nm-settings-connection.c:757 #6 0x00000000004dc4fd in get_complete_cb (parent=0x1ea6300, secrets=0x1e9f860, agent_dbus_owner=0x1ddb9e0 ":1.39", agent_username=0x1e51710 "thom", error=0x0, user_data=0x1dddf50) at settings/nm-agent-manager.c:1139 #7 0x00000000004dab54 in req_complete_success (req=0x1ea6300, secrets=0x1e9f860, agent_dbus_owner=0x1ddb9e0 ":1.39", agent_uname=0x1e51710 "thom") at settings/nm-agent-manager.c:502 #8 0x00000000004db86e in get_done_cb (agent=0x1e89530, call_id=0x1, secrets=0x1e9f860, error=0x0, user_data=0x1ea6300) at settings/nm-agent-manager.c:856 #9 0x00000000004de9d0 in get_callback (proxy=0x1e47530, call=0x1, user_data=0x1ea10f0) at settings/nm-secret-agent.c:267 #10 0x000000337380cad2 in complete_pending_call_and_unlock () from /lib64/libdbus-1.so.3 #11 0x000000337380fdc1 in dbus_connection_dispatch () from /lib64/libdbus-1.so.3 #12 0x000000342800ad65 in message_queue_dispatch () from /lib64/libdbus-glib-1.so.2 #13 0x0000003370c492a6 in g_main_context_dispatch () from /lib64/libglib-2.0.so.0 #14 0x0000003370c49628 in g_main_context_iterate.isra.24 () from /lib64/libglib-2.0.so.0 #15 0x0000003370c49a3a in g_main_loop_run () from /lib64/libglib-2.0.so.0 #16 0x000000000042e5c6 in main (argc=1, argv=0x7fff75078e88) at main.c:644 Signed-off-by: Thomas Haller <thaller@redhat.com> |
||
|---|---|---|
| .. | ||
| tests | ||
| crypto.c | ||
| crypto.h | ||
| crypto_gnutls.c | ||
| crypto_nss.c | ||
| Makefile.am | ||
| Makefile.libnm-core | ||
| nm-connection.c | ||
| nm-connection.h | ||
| nm-core-internal.h | ||
| nm-dbus-interface.h | ||
| nm-property-compare.c | ||
| nm-property-compare.h | ||
| nm-setting-8021x.c | ||
| nm-setting-8021x.h | ||
| nm-setting-adsl.c | ||
| nm-setting-adsl.h | ||
| nm-setting-bluetooth.c | ||
| nm-setting-bluetooth.h | ||
| nm-setting-bond.c | ||
| nm-setting-bond.h | ||
| nm-setting-bridge-port.c | ||
| nm-setting-bridge-port.h | ||
| nm-setting-bridge.c | ||
| nm-setting-bridge.h | ||
| nm-setting-cdma.c | ||
| nm-setting-cdma.h | ||
| nm-setting-connection.c | ||
| nm-setting-connection.h | ||
| nm-setting-dcb.c | ||
| nm-setting-dcb.h | ||
| nm-setting-generic.c | ||
| nm-setting-generic.h | ||
| nm-setting-gsm.c | ||
| nm-setting-gsm.h | ||
| nm-setting-infiniband.c | ||
| nm-setting-infiniband.h | ||
| nm-setting-ip4-config.c | ||
| nm-setting-ip4-config.h | ||
| nm-setting-ip6-config.c | ||
| nm-setting-ip6-config.h | ||
| nm-setting-olpc-mesh.c | ||
| nm-setting-olpc-mesh.h | ||
| nm-setting-ppp.c | ||
| nm-setting-ppp.h | ||
| nm-setting-pppoe.c | ||
| nm-setting-pppoe.h | ||
| nm-setting-private.h | ||
| nm-setting-serial.c | ||
| nm-setting-serial.h | ||
| nm-setting-team-port.c | ||
| nm-setting-team-port.h | ||
| nm-setting-team.c | ||
| nm-setting-team.h | ||
| nm-setting-vlan.c | ||
| nm-setting-vlan.h | ||
| nm-setting-vpn.c | ||
| nm-setting-vpn.h | ||
| nm-setting-wimax.c | ||
| nm-setting-wimax.h | ||
| nm-setting-wired.c | ||
| nm-setting-wired.h | ||
| nm-setting-wireless-security.c | ||
| nm-setting-wireless-security.h | ||
| nm-setting-wireless.c | ||
| nm-setting-wireless.h | ||
| nm-setting.c | ||
| nm-setting.h | ||
| nm-simple-connection.c | ||
| nm-simple-connection.h | ||
| nm-utils-private.h | ||
| nm-utils.c | ||
| nm-utils.h | ||
| nm-version.h.in | ||
| nm-vpn-dbus-interface.h | ||