This patch increases the maximum host name length for 'dnsd' to 40 characters in...
author"Steven J. Hill" <sjhill@realitydiluted.com>
Mon, 7 May 2007 04:07:06 +0000 (04:07 -0000)
committer"Steven J. Hill" <sjhill@realitydiluted.com>
Mon, 7 May 2007 04:07:06 +0000 (04:07 -0000)
package/busybox/busybox-1.2.2.1-max_host_len_40.patch [new file with mode: 0644]
package/busybox/busybox-1.4.0-max_host_len_40.patch [new file with mode: 0644]
package/busybox/busybox-1.5.0-max_host_len_40.patch [new file with mode: 0644]

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 (file)
index 0000000..3c32900
--- /dev/null
@@ -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 (file)
index 0000000..3c32900
--- /dev/null
@@ -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 (file)
index 0000000..7b9ba1f
--- /dev/null
@@ -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;