diff options
author | Michael Biebl <biebl@debian.org> | 2017-05-11 23:28:39 +0200 |
---|---|---|
committer | Michael Biebl <biebl@debian.org> | 2017-05-12 01:25:54 +0200 |
commit | 15cc7d3d3d80780ec9fa3287ed6db65188dd3f96 (patch) | |
tree | de12c654f672533d6ee01f7af8f35280412cb8f9 | |
parent | 34bc0c7d337d0d3bf9aee372fe0d6e784e4503d3 (diff) |
core: fix reading device state file
Properly setup devices which were marked as managed=unknown when
restoring from state file.
-rw-r--r-- | debian/patches/core-fix-reading-device-state-file.patch | 64 | ||||
-rw-r--r-- | debian/patches/series | 1 |
2 files changed, 65 insertions, 0 deletions
diff --git a/debian/patches/core-fix-reading-device-state-file.patch b/debian/patches/core-fix-reading-device-state-file.patch new file mode 100644 index 000000000..b124884ab --- /dev/null +++ b/debian/patches/core-fix-reading-device-state-file.patch @@ -0,0 +1,64 @@ +From: Thomas Haller <thaller@redhat.com> +Date: Thu, 11 May 2017 19:40:55 +0200 +Subject: core: fix reading device state file + +For manged=unknown, we don't write the value to the +device state keyfile. The results in an empty file, +or at least, a keyfile that doesn't have device.managed +set. + +On read, we must treat a missing device.managed flag as +unknown, and not as unmanaged. Otherwise, on restart +a device becomes marked as explicitly unmanaged. + +This was broken by commit 142ebb1 "core: only persist explicit managed +state in device's state file", where we started conditionally +to no longer write the managed state. + +Reported-by: Michael Biebl <mbiebl@debian.org> +Fixes: 142ebb10376ec592593f15b0359f38be89c97620 +(cherry picked from commit 348ffdec183ee198499dad1365906e8d16ff4122) +(cherry picked from commit 33d3ec3b3e5d2e737afc8db6c64850e67db5c12d) +--- + src/nm-config.c | 24 +++++++++++++----------- + 1 file changed, 13 insertions(+), 11 deletions(-) + +diff --git a/src/nm-config.c b/src/nm-config.c +index 2cdf855..5033d5c 100644 +--- a/src/nm-config.c ++++ b/src/nm-config.c +@@ -1887,21 +1887,23 @@ _config_device_state_data_new (int ifindex, GKeyFile *kf) + nm_assert (ifindex > 0); + + if (kf) { +- gboolean managed; +- +- managed = nm_config_keyfile_get_boolean (kf, +- DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE, +- DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_MANAGED, +- FALSE); +- managed_type = managed +- ? NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED +- : NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED; +- +- if (managed) { ++ switch (nm_config_keyfile_get_boolean (kf, ++ DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE, ++ DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_MANAGED, ++ -1)) { ++ case TRUE: ++ managed_type = NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_MANAGED; + connection_uuid = nm_config_keyfile_get_value (kf, + DEVICE_RUN_STATE_KEYFILE_GROUP_DEVICE, + DEVICE_RUN_STATE_KEYFILE_KEY_DEVICE_CONNECTION_UUID, + NM_CONFIG_GET_VALUE_STRIP | NM_CONFIG_GET_VALUE_NO_EMPTY); ++ break; ++ case FALSE: ++ managed_type = NM_CONFIG_DEVICE_STATE_MANAGED_TYPE_UNMANAGED; ++ break; ++ case -1: ++ /* missing property in keyfile. */ ++ break; + } + + perm_hw_addr_fake = nm_config_keyfile_get_value (kf, diff --git a/debian/patches/series b/debian/patches/series index 01c14f38b..a9be5fd76 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -4,3 +4,4 @@ Fix-arping-path.patch Don-t-make-NetworkManager-D-Bus-activatable.patch systemd-Don-t-enable-NetworkManager-wait-online.serv.patch Fix-iscsiadm-path.patch +core-fix-reading-device-state-file.patch |