- Brad Spencer brought the new function ares_gethostbyname_file() which simply
[platform/upstream/c-ares.git] / CHANGES
1   Changelog for the c-ares project
2
3 * Nov 19 2008 (Daniel Stenberg)
4 - Brad Spencer brought the new function ares_gethostbyname_file() which simply
5   resolves a host name from the given file, using the regular hosts syntax.
6
7 * Nov 1 2008 (Daniel Stenberg)
8 - Carlo Contavalli added support for the glibc "rotate" option, as documented
9   in man resolv.conf: 
10
11   causes round robin selection of nameservers from among those listed.  This
12   has the effect of spreading the query load among all listed servers, rather
13   than having all clients try the first listed server first every time.
14
15   You can enable it with ARES_OPT_ROTATE
16
17 * Oct 21 2008 (Yang Tse)
18   Charles Hardin added handling of EINPROGRESS for UDP connects.
19
20 * Oct 18 2008 (Daniel Stenberg)
21   Charles Hardin made adig support a regular numerical dotted IP address for the
22   -s option as well.
23
24 * Oct 7 2008 (Yang Tse)
25 - Added --enable-optimize configure option to enable and disable compiler
26   optimizations to allow decoupled setting from --enable-debug.
27
28 * Oct 2 2008 (Yang Tse)
29 - Added --enable-warnings configure option to enable and disable strict
30   compiler warnings to allow decoupled setting from --enable-debug.
31
32 * Sep 17 2008 (Yang Tse)
33 - Code reorganization to allow internal/private use of "nameser.h" to any
34   system that lacks arpa/nameser.h or arpa/nameser_compat.h header files.
35
36 * Sep 16 2008 (Yang Tse)
37 - Code reorganization to allow internal/private use of ares_writev to any
38   system that lacks the writev function.
39
40 * Sep 15 2008 (Yang Tse)
41 - Code reorganization to allow internal/private use of ares_strcasecmp to any
42   system that lacks the strcasecmp function.
43
44 - Improve configure detection of some string functions.
45
46 * Sep 11 2008 (Yang Tse)
47 - Code reorganization to allow internal/private use of ares_strdup to any
48   system that lacks the strdup function.
49
50 Version 1.5.3 (Aug 29, 2008)
51
52 * Aug 25 2008 (Yang Tse)
53 - Improvement by Brad House:
54
55   This patch addresses an issue in which a response could be sent back to the
56   source port of a client from a different address than the request was made to.
57   This is one form of a DNS cache poisoning attack.
58
59   The patch simply uses recvfrom() rather than recv() and validates that the
60   address returned from recvfrom() matches the address of the server we have
61   connected to. Only necessary on UDP sockets as they are connection-less, TCP
62   is unaffected.
63
64 - Fix by George Neill:
65   Fixed compilation of acountry sample application failure on some systems.
66
67 * Aug 4 2008 (Daniel Stenberg)
68 - Fix by Tofu Linden:
69
70   The symptom:
71   * Users (usually, but not always) on 2-Wire routers and the Comcast service
72   and a wired connection to their router would find that the second and
73   subsequent DNS lookups from fresh processes using c-ares to resolve the same
74   address would cause the process to never see a reply (it keeps polling for
75   around 1m15s before giving up).
76
77   The repro:
78   * On such a machine (and yeah, it took us a lot of QA to find the systems
79   that reproduce such a specific problem!), do 'ahost www.secondlife.com',
80   then do it again.  The first process's lookup will work, subsequent lookups
81   will time-out and fail.
82
83   The cause:
84   * init_id_key() was calling randomize_key() *before* it initialized
85   key->state, meaning that the randomness generated by randomize_key() is
86   immediately overwritten with deterministic values. (/dev/urandom was also
87   being read incorrectly in the c-ares version we were using, but this was
88   fixed in a later version.)
89   * This makes the stream of generated query-IDs from any new c-ares process
90   be an identical and predictable sequence of IDs.
91   * This makes the 2-Wire's default built-in DNS server detect these queries
92   as probable-duplicates and (erroneously) not respond at all.
93
94
95 * Aug 4 2008 (Yang Tse)
96 - Autoconf 2.62 has changed the behaviour of the AC_AIX macro which we use.
97   Prior versions of autoconf defined _ALL_SOURCE if _AIX was defined. 2.62
98   version of AC_AIX defines _ALL_SOURCE and other four preprocessor symbols
99   no matter if the system is AIX or not. To keep the traditional behaviour,
100   and an uniform one across autoconf versions AC_AIX is replaced with our
101   own internal macro CARES_CHECK_AIX_ALL_SOURCE.
102
103 * Aug 1 2008 (Yang Tse)
104 - Configure process now checks if the preprocessor _REENTRANT symbol is already
105   defined. If it isn't currently defined a set of checks are performed to test
106   if its definition is required to make visible to the compiler a set of *_r
107   functions. Finally, if _REENTRANT is already defined or needed it takes care
108   of making adjustments necessary to ensure that it is defined equally for the
109   configure process tests and generated config file.
110
111 * Jul 20 2008 (Yang Tse)
112 - When recvfrom prototype uses a void pointer for arguments 2, 5 or 6 this will
113   now cause the definition, as appropriate, of RECVFROM_TYPE_ARG2_IS_VOID,
114   RECVFROM_TYPE_ARG5_IS_VOID or RECVFROM_TYPE_ARG6_IS_VOID.
115
116 * Jul 17 2008 (Yang Tse)
117 - RECVFROM_TYPE_ARG2, RECVFROM_TYPE_ARG5 and RECVFROM_TYPE_ARG6 are now defined
118   to the data type pointed by its respective argument and not the pointer type.
119
120 * Jul 16 2008 (Yang Tse)
121 - Improved configure detection of number of arguments for getservbyport_r.
122   Detection is now based on compilation checks instead of linker ones.
123
124 - Configure process now checks availability of recvfrom() socket function and
125   finds out its return type and the types of its arguments. Added definitions
126   for non-configure systems config files, and introduced macro sreadfrom which
127   will be used on udp sockets as a recvfrom() wrapper in the future.
128
129 * Jul 15 2008 (Yang Tse)
130 - Introduce definition of _REENTRANT symbol in setup.h to improve library
131   usability.  Previously the configure process only used the AC_SYS_LARGEFILE
132   macro for debug builds, now it is also used for non-debug ones enabling the
133   use of configure options --enable-largefile and --disable-largefile which
134   might be needed for library compatibility.  Remove checking the size of
135   curl_off_t, it is no longer needed.
136
137 * Jul 3 2008 (Daniel Stenberg)
138 - Phil Blundell: If you ask ares_gethostbyname() to do an AF_INET6 lookup and
139   the target host has only A records, it automatically falls back to an
140   AF_INET lookup and gives you the A results.  However, if the target host has
141   a CNAME record, this behaviour is defeated since the original query does
142   return some data even though ares_parse_aaa_reply() doesn't consider it
143   relevant. Here's a small patch to make it behave the same with and without
144   the CNAME.
145
146 * Jul 2 2008 (Yang Tse)
147 - Fallback to gettimeofday when monotonic clock is unavailable at run-time.
148
149 * Jun 30 2008 (Daniel Stenberg)
150
151 - As was pointed out to me by Andreas Schuldei, the MAXHOSTNAMELEN define is
152   not posix or anything and thus c-ares failed to build on hurd (and possibly
153   elsewhere). The define was also somewhat artificially used in the windows
154   port. Now, I instead rewrote the use of gethostbyname to enlarge the host
155   name buffer in case of need and totally avoid the use of the MAXHOSTNAMELEN
156   define. I thus also removed the defien from the namser.h file where it was
157   once added for the windows build.
158
159   I also fixed init_by_defaults() function to not leak memory in case if
160   error.
161
162 * Jun 9 2008 (Yang Tse)
163
164 - Make libcares.pc generated file for pkg-config include information relative
165   to the libraries needed for the static linking of c-ares.
166
167 * May 30 2008 (Yang Tse)
168
169 - Brad House fixed a missing header file inclusion in adig sample program.
170
171 Version 1.5.2 (May 29, 2008)
172
173 * May 13 2008 (Daniel Stenberg)
174
175 - Introducing millisecond resolution support for the timeout option. See
176   ares_init_options()'s ARES_OPT_TIMEOUTMS.
177
178 * May 9 2008 (Yang Tse)
179
180 - Use monotonic time source if available, for private function ares__tvnow()
181
182 * May 7 2008 (Daniel Stenberg)
183
184 - Sebastian made c-ares able to return all PTR-records when doing reverse
185   lookups. It is not common practice to have multiple PTR-Records for a single
186   IP, but its perfectly legal and some sites have those.
187
188 - Doug Goldstein provided a configure patch: updates autoconf 2.13 usage to
189   autoconf 2.57 usage (which is the version you have specified as the minimum
190   version). It's a minor change but it does clean up some warnings with newer
191   autoconf (specifically 2.62).
192
193 * May 5 2008 (Yang Tse)
194
195 - Improved parsing of resolver configuration files.
196
197 * April 4 2008 (Daniel Stenberg)
198
199 - Eino Tuominen improved the code when a file is used to seed the randomizer.
200
201 - Alexey Simak made adig support NAPTR records
202
203 - Alexey Simak fixed the VC dsp file by adding the missing source file
204   ares_expand_string.c
205
206 * December 11 2007 (Gisle Vanem)
207
208 - Added another sample application; acountry.c which converts an
209   IPv4-address(es) and/or host-name(s) to country-name and country-code.
210   This uses the service of the DNSBL at countries.nerd.dk.
211
212 * December 3 2007 (Daniel Stenberg)
213
214 - Brad Spencer fixed the configure script to assume that there's no
215   /dev/urandom when built cross-compiled as then the script cannot check for
216   it.
217
218 - Erik Kline cleaned up ares_gethostbyaddr.c:next_lookup() somewhat
219
220 Version 1.5.1 (Nov 21, 2007)
221
222 * November 21 2007 (Daniel Stenberg)
223
224 - Robin Cornelius pointed out that ares_llist.h was missing in the release
225   archive for 1.5.0
226
227 Version 1.5.0 (Nov 21, 2007)
228
229 * October 2 2007 (Daniel Stenberg)
230
231 - ares_strerror() segfaulted if the input error number was out of the currently
232   supported range.
233
234 - Yang Tse: Avoid a segfault when generating a DNS "Transaction ID" in
235   internal function init_id_key() under low memory conditions.
236
237 * September 28 2007 (Daniel Stenberg)
238
239 - Bumped version to 1.5.0 for next release and soname bumped to 2 due to ABI
240   and API changes in the progress callback (and possibly more coming up from
241   Steinar)
242
243 * September 28 2007 (Steinar H. Gunderson)
244
245 - Don't skip a server if it's the only one. (Bugfix from the Google tree.)
246
247 - Made the query callbacks receive the number of timeouts that happened during
248   the execution of a query, and updated documentation accordingly. (Patch from
249   the Google tree.)
250
251 - Support a few more socket options: ARES_OPT_SOCK_SNDBUF and
252   ARES_OPT_SOCK_RCVBUF
253
254 - Always register for TCP events even if there are no outstanding queries, as
255   the other side could always close the connection, which is a valid event
256   which should be responded to.
257
258 * September 22 2007 (Daniel Stenberg)
259
260 - Steinar H. Gunderson fixed: Correctly clear sockets from the fd_set on in
261   several functions (write_tcp_data, read_tcp_data, read_udp_packets) so that
262   if it fails and the socket is closed the following code doesn't try to use
263   the file descriptor.
264
265 - Steinar H. Gunderson modified c-ares to now also do to DNS retries even when
266   TCP is used since there are several edge cases where it still makes sense.
267
268 - Brad House provided a fix for ares_save_options():
269
270   Apparently I overlooked something with the ares_save_options() where it
271   would try to do a malloc(0) when no options of that type needed to be saved.
272   On most platforms, this was fine because malloc(0) doesn't actually return
273   NULL, but on AIX it does, so ares_save_options would return ARES_ENOMEM.
274
275 * July 14 2007 (Daniel Stenberg)
276
277 - Vlad Dinulescu fixed two outstanding valgrind reports:
278
279   1. In ares_query.c , in find_query_by_id we compare q->qid (which is a short
280   int variable) with qid, which is declared as an int variable.  Moreover,
281   DNS_HEADER_SET_QID is used to set the value of qid, but DNS_HEADER_SET_QID
282   sets only the first two bytes of qid. I think that qid should be declared as
283   "unsigned short" in this function.
284
285   2. The same problem occurs in ares_process.c, process_answer() .  query->qid
286   (an unsigned short integer variable) is compared with id, which is an
287   integer variable. Moreover, id is initialized from DNS_HEADER_QID which sets
288   only the first two bytes of id. I think that the id variable should be
289   declared as "unsigned short" in this function.
290
291   Even after declaring these variables as "unsigned short", the valgrind
292   errors are still there. Which brings us to the third problem.
293
294   3. The third problem is that Valgrind assumes that query->qid is not
295   initialised correctly. And it does that because query->qid is set from
296   DNS_HEADER_QID(qbuf); Valgrind says that qbuf has unitialised bytes. And
297   qbuf has uninitialised bytes because of channel->next_id . And next_id is
298   set by ares_init.c:ares__generate_new_id() . I found that putting short r=0
299   in this function (instead of short r) makes all Valgrind warnings go away.
300   I have studied ares__rc4() too, and this is the offending line:
301
302         buffer_ptr[counter] ^= state[xorIndex];   (ares_query.c:62)
303
304   This is what triggers Valgrind.. buffer_ptr is unitialised in this function,
305   and by applying ^= on it, it remains unitialised.
306
307 Version 1.4.0 (June 8, 2007)
308
309 * June 4 2007 (Daniel Stenberg)
310
311 - James Bursa reported a major memory problem when resolving multi-IP names
312   and I found and fixed the problem. It was added by Ashish Sharma's patch
313   two days ago.
314
315   When I then tried to verify multiple entries in /etc/hosts after my fix, I
316   got another segfault and decided this code was not ripe for inclusion and I
317   reverted the patch.
318
319 * June 2 2007
320
321 - Brad Spencer found and fixed three flaws in the code, found with the new
322   gcc 4.2.0 warning: -Waddress
323
324 - Brad House fixed VS2005 compiler warnings due to time_t being 64bit.
325   He also made recent Microsoft compilers use _strdup() instead of strdup().
326
327 - Brad House's man pages for ares_save_options() and ares_destroy_options()
328   were added.
329
330 - Ashish Sharma provided a patch for supporting multiple entries in the
331   /etc/hosts file. Patch edited for coding style and functionality by me
332   (Daniel).
333
334 * May 30 2007
335
336 - Shmulik Regev brought cryptographically secure transaction IDs:
337
338   The c-ares library implementation uses a DNS "Transaction ID" field that is
339   seeded with a pseudo random number (based on gettimeofday) which is
340   incremented (++) between consecutive calls and is therefore rather
341   predictable. In general, predictability of DNS Transaction ID is a well
342   known security problem (e.g.
343   http://bak.spc.org/dms/archive/dns_id_attack.txt) and makes a c-ares based
344   implementation vulnerable to DNS poisoning. Credit goes to Amit Klein
345   (Trusteer) for identifying this problem.
346
347   The patch I wrote changes the implementation to use a more secure way of
348   generating unique IDs. It starts by obtaining a key with reasonable entropy
349   which is used with an RC4 stream to generate the cryptographically secure
350   transaction IDs.
351
352   Note that the key generation code (in ares_init:randomize_key) has two
353   versions, the Windows specific one uses a cryptographically safe function
354   provided (but undocumented :) by the operating system (described at
355   http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx).  The
356   default implementation is a bit naive and uses the standard 'rand'
357   function. Surely a better way to generate random keys exists for other
358   platforms.
359
360   The patch can be tested by using the adig utility and using the '-s' option.
361
362 - Brad House added ares_save_options() and ares_destroy_options() that can be
363   used to keep options for later re-usal when ares_init_options() is used.
364
365   Problem: Calling ares_init() for each lookup can be unnecessarily resource
366          intensive.  On windows, it must LoadLibrary() or search the registry
367          on each call to ares_init().  On unix, it must read and parse
368          multiple files to obtain the necessary configuration information.  In
369          a single-threaded environment, it would make sense to only
370          ares_init() once, but in a heavily multi-threaded environment, it is
371          undesirable to ares_init() and ares_destroy() for each thread created
372          and track that.
373
374   Solution: Create ares_save_options() and ares_destroy_options() functions to
375          retrieve and free options obtained from an initialized channel.  The
376          options populated can be used to pass back into ares_init_options(),
377          it should populate all needed fields and not retrieve any information
378          from the system.  Probably wise to destroy the cache every minute or
379          so to prevent the data from becoming stale.
380
381 - Daniel S added ares_process_fd() to allow applications to ask for processing
382   on specific sockets and thus avoiding select() and associated
383   functions/macros.  This function will be used by upcoming libcurl releases
384   for this very reason. It also made me export the ares_socket_t type in the
385   public ares.h header file, since ares_process_fd() uses that type for two of
386   the arguments.
387
388 * May 25 2007
389
390 - Ravi Pratap fixed a flaw in the init_by_resolv_conf() function for windows
391   that could cause it to return a bad return code.
392
393 * April 16 2007
394
395 - Yang Tse: Provide ares_getopt() command-line parser function as a source
396   code helper function, not belonging to the actual c-ares library.
397
398 * February 19 2007
399
400 - Vlad Dinulescu added ares_parse_ns_reply().
401
402 * February 13 2007
403
404 - Yang Tse: Fix failure to get the search sequence of /etc/hosts and
405   DNS from /etc/nsswitch.conf, /etc/host.conf or /etc/svc.conf when
406   /etc/resolv.conf did not exist or was unable to read it.
407
408 * November 22 2006
409
410 - Install ares_dns.h too
411
412 - Michael Wallner fixed this problem: When I set domains in the options
413   struct, and there are domain/search entries in /etc/resolv.conf, the domains
414   of the options struct will be overridden.
415
416 * November 6 2006
417
418 - Yang Tse removed a couple of potential zero size memory allocations.
419
420 - Andreas Rieke fixed the line endings in the areslib.dsp file that I (Daniel)
421   broke in the 1.3.2 release. We should switch to a system where that file is
422   auto-generated. We could rip some code for that from curl...
423
424 Version 1.3.2 (November 3, 2006)
425
426 * October 12 2006
427
428 - Prevent ares_getsock() to overflow if more than 16 sockets are used.
429
430 * September 11 2006
431
432 - Guilherme Balena Versiani: I noted a strange BUG in Win32 port
433   (ares_init.c/get_iphlpapi_dns_info() function): when I disable the network
434   by hand or disconnect the network cable in Windows 2000 or Windows XP, my
435   application gets 127.0.0.1 as the only name server. The problem comes from
436   'GetNetworkParams' function, that returns the empty string "" as the only
437   name server in that case. Moreover, the Windows implementation of
438   inet_addr() returns INADDR_LOOPBACK instead of INADDR_NONE.
439
440 * August 29 2006
441
442 - Brad Spencer did
443
444   o made ares_version.h use extern "C" for c++ compilers
445   o fixed compiler warnings in ares_getnameinfo.c
446   o fixed a buffer position init for TCP reads
447
448 * August 3 2006
449
450 - Ravi Pratap fixed ares_getsock() to actually return the proper bitmap and
451   not always zero!
452
453 Version 1.3.1 (June 24, 2006)
454
455 * July 23, 2006
456
457 - Gisle Vanem added getopt() to the ahost program. Currently accepts
458   only [-t {a|aaaa}] to specify address family in ares_gethostbyname().
459
460 * June 19, 2006
461
462 - (wahern) Removed "big endian" DNS section and RR data integer parser
463   macros from ares_dns.h, which break c-ares on my Sparc64. Bit-wise
464   operations in C operate on logical values. And in any event the octets are
465   already in big-endian (aka network) byte order so they're being reversed
466   (thus the source of the breakage).
467
468 * June 18, 2006
469
470 - William Ahern handles EAGAIN/EWOULDBLOCK errors in most of the I/O calls
471   from area_process.c.
472
473   TODO: Handle one last EAGAIN for a UDP socket send(2) in
474   ares__send_query().
475
476 * May 10, 2006
477
478 - Bram Matthys brought my attention to a libtool peculiarity where detecting
479   things such as C++ compiler actually is a bad thing and since we don't need
480   that detection I added a work-around, much inspired by a previous patch by
481   Paolo Bonzini. This also shortens the configure script quite a lot.
482
483 * May 3, 2006
484
485 - Nick Mathewson added the ARES_OPT_SOCK_STATE_CB option that when set makes
486   c-ares call a callback on socket state changes. A better way than the
487   ares_getsock() to get full control over the socket state.
488
489 * January 9, 2006
490
491 - Alexander Lazic improved the getservbyport_r() configure check.
492
493 * January 6, 2006
494
495 - Alexander Lazic pointed out that the buildconf should use the ACLOCAL_FLAGS
496   variable for easier controlling what it does and how it runs.
497
498 * January 5, 2006
499
500 - James Bursa fixed c-ares to find the hosts file on RISC OS, and made it
501   build with newer gcc versions that no longer defines "riscos".
502
503 * December 22
504
505 - Daniel Stenberg added ares_getsock() that extracts the set of sockets to
506   wait for action on. Similar to ares_fds() but not restricted to using
507   select() for the waiting.
508
509 * November 25
510
511 - Yang Tse fixed some send() / recv() compiler warnings
512
513 * September 18
514
515 - Added constants that will be used by ares_getaddrinfo
516
517 - Made ares_getnameinfo use the reentrant getservbyport (getservbyport_r) if it
518   is available to ensure it works properly in a threaded environment.
519
520 * September 10
521
522 - configure fix for detecting a member in the sockaddr_in6 struct which failed
523   on ipv6-enabled HP-UX 11.00
524
525 Version 1.3.0 (August 29, 2005)
526
527 * August 21
528
529 - Alfredo Tupone provided a fix for the Windows code in get_iphlpapi_dns_info()
530   when getting the DNS server etc.
531
532 * June 19
533
534 - Added some checks for the addrinfo structure.
535
536 * June 2
537
538 - William Ahern:
539
540   Make UDP sockets non-blocking. I've confirmed that at least on Linux 2.4 a
541   read event can come back from poll() on a valid SOCK_DGRAM socket but
542   recv(2) will still block. This patch doesn't ignore EAGAIN in
543   read_udp_packets(), though maybe it should. (This patch was edited by Daniel
544   Stenberg and a new configure test was added (imported from curl's configure)
545   to properly detect what non-blocking socket approach to use.)
546
547   I'm not quite sure how this was happening, but I've been seeing PTR queries
548   which seem to return empty responses. At least, they were empty when calling
549   ares_expand_name() on the record. Here's a patch which guarantees to
550   NUL-terminate the expanded name. The old behavior failed to NUL-terminate if
551   len was 0, and this was causing strlen() to run past the end of the buffer
552   after calling ares_expand_name() and getting ARES_SUCCESS as the return
553   value. If q is not greater than *s then it's equal and *s is always
554   allocated with at least one byte.
555
556 * May 16
557
558 - Added ares_getnameinfo which mimics the getnameinfo API (another feature
559   that could use testing).
560
561 * May 14
562
563 - Added an inet_ntop function from BIND for systems that do not have it.
564
565 * April 9
566
567 - Made sortlist support IPv6 (this can probably use some testing).
568
569 - Made sortlist support CIDR matching for IPv4.
570
571 * April 8
572
573 - Added preliminary IPv6 support to ares_gethostbyname. Currently, sortlist
574   does not work with IPv6. Also provided an implementation of bitncmp from
575   BIND for systems that do not supply this function. This will be used to add
576   IPv6 support to sortlist.
577
578 - Made ares_gethostbyaddr support IPv6 by specifying AF_INET6 as the family.
579   The function can lookup IPv6 addresses both from files (/etc/hosts) and
580   DNS lookups.
581
582 * April 7
583
584 - Tupone Alfredo fixed includes of arpa/nameser_compat.h to build fine on Mac
585   OS X.
586
587 * April 5
588
589 - Dominick Meglio: Provided implementations of inet_net_pton and inet_pton
590   from BIND for systems that do not include these functions.
591
592 * March 11, 2005
593
594 - Dominick Meglio added ares_parse_aaaa_reply.c and did various
595   adjustments. The first little steps towards IPv6 support!
596
597 * November 7
598
599 - Fixed the VC project and makefile to use ares_cancel and ares_version
600
601 * October 24
602
603 - The released ares_version.h from 1.2.1 says 1.2.0 due to a maketgz flaw.
604   This is now fixed.
605
606 Version 1.2.1 (October 20, 2004)
607
608 * September 29
609
610 - Henrik Stoerner fix: got a report that Tru64 Unix (the unix from Digital
611   when they made Alpha's) uses /etc/svc.conf for the purpose fixed below for
612   other OSes. He made c-ares check for and understand it if present.
613
614 - Now c-ares will use local host name lookup _before_ DNS resolving by default
615   if nothing else is told.
616
617 * September 26
618
619 - Henrik Stoerner: found out that c-ares does not look at the /etc/host.conf
620   file to determine the sequence in which to search /etc/hosts and DNS.  So on
621   systems where this order is defined by /etc/host.conf instead of a "lookup"
622   entry in /etc/resolv.conf, c-ares will always default to looking in DNS
623   first, and /etc/hosts second.
624
625   c-ares now looks at
626
627   1) resolv.conf (for the "lookup" line);
628   2) nsswitch.fon (for the "hosts:" line);
629   3) host.conf (for the "order" line).
630
631   First match wins.
632
633 - Dominick Meglio patched: C-ares on Windows assumed that the HOSTS file is
634   located in a static location. It assumed
635   C:\Windows\System32\Drivers\Etc. This is a poor assumption to make. In fact,
636   the location of the HOSTS file can be changed via a registry setting.
637
638   There is a key called DatabasePath which specifies the path to the HOSTS
639   file:
640   http://www.microsoft.com/technet/itsolutions/network/deploy/depovg/tcpip2k.mspx
641
642   The patch will make c-ares correctly consult the registry for the location
643   of this file.
644
645 * August 29
646
647 - Gisle Vanem fixed the MSVC build files.
648
649 * August 20
650
651 - Gisle Vanem made c-ares build and work with his Watt-32 TCP/IP stack.
652
653 * August 13
654
655 - Harshal Pradhan made a minor syntax change in ares_init.c to make it build
656   fine with MSVC 7.1
657
658 * July 24
659
660 - Made the lib get built static only if --enable-debug is used.
661
662 - Gisle Vanem fixed:
663
664   Basically in loops like handle_errors(), 'query->next' was assigned a local
665   variable and then query was referenced after the memory was freed by
666   next_server(). I've changed that so next_server() and end_query() returns
667   the next query. So callers should use this ret-value.
668
669   The next problem was that 'server->tcp_buffer_pos' had a random value at
670   entry to 1st recv() (luckily causing Winsock to return ENOBUFS).
671
672   I've also added a ares_writev() for Windows to streamline the code a bit
673   more.
674
675 * July 20
676 - Fixed a few variable return types for some system calls. Made configure
677   check for ssize_t to make it possible to use that when receiving the send()
678   error code. This is necessary to prevent compiler warnings on some systems.
679
680 - Made configure create config.h, and all source files now include setup.h that
681   might include the proper config.h (or a handicrafted alternative).
682
683 - Switched to 'ares_socket_t' type for sockets in ares, since Windows don't
684   use 'int' for that.
685
686 - automake-ified and libool-ified c-ares. Now it builds libcares as a shared
687   lib on most platforms if wanted. (This bloated the size of the release
688   archive with another 200K!)
689
690 - Makefile.am now uses Makefile.inc for the c sources, h headers and man
691   pages, to make it easier for other makefiles to use the exact same set of
692   files.
693
694 - Adjusted 'maketgz' to use the new automake magic when building distribution
695   archives.
696
697 - Anyone desires HTML and/or PDF versions of the man pages in the release
698   archives?
699
700 * July 3
701 - Günter Knauf made c-ares build and run on Novell Netware.
702
703 * July 1
704 - Gisle Vanem provided Makefile.dj to build with djgpp, added a few more djgpp
705   fixes and made ares not use 'errno' to provide further info on Windows.
706
707 * June 30
708 - Gisle Vanem made it build with djgpp and run fine with the Watt-32 stack.
709
710 * June 10
711 - Gisle Vanem's init patch for Windows:
712
713   The init_by_resolv_conf() function fetches the DNS-server(s)
714   from a series of registry branches.
715
716   This can be wrong in the case where DHCP has assigned nameservers, but the
717   user has overridden these servers with other prefered settings. Then it's
718   wrong to use the DHCPNAMESERVER setting in registry.
719
720   In the case of no global DHCP-assigned or fixed servers, but DNS server(s)
721   per adapter, one has to query the adapter branches.  But how can c-ares know
722   which adapter is valid for use? AFAICS it can't. There could be one adapter
723   that is down (e.g. a VPN adapter).
724
725   So it's better to leave this to the IP Helper API (iphlapi) available in
726   Win-98/2000 and later. My patch falls-back to the old way if not available.
727
728 * June 8
729 - James Bursa fixed an init issue for RISC OS.
730
731 * May 11
732 - Nico Stappenbelt reported that when processing domain and search lines in
733   the resolv.conf file, the first entry encountered is processed and used as
734   the search list. According to the manual pages for both Linux, Solaris and
735   Tru64, the last entry of either a domain or a search field is used.
736
737   This is now adjusted in the code
738
739 Version 1.2.0 (April 13, 2004)
740
741 * April 2, 2004
742 - Updated various man pages to look nicer when converted to HTML on the web
743   site.
744
745 * April 1, 2004
746 - Dirk Manske provided a new function that is now named ares_cancel(). It is
747   used to cancel/cleanup a resolve/request made using ares functions on the
748   given ares channel. It does not destroy/kill the ares channel itself.
749
750 - Dominick Meglio cleaned up the formatting in several man pages.
751
752 * March 30, 2004
753 - Dominick Meglio's new ares_expand_string. A helper function when decoding
754   incoming DNS packages.
755
756 - Daniel Stenberg modified the Makefile.in to use a for loop for the man page
757   installation to improve overview and make it easier to add man pages.
758
759 Version 1.1.0 (March 11, 2004)
760
761 * March 9, 2004
762 - Gisle Vanem improved build on Windows.
763
764 * February 25, 2004
765 - Dan Fandrich found a flaw in the Feb 22 fix.
766
767 - Added better configure --enable-debug logic (taken from the curl configure
768   script). Added acinclude.m4 to the tarball.
769
770 * February 23, 2004
771 - Removed ares_free_errmem(), the function, the file and the man page. It was
772   not used and it did nothing.
773
774 - Fixed a lot of code that wasn't "64bit clean" and thus caused a lot of
775   compiler warnings on picky compilers.
776
777 * February 22, 2004
778 - Dominick Meglio made ares init support multiple name servers in the
779   NameServer key on Windows.
780
781 * February 16, 2004
782 - Modified ares_private.h to include libcurl's memory debug header if
783   CURLDEBUG is set. This makes all the ares-functions supervised properly by
784   the curl test suite. This also forced me to add inclusion of the
785   ares_private.h header in a few more files that are using some kind of
786   memory-related resources.
787
788 - Made the makefile only build ahost and adig if 'make demos' is used.
789
790 * February 10, 2004
791 - Dirk Manske made ares_version.h installed with 'make install'
792
793 * February 4, 2004
794 - ares_free_errmem() is subject for removal, it is simply present for future
795   purposes, and since we removed the extra parameter in strerror() it won't
796   be used by c-ares!
797 - configure --enable-debug now enables picky compiler options if gcc is used
798 - fixed several compiler warnings --enable-debug showed and Joerg Mueller-Tolk
799   reported
800
801 Version 1.0.0 (February 3, 2004)
802
803 * February 3, 2004
804 - now we produce the libcares.a library instead of the previous libares.a
805   since we are no longer compatible
806
807 * February 2, 2004
808
809 - ares_strerror() has one argument less. This is the first official
810   modification of the existing provided ares API.
811
812 * January 29, 2004
813
814 - Dirk Manske fixed how the socket is set non-blocking.
815
816 * January 4, 2004
817
818 - Dominick Meglio made the private gettimeofday() become ares_gettimeofday()
819   instead in order to not pollute the name space and risk colliding with
820   other libraries' versions of this function.
821
822 * October 24, 2003. Daniel Stenberg
823
824   Added ares_version().
825
826 Version 1.0-pre1 (8 October 2003)
827
828 - James Bursa made it run on RISC OS
829
830 - Dominick Meglio made it run fine on NT4
831
832 - Duncan Wilcox made it work fine on Mac OS X
833
834 - Daniel Stenberg adjusted the windows port
835
836 - liren at vivisimo.com made the initial windows port
837
838 * Imported the sources from ares 1.1.1