Module Name:    src
Committed By:   christos
Date:           Thu Jan  9 02:18:10 UTC 2014

Modified Files:
        src/tests/lib/libc/net: Makefile h_dns_server.c h_hostent.c
            t_hostent.sh
Added Files:
        src/tests/lib/libc/net: resolv.conf

Log Message:
Use our own resolv.conf file simplifying the test to not need rump_vfs.
Add debugging on the dns server
One test fails (gethostbyaddr6) why? It runs without rump


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/tests/lib/libc/net/Makefile
cvs rdiff -u -r1.2 -r1.3 src/tests/lib/libc/net/h_dns_server.c
cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libc/net/h_hostent.c
cvs rdiff -u -r0 -r1.1 src/tests/lib/libc/net/resolv.conf
cvs rdiff -u -r1.4 -r1.5 src/tests/lib/libc/net/t_hostent.sh

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/lib/libc/net/Makefile
diff -u src/tests/lib/libc/net/Makefile:1.9 src/tests/lib/libc/net/Makefile:1.10
--- src/tests/lib/libc/net/Makefile:1.9	Mon Jan  6 09:50:32 2014
+++ src/tests/lib/libc/net/Makefile	Wed Jan  8 21:18:10 2014
@@ -1,11 +1,11 @@
-# $NetBSD: Makefile,v 1.9 2014/01/06 14:50:32 gson Exp $
+# $NetBSD: Makefile,v 1.10 2014/01/09 02:18:10 christos Exp $
 
 .include <bsd.own.mk>
 
 MKMAN=	no
 
 TESTS_SUBDIRS+=	getaddrinfo
-FILES+=hosts
+FILES+=hosts resolv.conf
 
 TESTSDIR=	${TESTSBASE}/lib/libc/net
 

Index: src/tests/lib/libc/net/h_dns_server.c
diff -u src/tests/lib/libc/net/h_dns_server.c:1.2 src/tests/lib/libc/net/h_dns_server.c:1.3
--- src/tests/lib/libc/net/h_dns_server.c:1.2	Mon Jan  6 11:42:57 2014
+++ src/tests/lib/libc/net/h_dns_server.c	Wed Jan  8 21:18:10 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: h_dns_server.c,v 1.2 2014/01/06 16:42:57 gson Exp $	*/
+/*	$NetBSD: h_dns_server.c,v 1.3 2014/01/09 02:18:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: h_dns_server.c,v 1.2 2014/01/06 16:42:57 gson Exp $");
+__RCSID("$NetBSD: h_dns_server.c,v 1.3 2014/01/09 02:18:10 christos Exp $");
 
 #include <ctype.h>
 #include <err.h>
@@ -58,6 +58,12 @@ union sockaddr_either {
 	struct sockaddr_in6 sin6;
 };
 
+#ifdef DEBUG
+#define DPRINTF(...)	fprintf(stderr, __VA_ARGS__)
+#else
+#define DPRINTF(...)	
+#endif
+
 /* A DNS question and its corresponding answer */
 
 struct dns_data {
@@ -131,6 +137,34 @@ name_eq(const unsigned char *a, const un
 	}
 }
 
+#ifdef DEBUG
+static char *
+name2str(const void *v, char *buf, size_t buflen) {
+	const unsigned char *a = v;
+	char *b = buf;
+	char *eb = buf + buflen;
+
+#define ADDC(c) do { \
+		if (b < eb) \
+			*b++ = c; \
+		else \
+			return NULL; \
+	} while (/*CONSTCOND*/0)
+	for (int did = 0;; did++) {
+		int lena = *a++;
+		if (lena == 0) {
+			ADDC('\0');
+			return buf;
+		}
+		if (did)
+			ADDC('.');
+		for (int i = 0; i < lena; i++)
+			ADDC(a[i]);
+		a += lena;
+	}
+}
+#endif
+
 /* XXX the daemon2_* functions should be in a library */
 
 int __daemon2_detach_pipe[2];
