diff options
author | Aurelien Jarno <aurelien@aurel32.net> | 2017-12-16 12:25:41 +0100 |
---|---|---|
committer | Aurelien Jarno <aurelien@aurel32.net> | 2017-12-16 12:25:41 +0100 |
commit | 7d38eb38977980efe703eac93645b1af5a5f8a0c (patch) | |
tree | a3d28d675b75f4f6c2e8bb18e382f6e1bb46c47a | |
parent | 2e77deef676677a7bed97d87d2519679654a2772 (diff) | |
download | glibc-7d38eb38977980efe703eac93645b1af5a5f8a0c.zip glibc-7d38eb38977980efe703eac93645b1af5a5f8a0c.tar.gz glibc-7d38eb38977980efe703eac93645b1af5a5f8a0c.tar.bz2 |
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.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | elf/ldconfig.c | 4 |
3 files changed, 13 insertions, 0 deletions
@@ -1,3 +1,8 @@ +2017-12-16 Aurelien Jarno <aurelien@aurel32.net> + + [BZ #22505] + * elf/ldconfig.c (main): Call setlocale to force LC_COLLATE to C. + 2017-12-16 Rajalakshmi Srinivasaraghavan <raji@linux.vnet.ibm.com> * sysdeps/s390/fpu/libm-test-ulps: Update. @@ -63,6 +63,10 @@ Major new features: * Optimized memcpy, mempcpy, memmove, and memset for sparc M7. +* The ldconfig utility now processes `include' directives using the C/POSIX + collation ordering. Previous glibc versions used locale-specific + ordering, the change might break systems that relied on that. + Deprecated and removed features, and other changes affecting compatibility: * On GNU/Linux, the obsolete Linux constant PTRACE_SEIZE_DEVEL is no longer diff --git a/elf/ldconfig.c b/elf/ldconfig.c index 8904235..2c01ab5 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); |