From 628a2b30647c8184663b998a13589d580b903062 Mon Sep 17 00:00:00 2001
From: Martin Pitt <mpitt@debian.org>
Date: Mon, 10 Jun 2013 10:53:18 +0200
Subject: [PATCH] debian/maintscripts-functions, configure_cluster(): Do not
trust the locale from the environment, as programs like ssh and sudo
propagate remote and user locale by default. Instead, only use the locale
settings from /etc/environment and /etc/default/locale, to prevent trying to
configure the default cluster with a nonexisting or hard to predict locale.
(LP: #969462)
---
debian/changelog | 9 +++++++++
debian/maintscripts-functions | 25 ++++++++++++++++++++++---
2 files changed, 31 insertions(+), 3 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index c51b56c9..9ba84139 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,17 @@
postgresql-common (145) UNRELEASED; urgency=low
+ [ Christoph Berg ]
* pg_ctlcluster: Use "install" instead of File::Path to create
unix_socket_directory. (Introduced in 141, Closes: #710093)
+ [ Martin Pitt ]
+ * debian/maintscripts-functions, configure_cluster(): Do not trust the
+ locale from the environment, as programs like ssh and sudo propagate
+ remote and user locale by default. Instead, only use the locale settings
+ from /etc/environment and /etc/default/locale, to prevent trying to
+ configure the default cluster with a nonexisting or hard to predict
+ locale. (LP: #969462)
+
-- Christoph Berg <myon@debian.org> Sat, 01 Jun 2013 17:19:57 -0700
postgresql-common (144) unstable; urgency=low
diff --git a/debian/maintscripts-functions b/debian/maintscripts-functions
index e2661ea1..75fb8954 100644
--- a/debian/maintscripts-functions
+++ b/debian/maintscripts-functions
@@ -23,6 +23,23 @@ _remove_tsearch() {
fi
}
+# Determine and set system's default locale; we do not want to trust the
+# environment here, as ssh and sudo both propagate the user's locale from
+# potentially a remote host, and that might not even exist; also, we want to be
+# predictable. /etc/default/locale overrides /etc/environment. Note that
+# /etc/environment is not a shell script, so we must be careful with parsing.
+set_system_locale() {
+ loc_vars="LC_COLLATE LC_CTYPE LC_MONETARY LC_MESSAGES LC_NUMERIC LC_TIME LC_ALL LANG LANGUAGE"
+ unset $loc_vars
+ for v in $loc_vars; do
+ unset val
+ val=`pam_getenv -l $v` || true
+ [ -z "$val" ] || export $v="$val"
+ done
+ . /etc/default/locale
+ export $loc_vars
+}
+
# arguments: <major version> <most recently configured package version>
configure_version() {
VERSION="$1"
@@ -35,13 +52,15 @@ configure_version() {
# skip creating the main cluster when this is not the first install, or
# when explicitely disabled ($create is 1/0/"")
create=$(perl -I/usr/share/postgresql-common -mPgCommon -e 'print PgCommon::config_bool(PgCommon::get_conf_value 0, 0, "createcluster.conf", "create_main_cluster")')
- [ "$2" ] || [ "$create" = "0" ] || /usr/bin/pg_createcluster -u postgres $VERSION main || {
- echo "Error: could not create default cluster. Please create it manually with
+ if [ -z "$2" ] && [ "$create" != "0" ]; then
+ set_system_locale
+ /usr/bin/pg_createcluster -u postgres $VERSION main ||
+ echo "Error: could not create default cluster. Please create it manually with
pg_createcluster $VERSION main --start
or a similar command (see 'man pg_createcluster')." >&2
- }
+ fi
fi
_link_manpages "$VERSION" postmaster.1.gz "postgresql-$1" "postgresql-contrib-$1"
--
GitLab