Commit Graph

74 Commits

Author SHA1 Message Date
Daniel Stenberg 931fc45f05 - Fix by Tofu Linden:
The symptom:
  * Users (usually, but not always) on 2-Wire routers and the Comcast service
  and a wired connection to their router would find that the second and
  subsequent DNS lookups from fresh processes using c-ares to resolve the same
  address would cause the process to never see a reply (it keeps polling for
  around 1m15s before giving up).

  The repro:
  * On such a machine (and yeah, it took us a lot of QA to find the systems
  that reproduce such a specific problem!), do 'ahost www.secondlife.com',
  then do it again.  The first process's lookup will work, subsequent lookups
  will time-out and fail.

  The cause:
  * init_id_key() was calling randomize_key() *before* it initialized
  key->state, meaning that the randomness generated by randomize_key() is
  immediately overwritten with deterministic values. (/dev/urandom was also
  being read incorrectly in the c-ares version we were using, but this was
  fixed in a later version.)
  * This makes the stream of generated query-IDs from any new c-ares process
  be an identical and predictable sequence of IDs.
  * This makes the 2-Wire's default built-in DNS server detect these queries
  as probable-duplicates and (erroneously) not respond at all.
2008-08-04 20:23:12 +00:00
Daniel Stenberg 67f139e016 - As was pointed out to me by Andreas Schuldei, the MAXHOSTNAMELEN define is
not posix or anything and thus c-ares failed to build on hurd (and possibly
  elsewhere). The define was also somewhat artificially used in the windows
  port. Now, I instead rewrote the use of gethostbyname to enlarge the host
  name buffer in case of need and totally avoid the use of the MAXHOSTNAMELEN
  define. I thus also removed the defien from the namser.h file where it was
  once added for the windows build.

  I also fixed init_by_defaults() function to not leak memory in case if
  error.
2008-06-30 12:48:25 +00:00
Yang Tse cfc1d037ff use same time source for timeout initialization and processing 2008-05-15 00:00:19 +00:00
Daniel Stenberg 76c251513e - Introducing millisecond resolution support for the timeout option. See
ares_init_options()'s ARES_OPT_TIMEOUTMS.
2008-05-13 20:48:48 +00:00
Yang Tse a60c9ef88e Improved parsing of resolver configuration files 2008-05-05 17:48:25 +00:00
Daniel Stenberg b50a96982e Eino Tuominen improved the code when a file is used to seed the randomizer 2008-04-04 20:05:23 +00:00
Gunter Knauf f614fe4946 removed dependency on gettimeofday() since we use only 1 sec resolution here. 2007-10-22 23:31:40 +00:00
Yang Tse 5c8fc7dce9 Fix compiler warning: conversion from "int" to "unsigned short" may lose significant bits 2007-10-20 15:11:51 +00:00
Yang Tse ee19b44fe0 Renamed a variable to avoid shadowing a global declaration 2007-10-18 17:31:19 +00:00
Yang Tse 8cfb0e26bb Fix compiler warning: conversion from "int" to "unsigned char"
may lose significant bits
2007-10-18 01:01:20 +00:00
Yang Tse 94162d62ac Avoid a segfault when generating a DNS "Transaction ID" in internal
function init_id_key() under low memory conditions.
2007-10-02 18:26:48 +00:00
Steinar H. Gunderson 23f5d145ec Previously, processing a large batch of timeouts was O(n^2) in the number of
outstanding queries, and processing a DNS response packet was O(n) in the
number of outstanding queries. To speed things up in Google, we added a few circular,
doubly-linked lists of queries that are hash-bucketed based on
the attributes we care about, so most important operations are now O(1).

