Hello community,
here is the log from the commit of package glibc for openSUSE:Factory
checked in at Wed Jan 14 17:41:29 CET 2009.
--------
--- glibc/glibc.changes 2008-12-08 14:07:02.000000000 +0100
+++ /mounts/work_src_done/STABLE/glibc/glibc.changes 2009-01-09 13:14:36.301121000 +0100
@@ -1,0 +2,9 @@
+Fri Jan 9 13:12:21 CET 2009 - pbaudis@suse.cz
+
+- Fix unsetenv() crashing after clearenv()
+- Backport various DNS-related fixes from CVS
+- Disable parallel A-AAAA queries - revert to the glibc-2.9 behaviour
+ of sending the queries sequentially [bnc#442572]
+- Fix fp register protection on power6 setcontext() [bnc#464738]
+
+-------------------------------------------------------------------
calling whatdependson for head-i586
New:
----
glibc-2.10-dns-fixpack.diff
glibc-2.10-dns-no-gethostbyname4.diff
glibc-2.10-ppc32-setcontext-fp.diff
glibc-2.10-unsetenv.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ glibc.spec ++++++
--- /var/tmp/diff_new_pack.x25937/_old 2009-01-14 17:41:02.000000000 +0100
+++ /var/tmp/diff_new_pack.x25937/_new 2009-01-14 17:41:02.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package glibc (Version 2.9)
#
-# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -69,7 +69,7 @@
Provides: rtld(GNU_HASH)
AutoReqProv: on
Version: 2.9
-Release: 4
+Release: 6
%define snapshot_date 2008111711
Url: http://www.gnu.org/software/libc/libc.html
PreReq: filesystem
@@ -135,6 +135,10 @@
Patch66: glibc-2.10-nscd-prunerace.diff
Patch67: glibc-2.10-locale-tuesday.diff
Patch68: glibc-2.10-nis-hosts.diff
+Patch69: glibc-2.10-unsetenv.diff
+Patch70: glibc-2.10-dns-fixpack.diff
+Patch71: glibc-2.10-dns-no-gethostbyname4.diff
+Patch72: glibc-2.10-ppc32-setcontext-fp.diff
%description
The GNU C Library provides the most important standard libraries used
@@ -336,6 +340,10 @@
%patch66
%patch67
%patch68
+%patch69
+%patch70
+%patch71
+%patch72
#
# Inconsistency detected by ld.so: dl-close.c: 719: _dl_close: Assertion `map->l_init_called' failed!
#
@@ -1101,6 +1109,12 @@
%{_libdir}/libdl_p.a
%changelog
+* Fri Jan 09 2009 pbaudis@suse.cz
+- Fix unsetenv() crashing after clearenv()
+- Backport various DNS-related fixes from CVS
+- Disable parallel A-AAAA queries - revert to the glibc-2.9 behaviour
+ of sending the queries sequentially [bnc#442572]
+- Fix fp register protection on power6 setcontext() [bnc#464738]
* Mon Dec 08 2008 pbaudis@suse.cz
- Fix crash when parsing NIS hosts file [bnc#448702]
* Thu Dec 04 2008 pbaudis@suse.cz
++++++ glibc-2.10-dns-fixpack.diff ++++++
2008-11-26 Ulrich Drepper
* sysdeps/posix/getaddrinfo.c (getaddrinfo): Only restrict search
to IPv4 or IPv6 if an interface has been found.
--- sysdeps/posix/getaddrinfo.c 30 Jul 2008 19:14:22 -0000 1.136
+++ sysdeps/posix/getaddrinfo.c 3 Dec 2008 07:04:10 -0000 1.139
@@ -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;
2008-12-02 Ulrich Drepper
* 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.
--- sysdeps/posix/getaddrinfo.c 30 Jul 2008 19:14:22 -0000 1.136
+++ 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)
2008-12-02 Ulrich Drepper
* resolv/res_init.c (__res_vinit): Initialize nscount to zero.
* resolv/res_init.c (__res_vinit): Fill in IPv4 name server
information at the correct index.
2008-12-07 Ulrich Drepper
* resolv/res_init.c (__res_vinit): Always assign to statp->nscount
after reading name server list.
--- resolv/res_init.c 7 Apr 2008 17:20:25 -0000 1.47
+++ 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;
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/nss_dns/dns-host.c 12 Nov 2008 07:52:20 -0000 1.54
+++ 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;
2008-12-29 Ulrich Drepper
* resolv/res_init.c (__res_vinit): Count all servers in statp->nscount.
diff -u -r1.50 -r1.51
--- resolv/res_init.c 2008/12/08 03:59:05 1.50
+++ resolv/res_init.c 2008/12/29 19:53:31 1.51
@@ -420,7 +420,7 @@
continue;
}
}
- statp->nscount = nserv;
+ statp->nscount = nservall;
#ifdef _LIBC
if (nservall - nserv > 0) {
statp->_u._ext.nscount6 = nservall - nserv;
++++++ glibc-2.10-dns-no-gethostbyname4.diff ++++++
The gethostbyname4() lookup method is problematic since it fires out both
the A and AAAA DNS queries in parallel and over the same socket. This
should work in theory, but it turns out that many cheap DSL modems and
similar devices have buggy DNS servers - if the AAAA query arrives too
quickly after the A query, the server will generate only a single reply
with the A query id but returning an error for the AAAA query; we get
stuck waiting for the second reply.
For gethostbyname4() users affected, disabling IPv6 in the system might
work around the issue, unfortunately it only helps with applications
using AI_ADDRCONFIG (e.g. Firefox); some (notably e.g. Pidgin) neglect
to do that.
Real fix should be using separate ports for the A and AAAA queries.
--- resolv/Versions 2008-08-02 10:26:09.000000000 +0200
+++ 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;
}
}
++++++ glibc-2.10-ppc32-setcontext-fp.diff ++++++
20090108 Ryan S. Arnold
* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S
(__CONTEXT_FUNC_NAME): Fix mtfsf to use fp31 instead of fp0.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S
(__CONTEXT_FUNC_NAME): Fix mtfsf to use fp31 instead of fp0.
--- sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S 2009-01-08 10:01:44.000000000 -0600
+++ sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S 2009-01-08 16:54:10.000000000 -0600
@@ -202,7 +202,7 @@
lfd fp0,_UC_FREGS+(0*8)(r31)
# ifdef _ARCH_PWR6
/* Use the extended four-operand version of the mtfsf insn. */
- mtfsf 0xff,fp0,1,0
+ mtfsf 0xff,fp31,1,0
# else
/* Availability of DFP indicates a 64-bit FPSCR. */
andi. r6,r7,PPC_FEATURE_HAS_DFP
--- sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S 2009-01-08 10:01:44.000000000 -0600
+++ sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S 2009-01-08 16:54:17.000000000 -0600
@@ -428,7 +428,7 @@
lfd fp0,_UC_FREGS+(0*8)(r31)
# ifdef _ARCH_PWR6
/* Use the extended four-operand version of the mtfsf insn. */
- mtfsf 0xff,fp0,1,0
+ mtfsf 0xff,fp31,1,0
# else
/* Availability of DFP indicates a 64-bit FPSCR. */
andi. r6,r7,PPC_FEATURE_HAS_DFP
++++++ glibc-2.10-unsetenv.diff ++++++
2008-12-01 Ulrich Drepper
* 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.
--- stdlib/Makefile 8 Mar 2008 21:31:19 -0000 1.122
+++ 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
--- stdlib/setenv.c 14 Dec 2005 10:44:05 -0000 1.1
+++ 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;
--- stdlib/tst-unsetenv1.c 1 Jan 1970 00:00:00 -0000
+++ 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"
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org