diff options
author | Thomas Haller <thaller@redhat.com> | 2017-11-20 19:41:45 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-11-22 10:34:34 +0100 |
commit | f8beee0e4f3d64055459fd484226e8a70c6719cb (patch) | |
tree | 80b4058c9b5749452dd07560f2b5828f879316d0 | |
parent | 4833466c2413b0236e882ea3abf1e5033cf57d79 (diff) | |
download | NetworkManager-th/vpn-secrets-bgo790655.tar.gz |
shared/compat: add compat for nm_setting_vpn_get_data_keys() and nm_setting_vpn_get_secret_keys()th/vpn-secrets-bgo790655
-rw-r--r-- | Makefile.am | 2 | ||||
-rw-r--r-- | shared/nm-utils/nm-compat.c | 63 | ||||
-rw-r--r-- | shared/nm-utils/nm-compat.h | 27 |
3 files changed, 91 insertions, 1 deletions
diff --git a/Makefile.am b/Makefile.am index dc5f32690f..3f60ea5b3f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -670,7 +670,6 @@ libnm_core_tests_test_setting_dcb_CPPFLAGS = $(libnm_core_tests_cppflags) libnm_core_tests_test_settings_defaults_CPPFLAGS = $(libnm_core_tests_cppflags) libnm_core_tests_test_general_SOURCES = \ - shared/nm-utils/nm-compat.c \ libnm-core/tests/test-general-enums.h \ libnm-core/tests/test-general.c @@ -1067,6 +1066,7 @@ libnm_tests_test_remote_settings_client_CPPFLAGS = $(libnm_tests_cppflags) libnm_tests_test_secret_agent_CPPFLAGS = $(libnm_tests_cppflags) libnm_tests_test_general_SOURCES = \ + shared/nm-utils/nm-compat.c \ libnm/tests/test-general.c libnm_tests_test_nm_client_SOURCES = \ diff --git a/shared/nm-utils/nm-compat.c b/shared/nm-utils/nm-compat.c index 21d7e14c67..22ab675de8 100644 --- a/shared/nm-utils/nm-compat.c +++ b/shared/nm-utils/nm-compat.c @@ -23,3 +23,66 @@ #include "nm-compat.h" +/*****************************************************************************/ + +static void +_get_keys_cb (const char *key, const char *val, gpointer user_data) +{ + GPtrArray *a = user_data; + + g_ptr_array_add (a, g_strdup (key)); +} + +static const char ** +_get_keys (NMSettingVpn *setting, + gboolean is_secrets, + guint *out_length) +{ + guint len; + const char **keys = NULL; + gs_unref_ptrarray GPtrArray *a = NULL; + + nm_assert (NM_IS_SETTING_VPN (setting)); + + a = g_ptr_array_new (); + if (is_secrets) + nm_setting_vpn_foreach_secret (setting, _get_keys_cb, a); + else + nm_setting_vpn_foreach_data_item (setting, _get_keys_cb, a); + len = a->len; + + if (a->len) { + g_ptr_array_sort (a, nm_strcmp_p); + g_ptr_array_add (a, NULL); + keys = (const char **) g_ptr_array_free (g_steal_pointer (&a), FALSE); + + /* we need to cache the keys *somewhere*. */ + g_object_set_qdata_full (G_OBJECT (setting), + is_secrets + ? NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_secret_keys") + : NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_data_keys"), + keys, + (GDestroyNotify) g_strfreev); + } + + NM_SET_OUT (out_length, len); + return keys; +} + +const char ** +_nm_setting_vpn_get_data_keys (NMSettingVpn *setting, + guint *out_length) +{ + g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL); + + return _get_keys (setting, FALSE, out_length); +} + +const char ** +_nm_setting_vpn_get_secret_keys (NMSettingVpn *setting, + guint *out_length) +{ + g_return_val_if_fail (NM_IS_SETTING_VPN (setting), NULL); + + return _get_keys (setting, TRUE, out_length); +} diff --git a/shared/nm-utils/nm-compat.h b/shared/nm-utils/nm-compat.h index 9cd249c74f..5234169033 100644 --- a/shared/nm-utils/nm-compat.h +++ b/shared/nm-utils/nm-compat.h @@ -22,5 +22,32 @@ #ifndef __NM_COMPAT_H__ #define __NM_COMPAT_H__ +#include "nm-setting-vpn.h" + +const char **_nm_setting_vpn_get_data_keys (NMSettingVpn *setting, + guint *out_length); + +const char **_nm_setting_vpn_get_secret_keys (NMSettingVpn *setting, + guint *out_length); + +#if NM_CHECK_VERSION (1, 11, 0) +#define nm_setting_vpn_get_data_keys(setting, out_length) \ + ({ \ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ + nm_setting_vpn_get_data_keys (setting, out_length); \ + G_GNUC_END_IGNORE_DEPRECATIONS \ + }) +#define nm_setting_vpn_get_secret_keys(setting, out_length) \ + ({ \ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS \ + nm_setting_vpn_get_secret_keys (setting, out_length); \ + G_GNUC_END_IGNORE_DEPRECATIONS \ + }) +#else +#define nm_setting_vpn_get_data_keys(setting, out_length) \ + _nm_setting_vpn_get_data_keys (setting, out_length) +#define nm_setting_vpn_get_secret_keys(setting, out_length) \ + _nm_setting_vpn_get_secret_keys (setting, out_length) +#endif #endif /* __NM_COMPAT_H__ */ |