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