summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author"Steven J. Hill" <sjhill@realitydiluted.com>2007-05-07 04:07:06 +0000
committer"Steven J. Hill" <sjhill@realitydiluted.com>2007-05-07 04:07:06 +0000
commita70e39cd5e7c6fa084e548240d362b5b1ae813a8 (patch)
tree6d9456d66e331e694574a20a1fd3ca40ab6c75af
parent58ef6b3ca7e0c195e7ef0d9523661aa333cf88b6 (diff)
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.
-rw-r--r--package/busybox/busybox-1.2.2.1-max_host_len_40.patch61
-rw-r--r--package/busybox/busybox-1.4.0-max_host_len_40.patch61
-rw-r--r--package/busybox/busybox-1.5.0-max_host_len_40.patch37
3 files changed, 159 insertions, 0 deletions
diff --git a/package/busybox/busybox-1.2.2.1-max_host_len_40.patch b/package/busybox/busybox-1.2.2.1-max_host_len_40.patch
new file mode 100644
index 000000000..3c3290054
--- /dev/null
+++ b/package/busybox/busybox-1.2.2.1-max_host_len_40.patch
@@ -0,0 +1,61 @@
+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());
+
diff --git a/package/busybox/busybox-1.4.0-max_host_len_40.patch b/package/busybox/busybox-1.4.0-max_host_len_40.patch
new file mode 100644
index 000000000..3c3290054
--- /dev/null
+++ b/package/busybox/busybox-1.4.0-max_host_len_40.patch
@@ -0,0 +1,61 @@
+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());
+
diff --git a/package/busybox/busybox-1.5.0-max_host_len_40.patch b/package/busybox/busybox-1.5.0-max_host_len_40.patch
new file mode 100644
index 000000000..7b9ba1f77
--- /dev/null
+++ b/package/busybox/busybox-1.5.0-max_host_len_40.patch
@@ -0,0 +1,37 @@
+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;