patches/glibc/2.1.3/rh62-02-glibc-2.1.3-locale.patch
author "Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
Sat Jul 28 21:34:41 2007 +0000 (2007-07-28)
changeset 301 2be7232a73ac
permissions -rw-r--r--
Bump version to 0.2.2.
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
 	}