summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-11-20 19:41:45 +0100
committerThomas Haller <thaller@redhat.com>2017-11-22 10:34:34 +0100
commitf8beee0e4f3d64055459fd484226e8a70c6719cb (patch)
tree80b4058c9b5749452dd07560f2b5828f879316d0
parent4833466c2413b0236e882ea3abf1e5033cf57d79 (diff)
downloadNetworkManager-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.am2
-rw-r--r--shared/nm-utils/nm-compat.c63
-rw-r--r--shared/nm-utils/nm-compat.h27
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__ */