@@ -237,6 +271,9 @@ int main(int argc, char **argv) {
 	char pidfile_name[40];
 	FILE *f;
 	int one = 1;
+#ifdef DEBUG
+	char buf1[1024], buf2[1024];
+#endif
 
 	daemon2_fork();
 
@@ -276,7 +313,11 @@ int main(int argc, char **argv) {
 	f = fopen(pidfile_name, "w");
 	fprintf(f, "%d", getpid());
 	fclose(f);
+#ifdef DEBUG
+	daemon2_detach(0, 1);
+#else
 	daemon2_detach(0, 0);
+#endif
 
 	for (;;) {
 		unsigned char buf[512];
@@ -289,28 +330,47 @@ int main(int argc, char **argv) {
 		nrecv = recvfrom(s, buf, sizeof buf, 0, &from.s, &fromlen);
 		if (nrecv < 0)
 			err(1, "recvfrom");
-		if (nrecv < 12)
-			continue; /* Too short */
-		if ((buf[2] & 0x80) != 0)
-			continue; /* Not a query */
-		if (!(buf[4] == 0 && buf[5] == 1))
-		    continue; /* QDCOUNT is not 1 */
+		if (nrecv < 12) {
+			DPRINTF("Too short %zd\n", nrecv);
+			continue;
+		}
+		if ((buf[2] & 0x80) != 0) {
+			DPRINTF("Not a query 0x%x\n", buf[2]);
+			continue;
+		}
+		if (!(buf[4] == 0 && buf[5] == 1)) {
+			DPRINTF("QCOUNT is not 1 0x%x 0x%x\n", buf[4], buf[5]);
+			continue; /* QDCOUNT is not 1 */
+		}
 
 		for (dp = data; dp->qname_size != 0; dp++) {
 			int qtype, qclass;
 			p = buf + 12; /* Point to QNAME */
 			int n = name_eq(p, (const unsigned char *) dp->qname);
-			if (n == 0)
+			if (n == 0) {
+				DPRINTF("no match name %s != %s\n",
+				    name2str(p, buf1, sizeof(buf1)),
+				    name2str(dp->qname, buf2, sizeof(buf2)));
 				continue; /* Name does not match */
+			}
+			DPRINTF("match name %s\n",
+			    name2str(p, buf1, sizeof(buf1)));
 			p += n; /* Skip QNAME */
 			qtype = *p++ << 8;
 			qtype |= *p++;
-			if (qtype != dp->qtype)
+			if (qtype != dp->qtype) {
+				DPRINTF("no match name 0x%x != 0x%x\n",
+				    qtype, dp->qtype);
 				continue;
+			}
+			DPRINTF("match type 0x%x\n", qtype);
 			qclass = *p++ << 8;
 			qclass |= *p++;
-			if (qclass != 1) /* IN */
+			if (qclass != 1) { /* IN */
+				DPRINTF("no match class %d != 1\n", qclass);
 				continue;
+			}
+			DPRINTF("match class %d\n", qclass);
 			goto found;
 		}
 		continue;
@@ -332,6 +392,7 @@ int main(int argc, char **argv) {
 		memcpy(p, dp->answer, dp->answer_size);
 		p += dp->answer_size;
 		nsent = sendto(s, buf, p - buf, 0, &from.s, fromlen);
+		DPRINTF("sent %zd\n", nsent);
 		if (nsent != p - buf)
 			warn("sendto");
 	}

Index: src/tests/lib/libc/net/h_hostent.c
diff -u src/tests/lib/libc/net/h_hostent.c:1.1 src/tests/lib/libc/net/h_hostent.c:1.2
--- src/tests/lib/libc/net/h_hostent.c:1.1	Fri Aug 16 11:29:45 2013
+++ src/tests/lib/libc/net/h_hostent.c	Wed Jan  8 21:18:10 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: h_hostent.c,v 1.1 2013/08/16 15:29:45 christos Exp $	*/
+/*	$NetBSD: h_hostent.c,v 1.2 2014/01/09 02:18:10 christos Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: h_hostent.c,v 1.1 2013/08/16 15:29:45 christos Exp $");
+__RCSID("$NetBSD: h_hostent.c,v 1.2 2014/01/09 02:18:10 christos Exp $");
 
 #include <stdio.h>
 #include <string.h>
@@ -47,6 +47,8 @@ __RCSID("$NetBSD: h_hostent.c,v 1.1 2013
 
 #include "hostent.h"
 
+extern const char *__res_conf_name;
+
 static void
 phostent(const struct hostent *h)
 {
@@ -123,7 +125,7 @@ main(int argc, char *argv[])
 	info.buflen = sizeof(buf);
 	info.he = &e;
 
-	while ((c = getopt(argc, argv, "46af:t:")) != -1) {
+	while ((c = getopt(argc, argv, "46af:r:t:")) != -1) {
 		switch (c) {
 		case '4':
 			af = AF_INET;
@@ -134,12 +136,15 @@ main(int argc, char *argv[])
 		case 'a':
 			byaddr++;
 			break;
-		case 't':
-			type = optarg;
-			break;
 		case 'f':
 			_hf_sethostsfile(optarg);
 			break;
+		case 'r':
+			__res_conf_name = optarg;
+			break;
+		case 't':
+			type = optarg;
+			break;
 		default:
 			usage();
 		}

Index: src/tests/lib/libc/net/t_hostent.sh
diff -u src/tests/lib/libc/net/t_hostent.sh:1.4 src/tests/lib/libc/net/t_hostent.sh:1.5
--- src/tests/lib/libc/net/t_hostent.sh:1.4	Mon Jan  6 09:50:32 2014
+++ src/tests/lib/libc/net/t_hostent.sh	Wed Jan  8 21:18:10 2014
@@ -1,4 +1,4 @@
-# $NetBSD: t_hostent.sh,v 1.4 2014/01/06 14:50:32 gson Exp $
+# $NetBSD: t_hostent.sh,v 1.5 2014/01/09 02:18:10 christos Exp $
 #
 # Copyright (c) 2008 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -13,7 +13,7 @@
 #    documentation and/or other materials provided with the distribution.
 #
 # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
-# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+# ``AS IS'' AND ANY EXP{res}S OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
 # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
@@ -41,6 +41,9 @@ l4="localhost"
 al4="127.0.0.1"
 loc4="name=$l4, length=4, addrtype=2, aliases=[localhost. localhost.localdomain.] addr_list=[$al4]\n"
 
+dir="$(atf_get_srcdir)"
+res="-r ${dir}/resolv.conf"
+
 # Hijack DNS traffic using a single rump server instance and a DNS
 # server listening on its loopback address.  Also hijack file system
 # call to /etc, mapping them to the root file system of the rump 
@@ -48,16 +51,15 @@ loc4="name=$l4, length=4, addrtype=2, al
 
 start_dns_server() {
 	export RUMP_SERVER=unix:///tmp/rumpserver
-	rump_server -lrumpvfs -lrumpdev -lrumpnet \
+	rump_server -lrumpdev -lrumpnet \
 	     -lrumpnet_net -lrumpnet_netinet -lrumpnet_local \
 	     $RUMP_SERVER
-	HIJACK_DNS="LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK='path=/etc,socket=inet:inet6'"
-	eval $HIJACK_DNS sh -c 'echo nameserver 127.0.0.1 >/etc/resolv.conf'
-	eval $HIJACK_DNS $(atf_get_srcdir)/h_dns_server 4
+	HIJACK_DNS="LD_PRELOAD=/usr/lib/librumphijack.so RUMPHIJACK='socket=inet:inet6'"
+	eval $HIJACK_DNS ${dir}/h_dns_server $1
 }
 
 stop_dns_server() {
-	kill $(cat dns_server_4.pid)
+	kill $(cat dns_server_$1.pid)
 	rump.halt
 }
 
@@ -68,9 +70,9 @@ gethostbyname4_head()
 }
 gethostbyname4_body()
 {
-	start_dns_server
-	atf_check -o inline:"$ans4" -x "$HIJACK_DNS $(atf_get_srcdir)/h_hostent -t auto -4 $n4"
-	stop_dns_server
+	start_dns_server 4
+	atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent $res -t auto -4 $n4"
+	stop_dns_server 4
 }
 
 atf_test_case gethostbyname6
@@ -80,9 +82,9 @@ gethostbyname6_head()
 }
 gethostbyname6_body()
 {
-	start_dns_server
-	atf_check -o inline:"$ans6" -x "$HIJACK_DNS $(atf_get_srcdir)/h_hostent -t auto -6 $n6"
-	stop_dns_server
+	start_dns_server 4
+	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -6 $n6"
+	stop_dns_server 4
 }
 
 atf_test_case gethostbyaddr4
@@ -92,9 +94,9 @@ gethostbyaddr4_head()
 }
 gethostbyaddr4_body()
 {
-	start_dns_server
-        atf_check -o inline:"$ans4" -x "$HIJACK_DNS $(atf_get_srcdir)/h_hostent -t auto -a $a4"
-	stop_dns_server
+	start_dns_server 4
+        atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t auto -a $a4"
+	stop_dns_server 4
 }
 
 atf_test_case gethostbyaddr6
@@ -104,9 +106,9 @@ gethostbyaddr6_head()
 }
 gethostbyaddr6_body()
 {
-	start_dns_server
-	atf_check -o inline:"$ans6" -x "$HIJACK_DNS $(atf_get_srcdir)/h_hostent -t auto -a $a6"
-	stop_dns_server
+	start_dns_server 4
+	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent -t auto -a $a6"
+	stop_dns_server 4
 }
 
 atf_test_case hostsbynamelookup4
@@ -116,8 +118,7 @@ hostsbynamelookup4_head()
 }
 hostsbynamelookup4_body()
 {
-	local dir=$(atf_get_srcdir)
-	atf_check -o inline:"$loc4" -x "$dir/h_hostent -f $dir/hosts -t file -4 $l4"
+	atf_check -o inline:"$loc4" -x "${dir}/h_hostent -f ${dir}/hosts -t file -4 $l4"
 }
 
 atf_test_case hostsbynamelookup6
@@ -127,8 +128,7 @@ hostsbynamelookup6_head()
 }
 hostsbynamelookup6_body()
 {
-	local dir=$(atf_get_srcdir)
-	atf_check -o inline:"$loc6" -x "$dir/h_hostent -f $dir/hosts -t file -6 $l6"
+	atf_check -o inline:"$loc6" -x "${dir}/h_hostent -f ${dir}/hosts -t file -6 $l6"
 }
 
 atf_test_case hostsbyaddrlookup4
@@ -138,8 +138,7 @@ hostsbyaddrlookup4_head()
 }
 hostsbyaddrlookup4_body()
 {
-	local dir=$(atf_get_srcdir)
-	atf_check -o inline:"$loc4" -x "$dir/h_hostent -f $dir/hosts -t file -4 -a $al4"
+	atf_check -o inline:"$loc4" -x "${dir}/h_hostent -f ${dir}/hosts -t file -4 -a $al4"
 }
 
 atf_test_case hostsbyaddrlookup6
@@ -149,8 +148,7 @@ hostsbyaddrlookup6_head()
 }
 hostsbyaddrlookup6_body()
 {
-	local dir=$(atf_get_srcdir)
-	atf_check -o inline:"$loc6" -x "$dir/h_hostent -f $dir/hosts -t file -6 -a $al6"
+	atf_check -o inline:"$loc6" -x "${dir}/h_hostent -f ${dir}/hosts -t file -6 -a $al6"
 }
 
 atf_test_case dnsbynamelookup4
@@ -160,10 +158,9 @@ dnsbynamelookup4_head()
 }
 dnsbynamelookup4_body()
 {
-	local dir=$(atf_get_srcdir)
-	start_dns_server
-	atf_check -o inline:"$ans4" -x "$HIJACK_DNS $dir/h_hostent -t dns -4 $n4"
-	stop_dns_server
+	start_dns_server 4
+	atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -4 $n4"
+	stop_dns_server 4
 }
 
 atf_test_case dnsbynamelookup6
@@ -173,10 +170,9 @@ dnsbynamelookup6_head()
 }
 dnsbynamelookup6_body()
 {
-	local dir=$(atf_get_srcdir)
-	start_dns_server
-	atf_check -o inline:"$ans6" -x "$HIJACK_DNS $dir/h_hostent -t dns -6 $n6"
-	stop_dns_server
+	start_dns_server 4
+	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -6 $n6"
+	stop_dns_server 4
 }
 
 atf_test_case dnsbyaddrlookup4
@@ -186,10 +182,9 @@ dnsbyaddrlookup4_head()
 }
 dnsbyaddrlookup4_body()
 {
-	local dir=$(atf_get_srcdir)
-	start_dns_server
-	atf_check -o inline:"$ans4" -x "$HIJACK_DNS $dir/h_hostent -t dns -4 -a $a4"
-	stop_dns_server
+	start_dns_server 4
+	atf_check -o inline:"$ans4" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -4 -a $a4"
+	stop_dns_server 4
 }
 
 atf_test_case dnsbyaddrlookup6
@@ -199,10 +194,9 @@ dnsbyaddrlookup6_head()
 }
 dnsbyaddrlookup6_body()
 {
-	local dir=$(atf_get_srcdir)
-	start_dns_server
-	atf_check -o inline:"$ans6" -x "$HIJACK_DNS $dir/h_hostent -t dns -6 -a $a6"
-	stop_dns_server
+	start_dns_server 4
+	atf_check -o inline:"$ans6" -x "$HIJACK_DNS ${dir}/h_hostent ${res} -t dns -6 -a $a6"
+	stop_dns_server 4
 }
 
 atf_init_test_cases()

Added files:

Index: src/tests/lib/libc/net/resolv.conf
diff -u /dev/null src/tests/lib/libc/net/resolv.conf:1.1
--- /dev/null	Wed Jan  8 21:18:10 2014
+++ src/tests/lib/libc/net/resolv.conf	Wed Jan  8 21:18:10 2014
@@ -0,0 +1 @@
+nameserver 127.0.0.1

Reply via email to