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.
+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.
* 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
/* 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);