diff options
author | Thomas Haller <thaller@redhat.com> | 2015-02-18 19:15:54 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-02-19 13:07:33 +0100 |
commit | c651b2779346fb65fd0a1ae7effe9bbb99c3e2c6 (patch) | |
tree | 71e5bdea690e427a309738b9559fc870a7f0c506 | |
parent | 148a6656b8da09779d2da2b59e2d6a9c392b5eb1 (diff) | |
download | NetworkManager-c651b2779346fb65fd0a1ae7effe9bbb99c3e2c6.tar.gz |
keyfile/writer: fix password_raw_writer() to write NMSetting8021x:password-raw
After refactoring libnm-core to use GBytes instead of
GByteArray/DBUS_TYPE_G_UCHAR_ARRAY, it was forgotten to update
keyfile writer.
This causes keyfile writer to skip the NMSetting8021x:password-raw setting
and raise a g_critical() warning.
Fixes: c43f88907be66f8f62a8edbe76ae2aec4ff61190
-rw-r--r-- | src/settings/plugins/keyfile/tests/test-keyfile.c | 17 | ||||
-rw-r--r-- | src/settings/plugins/keyfile/writer.c | 25 |
2 files changed, 31 insertions, 11 deletions
diff --git a/src/settings/plugins/keyfile/tests/test-keyfile.c b/src/settings/plugins/keyfile/tests/test-keyfile.c index 28ab20c681..3026593bfa 100644 --- a/src/settings/plugins/keyfile/tests/test-keyfile.c +++ b/src/settings/plugins/keyfile/tests/test-keyfile.c @@ -2567,10 +2567,22 @@ test_write_wired_8021x_tls_connection_blob (void) char *new_priv_key; const char *uuid; GError *error = NULL; + GBytes *password_raw = NULL; +#define PASSWORD_RAW "password-raw\0test" connection = create_wired_tls_connection (NM_SETTING_802_1X_CK_SCHEME_BLOB); g_assert (connection != NULL); + s_8021x = nm_connection_get_setting_802_1x (connection); + g_assert (s_8021x); + + password_raw = g_bytes_new (PASSWORD_RAW, STRLEN (PASSWORD_RAW)); + g_object_set (s_8021x, + NM_SETTING_802_1X_PASSWORD_RAW, + password_raw, + NULL); + g_bytes_unref (password_raw); + /* Write out the connection */ success = nm_keyfile_plugin_write_test_connection (connection, TEST_SCRATCH_DIR, geteuid (), getegid (), &testfile, &error); if (!success) { @@ -2613,6 +2625,11 @@ test_write_wired_8021x_tls_connection_blob (void) g_assert (nm_setting_802_1x_get_client_cert_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH); g_assert (nm_setting_802_1x_get_private_key_scheme (s_8021x) == NM_SETTING_802_1X_CK_SCHEME_PATH); + password_raw = nm_setting_802_1x_get_password_raw (s_8021x); + g_assert (password_raw); + g_assert (g_bytes_get_size (password_raw) == STRLEN (PASSWORD_RAW)); + g_assert (!memcmp (g_bytes_get_data (password_raw, NULL), PASSWORD_RAW, STRLEN (PASSWORD_RAW))); + unlink (testfile); g_free (testfile); diff --git a/src/settings/plugins/keyfile/writer.c b/src/settings/plugins/keyfile/writer.c index 7f3751faae..26818a50c0 100644 --- a/src/settings/plugins/keyfile/writer.c +++ b/src/settings/plugins/keyfile/writer.c @@ -27,7 +27,6 @@ #include <stdio.h> #include <errno.h> -#include <dbus/dbus-glib.h> #include <nm-setting.h> #include <nm-setting-connection.h> #include <nm-setting-ip4-config.h> @@ -42,7 +41,6 @@ #include <string.h> #include <arpa/inet.h> -#include "nm-dbus-glib-types.h" #include "nm-glib-compat.h" #include "nm-logging.h" #include "writer.h" @@ -345,19 +343,24 @@ password_raw_writer (GKeyFile *file, const GValue *value) { const char *setting_name = nm_setting_get_name (setting); - GByteArray *array; - int i, *tmp_array; + GBytes *array; + int *tmp_array; + gsize i, len; + const char *data; - g_return_if_fail (G_VALUE_HOLDS (value, DBUS_TYPE_G_UCHAR_ARRAY)); + g_return_if_fail (G_VALUE_HOLDS (value, G_TYPE_BYTES)); - array = (GByteArray *) g_value_get_boxed (value); - if (!array || !array->len) + array = (GBytes *) g_value_get_boxed (value); + if (!array) + return; + data = g_bytes_get_data (array, &len); + if (!data || !len) return; - tmp_array = g_new (gint, array->len); - for (i = 0; i < array->len; i++) - tmp_array[i] = (int) array->data[i]; - nm_keyfile_plugin_kf_set_integer_list (file, setting_name, key, tmp_array, array->len); + tmp_array = g_new (gint, len); + for (i = 0; i < len; i++) + tmp_array[i] = (int) data[i]; + nm_keyfile_plugin_kf_set_integer_list (file, setting_name, key, tmp_array, len); g_free (tmp_array); } |