yann@1
|
1 |
2000-08-27 Ulrich Drepper <drepper@redhat.com>
|
yann@1
|
2 |
|
yann@1
|
3 |
* intl/dcgettext.c (DCGETTEXT): Remove _nl_find_language in code
|
yann@1
|
4 |
to determine invalid locale name.
|
yann@1
|
5 |
* locale/findlocale.c (_nl_find_locale): Likewise.
|
yann@1
|
6 |
|
yann@1
|
7 |
2000-08-21 Ulrich Drepper <drepper@redhat.com>
|
yann@1
|
8 |
|
yann@1
|
9 |
* catgets/catgets.c (catopen): Filter out env_var values with / if
|
yann@1
|
10 |
necessary.
|
yann@1
|
11 |
|
yann@1
|
12 |
* locale/findlocale.c (_nl_find_locale): Move test for unusable
|
yann@1
|
13 |
locale name after all getenvs.
|
yann@1
|
14 |
|
yann@1
|
15 |
--- glibc-2.1.3/catgets/catgets.c 2000/01/29 11:56:33 1.15
|
yann@1
|
16 |
+++ glibc-2.1.3/catgets/catgets.c 2000/08/21 20:55:30 1.16
|
yann@1
|
17 |
@@ -50,7 +50,8 @@
|
yann@1
|
18 |
/* Use the LANG environment variable. */
|
yann@1
|
19 |
env_var = getenv ("LANG");
|
yann@1
|
20 |
|
yann@1
|
21 |
- if (env_var == NULL)
|
yann@1
|
22 |
+ if (env_var == NULL || *env_var == '\0'
|
yann@1
|
23 |
+ || (__libc_enable_secure && strchr (env_var, '/') != NULL))
|
yann@1
|
24 |
env_var = "C";
|
yann@1
|
25 |
|
yann@1
|
26 |
env_var_len = strlen (env_var) + 1;
|
yann@1
|
27 |
--- glibc-2.1.3/locale/findlocale.c 1999/11/08 23:45:13 1.10.2.1
|
yann@1
|
28 |
+++ glibc-2.1.3/locale/findlocale.c 2000/08/21 21:02:42 1.10.2.2
|
yann@1
|
29 |
@@ -1,4 +1,4 @@
|
yann@1
|
30 |
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
|
yann@1
|
31 |
+/* Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
|
yann@1
|
32 |
This file is part of the GNU C Library.
|
yann@1
|
33 |
Contributed by Ulrich Drepper <drepper@gnu.org>, 1996.
|
yann@1
|
34 |
|
yann@1
|
35 |
@@ -54,11 +54,7 @@
|
yann@1
|
36 |
const char *revision;
|
yann@1
|
37 |
struct loaded_l10nfile *locale_file;
|
yann@1
|
38 |
|
yann@1
|
39 |
- if ((*name)[0] == '\0'
|
yann@1
|
40 |
- /* In SUID binaries we must not allow people to access files
|
yann@1
|
41 |
- outside the dedicated locale directories. */
|
yann@1
|
42 |
- || (__libc_enable_secure
|
yann@1
|
43 |
- && memchr (*name, '/', _nl_find_language (*name) - *name) != NULL))
|
yann@1
|
44 |
+ if ((*name)[0] == '\0')
|
yann@1
|
45 |
{
|
yann@1
|
46 |
/* The user decides which locale to use by setting environment
|
yann@1
|
47 |
variables. */
|
yann@1
|
48 |
@@ -67,9 +63,12 @@
|
yann@1
|
49 |
*name = getenv (_nl_category_names[category]);
|
yann@1
|
50 |
if (*name == NULL || (*name)[0] == '\0')
|
yann@1
|
51 |
*name = getenv ("LANG");
|
yann@1
|
52 |
- if (*name == NULL || (*name)[0] == '\0')
|
yann@1
|
53 |
- *name = (char *) _nl_C_name;
|
yann@1
|
54 |
}
|
yann@1
|
55 |
+
|
yann@1
|
56 |
+ if (*name == NULL || (*name)[0] == '\0'
|
yann@1
|
57 |
+ || (__builtin_expect (__libc_enable_secure, 0)
|
yann@1
|
58 |
+ && strchr (*name, '/') != NULL))
|
yann@1
|
59 |
+ *name = (char *) _nl_C_name;
|
yann@1
|
60 |
|
yann@1
|
61 |
if (strcmp (*name, _nl_C_name) == 0 || strcmp (*name, _nl_POSIX_name) == 0)
|
yann@1
|
62 |
{
|
yann@1
|
63 |
--- glibc-2.1.3/intl/dcgettext.c Sun Aug 27 23:15:33 2000
|
yann@1
|
64 |
+++ glibc-2.1.3/intl/dcgettext.c Sun Aug 27 23:16:34 2000
|
yann@1
|
65 |
@@ -371,10 +371,7 @@
|
yann@1
|
66 |
|
yann@1
|
67 |
/* When this is a SUID binary we must not allow accessing files
|
yann@1
|
68 |
outside the dedicated directories. */
|
yann@1
|
69 |
- if (ENABLE_SECURE
|
yann@1
|
70 |
- && (memchr (single_locale, '/',
|
yann@1
|
71 |
- _nl_find_language (single_locale) - single_locale)
|
yann@1
|
72 |
- != NULL))
|
yann@1
|
73 |
+ if (ENABLE_SECURE && strchr (single_locale, '/') != NULL)
|
yann@1
|
74 |
/* Ingore this entry. */
|
yann@1
|
75 |
continue;
|
yann@1
|
76 |
}
|