This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.20-221-gb59d114
- From: aoliva at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 21 Nov 2014 05:42:08 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.20-221-gb59d114
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via b59d114bd1e0571fba85b3cbcc61d4f4b42f5d1b (commit)
via f3d945d5f2b9d7d44032c461af588c6d54f5664b (commit)
via 4969890247d7d6a548f17641ed5a18f4b713d211 (commit)
from 81959214868c9ac9e425fbf0fa3fd9135e207f7e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=b59d114bd1e0571fba85b3cbcc61d4f4b42f5d1b
commit b59d114bd1e0571fba85b3cbcc61d4f4b42f5d1b
Author: Alexandre Oliva <aoliva@redhat.com>
Date: Sat Sep 27 07:23:39 2014 -0300
BZ#16469: resolv: skip leading dot in domain to search
This should only happen if the domain to search is the root,
represented as "." rather than by an empty string. Skipping it here
prevents libc_res_nquerydomain from duplicating the trailing dot,
which would cause the domain name compression to fail.
for ChangeLog
[BZ #16469]
* resolv/res_query.c (__libc_res_nsearch): Skip leading dot in
search domain names.
diff --git a/ChangeLog b/ChangeLog
index 650d118..76fda28 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,12 @@
2014-11-21 Alexandre Oliva <aoliva@redhat.com>
[BZ #16469]
+ * resolv/res_query.c (__libc_res_nsearch): Skip leading dot in
+ search domain names.
+
+2014-11-21 Alexandre Oliva <aoliva@redhat.com>
+
+ [BZ #16469]
* NEWS: Update.
* resolv/res_query.c (__libc_res_nquerydomain): Retain
trailing dot.
diff --git a/resolv/res_query.c b/resolv/res_query.c
index 33eeeb7..4a9b3b3 100644
--- a/resolv/res_query.c
+++ b/resolv/res_query.c
@@ -413,13 +413,24 @@ __libc_res_nsearch(res_state statp,
for (domain = (const char * const *)statp->dnsrch;
*domain && !done;
domain++) {
+ const char *dname = domain[0];
searched = 1;
- if (domain[0][0] == '\0' ||
- (domain[0][0] == '.' && domain[0][1] == '\0'))
+ /* __libc_res_nquerydoman concatenates name
+ with dname with a "." in between. If we
+ pass it in dname the "." we got from the
+ configured default search path, we'll end
+ up with "name..", which won't resolve.
+ OTOH, passing it "" will result in "name.",
+ which has the intended effect for both
+ possible representations of the root
+ domain. */
+ if (dname[0] == '.')
+ dname++;
+ if (dname[0] == '\0')
root_on_list++;
- ret = __libc_res_nquerydomain(statp, name, *domain,
+ ret = __libc_res_nquerydomain(statp, name, dname,
class, type,
answer, anslen, answerp,
answerp2, nanswerp2,
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f3d945d5f2b9d7d44032c461af588c6d54f5664b
commit f3d945d5f2b9d7d44032c461af588c6d54f5664b
Author: Alexandre Oliva <aoliva@redhat.com>
Date: Sun Nov 9 13:51:09 2014 -0200
BZ#16469: don't drop trailing dot in res_nquerydomain(..., name, NULL, ...)
If we drop it here, we will fail to detect a duplicate trailing dot
later on. Retaining, OTOH, has no ill effects whatsoever, and it even
saves us the trouble of copying the domain name minus the trailing
dot, like we used to do.
for ChangeLog
[BZ #16469]
* NEWS: Update.
* resolv/res_query.c (__libc_res_nquerydomain): Retain
trailing dot.
* posix/tst-getaddrinfo5.c: New.
* posix/Makefile (tests): Add it.
diff --git a/ChangeLog b/ChangeLog
index 785189d..650d118 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
2014-11-21 Alexandre Oliva <aoliva@redhat.com>
+ [BZ #16469]
+ * NEWS: Update.
+ * resolv/res_query.c (__libc_res_nquerydomain): Retain
+ trailing dot.
+ * posix/tst-getaddrinfo5.c: New.
+ * posix/Makefile (tests): Add it.
+
+2014-11-21 Alexandre Oliva <aoliva@redhat.com>
+
[BZ #14498]
* NEWS: Fixed.
* nss/nss_db/db-XXX.c (_nss_db_get##name##_r): Update hidx
diff --git a/NEWS b/NEWS
index 5ba3f1b..ad170c4 100644
--- a/NEWS
+++ b/NEWS
@@ -9,10 +9,10 @@ Version 2.21
* The following bugs are resolved with this release:
- 6652, 12926, 14132, 14138, 14171, 14498, 15215, 15884, 17266, 17344,
- 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508,
- 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583, 17584,
- 17585, 17589, 17594, 17616, 17625.
+ 6652, 12926, 14132, 14138, 14171, 14498, 15215, 15884, 16469, 17266,
+ 17344, 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506,
+ 17508, 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583,
+ 17584, 17585, 17589, 17594, 17616, 17625.
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
under certain input conditions resulting in the execution of a shell for
diff --git a/posix/Makefile b/posix/Makefile
index e6b69b4..faefaf1 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -87,7 +87,7 @@ tests := tstgetopt testfnm runtests runptests \
bug-getopt1 bug-getopt2 bug-getopt3 bug-getopt4 \
bug-getopt5 tst-getopt_long1 bug-regex34 bug-regex35 \
tst-pathconf tst-getaddrinfo4 tst-rxspencer-no-utf8 \
- tst-fnmatch3 bug-regex36
+ tst-fnmatch3 bug-regex36 tst-getaddrinfo5
xtests := bug-ga2
ifeq (yes,$(build-shared))
test-srcs := globtest
diff --git a/posix/tst-getaddrinfo5.c b/posix/tst-getaddrinfo5.c
new file mode 100644
index 0000000..cfebb9b
--- /dev/null
+++ b/posix/tst-getaddrinfo5.c
@@ -0,0 +1,69 @@
+/* Test host lookup with double dots at the end, [BZ #16469].
+ Copyright (C) 2014 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#include <string.h>
+
+static int
+test (void)
+{
+ static char host1[] = "localhost..";
+ static char host2[] = "www.gnu.org..";
+ static char *hosts[] = { host1, host2 };
+ int i;
+ int pass = 0;
+
+ for (i = 0; i < sizeof (hosts) / sizeof (*hosts); i++)
+ {
+ char *host = hosts[i];
+ size_t len = strlen (host);
+ struct addrinfo *ai;
+
+ /* If the name doesn't resolve with a single dot at the
+ end, skip it. */
+ host[len-1] = 0;
+ if (getaddrinfo (host, NULL, NULL, &ai) != 0)
+ {
+ printf ("resolving \"%s\" failed, skipping this hostname\n", host);
+ continue;
+ }
+ printf ("resolving \"%s\" worked, proceeding to test\n", host);
+ freeaddrinfo (ai);
+
+ /* If it resolved with a single dot, check that it doesn't with
+ a second trailing dot. */
+ host[len-1] = '.';
+ if (getaddrinfo (host, NULL, NULL, &ai) == 0)
+ {
+ printf ("resolving \"%s\" worked, test failed\n", host);
+ return 1;
+ }
+ printf ("resolving \"%s\" failed, test passed\n", host);
+ pass = 1;
+ }
+
+ /* We want at least one successful name resolution for the test to
+ succeed. */
+ return pass ? 0 : 2;
+}
+
+#define TEST_FUNCTION test ()
+#define TIMEOUT 10
+#include "../test-skeleton.c"
diff --git a/resolv/res_query.c b/resolv/res_query.c
index e4ee2a6..33eeeb7 100644
--- a/resolv/res_query.c
+++ b/resolv/res_query.c
@@ -535,8 +535,7 @@ res_nsearch(res_state statp,
libresolv_hidden_def (res_nsearch)
/*
- * Perform a call on res_query on the concatenation of name and domain,
- * removing a trailing dot from name if domain is NULL.
+ * Perform a call on res_query on the concatenation of name and domain.
*/
static int
__libc_res_nquerydomain(res_state statp,
@@ -561,10 +560,6 @@ __libc_res_nquerydomain(res_state statp,
name, domain?domain:"<Nil>", class, type);
#endif
if (domain == NULL) {
- /*
- * Check for trailing '.';
- * copy without '.' if present.
- */
n = strlen(name);
/* Decrement N prior to checking it against MAXDNAME
@@ -575,11 +570,7 @@ __libc_res_nquerydomain(res_state statp,
RES_SET_H_ERRNO(statp, NO_RECOVERY);
return (-1);
}
- if (name[n] == '.') {
- strncpy(nbuf, name, n);
- nbuf[n] = '\0';
- } else
- longname = name;
+ longname = name;
} else {
n = strlen(name);
d = strlen(domain);
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=4969890247d7d6a548f17641ed5a18f4b713d211
commit 4969890247d7d6a548f17641ed5a18f4b713d211
Author: Alexandre Oliva <aoliva@redhat.com>
Date: Fri Nov 21 03:29:56 2014 -0200
BZ#14498: fix infinite loop in nss_db_getservbyname
nss_db uses nss_files code for services, but a continue on protocol
mismatch that doesn't affect nss_files skipped the code that advanced
to the next db entry. Any one of these changes would suffice to fix
it, but fixing both makes them both safer to reuse elsewhere.
for ChangeLog
[BZ #14498]
* NEWS: Fixed.
* nss/nss_db/db-XXX.c (_nss_db_get##name##_r): Update hidx
after parsing line but before break_if_match.
* nss/nss_files/files-service (DB_LOOKUP): Don't "continue;"
if there is a protocol mismatch.
diff --git a/ChangeLog b/ChangeLog
index 4c9c827..785189d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2014-11-21 Alexandre Oliva <aoliva@redhat.com>
+
+ [BZ #14498]
+ * NEWS: Fixed.
+ * nss/nss_db/db-XXX.c (_nss_db_get##name##_r): Update hidx
+ after parsing line but before break_if_match.
+ * nss/nss_files/files-service (DB_LOOKUP): Don't "continue;"
+ if there is a protocol mismatch.
+
2014-11-21 Ma Shimiao <mashimiao.fnst@cn.fujitsu.com>
* manual/sysinfo.texi (addmntent): It is actually MT-Safe,
diff --git a/NEWS b/NEWS
index 4b7eeb4..5ba3f1b 100644
--- a/NEWS
+++ b/NEWS
@@ -9,10 +9,10 @@ Version 2.21
* The following bugs are resolved with this release:
- 6652, 12926, 14132, 14138, 14171, 15215, 15884, 17266, 17344, 17363,
- 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508, 17522,
- 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583, 17584, 17585,
- 17589, 17594, 17616, 17625.
+ 6652, 12926, 14132, 14138, 14171, 14498, 15215, 15884, 17266, 17344,
+ 17363, 17370, 17371, 17411, 17460, 17475, 17485, 17501, 17506, 17508,
+ 17522, 17555, 17570, 17571, 17572, 17573, 17574, 17582, 17583, 17584,
+ 17585, 17589, 17594, 17616, 17625.
* CVE-2104-7817 The wordexp function could ignore the WRDE_NOCMD flag
under certain input conditions resulting in the execution of a shell for
diff --git a/nss/nss_db/db-XXX.c b/nss/nss_db/db-XXX.c
index 89b1a12..e950887 100644
--- a/nss/nss_db/db-XXX.c
+++ b/nss/nss_db/db-XXX.c
@@ -191,6 +191,12 @@ enum nss_status \
char *p = memcpy (buffer, valstr, len); \
\
int err = parse_line (p, result, data, buflen, errnop EXTRA_ARGS); \
+ \
+ /* Advance before break_if_match, lest it uses continue to skip
+ to the next entry. */ \
+ if ((hidx += hval2) >= header->dbs[i].hashsize) \
+ hidx -= header->dbs[i].hashsize; \
+ \
if (err > 0) \
{ \
status = NSS_STATUS_SUCCESS; \
@@ -203,9 +209,6 @@ enum nss_status \
status = NSS_STATUS_TRYAGAIN; \
break; \
} \
- \
- if ((hidx += hval2) >= header->dbs[i].hashsize) \
- hidx -= header->dbs[i].hashsize; \
} \
\
if (status == NSS_STATUS_NOTFOUND) \
diff --git a/nss/nss_files/files-service.c b/nss/nss_files/files-service.c
index 2401cb0..c28c62f 100644
--- a/nss/nss_files/files-service.c
+++ b/nss/nss_files/files-service.c
@@ -44,8 +44,11 @@ DB_LOOKUP (servbyname, ':',
{
/* Must match both protocol (if specified) and name. */
if (proto != NULL && strcmp (result->s_proto, proto))
- continue;
- LOOKUP_NAME (s_name, s_aliases)
+ /* A continue statement here breaks nss_db, because it
+ bypasses advancing to the next db entry, and it
+ doesn't make nss_files any more efficient. */;
+ else
+ LOOKUP_NAME (s_name, s_aliases)
},
const char *name, const char *proto)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 24 ++++++++++++++
NEWS | 8 ++--
nss/nss_db/db-XXX.c | 9 +++--
nss/nss_files/files-service.c | 7 +++-
posix/Makefile | 2 +-
posix/tst-getaddrinfo5.c | 69 +++++++++++++++++++++++++++++++++++++++++
resolv/res_query.c | 30 +++++++++--------
7 files changed, 125 insertions(+), 24 deletions(-)
create mode 100644 posix/tst-getaddrinfo5.c
hooks/post-receive
--
GNU C Library master sources