It might be that the number of buckets are higher than most people would need,
but on a quick calculation it should only be 100kB or so even on a 64-bit
system, so I've let it stay as-is.
2007-09-29 18:18:47 +00:00
Steinar H. Gunderson 08a70d117c Support a few more socket options, and refactor the option setting a bit. (Patch from the Google tree.) 2007-09-28 15:15:39 +00:00
Steinar H. Gunderson d426c20c0a Three fixes in one commit (sorry): a) Take care of the tcpbuf if it ends while queued for transmission, note broken servers and close them in the main loop, and store TCP socket generation number in order not to send the same query twice over the same socket. 2007-09-28 14:28:14 +00:00
Daniel Stenberg 05b26e7566 Brad House provided a fix for ares_save_options(): Apparently I overlooked
something with the ares_save_options() where it would try to do a malloc(0)
when no options of that type needed to be saved.  On most platforms, this was
fine because malloc(0) doesn't actually return NULL, but on AIX it does, so
ares_save_options would return ARES_ENOMEM.
2007-09-22 20:45:50 +00:00
Daniel Stenberg 1261c3feba Brad House's fix to hish a win32 compiler warning 2007-07-14 13:14:58 +00:00
Daniel Stenberg 88ce03e945 Vlad Dinulescu fixed two outstanding valgrind reports 2007-07-14 13:08:50 +00:00
Gunter Knauf 7509ef6b4e few minor changes to make ares compile for NetWare CLIB architecture. 2007-07-03 16:00:36 +00:00
Daniel Stenberg 25d2a27c64 Brad Spencer found and fixed three flaws in the code, found with the new
gcc 4.2.0 warning: -Waddress
2007-06-02 20:09:23 +00:00
Daniel Stenberg 6a674ded0e first take at detecting a random device and seeding the random key using data
from it in randomize_key()
2007-05-30 21:37:17 +00:00
Daniel Stenberg 2faba57c85 Shmulik Regev brought cryptographically secure transaction IDs 2007-05-30 21:11:10 +00:00
Daniel Stenberg 79d59ec97b Brad House added ares_save_options() and ares_destroy_options() that can be
used to keep options for later re-usal when ares_init_options() is used.
2007-05-30 20:49:14 +00:00
Daniel Stenberg fcc3e2ca34 Ravi Pratap fixed a flaw in the init_by_resolv_conf() function for windows
that could cause it to return a bad return code.
2007-05-25 21:11:28 +00:00
Gisle Vanem ee1235a7cd Removed inclusion of <sys/types.h> in .c-files
since it's already included through "setup.h".
2007-02-26 04:33:19 +00:00
Yang Tse 31e598d2f3 add debug messages for initialization failures 2007-02-19 02:03:58 +00:00
Yang Tse 059b57677c use macros ERRNO, SET_ERRNO(), SOCKERRNO and SET_SOCKERRNO() for errno handling 2007-02-16 15:04:44 +00:00
Yang Tse e3ade3ccb5 Oops, missing argument separator comma 2007-02-14 17:38:41 +00:00
Yang Tse 71afe05b9f in debug messages also show error description 2007-02-14 14:11:47 +00:00
Yang Tse ecbc7f89c0 Fix c-ares failing to get the search sequence of /etc/hosts and
DNS from /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when
/etc/resolv.conf did not exist or was unable to read it.
2007-02-13 16:14:25 +00:00
Gisle Vanem fabbb3fc34 Added HAVE_PROCESS_H for DOS/Win32.
Include <process.h> for getpid() in ares_init.c.
2007-02-06 19:09:57 +00:00
Yang Tse 8337a375dd add debug messages for initialization failures 2007-02-02 16:01:55 +00:00
Yang Tse 54db98c220 compiler warning fix 2007-02-01 01:42:13 +00:00
Daniel Stenberg 04d5d1895c Michael Wallner fixed this problem: When I set domains in the options
struct, and there are domain/search entries in /etc/resolv.conf, the domains
of the options struct will be overridden.
2006-11-22 22:54:41 +00:00
Yang Tse 3274908551 avoid a couple of potential zero size memory allocations 2006-11-06 13:56:51 +00:00
Yang Tse 9c1ad0f9f7 Replace is*() macros with our own IS*() ones.
Get rid of non ANSI/ISO isascii().
2006-10-18 03:42:06 +00:00
Daniel Stenberg 00ae13f966 - Guilherme Balena Versiani: I noted a strange BUG in Win32 port
(ares_init.c/get_iphlpapi_dns_info() function): when I disable the network
  by hand or disconnect the network cable in Windows 2000 or Windows XP, my
  application gets 127.0.0.1 as the only name server. The problem comes from
  'GetNetworkParams' function, that returns the empty string "" as the only
  name server in that case. Moreover, the Windows implementation of
  inet_addr() returns INADDR_LOOPBACK instead of INADDR_NONE.
2006-09-11 20:25:13 +00:00
Gisle Vanem 8c36fc8f31 Added CVS id. 2006-07-22 15:38:35 +00:00
Gisle Vanem 655ec6bf8e If CURLDEBUG defined, call curl_memdebug() if $CARES_MEMDEBUG is set. 2006-07-22 14:51:39 +00:00
Daniel Stenberg dd06c60ada Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes
c-ares call a callback on socket state changes. A better way than the
ares_getsock() to get full control over the socket state.
2006-05-03 06:11:44 +00:00
Daniel Stenberg 00c7780fcb James Bursa fixes: find the hosts file on RISC OS, and made it build with
newer gcc versions that no longer defines "riscos".
2006-01-05 07:57:32 +00:00
Daniel Stenberg 0c37ab5255 Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info()
when getting the DNS server etc.
2005-08-21 21:09:44 +00:00
Daniel Stenberg 82cb462bb4 killed trailing whitespace, narrowed a few lines to 80 cols 2005-08-04 08:07:44 +00:00
Daniel Stenberg e78ddf0a95 sortlist_alloc() is never used on win32, so ifdef out it to prevent warning 2005-04-19 23:26:14 +00:00
Daniel Stenberg 69b1ac7dcd avoid warning on windows 2005-04-16 12:30:01 +00:00
Dominick Meglio ea03ad3bee Made sortlist support IPv6 (this can probably use some testing) 2005-04-09 19:59:59 +00:00
Dominick Meglio feec421744 Made sortlist support CIDR matching for IPv4 2005-04-09 16:49:47 +00:00
Daniel Stenberg 993600761f Tupone Alfredo fixed includes of arpa/nameser_compat.h to build fine on Mac OS
X.
2005-04-06 22:27:42 +00:00
Daniel Stenberg 9406e517e6 silence win32 compiler warnings 2005-03-20 12:29:15 +00:00
Daniel Stenberg 04ea4b4d75 silence warnings on win32 about static functions that are never used 2005-03-19 01:03:46 +00:00
Daniel Stenberg 070da3c08f untabified 2004-12-10 21:46:00 +00:00