Commit a70e39cd authored by "Steven J. Hill"'s avatar "Steven J. Hill"
Browse files

This patch increases the maximum host name length for 'dnsd' to 40 characters...

This patch increases the maximum host name length for 'dnsd' to 40 characters in length and fixes a resolving bug. For example, if there are two entries in the 'dnsd.conf' file of 'foo1' and 'foo2'. Doing a 'nslookup foo2' the 'dnsd' will always return the IP address of 'foo1' because the string comparison is faulty.
parent 58ef6b3c
Loading
Loading
Loading
Loading
+61 −0
Original line number Diff line number Diff line
diff -ur busybox-1.2.2.1/networking/dnsd.c busybox-1.2.2.1-patched/networking/dnsd.c
--- busybox-1.2.2.1/networking/dnsd.c	2006-10-24 15:21:17.000000000 -0500
+++ busybox-1.2.2.1-patched/networking/dnsd.c	2007-04-12 12:49:53.000000000 -0500
@@ -31,11 +31,11 @@
 
 #define is_daemon()  (flags&16)
 #define is_verbose() (flags&32)
-//#define DEBUG 
+#undef DEBUG 
 
 
 enum {
-	MAX_HOST_LEN = 16,      // longest host name allowed is 15
+	MAX_HOST_LEN = 41,      // longest host name allowed is 40
 	IP_STRING_LEN = 18,     // .xxx.xxx.xxx.xxx\0
 
 //must be strlen('.in-addr.arpa') larger than IP_STRING_LEN
@@ -229,19 +229,23 @@
 {
 	int i;
 	struct dns_entry *d = dnsentry;
+	char *p,*q;
+
+	q = (char *)&(qs[1]);
+	p = &(d->name[1]);
 
 	if(d) do {
 #ifdef DEBUG
 		if(qs && d) {
-			char *p,*q;
-			q = (char *)&(qs[1]);
-			p = &(d->name[1]);
 			fprintf(stderr, "\n%s: %d/%d p:%s q:%s %d", 
 				__FUNCTION__, strlen(p), (int)(d->name[0]), 
 				p, q, strlen(q));
 		}
 #endif
 		if (type == REQ_A) { 			/* search by host name */
+			p = &(d->name[1]);
+			if(strlen(q) != strlen(p))
+				continue;
 			for(i = 1; i <= (int)(d->name[0]); i++)
 				if(tolower(qs[i]) != d->name[i])
 					break;
@@ -398,13 +402,15 @@
 		fprintf(stderr,"fileconf: %s\n", fileconf);
 	}
 
-	if(is_daemon())
+	if(is_daemon()) {
 #ifdef BB_NOMMU
 		/* reexec for vfork() do continue parent */
 		vfork_daemon_rexec(1, 0, argc, argv, "-d");
 #else
 		bb_xdaemon(1, 0);
 #endif
+		daemonmode = 1;
+	}
 
 	dnsentryinit(is_verbose());
 
+61 −0
Original line number Diff line number Diff line
diff -ur busybox-1.2.2.1/networking/dnsd.c busybox-1.2.2.1-patched/networking/dnsd.c
--- busybox-1.2.2.1/networking/dnsd.c	2006-10-24 15:21:17.000000000 -0500
+++ busybox-1.2.2.1-patched/networking/dnsd.c	2007-04-12 12:49:53.000000000 -0500
@@ -31,11 +31,11 @@
 
 #define is_daemon()  (flags&16)
 #define is_verbose() (flags&32)
-//#define DEBUG 
+#undef DEBUG 
 
 
 enum {
-	MAX_HOST_LEN = 16,      // longest host name allowed is 15
+	MAX_HOST_LEN = 41,      // longest host name allowed is 40
 	IP_STRING_LEN = 18,     // .xxx.xxx.xxx.xxx\0
 
 //must be strlen('.in-addr.arpa') larger than IP_STRING_LEN
@@ -229,19 +229,23 @@
 {
 	int i;
 	struct dns_entry *d = dnsentry;
+	char *p,*q;
+
+	q = (char *)&(qs[1]);
+	p = &(d->name[1]);
 
 	if(d) do {
 #ifdef DEBUG
 		if(qs && d) {
-			char *p,*q;
-			q = (char *)&(qs[1]);
-			p = &(d->name[1]);
 			fprintf(stderr, "\n%s: %d/%d p:%s q:%s %d", 
 				__FUNCTION__, strlen(p), (int)(d->name[0]), 
 				p, q, strlen(q));
 		}
 #endif
 		if (type == REQ_A) { 			/* search by host name */
+			p = &(d->name[1]);
+			if(strlen(q) != strlen(p))
+				continue;
 			for(i = 1; i <= (int)(d->name[0]); i++)
 				if(tolower(qs[i]) != d->name[i])
 					break;
@@ -398,13 +402,15 @@
 		fprintf(stderr,"fileconf: %s\n", fileconf);
 	}
 
-	if(is_daemon())
+	if(is_daemon()) {
 #ifdef BB_NOMMU
 		/* reexec for vfork() do continue parent */
 		vfork_daemon_rexec(1, 0, argc, argv, "-d");
 #else
 		bb_xdaemon(1, 0);
 #endif
+		daemonmode = 1;
+	}
 
 	dnsentryinit(is_verbose());
 
+37 −0
Original line number Diff line number Diff line
diff -ur busybox-1.5.0/networking/dnsd.c busybox-1.5.0-patched/networking/dnsd.c
--- busybox-1.5.0/networking/dnsd.c	2007-03-22 15:21:23.000000000 -0500
+++ busybox-1.5.0-patched/networking/dnsd.c	2007-04-13 06:53:49.000000000 -0500
@@ -30,7 +30,7 @@
 #define DEBUG 0
 
 enum {
-	MAX_HOST_LEN = 16,      // longest host name allowed is 15
+	MAX_HOST_LEN = 41,      // longest host name allowed is 40
 	IP_STRING_LEN = 18,     // .xxx.xxx.xxx.xxx\0
 
 //must be strlen('.in-addr.arpa') larger than IP_STRING_LEN
@@ -186,17 +186,21 @@
 {
 	int i;
 	struct dns_entry *d=dnsentry;
+	char *p,*q;
+
+	q = (char *)&(qs[1]);
+	p = &(d->name[1]);
 
 	do {
 #if DEBUG
-		char *p,*q;
-		q = (char *)&(qs[1]);
-		p = &(d->name[1]);
 		fprintf(stderr, "\n%s: %d/%d p:%s q:%s %d",
 			__FUNCTION__, (int)strlen(p), (int)(d->name[0]),
 			p, q, (int)strlen(q));
 #endif
 		if (type == REQ_A) { /* search by host name */
+			p = &(d->name[1]);
+			if(strlen(q) != strlen(p))
+				continue;
 			for (i = 1; i <= (int)(d->name[0]); i++)
 				if (tolower(qs[i]) != d->name[i])
 					break;