Skip to content
  • Thomas Haller's avatar
    libnm-util: don't assert in nm_setting_get_secret_flags() and avoid assertion... · 978724da
    Thomas Haller authored
    libnm-util: don't assert in nm_setting_get_secret_flags() and avoid assertion in agent_secrets_done_cb()
    
    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: default avatarThomas Haller <thaller@redhat.com>
    978724da