summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-12-19 09:56:35 +0100
committerThomas Haller <thaller@redhat.com>2022-12-19 11:29:18 +0100
commit0e63fe58a7ea38250d79214be22eb2eab3f524d6 (patch)
tree8253572e470db9327990aee063e7d41023ba476e
parent7d1cfec0b8154cd359f5ea3d3c80488572fb51e6 (diff)
downloadNetworkManager-0e63fe58a7ea38250d79214be22eb2eab3f524d6.tar.gz
dhcp/dhclient: avoid rewriting unchanged file in nm_dhcp_dhclient_save_duid()
It updates the file timestamp, which seems undesirable. Skip the update, if the content didn't change.
-rw-r--r--src/core/dhcp/nm-dhcp-dhclient-utils.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/core/dhcp/nm-dhcp-dhclient-utils.c b/src/core/dhcp/nm-dhcp-dhclient-utils.c
index ae6828ad0a..c959430b4e 100644
--- a/src/core/dhcp/nm-dhcp-dhclient-utils.c
+++ b/src/core/dhcp/nm-dhcp-dhclient-utils.c
@@ -654,7 +654,8 @@ nm_dhcp_dhclient_save_duid(const char *leasefile, GBytes *duid, GError **error)
gs_free const char **lines = NULL;
nm_auto_free_gstring GString *s = NULL;
const char *const *iter;
- gsize len = 0;
+ gs_free char *contents = NULL;
+ gsize contents_len = 0;
g_return_val_if_fail(leasefile != NULL, FALSE);
@@ -667,9 +668,7 @@ nm_dhcp_dhclient_save_duid(const char *leasefile, GBytes *duid, GError **error)
nm_assert(escaped_duid);
if (g_file_test(leasefile, G_FILE_TEST_EXISTS)) {
- gs_free char *contents = NULL;
-
- if (!g_file_get_contents(leasefile, &contents, &len, error)) {
+ if (!g_file_get_contents(leasefile, &contents, &contents_len, error)) {
g_prefix_error(error, "failed to read lease file %s: ", leasefile);
return FALSE;
}
@@ -677,7 +676,7 @@ nm_dhcp_dhclient_save_duid(const char *leasefile, GBytes *duid, GError **error)
lines = nm_strsplit_set_with_empty(contents, "\n\r");
}
- s = g_string_sized_new(len + 50);
+ s = g_string_sized_new(contents_len + 50);
g_string_append_printf(s, DEFAULT_DUID_PREFIX "%s\";\n", escaped_duid);
/* Preserve existing leasefile contents */
@@ -709,6 +708,11 @@ nm_dhcp_dhclient_save_duid(const char *leasefile, GBytes *duid, GError **error)
}
}
+ if (contents && strlen(contents) == contents_len && nm_streq(contents, s->str)) {
+ /* The file is already as we want it. We are done. */
+ return TRUE;
+ }
+
if (!g_file_set_contents(leasefile, s->str, -1, error)) {
g_prefix_error(error, "failed to set DUID in lease file %s: ", leasefile);
return FALSE;