aboutsummaryrefslogtreecommitdiff
path: root/elf/ldconfig.c
diff options
context:
space:
mode:
authorAurelien Jarno <aurelien@aurel32.net>2017-12-16 12:25:41 +0100
committerAurelien Jarno <aurelien@aurel32.net>2017-12-16 12:25:41 +0100
commit7d38eb38977980efe703eac93645b1af5a5f8a0c (patch)
treea3d28d675b75f4f6c2e8bb18e382f6e1bb46c47a /elf/ldconfig.c
parent2e77deef676677a7bed97d87d2519679654a2772 (diff)
downloadglibc-7d38eb38977980efe703eac93645b1af5a5f8a0c.tar
glibc-7d38eb38977980efe703eac93645b1af5a5f8a0c.tar.gz
glibc-7d38eb38977980efe703eac93645b1af5a5f8a0c.tar.bz2
glibc-7d38eb38977980efe703eac93645b1af5a5f8a0c.zip
ldconfig: set LC_COLLATE to C [BZ #22505]
ldconfig supports `include' directives and use the glob function to process them. The glob function sort entries according to the LC_COLLATE category. When using a standard "include /etc/ld.so.conf.d/*.conf" entry in /etc/ld.so.conf, the order therefore depends on the locale used to run ldconfig. A few examples of locale specific order that might be disturbing in that context compared to the C locale: - The cs_CZ and sk_SK locales sort the digits after the letters. - The et_EE locale sorts the 'z' between 's' and 't'. This patch fixes that by setting LC_COLLATE to C in order to process files in deterministic order, independently of the locale used to launch ldconfig. NOTE: This should NOT be backported to older release branches. Changelog: [BZ #22505] * elf/ldconfig.c (main): Call setlocale to force LC_COLLATE to C.
Diffstat (limited to 'elf/ldconfig.c')
-rw-r--r--elf/ldconfig.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/elf/ldconfig.c b/elf/ldconfig.c
index 89042351f8..2c01ab567b 100644
--- a/elf/ldconfig.c
+++ b/elf/ldconfig.c
@@ -1259,6 +1259,10 @@ main (int argc, char **argv)
/* Set locale via LC_ALL. */
setlocale (LC_ALL, "");
+ /* But keep the C collation. That way `include' directives using
+ globbing patterns are processed in a locale-independent order. */
+ setlocale (LC_COLLATE, "C");
+
/* Set the text message domain. */
textdomain (_libc_intl_domainname);