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