This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[Patch] nss/tst-nss-files-hosts-long.c
- From: Patsy Franklin <patsy at redhat dot com>
- To: GNU C Library <libc-alpha at sourceware dot org>
- Date: Mon, 4 Feb 2019 16:16:08 -0500
- Subject: [Patch] nss/tst-nss-files-hosts-long.c
BZ #21915]
When the /etc/hosts file has a line longer than 1028
characters getent ahostsv4 and ahostsv6 will fail.
This test performs a getent call on a /etc/hosts file that contains a
very long line (greater than 1028) using the test-in-container
framework.
Testing:
Confirmed that the test passes with the current (fixed) sources
on x86_64. Also confirmed that the test fails with a source tree that
does not have BZ 21915 applied, again on x86_64. Testing was carried
out on a RHEL7 system.
From 475a5dd17d1fa1c36f661ee20c9d59ba4a6a0140 Mon Sep 17 00:00:00 2001
From: Patsy Franklin <pfrankli@redhat.com>
Date: Wed, 30 Jan 2019 18:49:27 -0500
Subject: [PATCH] nss: Add tst-nss-files-hosts-long test [BZ #21915]
When the /etc/hosts file has a line longer than 1028
characters getent ahostsv4 and ahostsv6 will fail.
This test performs a getent call on a /etc/hosts file that contains
a very long line (greater than 1028) using the test-in-container
framework.
---
ChangeLog | 9 +++++
nss/Makefile | 3 +-
nss/tst-nss-files-hosts-long.c | 45 +++++++++++++++++++++
nss/tst-nss-files-hosts-long.root/etc/hosts | 11 +++++
4 files changed, 67 insertions(+), 1 deletion(-)
create mode 100644 nss/tst-nss-files-hosts-long.c
create mode 100644 nss/tst-nss-files-hosts-long.root/etc/hosts
diff --git a/ChangeLog b/ChangeLog
index 23c20066a4..cd2d9a898e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2019-01-30 Patsy Griffin Franklin <pfrankli@redhat.com>
+
+ [BZ #21915]
+ * nss/Makefile (test-container): Add tst-nss-files-hosts-long.
+ * nss/tst-nss-files-hosts-long.c: New file.
+ * nss/tst-nss-files-hosts-long.root: New directory.
+ * nss/tst-nss-files-hosts-long.root/etc: Likewise.
+ * nss/tst-nss-files-hosts-long.root/etc/hosts: New file.
+
2019-01-25 Siddhesh Poyarekar <siddhesh@sourceware.org>
* po/be.po: Update translations.
diff --git a/nss/Makefile b/nss/Makefile
index 0fa28f0c5e..85bee87f78 100644
--- a/nss/Makefile
+++ b/nss/Makefile
@@ -60,7 +60,8 @@ tests = test-netdb test-digits-dots tst-nss-getpwent bug17079 \
xtests = bug-erange
tests-container = \
- tst-nss-test3
+ tst-nss-test3 \
+ tst-nss-files-hosts-long
# Tests which need libdl
ifeq (yes,$(build-shared))
diff --git a/nss/tst-nss-files-hosts-long.c b/nss/tst-nss-files-hosts-long.c
new file mode 100644
index 0000000000..693d4b7ca0
--- /dev/null
+++ b/nss/tst-nss-files-hosts-long.c
@@ -0,0 +1,45 @@
+/* Test getent doesn't fail with long /etc/hosts lines (Bug 21915).
+ Copyright (C) 2019 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; see the file COPYING.LIB. If
+ not, see <http://www.gnu.org/licenses/>. */
+
+ /* This test runs getent twice to parse a /etc/hosts with a very
+ long line. Prior to fixing this parser this would crash getent. */
+
+#include <stdlib.h>
+#include <nss.h>
+#include <support/check.h>
+
+static int
+do_test (void)
+{
+ int ret;
+
+ /* Run getent to fetch the IPv4 address for host test4.
+ This forces /etc/hosts to be parsed. */
+
+ ret = system("getent ahostsv4 test4");
+ if (ret != 0)
+ FAIL_EXIT1("ahostsv4 failed");
+
+ /* Likewise for IPv6. */
+
+ ret = system("getent ahostsv6 test6");
+ if (ret != 0)
+ FAIL_EXIT1("ahostsv6 failed");
+ exit (0);
+}
+#include <support/test-driver.c>
diff --git a/nss/tst-nss-files-hosts-long.root/etc/hosts b/nss/tst-nss-files-hosts-long.root/etc/hosts
new file mode 100644
index 0000000000..299e661082
--- /dev/null
+++ b/nss/tst-nss-files-hosts-long.root/etc/hosts
@@ -0,0 +1,11 @@
+# This data is valid and short.
+
+192.168.1.1 test4.example.com test4
+::2 test6.example.com test6
+
+# Long line data is arbitrary and not specifically chosen.
+# They key issue is that it should be long to trigger the parser failure.
+
+192.168.2.2 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ru
+#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
--
2.17.1