|
@@ -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());
|
|
|
+
|