summaryrefslogtreecommitdiff
path: root/src/locale
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-12-15 17:47:05 +0900
committerGitHub <noreply@github.com>2022-12-15 17:47:05 +0900
commit62650f42586726dbf3feb9f8556363d17bedb0c6 (patch)
tree6e8f1f4ecd98999127cad3b2342b9f44107f6b0c /src/locale
parent5c33b6865246f0651ced43048fa1cb58cbc0c35b (diff)
parentc8966e812e6dcbec95814e6e9c2ed2b351e269ac (diff)
downloadsystemd-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.c20
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;