1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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());
|