From 5bbe5886ed7d6ebe76d69f0ab548cab2f827843c Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 8 Dec 2008 12:48:27 +0000 Subject: [PATCH] 2.9-3 --- glibc-fixes1.patch | 887 +++++++++++++++++++++ glibc-nss_dns-gethostbyname4-disable.patch | 11 + glibc.spec | 11 +- 3 files changed, 908 insertions(+), 1 deletion(-) create mode 100644 glibc-fixes1.patch create mode 100644 glibc-nss_dns-gethostbyname4-disable.patch diff --git a/glibc-fixes1.patch b/glibc-fixes1.patch new file mode 100644 index 0000000..bccbea9 --- /dev/null +++ b/glibc-fixes1.patch @@ -0,0 +1,887 @@ +2008-12-07 Ulrich Drepper + + * resolv/res_send.c (send_dg): Use correct guards for SOCK_CLOEXEC + use. + + * resolv/res_init.c (__res_vinit): Always assign to statp->nscount + after reading name server list. + + * nis/nss_nis/nis-hosts.c (_nss_nis_gethostbyname4_r): Fix memory + handling for host name aliases. + +2008-11-24 Arkadiusz Miƛkiewicz + + * sysdeps/i386/dl-tlsdesc.S (_dl_tlsdesc_dynamic): Use LOAD_PIC_REG + instead of doing things manually. + +2008-11-26 Chris Steel + + * posix/regex_internal.h (build_wcs_upper_buffer): + Return type is reg_error_t. + +2008-12-05 Ulrich Drepper + + * posix/globtest.sh: Use mktemp to create temporary file and + directory. + + * sysdeps/unix/sysv/linux/bits/sched.h (__CPU_SET_S): Handle large + sets correctly. + (__CPU_CLR_S): Likewise. + (__CPU_ISSET_S): Likewise. + +2008-12-04 Ulrich Drepper + + * locale/programs/ld-address.c (DEFINE_LANGUAGE_CODE2): Define. + * locale/iso-639.def: Add Chhattisgarhi entry. + +2008-12-02 Ulrich Drepper + + * resolv/nss_dns/dns-host.c (_nss_dns_gethostbyname3_r): Recognize + ESRCH return value. + (_nss_dns_gethostbyname4_r): Likewise. + * resolv/res_init.c (__res_vinit): Initialize nscount to zero. + * sysdeps/posix/getaddrinfo.c (gaih_inet): In case we use + gethostbyname4_r, we don't have a separate IPv6 status, so copy + the no_data variable. + + * resolv/res_init.c (__res_vinit): Fill in IPv4 name server + information at the correct index. + +2008-12-01 Ulrich Drepper + + * resolv/res_send.c (send_dg): Create sockets with non-blocking + flag already set. + + * stdlib/setenv.c (unsetenv): Don't search environment if it does + not exist. + * stdlib/Makefile (tests): Add tst-unsetenv1. + * stdlib/tst-unsetenv1.c: New file. + +2008-11-29 Ulrich Drepper + + * login/utmp_file.c (file_writable): New variable. + (setutent_file): Don't try to open file for writing. + (pututline_file): Before writing, make descriptor writable if + necessary. + +2008-11-26 Ulrich Drepper + + * sysdeps/posix/getaddrinfo.c (getaddrinfo): Only restrict search + to IPv4 or IPv6 if an interface has been found. + +2008-11-26 Roland McGrath + + * elf/elf.h (NT_386_IOPERM): New macro. + (NT_PPC_VSX): New macro. + +localedata/ +2008-12-05 Ulrich Drepper + + * SUPPORTED (SUPPORTED-LOCALES): Add hne_IN. + + * locales/hne_IN: New file. + Contributed by Pravin Satpute . + +--- libc/elf/elf.h 1 Oct 2008 19:41:34 -0000 1.167 ++++ libc/elf/elf.h 26 Nov 2008 09:15:31 -0000 1.168 +@@ -608,7 +608,9 @@ typedef struct + #define NT_PRXFPREG 0x46e62b7f /* Contains copy of user_fxsr_struct */ + #define NT_PPC_VMX 0x100 /* PowerPC Altivec/VMX registers */ + #define NT_PPC_SPE 0x101 /* PowerPC SPE/EVR registers */ ++#define NT_PPC_VSX 0x102 /* PowerPC VSX registers */ + #define NT_386_TLS 0x200 /* i386 TLS slots (struct user_desc) */ ++#define NT_386_IOPERM 0x201 /* x86 io permission bitmap (1=deny) */ + + /* Legal values for the note segment descriptor types for object files. */ + +--- libc/locale/iso-639.def 4 Mar 2008 17:42:10 -0000 1.18 ++++ libc/locale/iso-639.def 5 Dec 2008 03:26:04 -0000 1.19 +@@ -1,8 +1,9 @@ + /* +- * Defines the languages codes and abbreviations according to ISO 639-[12]. ++ * Defines the languages codes and abbreviations according to ISO 639-[123]. + * This is used in ld-address.c (address_finish). + * + * Format is: ("English name", 639-1-code, 639-2/T-code, 639-2/B-code) ++ * For some languages which have no 639-2 code the 639-3 code is used. + * If you find something missing or wrong, please go to the URL + * http://www.gnu.org/software/libc/bugs.html and follow + * instructions there to file a bug report. +@@ -89,6 +90,7 @@ DEFINE_LANGUAGE_CODE ("Chamorro", ch, ch + DEFINE_LANGUAGE_CODE ("Chechen", ce, che, che) + DEFINE_LANGUAGE_CODE3 ("Cherokee", chr, chr) + DEFINE_LANGUAGE_CODE3 ("Cheyenne", chy, chy) ++DEFINE_LANGUAGE_CODE2 ("Chhattisgarhi", hne) /* ISO 639-3 */ + DEFINE_LANGUAGE_CODE3 ("Chibcha", chb, chb) + DEFINE_LANGUAGE_CODE ("Chichewa; Chewa; Nyanja", ny, nya, nya) + DEFINE_LANGUAGE_CODE ("Chinese", zh, zho, chi) +--- libc/locale/programs/ld-address.c 16 Jul 2007 00:54:59 -0000 1.25 ++++ libc/locale/programs/ld-address.c 5 Dec 2008 03:25:18 -0000 1.26 +@@ -57,6 +57,8 @@ static struct + { #Ab, #Term, #Lib }, + #define DEFINE_LANGUAGE_CODE3(Name, Term, Lib) \ + { "", #Term, #Lib }, ++#define DEFINE_LANGUAGE_CODE2(Name, Term) \ ++ { "", #Term, "" }, + #include "iso-639.def" + }; + +--- libc/localedata/SUPPORTED 16 Sep 2008 21:24:57 -0000 1.114 ++++ libc/localedata/SUPPORTED 6 Dec 2008 03:02:45 -0000 1.115 +@@ -222,6 +222,7 @@ ha_NG/UTF-8 \ + he_IL.UTF-8/UTF-8 \ + he_IL/ISO-8859-8 \ + hi_IN/UTF-8 \ ++hne_IN/UTF-8 \ + hr_HR.UTF-8/UTF-8 \ + hr_HR/ISO-8859-2 \ + hsb_DE/ISO-8859-2 \ +--- libc/localedata/locales/hne_IN 1 Jan 1970 00:00:00 -0000 ++++ libc/localedata/locales/hne_IN 6 Dec 2008 02:13:13 -0000 1.1 +@@ -0,0 +1,180 @@ ++comment_char % ++escape_char / ++% Chhattisgarhi language locale for India. ++% Contributed by Pravin Satpute and ++% Ravishankar Shrivastava . ++ ++LC_IDENTIFICATION ++title "Chhattisgarhi language locale for India" ++source "Red Hat, Pune" ++address "Marisfot III, Marigold Premises, East-Wing, Kalyaninagar, Pune, India-411014" ++contact "" ++email "bug-glibc-locales@gnu.org" ++tel "" ++fax "" ++language "Chhattisgarhi" ++territory "India" ++revision "1.0" ++date "2008-12-03" ++% ++category "hne_IN:2008";LC_IDENTIFICATION ++category "hne_IN:2008";LC_CTYPE ++category "hne_IN:2008";LC_COLLATE ++category "hne_IN:2008";LC_TIME ++category "hne_IN:2008";LC_NUMERIC ++category "hne_IN:2008";LC_MONETARY ++category "hne_IN:2008";LC_MESSAGES ++category "hne_IN:2008";LC_PAPER ++category "hne_IN:2008";LC_NAME ++category "hne_IN:2008";LC_ADDRESS ++category "hne_IN:2008";LC_TELEPHONE ++ ++END LC_IDENTIFICATION ++ ++LC_CTYPE ++copy "hi_IN" ++END LC_CTYPE ++ ++LC_COLLATE ++copy "hi_IN" ++END LC_COLLATE ++ ++LC_MONETARY ++copy "hi_IN" ++END LC_MONETARY ++ ++ ++LC_NUMERIC ++copy "hi_IN" ++END LC_NUMERIC ++ ++ ++LC_TIME ++% This is the POSIX Locale definition for the LC_TIME category. ++% These are generated based on XML base Locale difintion file ++% for IBM Class for Unicode/Java ++% ++% Abbreviated weekday names (%a) ++abday "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "" ++% ++% Full weekday names (%A) ++day "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "" ++% ++% Abbreviated month names (%b) ++abmon "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";"";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "" ++% ++% Full month names (%B) ++mon "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";"";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "";/ ++ "" ++% ++% Equivalent of AM PM ++am_pm "";/ ++ "" ++% ++% Appropriate date and time representation ++% %A %d %b %Y%I:%M:%S %Z ++d_t_fmt "/ ++/ ++" ++% ++% Appropriate date representation ++% %A %d %b %Y ++d_fmt "/ ++" ++% ++% Appropriate time representation ++% %I:%M:%S %Z ++t_fmt "/ ++" ++% ++% Appropriate 12 h time representation (%r) ++t_fmt_ampm "/ ++" ++% ++date_fmt "/ ++/ ++" ++END LC_TIME ++ ++ ++LC_MESSAGES ++yesexpr "" ++noexpr "" ++yesstr "" ++nostr "" ++END LC_MESSAGES ++ ++ ++LC_PAPER ++copy "hi_IN" ++END LC_PAPER ++ ++ ++LC_NAME ++% This is the ISO_IEC TR14652 Locale definition for the ++% LC_NAME category. ++% ++name_fmt "/ ++" ++name_gen "" ++name_mr "" ++name_mrs "" ++name_miss "" ++name_ms "" ++ ++END LC_NAME ++ ++ ++LC_ADDRESS ++% This is the ISO_IEC TR14652 Locale definition for the ++% LC_ADDRESS ++postal_fmt "/ ++" ++ ++country_ab2 "" ++country_ab3 "" ++country_num 356 ++lang_term "" ++ ++END LC_ADDRESS ++ ++ ++LC_TELEPHONE ++copy "hi_IN" ++END LC_TELEPHONE ++ ++ ++LC_MEASUREMENT ++copy "hi_IN" ++END LC_MEASUREMENT +--- libc/localedata/locales/sd_IN 16 Sep 2008 00:12:28 -0000 1.1 ++++ libc/localedata/locales/sd_IN 5 Dec 2008 06:33:30 -0000 1.2 +@@ -7,7 +7,7 @@ escape_char / + LC_IDENTIFICATION + + title "Sindhi language locale for India" +-source "Redhat, Pune" ++source "Red Hat, Pune" + address "Marisfot III, Marigold Premises, East-Wing, Kalyaninagar, Pune, India-411014" + contact "" + email "bug-glibc-locales@gnu.org" +--- libc/localedata/locales/sd_IN@devanagari 16 Sep 2008 00:09:22 -0000 1.2 ++++ libc/localedata/locales/sd_IN@devanagari 5 Dec 2008 06:33:30 -0000 1.3 +@@ -6,7 +6,7 @@ escape_char / + + LC_IDENTIFICATION + title "Sindhi language locale for India" +-source "Redhat, Pune" ++source "Red Hat, Pune" + address "Marisfot III, Marigold Premises, East-Wing, Kalyaninagar, Pune, India-411014" + contact "" + email "bug-glibc-locales@gnu.org" +--- libc/login/utmp_file.c 14 Aug 2008 04:22:59 -0000 1.22 ++++ libc/login/utmp_file.c 30 Nov 2008 06:56:18 -0000 1.23 +@@ -36,6 +36,7 @@ + + /* Descriptor for the file and position. */ + static int file_fd = -1; ++static bool file_writable; + static off64_t file_offset; + + /* Cache for the last read entry. */ +@@ -138,7 +139,6 @@ setutent_file (void) + if (file_fd < 0) + { + const char *file_name; +- int result; + + file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name); + +@@ -147,14 +147,10 @@ setutent_file (void) + #else + # define O_flags O_LARGEFILE + #endif +- file_fd = open_not_cancel_2 (file_name, O_RDWR | O_flags); ++ file_writable = false; ++ file_fd = open_not_cancel_2 (file_name, O_RDONLY | O_flags); + if (file_fd == -1) +- { +- /* Hhm, read-write access did not work. Try read-only. */ +- file_fd = open_not_cancel_2 (file_name, O_RDONLY | O_flags); +- if (file_fd == -1) +- return 0; +- } ++ return 0; + + #ifndef __ASSUME_O_CLOEXEC + # ifdef O_CLOEXEC +@@ -162,7 +158,7 @@ setutent_file (void) + # endif + { + /* We have to make sure the file is `closed on exec'. */ +- result = fcntl_not_cancel (file_fd, F_GETFD, 0); ++ int result = fcntl_not_cancel (file_fd, F_GETFD, 0); + if (result >= 0) + { + # ifdef O_CLOEXEC +@@ -404,6 +400,52 @@ pututline_file (const struct utmp *data) + + assert (file_fd >= 0); + ++ if (! file_writable) ++ { ++ /* We must make the file descriptor writable before going on. */ ++ const char *file_name = TRANSFORM_UTMP_FILE_NAME (__libc_utmp_file_name); ++ ++ int new_fd = open_not_cancel_2 (file_name, O_RDWR | O_flags); ++ if (new_fd == -1) ++ return NULL; ++ ++#ifndef __ASSUME_O_CLOEXEC ++# ifdef O_CLOEXEC ++ if (__have_o_cloexec <= 0) ++# endif ++ { ++ /* We have to make sure the file is `closed on exec'. */ ++ int result = fcntl_not_cancel (file_fd, F_GETFD, 0); ++ if (result >= 0) ++ { ++# ifdef O_CLOEXEC ++ if (__have_o_cloexec == 0) ++ __have_o_cloexec = (result & FD_CLOEXEC) ? 1 : -1; ++ ++ if (__have_o_cloexec < 0) ++# endif ++ result = fcntl_not_cancel (file_fd, F_SETFD, ++ result | FD_CLOEXEC); ++ } ++ ++ if (result == -1) ++ { ++ close_not_cancel_no_status (file_fd); ++ return NULL; ++ } ++ } ++#endif ++ ++ if (__lseek64 (new_fd, __lseek64 (file_fd, 0, SEEK_CUR), SEEK_SET) == -1 ++ || dup2 (new_fd, file_fd) < 0) ++ { ++ close_not_cancel_no_status (new_fd); ++ return NULL; ++ } ++ close_not_cancel_no_status (new_fd); ++ file_writable = true; ++ } ++ + /* Find the correct place to insert the data. */ + if (file_offset > 0 + && ( +--- libc/nis/nss_nis/nis-hosts.c 10 May 2008 23:23:25 -0000 1.29 ++++ libc/nis/nss_nis/nis-hosts.c 7 Dec 2008 17:06:43 -0000 1.31 +@@ -485,24 +485,6 @@ _nss_nis_gethostbyname4_r (const char *n + return retval; + } + +- struct parser_data data; +- struct hostent host; +- int parse_res = parse_line (result, &host, &data, buflen, errnop, AF_UNSPEC, +- 0); +- if (__builtin_expect (parse_res < 1, 0)) +- { +- if (parse_res == -1) +- { +- *herrnop = NETDB_INTERNAL; +- return NSS_STATUS_TRYAGAIN; +- } +- else +- { +- *herrnop = HOST_NOT_FOUND; +- return NSS_STATUS_NOTFOUND; +- } +- } +- + if (*pat == NULL) + { + uintptr_t pad = (-(uintptr_t) buffer +@@ -524,16 +506,47 @@ _nss_nis_gethostbyname4_r (const char *n + buflen -= sizeof (struct gaih_addrtuple); + } + +- (*pat)->next = NULL; +- size_t h_name_len = strlen (host.h_name); +- if (h_name_len >= buflen) ++ uintptr_t pad = -(uintptr_t) buffer % __alignof__ (struct parser_data); ++ buffer += pad; ++ ++ struct parser_data *data = (void *) buffer; ++ ++ if (__builtin_expect (buflen < sizeof *data + 1 + pad, 0)) + goto erange; +- (*pat)->name = memcpy (buffer, host.h_name, h_name_len + 1); ++ buflen -= pad; ++ ++ struct hostent host; ++ int parse_res = parse_line (result, &host, data, buflen, errnop, AF_UNSPEC, ++ 0); ++ if (__builtin_expect (parse_res < 1, 0)) ++ { ++ if (parse_res == -1) ++ { ++ *herrnop = NETDB_INTERNAL; ++ return NSS_STATUS_TRYAGAIN; ++ } ++ else ++ { ++ *herrnop = HOST_NOT_FOUND; ++ return NSS_STATUS_NOTFOUND; ++ } ++ } ++ ++ (*pat)->next = NULL; + (*pat)->family = host.h_addrtype; + memcpy ((*pat)->addr, host.h_addr_list[0], host.h_length); + (*pat)->scopeid = 0; + assert (host.h_addr_list[1] == NULL); + ++ /* Undo the alignment for parser_data. */ ++ buffer -= pad; ++ buflen += pad; ++ ++ size_t h_name_len = strlen (host.h_name) + 1; ++ if (h_name_len >= buflen) ++ goto erange; ++ (*pat)->name = memcpy (buffer, host.h_name, h_name_len); ++ + free (result); + + return NSS_STATUS_SUCCESS; +--- libc/posix/globtest.sh 14 Feb 2007 19:52:33 -0000 1.26 ++++ libc/posix/globtest.sh 6 Dec 2008 06:05:39 -0000 1.27 +@@ -1,4 +1,4 @@ +-#! /bin/sh ++#! /bin/bash + + common_objpfx=$1; shift + elf_objpfx=$1; shift +@@ -28,14 +28,11 @@ export LANG + + # Create the arena + : ${TMPDIR=/tmp} +-testdir=$TMPDIR/globtest-dir +-testout=$TMPDIR/globtest-out ++testdir=$(mktemp -d $TMPDIR/globtest-dir.XXXXXX) ++testout=$(mktemp $TMPDIR/globtest-out.XXXXXX) + + trap 'chmod 777 $testdir/noread; rm -fr $testdir $testout' 1 2 3 15 + +-test -d $testdir/noread && chmod 777 $testdir/noread +-rm -fr $testdir 2>/dev/null +-mkdir $testdir + echo 1 > $testdir/file1 + echo 2 > $testdir/file2 + echo 3 > $testdir/-file3 +--- libc/posix/regex_internal.h 26 Aug 2007 01:35:05 -0000 1.74 ++++ libc/posix/regex_internal.h 6 Dec 2008 00:12:55 -0000 1.75 +@@ -391,7 +391,8 @@ static reg_errcode_t re_string_realloc_b + internal_function; + # ifdef RE_ENABLE_I18N + static void build_wcs_buffer (re_string_t *pstr) internal_function; +-static int build_wcs_upper_buffer (re_string_t *pstr) internal_function; ++static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr) ++ internal_function; + # endif /* RE_ENABLE_I18N */ + static void build_upper_buffer (re_string_t *pstr) internal_function; + static void re_string_translate_buffer (re_string_t *pstr) internal_function; +--- libc/resolv/res_init.c 7 Apr 2008 17:20:25 -0000 1.47 ++++ libc/resolv/res_init.c 8 Dec 2008 03:59:05 -0000 1.50 +@@ -183,7 +183,7 @@ __res_vinit(res_state statp, int preinit + #endif + statp->nsaddr.sin_family = AF_INET; + statp->nsaddr.sin_port = htons(NAMESERVER_PORT); +- statp->nscount = 1; ++ statp->nscount = 0; + statp->ndots = 1; + statp->pfcode = 0; + statp->_vcsock = -1; +@@ -314,9 +314,9 @@ __res_vinit(res_state statp, int preinit + cp++; + if ((*cp != '\0') && (*cp != '\n') + && __inet_aton(cp, &a)) { +- statp->nsaddr_list[nserv].sin_addr = a; +- statp->nsaddr_list[nserv].sin_family = AF_INET; +- statp->nsaddr_list[nserv].sin_port = ++ statp->nsaddr_list[nservall].sin_addr = a; ++ statp->nsaddr_list[nservall].sin_family = AF_INET; ++ statp->nsaddr_list[nservall].sin_port = + htons(NAMESERVER_PORT); + nserv++; + #ifdef _LIBC +@@ -420,8 +420,7 @@ __res_vinit(res_state statp, int preinit + continue; + } + } +- if (nserv > 1) +- statp->nscount = nserv; ++ statp->nscount = nserv; + #ifdef _LIBC + if (nservall - nserv > 0) { + statp->_u._ext.nscount6 = nservall - nserv; +--- libc/resolv/res_send.c 31 Oct 2008 17:36:29 -0000 1.62 ++++ libc/resolv/res_send.c 8 Dec 2008 04:08:41 -0000 1.64 +@@ -95,6 +95,7 @@ static const char rcsid[] = "$BINDId: re + #include + #include + #include ++#include + + #if PACKETSZ > 65536 + #define MAXPACKET PACKETSZ +@@ -103,6 +104,13 @@ static const char rcsid[] = "$BINDId: re + #endif + + ++#ifndef __ASSUME_SOCK_CLOEXEC ++static int __have_o_nonblock; ++#else ++# define __have_o_nonblock 0 ++#endif ++ ++ + /* From ev_streams.c. */ + + static inline void +@@ -920,8 +928,20 @@ send_dg(res_state statp, + if (EXT(statp).nssocks[ns] == -1) { + /* only try IPv6 if IPv6 NS and if not failed before */ + if ((EXT(statp).nscount6 > 0) && !statp->ipv6_unavail) { +- EXT(statp).nssocks[ns] = +- socket(PF_INET6, SOCK_DGRAM, 0); ++ if (__have_o_nonblock >= 0) { ++ EXT(statp).nssocks[ns] = ++ socket(PF_INET6, SOCK_DGRAM|SOCK_NONBLOCK, ++ 0); ++#ifndef __ASSUME_SOCK_CLOEXEC ++ if (__have_o_nonblock == 0) ++ __have_o_nonblock ++ = (EXT(statp).nssocks[ns] == -1 ++ && errno == EINVAL ? -1 : 1); ++#endif ++ } ++ if (__have_o_nonblock < 0) ++ EXT(statp).nssocks[ns] = ++ socket(PF_INET6, SOCK_DGRAM, 0); + if (EXT(statp).nssocks[ns] < 0) + statp->ipv6_unavail = errno == EAFNOSUPPORT; + /* If IPv6 socket and nsap is IPv4, make it +@@ -929,8 +949,22 @@ send_dg(res_state statp, + else if (nsap->sin6_family == AF_INET) + convaddr4to6(nsap); + } +- if (EXT(statp).nssocks[ns] < 0) +- EXT(statp).nssocks[ns] = socket(PF_INET, SOCK_DGRAM, 0); ++ if (EXT(statp).nssocks[ns] < 0) { ++ if (__have_o_nonblock >= 0) { ++ EXT(statp).nssocks[ns] ++ = socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, ++ 0); ++#ifndef __ASSUME_SOCK_CLOEXEC ++ if (__have_o_nonblock == 0) ++ __have_o_nonblock ++ = (EXT(statp).nssocks[ns] == -1 ++ && errno == EINVAL ? -1 : 1); ++#endif ++ } ++ if (__have_o_nonblock < 0) ++ EXT(statp).nssocks[ns] ++ = socket(PF_INET, SOCK_DGRAM, 0); ++ } + if (EXT(statp).nssocks[ns] < 0) { + *terrno = errno; + Perror(statp, stderr, "socket(dg)", errno); +@@ -955,13 +989,15 @@ send_dg(res_state statp, + __res_iclose(statp, false); + return (0); + } +- /* Make socket non-blocking. */ +- int fl = __fcntl (EXT(statp).nssocks[ns], F_GETFL); +- if (fl != -1) +- __fcntl (EXT(statp).nssocks[ns], F_SETFL, +- fl | O_NONBLOCK); +- Dprint(statp->options & RES_DEBUG, +- (stdout, ";; new DG socket\n")) ++ if (__have_o_nonblock < 0) { ++ /* Make socket non-blocking. */ ++ int fl = __fcntl (EXT(statp).nssocks[ns], F_GETFL); ++ if (fl != -1) ++ __fcntl (EXT(statp).nssocks[ns], F_SETFL, ++ fl | O_NONBLOCK); ++ Dprint(statp->options & RES_DEBUG, ++ (stdout, ";; new DG socket\n")) ++ } + } + + /* +--- libc/resolv/nss_dns/dns-host.c 12 Nov 2008 07:52:20 -0000 1.54 ++++ libc/resolv/nss_dns/dns-host.c 3 Dec 2008 07:09:26 -0000 1.55 +@@ -198,8 +198,14 @@ _nss_dns_gethostbyname3_r (const char *n + 1024, &host_buffer.ptr, NULL, NULL, NULL); + if (n < 0) + { +- status = (errno == ECONNREFUSED +- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND); ++ if (errno == ESRCH) ++ { ++ status = NSS_STATUS_TRYAGAIN; ++ h_errno = TRY_AGAIN; ++ } ++ else ++ status = (errno == ECONNREFUSED ++ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND); + *h_errnop = h_errno; + if (h_errno == TRY_AGAIN) + *errnop = EAGAIN; +@@ -304,8 +310,14 @@ _nss_dns_gethostbyname4_r (const char *n + &ans2p, &nans2p, &resplen2); + if (n < 0) + { +- status = (errno == ECONNREFUSED +- ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND); ++ if (errno == ESRCH) ++ { ++ status = NSS_STATUS_TRYAGAIN; ++ h_errno = TRY_AGAIN; ++ } ++ else ++ status = (errno == ECONNREFUSED ++ ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND); + *herrnop = h_errno; + if (h_errno == TRY_AGAIN) + *errnop = EAGAIN; +--- libc/stdlib/Makefile 8 Mar 2008 21:31:19 -0000 1.122 ++++ libc/stdlib/Makefile 2 Dec 2008 02:27:21 -0000 1.123 +@@ -69,7 +69,7 @@ tests := tst-strtol tst-strtod testmb t + test-a64l tst-qsort tst-system testmb2 bug-strtod2 \ + tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \ + tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2 \ +- tst-makecontext2 tst-strtod6 ++ tst-makecontext2 tst-strtod6 tst-unsetenv1 + + include ../Makeconfig + +--- libc/stdlib/setenv.c 14 Dec 2005 10:44:05 -0000 1.1 ++++ libc/stdlib/setenv.c 2 Dec 2008 01:39:44 -0000 1.2 +@@ -292,19 +292,20 @@ unsetenv (name) + LOCK; + + ep = __environ; +- while (*ep != NULL) +- if (!strncmp (*ep, name, len) && (*ep)[len] == '=') +- { +- /* Found it. Remove this pointer by moving later ones back. */ +- char **dp = ep; +- +- do +- dp[0] = dp[1]; +- while (*dp++); +- /* Continue the loop in case NAME appears again. */ +- } +- else +- ++ep; ++ if (ep != NULL) ++ while (*ep != NULL) ++ if (!strncmp (*ep, name, len) && (*ep)[len] == '=') ++ { ++ /* Found it. Remove this pointer by moving later ones back. */ ++ char **dp = ep; ++ ++ do ++ dp[0] = dp[1]; ++ while (*dp++); ++ /* Continue the loop in case NAME appears again. */ ++ } ++ else ++ ++ep; + + UNLOCK; + +--- libc/stdlib/tst-unsetenv1.c 1 Jan 1970 00:00:00 -0000 ++++ libc/stdlib/tst-unsetenv1.c 2 Dec 2008 02:27:12 -0000 1.1 +@@ -0,0 +1,12 @@ ++#include ++ ++static int ++do_test (void) ++{ ++ clearenv (); ++ unsetenv ("FOO"); ++ return 0; ++} ++ ++#define TEST_FUNCTION do_test () ++#include "../test-skeleton.c" +--- libc/sysdeps/i386/dl-tlsdesc.S 13 May 2008 05:33:06 -0000 1.1 ++++ libc/sysdeps/i386/dl-tlsdesc.S 6 Dec 2008 00:15:17 -0000 1.2 +@@ -128,8 +128,7 @@ _dl_tlsdesc_dynamic: + .Lslow: + cfi_adjust_cfa_offset (28) + movl %ebx, 16(%esp) +- call __i686.get_pc_thunk.bx +- addl $_GLOBAL_OFFSET_TABLE_, %ebx ++ LOAD_PIC_REG (bx) + call ___tls_get_addr@PLT + movl 16(%esp), %ebx + jmp .Lret +--- libc/sysdeps/posix/getaddrinfo.c 30 Jul 2008 19:14:22 -0000 1.136 ++++ libc/sysdeps/posix/getaddrinfo.c 3 Dec 2008 07:04:10 -0000 1.139 +@@ -733,6 +733,8 @@ gaih_inet (const char *name, const struc + tmpbuflen, 2 * tmpbuflen); + } + ++ no_inet6_data = no_data; ++ + if (status == NSS_STATUS_SUCCESS) + { + if ((req->ai_flags & AI_CANONNAME) != 0 && canon == NULL) +@@ -2108,7 +2110,7 @@ getaddrinfo (const char *name, const cha + { + /* If we haven't seen both IPv4 and IPv6 interfaces we can + narrow down the search. */ +- if (! seen_ipv4 || ! seen_ipv6) ++ if ((! seen_ipv4 || ! seen_ipv6) && (seen_ipv4 || seen_ipv6)) + { + local_hints = *hints; + local_hints.ai_family = seen_ipv4 ? PF_INET : PF_INET6; +--- libc/sysdeps/unix/sysv/linux/bits/sched.h 13 Nov 2008 19:56:57 -0000 1.31 ++++ libc/sysdeps/unix/sysv/linux/bits/sched.h 6 Dec 2008 05:59:22 -0000 1.33 +@@ -131,26 +131,31 @@ typedef struct + do { \ + size_t __i; \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ +- cpu_set_t *__arr = (cpusetp); \ ++ __cpu_mask *__bits = (cpusetp)->__bits; \ + for (__i = 0; __i < __imax; ++__i) \ +- __arr->__bits[__i] = 0; \ ++ __bits[__i] = 0; \ + } while (0) + # endif + # define __CPU_SET_S(cpu, setsize, cpusetp) \ + (__extension__ \ + ({ size_t __cpu = (cpu); \ + __cpu < 8 * (setsize) \ +- ? ((cpusetp)->__bits[__CPUELT (__cpu)] |= __CPUMASK (__cpu)) : 0; })) ++ ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ ++ |= __CPUMASK (__cpu)) \ ++ : 0; })) + # define __CPU_CLR_S(cpu, setsize, cpusetp) \ + (__extension__ \ + ({ size_t __cpu = (cpu); \ + __cpu < 8 * (setsize) \ +- ? ((cpusetp)->__bits[__CPUELT (__cpu)] &= ~__CPUMASK (__cpu)) : 0; })) ++ ? (((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ ++ &= ~__CPUMASK (__cpu)) \ ++ : 0; })) + # define __CPU_ISSET_S(cpu, setsize, cpusetp) \ + (__extension__ \ + ({ size_t __cpu = (cpu); \ + __cpu < 8 * (setsize) \ +- ? (((cpusetp)->__bits[__CPUELT (__cpu)] & __CPUMASK (__cpu))) != 0 \ ++ ? ((((__cpu_mask *) ((cpusetp)->__bits))[__CPUELT (__cpu)] \ ++ & __CPUMASK (__cpu))) != 0 \ + : 0; })) + + # define __CPU_COUNT_S(setsize, cpusetp) \ +@@ -162,12 +167,12 @@ typedef struct + # else + # define __CPU_EQUAL_S(setsize, cpusetp1, cpusetp2) \ + (__extension__ \ +- ({ cpu_set_t *__arr1 = (cpusetp1); \ +- cpu_set_t *__arr2 = (cpusetp2); \ ++ ({ __cpu_mask *__arr1 = (cpusetp1)->__bits; \ ++ __cpu_mask *__arr2 = (cpusetp2)->__bits; \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ + size_t __i; \ + for (__i = 0; __i < __imax; ++__i) \ +- if (__arr1->__bits[__i] != __arr2->__bits[__i]) \ ++ if (__bits[__i] != __bits[__i]) \ + break; \ + __i == __imax; })) + # endif +@@ -175,12 +180,12 @@ typedef struct + # define __CPU_OP_S(setsize, destset, srcset1, srcset2, op) \ + (__extension__ \ + ({ cpu_set_t *__dest = (destset); \ +- cpu_set_t *__arr1 = (srcset1); \ +- cpu_set_t *__arr2 = (srcset2); \ ++ __cpu_mask *__arr1 = (srcset1)->__bits; \ ++ __cpu_mask *__arr2 = (srcset2)->__bits; \ + size_t __imax = (setsize) / sizeof (__cpu_mask); \ + size_t __i; \ + for (__i = 0; __i < __imax; ++__i) \ +- __dest->__bits[__i] = __arr1->__bits[__i] op __arr2->__bits[__i]; \ ++ ((__cpu_mask *) __dest->__bits)[__i] = __arr1[__i] op __arr2[__i]; \ + __dest; })) + + # define __CPU_ALLOC_SIZE(count) \ diff --git a/glibc-nss_dns-gethostbyname4-disable.patch b/glibc-nss_dns-gethostbyname4-disable.patch new file mode 100644 index 0000000..77aff31 --- /dev/null +++ b/glibc-nss_dns-gethostbyname4-disable.patch @@ -0,0 +1,11 @@ +--- libc/resolv/Versions 2008-08-02 10:26:09.000000000 +0200 ++++ libc/resolv/Versions 2008-12-08 12:51:53.000000000 +0100 +@@ -102,7 +102,7 @@ libnss_dns { + _nss_dns_gethostbyname_r; _nss_dns_getnetbyaddr_r; + _nss_dns_getnetbyname_r; _nss_dns_getcanonname_r; + _nss_dns_gethostbyaddr2_r; +- _nss_dns_gethostbyname4_r; ++# _nss_dns_gethostbyname4_r; + } + } + diff --git a/glibc.spec b/glibc.spec index 75dcb40..7b02c34 100644 --- a/glibc.spec +++ b/glibc.spec @@ -23,7 +23,7 @@ Summary: The GNU libc libraries Name: glibc Version: 2.9 -Release: 2 +Release: 3 # GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries. # Things that are linked directly into dynamically linked programs # and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional @@ -41,6 +41,8 @@ Source2: %(echo %{glibcsrcdir} | sed s/glibc-/glibc-libidn-/).tar.bz2 Source3: %{glibcname}-fedora-%{glibcdate}.tar.bz2 Patch0: %{glibcname}-fedora.patch Patch1: %{name}-ia64-lib64.patch +Patch2: glibc-fixes1.patch +Patch3: glibc-nss_dns-gethostbyname4-disable.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Obsoletes: glibc-profile < 2.4 Provides: ldconfig @@ -222,6 +224,8 @@ package or when debugging this package. %patch1 -p1 %endif %endif +%patch2 -p1 +%patch3 -p1 # A lot of programs still misuse memcpy when they have to use # memmove. The memcpy implementation below is not tolerant at @@ -988,6 +992,11 @@ rm -f *.filelist* %endif %changelog +* Mon Dec 8 2008 Jakub Jelinek 2.9-3 +- temporarily disable _nss_dns_gethostbyname4_r (#459756) +- NIS hostname lookup fixes (#473073, #474800, BZ#7058) +- fix unsetenv (#472941) + * Thu Nov 13 2008 Jakub Jelinek 2.9-2 - glibc 2.9 release - fix CPU_ALLOC_SIZE on 32-bit arches (BZ#7029)