diff options
author | "Steven J. Hill" <sjhill@realitydiluted.com> | 2007-05-07 04:07:06 +0000 |
---|---|---|
committer | "Steven J. Hill" <sjhill@realitydiluted.com> | 2007-05-07 04:07:06 +0000 |
commit | a70e39cd5e7c6fa084e548240d362b5b1ae813a8 (patch) | |
tree | 6d9456d66e331e694574a20a1fd3ca40ab6c75af /package/busybox/busybox-1.4.0-max_host_len_40.patch | |
parent | 58ef6b3ca7e0c195e7ef0d9523661aa333cf88b6 (diff) | |
download | buildroot-novena-a70e39cd5e7c6fa084e548240d362b5b1ae813a8.tar.gz buildroot-novena-a70e39cd5e7c6fa084e548240d362b5b1ae813a8.zip |
This patch increases the maximum host name length for 'dnsd' to 40 characters in length and fixes a resolving bug. For example, if there are two entries in the 'dnsd.conf' file of 'foo1' and 'foo2'. Doing a 'nslookup foo2' the 'dnsd' will always return the IP address of 'foo1' because the string comparison is faulty.
Diffstat (limited to 'package/busybox/busybox-1.4.0-max_host_len_40.patch')
-rw-r--r-- | package/busybox/busybox-1.4.0-max_host_len_40.patch | 61 |
1 files changed, 61 insertions, 0 deletions
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 index 000000000..3c3290054 --- /dev/null +++ b/package/busybox/busybox-1.4.0-max_host_len_40.patch @@ -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()); + |