summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2014-11-27 14:31:49 +0100
committerThomas Haller <thaller@redhat.com>2014-12-04 17:02:22 +0100
commit21eb6b5d0de9656c9b6189d4d4733204b33742d8 (patch)
tree63187dc7d83c978a8e6e76a21ae33edb6f6210b4
parent50d1de13cbabb9e0de0b674deb9d068880c7d0d8 (diff)
libnm: accept additional length argument in nm_utils_uuid_generate_from_string()
This makes the function also useful for non C-strings, non UTF-8-strings, and generic blobs.
-rw-r--r--libnm-core/nm-utils.c11
-rw-r--r--libnm-core/nm-utils.h2
-rw-r--r--libnm-core/tests/test-general.c6
-rw-r--r--src/settings/plugins/ibft/reader.c2
-rw-r--r--src/settings/plugins/ifcfg-rh/reader.c4
-rw-r--r--src/settings/plugins/ifnet/connection_parser.c2
-rw-r--r--src/settings/plugins/ifupdown/parser.c2
-rw-r--r--src/settings/plugins/keyfile/reader.c2
8 files changed, 19 insertions, 12 deletions
diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c
index 409d4dcc1e..e2f29512a1 100644
--- a/libnm-core/nm-utils.c
+++ b/libnm-core/nm-utils.c
@@ -1952,6 +1952,9 @@ nm_utils_uuid_generate (void)
/**
* nm_utils_uuid_generate_from_string:
* @s: a string to use as the seed for the UUID
+ * @slen: if negative, treat @s as zero terminated C string.
+ * Otherwise, assume the length as given (and allow @s to be
+ * non-null terminated or contain '\0').
*
* For a given @s, this function will always return the same UUID.
*
@@ -1959,14 +1962,18 @@ nm_utils_uuid_generate (void)
* object's #NMSettingConnection:id: property
**/
char *
-nm_utils_uuid_generate_from_string (const char *s)
+nm_utils_uuid_generate_from_string (const char *s, gssize slen)
{
uuid_t uuid;
char *buf = NULL;
g_return_val_if_fail (s && *s, NULL);
+ g_return_val_if_fail (slen < 0 || slen > 0, FALSE);
- crypto_md5_hash (NULL, 0, s, strlen (s), (char *) uuid, sizeof (uuid));
+ if (slen < 0)
+ slen = strlen (s);
+
+ crypto_md5_hash (NULL, 0, s, slen, (char *) uuid, sizeof (uuid));
buf = g_malloc0 (37);
uuid_unparse_lower (uuid, &buf[0]);
diff --git a/libnm-core/nm-utils.h b/libnm-core/nm-utils.h
index 85f5afd06a..9fb366a81b 100644
--- a/libnm-core/nm-utils.h
+++ b/libnm-core/nm-utils.h
@@ -121,7 +121,7 @@ GPtrArray *nm_utils_ip_routes_from_variant (GVariant *value,
int family);
char *nm_utils_uuid_generate (void);
-char *nm_utils_uuid_generate_from_string (const char *s);
+char *nm_utils_uuid_generate_from_string (const char *s, gssize slen);
gboolean nm_utils_file_is_certificate (const char *filename);
gboolean nm_utils_file_is_private_key (const char *filename, gboolean *out_encrypted);
diff --git a/libnm-core/tests/test-general.c b/libnm-core/tests/test-general.c
index 827585bf37..2fd68b0600 100644
--- a/libnm-core/tests/test-general.c
+++ b/libnm-core/tests/test-general.c
@@ -3811,7 +3811,7 @@ _test_uuid (const char *expected_uuid, const char *str)
g_assert (str);
- uuid_test = nm_utils_uuid_generate_from_string (str);
+ uuid_test = nm_utils_uuid_generate_from_string (str, -1);
g_assert (uuid_test);
g_assert (nm_utils_is_uuid (uuid_test));
@@ -3832,12 +3832,12 @@ test_nm_utils_uuid_generate_from_string (void)
_test_uuid ("59c0547b-7fe2-1c15-2cce-e328e8bf6742", "/etc/NetworkManager/system-connections/em1");
g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*char *nm_utils_uuid_generate_from_string(const char *): *s && *s*");
- uuid_test = nm_utils_uuid_generate_from_string ("");
+ uuid_test = nm_utils_uuid_generate_from_string ("", -1);
g_assert (uuid_test == NULL);
g_test_assert_expected_messages ();
g_test_expect_message ("libnm", G_LOG_LEVEL_CRITICAL, "*char *nm_utils_uuid_generate_from_string(const char *): *s && *s*");
- uuid_test = nm_utils_uuid_generate_from_string (NULL);
+ uuid_test = nm_utils_uuid_generate_from_string (NULL, -1);
g_assert (uuid_test == NULL);
g_test_assert_expected_messages ();
}
diff --git a/src/settings/plugins/ibft/reader.c b/src/settings/plugins/ibft/reader.c
index 9bb1f471a8..61c4e1cfe7 100644
--- a/src/settings/plugins/ibft/reader.c
+++ b/src/settings/plugins/ibft/reader.c
@@ -408,7 +408,7 @@ connection_setting_add (const GPtrArray *block,
s_vlanid ? s_vlanid : "0",
s_hwaddr,
s_ip4addr ? s_ip4addr : "DHCP");
- uuid = nm_utils_uuid_generate_from_string (uuid_data);
+ uuid = nm_utils_uuid_generate_from_string (uuid_data, -1);
g_free (uuid_data);
s_con = nm_setting_connection_new ();
diff --git a/src/settings/plugins/ifcfg-rh/reader.c b/src/settings/plugins/ifcfg-rh/reader.c
index 8a35b9472a..52dee9d5e5 100644
--- a/src/settings/plugins/ifcfg-rh/reader.c
+++ b/src/settings/plugins/ifcfg-rh/reader.c
@@ -148,7 +148,7 @@ make_connection_setting (const char *file,
uuid = svGetValue (ifcfg, "UUID", FALSE);
if (!uuid || !strlen (uuid)) {
g_free (uuid);
- uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName);
+ uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName, -1);
}
g_object_set (s_con,
@@ -4588,7 +4588,7 @@ uuid_from_file (const char *filename)
uuid = svGetValue (ifcfg, "UUID", FALSE);
if (!uuid || !strlen (uuid)) {
g_free (uuid);
- uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName);
+ uuid = nm_utils_uuid_generate_from_string (ifcfg->fileName, -1);
}
svCloseFile (ifcfg);
diff --git a/src/settings/plugins/ifnet/connection_parser.c b/src/settings/plugins/ifnet/connection_parser.c
index 651cd8ea71..ba76579a12 100644
--- a/src/settings/plugins/ifnet/connection_parser.c
+++ b/src/settings/plugins/ifnet/connection_parser.c
@@ -1629,7 +1629,7 @@ ifnet_update_connection_from_config_block (const char *conn_name,
id = connection_id_from_ifnet_name (conn_name);
uuid = g_strdup (ifnet_get_data (conn_name, "uuid"));
if (!uuid)
- uuid = nm_utils_uuid_generate_from_string (id);
+ uuid = nm_utils_uuid_generate_from_string (id, -1);
g_object_set (setting,
NM_SETTING_CONNECTION_TYPE, type,
diff --git a/src/settings/plugins/ifupdown/parser.c b/src/settings/plugins/ifupdown/parser.c
index c6421d92e9..9af11976c8 100644
--- a/src/settings/plugins/ifupdown/parser.c
+++ b/src/settings/plugins/ifupdown/parser.c
@@ -686,7 +686,7 @@ ifupdown_update_connection_from_if_block (NMConnection *connection,
idstr = g_strconcat ("Ifupdown (", block->name, ")", NULL);
uuid_base = idstr;
- uuid = nm_utils_uuid_generate_from_string (uuid_base);
+ uuid = nm_utils_uuid_generate_from_string (uuid_base, -1);
g_object_set (s_con,
NM_SETTING_CONNECTION_TYPE, type,
NM_SETTING_CONNECTION_INTERFACE_NAME, block->name,
diff --git a/src/settings/plugins/keyfile/reader.c b/src/settings/plugins/keyfile/reader.c
index 242ba570b3..94982cef39 100644
--- a/src/settings/plugins/keyfile/reader.c
+++ b/src/settings/plugins/keyfile/reader.c
@@ -1316,7 +1316,7 @@ nm_keyfile_plugin_connection_from_file (const char *filename, GError **error)
if (!nm_setting_connection_get_uuid (s_con)) {
char *hashed_uuid;
- hashed_uuid = nm_utils_uuid_generate_from_string (filename);
+ hashed_uuid = nm_utils_uuid_generate_from_string (filename, -1);
g_object_set (s_con, NM_SETTING_CONNECTION_UUID, hashed_uuid, NULL);
g_free (hashed_uuid);
}