diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-12-15 17:47:05 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-12-15 17:47:05 +0900 |
commit | 62650f42586726dbf3feb9f8556363d17bedb0c6 (patch) | |
tree | 6e8f1f4ecd98999127cad3b2342b9f44107f6b0c /src/locale | |
parent | 5c33b6865246f0651ced43048fa1cb58cbc0c35b (diff) | |
parent | c8966e812e6dcbec95814e6e9c2ed2b351e269ac (diff) | |
download | systemd-62650f42586726dbf3feb9f8556363d17bedb0c6.tar.gz |
Merge pull request #25602 from fbuihuu/fix-TEST-73-LOCALE
localed: reload PID1 configuration after modifying /etc/locale.conf
Diffstat (limited to 'src/locale')
-rw-r--r-- | src/locale/localed.c | 20 |
1 files changed, 8 insertions, 12 deletions
diff --git a/src/locale/localed.c b/src/locale/localed.c index a2014e3da0..9b6890ebb4 100644 --- a/src/locale/localed.c +++ b/src/locale/localed.c @@ -32,7 +32,7 @@ #include "strv.h" #include "user-util.h" -static int locale_update_system_manager(sd_bus *bus, char **l_set, char **l_unset) { +static int reload_system_manager(sd_bus *bus) { _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; int r; @@ -43,21 +43,13 @@ static int locale_update_system_manager(sd_bus *bus, char **l_set, char **l_unse "org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", - "UnsetAndSetEnvironment"); - if (r < 0) - return bus_log_create_error(r); - - r = sd_bus_message_append_strv(m, l_unset); - if (r < 0) - return bus_log_create_error(r); - - r = sd_bus_message_append_strv(m, l_set); + "Reload"); if (r < 0) return bus_log_create_error(r); r = sd_bus_call(bus, m, 0, &error, NULL); if (r < 0) - return log_error_errno(r, "Failed to update the manager environment: %s", bus_error_message(&error, r)); + return log_error_errno(r, "Failed to reload system manager: %s", bus_error_message(&error, r)); return 0; } @@ -393,7 +385,11 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er return sd_bus_error_set_errnof(error, r, "Failed to set locale: %m"); } - (void) locale_update_system_manager(sd_bus_message_get_bus(m), l_set, l_unset); + /* Since we just updated the locale configuration file, ask the system manager to read it again to + * update its default locale settings. It's important to not use UnsetAndSetEnvironment or a similar + * method because in this case unsetting variables means restoring them to PID1 default values, which + * may be outdated, since locale.conf has just changed and PID1 hasn't read it */ + (void) reload_system_manager(sd_bus_message_get_bus(m)); if (!strv_isempty(l_set)) { _cleanup_free_ char *line = NULL; |