diff --git a/src/main/jni/libev/Changes b/src/main/jni/libev/Changes new file mode 100644 index 00000000..9e8f4f26 --- /dev/null +++ b/src/main/jni/libev/Changes @@ -0,0 +1,477 @@ +Revision history for libev, a high-performance and full-featured event loop. + +TODO: ev_loop_wakeup +TODO: EV_STANDALONE == NO_HASSEL (do not use clock_gettime in ev_standalone) +TODO: faq, process a thing in each iteration +TODO: dbeugging tips, ev_verify, ev_init twice +TODO: ev_break for immediate exit (EVBREAK_NOW?) +TODO: ev_feed_child_event +TODO: document the special problem of signals around fork. +TODO: store pid for each signal +TODO: document file descriptor usage per loop +TODO: store loop pid_t and compare isndie signal handler,store 1 for same, 2 for differign pid, clean up in loop_fork +TODO: embed watchers need updating when fd changes +TODO: document portbaility requirements for atomic pointer access + +4.15 Fri Mar 1 12:04:50 CET 2013 + - destroying a non-default loop would stop the global waitpid + watcher (Denis Bilenko). + - queueing pending watchers of higher priority from a watcher now invokes + them in a timely fashion (reported by Denis Bilenko). + - add throw() to all libev functions that cannot throw exceptions, for + further code size decrease when compiling for C++. + - add throw () to callbacks that must not throw exceptions (allocator, + syserr, loop acquire/release, periodic reschedule cbs). + - fix event_base_loop return code, add event_get_callback, event_base_new, + event_base_get_method calls to improve libevent 1.x emulation and add + some libevent 2.x functionality (based on a patch by Jeff Davey). + - add more memory fences to fix a bug reported by Jeff Davey. Better + be overfenced than underprotected. + - ev_run now returns a boolean status (true meaning watchers are + still active). + - ev_once: undef EV_ERROR in ev_kqueue.c, to avoid clashing with + libev's EV_ERROR (reported by 191919). + - (ecb) add memory fence support for xlC (Darin McBride). + - (ecb) add memory fence support for gcc-mips (Anton Kirilov). + - (ecb) add memory fence support for gcc-alpha (Christian Weisgerber). + - work around some kernels losing file descriptors by leaking + the kqueue descriptor in the child. + - work around linux inotify not reporting IN_ATTRIB changes for directories + in many cases. + - include sys/syscall.h instead of plain syscall.h. + - check for io watcher loops in ev_verify, check for the most + common reported usage bug in ev_io_start. + - chose socket vs. WSASocket at compiletime using EV_USE_WSASOCKET. + - always use WSASend/WSARecv directly on windows, hoping that this + works in all cases (unlike read/write/send/recv...). + - try to detect signals around a fork faster (test program by + Denis Bilenko). + - work around recent glibc versions that leak memory in realloc. + - rename ev::embed::set to ev::embed::set_embed to avoid clashing + the watcher base set (loop) method. + - rewrite the async/signal pipe logic to always keep a valid fd, which + simplifies (and hopefuly correctifies :) the race checking + on fork, at the cost of one extra fd. + - add fat, msdos, jffs2, ramfs, ntfs and btrfs to the list of + inotify-supporting filesystems. + - move orig_CFLAGS assignment to after AC_INIT, as newer autoconf + versions ignore it before + (https://bugzilla.redhat.com/show_bug.cgi?id=908096). + - add some untested android support. + - enum expressions must be of type int (reported by Juan Pablo L). + +4.11 Sat Feb 4 19:52:39 CET 2012 + - INCOMPATIBLE CHANGE: ev_timer_again now clears the pending status, as + was documented already, but not implemented in the repeating case. + - new compiletime symbols: EV_NO_SMP and EV_NO_THREADS. + - fix a race where the workaround against the epoll fork bugs + caused signals to not be handled anymore. + - correct backend_fudge for most backends, and implement a windows + specific workaround to avoid looping because we call both + select and Sleep, both with different time resolutions. + - document range and guarantees of ev_sleep. + - document reasonable ranges for periodics interval and offset. + - rename backend_fudge to backend_mintime to avoid future confusion :) + - change the default periodic reschedule function to hopefully be more + exact and correct even in corner cases or in the far future. + - do not rely on -lm anymore: use it when available but use our + own floor () if it is missing. This should make it easier to embed, + as no external libraries are required. + - strategically import macros from libecb and mark rarely-used functions + as cache-cold (saving almost 2k code size on typical amd64 setups). + - add Symbols.ev and Symbols.event files, that were missing. + - fix backend_mintime value for epoll (was 1/1024, is 1/1000 now). + - fix #3 "be smart about timeouts" to not "deadlock" when + timeout == now, also improve the section overall. + - avoid "AVOIDING FINISHING BEFORE RETURNING" idiom. + - support new EV_API_STATIC mode to make all libev symbols + static. + - supply default CFLAGS of -g -O3 with gcc when original CFLAGS + were empty. + +4.04 Wed Feb 16 09:01:51 CET 2011 + - fix two problems in the native win32 backend, where reuse of fd's + with different underlying handles caused handles not to be removed + or added to the select set (analyzed and tested by Bert Belder). + - do no rely on ceil() in ev_e?poll.c. + - backport libev to HP-UX versions before 11 v3. + - configure did not detect nanosleep and clock_gettime properly when + they are available in the libc (as opposed to -lrt). + +4.03 Tue Jan 11 14:37:25 CET 2011 + - officially support polling files with all backends. + - support files, /dev/zero etc. the same way as select in the epoll + backend, by generating events on our own. + - ports backend: work around solaris bug 6874410 and many related ones + (EINTR, maybe more), with no performance loss (note that the solaris + bug report is actually wrong, reality is far more bizarre and broken + than that). + - define EV_READ/EV_WRITE as macros in event.h, as some programs use + #ifdef to test for them. + - new (experimental) function: ev_feed_signal. + - new (to become default) EVFLAG_NOSIGMASK flag. + - new EVBACKEND_MASK symbol. + - updated COMMON IDIOMS SECTION. + +4.01 Fri Nov 5 21:51:29 CET 2010 + - automake fucked it up, apparently, --add-missing -f is not quite enough + to make it update its files, so 4.00 didn't install ev++.h and + event.h on make install. grrr. + - ev_loop(count|depth) didn't return anything (Robin Haberkorn). + - change EV_UNDEF to 0xffffffff to silence some overzealous compilers. + - use "(libev) " prefix for all libev error messages now. + +4.00 Mon Oct 25 12:32:12 CEST 2010 + - "PORTING FROM LIBEV 3.X TO 4.X" (in ev.pod) is recommended reading. + - ev_embed_stop did not correctly stop the watcher (very good + testcase by Vladimir Timofeev). + - ev_run will now always update the current loop time - it erroneously + didn't when idle watchers were active, causing timers not to fire. + - fix a bug where a timeout of zero caused the timer not to fire + in the libevent emulation (testcase by Péter Szabó). + - applied win32 fixes by Michael Lenaghan (also James Mansion). + - replace EV_MINIMAL by EV_FEATURES. + - prefer EPOLL_CTL_ADD over EPOLL_CTL_MOD in some more cases, as it + seems the former is *much* faster than the latter. + - linux kernel version detection (for inotify bug workarounds) + did not work properly. + - reduce the number of spurious wake-ups with the ports backend. + - remove dependency on sys/queue.h on freebsd (patch by Vanilla Hsu). + - do async init within ev_async_start, not ev_async_set, which avoids + an API quirk where the set function must be called in the C++ API + even when there is nothing to set. + - add (undocumented) EV_ENABLE when adding events with kqueue, + this might help with OS X, which seems to need it despite documenting + not to need it (helpfully pointed out by Tilghman Lesher). + - do not use poll by default on freebsd, it's broken (what isn't + on freebsd...). + - allow to embed epoll on kernels >= 2.6.32. + - configure now prepends -O3, not appends it, so one can still + override it. + - ev.pod: greatly expanded the portability section, added a porting + section, a description of watcher states and made lots of minor fixes. + - disable poll backend on AIX, the poll header spams the namespace + and it's not worth working around dead platforms (reported + and analyzed by Aivars Kalvans). + - improve header file compatibility of the standalone eventfd code + in an obscure case. + - implement EV_AVOID_STDIO option. + - do not use sscanf to parse linux version number (smaller, faster, + no sscanf dependency). + - new EV_CHILD_ENABLE and EV_SIGNAL_ENABLE configurable settings. + - update libev.m4 HAVE_CLOCK_SYSCALL test for newer glibcs. + - add section on accept() problems to the manpage. + - rename EV_TIMEOUT to EV_TIMER. + - rename ev_loop_count/depth/verify/loop/unloop. + - remove ev_default_destroy and ev_default_fork. + - switch to two-digit minor version. + - work around an apparent gentoo compiler bug. + - define _DARWIN_UNLIMITED_SELECT. just so. + - use enum instead of #define for most constants. + - improve compatibility to older C++ compilers. + - (experimental) ev_run/ev_default_loop/ev_break/ev_loop_new have now + default arguments when compiled as C++. + - enable automake dependency tracking. + - ev_loop_new no longer leaks memory when loop creation failed. + - new ev_cleanup watcher type. + +3.9 Thu Dec 31 07:59:59 CET 2009 + - signalfd is no longer used by default and has to be requested + explicitly - this means that easy to catch bugs become hard to + catch race conditions, but the users have spoken. + - point out the unspecified signal mask in the documentation, and + that this is a race condition regardless of EV_SIGNALFD. + - backport inotify code to C89. + - inotify file descriptors could leak into child processes. + - ev_stat watchers could keep an erroneous extra ref on the loop, + preventing exit when unregistering all watchers (testcases + provided by ry@tinyclouds.org). + - implement EV_WIN32_HANDLE_TO_FD and EV_WIN32_CLOSE_FD configuration + symbols to make it easier for apps to do their own fd management. + - support EV_IDLE_ENABLE being disabled in ev++.h + (patch by Didier Spezia). + - take advantage of inotify_init1, if available, to set cloexec/nonblock + on fd creation, to avoid races. + - the signal handling pipe wasn't always initialised under windows + (analysed by lekma). + - changed minimum glibc requirement from glibc 2.9 to 2.7, for + signalfd. + - add missing string.h include (Denis F. Latypoff). + - only replace ev_stat.prev when we detect an actual difference, + so prev is (almost) always different to attr. this might + have caused the problems with 04_stat.t. + - add ev::timer->remaining () method to C++ API. + +3.8 Sun Aug 9 14:30:45 CEST 2009 + - incompatible change: do not necessarily reset signal handler + to SIG_DFL when a sighandler is stopped. + - ev_default_destroy did not properly free or zero some members, + potentially causing crashes and memory corruption on repeated + ev_default_destroy/ev_default_loop calls. + - take advantage of signalfd on GNU/Linux systems. + - document that the signal mask might be in an unspecified + state when using libev's signal handling. + - take advantage of some GNU/Linux calls to set cloexec/nonblock + on fd creation, to avoid race conditions. + +3.7 Fri Jul 17 16:36:32 CEST 2009 + - ev_unloop and ev_loop wrongly used a global variable to exit loops, + instead of using a per-loop variable (bug caught by accident...). + - the ev_set_io_collect_interval interpretation has changed. + - add new functionality: ev_set_userdata, ev_userdata, + ev_set_invoke_pending_cb, ev_set_loop_release_cb, + ev_invoke_pending, ev_pending_count, together with a long example + about thread locking. + - add ev_timer_remaining (as requested by Denis F. Latypoff). + - add ev_loop_depth. + - calling ev_unloop in fork/prepare watchers will no longer poll + for new events. + - Denis F. Latypoff corrected many typos in example code snippets. + - honor autoconf detection of EV_USE_CLOCK_SYSCALL, also double- + check that the syscall number is available before trying to + use it (reported by ry@tinyclouds). + - use GetSystemTimeAsFileTime instead of _timeb on windows, for + slightly higher accuracy. + - properly declare ev_loop_verify and ev_now_update even when + !EV_MULTIPLICITY. + - do not compile in any priority code when EV_MAXPRI == EV_MINPRI. + - support EV_MINIMAL==2 for a reduced API. + - actually 0-initialise struct sigaction when installing signals. + - add section on hibernate and stopped processes to ev_timer docs. + +3.6 Tue Apr 28 02:49:30 CEST 2009 + - multiple timers becoming ready within an event loop iteration + will be invoked in the "correct" order now. + - do not leave the event loop early just because we have no active + watchers, fixing a problem when embedding a kqueue loop + that has active kernel events but no registered watchers + (reported by blacksand blacksand). + - correctly zero the idx values for arrays, so destroying and + reinitialising the default loop actually works (patch by + Malek Hadj-Ali). + - implement ev_suspend and ev_resume. + - new EV_CUSTOM revents flag for use by applications. + - add documentation section about priorities. + - add a glossary to the dcoumentation. + - extend the ev_fork description slightly. + - optimize a jump out of call_pending. + +3.53 Sun Feb 15 02:38:20 CET 2009 + - fix a bug in event pipe creation on win32 that would cause a + failed assertion on event loop creation (patch by Malek Hadj-Ali). + - probe for CLOCK_REALTIME support at runtime as well and fall + back to gettimeofday if there is an error, to support older + operating systems with newer header files/libraries. + - prefer gettimeofday over clock_gettime with USE_CLOCK_SYSCALL + (default most everywhere), otherwise not. + +3.52 Wed Jan 7 21:43:02 CET 2009 + - fix compilation of select backend in fd_set mode when NFDBITS is + missing (to get it to compile on QNX, reported by Rodrigo Campos). + - better select-nfds handling when select backend is in fd_set mode. + - diagnose fd_set overruns when select backend is in fd_set mode. + - due to a thinko, instead of disabling everything but + select on the borked OS X platform, everything but select was + allowed (reported by Emanuele Giaquinta). + - actually verify that local and remote port are matching in + libev's socketpair emulation, which makes denial-of-service + attacks harder (but not impossible - it's windows). Make sure + it even works under vista, which thinks that getpeer/sockname + should return fantasy port numbers. + - include "libev" in all assertion messages for potentially + clearer diagnostics. + - event_get_version (libevent compatibility) returned + a useless string instead of the expected version string + (patch by W.C.A. Wijngaards). + +3.51 Wed Dec 24 23:00:11 CET 2008 + - fix a bug where an inotify watcher was added twice, causing + freezes on hash collisions (reported and analysed by Graham Leggett). + - new config symbol, EV_USE_CLOCK_SYSCALL, to make libev use + a direct syscall - slower, but no dependency on librt et al. + - assume negative return values != -1 signals success of port_getn + (http://cvs.epicsol.org/cgi/viewcvs.cgi/epic5/source/newio.c?rev=1.52) + (no known failure reports, but it doesn't hurt). + - fork detection in ev_embed now stops and restarts the watcher + automatically. + - EXPERIMENTAL: default the method to operator () in ev++.h, + to make it nicer to use functors (requested by Benedek László). + - fixed const object callbacks in ev++.h. + - replaced loop_ref argument of watcher.set (loop) by a direct + ev_loop * in ev++.h, to avoid clashes with functor patch. + - do not try to watch the empty string via inotify. + - inotify watchers could be leaked under certain circumstances. + - OS X 10.5 is actually even more broken than earlier versions, + so fall back to select on that piece of garbage. + - fixed some weirdness in the ev_embed documentation. + +3.49 Wed Nov 19 11:26:53 CET 2008 + - ev_stat watchers will now use inotify as a mere hint on + kernels <2.6.25, or if the filesystem is not in the + "known to be good" list. + - better mingw32 compatibility (it's not as borked as native win32) + (analysed by Roger Pack). + - include stdio.h in the example program, as too many people are + confused by the weird C language otherwise. I guess the next thing + I get told is that the "..." ellipses in the examples don't compile + with their C compiler. + +3.48 Thu Oct 30 09:02:37 CET 2008 + - further optimise away the EPOLL_CTL_ADD/MOD combo in the epoll + backend by assuming the kernel event mask hasn't changed if + ADD fails with EEXIST. + - work around spurious event notification bugs in epoll by using + a 32-bit generation counter. recreate kernel state if we receive + spurious notifications or unwanted events. this is very costly, + but I didn't come up with this horrible design. + - use memset to initialise most arrays now and do away with the + init functions. + - expand time-out strategies into a "Be smart about timeouts" section. + - drop the "struct" from all ev_watcher declarations in the + documentation and did other clarifications (yeah, it was a mistake + to have a struct AND a function called ev_loop). + - fix a bug where ev_default would not initialise the default + loop again after it was destroyed with ev_default_destroy. + - rename syserr to ev_syserr to avoid name clashes when embedding, + do similar changes for event.c. + +3.45 Tue Oct 21 21:59:26 CEST 2008 + - disable inotify usage on linux <2.6.25, as it is broken + (reported by Yoann Vandoorselaere). + - ev_stat erroneously would try to add inotify watchers + even when inotify wasn't available (this should only + have a performance impact). + - ev_once now passes both timeout and io to the callback if both + occur concurrently, instead of giving timeouts precedence. + - disable EV_USE_INOTIFY when sys/inotify.h is too old. + +3.44 Mon Sep 29 05:18:39 CEST 2008 + - embed watchers now automatically invoke ev_loop_fork on the + embedded loop when the parent loop forks. + - new function: ev_now_update (loop). + - verify_watcher was not marked static. + - improve the "associating..." manpage section. + - documentation tweaks here and there. + +3.43 Sun Jul 6 05:34:41 CEST 2008 + - include more include files on windows to get struct _stati64 + (reported by Chris Hulbert, but doesn't quite fix his issue). + - add missing #include in ev.c on windows (reported by + Matt Tolton). + +3.42 Tue Jun 17 12:12:07 CEST 2008 + - work around yet another windows bug: FD_SET actually adds fd's + multiple times to the fd_*SET*, despite official MSN docs claiming + otherwise. Reported and well-analysed by Matt Tolton. + - define NFDBITS to 0 when EV_SELECT_IS_WINSOCKET to make it compile + (reported any analysed by Chris Hulbert). + - fix a bug in ev_ebadf (this function is only used to catch + programming errors in the libev user). reported by Matt Tolton. + - fix a bug in fd_intern on win32 (could lead to compile errors + under some circumstances, but would work correctly if it compiles). + reported by Matt Tolton. + - (try to) work around missing lstat on windows. + - pass in the write fd set as except fd set under windows. windows + is so uncontrollably lame that it requires this. this means that + switching off oobinline is not supported (but tcp/ip doesn't + have oob, so that would be stupid anyways. + - use posix module symbol to auto-detect monotonic clock presence + and some other default values. + +3.41 Fri May 23 18:42:54 CEST 2008 + - work around an obscure bug in winsocket select: if you + provide only empty fd sets then select returns WSAEINVAL. how sucky. + - improve timer scheduling stability and reduce use of time_epsilon. + - use 1-based 2-heap for EV_MINIMAL, simplifies code, reduces + codesize and makes for better cache-efficiency. + - use 3-based 4-heap for !EV_MINIMAL. this makes better use + of cpu cache lines and gives better growth behaviour than + 2-based heaps. + - cache timestamp within heap for !EV_MINIMAL, to avoid random + memory accesses. + - document/add EV_USE_4HEAP and EV_HEAP_CACHE_AT. + - fix a potential aliasing issue in ev_timer_again. + - add/document ev_periodic_at, retract direct access to ->at. + - improve ev_stat docs. + - add portability requirements section. + - fix manpage headers etc. + - normalise WSA error codes to lower range on windows. + - add consistency check code that can be called automatically + or on demand to check for internal structures (ev_loop_verify). + +3.31 Wed Apr 16 20:45:04 CEST 2008 + - added last minute fix for ev_poll.c by Brandon Black. + +3.3 Wed Apr 16 19:04:10 CEST 2008 + - event_base_loopexit should return 0 on success + (W.C.A. Wijngaards). + - added linux eventfd support. + - try to autodetect epoll and inotify support + by libc header version if not using autoconf. + - new symbols: EV_DEFAULT_UC and EV_DEFAULT_UC_. + - declare functions defined in ev.h as inline if + C99 or gcc are available. + - enable inlining with gcc versions 2 and 3. + - work around broken poll implementations potentially + not clearing revents field in ev_poll (Brandon Black) + (no such systems are known at this time). + - work around a bug in realloc on openbsd and darwin, + also makes the erroneous valgrind complaints + go away (noted by various people). + - fix ev_async_pending, add c++ wrapper for ev_async + (based on patch sent by Johannes Deisenhofer). + - add sensible set method to ev::embed. + - made integer constants type int in ev.h. + +3.2 Wed Apr 2 17:11:19 CEST 2008 + - fix a 64 bit overflow issue in the select backend, + by using fd_mask instead of int for the mask. + - rename internal sighandler to avoid clash with very old perls. + - entering ev_loop will not clear the ONESHOT or NONBLOCKING + flags of any outer loops anymore. + - add ev_async_pending. + +3.1 Thu Mar 13 13:45:22 CET 2008 + - implement ev_async watchers. + - only initialise signal pipe on demand. + - make use of sig_atomic_t configurable. + - improved documentation. + +3.0 Mon Jan 28 13:14:47 CET 2008 + - API/ABI bump to version 3.0. + - ev++.h includes "ev.h" by default now, not . + - slightly improved documentation. + - speed up signal detection after a fork. + - only optionally return trace status changed in ev_child + watchers. + - experimental (and undocumented) loop wrappers for ev++.h. + +2.01 Tue Dec 25 08:04:41 CET 2007 + - separate Changes file. + - fix ev_path_set => ev_stat_set typo. + - remove event_compat.h from the libev tarball. + - change how include files are found. + - doc updates. + - update licenses, explicitly allow for GPL relicensing. + +2.0 Sat Dec 22 17:47:03 CET 2007 + - new ev_sleep, ev_set_(io|timeout)_collect_interval. + - removed epoll from embeddable fd set. + - fix embed watchers. + - renamed ev_embed.loop to other. + - added exported Symbol tables. + - undefine member wrapper macros at the end of ev.c. + - respect EV_H in ev++.h. + +1.86 Tue Dec 18 02:36:57 CET 2007 + - fix memleak on loop destroy (not relevant for perl). + +1.85 Fri Dec 14 20:32:40 CET 2007 + - fix some aliasing issues w.r.t. timers and periodics + (not relevant for perl). + +(for historic versions refer to EV/Changes, found in the Perl interface) + +0.1 Wed Oct 31 21:31:48 CET 2007 + - original version; hacked together in <24h. + diff --git a/src/main/jni/libev/LICENSE b/src/main/jni/libev/LICENSE new file mode 100644 index 00000000..777d67ca --- /dev/null +++ b/src/main/jni/libev/LICENSE @@ -0,0 +1,37 @@ +All files in libev are +Copyright (c)2007,2008,2009,2010,2011,2012 Marc Alexander Lehmann. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Alternatively, the contents of this package may be used under the terms +of the GNU General Public License ("GPL") version 2 or any later version, +in which case the provisions of the GPL are applicable instead of the +above. If you wish to allow the use of your version of this package only +under the terms of the GPL and not to allow others to use your version of +this file under the BSD license, indicate your decision by deleting the +provisions above and replace them with the notice and other provisions +required by the GPL in this and the other files of this package. If you do +not delete the provisions above, a recipient may use your version of this +file under either the BSD or the GPL. diff --git a/src/main/jni/libev/README b/src/main/jni/libev/README new file mode 100644 index 00000000..31f61938 --- /dev/null +++ b/src/main/jni/libev/README @@ -0,0 +1,58 @@ +libev is a high-performance event loop/event model with lots of features. +(see benchmark at http://libev.schmorp.de/bench.html) + + +ABOUT + + Homepage: http://software.schmorp.de/pkg/libev + Mailinglist: libev@lists.schmorp.de + http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev + Library Documentation: http://pod.tst.eu/http://cvs.schmorp.de/libev/ev.pod + + Libev is modelled (very losely) after libevent and the Event perl + module, but is faster, scales better and is more correct, and also more + featureful. And also smaller. Yay. + + Some of the specialties of libev not commonly found elsewhere are: + + - extensive and detailed, readable documentation (not doxygen garbage). + - fully supports fork, can detect fork in various ways and automatically + re-arms kernel mechanisms that do not support fork. + - highly optimised select, poll, epoll, kqueue and event ports backends. + - filesystem object (path) watching (with optional linux inotify support). + - wallclock-based times (using absolute time, cron-like). + - relative timers/timeouts (handle time jumps). + - fast intra-thread communication between multiple + event loops (with optional fast linux eventfd backend). + - extremely easy to embed (fully documented, no dependencies, + autoconf supported but optional). + - very small codebase, no bloated library, simple code. + - fully extensible by being able to plug into the event loop, + integrate other event loops, integrate other event loop users. + - very little memory use (small watchers, small event loop data). + - optional C++ interface allowing method and function callbacks + at no extra memory or runtime overhead. + - optional Perl interface with similar characteristics (capable + of running Glib/Gtk2 on libev). + - support for other languages (multiple C++ interfaces, D, Ruby, + Python) available from third-parties. + + Examples of programs that embed libev: the EV perl module, node.js, + auditd, rxvt-unicode, gvpe (GNU Virtual Private Ethernet), the + Deliantra MMORPG server (http://www.deliantra.net/), Rubinius (a + next-generation Ruby VM), the Ebb web server, the Rev event toolkit. + + +CONTRIBUTORS + + libev was written and designed by Marc Lehmann and Emanuele Giaquinta. + + The following people sent in patches or made other noteworthy + contributions to the design (for minor patches, see the Changes + file. If I forgot to include you, please shout at me, it was an + accident): + + W.C.A. Wijngaards + Christopher Layne + Chris Brody + diff --git a/src/main/jni/libevent/ChangeLog b/src/main/jni/libevent/ChangeLog new file mode 100644 index 00000000..eb6530d6 --- /dev/null +++ b/src/main/jni/libevent/ChangeLog @@ -0,0 +1,1332 @@ +Changes in version 2.0.21-stable (18 Nov 2012) +BUGFIXES: + o ssl: Don't discard SSL read event when timeout and read come close together (576b29f) + o ssl: Stop looping in "consider_reading" if reading is suspended. (f719b8a Joachim Bauch) + o ssl: No need to reserve space if reading is suspended. (1acf2eb Joachim Bauch) + o dns: Avoid a memory-leak on OOM in evdns. (73e85dd, f2bff75 George Danchev) + o build: Use python2 rather than python (0eb0109 Ross Lagerwall) + o build: Compile without warnings on mingw64 (94866c2) + o build: Fix compilation on mingw64 with -DUSE_DEBUG (62bd2c4) + o build: Make rpcgen_wrapper.sh work on systems without a "python2" binary (f3009e4) + o iocp: Close IOCP listener socket on free when LEV_OPT_CLOSE_ON_FREE is set (cb853ea Juan Pablo Fernandez) + o core: Avoid crash when event_pending() called with no event_base set on event (e3cccf3) + o misc: remove stray 'x' so print_err will compile when uncommented (ac35650 Patrick Pelletier) + o tests: Fix renegotiation test to work around openssl 1.0.1 bug (c2f3086) + o tests: Warn when openssl version in unit test mismatches compiled version. (ac009f9) + + +Changes in version 2.0.20-stable (23 Aug 2012) +BUGFIXES: + o core: Make event_pending() threadsafe. (be7a95c Simon Liu) + o win32: avoid crash when waiting forever on zero fds. (160e58b) + o evhttp: Fix a memory leak on error in evhttp_uriencode (11c8b31) + o evbuffer: Avoid possible needless call to writev. Found by coverity. (6a4ec5c) + o evdns: memset sockaddr_in before using it. Found by coverity. (a1a0e67) + o evhttp: Check more setsockopt return values when binding sockets. Found by coverity (a0912e3) + o evdns: Avoid segfault on weird timeout during name lookup. (dc32077 Greg Hazel) + o bufferevent_ssl: Correctly invoke callbacks when a SSL bufferevent reads some and then blocks. (606ac43) + + +PORTABILITY FIXES: + o check for arc4random_buf at runtime, on OS X (bff5f94 Greg Hazel) + o Correctly check for arc4random_buf (fcec3e8 Sebastian Hahn) + o Add explicit AC_PROG_SED to configure.in so all autoconfs will expose $(SED) (ca80ea6) + +BUILD FIXES: + o Add GCC annotations so that the vsprintf functions get checked properly (117e327) + o Fix an unused variable warning on *BSD. (c0720c1) + +UNIT TEST FIXES: + o Fix a couple of memory leaks (found with Valgrind). (3b2529a Ross Lagerwall) + o Remove deadcode in http regression tests. Found by coverity. (5553346) + o Fix possible uninitialized read in dns regression tests. Found by coverity. (2259777) + o Set umask before calling mkstemp in unit tests. Found by coverity (f1ce15d) + o Fix various check-after-dereference issues in unit tests: found by coverity (4f3732d) + o Fix resource leaks in the unit tests; found by coverity (270f279) + o Add some missing null checks to unit tests; found by coverity (f021c3d) + o Avoid more crashes/bad calls in unit tests; found by coverity (3cde5bf) + o Remove unused variable; spotted by coverity (6355b2a) + o Add checks to various return values in unit tests. Found by coverity (b9e7329) + o Move assignment outside tt_assert in ssl unit tests. Appeases coverity. (a2006c0) + + + +Changes in version 2.0.19-stable (3 May 2012) +BUGFIXES (CORE): + o Refactor event_persist_closure: raise and extract some common logic (bec22b4) + o If time has jumped so we'd reschedule a periodic event in the past, schedule it for the future instead (dfd808c) + o If a higher-priority event becomes active, don't continue running events of the current priority. (2bfda40) + +BUGFIXES (SSL): + o Fixed potential double-readcb execution with openssl bufferevents. (4e62cd1 Mark Ellzey) + +BUGFIXES (DNS): + o Cancel a probe request when the server is freed, and ignore cancelled probe callbacks (94d2336 Greg Hazel) + o Remove redundant DNS_ERR_CANCEL check, move comment (46b8060 Greg Hazel) + o When retransmitting a timed-out DNS request, pick a fresh nameserver. (3d9e52a) + +DOCUMENTATION FIXES: + o Fix a typo in the bufferevent documentation (98e9119) + o Add missing ) to changelog; spotted by rransom (4c7ee6b) + o Fix the website URL in the readme (f775521) + +COMPILATION FIXES: + o Fix a compilation error with MSVC 2005 due to use of mode_t (336dcae) + o Configure with gcc older than 2.95 (4a6fd43 Sebastian Hahn) + o Generate event-config.h with a single sed script (30b6f88 Zack Weinberg) + +FORWARD-COMPATIBILITY: + o Backport: provide EVENT_LOG_* names, and deprecate _EVENT_LOG_* (d1a03b2) + +TESTING/DEBUGGING SUPPORT: + o dns-example.c can now take a resolv.conf file on the commandline (6610fa5) + o Make some evdns.c debug logs more verbose (d873d67) + o Work-around a stupid gcov-breaking bug in OSX 10.6 (b3887cd) + + + +Changes in version 2.0.18-stable (22 Mar 2012) +BUGFIXES (core): + o Make uses of open() close-on-exec safe by introducing an internal evutil_open_closeonexec. (d2b5f72 Ross Lagerwall, 03dce42) + +BUGFIXES (kqueue): + o Properly zero the kevent in kq_setup_kevent() (c2c7b39 Sebastian Hahn) + +BUILD FIXES: + o Added OPENSSL_LDFLAGS env variable which is appended to SSL checks. (9278196 Mark Ellzey) + o Changed OPENSSL_LDFLAGS to OPENSSL_LIBADD (2d67b63 Mark Ellzey) + o Don't do clang version detection when disabling some flags (083296b Sebastian Hahn) + +BUGFIXES (dns): + o Stop crashing in evdns when nameserver probes give a weird error (bec5068) + + +Changes in version 2.0.17-stable (10 Feb 2012) + +BUGFIXES (core): + o Be absolutely sure to clear pncalls before leaving event_signal_closure (11f36a5) + o check for sysctl before we use it (358c745 Mike Frysinger) + o Remove bogus casts of socket to int before calling ev_callback (f032516) + o Make evconnlistener work around bug in older Linux when getting nmapped (ecfc720) + o Fix a list corruption bug when using event_reinit() with signals present (6e41cdc) + o Fix a fd leak in event_reinit() (3f18ad1) + o Do a memberwise comparison of threading function tables (c94a5f2 Nate R) + o Use C-style comments in C source files (for compatibility with compilers such as xlc on AIX). (d84d917 Greg Hewgill) + o Avoid crash when freeing event_iocp and using event_set_mem_functions (19715a6) + o In the kqueue backend, do not report EBADF as an EV_READ (5d7bfa1 Nicholas Marriott) + +BUGFIXES (evbuffer and bufferevents): + o Fix behavior of evbuffer_peek(buf,-1,NULL,NULL,0) (c986f23 Zack Weinberg) + o Loop on filtering SSL reads until we are blocked or exhausted. (5b4b812) + +BUGFIXES (evhttp): + o Force strict validation of HTTP version in response. (790f6b3 Catalin Patulea) + +BUGFIXES (evdns): + o evdns: fix a bug in circular-queue implementation (d6094b1) + +BUILD FIXES: + o Fix a silly compilation error with the sun compiler (1927776 Colin Watt) + o Suppress a gcc warning from ignoring fwrite return in http-sample.c (7206e8c) + +DOCUMENTATION FIXES: + o Slightly clarify evbuffer_peek documentation (7bbf6ca) + o Update copyright notices to 2012 (e49e289) + +NEW APIS: + o Backport evhttp_connection_get_bufferevent to Libevent 2.0 (da70fa7 Arno Bakker) + +TESTS AND TEST FIXES: + o Fix a race condition in the dns/bufferevent_connect_hostname test. (cba48c7) + o Add function to check referential integrity of an event_base (27737d5) + o Check event_base correctness at end of each unit test (3312b02) + o Workaround in the unit tests for an apparent epoll bug in Linux 3.2 (dab9187) + o Better workaround for Linux 3.2 edge-triggered epoll bug (9f9e259) + +Changes in version 2.0.16-stable (18 Nov 2011) +BUGFIXES (core): + o More detailed message in case of libevent self-debugging failure. (9e6a4ef Leonid Evdokimov) + o epoll: close fd on alloc fail at initialization (1aee718 Jamie Iles) + o Fix compile warning from saying event2/*.h inside a comment (447b0ba) + o Warn when unable to construct base because of failing make_base_notifiable (4e797f3) + o Don't try to make notifiable event_base when no threading fns are configured (e787413) + +BUGFIXES (evbuffer): + o unit test for remove_buffer bug (90bd620 Greg Hazel) + o Fix an evbuffer crash in evbuffer_remove_buffer() (c37069c) + +BUGFIXES (bufferevent_openssl): + o Refactor amount-to-read calculations in buffervent_ssl consider_reading() (a186e73 Mark Ellzey) + o Move SSL rate-limit enforcement into bytes_to_read() (96c562f) + o Avoid spinning on OpenSSL reads (2aa036f Mark Ellzey) + +BUGFIXES (dns) + o Empty DNS reply with OK status is another way to say NODATA. (21a08d6 Leonid Evdokimov) + +TESTING: + o Tests for 94fba5b and f72e8f6 (d58c15e Leonid Evdokimov) + o Test for commit aff6ba1 (f7841bf Leonid Evdokimov) + o Style and comment tweaks for dns/leak* tests (5e42202) + o improve test to remove at least one buffer from src (7eb52eb Greg Hazel) + +DOCUMENTATION: + o Add note about evhttp_send_reply_end to its doxygen (724bfb5) + o Update copyright dates to 2011. (3c824bd) + o Fix typo in whatsnew-2.0.txt (674bc6a Mansour Moufid) + o Improve win32 behavior of dns-sample.c code (a3f320e Gisle Vanem) + + + +Changes in version 2.0.15-stable (12 Oct 2011) +BUGFIXES (DNS): + o DNS: add ttl for negative answers using RFC 2308 idea. (f72e8f6 Leonid Evdokimov) + o Add DNS_ERR_NODATA error code to handle empty replies. (94fba5b Leonid Evdokimov) + +BUFGIXES (bufferevents and evbuffers): + o Make evbuffer callbacks get the right n_added value after evbuffer_add (1ef1f68 Alex) + o Prefer mmap to sendfile unless a DRAINS_TO_FD flag is set. Allows add_file to work with SSL. (0ba0af9) + +BUGFIXES (event loop): + o When a signal callback is activated to run multiple times, allow event_base_loopbreak to work even before they all have run. (4e8eb6a) + +DOCUMENTATION FIXES: + o Fix docstring in dns.h (2b6eae5 Leonid Evdokimov) + o refer to non-deprecated evdns functions in comments (ba5c27d Greg Hazel) + +BUILD AND TESTING FIXES: + o le-proxy and regress depend on openssl directly (9ae061a Sergey Avseyev) + o Use _SOURCES, not _sources, in sample/Makefile.am (7f82382) + o Fixed compiler warnings for unchecked read/write calls. (c3b62fd Mark Ellzey) + o Make write-checking fixes use tt_fail_perror (2b76847) + o Fix some "value never used" warnings with gcc 4.6.1 (39c0cf7) + + + +Changes in version 2.0.14-stable (31 Aug 2011) +BUGFIXES (bufferevents and evbuffers): + o Propagate errors on the underlying bufferevent to the user. (4a34394 Joachim Bauch) + o Ignore OpenSSL deprecation warnings on OS X (5d1b255 Sebastian Hahn) + o Fix handling of group rate limits under 64 bytes of burst (6d5440e) + o Solaris sendfile: correctly detect amount of data sent (643922e Michael Herf) + o Make rate limiting work with common_timeout logic (5b18f13) + o clear read watermark on underlying bufferevent when creating filtering bev to fix potentially failing fragmented ssl handshakes (54f7e61 Joachim Bauch) + +BUGFIXES (IOCP): + o IOCP: don't launch reads or writes on an unconnected socket (495c227) + o Make IOCP rate-limiting group support stricter and less surprising. (a98da7b) + o Have test-ratelim.c support IOCP (0ff2c5a) + o Make overlapped reads result in evbuffer callbacks getting invoked (6acfbdd) + o Correctly terminate IO on an async bufferevent on bufferevent_free (e6af35d) + +BUGFIXES (other): + o Fix evsig_dealloc memory leak with debugging turned on. (9b724b2 Leonid Evdokimov) + o Fix request_finished memory leak with debugging turned on. (aff6ba1 Leonid Evdokimov) + +BUILD AND TESTING FIXES: + o Allow OS-neutral builds for platforms where some versions have arc4random_buf (b442302 Mitchell Livingston) + o Try to fix 'make distcheck' errors when building out-of-tree (04656ea Dave Hart) + o Clean up some problems identified by Coverity. (7c11e51 Harlan Stenn) + + +Changes in version 2.0.13-stable (18 Jul 2011) +BUGFIXES + o Avoid race-condition when initializing global locks (b683cae) + o Fix bug in SSL bufferevents backed by a bev with a write high-watermarks (e050703 Joachim Bauch) + o Speed up invoke_callbacks on evbuffers when there are no callbacks (f87f568 Mark Ellzey) + o Avoid a segfault when all methods are disabled or broken (27ce38b) + o Fix incorrect results from evbuffer_search_eol(EOL_LF) (4461f1a) + o Add some missing checks for mm_calloc failures (89d5e09) + o Replace an assertion for event_base_free(NULL) with a check-and-warn (09fe97d) + o Report kqueue ebadf, epipe, and eperm as EV_READ events (1fd34ab) + o Check if the `evhttp_new_object' function in `http.c' returns NULL. (446cc7a Mansour Moufid) + o Use the correct printf args when formatting size_t (3203f88) + o Complain if the caller tries to change threading cbs after setting them (cb6ecee) + +DOCUMENTATION FIXES AND IMPROVEMENTS + o Revise the event/evbuffer/bufferevent doxygen for clarity and accuracy (2888fac) + o Update Doxyfile to produce more useful output (aea0555) + +TEST FIXES + o Fix up test_evutil_snprintf (caf695a) + o Fix tinytest invocation from windows shell (57def34 Ed Day) + +BUILD FIXES + o Use AM_CPPFLAGS in sample/Makefile.am, not AM_CFLAGS (4a5c82d) + o Fix select.c compilation on systems with no NFDBITS (49d1136) + o Fix a few warnings on OpenBSD (8ee9f9c Nicholas Marriott) + o Don't break when building tests from git without python installed (b031adf) + o Don't install event_rpcgen.py when --disable-libevent-install is used (e23cda3 Harlan Stenn) + o Fix AIX build issue with TAILQ_FOREACH definition (e934096) + + +Changes in version 2.0.12-stable (4 Jun 2011) +BUGFIXES + o Fix a warn-and-fail bug in kqueue by providing kevent() room to report errors (28317a0) + o Fix an assert-inducing fencepost bug in the select backend (d90149d) + o Fix failing http assertion introducd in commit 0d6622e (0848814 Kevin Ko) + o Fix a bug that prevented us from configuring IPv6 nameservers. (74760f1) + o Prevent size_t overflow in evhttp_htmlescape. (06c51cd Mansour Moufid) + o Added several checks for under/overflow conditions in evhttp_handle_chunked_read (a279272 Mark Ellzey) + o Added overflow checks in evhttp_read_body and evhttp_get_body (84560fc Mark Ellzey) + +DOCUMENTATION: + o Add missing words to EVLOOP_NONBLOCK documentation (9556a7d) + +BUILD FIXES + o libssl depends on libcrypto, not the other way around. (274dd03 Peter Rosin) + o Libtool brings in the dependencies of libevent_openssl.la automatically (7b819f2 Peter Rosin) + o Use OPENSSL_LIBS in Makefile.am (292092e Sebastian Hahn) + o Move the win32 detection in configure.in (ceb03b9 Sebastian Hahn) + o Correctly detect openssl on windows (6619385 Sebastian Hahn) + o Fix a compile warning with zlib 1.2.4 and 1.2.5 (5786b91 Sebastian Hahn) + o Fix compilation with GCC 2, which had no __builtin_expect (09d39a1 Dave Hart) + o Fix new warnings from GCC 4.6 (06a714f) + o Link with -lshell32 and -ladvapi32 on Win32. (86090ee Peter Rosin) + o Make the tests build when OpenSSL is not available. (07c41be Peter Rosin) + o Bring in the compile script from automake, if needed. (f3c7a4c Peter Rosin) + o MSVC does not provide S_ISDIR, so provide it manually. (70be7d1 Peter Rosin) + o unistd.h and sys/time.h might not exist. (fe93022 Peter Rosin) + o Make sure TINYTEST_LOCAL is defined when building tinytest.c (8fa030c Peter Rosin) + o Fix winsock2.h #include issues with MSVC (3d768dc Peter Rosin) + o Use evutil_gettimeofday instead of relying on the system gettimeofday. (0de87fe Peter Rosin) + o Always use evutil_snprintf, even if OS provides it (d1b2d11 Sebastian Hahn) + o InitializeCriticalSectionAndSpinCount requires _WIN32_WINNT >= 0x0403. (816115a Peter Rosin) + o cygwin: make it possible to build DLLs (d54d3fc) + + + +Changes in version 2.0.11-stable (27 Apr 2011) + [Autogenerated from the Git log, sorted and cleaned by hand.] +BUGFIXES: + o Fix evport handling of POLLHUP and POLLERR (b42ce4b) + o Fix compilation on Windows with NDEBUG (cb8059d) + o Check for POLLERR, POLLHUP and POLLNVAL for Solaris event ports (0144886 Trond Norbye) + o Detect and handle more allocation failures. (666b096 Jardel Weyrich) + o Use event_err() only if the failure is truly unrecoverable. (3f8d22a Jardel Weyrich) + o Handle resize failures in the select backend better. (83e805a) + o Correctly free selectop fields when select_resize fails in select_init (0c0ec0b) + o Make --enable-gcc-warnings a no-op if not using gcc (3267703) + o Fix a type error in our (unused) arc4random_stir() (f736198) + o Correctly detect and stop non-chunked http requests when the body is too long (63a715e) + o Have event_base_gettimeofday_cached() always return wall-clock time (a459ef7) + o Workaround for http crash bug 3078187 (5dc5662 Tomash Brechko) + o Fix incorrect assertions and possible use-after-free in evrpc_free() (4b8f02f Christophe Fillot) + o Reset outgoing http connection when read data in idle state. (272823f Tomash Brechko) + o Fix subtle recursion in evhttp_connection_cb_cleanup(). (218cf19 Tomash Brechko) + o Fix the case when failed evhttp_make_request() leaved request in the queue. (0d6622e Tomash Brechko) + o Fix a crash bug in evdns server circular list code (00e91b3) + o Handle calloc failure in evdns. (Found by Dave Hart) (364291e) + o Fix a memory leak on win32 socket->event map. (b4f89f0) + o Add a forgotten NULL check to evhttp_parse_headers (12311ff Sebastian Hahn) + o Fix possible NULL-deref in evdns_cancel_request (5208544 Sebastian Hahn) + +PORTABILITY: + o Fall back to sscanf if we have no other way to implement strtoll (453317b) + o Build correctly on platforms without sockaddr_storage (9184563) + o Try to build correctly on platforms with no IPv6 support (713c254) + o Build on systems without AI_PASSIVE (cb92113) + o Fix http unit test on non-windows platforms without getaddrinfo (6092f12) + o Do not check for gethostbyname_r versions if we have getaddrinfo (c1260b0) + o Include arpa/inet.h as needed on HPUX (10c834c Harlan Stenn) + o Include util-internal.h as needed to build on platforms with no sockaddr_storage (bbf5515 Harlan Stenn) + o Check for getservbyname even if not on win32. (af08a94 Harlan Stenn) + o Add -D_OSF_SOURCE to fix hpux builds (0b33479 Harlan Stenn) + o Check for allocation failures in apply_socktype_protocol_hack (637d17a) + o Fix the check for multicast or broadcast addresses in evutil_check_interfaces (1a21d7b) + o Avoid a free(NULL) if out-of-memory in evdns_getaddrinfo. Found by Dave Hart (3417f68) + +DEFENSIVE PROGRAMMING: + o Add compile-time check for AF_UNSPEC==PF_UNSPEC (3c8f4e7) + +BUGS IN TESTS: + o Fix test.sh output on solaris (b4f89b6 Dave Hart) + o Make test-eof fail with a timeout if we never get an eof. (05a2c22 Harlan Stenn) + o Use %s with printf in test.sh (039b9bd) + o Add an assert to appease clang's static analyzer (b0ff7eb Sebastian Hahn) + o Add a forgotten return value check in the unit tests (3819b62 Sebastian Hahn) + o Actually send NULL request in http_bad_request_test (b693c32 Sebastian Hahn) + o add some (void) casts for unused variables (65707d7 Sebastian Hahn) + o Refactor test_getaddrinfo_async_cancel_stress() (48c44a6 Sebastian Hahn) + o Be nice and "handle" error return values in sample code (4bac793 Sebastian Hahn) + o Check return value of evbuffer_add_cb in tests (93a1abb Sebastian Hahn) + o Remote some dead code from dns-example.c (744c745 Sebastian Hahn) + o Zero a struct sockaddr_in before using it (646f9fe Sebastian Hahn) + +BUILD FIXES: + o Fix warnings about AC_LANG_PROGRAM usage (f663112 Sebastian Hahn) + o Skip check for zlib if we have no zlib.h (a317c06 Harlan Stenn) + o Fix autoconf bracket issues; make check for getaddrinfo include netdb.h (833e5e9 Harlan Stenn) + o Correct an AM_CFLAGS to an AM_CPPFLAGS in test/Makefile.am (9c469db Dave Hart) + o Fix make distcheck & installation of libevent 1 headers (b5a1f9f Dave Hart) + o Fix compilation under LLVM/clang with --enable-gcc-warnings (ad9ff58 Sebastian Hahn) + +FEATURES: + o Make URI parser able to tolerate nonconformant URIs. (95060b5) + +DOCUMENTATION: + o Clarify event_set_mem_functions doc (926f816) + o Correct evhttp_del_accept_socket documentation on whether socket is closed (f665924) + o fix spelling mistake in whatsnew-2.0.txt (deb2f73) + o Fix sample/http-server ipv6 fixes (eb692be) + o Comment internal headers used in sample code. (4eb281c) + o Be explicit about how long event loops run in event.h documentation (f95bafb) + o Add comment to configure.in to explain gc-sections test logic (c621359) + o Fix a couple of memory leaks in samples/http-server.c. Found by Dave Hart. (2e9f665) + +BUILD IMPROVEMENTS: + o Use the gcc -ffunction-segments feature to allow gc when linking with static libevent (0965c56 Dave Hart) + o Add configure options to disable installation, regression tests (49e9bb7 Dave Hart) + + + +Changes in version 2.0.10-stable (16 Dec 2010) + [Autogenerated from the Git log, sorted and cleaned by hand.] +BUGFIXES + o Minor fix for IOCP shutdown handling fix (2599b2d Kelly Brock) + o Correctly notify the main thread when activating an event from a subthread (5beeec9) + o Reject overlong http requests early when Expect:100-continue is set (d23839f Constantine Verutin) + o EVUTIL_ASSERT: Use sizeof() to avoid "unused variable" warnings with -DNDEBUG. (b63ab17 Evan Jones) + +CODE CLEANUPS + o bufferevent-internal.h: Use the new event2/util.h header, not evutil.h (ef5e65a Evan Jones) + o Use relative includes instead of system includes consistently. (fbe64f2 Evan Jones) + o Make whitespace more consistent + +TESTING + o tests: Use new event2 headers instead of old compatibility headers. (4f33209 Evan Jones) + +DOCUMENTATION + o Document that the cpu_hint is only used on Windows with IOCP for now (57689c4) + o Add stuff to "whats new in 2.0" based on reading include changes since August. (18adc3f) + + +Changes in 2.0.9-rc (30 Nov 2010): + [Autogenerated from the Git log, sorted and cleaned by hand.] +NEW AND MODIFIED APIs + o Add a function to change a listener's callback. (46ee061) + o Make evbuffer_add_file take ev_off_t, not off_t (ac7e52d) + o Make rate-limits go up to SIZE_MAX/EV_SSIZE_MAX, not just INT32_MAX (2cbb1a1) + o Add a bufferevent_get_base function (aab49b6) + +MAJOR BUGFIXES + o Disable changelist for epoll by default because of Linux dup() bug; add an option and/or an envvar to reenable it for speed. (9531763) + o Fix a 100%-CPU bug where an SSL connection would sometimes never stop trying to write (1213d3d) + o Fix a nasty bug related to use of dup() with epoll on Linux (c281aba) + o Fix bugs in posix thread-id calculation when sizeof(pthread_t) != sizeof(long) (fbaf077) + o Fix some ints to evutil_socket_t; make tests pass on win64. (f817bfa Dimitre Piskyulev) + o Set _EVENT_SIZEOF_VOID_P correctly on win32 and win64 (1ae82cd Dimitre Piskyulev) + o Avoid double-invocation of user callback with EVUTIL_EAI_CANCEL (abf01ed) + o Set SO_UPDATE_ACCEPT_CONTEXT on sockets from AcceptEx so that shutdown() can work (52aa419) + o When closing a filtering bufferevent, clear callbacks on the underlying bufferevent (fc7b1b0) + +NEW AND MODIFIED HTTP APIs + o Add evhttp_parse_query_str to be used with evhttp_uri_parse. (2075fbc) + o Add evhttp_response_code to remove one more reason to include http_struct.h (22e0a9b) + o Define enumerators for all HTTP methods, including PATCH from RFC5789 (75a7341 Felix Nawothnig) + o Functions to actually use evhttp_bound_socket with/as evconnlistener. (006efa7) + o Add evhttp_request_get_command so code can tell GET from POST without peeking at the struct. (49f4bf7) + o Introduce absolute URI parsing helpers. (86dd720 Pavel Plesov) + o Revise evhttp_uri_parse implementation to handle more of RFC3986 (eaa5f1d) + o Add evhttp_connection_get_base() to get the event_base from an http connection (cd00079) + o Let evhttp_parse_query return -1 on failure (b1756d0) + o New evhttp_uri(encode|decode) functions to handle + and NUL characters right (a8148ce) + o Add evhttp_response_code to remove one more reason to include http_struct.h (22e0a9b) + o Tweak interface for allowed methods (f5b391e) + o Add evhttp server alias interface, correct flagging of proxy requests. (aab8c38 Christopher Davis) + +HTTP BUGFIXES + o Add some comments to http.c and make a few functions static. (90b3ed5) + o Fix Content-Length when trying send more than 100GB of data (!) on an evhttp. (525da3e) + o Fix a bug where we would read too much data in HTTP bodies or requests. (58a1cc6) + o Correctly count req->body_size on http usage without Content-Length (8e342e5) + o Avoid missed-request bug when entire http request arrives before data is flushed (74c0e86) + o reset "chunked" flag when sending non-chunked reply (aa5f55f Joachim Bauch) + o evhttp_encode_uri encodes all reserved characters, including !$'()*+,/:=@ (2e63a60) + o Replace exact-version checks for HTTP/1.1 with >= or < checks (647e094) + o evhttp: Return 501 when we get an unrecognized method, not 400. (536311a) + o Don't disable reading from the HTTP connection after sending the request to be notified of connection-close in time (c76640b Felix Nawothnig) + o Never call evhttp_readcb while writing. (0512487) + o Try to fix an assertion failure related to close detection (0faaa39) + o Correctly detect timeouts during http connects (04861d5) + o Preliminary support for Continue expectation in evhttp. (fa9305f Christopher Davis) + +OTHER BUGFIXES + o Correct logic for realigning a chain in evbuffer_add (e4f34e8) + o Fix a minor syntax error that most compilers didn't care about (e56ff65) + o Fix some uses of int for socket in regress (5d389dc) + o Check return value for ioctlsocket on win32 (f5ad31c Trond Norbye) + o Fix som event_warns that should have been event_warnx (19c71e7) + o Fix signal handler types for win64. (b81217f) + o Try to clear up more size_t vs int/long issues. (598d133) + o Make sure IOCP evconnlistener uses virtual events. (7b40a00 Christopher Davis) + o Don't free evdns_request handles until after the callback is invoked (9ed30de) + o Fix some more cancel-related bugs in getaddrinfo_async (c7cfbcf) + o Make evdns_getaddrinfo_cancel threadsafe (d51b2fc) + o Only clear underlying callbacks when the user hasn't reset them. (1ac5b23) + o Fix bug in bufferevent_connect on an openssl bufferevent that already had an fd (4f228a1) + o Resolve an evport bug in the thread/forking test (3a67d0b) + o Make sure the CLOEXEC flag is set on fds we open for base notification (3ab578f) + o Fix IRIX build. sa_family collides with a #define in sys/socket.h on IRIX. (e874982 Kevin Bowling) + o If not WIN32, include in event2/util.h. (1cd45e5 Kevin Bowling) + o Fix some C99-style comments to work with the xlC compiler. (c2e5e22 Kevin Bowling) + o Add some checks since lack of TAILQ_FOREACH doesn't imply lack of FIRST, END, NEXT, or INSERT_BEFORE. Quiet some warnings in XL C. (c4dc335 Kevin Bowling) + o Reworked AIX __ss_family workaround to use AC_STRUCT_MEMBER. (2e2a3d7 Kevin Bowling) + o Take select from when testing in autoconf. AIX build fix. (a3a9f6b Kevin Bowling) + o Fix snprintf related failures on IRIX. (3239073 Kevin Bowling) + o Remove _event_initialized(); make event_initialized() a function(); make it consistent on windows and non-windows (652024b) + o Do not let EVLOOP_ONCE exit the loop until all deferred callbacks have run (2d5e1bd) + o Make EVLOOP_ONCE ignore internal events (0617a81) + o Possible crash fix when freeing an underlying bufferevent of an openssl bufferevent (29f7623) + +HTTP CLEANUPS + o Stop using Libevent-1 headers in regress_http (1f507d7) + o Modernize header usage in bench_http.c (e587069) + o fix signed/unsigned warnings in http.c (74a91e5) + o Update the HTTP regression tests to use Libevent2 apis for non-http stuff (d9ffa89) + o Start porting http tests to not use legacy interfaces (8505a74) + o Convert the rest of the http tests to be non-legacy unit tests. (9bb8239) + o Rename the confusing "base" static variable in regress_http.c (353402a) + o Stop accessing http request struct directly from in the unit tests. (0b137f4) + o Refactor http version parsing into a single function (a38140b) + +TESTING + o Improvements to tinytest_macros.h (ad923a1) + o Add a huge pile of tests for the new URI functions, and make them pass. (a5a76e6) + o Unit tests for evhttp_uri_set* (bc98f5e) + o Increase the skew tolerance to 2 seconds in thread/deferred_cb_skew (f806476 Christopher Davis) + o Reorder backends in test.sh to match preference order in event.c (ece974f) + o Add a stress test for getaddrinfo_cancel (da1bf52) + o Units test for unexpected evhttp methods. (75e3320) + +DOCUMENTATION + o Document behavior of URI parsing more thoroughly. (3a33462) + o Document that two bufferevent functions only work on socket bufferevents (70e1b60) + o add a requested docstring for event_rpcgen.CommandLine.__init__ (f1250eb) + o Fix a mistake in http documentation found by Julien Blache (229714d) + o Add a basic example of how to write a static HTTP server. (4e794d5) + o Document event_get_assignment (88be27d) + o Note that reentrant calls to libevent from logging cbs may fail badly (e431bcd) + o Clarify EVLOOP_* documentation to be more precise. (057a514) + +CLEANUPS + o Simplify the logic for choosing EPOLL_CTL_ADD vs EPOLL_CTL_MOD (2c66983) + o Rename "size" variables in win32select that were really fd counts. (b6a158c) + o Fix even more win64 warnings (7484df6) + o Fix even more win64 warnings: buffer, event_tagging, http, evdns, evrpc (545a611) + o Fix more wn64 warnings. (34b84b9 Christopher Davis) + o Use the label_len local variable in evdns instead of recalculating it over and over (ba01456) + o Fix some irix compilation warnings spotted by Kevin Bowling (7bcace2) + + + +Changes in 2.0.8-rc (14 Oct 2010): + [Autogenerated from the Git log, sorted and cleaned by hand.] +NEW APIS + o Add error callback to evconnlistener (c4be8d8 Simon Perreault) + o Add a LEV_OPT_THREADSAFE option for threadsafe evconnlisteners (127d4f2) + +CHANGED BEHAVIOR + o Correct logic on disabling underlying bufferevents when disabling a filter (ac27eb8) + +BUGFIXES + o Obey enabled status when unsuspending (040a019 Simon Perreault) + o Warn when using the error-prone EV_SIGNAL interface in an error-prone way. Also, fix a couple of race conditions in signal.c (720bd93) + O Make default signal backend fully threadsafe (95a7d41) + o Put internal events at highest priority (90651b3) + o Fix warnings in the main codebase flagged by -Wsigned-compare (9c8db0, 5e4bafb, 5c214a, 6be589a, e06f514) + o Fix compile in kqueue.c (b395392 Sebastian Hahn) + o Do not search outside of the system directory for windows DLLs (d49b5e3) + o Fix a spurious-call bug on epoll.c (0faaee0) + o Send a shutdown(SHUT_WR) before closing an http connection (e0fd870 Christopher Davis) + o Fix warnings on mingw with gcc 4.5 (5b7a370) + o Fix an EINVAL on evbuffer_write_iovec on OpenSolaris. (fdc640b) + o Fix allocation error for IOCP listeners. Probably harmless, since struct event is big (481ef92) + o Make iocp/listener/error work; don't accept again if lev is disabled. (62b429a Christopher Davis) + o Handle rate-limiting for reading on OpenSSL bufferevents correctly. (819b171) + o Fix serious bugs in per-bufferevent rate-limiting code (34d64f8) + o Avoid spurious reads from just-created open openssl bufferevents (223ee40) + o Fix a case where an ssl bufferevent with CLOSE_ON_FREE didn't close its fd (93bb7d8) + o The corrected bufferevent filter semantics let us fix our openssl tests (34331e4) + +TESTING + o Make SSL tests cover enabling/disabling EV_READ. (a5ce9ad) + o Bump to the latest version of tinytest (f0bd83e) + o Unit tests for listener error callbacks (045eef4) + o New unit test for ssl bufferevents starting with connected SSLs. (02f6259) + +DEBUGGABILITY + o Make debugging output for epoll backend more comprehensive (ec2b05e) + o Make event.c debugging messages report fds (e119899) + o Make the --enable-gcc-warnings option include signed comparison warnings (d3b096c) + +DEADCODE REMOVAL + o Remove the now-useless evsig_caught and evsig_process (4858b79) + o Remove event_base.evsigbase; nothing used it. (38d0960) + + + +Changes in 2.0.7-rc (9 Sep 2010): + [Autogenerated from the Git log, sorted and cleaned by hand.] +NEW APIS + o Expose a evdns_base_nameserver_sockaddr_add() function to add a nameserver by sockaddr (1952143) + o Add event_config_set_num_cpus_hint() for tuning win32 IOCP thread pools, etc. (2447fe8 Christopher Davis) + +BUGFIXES + o Fix a nasty dangling-event bug when using rate-limiting groups (0bffe43) + o Clean up syntax on TAILQ_ENTRY() usage to build correctly with recent MSVC (60433a0 Gilad Benjamini) + o Make definition of WIN32_LEAN_AND_MEAN in event.h conditional (3920172 Gilad Benjamini) + o Correctly detect failure to delete bufferevent read-timeout event (da6e7cd) + o Set close-on-exec bit for filedescriptors created by dns subsystem (d0b8843) + o Fix kqueue correctness test on x84_64 (6123d12) + o Detect events with no ev_base; warn instead of crashing (f1074b7) + o Fix an issue with forking and signal socketpairs in select/poll backends (d61b2f3) + o Stop using global arrays to implement the EVUTIL_ctype functions (1fdec20) + o On windows, make lock/thread function tables static (5de2bcb) + o Close th_notify_fds and open a new pair on reinit (495ed66) + o Declare signal handler function as "__cdecl" on Windows (f0056d0) + o Use the _func() replacements for open, fstat, etc in evutil.c on win32 (e50c0fc) + o Only process up to MAX_DEFERRED deferred_cbs at a time (17a14f1 Christopher Davis) + +THREADING BUGFIXES + o Avoid deadlock when activating signals (970e6ad) + o Add a condition variable backend, with implementations for pthreads and win32 (d4977b5) + o Use conditions instead of current_event_lock to fix a deadlock (e0972c2) + o Fix logic error in win32 TRY_LOCK that caused problems with rate-limiting (4c32b9d) + o Avoid needlessly calling evthread_notify_base() when the loop is not running (c7a06bf) + o Minimize calls to base_notify implementation functions, thereby avoiding needless syscalls (4632b78) + +IOCP BUGFIXES + o IOCP-related evbuffer fixes (03afa20 Christopher Davis) + o Stop IOCP when freeing the event_base (d844242 Christopher Davis) + o Some IOCP bufferevent tweaks (76f7e7a Christopher Davis) + +TESTS + o Make the regress_pthread.c tests work on windows with current test APIs (d74ae38) + o Add a unit test for conditions (5fb1095) + o Allow more than one copy of regression tests to run at once (a97320a) + o Fix event_del(0) instance in bench.c (b0f284c Shuo Chen) + o Fix a few memory leaks in the tests (1115366) + o IOCP-related unit test tweaks (499452f Christopher Davis) + o Improve testing of when thread-notification occurs (ce85280) + +BUILD AND DISTRIBUTION + o Add pkgconfig files for libevent_{openssl,pthreads} (ebcb1f0) + o Change include order in Makefile.nmake (4022b28) + o Make include/event2/event-config.h not included in source dist (a4af9be) + o Honor NDEBUG; build without warnings with NDEBUG; make NDEBUG always-off in unit test code (743f866) + o Declare evkeyvalq and event_list even if event_struct.h comes before sys/queue.h (d3ceca8) + o Move evkeyvalq into a separate header for evhttp_parse_query users (ca9048f) + o Prefer autoreconf -ivf to manual autogen.sh (7ea8e89) + +CLEANUP + o Completely remove the (mostly-removed) obsolete thread functions (3808168) + o Rename regress_pthread.c to regress_thread.c (041989f) + o Make defer-internal.h use lock macros, not direct calls to lock fns (5218d2a) + +DOCUMENTATION + o Document that DNS_NO_SEARCH is an obsolete alias for DNS_QUERY_NO_SEARCH (33200e7) + o Update the whatsnew-2.0.txt document (4991669) + + + +Changes in 2.0.6-rc (6 Aug 2010): + [Autogenerated from the Git log, sorted by hand.] +DOCUMENTATION + o Document a change in the semantics of event_get_struct_event_size() (e21f5d1) + o Add a comment to describe our plan for library versioning (9659ece) + o Fix sentence fragment in docs for event_get_struct_event_size() (7b259b6) + +NEW FEATURES AND INTERFACE CHANGES + o Remove the obsolete evthread interfaces (c5bab56) + o Let evhttp_send_error infer the right error reasons (3990669) + o Add a function to retrieve the other side of a bufferevent pair (17a8e2d) + o Add bufferevent_lock()/bufferevent_unlock() (215e629) + o Stop asserting when asked for a (unsupported) TCP dns port. Just return NULL. (7e87a59) + o Replace (unused,always 0) is_tcp argument to evdns_add_server_port*() with flags (e1c1167) + o Constify a couple of arguments to evdns_server_request_add_*_reply (cc2379d) + o Add an interface to expose min_share in ratelimiting groups (6ae53d6) + +BUGFIXES + o Avoid event_del on uninitialized event in event_base_free (6d19510) + o Add some missing includes to fix Linux build again (75701e8) + o Avoid close of uninitialized socket in evbuffer unit test (bda21e7) + o Correctly recognize .255 addresses as link-local when looking for interfaces (8c3452b) + o If no evdns request can be launched, return NULL, not a handle (b14f151) + o Use generic win32 interfaces, not ASCII-only ones, where possible. (899b0a3) + o Fix the default HTTP error template (06bd056 Felix Nawothnig) + o Close the file in evutil_read_file whether there's an error or not. (0798dd1 Pierre Phaneuf) + o Fix possible nullptr dereference in evhttp_send_reply_end() (29b2e23 Felix Nawothnig) + o never let bufferevent_rlim functions return negative (0859870) + o Make sample/hello_world work on windows (d89fdba) + o Fix a deadlock related to event-base notification. Diagnosed by Zhou Li, Avi Bab, and Scott Lamb. (17522d2) + o Possible fix to 100% cpu usage with epoll and openssl (cf249e7 Mike Smellie) + o Don't race when calling event_active/event_add on a running signal event (fc5e0a2) + o Suppress a spurious EPERM warning in epoll.c (e73cbde) + o Fix wrong size calculation of iovec buffers when exact=1 (65abdc2 niks) + o Change bufferevent_openssl::do_write so it doesn't call SSL_write with a 0 length buffer (c991317 Mike Smellie) + o Fixed compilation of sample/le-proxy.c on win32 (13b912e Trond Norbye) + o Fix rate-limit calculation on openssl bufferevents. (009f300) + o Remember to initialize timeout events for bufferevent_async (de1f5d6 Christopher Davis) + +BUILD AND DISTRIBUTION CHANGES + o Test the unlocked-deferred callback case of bufferevents (dfb75ab) + o Remove the now-unusable EVTHREAD_LOCK/UNLOCK constants (fdfc3fc) + o Use -Wlogical-op on gcc 4.5 or higher (d14bb92) + o Add the libtool-generated /m4/* stuff to .gitignore (c21c663) + o Remove some automake-generated files from version control. (9b14911) + o Have autogen.sh pass --force-missing to automake (8a44062) + o Set library version for libevent_pthreads correctly (b2d7440) + o Really only add libevent_core.la to LIBADD on mingw (1425003 Sebastian Hahn) + o Build more cleanly with NetBSDs that dislike toupper(char) (42a8c71) + o Fix unit tests with -DUSE_DEBUG enabled (28f31a4) + o Fix evdns build with -DUNICODE (5fa30d2) + o Move event-config.h to include/event2 (ec347b9) + +TESTING + o Add options to test-ratelim.c to check its results (2b44dcc) + o Make test-ratelim clean up after itself better. (b5bfc44) + o Remove the now-obsolete setup_test() and cleanup_test() functions (e73f1d7) + o Remove all non-error prints from test/regress.c (8bc1e3d) + o Make test.sh exit with nonzero status if tests fail (faf2a04) + o Have the unit tests report errors from test.sh (3689bd2) + o Fix logic in correcting high values from FIONREAD (3467f2f) + o Add test for behavior on remote socket close (44d57ee) + o Unit test for event_get_struct_event_size() (7510aac) + o Make test/test.sh call test-changelist (7c92691) + o Fix badly-behaved subtest of dns/bufferevent_connect_hostname (840a72f Joachim Bauch) + o Add option to test-ratelim to test min_share (42f6b62) + o Fix an assertion bug in test-ratelim (b2c6202) + o Make tests quieter on local dns resolver failure (e996b3d) + o Increase the tolerance in our unit tests for sloppy clocks. (170ffd2) + o Use AF_INET socketpair to test sendfile on Solaris (9b60209) + o Make test-changelist count cpu usage right on win32 (ea1ea3d) + +INTERNALS, PERFORMANCE, AND CODE CLEANUPS + o Mark the event_err() functions as __attribute__((noreturn)) (33bbbed) + o Do not check that event_base is set in EVBASE_ACQUIRE_LOCK (218a3c3) + o Replace (safe) use of strcpy with memcpy to appease OpenBSD (caca2f4) + o Remove some dead assignments (47c5dfb) + o Fix a pedantic gcc 4.4 warning in event2/event.h (276e7ee) + o Drain th_notify_fd[0] more bytes at a time. (a5bc15b) + o Tidy up the code in evthread_make_base_notifiable a little (61e1eee) + o Pass flags to fcntl(F_SETFL) and fcntl(F_SETFD) as int, not long (7c2dea1) + o Remove unused variables in test/test-changelist.c (b00d4c0) + o Fix whitespace. (cb927a5) + o Improve error message for failed epoll to make debugging easier. (9e725f7) + o Turn our socketpair() replacement into its own function (57b30cd) + + + +Changes in 2.0.5-beta (10 May 2010): + [Autogenerated from the Git log, sorted by hand.] +DOCUMENTATION + o Update all our copyright notices to say "2010" (17efc1c) + o Add Christopher Clark and Maxim Yegorushkin to the LICENSE file (38b7b57) + o Clarify Christopher Clark's status as writer of original ht code. (78772c3) + o Try to comment some of the event code more (cdd4c49) + o Add a few more evmap/changelist comments (c247adc) + o Add a comment to explain why evdns_request is now separte from request (ceefbe8) + o Document evutil_secure_rng_init() and evutil_secure_rng_add_bytes() (a5bf43a) + o Stop distributing and installing manpages: they were too inaccurate (7731ec8) + +NEW FEATURES AND INTERFACE CHANGES + o Remove signal_assign() and signal_new() macros. (2fac0f7) + o Make evdns use the regular logging system by default (b2f2be6) + o Allow evbuffer_read() to split across more than 2 iovecs (e470ad3) + o Functions to manipulate existing rate limiting groups. (ee41aca) + o Functions to track the total bytes sent over a rate limit group. (fb366c1) + o Detect and refuse reentrant event_base_loop() calls (b557b17) + o Limit the maximum number of events on each socket to 65535 (819f949) + o Add evbuffer_copyout to copy data from an evbuffer without draining (eb86c8c) + o Expose the request and reply members of rpc_req_generic() (07edf78 Shuo Chen) + o Add void* arguments to request_new and reply_new evrpc hooks (755fbf1 Shuo Chen) + o Seed the RNG using sysctl() as well as /dev/urandom (71fc3eb) + o Make evutil_secure_rng_init() work even with builtin arc4random (f980716) + o Report DNS error when lookup fails during bufferevent_socket_connect_hostname. (0ef4070 Christopher Davis) + o Release locks on bufferevents while executing callbacks (a5208fe Joachim Bauch) o Make debug mode catch mixed ET and non-ET events on an fd (cb67074) + o Catch attempts to enable debug_mode too late (9ecf0d4) + o Refuse null keys in evhttp_parse_query() (953e229 Frank Denis) + +BUGFIXES + o Avoid a spurious close(-1) on Linux (70a44b6) + o Do not close(-1) when freeing an uninitialized socket bufferevent (b34abf3) + o Free evdns_base->req_heads on evdns_base_free (859af67) + o Avoid an (untriggerable so far) crash bug in bufferevent_free() (0cf1431) + o Set mem_offset for every bufferevent type (657d1b6) + o Fix infrequent memory leak in bufferevent_init_common(). (8398641 Jardel Weyrich) + o Make evutil_signal_active() match declaration. (e1e703d Patrick Galbraith) + o Fix minheap code to use replacement malloc functions (a527618) + o Fix a free(NULL) in minheap-internal.h (6f20492) + o Fix critical bug in evbuffer_write when writev is not available (cda56ab) + o Make the no_iovecs case of write_atmost compile (8e227b0) + o Fix a memory leak when appending/prepending to a buffer with unused space. (45068a3) + o Clean up a mistake in pointer manipulation in evbuffer_remove (28bfed4 Christopher Davis) + o Always round up when there's a fractional number of msecs. (8f9e60c Christopher Davis) + o Fix compiler warnings under WIN32 (d469c50 Giuseppe Scrivano) + o Clean up properly when adding a signal handler fails. (b84b598 Gilad Benjamini) o Ensure that evdns_request is a persistent handle. (15bb82d Christopher Davis) + o Free search state when finished searching to avoid an infinite loop. (a625840 Christopher Davis) + o Assert for valid requests as necessary. (67072f3 Christopher Davis) + o do not leak the request object on persistent connections (9d8edf2) + o Make evdns logging threadsafe (b1c7950) + o Fix a couple of bugs in the BSD sysctl arc4seed logic (a47a4b7) + o Remove one last bug in last_with_datap logic. Found with valgrind (d49b92a) + o fix a leak when unpausing evrpc requests (94ee125) + o Fix a memory leak when unmarshalling RPC object arrays (f6ab2a2) + o Fix compilation when openssl support is disabled (40c301b) + o Allow empty reason line in HTTP status (739e688 Pierre Phaneuf) + o Fix a compile warning introduced in 739e688 (bd1ed5f Sebastian Hahn) + o Fix nonstandard TAILQ_FOREACH_REVERSE() definition (71afc52 Frank Denis) + o Try /proc on Linux as entropy fallback; use sysctl as last resort (20fda29) + o Fix symbol conflict between mm_*() macros and libmm (99e50e9) + o Fix some crazy macro mistakes in arc4random.c (90d4225) + o Make evbuffer_add_file() work on windows (dcdae6b) + o Fix unused-variable warning when building with threads disabled (ad811cd) + o Numerous opensolaris compilation fixes (c44de06) + o Fix getaddrinfo with protocol unset on Solaris 9. Found by Dagobert Michelsen (2cf2a28) + o Fix another nasty solaris getaddrinfo() behavior (3557071) + o Define _REENTRANT as needed on Solaris, elsewhere (c1cd32a) + o Fix some autoconf issues on OpenBSD (7c519df) + +BUILD AND DISTRIBUTION CHANGES + o Distribute libevent.pc.in, not libevent.pc (22aff04) + o Avoid errors in evutil.c when building with _UNICODE defined (b677032 Brodie Thiesfield) + o Avoid errors in http.c when building with VC 2003 .NET (13e4f3b Brodie Thiesfield) + o Support the standard 'make check' target in place of 'make verify' (426c8fb) + o Remove redundant stuff from EXTRA_DIST (b660edf) + o Switch to using AM conditionals in place of AC_LIBOBJ (2e898f5) + o Remove an orphaned RELEASE flag in Makefile.am (0794b0d) + o Give a better warning for bad automake versions. (77c917d) + o Use dist_bin_SCRIPTS, not EXTRA_DIST, to distribute scripts (9eb2fd7) + o Never test for select() on windows (3eb044d Trond Norbye) + o Do not inhibit automake dependencies generation (10c4c90 Giuseppe Scrivano) + o Create shared libraries under Windows (3cbca86 Giuseppe Scrivano) + o Add ctags/etags files to .gitignore (0861d17) + o Only specify -no-undefined on mingw (25433b9) + o Only add libevent_core.la to LIBADD on mingw (fdc6297) + +TESTING + o Get bench_http to work on Windows; add a switch to enable IOCP. (4ac38a5 Christopher Davis) + o VC has no getopt(), so do without in bench_http. (1273d2f Christopher Davis) + o Fix an obnoxious typo in the bufferevent_timeout_filter test (0d047c3) + o Fix a write of uninitialized RAM in regression tests (68dc742) + o Fix some memory leaks in the unit tests (274a7bd) + o Make 'main/many_events' test 70 fds, not 64. (33874b0) + o Unit-test every evbuffer_add_file() implementation. (06a4443) + o Add more unit tests for evbuffer_expand (8c83e99) + o Test another case of evbuffer_prepend (1234b95) + o Fix a possible double-free bug in SSL bufferevents with CLOSE_ON_FREE (7501895) o Add dns/search_cancel unit test. (39b870b Christopher Davis) + o Make http_base_test stop leaking an event_base. (96730d3) + o Detect broken unsetenv at unit-test runtime (f37cd4c) + o Implement regress_make_tempfile on win32 to test evbuffer_add_file (b4f12a1) + o add more (currently skipped) add_file tests on win32 (05de45d) + o Fix bench_http build on win32. (384d124) + o Make unit test for add_file able to tell "error" from "done" (88a543f) + o Make test for bufferevent_connect_hostname system-neutral (f89168e) + o Make test.sh support mingw/msys on win32 (0ee6f6c) + o Fix test.sh on freebsd (3d9e05b) + +INTERNALS, PERFORMANCE, AND AND CODE CLEANUPS + o Improve the speed of evbuffer_readln() (cc1600a) + o more whitespace normalization (2c2618d) + o Revise evbuffer to add last_with_data (2a6d2a1) + o Use last_with_data in place of previous_to_last (c8ac57f) + o Remove previous_to_last from evbuffer (6f47bd1) + o Fix last_with_data compilation on windows (1e7b986) + o Add some glass-box tests for the last_with_data code. (17da042) + o Improve robustness for refcounting (f1bc125) + o Remove a needless min_heap_shift_up_() call (7204b91) + o Increase MIN_BUFFER_SIZE to 512 (1024 on 64-bit) (2014ae4) + o Do not use evbuffer_expand() to add the first chain to a buffer (5c0ebb3) + o Make evbuffer_prepend handle empty buffers better (c87272b) + o Replace last_with_data with a slightly smarter version (b7442f8) + o Turn the increasingly complex *_CHAIN() macros into functions (96865c4) + o Rewrite evbuffer_expand and its users (d5ebcf3) + o Add evutil_tv_to_msec for safe conversion of timevals to milliseconds. (850c3ff Christopher Davis) + o Initialize last_with_datap correctly in evbuffer_overlapped (a0983b6) + o Replace EVUTIL_CLOSESOCKET macro with a function (899c1dc Sebastian Sjöberg) + o Move domain search state to evdns_request. (beaa14a Christopher Davis) + o Remove redundant checks for lock!=NULL before calling EVLOCK_LOCK (50ec59f) + o Rename current_base symbol to event_global_current_base_ (c16e684) + o Fix whitespace in evutil.c (935e150) + o Replace users of "int fd" with "evutil_socket_t fd" in portable code (c7cf6f0) + + + +Changes in 2.0.4-alpha (28 Feb 2010): + [Autogenerated from the Git log, sorted by hand.] +DOCUMENTATION + o Add stub header for 2.0.4-alpha changelog. (94d0065) + o Improve the README with more information and links. (0b42726) + o Add more people who wrote patches to the acknowledgments (0af10d5) + o Add a warning about the use of event_initialized. (f32b575) + o Add a LICENSE file so people can find our license easily (7067006) + o Add a new "hello world" sample program (becb9f9) + o Clarify status of example programs (d60a1bd) + o Update time-test.c to use event2 (f4190bf) + o Add the arc4random.c license to the LICENSE file. (e15e1e9) + +NEW FEATURES AND INTERFACE CHANGES + o Improved optional lock debugging. (0cd3bb9) + o Rate-limiting for bufferevents; group and individual limits are supported. (737c9cd) + o Testing code for bufferevent rate-limiting. (f0c0124) + o Make the initial nameserver probe timeout configurable. (1e56a32) + o Revise the locking API: deprecate the old locking callbacks and add trylock. (347952f) + o Do not make bufferevent_setfd implicitly disable EV_READ and EV_WRITE. (8274379) + o Do not ignore bufferevent_enable(EV_READ) before bufferevent_connect(). (4a5b534) + o Introduced evutil_make_socket_closeonexec() to preserve fd flags for F_SETFD. (d0939d2 Jardel Weyrich) + o evdns_getaddrinfo() now supports the /etc/hosts file. (72dd666) + o Look at the proper /etc/hosts file on windows. (66c02c7) + o Allow http connections to use evdns for hostname looksups. (c698b77) + o Changelist code to defer event changes until just before dispatch (27308aa) + o do not use a function to assign the evdns base; instead assign it via evhttp_connection_base_new() which is a new function introduced in 2.0 (5032e52) + o Functions to access more fields of struct event. (0683950) + o Make kqueue use changelists. (45e5ae3) + o Remove kqueue->pend_changes. (3225dfb) + o Minimize epoll_ctl calls by using changelist (c8c6a89) + o Add support for a "debug mode" to try to catch common errors. (cd17c3a) + o Note a missing ratelim function (361da8f) + o Add ev_[u]intptr_t to include/event2/util.h (1fa4c81) + o const-ify a few more functions in event.h (d38a7a1) + o Deprecate EVENT_FD and EVENT_SIGNAL. (f6b2694) + o Remove EVUTIL_CHECK_FMT. (6c21c89) + o Add EV_*_MAX macros to event2/util.h to expose limits for ev_* types. (aba1fff) o Functions to view and manipulate rate-limiting buckets. (85047a6) + o Add the rest of the integer limits, and add a test for them. (60742d5) + o Remove the 'flags' argument from evdns_base_set_option() (1dd7e6d) + o Add an arc4random implementation for use by evdns (d4de062) + o Use off_t for the length parameter of evbuffer_add_file (3fe60fd) + o Construct Windows locks using InitializeCriticalSectionAndSpinCount (32c6f1b) + o Expose view of current rate limit as constrained by group limit (162ce8a) + o Provide consistent, tested semantics for bufferevent timeouts (d328829) + +BUGFIXES AND TESTS + o Tolerate code that returns from a fatal_cb. (91fe23f) + o Parenthesize macro arguments more aggressively (07e9e9b) + o Fix memory-leak of signal handler array with kqueue. (e1ffbb8) + o Stop passing EVTHREAD_READ and EVTHREAD_WRITE to non-rw locks. (76cd2b7) + o Fix two use-after-free bugs in unit tests spoted by lock debugging (d84d838) + o Fix a locking bug in event_base_loop() (da1718b) + o Fix an evdns lock violation. (2df1f82 Zhuang Yuyao) + o Valgrind fix: Clear struct kevent before checking for OSX bug. (56771a3 William Ahern) + o Fix up evthread compilation on windows (bd6f1ba Roman Puls) + o Fix regress_iocp.c usage of old lock allocation macros. (31687b4 unknown) + o Update nmake makefile to build evthread.c (b62d979 unknown) + o Fix a crash when reading badly formatted resolve.conf; from Yasuoka Masahiko (6c7c579 Yasuoka Masahiko) + o Fix a snow leopard compile warning in the unit tests. (7ae9445) + o Fix compile on Snow Leopard with gcc warnings enabled (70cdfe4 Sebastian Hahn) + o Only define _GNU_SOURCE if it is not already defined. (ea6b1df Joachim Bauch) + o Update sample/signal-test.c to use newer APIs and not leak. (f6430ac Evan Jones) + o Fix a segfault when writing a very fragmented evbuffer onto an SSL (a6adeca Joachim Bauch) + o Fix a segfault when freeing SSL bufferevents in an unusual order (a773df5 Joachim Bauch) + o Drop install-sh from our git repo: a mismatched version could break "make dist" (6799527) + o Set all instances of the version number correctly. (5a112d3) + o Fix a few locking issues on windows. (c51bb3c unknown) + o Use evutil_socket_t, not int, when logging socket errors. (292467c) + o Fix up behavior of never-defered callbacks a little (390e056) + o Replace some cases of uint32_t with ev_uint32_t. (a47d88d) + o Fix compilation of devpoll.c by adding missing thread includes. (fee2c77 Dagobert Michelsen) + o Make evutil_make_socket_nonblocking() leave any other flags alone. (4c8b7cd Jardel Weyrich) + o Fix an fd leak in evconnlistener_new_bind(). (24fb502 Jardel Weyrich) + o Fix a bogus free in evutil_new_addrinfo() (0d64051 Jardel Weyrich) + o Adjusted fcntl() retval comparison on evutil_make_socket_nonblocking(). (4df7dbc Jardel Weyrich) + o Fix the code that allowed DNS options to not end with : (ee4953f) + o Fix crash bugs when a bufferevent's eventcb is not set. (2e8eeea) + o Fix test-ratelim compilation on Linux. (885b427) + o Fix compilation of rate-limiting code on win32. (165d30e) + o Eradicated the last free() call. Let mm_free() take care of deallocation. (0546ce1 Jardel Weyrich) + o Fix byte counts when mixing deferred and non-deferred evbuffer callbacks. (29151e6) + o Fixed a memory leak on windows threads implementation. The CRITICAL_SECTION was not being free'd in evthread_win32_lock_free(). (2f33e00 Jardel Weyrich) + o Fixed a fd leak in start_accepting(), plus cosmetic changes (4367a33 Jardel Weyrich) + o Improved error handling in evconnlistener_new_async(). Also keeping the fd open because it is not opened by this function, so the caller is responsible for closing it. Additionally, since evconnlistener_new_bind() creates a socket and passes it to the function above, it required error checking to close the same socket. (fec66f9 Jardel Weyrich) + o Don't use a bind address for nameservers on loopback (8d4aaf9) + o Fix compilation of rate-limit code when threading support is disabled (97a8c79) + o Detect setenv/unsetenv; skip main/base_environ test if we can't fake them. (7296971) + o Check more internal event_add() calls for failure (ff3f6cd) + o Fix windows and msvc build (5c7a7bc) + o Call event_debug_unassign on internal events (a19b4a0) + o Try to fix a warning in hash_debug_entry (137f2c6) + o Fix a dumb typo in ev_intptr_t definitions. (27c9a40) + o do not fail while sending on http connections the client closed. (93d7369) + o make evhttp_send() safe against terminated connections, too (3978180) + o Make Libevent 1.4.12 build on win32 with Unicode enabled. (000a33e Brodie Thiesfield) + o Fix some additional -DUNICODE issues on win32. (a7a9431) + o Add a check to make soure our EVUTIL_AI flags do not conflict with the native ones (c18490e) + o Always use our own gai_strerror() replacement. (6810bdb) + o Make RNG work when we have arc4random() but not arc4random_buf() (4ec8fea) + o validate close cb on server when client connection closes (2f782af) + o Fix two unlocked reads in evbuffer. (7116bf2) + o When working without a current event base, don't try to use IOCP listeners (cb52838) + o Fix getpid() usage on Windows (ff2a134) + o Add a unit test for secure rng. (48a29b6) + o Add some headers to fix freebsd compilation (b72be50) + o When connect() succeeds immediately, don't invoke the callback immediately. (7515de9) + o Suspend read/write on bufferevents during hostname lookup (db08f64) + o Make bufferevent_free() clear all callbacks immediately. (b2fbeb3) + o Fix some race conditions in persistent events and event_reinit (e2642f0) + o Fix a bug in resetting timeouts on persistent events when IO triggers. (38ec0a7) + o Add a test for timeouts on filtering bufferevents. (c02bfe1) + o Add test for periodic timers that get activated for other reasons (8fcb7a1) + o Use new timeval diff comparison function in bufferevent test (f3dfe46) + o Delete stack-alloced event in new unit test before returning. (7ffd387) + o Fix mingw compilation (23170a6) + o Try to define a sane _EVENT_SIZEOF_SIZE_T for msvc compilation (1e14f82) + o Fix arc4random compilation on MSVC. (98edb89) + o deal with connect() failing immediately (7bc48bf) + o Small cleanups on freebsd-connect-refused patch. (57b7248) + +BUILD AND DISTRIBUTION CHANGES + o Remove the contents of WIN32-Prj as unmaintained. (c69d5a5) + o Allow the user to redirect the verbose output of test/test.sh to a file (c382de6) + o Allow test.sh to be run as ./test/test.sh (7dfbe94) + o Never believe that we have pthreads on win32, even if gcc thinks we do. (78ed097) + o Make it compile under gcc --std=c89. (e2ca403) + o Fix a number of warnings from gcc -pedantic (918e9c5) + o Add the msvc-generated .lib files to .gitignore. (e244a2e) + o Add the "compile" script to gitignore. (1ba6bed) + +INTERNALS AND CODE CLEANUPS + o Add a .gitignore file. (ba34071) + o New EVTHREAD_TRY_LOCK function to try to grab a lock. (689fc09) + o Add the abilitity to mark some buffer callbacks as never-deferred. (438f9ed) + o Refactor our 'suspend operation' logic on bufferevents. (0d744aa) + o Simplify the read high-watermark checking. (5846bf6) + o Improve readability of evutil_unparse_protoname() (5a43df8 Jardel Weyrich) + o Expose our cached gettimeofday value with a new interface (47854a8) + o Whitespace fixes in test.sh (0b151a9) + o Enable branch-prediction hints with EVUTIL_UNLIKELY. (eaaf27f) + o Refactor code from evdns into a new internal "read a file" function. (0f7144f) + o Comestic changes in evconnlistener_new(), new_accepting_socket(), accepted_socket_invoke_user_cb() and iocp_listener_enable(). (510ab6b Jardel Weyrich) + o Add unit-test for bad_request bug fixed in 1.4 recently. (6cc79c6 Pavel Plesov) o Add a comment on evthread_enable_lock_debuging. (b9f43b2) + o Fix test.sh on shells without echo -n (94131e9) + o More unit tests for getaddrinfo_async: v4timeout and cancel. (a334b31) + o Make http use evconnlistener. (ec34533) + o move dns utility functions into a separate file so that we can use them for http testing (b822639) + o add a test for evhttp_connection_base_new with a dns_base (26714ca) + o forgot to add void to test function (78a50fe) + o Add a forgotten header (changelist-internal.h) (4b9f307) + o Remove some commented-out code in evutil (26e1b6f) + o Remove a needless include of rpc_compat.h (70a4a3e) + o Use less memory for each entry in a hashtable (a66e947) + o Try to untangle the logic in server_port_flush(). (439aea0) + o Use ev_[u]intptr_t types in place of [u]intptr_t (cef61a2) + o Reduce windows header includes in our own headers. (da6135e) + o clean up terminate_chunked test (e8a9782) + o Increment the submicro version number. (63e868e) + o Update event-config.h version number to match configure.in (aae7db5) + o Clean up formatting: Disallow space-before-tab. (8fdf09c) + o Clean up formatting: use tabs, not 8-spaces, to indent. (e5bbd40) + o Clean up formatting: remove trailing spaces (e5cf987) + o Clean up formatting: function/keyword spacing consistency. (4faeaea) + + + +Changes in 2.0.3-alpha (20 Nov 2009): + o Add a new code to support SSL/TLS on bufferevents, using the OpenSSL library (where available). + o Fix a bug where we didn't allocate enough memory in event_get_supported_methods(). + o Avoid segfault during failed allocation of locked evdns_base. (Found by Rocco Carbone.) + o Export new evutil_ascii_* functions to perform locale-independent character type operations. + o Try to compile better with MSVC: patches from Brodie Thiesfield + o New evconnlistener_get_fd function to expose a listener's associated socket. + o Expose an ev_socklen_t type for consistent use across platforms. + o Make bufferevent_socket_connect() work when the original fd was -1. + o Fix a bug in bufferevent_socket_connect() when the connection succeeds too quickly. + o Export an evutil_sockaddr_cmp() to compare to sockaddr objects for equality. + o Add a bufferevent_get_enabled() to tell what a bufferevent has been configured to do. + o Add an evbuffer_search_eol() function to locate the end of a line nondestructively. + o Add an evbuffer_search_range() function to search a bounded range of a buffer. + o Fix a rare crash bug in evdns. + o Have bufferevent_socket_connect() with no arguments put a bufferevent into connecting mode. + o Support sendfile on Solaris: patch from Caitlin Mercer. + o New functions to explicitly reference a socket used by an evhttp object. Patches from David Reiss. + o When we send a BEV_EVENT_CONNECTED to indicate connected status, we no longer invoke the write callback as well unless we actually wrote data too. + o If the kernel tells us that there are a negative number of bytes to read from a socket, do not believe it. Fixes bug 2841177; found by Alexander Pronchenkov. + o Do not detect whether we have monotonic clock support every time a new event base is created: instead do it only once. Patch taken from Chromium. + o Do not allocate the maximum event queue for the epoll backend at startup. Instead, start out accepting 32 events at a time, and double the queue's size when it seems that the OS is generating events faster than we're requesting them. Saves up to 374K per epoll-based event_base. Resolves bug 2839240. + o Treat an event with a negative fd as valid but untriggerable by Libevent. This is useful for applications that want to manually activate events. + o Fix compilation on Android, which forgot to define fd_mask in its sys/select.h + o Do not drop data from evbuffer when out of memory; reported by Jacek Masiulaniec + o New event_base_got_exit() and event_base_got_break() functions to tell whether an event loop exited because of an event_base_loopexit() or an event_base_loopbreak(). Patch from Ka-Hing Cheung. + o When adding or deleting an event from a non-main thread, only wake up the main thread when its behavior actually needs to change. + o Fix some bugs when using the old evdns interfaces to initialize the evdns module. + o Detect errors during bufferevent_connect(). Patch from Christopher Davis. + o Fix compilation for listener.h for C++ - missing extern "C". Patch from Ferenc Szalai. + o Make the event_base_loop() family of functions respect thread-safety better. This should clear up a few hard-to-debug race conditions. + o Fix a bug when using a specialized memory allocator on win32. + o Have the win32 select() backend label TCP-socket-connected events as EV_WRITE, not EV_READ. This should bring it in line with the other backends, and improve portability. Patch from Christopher Davis. + o Stop using enums as arguments or return values when what we mean is a bitfield of enum values. C++ doesn't believe that you can OR two enum values together and get another enum, and C++ takes its typing seriously. Patch from Christopher Davis. + o Add an API to replace all fatal calls to exit() with a user-provided panic function. + o Replace all assert() calls with a variant that is aware of the user-provided logging and panic functions. + o Add a return value to event_assign so that it can fail rather than asserting when the user gives it bad input. event_set still dies on bad input. + o The event_base_new() and event_base_new_with_config() functions now never call exit() on failure. For backward "compatibility", event_init() still does, but more consistently. + o Remove compat/sys/_time.h. It interfered with system headers on HPUX, and its functionality has been subsumed by event2/util.h and util-internal.h. + o Add a new bufferevent_socket_connect_hostname() to encapsulate the resolve-then-connect operation. + o Build kqueue.c correctly on GNU/kFreeBSD platforms. Patch pulled upstream from Debian. + o Alternative queue-based timeout algorithm for programs that use a large number of timeouts with the same value. + o New event_base_config option to disable the timeval cache entirely. + o Make EV_PERSIST timeouts more accurate: schedule the next event based on the scheduled time of the previous event, not based on the current time. + o Allow http.c to handle cases where getaddrinfo returns an IPv6 address. Patch from Ryan Phillips. + o Fix a problem with excessive memory allocation when using multiple event priorities. + o Default to using arc4random for DNS transaction IDs on systems that have it; from OpenBSD. + o Never check the environment when we're running setuid or setgid; from OpenBSD. + o Options passed to evdns_set_option() no longer need to end with a colon. + o Add an evutil_getaddrinfo() function to clone getaddrinfo on platforms that don't have it. + o Add an evdns_getaddrinfo() function to provide a nonblocking getaddrinfo using evdns, so programs can perform useful hostname lookup. + o Finally expose the IOCP-based bufferevent backend. It passes its unit tests, but probably still has some bugs remaining. Code by Nick Mathewson and Christopher Davis. + o Numerous other bugfixes. + o On FreeBSD and other OSes, connect can return ECONREFUSED immediately; instead of failing the function call, pretend with faileld in the callback. + o Fix a race condition in the pthreads test case; found by Nick Mathewson + o Remove most calls to event_err() in http and deal with memory errors instead + + + +Changes in 2.0.2-alpha (25 Jul 2009): + o Add a new flag to bufferevents to make all callbacks automatically deferred. + o Make evdns functionality locked, and automatically defer dns callbacks. + o Fix a possible free(NULL) when freeing an event_base with no signals. + o Add a flag to disable checking environment varibles when making an event_base + o Disallow setting less than 1 priority. + o Fix a bug when removing a timeout from the heap. [Patch from Marko Kreen] + o Use signal.h, not sys/signal.h. [Patch from mmadia] + o Try harder to build with certain older c99 compilers. + o Make sure that an event_config's flags field is always initialized to 0. [Bug report from Victor Goya] + o Avoid data corruption when reading data entirely into the second-to-last chain of an evbuffer. [Bug report from Victor Goya] + o Make sendfile work on FreeBSD + o Do not use vararg macros for accessing evrpc structures; this is not backwards compatible, but we did not promise any backwards compatibility for the rpc code. + o Actually define the event_config_set_flag() function. + o Try harder to compile with Visual C++. + o Move event_set() and its allies to event2/event_compat.h where they belong. + o Remove the event_gotsig code, which has long been deprecated and unused. + o Add an event_get_base() function to return the base assigned to an event. + o New function to automate connecting on a socket-based bufferevent. + o New functions to automate listening for incoming TCP connections. + o Do case-insensitive checks with a locale-independent comparison function. + o Rename the evbuffercb and everrorcb callbacks to bufferevent_data_cb and bufferevent_event_cb respectively. The old names are available in bufferevent_compat.h. + o Rename the EVBUFFER_* codes used by bufferevent event callbacks to BEV_EVENT_*, to avoid namespace collision with evbuffer flags. The old names are available in bufferevent_compat.h. + o Move the EVBUFFER_INPUT and EVBUFFER_OUTPUT macros to bufferevent_compat.h + o Add a bufferevent_getfd() function to mirror bufferevent_setfd() + o Make bufferevent_setfd() return an error code if the operation is not successful. + o Shave 22 bytes off struct event on 32-bit platforms by shrinking and re-ordering fields. The savings on 64-bit platforms is likely higher. + o Cap the maximum number of priorities at 256. + o Change the semantics of evbuffer_cb_set_flags() to be set-flag only; add a new evbuffer_cb_clear_flags() to remove set flags. + o Change the interface of evbuffer_add_reference so that the cleanup callback gets more information + o Revise the new evbuffer_reserve_space/evbuffer_commit_space() interfaces so that you can use them without causing extraneous copies or leaving gaps in the evbuffer. + o Add a new evbuffer_peek() interface to inspect data in an evbuffer without removing it. + o Fix a deadlock when suspending reads in a bufferevent due to a full buffer. (Spotted by Joachim Bauch.) + o Fix a memory error when freeing a thread-enabled event base with registered events. (Spotted by Joachim Bauch.) + o Try to contain degree of failure when running on a win32 version so heavily firewalled that we can't fake a socketpair. + o Activate fd events in a pseudorandom order with O(N) backends, so that we don't systematically favor low fds (select) or earlier-added fds (poll, win32). + o Replace some read()/write() instances with send()/recv() to work properly on win32. + o Set truncated flag correctly in evdns server replies. + o Raise RpcGenError in event_rpcgen.py; from jmanison and Zack Weinberg + o Fix preamble of rpcgen-generated files to rely on event2 includes; based on work by jmansion; patch from Zack Weinberg. + o Allow specifying the output filename for rpcgen; based on work by jmansion; patch from Zack Weinberg. + o Allow C identifiers as struct names; allow multiple comments in .rpc files; from Zack Weinberg + o Mitigate a race condition when using socket bufferevents in multiple threads. + o Use AC_SEARCH_LIBS, not AC_CHECK_LIB to avoid needless library use. + o Do not allow event_del(ev) to return while that event's callback is executing in another thread. This fixes a nasty race condition. + o event_get_supported_methods() now lists methods that have been disabled with the EVENT_NO* environment options. + o Rename encode_int[64] to evtag_encode_int[64] to avoid polluting the global namespace. The old method names are still available as macros in event2/tag_compat.h. + + + +Changes in 2.0.1-alpha (17 Apr 2009): + o free minheap on event_base_free(); from Christopher Layne + o debug cleanups in signal.c; from Christopher Layne + o provide event_base_new() that does not set the current_base global + o bufferevent_write now uses a const source argument; report from Charles Kerr + o improve documentation on event_base_loopexit; patch from Scott Lamb + o New function, event_{base_}loopbreak. Like event_loopexit, it makes an event loop stop executing and return. Unlike event_loopexit, it keeps subsequent pending events from getting executed. Patch from Scott Lamb + o Check return value of event_add in signal.c + o provide event_reinit() to reintialize an event_base after fork + o New function event_set_mem_functinons. It allows the user to give libevent replacement functions to use for memory management in place of malloc(), free(), etc. This should be generally useful for memory instrumentation, specialized allocators, and so on. + o The kqueue implementation now catches signals that are raised after event_add() is called but before the event_loop() call. This makes it match the other implementations. + o The kqueue implementation now restores original signal handlers correctly when its signal events are removed. + o Check return value of event_add in signal.c + o Add a more powerful evbuffer_readln as a replacement for evbuffer_readline. The new function handles more newline styles, and is more useful with buffers that may contain a nul characters. + o Do not mangle socket handles on 64-bit windows. + o The configure script now takes an --enable-gcc-warnigns option that turns on many optional gcc warnings. (Nick has been building with these for a while, but they might be useful to other developers.) + o move EV_PERSIST handling out of the event backends + o small improvements to evhttp documentation + o always generate Date and Content-Length headers for HTTP/1.1 replies + o set the correct event base for HTTP close events + o When building with GCC, use the "format" attribute to verify type correctness of calls to printf-like functions. + o Rewrite win32.c backend to be O(n lg n) rather than O(n^2). + o Removed obsoleted recalc code + o support for 32-bit tag numbers in rpc structures; this is wire compatible, but changes the API slightly. + o pull setters/getters out of RPC structures into a base class to which we just need to store a pointer; this reduces the memory footprint of these structures. + o prefix {encode,decode}_tag functions with evtag to avoid collisions + o fix a bug with event_rpcgen for integers + o Correctly handle DNS replies with no answers set (Fixes bug 1846282) + o add -Wstrict-aliasing to warnings and more cleanup + o removed linger from http server socket; reported by Ilya Martynov + o event_rpcgen now allows creating integer arrays + o support string arrays in event_rpcgen + o change evrpc hooking to allow pausing of RPCs; this will make it possible for the hook to do some meaning ful work; this is not backwards compatible. + o allow an http request callback to take ownership of a request structure + o allow association of meta data with RPC requests for hook processing + o associate more context for hooks to query such as the connection object + o remove pending timeouts on event_base_free() + o also check EAGAIN for Solaris' event ports; from W.C.A. Wijngaards + o devpoll and evport need reinit; tested by W.C.A Wijngaards + o event_base_get_method; from Springande Ulv + o Send CRLF after each chunk in HTTP output, for compliance with RFC2626. Patch from "propanbutan". Fixes bug 1894184. + o Add a int64_t parsing function, with unit tests, so we can apply Scott Lamb's fix to allow large HTTP values. + o Use a 64-bit field to hold HTTP content-lengths. Patch from Scott Lamb. + o Allow regression code to build even without Python installed + o remove NDEBUG ifdefs from evdns.c + o detect integer types properly on platforms without stdint.h + o udpate documentation of event_loop and event_base_loop; from Tani Hosokawa. + o simplify evbuffer by removing orig_buffer + o do not insert event into list when evsel->add fails + o add support for PUT/DELETE requests; from Josh Rotenberg + o introduce evhttp_accept_socket() to accept from an already created socket + o include Content-Length in reply for HTTP/1.0 requests with keep-alive + o increase listen queue for http sockets to 128; if that is not enough the evhttp_accpet_socket() api can be used with a prepared socket. + o Patch from Tani Hosokawa: make some functions in http.c threadsafe. + o test support for PUT/DELETE requests; from Josh Rotenberg + o rewrite of the evbuffer code to reduce memory copies + o Some older Solaris versions demand that _REENTRANT be defined to get strtok_r(); do so. + o Do not free the kqop file descriptor in other processes, also allow it to be 0; from Andrei Nigmatulin + o Provide OpenSSL style support for multiple threads accessing the same event_base + o make event_rpcgen.py generate code include event-config.h; reported by Sam Banks. + o switch thread support so that locks get allocated as they are needed. + o make event methods static so that they are not exported; from Andrei Nigmatulin + o make RPC replies use application/octet-stream as mime type + o do not delete uninitialized timeout event in evdns + o Correct the documentation on buffer printf functions. + o Don't warn on unimplemented epoll_create(): this isn't a problem, just a reason to fall back to poll or select. + o Correctly handle timeouts larger than 35 minutes on Linux with epoll.c. This is probably a kernel defect, but we'll have to support old kernels anyway even if it gets fixed. + o Make name_from_addr() threadsafe in http.c + o Add new thread-safe interfaces to evdns functions. + o Make all event_tagging interfaces threadsafe. + o Rename internal memory management functions. + o New functions (event_assign, event_new, event_free) for use by apps that want to be safely threadsafe, or want to remain ignorant of the contents of struct event. + o introduce bufferevent_read_buffer; allows reading without memory copy. + o expose bufferevent_setwatermark via header files and fix high watermark on read + o fix a bug in buffrevent read water marks and add a test for them + o fix a bug in which bufferevent_write_buffer would not schedule a write event + o provide bufferevent_input and bufferevent_output without requiring knowledge of the structure + o introduce bufferevent_setcb and bufferevent_setfd to allow better manipulation of bufferevents + o convert evhttp_connection to use bufferevents. + o use libevent's internal timercmp on all platforms, to avoid bugs on old platforms where timercmp(a,b,<=) is buggy. + o Remove the never-exported, never-used evhttp_hostportfile function. + o Support input/output filters for bufferevents; somewhat similar to libio's model. This will allow us to implement SSL, compression, etc, transparently to users of bufferevents such as the http layer. + o allow connections to be removed from an rpc pool + o add new evtimer_assign, signal_assign, evtimer_new, and signal_new functions to manipulate timer and signal events, analagous to the now-recommended event_assign and event_new + o switch internal uses of event_set over to use event_assign. + o introduce evbuffer_contiguous_space() api that tells a user how much data is available in the first buffer chain + o introduce evbuffer_reserve_space() and evbuffer_commit_space() to make processing in filters more efficient. + o reduce system calls for getting current time by caching it. + o separate signal events from io events; making the code less complex. + o support for periodic timeouts + o support for virtual HTTP hosts. + o turn event_initialized() into a function, and add function equivalents to EVENT_SIGNAL and EVENT_FD so that people don't need to include event_struct.h + o Build test directory correctly with CPPFLAGS set. + o Provide an API for retrieving the supported event mechanisms. + o event_base_new_with_config() and corresponding config APIs. + o migrate the evhttp header to event2/ but accessors are still missing. + o deprecate timeout_* event functions by moving them to event_compat.h + o Move windows gettimeofday replacement into a new evutil_gettimeofday(). + o Make configure script work on IRIX. + o provide a method for canceling ongoing http requests. + o Make vsnprintf() returns consistent on win32. + o Fix connection keep-alive behavior for HTTP/1.0 + o Fix use of freed memory in event_reinit; pointed out by Peter Postma + o constify struct timeval * where possible + o make event_get_supported_methods obey environment variables + o support for edge-triggered events on epoll and kqueue backends: patch from Valery Kholodkov + o support for selecting event backends by their features, and for querying the features of a backend. + o change failing behavior of event_base_new_with_config: if a config is provided and no backend is selected, return NULL instead of aborting. + o deliver partial data to request callbacks when chunked callback is set even if there is no chunking on the http level; allows cancelation of requests from within the chunked callback; from Scott Lamb. + o allow min_heap_erase to be called on removed members; from liusifan. + o Rename INPUT and OUTPUT to EVRPC_INPUT and EVRPC_OUTPUT. Retain INPUT/OUTPUT aliases on on-win32 platforms for backwards compatibility. + o Do not use SO_REUSEADDR when connecting + o Support 64-bit integers in RPC structs + o Correct handling of trailing headers in chunked replies; from Scott Lamb. + o Support multi-line HTTP headers; based on a patch from Moshe Litvin + o Reject negative Content-Length headers; anonymous bug report + o Detect CLOCK_MONOTONIC at runtime for evdns; anonymous bug report + o Various HTTP correctness fixes from Scott Lamb + o Fix a bug where deleting signals with the kqueue backend would cause subsequent adds to fail + o Support multiple events listening on the same signal; make signals regular events that go on the same event queue; problem report by Alexander Drozdov. + o Fix a problem with epoll() and reinit; problem report by Alexander Drozdov. + o Fix off-by-one errors in devpoll; from Ian Bell + o Make event_add not change any state if it fails; reported by Ian Bell. + o Fix a bug where headers arriving in multiple packets were not parsed; fix from Jiang Hong; test by me. + o Match the query in DNS replies to the query in the request; from Vsevolod Stakhov. + o Add new utility functions to correctly observe and log winsock errors. + o Do not remove Accept-Encoding header + o Clear the timer cache on entering the event loop; reported by Victor Chang + o Only bind the socket on connect when a local address has been provided; reported by Alejo Sanchez + o Allow setting of local port for evhttp connections to support millions of connections from a single system; from Richard Jones. + o Clear the timer cache when leaving the event loop; reported by Robin Haberkorn + o Fix a typo in setting the global event base; reported by lance. + o Set the 0x20 bit on outgoing alphabetic characters in DNS requests randomly, and insist on a match in replies. This helps resist DNS poisoning attacks. + o Make the http connection close detection work properly with bufferevents and fix a potential memory leak associated with it. + o Restructure the event backends so that they do not need to keep track of events themselves, as a side effect multiple events can use the same fd or signal. + o Add generic implementations for parsing and emiting IPv6 addresses on platforms that do not have inet_ntop and/or inet_pton. + o Allow DNS servers that have IPv6 addresses. + o Add an evbuffer_write_atmost() function to write a limited number of bytes to an fd. + o Refactor internal notify-main-thread logic to prefer eventfd to pipe, then pipe to socketpair, and only use socketpairs as a last resort. + o Try harder to pack all evbuffer reads into as few chains as possible, using readv/WSARecv as appropriate. + o New evthread_use_windows_threads() and evthread_use_pthreads() functions to set up the evthread callbacks with reasonable defaults. + o Change the semantics of timeouts in conjunction with EV_PERSIST; timeouts in that case will now repeat until deleted. + o sendfile, mmap and memory reference support for evbuffers. + o New evutil_make_listen_socket_reuseable() to abstract SO_REUSEADDR. + o New bind-to option to allow DNS clients to bind to an arbitrary port for outgoing requests. + o evbuffers can now be "frozen" to prevent operations at one or both ends. + o Bufferevents now notice external attempts to add data to an inbuf or remove it from an outbuf, and stop them. + o Fix parsing of queries where the encoded queries contained \r, \n or + + o Do not allow internal events to starve lower-priority events. + +Changes in 1.4.0: + o allow \r or \n individually to separate HTTP headers instead of the standard "\r\n"; from Charles Kerr. + o demote most http warnings to debug messages + o Fix Solaris compilation; from Magne Mahre + o Add a "Date" header to HTTP responses, as required by HTTP 1.1. + o Support specifying the local address of an evhttp_connection using set_local_address + o Fix a memory leak in which failed HTTP connections whould not free the request object + o Make adding of array members in event_rpcgen more efficient, but doubling memory allocation + o Fix a memory leak in the DNS server + o Fix compilation when DNS_USE_OPENSSL_FOR_ID is enabled + o Fix buffer size and string generation in evdns_resolve_reverse_ipv6(). + o Respond to nonstandard DNS queries with "NOTIMPL" rather than by ignoring them. + o In DNS responses, the CD flag should be preserved, not the TC flag. + o Fix http.c to compile properly with USE_DEBUG; from Christopher Layne + o Handle NULL timeouts correctly on Solaris; from Trond Norbye + o Recalculate pending events properly when reallocating event array on Solaris; from Trond Norbye + o Add Doxygen documentation to header files; from Mark Heily + o Add a evdns_set_transaction_id_fn() function to override the default + transaction ID generation code. + o Add an evutil module (with header evutil.h) to implement our standard cross-platform hacks, on the theory that somebody else would like to use them too. + o Fix signals implementation on windows. + o Fix http module on windows to close sockets properly. + o Make autogen.sh script run correctly on systems where /bin/sh isn't bash. (Patch from Trond Norbye, rewritten by Hagne Mahre and then Hannah Schroeter.) + o Skip calling gettime() in timeout_process if we are not in fact waiting for any events. (Patch from Trond Norbye) + o Make test subdirectory compile under mingw. + o Fix win32 buffer.c behavior so that it is correct for sockets (which do not like ReadFile and WriteFile). + o Make the test.sh script run unit tests for the evpoll method. + o Make the entire evdns.h header enclosed in "extern C" as appropriate. + o Fix implementation of strsep on platforms that lack it + o Fix implementation of getaddrinfo on platforms that lack it; mainly, this will make Windows http.c work better. Original patch by Lubomir Marinov. + o Fix evport implementation: port_disassociate called on unassociated events resulting in bogus errors; more efficient memory management; from Trond Norbye and Prakash Sangappa + o support for hooks on rpc input and output; can be used to implement rpc independent processing such as compression or authentication. + o use a min heap instead of a red-black tree for timeouts; as a result finding the min is a O(1) operation now; from Maxim Yegorushkin + o associate an event base with an rpc pool + o added two additional libraries: libevent_core and libevent_extra in addition to the regular libevent. libevent_core contains only the event core whereas libevent_extra contains dns, http and rpc support + o Begin using libtool's library versioning support correctly. If we don't mess up, this will more or less guarantee binaries linked against old versions of libevent continue working when we make changes to libevent that do not break backward compatibility. + o Fix evhttp.h compilation when TAILQ_ENTRY is not defined. + o Small code cleanups in epoll_dispatch(). + o Increase the maximum number of addresses read from a packet in evdns to 32. + o Remove support for the rtsig method: it hasn't compiled for a while, and nobody seems to miss it very much. Let us know if there's a good reason to put it back in. + o Rename the "class" field in evdns_server_request to dns_question_class, so that it won't break compilation under C++. Use a macro so that old code won't break. Mark the macro as deprecated. + o Fix DNS unit tests so that having a DNS server with broken IPv6 support is no longer cause for aborting the unit tests. + o Make event_base_free() succeed even if there are pending non-internal events on a base. This may still leak memory and fds, but at least it no longer crashes. + o Post-process the config.h file into a new, installed event-config.h file that we can install, and whose macros will be safe to include in header files. + o Remove the long-deprecated acconfig.h file. + o Do not require #include before #include . + o Add new evutil_timer* functions to wrap (or replace) the regular timeval manipulation functions. + o Fix many build issues when using the Microsoft C compiler. + o Remove a bash-ism in autogen.sh + o When calling event_del on a signal, restore the signal handler's previous value rather than setting it to SIG_DFL. Patch from Christopher Layne. + o Make the logic for active events work better with internal events; patch from Christopher Layne. + o We do not need to specially remove a timeout before calling event_del; patch from Christopher Layne. diff --git a/src/main/jni/libevent/LICENSE b/src/main/jni/libevent/LICENSE new file mode 100644 index 00000000..70d76b3d --- /dev/null +++ b/src/main/jni/libevent/LICENSE @@ -0,0 +1,74 @@ +Libevent is available for use under the following license, commonly known +as the 3-clause (or "modified") BSD license: + +============================== +Copyright (c) 2000-2007 Niels Provos +Copyright (c) 2007-2012 Niels Provos and Nick Mathewson + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +============================== + +Portions of Libevent are based on works by others, also made available by +them under the three-clause BSD license above. The copyright notices are +available in the corresponding source files; the license is as above. Here's +a list: + +log.c: + Copyright (c) 2000 Dug Song + Copyright (c) 1993 The Regents of the University of California. + +strlcpy.c: + Copyright (c) 1998 Todd C. Miller + +win32select.c: + Copyright (c) 2003 Michael A. Davis + +evport.c: + Copyright (c) 2007 Sun Microsystems + +ht-internal.h: + Copyright (c) 2002 Christopher Clark + +minheap-internal.h: + Copyright (c) 2006 Maxim Yegorushkin + +============================== + +The arc4module is available under the following, sometimes called the +"OpenBSD" license: + + Copyright (c) 1996, David Mazieres + Copyright (c) 2008, Damien Miller + + Permission to use, copy, modify, and distribute this software for any + purpose with or without fee is hereby granted, provided that the above + copyright notice and this permission notice appear in all copies. + + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + diff --git a/src/main/jni/libevent/README b/src/main/jni/libevent/README new file mode 100644 index 00000000..23b769f9 --- /dev/null +++ b/src/main/jni/libevent/README @@ -0,0 +1,198 @@ +0. BUILDING AND INSTALLATION (Briefly) + +$ ./configure +$ make +$ make verify # (optional) +$ sudo make install + +1. BUILDING AND INSTALLATION (In Depth) + +To build libevent, type + +$ ./configure && make + + (If you got libevent from the git repository, you will + first need to run the included "autogen.sh" script in order to + generate the configure script.) + +You can run the regression tests by running + +$ make verify + +Install as root via + +# make install + +Before, reporting any problems, please run the regression tests. + +To enable the low-level tracing build the library as: + + CFLAGS=-DUSE_DEBUG ./configure [...] + +Standard configure flags should work. In particular, see: + + --disable-shared Only build static libraries + --prefix Install all files relative to this directory. + + +The configure script also supports the following flags: + + --enable-gcc-warnings Enable extra compiler checking with GCC. + --disable-malloc-replacement + Don't let applications replace our memory + management functions + --disable-openssl Disable support for OpenSSL encryption. + --disable-thread-support Don't support multithreaded environments. + +2. USEFUL LINKS: + +For the latest released version of Libevent, see the official website at +http://libevent.org/ . + +There's a pretty good work-in-progress manual up at + http://www.wangafu.net/~nickm/libevent-book/ . + +For the latest development versions of Libevent, access our Git repository +via + "git clone git://levent.git.sourceforge.net/gitroot/levent/libevent" + +You can browse the git repository online at +http://levent.git.sourceforge.net/git/gitweb-index.cgi . + +To report bugs, request features, or submit patches to Libevent, +use the Sourceforge trackers at +https://sourceforge.net/tracker/?group_id=50884 . + +There's also a libevent-users mailing list for talking about Libevent +use and development: http://archives.seul.org/libevent/users/ + +3. ACKNOWLEDGMENTS + +The following people have helped with suggestions, ideas, code or +fixing bugs: + + Arno Bakker + Alejo + Weston Andros Adamson + William Ahern + Ivan Andropov + Sergey Avseyev + Avi Bab + Gilad Benjamini + Stas Bekman + Joachim Bauch + Denis Bilenko + Julien Blache + Kevin Bowling + Tomash Brechko + Kelly Brock + Ralph Castain + Adrian Chadd + Lawnstein Chan + Shuo Chen + Ka-Hing Cheung + Andrew Cox + George Danchev + Andrew Danforth + Antony Dovgal + Ed Day + Christopher Davis + Mike Davis + Mihai Draghicioiu + Mark Ellzey + Shie Erlich + Leonid Evdokimov + Juan Pablo Fernandez + Christophe Fillot + Mike Frysinger + Remi Gacogne + Alexander von Gernler + Artur Grabowski + Sebastian Hahn + Dave Hart + Greg Hazel + Michael Herf + Savg He + Mark Heily + Greg Hewgill + Andrew Hochhaus + Aaron Hopkins + Tani Hosokawa + Jamie Iles + Claudio Jeker + Evan Jones + George Kadianakis + Phua Keat + Kevin Ko + Brian Koehmstedt + Marko Kreen + Valery Kyholodov + Ross Lagerwall + Scott Lamb + Christopher Layne + Adam Langley + Philip Lewis + Zhou Li + David Libenzi + Yan Lin + Moshe Litvin + Simon Liu + Mitchell Livingston + Hagne Mahre + Lubomir Marinov + Abilio Marques + Nick Mathewson + James Mansion + Nicholas Marriott + Andrey Matveev + Caitlin Mercer + Dagobert Michelsen + Mansour Moufid + Felix Nawothnig + Trond Norbye + Linus Nordberg + Richard Nyberg + Jon Oberheide + Phil Oleson + Dave Pacheco + Tassilo von Parseval + Catalin Patulea + Patrick Pelletier + Simon Perreault + Pierre Phaneuf + Ryan Phillips + Dimitre Piskyulev + Pavel Plesov + Jon Poland + Nate R + Robert Ransom + Bert JW Regeer + Peter Rosin + Maseeb Abdul Qadir + Wang Qin + Alex S + Hanna Schroeter + Ralf Schmitt + Mike Smellie + Kevin Springborn + Harlan Stenn + Steve Snyder + Dug Song + Dongsheng Song + Hannes Sowa + Ferenc Szalai + Brodie Thiesfield + Jason Toffaletti + Gisle Vanem + Bas Verhoeven + Constantine Verutin + Colin Watt + Zack Weinberg + Jardel Weyrich + Alex + Taral + propanbutan + mmadia + + +If we have forgotten your name, please contact us. diff --git a/src/main/jni/pdnsd/AUTHORS b/src/main/jni/pdnsd/AUTHORS new file mode 100644 index 00000000..fa0454e4 --- /dev/null +++ b/src/main/jni/pdnsd/AUTHORS @@ -0,0 +1,58 @@ +Most of pdnsd was written by Thomas Moestl (tmoestl@gmx.net). +In the "par" versions large parts of the code have been revised +and several features have been added by Paul Rombouts. + +Small parts of this program are based on code that was taken from nmap (IP +checksumming), the isdn4k-utils (ippp interface uptest), glibc 2.1.2 (some +definitions for kernel 2.2.x missing in 2.0 glibcs) and FreeBSD +(SIZEOF_ADDR_IFREQ in netdev.c). +nmap was written by Fyodor. The insd4k-utils were written by Fritz Elfert and +others. The GNU C library (glibc) is copyright by the Free Software +Foundation. + +The following people have contributed code: +Andrew M. Bishop contributed support for server labels +Carsten Block contributed 'configure'-able rc scripts +Stephan Boettcher contributed the SCHEME= option. +P.J. Bostley contributed patches to get pdnsd working on + alpha +Frank Elsner contributed rc script fixes +Christian Engstler contributed patches for SuSE compatability +Bjoern Fischer contributed code to make pdnsd leave the case of names + in the cache unchanged +Torben Janssen contributed RedHat rc scripts +Olaf Kirch contributed a security fix for the run_as() + function +Bernd Leibing contributed fixes to the spec file. +Sourav K. Mandal contributed the autoconf/automake code, gdbm + caching facility and many suggestions +Markus Mohr contributed Debian rc scripts +Alexandre Nunes contributed autoconf fixes +Wolfgang Ocker contributed the server_ip option +Soenke J. Peters contributed patches and suggestions for RedHat + compatability +Roman Shterenzon contributed many helpful hints and patches for + FreeBSD compatability. +Andreas Steinmetz contributed the code for the query_port_start and + query_port_end options (which I changed slightly, + so blame any breakage on me ;) +Marko Stolle contributed the contrib/pdnsd_update.pl script that + makes pdnsd usable in a DHCP setup. +Lyonel Vincent extended the serve_aliases option to support an + arbitrary number of aliases +Paul Wagland contributed a patches for bind9-compatability + and for some memory leaks on error paths. +Sverker Wiberg contributed IPv6 build fixes +Michael Wiedmann contributed the pdnsd-ctl.8 man page. +Ron Yorston contributed the dev-uptest for Linux ppp dial- + on-demand devices +Nikita V. Youshchenko contributed extensions to the "if" uptest +Mahesh T. Pai contributed the pdnsd.8 man page. +Nikola Kotur contributed the Slackware start-up script. +Kiyo Kelvin Lee contributed a patch for Cygwin support. +Rodney Brown contributed a patch for Darwin (Apple Mac OS X) support. +Jan-Marek Glogowski contributed a patch implementing the "use_nss" option. + +Please look into the THANKS file for people who helped me in various ways on +this project. +If this list is incomplete, pease drop me a mail! diff --git a/src/main/jni/pdnsd/COPYING b/src/main/jni/pdnsd/COPYING new file mode 100644 index 00000000..94a9ed02 --- /dev/null +++ b/src/main/jni/pdnsd/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/src/main/jni/pdnsd/COPYING.BSD b/src/main/jni/pdnsd/COPYING.BSD new file mode 100644 index 00000000..99fe14ae --- /dev/null +++ b/src/main/jni/pdnsd/COPYING.BSD @@ -0,0 +1,26 @@ +A small part of the pdnsd source is licensed under the following BSD-style +license: + +Copyright (C) 2001 Thomas Moestl + +This file is part of the pdnsd package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/src/main/jni/pdnsd/ChangeLog b/src/main/jni/pdnsd/ChangeLog new file mode 100644 index 00000000..9bccef9a --- /dev/null +++ b/src/main/jni/pdnsd/ChangeLog @@ -0,0 +1,3251 @@ +2012-03-16 Paul A. Rombouts + + * src/cache.c + When adding RR records one by one to a cache entry using add_cent_rr(), + use the smallest ttl value in case of conflicting ttls. + Code for local/nonlocal conflict resolution has been taken out of + add_cent_rr_int() and put into add_cent_rr() and cr_check_add() + which should be slightly more efficient. + +2012-03-15 Paul A. Rombouts + + * src/dns_query.c + Enforcing strict RFC 2181 compliance by rejecting all the answers + with inconsistent ttl timestamps can cause undesirable resolve failures. + I have tried to implement a more compromising solution, whereby + inconsistent answers that should be normally rejected are still never + cached, but are nevertheless used as intermediary or temporary results + if all else fails. + +2012-03-13 Paul A. Rombouts + + * src/dns_query.c + Fixed a typo in rr_to_cache() that caused pdnsd to fail to compile when + configured with the --enable-strict-rfc2181 option. + Thanks to Gonzalo L. R. for reporting this problem. + Also changed the return value of rr_to_cache() from a simple boolean to + an RC code in order to properly distinguish between memory allocation + errors and time-stamp inconsistencies. + +2012-02-21 Paul A. Rombouts + + * src/dns_query.c + If we have used EDNS in a query and the remote server answered + with rcode "format error", try again with the OPT pseudo-record + removed from the additional section of the query. + + Also fixed a bug in p_exec_query() that caused pdnsd to behave + as if every reply with a non-empty additional section contained + an OPT record. + +2012-02-15 Paul A. Rombouts + + * src/dns_answer.c,src/helpers.c,src/helpers.h,src/icmp.c, + src/ipvers.h,src/main.c,src/netdev.c + Introduced a new macro SEL_IPVER() to reduce some of the clutter in the + code caused by having to support both IPv4 and IPv6. + +2012-01-31 Paul A. Rombouts + + * configure.in + Add AM_PROG_CC_C_O line to configure.in to prevent automake warning. + +2012-01-29 Paul A. Rombouts + + * src/cache.c + In report_cache_stat(), add the average number of bytes used per cache + entry when reporting the cache status, as suggested by M. Galabant. + +2012-01-28 Paul A. Rombouts + + * src/dns_answer.c,src/dns_query.c + Cleaned up the code a bit to avoid warning messages when + compiling with '-Wall -Winline' flags. + +2012-01-18 Paul A. Rombouts + + * src/conff.c + Set the default of the edns_query option to false. + +2011-07-31 Paul Rombouts + + * src/cache.c + Use a slightly more sophisticated merge-sort algorithm in sort_rrl(). + +2011-05-09 Paul Rombouts + + * src/dns_answer.c + In compose_answer(), also add an OPT pseudo-RR to the additional section + of a NXDOMAIN reply when appropriate. + +2011-05-08 Paul Rombouts + + * src/cache.c,src/cache.h,src/dns_query.c,src/status.c + Make the dns_cent_t struct more compact by putting the fields that are + only used for either non-existent or existent domains, but not both, + into a union so that these fields can share memory. + When saving the cache to file, only write the TTL and time-stamp for + a whole domain when it is negatively cached. + +2011-05-06 Paul Rombouts + + * src/cache.c,src/cache.h,src/dns_query.c + At the request of Andrei Caraman, the TTL of a negatively cached domain + is now adjusted in accordance with the min_ttl and max_ttl options, just + as it is done for (negatively) cached records. + Additional change to the TTL policy is that for negative records (and + negative domains) the neg_ttl setting overrides min_ttl if + neg_ttl < min_ttl. + +2011-04-26 Paul Rombouts + + * src/conf-parser.c + Fixed memory leak that can occur when the configuration file is reloaded + and an error is encountered while parsing the definition of a TXT + record. + +2011-03-21 Paul Rombouts + + * src/make_rr_types_h.pl,src/cache.h,src/cache.c,src/dns_answer.c + Introduced arrays rrmuiterlist and rrcachiterlist to make iterating + over all possible RR types in a cache entry in strict ascending order + a little more efficient. + +2011-03-09 Paul Rombouts + + * src/dns_query.c,src/conf-parser.c,src/conf-keywords.h + Implemented a new config option "outgoing_ip", which + makes it possible to bind outgoing connections to + a specific interface. + +2011-02-21 Paul Rombouts + + * src/netdev.c + Fixed UDP socket descriptors leak in the implementation of + is_local_addr() for the FreeBSD platform. Thanks to Ashish Shukla for + reporting this bug. + +2011-02-14 Paul Rombouts + + * src/cache.c + In purge_all_rrsets(), also free the rrext array if it has become empty after + purging all the RR sets. + +2011-02-04 Paul Rombouts + + * src/conff.c,src/conff.h,src/conf-parser.c,src/conf-keywords.h, + src/dns_query.c,src/dns_query.h,src/servers.c + Changed "edns_query" from a "global" option to a "server" + configuration option. + +2011-02-04 Paul Rombouts + + * src/conff.c,src/conff.h,src/dns_query.c,src/dns_query.h,src/servers.c, + src/conf-parser.c + The query uptest sometimes fails because some DNS servers are configured + to ignore empty queries. The new config option "query_test_name" makes + it possible to query for a specific name instead. + +2011-02-01 Paul Rombouts + + * src/dns_query.c + When processing a reply from a remote name server which seems to delegate + to other name servers, check if the names for which NS records have + been supplied have locally defined NS records. If so, the local + records will now override those supplied by the remote server. + +2011-01-31 Paul Rombouts + + * src/conf-parser.c + Added support for defining TXT records in the configuration file. + +2011-01-30 Paul Rombouts + + * src/dns_query.c + Do not cache additional records from a response that is rejected because + it contains IP addresses in the reject list, even when the reply + is processed as a NXDOMAIN reply. + +2011-01-25 Paul Rombouts + + * src/conf-parser.c + Modified the function scan_string() to allow back-slashed escape + sequences in strings. + +2011-01-21 Paul Rombouts + + * src/dns_answer.c,src/dns_query.c,src/conff.h,src/conff.c, + src/conf-parser.c + Added support for EDNS (Extension mechanisms for DNS). + Currently this is only useful for allowing UDP message sizes + to be larger than 512 bytes. + +2011-01-20 Paul Rombouts + + * src/dns_answer.c + To avoid frequent reallocs when composing a DNS reply message, + grow the message buffer in multiples of a certain minimum chunk size. + +2011-01-19 Paul Rombouts + + * src/dns.c,src/dns.h,src/dns_answer.c + Extended debugging info with DNS-message lengths and flags of incoming + messages. + +2011-01-17 Paul Rombouts + + * src/conff.c,src/conff.h,src/conf-parser.c,src/dns_answer.c + Made "ignore_cd" option obsolete. It is now effectively always on. + +2010-12-27 Paul Rombouts + + * src/cache.c,src/cache.h,src/dns_answer.c,src/dns_query.c, + src/make_rr_types.pl,src/rr_types.in,src/rr_types.c + The array of pointers to rr_set_t structs in the dns_cent_t struct + contains mostly null pointers in practice, so is somewhat + inefficient in storage usage. This problem is exacerbated if we add + support for caching more RR-types. To ameliorate to the problem + I have decided to split the array in two, with one part fixed in the + dns_cent_t struct as before, and an extension part that will be + separately allocated, if necessary. If the extension part is used only + for very rarely cached types, in most cases the extension array will not + need to be allocated thus hopefully saving memory overall. + The lookup tables which are necessary to support the new cache entry + structure are cumbersome to write by hand, so I have written a perl + script to do this automatically. As an additional benefit, which RR + types are cache-able is now configurable for each type separately via + rr_types.in. + +2010-03-14 Paul Rombouts + + * src/dns_query.c + Using randomized source ports for outgoing queries in IPv6 mode failed + with the warning "Out of ports in the range 1024-65535, dropping query!", + because the pdnsd tried to bind to the fixed port for incoming queries, + instead of the dynamically chosen port. This is a very old bug, but it + has only become apparent since source port randomization has become the + default. + Thanks to Philip-André Fillion, Phil Sutter, Radoslaw Szkodzinski and + others for reporting this bug and sending patches. + +2009-12-25 Paul Rombouts + + * src/status.c,src/status.h,src/pdnsd-ctl/pdnsd-ctl.c + Add a magic number to pdnsd-ctl command codes to guard against + possible incompatibility between the pdnsd-ctl utility and the + pdnsd server. + +2009-10-18 Paul Rombouts + + * src/dns_query.c + Make root-server discovery a little more fault tolerant, i.e. if some + of the root-server names don't resolve don't necessarily reject the + whole result. + +2009-10-17 Paul Rombouts + + * src/servers.c,src/dns_query.c,src/dns_query.h + Implemented automatic root-server discovery, which can now be configured + by setting "root_server=discover". + +2009-06-14 Paul Rombouts + + * src/dns_query.c,src/consts.c,src/consts.h,src/conf-parser.c + Changed the default behaviour of the "neg_rrs_pol" option. The default + used to be to only cache records negatively in case the AA (authoritive + answer) bit in the reply was set. The new default is to also allow + negative caching in case the reply has the RA (recursion available) bit + set and the query had the RD (recursion desired) bit set. + This gives the behaviour that is usually wanted in case "proxy_only=on" + is set without having to set "neg_rrs_pol=on", which can be more + problematic. The new default can be explicitly set using + "neg_rrs_pol=default". The values "on","off" and "auth" are also + still available. + +2009-06-13 Paul Rombouts + + * src/conff.c,src/conff.h,src/dns_answer.c,src/conf-parser.c,src/conf-keywords.h + Included a patch contributed by Andreas Steinmetz that implements a new + global configuration option "ignore_cd". pdnsd used to check that the CD + bit in the DNS header of queries is zero and return the error code + "format error" if it is not. However, considering the meaning of this + bit today it appears to be harmless to ignore it, so the new "ignore_cd" + is on by default. Setting "ignore_cd=off" gives the earlier strict + behavior. + Also renamed the the Z1, AU, Z2 bits to correspond with their modern names + CD, AD, Z. + +2008-12-19 Paul Rombouts + + * pdnsd-1.2.7/src/dns_query.c + If pdnsd receives a SERVFAIL response with a non-empty answer section, + use the information tentatively if no better response is available. + The previous behaviour was to discard the reply completely, which could + cause failure to resolve some names. + Thanks to Rafal Wijata for providing an example involving PowerDNS servers + replying with CNAME records. + +2008-09-01 Paul Rombouts + + * src/dns_query.c + In p_dns_resolve(), try to reduce the burden on root servers further for + names ending in "arpa". + +2008-08-31 Paul Rombouts + + * src/dns_query.c + In p_exec_query(), if the reply from a remote name server is negative + (either because the rcode is NXDOMAIN or because the answer section + contains no records for the queried name), ignore the remaining records + in the answer section (in particular do not add them to the cache). + +2008-07-29 Paul Rombouts + + * src/conff.c,src/dns_query.c + Made the default of the configuration option query_port_start equal to + 1024. Also improved the algorithm used by pdnsd to select random source + ports to ensure that each (free) port gets an equal chance of being + selected. This should guarantee random source ports in the range + 1024-65535, making pdnsd less vulnerable to some of the issues described + in CERT VU#800113. + The old situation, where pdnsd lets the kernel select the source ports, + is still available by specifying query_port_start=none. + +2008-07-25 Paul Rombouts + + * src/dns_query.c + Fixed a dangling pointer bug in p_exec_query(), which could cause pdnsd + to crash when processing a long reply with many entries in the answer + section. + +2008-05-12 Paul Rombouts + + * src/conf-parser.c,src/conff.c + Added a recursive-depth counter to the read_config_file() and + confparse() functions to prevent the possibility of infinite + recursion when processing include files. + In confparse(), warn when in a server section the root_server option is + set in combination with policy=simple_only or policy=fqdn_only. + +2008-05-10 Paul Rombouts + + * src/ipvers.h + Included a patch contributed by Georg Schwarz which selectively undoes + a Debian patch contributed by Juliusz Chroboczek on platforms for which + the IPV6_RECVPKTINFO macro is not defined (e.g. MacOS X). + +2008-05-08 Paul Rombouts + + * src/status.c,src/pdnsd-ctl/pdnsd-ctl.c + The pdnsd-ctl add command can now also be used to define NS records. + A wildcard record defined with this command now behaves the same way as + one defined in the config file. + +2008-05-07 Paul Rombouts + + * src/conf-parser.c,src/conf-keywords.h,src/conff.c + Added the ability to process "include" sections in the configuration + file. This makes it possible to place local definitions in separate + files and include them from the main configuration file. + +2008-05-05 Paul Rombouts + + * src/conff.c,src/conf-parser.c,src/status.c,src/pdnsd-ctl/pdnsd-ctl.c + Implemented two new pdnsd-ctl commands, which make it easier to add + definitions to the pdnsd cache at run time. "pdnsd-ctl include" is + similar to "pdnsd-ctl config" but only processes configuration sections + that effect the cache and disallows global and server sections. + "pdnsd-ctl eval" directly parses its string arguments as if they were + part of a configuration (include) file. + +2007-09-15 Paul Rombouts + + * src/dns.h,src/dns_answer.c,src/dns_query.c + Changed the declarations of various packed structs, by moving the + __attribute__((packed)) specifiers from the field level to the struct level. + This was necessary to get the correct value for sizeof(rr_hdr_t) when + compiling with gcc for the ARM architecture. + Thanks to Dirk Armbrust for reporting the problem and supplying the solution. + +2007-08-10 Paul Rombouts + + * src/dns_answer.c + Applied a Debian patch contributed by Juliusz Chroboczek which + reportedly fixes a problem with pdnsd running in IPv6 mode + (IPV6_RECVPKTINFO instead of IPV6_PKTINFO). + +2007-08-04 Paul Rombouts + + * src/dns_query.c + When resolving a name recursively, pdnsd would stop querying further + name servers as soon as it received a reply with the authority (aa) flag + set. Unfortunately, it appears this flag is sometimes raised erroneously + in replies. I have implemented a work-around that ignores the aa flag + when there appears to be a clear delegation to a sub-domain. + Thanks to Nico Erfurth for reporting this problem. + + It appears that pdnsd would also fail to consult servers in the authority + section when configured with neg_rrs_pol=on. This has been fixed. + +2007-08-01 Paul Rombouts + + * src/pdnsd-ctl/pdnsd-ctl.c + Made the matching of pdnsd-ctl command names and most of the arguments + case-insensitive. + +2007-07-22 Paul Rombouts + + * src/dns_answer.c + Instead of sharing the responsibility for freeing the answer buffer in + case of an error amongst different functions, only free it in + compose_answer(). + + * configure.in, src/Makefile.am, src/test/Makefile.am + Merged patch contributed by Pierre Habouzit to deal with CFLAGS the + automake way (allowing packagers to override CFLAGS properly). + +2007-07-21 Paul Rombouts + + * src/dns_answer.c + For each target name in a SRV record in the answer section, add + addresses to the additional section of the response, as is recommended + by the RFCs. + +2007-07-14 Paul Rombouts + + * src/list.c,src/list.h + Made modifications to the implementation of dynamic arrays, which + should ensure proper alignment on all supported architectures. + +2007-07-10 Paul Rombouts + + * Upgraded pdnsd's license to GPL version 3. + +2007-07-08 Paul Rombouts + + * src/cache.h,src/dns_query.c + The data field of the rr_bucket_t struct is now aligned such that + it possible to use straightforward assignment to copy IP addresses, + making memcpy unnecessary for this purpose. + +2007-07-07 Paul Rombouts + + * src/dns_query.c + If pdnsd fails to connect to a name server using a IPv6 address, it will + now retry the connection using a IPv4 address, if available. This allows + pdnsd to recover from situations where IPv6 connectivity is temporarily + unavailable, but IPv4 connectivity still functions. + Thanks to Andreas Ferber for reporting this problem. + +2007-07-04 Paul Rombouts + + * src/dns_answer.c + I have reordered the arguments of the add_rr() and related + functions to make them more consistent with each other. + +2007-07-03 Paul Rombouts + + * src/cache.c,src/hash.c + pdnsd will no longer immediately abort in add_dns_hash() if it fails + to allocate memory for a new hash entry. + +2007-07-01 Paul Rombouts + + * src/conff.c,src/conff.h,src/consts.c,src/consts.h, + src/conf-parser.c,src/conf-keywords.h,src/dns_query.c + Implemented the new "reject", "reject_policy" and "reject_recursively" + options for the server section of the configuration file. + + * src/ipvers.h,src/conf-parser.c,src/dns.c,src/status.c, + src/pdnsd-ctl/pdnsd-ctl.c + Allow local AAAA records to be defined even if pdnsd is compiled + without --enable-ipv6, provided there is sufficient support in the + C libraries and --disable-new-rrs was not used. + +2007-06-30 Paul Rombouts + + * src/dns_answer.c + Previously, when the answer buffer was realloced in add_rr(), an + extra 2 bytes used to be reserved, which are unnecessary, as far + as I can tell. I have decided to do without these extra 2 bytes, + which originate from Thomas Moestl's code. As compensation, I have + added extra PDNSD_ASSERT() statements to check that the answer + buffer does not overflow. + +2007-06-27 Paul Rombouts + + * src/status.c, src/pdnsd-ctl/pdnsd-ctl.c + Extended the pdnsd-ctl 'add a' and 'add aaaa' commands to allow + multiple IP addresses to be specified. + +2007-06-25 Paul Rombouts + + * src/conff.c,src/conff.h,src/conf-parser.c,src/conf-keywords.h, + src/dns_query.c + Implemented a new option for the server section of the configuration + file: randomize_servers. + + * src/servers.c + Improved the debug messages in uptest(). + +2007-01-30 Paul Rombouts + + * src/icmp.c + Fixed up the code implementing the ping test in icmp.c, + which was broken for 64-bit systems. + Thanks to Michael Uleysky for reporting this bug. + +2007-01-09 Paul Rombouts + + * src/dns_query.c + auth_ok() now returns 1 if the cache entry has the DF_NEGATIVE flag set, + without providing a list of authoritative servers to continue querying. + Otherwise if we receive a non-authoritative NXDOMAIN reply and pdnsd + is configured with neg_domain_pol=on, pdnsd will continue to try to + get an authoritative answer. The intention is that pdnsd + stops querying as soon as it gets an "unknown domain" answer. + +2006-04-29 Paul Rombouts + + * src/main.c + pdnsd would segfault if it tried to call log_message() (via the + log_warn() and log_error() macros) before the FILE pointer to the debug + output stream was properly initialized. + Thanks to Thomas Cort for discovering this problem and suggesting a fix. + +2006-04-09 Paul Rombouts + + * src/conf-parser.c,src/helpers.c,src/conff.h,src/conff.c + I have included a patch contributed by Jan-Marek Glogowski, that + implements the configuration option "use_nss". With use_nss=off pdnsd + will avoid system functions that may use NSS (i.e. initgroups()), which + may need DNS for LDAP lookups, which can lead to long timeouts and + stalls if pdnsd itself is used for the DNS lookup. + +2006-03-26 Paul Rombouts + + * src/dns_query.c + Negative caching of RR sets is now also supported with lean_query=off. + +2006-03-25 Paul Rombouts + + * src/dns_query.c,src/conf-parser.c,src/main.c + I have implemented a new query method: udp_tcp. With this method a UDP + query is tried first and, if the UDP answer is truncated, the query is + repeated using TCP. This is the behaviour that seems to be recommended + by the DNS standards. However, pdnsd wil not discard the truncated + answer if the TCP requery fails. + +2006-03-24 Paul Rombouts + + * src/dns_answer.c + Previously, pdnsd would add at most one additional A (and AAA) record + for each record in the answer and authority sections. At the request of + Angel Marin, pdnsd will now add all A and AAA records it can find in the + cache for each name that produces additional records. + +2006-01-02 Paul Rombouts + + * src/dns_answer.c + compose_answer() would leak memory if the query contained + an unsupported QTYPE or QCLASS. This has now been fixed. + +2005-12-27 Paul Rombouts + + * configure.in + TCP-query support is now compiled in by default. + It can still be disabled using the configure option + --disable-tcp-queries. + +2005-12-23 Paul Rombouts + + * src/dns_answer.c + Queries received from clients with non-empty answer, authority or + additional sections are now treated as malformed and rejected with + rcode 1 (format error). + +2005-11-06 Paul Rombouts + + * src/conf-parser.c + Time intervals in the configuration files can now be expressed in + seconds, minutes, hours, days and weeks, using the suffixes + s,m,h,d,and w. + +2005-10-14 Paul Rombouts + + * src/consts.c + In the pdnsd configuration file, true/false and yes/no are now accepted + as synonyms for the constants on/off. + +2005-08-24 Paul Rombouts + + * src/helpers.c + I have fixed a potential buffer overflow problem that could occur with + the 'pdnsd-ctl dump' command. + In case of the root domain, the function rhn2str() would write 2 bytes + to the output buffer even if size==1. Theoretically (under pathological + circumstances) this could have allowed the dbuf buffer in the function + dump_cent() to overflow by one byte. + +2005-08-21 Paul Rombouts + + * acconfig.h,src/cache.c,src/conff.c,src/conf-parser.c,src/dns.c, + src/dns_answer.c,src/dns_query.c,src/error.h,src/helpers.c,src/main.c, + status.c + + It appears the newer versions of gcc won't convert a pointer to char + into a pointer to unsigned char and vice versa without complaining. + The changes I have made should get rid of these distracting warning + messages. Unfortunately I had to introduce casts in some cases, + which reduces type safety :-(. + +2005-08-16 Paul Rombouts + + * src/dns.h + Some changes were made to the endianess detection code to + address problems on Mac OS X v10.4 Tiger. + +2005-08-15 Paul Rombouts + + * configure.in + Some changes where made to address the reported problems with the + configure script on Mac OS X v10.4 Tiger. + +2005-08-05 Paul Rombouts + + * src/status.c,src/dns_answer.c + The output of the 'pdnsd-ctl status' command now includes some + statistics on the number of query threads. + +2005-07-29 Paul Rombouts + + * src/main.c + It appears that sigwait() can return EINTR under certain conditions. + This explains the problems reported by Sanjoy Mahajan with strace + and ACPI S3 sleep, which both caused pdnsd to exit prematurely. + The return value of sigwait() is now checked and sigwait() is retried + if the return value is EINTR. + +2005-07-04 Paul Rombouts + + * src/dns_query.c + It appears that some servers that do not support recursive queries + answer with "query refused" instead of "not supported". The + p_exec_query() function now takes that possibility into account. + +2005-07-01 Paul Rombouts + + * src/dns_query.c + In the processing of queries, I will make a distinction between + recoverable errors and non-recoverable ones (typically caused by out of + memory conditions). In the case of non-recoverable errors, no attempt to + query alternative name servers is made. + +2005-06-26 Paul Rombouts + + * src/dns_query.c + In p_recursive_query(), as soon as one of the servers in the q list + replied "no error" or "name error", only this reply was examined and + the other servers in the q list were ignored. Joshua Coombs has brought + to my attention that this strategy sometimes fails when this reply is not + authoritative and doesn't contain any usable references to name servers + in the authority section. + I have modified p_recursive_query() to allow pdnsd to continue querying + the remaining servers in the q list as long as we haven't received an + authoritative answer or usable authority information. This will allow + pdnsd to arrive at the correct answer in some cases where it would + formerly fail. + +2005-06-25 Paul Rombouts + + * src/status.c + The "pdnsd dump" command may now also be given an argument + consisting of a name beginning with a dot. This will dump information + about all names in the cache ending in the given name. An argument + consisting of a name without a leading dot will only give information + about the exact name, as it did before. + +2005-06-24 Paul Rombouts + + * src/servers.c,src/status.c + All uptests are now conducted by the server status thread. If a retest + is requested via a "pdnsd-ctl server", an existing server status thread + is signaled or a new server status thread is spawned if the old one has + exited. This has the effect that a "pdnsd-ctl server label retest" + command will now return immediately without waiting for the tests to + finish. + +2005-06-20 Paul Rombouts + + * src/conf-parser.c,src/servers.c,src/servers.h + At the request of Al-Junaid Walker I have added a new configuration + option for the uptest interval. With "interval=ontimeout" the server is + not tested at startup/reconfig, or at regular intervals, but only after + a DNS query to a server times out. However, once a server is declared + dead it is never considered again unless it is revived using a + "pdnsd-ctl config" or "pdnsd-ctl server" command. + +2005-06-19 Paul Rombouts + + * src/servers.c,src/dns_query.c,src/icmp.c + During an uptest the server configuration data is locked. Especially + with ping or query uptests of unresponsive servers this means that the + execution of "pdnsd-ctl config" or "pdnsd-ctl server" commands can be + delayed for a long time (or even time out). I have made modifications + that allow a "pdnsd-ctl config" or "pdnsd-ctl server" commands to + interrupt pending uptests to allow these commands to proceed without + delay in most cases. + + * src/thread.h + Use the POSIX sigaction() instead of signal() to install signal handlers. + +2005-06-08 Paul Rombouts + + * src/dns_answer.c,src/dns_query.c + I have defined a struct dns_msg_t that includes a message length field. + In the case of sending a DNS message over TCP, we no longer need a + separate write() call to send the message length. This prevents possible + packet fragmentation. + +2005-06-07 Paul Rombouts + + * src/dns_query.c + The query_method=tcp_udp option only used to work with cooperative name + servers, i.e. servers that either send back a TCP reply or explicitly + refuse the TCP connection request. This wasn't sufficiently satisfactory + in practice, because some name servers are completely unresponsive to TCP + connection requests. I have made modifications to allow pdnsd to try UDP + queries in case TCP connections time out. When a short server timeout is + combined with a global timeout that is at least twice as long, this may + allow a query to a name server that only responds to UDP queries to + succeed with query_method=tcp_udp. + +2005-04-20 Paul Rombouts + + * src/cache.c,src/hash.c,src/conff.c,src/status.c,src/pdnsd-ctl/pdnsd-ctl.c + The "pdnsd-ctl empty-cache" command now accepts additional arguments; + these are interpreted as include/exclude names. During execution of the + command the name of each cache entry is matched against the names in the + include/exclude list. If the name ends in a name to be included, the + cache entry is deleted, otherwise not. + This feature was added at the request of Joshua Coombs. + +2005-04-19 Paul Rombouts + + * src/cache.c, src/hash.c + pdnsd will now (temporarily) unlock the cache between emptying hash + buckets, this should allow pdnsd to remain responsive while executing + the "pdnsd-ctl empty-cache" command. However, this only applies to DNS + queries; pdnsd will not accept any new pdnsd-ctl commands while a + pdnsd-ctl command is still running. + +2005-03-29 Paul Rombouts + + * configure.in, src/hash.h + I have added a new configure option --with-hash-buckets=... + This makes it possible to specify a different number of + hash buckets without editing the source files. + +2005-03-17 Paul Rombouts + + * src/error.c + When running in both daemon and debug mode, print warning and + error messages to debug file as well as the syslog. + +2005-03-15 Paul Rombouts + + * src/dns_answer.c + Only call pthread_setspecific() in debug mode, because + pthread_getspecific() is also only used in debug mode. + If pthread_setspecific() fails, treat this as a non-fatal error. + +2005-03-10 Paul Rombouts + + * configure.in + On Linux systems the configure script will now try to detect automatically + whether the system implements the Native POSIX Thread Library, but + the method is not necessarily foolproof. + + * src/dns.c + Local PTR records generated for resolving numeric IPv6 addresses back into + names, are now based on ip6.arpa instead of ip6.int, because the latter domain + will be phased out eventually. + +2005-03-06 Paul Rombouts + + * Makefile.am,src/cache.c + Create an empty cache-file at install time and don't complain about empty + cache files at start up. + +2005-02-20 Paul Rombouts + + * acconfig.h,configure.in,src/conf-parser.c,src/conff.h,src/dns.h, + src/dns_answer.c,src/dns_query.c,src/error.h,src/helpers.h,src/icmp.c, + src/ipvers.h + + I have applied some changes to the code proposed by Rodney Brown to improve + portability. In particular, pdnsd should now compile on the Darwin platform + (Apple Mac OS X). + To support some of these changes, the source package is now built with a + slightly more modern version of autoconf (2.57) and automake (1.6.3). + +2005-01-29 Paul Rombouts + + * src/dns.c,src/dns_answer.c,src/dns_query.c + + I have added some extra debug code to make it easier to discover the + reason that pdnsd considers a query or reply malformed (format error). + +2005-01-12 Paul Rombouts + + * src/dns.c,src/dns_answer.c,src/dns_query.c + + I have extended some debug code contributed by Kiyo Kelvin Lee to dump + the data received by pdnsd in debug mode (queries from clients, replies + from name servers). Because this will give very verbose debug output, + I've arranged it so that this data dump only occurs if pdnsd has been + configured and compiled with --with-debug=9 and pdnsd has been called + with -v9. + + Additionally, in the case that pdnsd rejects a reply from a name server + because it is not well formed, I have refined the debug messages to + distinguish between format errors due to unexpected truncation and + others kinds of format errors. + +2004-10-30 Paul Rombouts + + * src/rr_types.c + I have included some changes proposed by Joseph Pecquet to address + the compilation problems reported by FreeBSD users. + +2004-10-18 Paul Rombouts + + * acconfig.h,configure.in,src/helpers.c,src/helpers.h,src/dns.h + I have merged a patch for CYGWIN support by Kiyo Kelvin Lee into + my version of the code. + +2004-10-15 Paul Rombouts + + * src/cache.c + Invalidating local records with the pdnsd-ctl did not work the way the + documentation described. An invalidated local record would be always be + purged at the next lookup, thus invalidation would practically have the + same effect as deletion. An invalidated local record is of no use at all and + would occupy space until it is purged during a lookup (but not by purge_cache). + The function invalidate_record() now behaves as the documentation describes, i.e. + invalidation of local records has no effect. + +2004-09-27 Paul Rombouts + + * doc/pdnsd.conf.5.in + A new man page describing the format of the pdnsd config file has been + added to the pdnsd package. I've used a customized Perl script to generate + one automatically from the html documentation. + +2004-09-14 Paul Rombouts + + * src/hash.c + The cache entries in a hash chain are now stored in order of increasing long hash + value. The advantage is that if an name is looked up that is not present in the + cache, this can be done by comparing with only half (on average) of the number + of entries in the hash chain. Not a huge speed up, but still worth while, I think. + Additionally, the number of hash computations for each add_cache() call has + been halved. + +2004-09-11 Paul Rombouts + + * src/cache.c + insert_rrl() will no longer add local records to the rr_l list, because + purge_cache() ignores them anyway. + +2004-09-08 Paul Rombouts + + * src/dns.h,src/cache.c,src/dns_query.c,src/dns_answer.c,src/conf-parser.c + I've started using GETINT16,GETINT32,PUTINT16,PUTINT32 macros, which are based + on the NS_GET/NS_PUT macros that can be found in the BIND source, instead of memcpy + for fetching and storing non-aligned integer data. + +2004-09-08 Paul Rombouts + + * src/cache.c,src/status.c,src/pdnsd-ctl/pdnsd-ctl.c + New pdnsd-ctl command: "pdnsd-ctl dump" will print information about all the + entries contained in the cache. + "pdnsd-ctl dump " will only print entries belonging to . + The data fields of the more common rr-types will be printed in human readable + form, the remaining ones in a hexadecimal representation. + With thanks to Dan Jacobson for suggesting this feature. + +2004-08-31 Paul Rombouts + + * src/conf-parser.c + At the suggestion of Dan Tihelka, I have expanded to the server_ip= option + to allow the name of an interface to be specified instead of an IP address. + pdnsd will not bind to the interface name, but will lookup the address the + interface has at start up, and listen on that address. If the address + of the interface changes while pdnsd is running, pdnsd will not notice that. + +2004-08-30 Paul Rombouts + + * src/cache.h,src/cache.c + I've reversed the meaning of the CF_NOAUTH and renamed it CF_AUTH. + I've also added a domain level flag DF_AUTH, which is used to + mark cache entries obtained from authoritave replies in response to + a query of type * (all).. + +2004-08-30 Paul Rombouts + + * src/cache.c + I've changed the format of the cache file. A typical cache entry has empty + sets for most RR types (even more if DNS_NEW_RRS is defined). In the old + format, each empty RR set was represented by a zero byte. + In the new format only non-empty sets are respresented, leading + to a (modest) reduction is size. + +2004-08-28 Paul Rombouts + + * src/conf-parser.c + New option for "rr" sections in the config file: reverse=on/off. + If you want a locally defined name to resolve to a numeric address and vice + versa, you can now achieve this by setting reverse=on before defining the + A record, making it unnecessary to define a seperate PTR record for the reverse + resolving. + +2004-08-20 Paul Rombouts + + * src/cache.h,src/cache.c,src/conf-parser.c,src/dns_query.c + At the request of Daniel Black, I have added support for defining local wildcard records + in pdnsd. The only type supported presently is records beginning with '*.'. + +2004-08-10 Paul Rombouts + + * src/hash.c,src/cache.c,src/dns_query.c,src/dns_answer.c + Sampo Lehtinen has remarked that pdnsd sometimes failed to resolve classless + reversed-delegated IP addresses, and that this has something to do with the fact + that pdnsd did not accept '/' characters in domain names. After reading Sampo's + and Thomas' remarks, and also rfc2317 and some of the rfc's referenced in rfc2317, + I decided pdnsd should place no restrictions at all on the types of characters it + allows in domain names, only on the lengths of the byte sequences. + This led me to make some quite extensive internal changes to pdnsd. Among other + things domain names are now stored in transport format (sequences of bytes preceded + by length bytes) instead of C strings. This is also more efficient because there + is no need any more to convert from one representation to the other, except when + reading the config file, interacting with pdnsd-ctl or running in debug mode. + Conversion between the two representations isn't always possible, though. + For example, domain names in transport format might contain non-printable characters. + These are now printed as escape sequences (three octal digits preceded by a back slash). + Presently there are still restrictions on the characters in the domain names that can + be defined in local records. I doubt this will ever be considered a problem. + +2004-08-02 Paul Rombouts + + * src/dns_query.c + The code for handling NXT records was flawed. A response from a remote server + containing NXT records (even well-formed ones) could cause pdnsd to crash. + The code for handling NAPTR records contained incorrect PDNSD_ASSERT statements, + which could cause pdnsd to abort unnecessarily. + +2004-07-25 Paul A. Rombouts + + * src/list.h,src/list.c,src/dns.c,src/dns_query,src/dns_answer.c + I've noticed that some of the (dynamic) arrays that pdnsd uses are quite sparse. + Instead of using an array structure with elements that are large enough to contain + the largest possible domain name, I've implemented a "list" data structure that + is more compact. The elements of a list can only be accessed sequentially from + beginning to end, but it allows more efficient memory use in case the names are + significantly shorter that the maximum. + +2004-07-22 Paul Rombouts + + * src/conf-parser.c + I've expanded pdnsd's configuration options by adding support in pdnsd for reading + /etc/resolv.conf style files. Instead of specifying IP addresses in a server section, + the option "file=" can be used. + The IP addresses in the lines beginning with "nameserver" will be added to + the list of address for that section, the remaining lines will be ignored. + To avoid the possibility that pdnsd will query itself, local addresses are skipped + (unless pdnsd is configured to listen on a different port number). + +2004-07-21 Paul Rombouts + + * src/cache.h,src/cache.c,src/dns_query.c,src/conf-parser.c + New option for "server" sections in the config file: root_server=on/off. + In case a server section contains only addresses of root servers, which + usually only give the nameservers of top level domains in their reply, + setting root_server=on will enable certain optimizations. This involves using + cached information to reduce queries to the root servers, thus speeding up + the resolving of new names. This option is also necessary to make the + delegation_only option work in combination with root servers. + +2004-07-16 Paul Rombouts + + * src/cache.c,src/status.c,src/pdnsd-ctl/pdnsd-ctl.c + New pdnsd-ctl command: "pdnsd-ctl empty-cache" will make pdnsd delete its entire + cache, freeing all entries. This is useful for debugging purposes, or in situations + where you suspect that stale cache entries are causing you problems, but you are not + sure which ones. + +2004-07-11 Paul Rombouts + + * src/cache.c,src/dns_query.c + I've removed the use of the function add_cache_rr_add(), which was used to + add additional RR records to the cache one at a time. I've changed the code + in dns_query.c such that additional (or off-topic) records are first collected + in arrays of dns_cent_t structures, and then added to the cache using add_cache(). + With this approach only one function, viz. add_cache(), is used for adding + new entries to the cache, which I believe leads to a cleaner programming + interface. Added benefit is that query serial numbers are no longer + necessary. + +2004-07-10 Paul Rombouts + + * src/cache.h,src/cache.c,src/dns_query.c,src/dns_answer.c + I've added two new field to the dns_cent_t struct, namely c_ns and c_soa. + These will be used to remember references to NS and SOA records in the authority + sections of replies from remote name servers. + This information can be used by pdnsd to fill in the authority section of its + own reply. + +2004-06-25 Paul Rombouts + + * src/dns_query.c,src/servers.c,src/consts.c + I've added an new server availability test which can be selected with "uptest=query". + This can be useful as an alternative to "uptest=ping" in case the remote server does not + respond to ICMP_ECHO requests at all, which unfortunately is quite common these days. + "uptest=query" causes pdnsd to send an empty query to remote nameservers. Any well-formed + response (apart from SERVFAIL) within the timeout period will be interpreted as a sign that the + server is "up". + In a sense this new availability test can actually be considered more reliable than the + other ones that pdnsd supports. + With thanks to Juliusz Chroboczek for suggesting this feature. + +2004-06-24 Paul Rombouts + + * src/helpers.c + Don't use getpwnam() while we are multi-threaded, because it returns a pointer to + a statically allocated structure. I will use getpwnam_r() instead, which is thread + safe. Unfortunately there seem to be some portability problems with getpwnam_r(). + For those platforms that lack getpwnam_r(), I will keep the old code with getpwnam() + as an alternative. + +2004-06-23 Paul Rombouts + + * src/servers.c + Check that the number of IP addresses in a server section is nonzero before + testing servers for availability. Otherwise pdnsd could crash in debug mode. + +2004-06-21 Paul Rombouts + + * src/conff.c,src/conf-parser.c,src/status.c,src/pdnsd-ctl/pdnsd-ctl.c + New pdnsd-ctl command: "pdnsd-ctl config" will make pdnsd re-load its configuration file. + In most cases (but there are still some exceptions) this is preferable + to restarting pdnsd after making changes to the configuration file. + An important advantage is that there should be no perceptible interruption in the dns service + when using the reload command. + An alternative config file can be specified with "pdnsd-ctl config ". + +2004-05-31 Paul Rombouts + + * src/dns_answer.c,src/dns_query.c,src/dns_query.h + I've made an adjustment to p_recursive_query() and related functions, so that + when pdnsd chases name servers in pursuit of authoritative records, it avoids + all the name servers already queried for the same name in the recursive calling + chain, not just the servers most recently used. + Although the hops counter will already break any possible cycles, this will + allow pdnsd to detect pathological cycles earlier and waste less resources. + + * src/cache.c + In add_cache(), don't add empty entries to the cache. Empty cache entries + waste memory and are more persistent than non-empty ones, because purge_cache() + cannot get rid of them. + +2004-05-30 Paul Rombouts + + * src/dns_answer.c,src/dns_query.c,src/icmp.c,src/netdev.c + I've removed the calls to getprotobyname() and used the constants IPPROTO_TCP + and IPPROTO_UDP instead. First of all, it doesn't seem very efficient to call + a function repeatedly to look up the same well-known protocol numbers. + More importantly, getprotobyname() stores its results in a statically-allocated + structure and thus cannot be considered thread safe. (getprotobyname_r() + is thread safe, but is not portable.) + +2004-05-27 Paul Rombouts + + * src/dns_answer.c + I've noticed that when pdnsd is restarted shortly after it has answered a TCP + query, it is often not able to bind to the TCP socket again, resulting in a + disabled TCP server thread. The solution appears to be to set the SO_REUSEADDR + socket option before binding the socket. This allows you to use the same port even + if it is busy (in the TIME_WAIT state). + I found the code for this in a patch file from an old Debian package. + +2004-05-20 Paul Rombouts + + * src/dns_query.c + Joseph Pecquet has reported that version 1.1.11 does not compile under FreeBSD v4.x + because the macro ENONET is undefined. I've bypassed the problem by surrounding + the case line using this value with conditional preprocessor directives. + +2004-05-08 Paul Rombouts + + * src/rc/Slackware/rc.pdnsd + I've included a Slackware start-up script contributed by Nikola Kotur. + +2004-05-05 Paul Rombouts + + * doc/pdnsd.8 + I'm very grateful to Mahesh T. Pai for contributing a pdnsd man page, + which was still missing up till now. + +2004-04-30 Paul Rombouts + + * src/servers.c,src/dns_query.c + After considering some suggestions made by Juliusz Chroboczek I have made the + following changes: + + - After receiving a reply from a remote server mark the server up and update the + timestamp so that pdnsd doesn't bother testing this server for availability for a + while. + - After detecting an error with an send/recv call that indicates a server is + unavailable, mark a server down so that pdnsd doesn't bother testing this server + for a while. + - After server timeouts, uptests are never performed by a query/answer thread, + because this may delay the sending of an answer to the client. Instead the + timestamp of a server that needs to be tested for availability is set to zero and + a condition signal is sent to alert the server status thread, which will carry out + the test. Unresponsive servers with uptest=ping will not be marked down + immediately any more, but only after the ping test has definitely failed. + + * src/error.c,src/error.h + I've moved most of the code previously contained in the DEBUG_MSG macro to a new + function debug_msg(). + The DEBUG_MSG macro now simply expands to "if(debug_p) debug_msg();". + This should make the executable a little smaller, and be just as fast when + debugging is off. The DEBUG_MSG macro still expands to nothing if pdnsd is built + without debugging support. + +2004-04-28 Paul Rombouts + + * src/dns_query.h,src/dns_query.c + I've tried to simplify the finite state machine used for processing parallel + queries, by merging the "state" and "nstate" variables used by p_exec_query() and + p_query_sm() resp. into one "state" variable. + By introducing an extra field "iolen" to keep track of the number of bytes read + from or written to a socket, I could also reduce the number of states for TCP + queries. The new code has the additional advantage that it can handle situations + that require multiple read() calls to receive a response. + +2004-04-14 Paul Rombouts + + * src/dns_query.c + I've added an extra check comparing the number if poll/select events actually + handled to the return value of poll/select. This should reduce the chance that + pdnsd will get caught in a busy spin due to unknown remaining bugs. An error + message is logged and an error code is returned when this comparison fails. + +2004-04-13 Paul Rombouts + + * src/dns_query.h,src/dns_query.c + I got rid of the event field in the query_stat_t struct. + I think it is redundant, because its value can be quite simply derived from + the nstate field. + +2004-04-12 Paul Rombouts + + * src/dns_query.c + I appears there was flaw in the code for handling a "Not Implemented" response + from a remote server with the RA (recursion available) bit equal to zero. This + could cause pdnsd to get into a busy spin. I traced the flaw back to Thomas + Moestl's code, so it must be in all the versions of pdnsd I know of. In previous + versions of pdnsd the busy spin would eventually time out. Due to some recent + changes the loop would no longer time out, making the bug more noticeable. + With thanks to Nicolas George for reporting the bug. + + I also discovered a closely related flaw that would cause pdnsd to poll() closed + file descriptors. It usually works out OK in practice, but it is definitively not + the correct way to do it. + + Additionally, I discovered some opportunities to save memory, e.g. by replacing + the nsname buffer in the query_stat_t struct by a pointer to an already existing + copy of a name. + +2004-04-10 Paul Rombouts + + * src/cache.c + Nicolas George remarked that he thought it was strange that subdomains of domains + negated with "neg" sections in the config file were not also negated. I thought that + he had a point, and I've implemented a change so that negating example.com will + now also negate www.example.com, xxx.adserver.example.com, etc. + +2004-04-09 Paul Rombouts + + * src/error.c,src/error.h + I noticed that the code for the log_warn() and log_error() functions was almost + identical, even to the point that log_warn() called syslog() with LOG_ERR + priority. I've merged these two functions into one log_message() function. + +2004-04-08 Paul Rombouts + + * src/main.c,src/conf-parser.c + The -4 and -6 command-line options should now work as advertised. + This wasn't entirely trivial. The rule is that options on the command line + override those in the configuration file. The easiest way to implement this is to + process the command-line options after reading the configuration file. But this + doesn't work for the -4 and -6 options, because the run_ipv4 flag determines how + IP addresses in the config file are parsed. I've inserted some extra tests and + warning messages that will hopefully make this setting nearly foolproof. + + I've added two new command-line options, "-a" and "-i ". + With the -a flag pdnsd will try to detect automatically if IPv6 support is + available on a system, and fall back to IPv4 if not. The -a flag can be used + instead of -4 or -6. + + In IPv6 mode, pdnsd will now automatically convert IPv4 addresses to IPv6-mapped + addresses. The -i option can be used to specify a prefix for this mapping. The + default is ::ffff.0.0.0.0 + There is also a corresponding ipv4_6_prefix= option for the config file. + + In IPv4 mode, if IPv6 support is compiled in, pdnsd will now skip IPv6 addresses + in the config file (except for the server_ip and ping_ip options) with a warning + message. This allows you to have mixed sets of IPv4 and IPv6 address in the same + config file, although in IPv4 mode some server sections may become inactive. + + With thanks to Juliusz Chroboczek for suggesting these changes. + +2004-04-07 Paul Rombouts + + * src/cache.c + I've changed some of the cache-flag definitions to make debugging a little simpler. + Unfortunately, this makes the cache files of previous pdnsd versions incompatible + with the new one. I've introduced a cache version identifier to be added at the + beginning of each cache file. This enables pdnsd to recognize and discard + incompatible cache files. + +2004-04-05 Paul Rombouts + + * src/cache.h,src/cache.c + I've changed the way CACHE_LAT (cache latency, normally 120 secs) is used to + determine whether a cache entry has timed out. Instead of simply adding it to the + ttl (time to live), I use CACHE_LAT if the ttl is less then CACHE_LAT, else the + ttl itself, making CACHE_LAT the minimum ammount of time a cache entry stays in + the cache. + +2004-04-02 Paul Rombouts + + * src/dns_query.c + I've introduced a global timeout parameter. This is the minimum period of time + pdnsd will wait after sending the first query to a remote server before giving + up without having received a reply. + The timeout options in the configuration file are now only minimum timeout intervals. + Setting the global timeout option makes it possible to specify quite short timeout + intervals in the server sections. This will have the effect that pdnsd will start + querying additional servers fairly quickly if the first servers are slow to respond + (but will still continue to listen for responses from the first ones). + This may allow pdnsd to get an answer more quickly in certain situations. + + * src/dns_query.c + When receiving a NXDOMAIN (unknown domain) response from a remote name server, + I think it is still useful to process the authority and additional sections, + so that pdnsd can possibly add a SOA record to its own response. + +2004-04-01 Paul Rombouts + + * src/dns_query.c + In p_recursive_query(), I've slightly changed the way pdnsd does parallel + queries. Active queries or not canceled until we have received a useful response + from a remote name server, or all the queries have failed or timed out. + Thus the par_queries parameter is no longer the maximum number of parallel + queries, but rather the increment with which the number of parallel queries is + increased when the previous set has timed out. + In the worst case all the servers in the list of available servers will be queried + simultaneously. We may be wasting more system resources this way, but the advantage + is that we have a greater chance of catching a reply. + After all, if we wait longer anyway, why not for more servers. + +2004-03-31 Paul Rombouts + + * src/dns_answer.c + I've noticed that in compose_answer() that while adding the name in the query + section it was not passed through compress_name(). While it is true that the + first name occurrence cannot be compressed, it is still sensible to process the + query name with compress_name() so that the offset can be stored and provide + additional opportunities for future compressions. + I've tested this with dig and the responses of pdnsd are now usually a little + smaller in size or can hold more information within the 512 byte limit. + +2004-03-30 Paul Rombouts + + * src/cache.c + I've noticed that pdnsd stored rr records (of the same type) in reverse order + in the cache. + Although I don't see anything inherently wrong with that, I think it's neater to + store them in the order they are processed. + +2004-03-29 Paul Rombouts + + * src/cache.c + I've rearranged the order of the arguments of some of the functions in cache.c + to obtain a more consistent calling interface. + + * src/dns_answer.c + I've noticed that pdnsd would only add NS records to an authority section if it could + find such records matching the queried name (or the last CNAME in the answer) exactly. + However, I understand that a server should try to give NS records as close as possible + to the target name in the naming hierarchy. + I also understand that if a domain name is reported as nonexisting, or no record of + the requested type exists, it is customary to provide a SOA record, searching up the + name hierarchy if necessary. + I've tried to implement this in compose_answer(), although with some limitations. + I only look in the cache, I don't search more then three levels up, and stop before + the top level. + +2004-03-28 Paul Rombouts + + * src/cache.c,src/dns_answer.c + There were some issues with add_cache_rr_add(). + + First of all, the way it was used in rr_to_cache() (or rather not used) meant + that if an "off topic" record was added for a name that lacked an entry in the + cache, the rr set would be created with an incorrect serial number (namely zero). + I've rewritten add_cache_rr_add so that it can create new cache entries if necessary. + This simplifies the code in rr_to_cache() and ensures correct serial numbers. + + Secondly, in add_cache_rr_add() the ttl was compared with that of an existing rrset + without adjusting for the min_ttl and max_ttl options. This could lead to all the + previous records being deleted, retaining only the last one. + +2004-03-27 Paul Rombouts + + * src/dns_answer.c + In compose_answer(), if the rd (recursion desired) bit is set in the query + and the response contains a CNAME record (while a different type of record was + requested), always do a recursive query on the CNAME, even if we have already + added a record of the requested type to the response. + Failing to honor the rd bit will cause some resolver libraries to complain, + even if the answer contains a record of the requested type. + + I've slightly changed the calling interfaces of add_to_response() and add_rrset() + to make them more consistent and efficient. + + In add_rrset() I've fixed a memory leak on one of the error paths. + + In add_additional_rr(), the return value of add_rr() was not checked. + If add_rr() fails, it will free *ans, and functions higher up the calling + chain could be referencing freed memory. + + I've fixed a potential referencing of freed memory or double freeing in add_additional_a(). + If a call of add_additional_rr() fails, it will free *ans. + Previously, add_additional_rr() could be called a second time, in which case + the second call would be referencing freed memory or freeing it a second time.. + +2004-03-23 Paul Rombouts + + * configure.in, src/Makefile.in,src/pdnsd-ctl/Makefile.in,src/test/Makefile.in + Frédéric L. W. Meunier has reported that configure --srcdir option (for building + in directory separate from the source directory) was broken. + Should be fixed now. + +2004-03-20 Paul Rombouts + + * src/dns_answer.c,src/dns_query.c,src/helpers.c,src/icmp.c,src/main.c,src/netdev.c,src/ipvers.h,src/test/if_up.c,src/test/is_local_addr.c,src/test/tping.c,src/test/random.c,src/conf-parser.c + I've eliminated the global variable run_ipv6 from the code. + Enabling both the IPv4 and IPv6 protocols at the same time is not supported + in pdnsd, so the value of run_ipv6 (if it is defined) is simply !run_ipv4. + + * src/dns.c,src/test/is_local_addr.c,src/test/tping.c + It appears the option to compile pdnsd without IPv4 support (i.e. only IPv6 + support) was broken. Should be fixed now. + +2004-03-19 Paul Rombouts + + * src/cache.c + I've discovered an incorrect use of cache locks in lookup_cache(). + We only read locks in place, it is possible for purge_cent() to delete a cache + entry while another thread is trying to read it at the same time, which could + lead to trouble. I've rewritten purge_cent() so that it can be used to test + whether something needs to be purged without actually deleting anything. + If something needs to be deleted, purge_cent() will be called again with + the proper read/write locks in place, excluding access to the cache for all + other threads. + +2004-03-18 Paul Rombouts + + * src/cache.c + I've added a new function sort_rrl() for sorting the rr_l list using a merge-sort + algorithm. Usually the insertion sort used by insert_rrl() is good enough, because + new entries belong near the end most of the time. Reading entries from disk forms + an exception, though, because the rrsets in the file are completely out of order + w.r.t. timestamps, leading to quadratic time complexity of the insertion sort method. + In that case it should be faster to simply append items at the end of the rr_l list + and sort using a more efficient algorithm afterwords. + pdnsd now seems to start up noticeably faster when reading large cache files. + I've also considered using a more sophisticated data structure than a doubly linked + list, but this will add considerable complexity to the code and use more memory. + +2004-03-13 Paul Rombouts + + * src/dns_answer.c + Changed a declaration in udp_answer_thread() so that the buffer used for passing + control messages on to sendmsg() is exactly the right size, instead of an arbitrary + 512 bytes. + Also initialized the msg_flags of the struct msghdr passed on to sendmsg() to zero, + to keep Valgrind from complaining about uninitialized bytes. + +2004-03-12 Paul Rombouts + + * src/icmp.c + Fixed an incorrect call to select() in ping4(). A file descriptor set for detecting + exceptions was initialized but not passed on to select(). This would lead subsequent + code always to behave as if an IO exception had occurred. + Valgrind seems to indicate that when a poll() call times out and returns 0, + the revents field of the struct pollfd is not necessarily set. + I've changed the code to check that the return value is > 0 before examining the + revents field. + +2004-02-06 Paul Rombouts + + * src/conf-parser.c,src/conf-parser.h,src/conf-keywords.h + I've rewritten the parser for the configuration file in C from scratch. + (f)lex and yacc/bison are no longer needed to build pdnsd. + +2004-01-16 Paul Rombouts + + * src/main.c + Load the cache from disk without locking cache access because pdnsd + is still single-threaded at that point. + +2004-01-15 Paul Rombouts + + * src/cache.c,src/hash.c + Moved the responsibility for freeing the cache entries referred by + the hash buckets from destroy_cache() to free_dns_hash() (which is called + by destroy_cache()). Previously, the cache and hash tables were already + completely destroyed by the time free_dns_hash() was called, and there was + nothing left for free_dns_hash() to free. + +2004-01-14 Paul Rombouts + + * src/hash.c,src/make_hashconvtable.c + The hash conversion table is now generated at build time instead + of at run time when pdnsd is started up. + +2004-01-13 Paul Rombouts + + * src/dns.c + In add_host() fixed incorrect generation of IPV6 type of name for PTR record + due to use of && instead of & as masking operator. + +2004-01-13 Paul Rombouts + + * src/icmp.c, src/dns_answer.c + Use unsigned long instead of int error counters to reduce the danger + of wraparound. + +2004-01-06 Paul Rombouts + + * src/main.c,src/thread.c,src/thread.h,src/server.c,src/status.c,src/dns_answer.c + Initialize a global thread attribute object in main.c and use it to create all the detached + threads, instead of initializing a separate attribute object for each new thread. + +2004-01-06 Paul Rombouts + + * src/dns_answer.c + Check the return value of pthread_create() in udp_server_thread() + and tcp_server_thread() to ensure that a new answer thread has actually + been created and free resources if not. + +2004-01-04 Paul Rombouts + + * src/helpers.c,src/cache.c,src/conff.c,src/status.c + Stop writing to control socket after an error has been detected. + +2004-01-03 Paul Rombouts + + * src/pdnsd-ctl/pdnsd-ctl.c + Tried to make the error messages of pdnsd-ctl more helpful. + The complete usage description is now only printed if the 'help' command + is used. For problems with other commands a much shorter message is generated + specific for that command. + +2004-01-02 Paul Rombouts + + * src/helpers.h + Changed the definition of rhnlen(). For valid data this will make no difference, + but it may change the behaviour of pdnsd in certain error situations. + +2004-01-02 Paul Rombouts + + * src/dns.c + Optimized compress_name() some more. + +2004-01-02 Paul Rombouts + + * src/dns_answer.c + Additional code cleanup in compose_answer(). + +2004-01-01 Paul Rombouts + + * doc/pdnsd-ctl.8 + Updated the pdnsd-ctl man page. + +2003-12-31 Paul Rombouts + + * src/pdnsd-ctl/pdnsd-ctl.c + Cleaned up some code. + +2003-12-31 Paul Rombouts + + * src/status.c,src/conff.h,src/conff.c + Some further code cleanup in status.c. + Labels for server sections are no longer limited to 32 chars, + but can have arbitrary length. The string that is used to specify + new DNS-addresses with the "pdnsd-ctl server" command can now also + have arbitrary length. + +2003-12-30 Paul Rombouts + + * doc/html/doc.html + Added information about CNAME and MX resource records, that were + previously undocumented. + +2003-12-26 Paul Rombouts + + * src/dns_query.c + Removed the function p_dns_resolve_from(). This function was essentially + a call to p_recursive_query() with a dummy nocache argument. + p_recursive_query() can now be called with nocache=NULL instead. + +2003-12-26 Paul Rombouts + + * src/dns_query.c + Using a variable length array instead of an malloced buffer to hold the struct pollfd array + in p_recursive_query(). This has the potential for causing portability problems, but I + think that's unlikely because almost all the major C compilers I work with support variable + length arrays nowadays. + +2003-10-18 Paul Rombouts + + * src/helpers.h,src/helpers.c + Fixed a mistake that caused a compile error when using the --with-random-device + configuration option. + Thanks to Daniel Black for reporting this bug. + +2003-10-02 Paul Rombouts + + * conf-lex.l.in,src/conf-parse.y,src/conff.h,src/conff.c,src/dns_query.c + Made the "delegation_only" feature configurable. + +2003-09-25 Paul Rombouts + + * src/helpers.c,src/helpers.h + Added alternative implementations of strdup, strndup, stpcpy, getline and asprintf + in an effort to make the code more portable. + +2003-09-22 Paul Rombouts + + * src/helpers.c,src/conf-parse.y + Made some changes to the parser of the configuration file so that domain names + missing a dot at the end will be tolerated. + +2003-09-21 Paul Rombouts + + * src/dns_query.c + Implemented a first version of the "delegation-only" feature. + It has been "hard-coded" to work for "com" and "net" zones, + and is not yet configurable. + +2003-09-21 Paul Rombouts + + * src/dns.c + Rewrote domain_match(). Also changed the way it is used. + I believe it has a cleaner semantics now. + +2003-09-21 Paul Rombouts + + * src/dns_query.c + Changed the order of the arguments of p_exec_query() and p_recursive_query() + to make it more consistent with the other functions. + +2003-09-18 Paul Rombouts + + * src/dns_answer.c + Reordered the code in process_query() so that a buffer for an error response is + allocated only when it is actually needed. + +2003-09-17 Paul Rombouts + + * src/cache.c + Added parentheses to correct mistaken operator precedence assumption in cache.c. + !cent->flags&DF_NEGATIVE is parsed as (!(cent->flags))&DF_NEGATIVE but I think + what Thomas Moestl must have intended was !((cent->flags)&DF_NEGATIVE). + +2003-09-12 Paul Rombouts + + * src/dns_query.c + Fixed a mistake which caused the effect of the proxy_only option to be reversed. + Thanks to Andrew M. Bishop for reporting this bug. + +2003-09-11 Paul Rombouts + + * src/helpers.c + Rewrote str2rhn() and rhn2str(). + +2003-09-10 Paul Rombouts + + * src/dns.c + Rewrote read_hosts(), the function that reads /etc/hosts-style input. + I believe the parsing algorithm is more robust now. + +2003-09-09 Paul Rombouts + + * src/status.c,src/pdnsd-ctl/pdnsd-ctl.c + Fixed a bug (my fault) that caused improper passing on of flags for the + pdnsd-ctl source command. + Also reordered some of the code, so that data is validated after all of it + has been read from the control socket. This should prevent a "broken pipe" + error message if data validation fails. + Also fixed the reporting of success or failure of the pdnsd-ctl "neg" command. + +2003-09-08 Paul Rombouts + + * src/list.c + Rewrote da_grow1() and da_resize() so that they automatically allocate an array + if given a NULL argument. This makes the use of da_create() redundant in most cases. + +2003-09-08 Paul Rombouts + + * src/conf-parse.y,src/servers.c + At the suggestion of Greg Norris, I changed the code to allow server sections in the + configuration file that don't specify any IP addresses. Such a section will remain + inactive until one or more IP addresses are assigned with the control utility pdnsd-ctl. + +2003-09-04 Paul Rombouts + + * src/dns_answer.c,src/dns_query.c + Oops: in my zeal to declare variables in the smallest possible scope, I ended up + using a pointer to a struct that was out of scope. My understanding of compilers tells me + it should work out OK in practice, but it is definitely a no-no. + Used a union declared in a larger scope instead (which is ugly in another way, + but equally efficient). + Also removed a section of redundant code in udp_server_thread(). + +2003-09-01 Paul Rombouts + + * src/dns_query.c + Corrected the iteration range of a for loop in p_dns_cached_resolve(), which would + otherwise cause an array to be indexed out of bounds in the function set_flags_ttl(). + +2003-08-31 Paul Rombouts + + * src/dns_answer.c + Added cleanup handlers for freeing the resources passed on to udp_answer_thread() and + tcp_answer_thread(). This should ensure the resources are freed even if the threads get + canceled. + +2003-08-30 Paul Rombouts + + * src/cache.c + Revised large portions of code in src/cache.c, used for adding and deleting entries in + the cache. In particular, I rewrote purge_cache(), which I believe was incorrect. + I wouldn't be surprised if this was the cause of the crashed (defunct) threads that some + people were reporting. + Also fixed some memory leaks. + +2003-08-28 Paul Rombouts + + * src/cache.c + Eliminated the overhead of allocation debugging in the case that ALLOC_DEBUG is not defined. + +2003-08-24 Paul Rombouts + + * src/conf-parse.y + No longer allow certain settings of the query_method option in the configuration file + if pdnsd is not compiled with the necessary support. + Thanks to Nikolaus Rath for reporting the bug. + +2003-08-23 Paul Rombouts + + * src/netdev.c + Fixed a bug in is_local_addr() where the result of fgetc(f) is restricted to type char + before being compared to EOF, which can result in the comparison always being false. + Thanks to Gerhard Tonn for reporting the bug. + +2003-07-28 Paul Rombouts + + * doc/html/index.html,doc/html/doc.html,doc/html/dl.html,doc/pdnsd-ctl.8,contrib/README + Revised the documentation. + +2003-07-21 Paul Rombouts + + * src/main.c,src/status.c,src/icmp.c + Setting stat_pipe=0 after opening or binding the control socket fails. + This should prevent further use of the control socket if a problem with + it has been detected previously. + Also properly initialized the global variable int ping_isocket in src/icmp.c + +2003-07-13 Paul Rombouts + + * src/main.c + Polished the code in main(). + +2003-07-04 Paul Rombouts + + * src/helpers.c,src/dns_answer.c,src/dns_query.c + Eliminated the use of inet_ntoa() in favor of the more modern inet_ntop(). + inet_ntop() makes more sense in threaded code and is also recommended in + the glibc info pages. + +2003-07-03 Paul Rombouts + + * src/dns_query.c + Fixed an allocation size error (not mine) in p_exec_query(). + The erroneous size is almost always larger than necessary, so in practice this bug + just wastes memory. But there is also a possibility that the allocated buffer is too + small, which would mean trouble. + Also fixed two memory leaks on some of the error paths in p_exec_query(). + +2003-06-28 Paul Rombouts + + * acconfig.h,configure.in,src/thread.h + Extended the configuration option --with-thread-lib. + Configuring with --with-thread-lib=linuxthreads2 will cause the alternative + definition of THREAD_SIGINIT suggested by Thomas Moestl to be used. + +2003-06-27 Paul Rombouts + + * src/consts.h,src/consts.c,src/conff.c,src/conf-parse.y,src/dns_answer.c + Added two new configuration options for policies of inclusion/exclusion lists. + The new policies options are "simple_only" and "fqdn_only". + This allows me to control to which name servers pdnsd will direct queries for + simple host names. + I also polished the code a bit in report_conf_stat(), used for reporting the current configuration. + +2003-06-20 Paul Rombouts + + * acconfig.h,configure.in,src/thread.h,src/thread.c + Added a configuration option --with-thread-lib=nptl. + This causes the macro THREAD_SIGINIT to be defined as empty in src/thread.h, + and thread_sig() in src/thread.c is never used. + +2003-06-11 Paul Rombouts + + * src/thread.h + Undid the change to the definition of THREAD_SIGINIT suggested to me by + Thomas Moestl, after receiving a report of a problem with this change + from someone running SuSE 7.0. + +2003-06-06 Paul Rombouts + + * src/dns_query.c: + Discovered that I failed to preserve the semantics of Thomas Moestl's code + when I rewrote a section of code in use_server(). Fixed. + +2003-05-19 Paul Rombouts + + * src/cache.c,src/conf-lex.l.in,src/conf-parse.y,src/conff.h,src/dns_answer.c,src/dns_query.c,src/servers.c: + Merged fixes contained in patch file sent to me by Thomas Moestl with my own version. + Changing the version to 1.1.8b1 as suggested by the patch file. + +2003-02-26 Paul Rombouts + + * pdnsd-1.1.7a-par.diff: + Made one big patch file from all the changes I made up till now. + Wrote a description of the changes in a file README.par + Posted patch file on the web so others can use it. + +2003-02-24 Paul Rombouts + + * src/cache.c + Changed the code that writes the cache to disk. + Data is now written strictly sequentially, eliminating the need for fseek(). + This seems to have successfully solved the problem I had with corrupt cache files. + +2002-05-27 Paul Rombouts + + * ChangeLog: + Started experimenting with the source code. + Made many changes between 2002-05-27 and 2002-07-13. + Too lazy to maintain the ChangeLog. + +2002-01-06 Thomas Moestl + + * version: Call it 1.1.7. + +2002-01-04 Thomas Moestl + + * src/dns_answer.c, src/dns_query.c: + Comment and debug message fixes, more assertions. + +2002-01-03 Thomas Moestl + + * src/dns.c, src/dns_answer.c, src/dns_query.c: + More harmless fixes, correct some comments and debug messages, add more + assertions. + + * NEWS, version: 1.1.7p2, correct NEWS entry. + + * src/helpers.c: + Make sure the calling thread of pdnsd_exit() terminates immediately. + +2002-01-02 Thomas Moestl + + * src/dns_answer.c, src/helpers.c, src/icmp.c: + Fix a few more harmless bugs, more paranoia. + + * src/status.c: Fix yet more, probably harmless, problems. + +2002-01-01 Thomas Moestl + + * src/dns.h, src/dns_answer.c, src/dns_query.c: + Fix a few more possible buffer size problems, and add a bunch of + assertions as last lines of defence. + +2001-12-30 Thomas Moestl + + * src/dns.c: Build fix (include error.h). + + * NEWS, version: Call it 1.1.7p1, and add a NEWS entry. + + * TODO: Reduce TODO to what actually is still needed. + + * src/dns.c, src/error.h, src/helpers.c: + Add a bunch of robustness PDNSD_ASSERT()'s. + + * src/dns_query.c: + Fix a bug which may possibly be remotely exploitable to gain access as + the user pdnsd runs as. + This was caused by a dumb single-character mistake :( + + * doc/Makefile.am, configure.in: + Avoid confusing automake 1.5 by not putting a comment into a make rule. + Fix CONFDIR passing. + + Submitted by: GoTaR + + * src/pdnsd-ctl/pdnsd-ctl.c: + Avoid crashing when the buffer contents received using the status command + are not terminated. + +2001-10-14 Thomas Moestl + + * src/rc/SuSE/pdnsd.in, THANKS: + Fix the stop case for the SuSE rc script: killproc requires the full + path of the binary as argument (reported by Bernhard Pelz). + +2001-09-23 Thomas Moestl + + * configure.in: + Revamp the OS autodetect test. OpenBSD and (hopefully) NetBSD are no longer + unsupported. + + * src/helpers.c, THANKS: + Do not try to use arc4random when compiling for NetBSD (submitted by + Thomas Stromberg). + +2001-09-10 Thomas Moestl + + * COPYING.BSD: s/REGENTS/AUTHOR/ in one place. + + * src/cache.c: + It is possible no record of the requested type is present after calling + cr_add_cent_rr_int() (when the record was marked as being local), so + check before dereferencing the pointer to the respective rrset. + Leave the record unmodified when cr_check_add() returns 0.x + +2001-07-26 Thomas Moestl + + * src/rc/RedHat/pdnsd.in: + Add a workaround for @sysconfdir@ substitutions containing ${prefix}. + Spotted by Robert Linden. + +2001-07-04 Thomas Moestl + + * src/rc/RedHat/pdnsd.in: + Add a condrestart handler to the Red Hat rc script, and do some general + cleanup. Contributed by Christian Engstler. + +2001-07-02 Thomas Moestl + + * src/error.h: + Attempt to detect a gcc that cannot yet handle ANSI variadic macros, + and work around this by using the old GCC-style variant. + + * src/conff.c: + Remove a + at the start of a line that got in when merging a diff by + hand. + + * src/servers.c: waitpid() returns a pid_t. + + * src/dns.c: + It's sizeof, not sizof. This should unbreak the IPv6 build. Also silence + some warnings with appropriate casts. + + * NEWS, version: Call it 1.1.6, and add a NEWS entry. + +2001-07-01 Thomas Moestl + + * src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns_query.c, THANKS, version, AUTHORS: + Added a modified version of Andreas Steinmetz's code for + query_port_start and query_port_range, and added him to AUTHORS and + THANKS. + +2001-06-23 Thomas Moestl + + * src/cache.c: + Fix a bogon: deleted would not be reset correctly in the first + purge_cache loop, which could cause pdnsd to loop forever when a + negative record was after a deleted rr. + +2001-06-21 Thomas Moestl + + * src/list.h: + Add (currently unused) list macros that are going to be used in future + code. + + * src/cache.c: + Fix a bogon in the rw lock code: we need to wake up a writer if there + are no readers. The old code was a leftover from a time when + SUSP_THRESH was just r_pend * x. + Fix a typo. + +2001-06-13 Thomas Moestl + + * AUTHORS: Add mention of FreeBSD code to AUTHORS. + + * src/netdev.c: + Add SIZEOF_ADDR_IFREQ (taken from FreeBSD: _SIZEOF_ADDR_IFREQ, net/if.h + rev. 1.58.2.1) and add an appropriate copyright notice. + The reason for this is that other BSDs don't have it, and we are not + supposed to use underscored macros in portable software. + +2001-06-12 Thomas Moestl + + * src/icmp.c: Fix double #inclusion of . + Noticed by Sebastian Stark. + +2001-06-08 Thomas Moestl + + * src/dns_query.c, THANKS: + Allow underscores in the query names reported back, as the comment next + to the decompress_name call already indicated (but the call gave NULL + as the uscore parameter, which disables underscores normally). + Add Michael Ströder, who spotted this, to THANKS. + +2001-06-06 Thomas Moestl + + * src/servers.c, THANKS: + Fix a bug discovered by Stefan Erhardt (and add him to THANKS): the + return value of waitpid was misinterpreted. + +2001-06-04 Thomas Moestl + + * Makefile.am, file-list.base.in, version: + Bump version to 1.1.6p1; wire up COPYING.BSD so that it gets included + in RPM's and tarballs. + + * COPYING.BSD: + Add the BSD-Style copyright notice so that it can be included in binary + distributions. + +2001-06-03 Thomas Moestl + + * src/dns.c, src/dns_answer.c, src/dns_query.c, src/helpers.c, src/status.c, NEWS, version: + Bump version to 1.1.5, and add a NEWS entry for this release. + + Miscellaneous cleanups, mainly in the status.c code; fix a bug that + could cause heap corruption (rhncpy always clobbered the whole buffer, + but only the needed space was reserved in add_rr). This should solve + the crashes some people were seeing (this bug is not an exploitable + security hole as far as I know; the respective buffer is on the heap, + as mentioned). + + * src/error.c: + Paranoia: do not use the argument to crash_msg as a format string + (crash_msg is only used with constant strings, though). + +2001-06-02 Thomas Moestl + + * src/dns.c, src/dns.h, src/dns_answer.c, src/dns_query.c, src/error.h, src/hash.c, src/helpers.c: + Correct underscore handling for SRV records, and a few comment fixes. + + * src/cache.c, src/conff.c, src/dns_query.c, src/error.h, src/helpers.h, src/status.c: + Numerous non-critical argument fixes for printf-like functions. + + * src/dns.c: Remove superfluous \n's. + + * src/conf-parse.y, src/dns_answer.c, src/status.c: + Correct some DEBUG_MSG nits, and fix two format string bugs. One of + them could allow users that are allowed to use pdnsd-ctl with the + server (when the status socket is enabled) to gain the privileges of + the user that runs (the run_as user or the user that started pdnsd on + Linux when strict_setuid is set to off) pdnsd. The status socket is + disabled by default, and if it is enabled, it's default permissions + are quite restrictive, so this isn't a problem for most. + +2001-05-30 Thomas Moestl + + * src/status.c: + Make the status permissions actually work (missed last time). + + * src/dns_answer.c, src/main.c, src/status.c, src/status.h: + Move the status socket initialization to a place where it gets executed + before any threads are started; this way, we can use umask to set the + permissions, and avoid a (in this case harmless, but anyway) race + condition. + While being there, remove obsoleted comments and places referring to + the now-socket as fifo. + +2001-05-29 Thomas Moestl + + * src/cache.c: + Replace a misuse of CF_LOCAL with DF_LOCAL. This had no effect, because + the values are the same. + +2001-05-22 Thomas Moestl + + * src/hash.c, src/helpers.c, THANKS, acconfig.h, configure.in: + Add an option for allowing underscores (_) in domain names. This + violates the RFC's if enabled (which it isn't by default). + Thanks to Eelco Vriezekolk for an initial patch. + + While being there, clean up configure.in and acconfig.c a bit. + + * src/helpers.c, src/status.c: + Add a few comments about security implications. + + * src/cache.c, src/dns_answer.c, src/dns_query.c, src/helpers.c: + Change some occurences of strcpy to strncpy. Again, no risk here, the + buffer lentgh was carefully chosen, and while the data was partially of + remote origin, it was carefully validated before entering the cache (and + thus having a chance of being used by us). + 3 occurences remain: 2 in cache.c, where we allocate a sufficient amount + of memory before (mimicking the non-portable strdup) and one where + we copy a constant and which is obviously correct. + + * src/dns.c: + Change two occurences of strcat to strncat. Again, no risk here, the + buffer lentgh was carefully chosen, the data was validated and supplied + by the starting user. + + * src/dns.c: + Change a sprintf to a snprintf and enlarge a buffer a bit. This is pure + paranoia (alrhough makes code review easier for others), because a.) the + lengths were carefully chosen so that no overrun could occur and + b.) this was locally supplied data. + +2001-05-21 Thomas Moestl + + * src/rc/RedHat/Makefile.am: + Add a missing semicolon in the RedHat rc Makefile.am (discovered by + Christian Engstler). + +2001-05-19 Thomas Moestl + + * HACKING: Remove the mostly outdated HACKING file. + + * src/debug.c: + Catch a corner case in the allocation debug helpers: realloc() with a + size of 0 is effectively a free operation. To my knowledge, this is + not done in the pdnsd sources, however. + + * src/test/test.sh: + Use the correct error function, forgotten in last commit. + + * src/test/clnt-test.sh, src/test/srv-test.sh, src/test/test.sh: + Misc small improvements in the regression test scripts, mostly + adding configuration variables and common error handlers. + Comment a little on the tests that are done in clnt-test.sh + + * src/rr_types.c: Fix a typo in a comment. + + * src/cache.c, src/debug.c, src/dns_answer.c, src/dns_query.c, src/error.h, src/hash.c, src/list.c, src/main.c, src/status.c, src/thread.c, src/thread.h: + New ANSI variadic debug macros (finally), which print a timestamp and + a thread ID now for easier debugging with many parallel queries. + It should be considered to make those inline functions instead. However, + we have the advantage that we use printf in place here and benefit + from parameter checking without specifying obscure function attributes. + + * src/rc/SuSE/.cvsignore, src/test/.cvsignore, src/rc/.cvsignore, src/rc/Debian/.cvsignore, src/rc/RedHat/.cvsignore, contrib/.cvsignore, doc/.cvsignore, src/.cvsignore, src/pdnsd-ctl/.cvsignore, .cvsignore: + Brush up the rotten (pre-autoconf!) .cvsignore files and add some where + necessary. + +2001-05-17 Thomas Moestl + + * src/rc/RedHat/Makefile.am, src/rc/RedHat/pdnsd.in, configure.in, pdnsd.spec.in: + Red Hat rc script and RPM improvements by Christian Engstler. + +2001-05-12 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl.c: + Fix a place missed when converting rr_info. + + * version: It's 1.1.4, finally. + + * src/rr_types.c, version: + Change some class values in the rr type structure to better values. + Bump beta version. + +2001-05-10 Thomas Moestl + + * src/cache.c, src/dns_answer.c, src/dns_query.c: + Fix a signedness bug that could cause erraneous 0 ttls to be returned. + Add some debug messages, and do some minor fixups. + +2001-05-09 Thomas Moestl + + * src/cache.c, src/rr_types.c: + Fix some bugs in the new conflict resolution code and make it more + complete. + + * src/cache.c, version: + Add conflict resolution code. This needs a bit more checking, and + the tables might still need to be tweaked. + Bump version. + + * src/pdnsd-ctl/pdnsd-ctl.c, src/Makefile.am, src/cache.c, src/cache.h, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/consts.c, src/consts.h, src/debug.c, src/dns.c, src/dns_answer.c, src/dns_answer.h, src/dns_query.c, src/dns_query.h, src/error.c, src/error.h, src/hash.c, src/hash.h, src/helpers.c, src/helpers.h, src/icmp.c, src/icmp.h, src/list.c, src/main.c, src/netdev.c, src/netdev.h, src/rr_types.c, src/rr_types.h, src/servers.c, src/servers.h, src/status.c, src/status.h, src/thread.c, src/thread.h, configure.in, version: + Remove the old infrastructure that theoretically could have allowed for + multiple cache subsystems. This ability was never used, and if it should, + the caching should probably be split into two layers, a higher level + common one and the actual caching backends. + src/cacheing/cache.c and src/cacheing/native/*.[ch] were repo-copied to + src/. + Substitute "conf.h" with for includes. + Purge records a little more often (when adding records, and when + retrieving from the cache). Handle cache_size properly when using + purge_cent. + Introduce some infrastructure in rr_types.[ch] for a record conflict + checker which is to be introduced shortly to enforce cache consistency + even in the purge_cache=off case. + +2001-05-04 Thomas Moestl + + * src/rc/RedHat/pdnsd.in, src/rc/SuSE/pdnsd.in, src/rc/Debian/pdnsd.in: + Revert the last commit. It breaks the rc scripts by spamming them with + make style variable expansions. + + * src/rc/SuSE/pdnsd.in, src/rc/RedHat/pdnsd.in, src/rc/Debian/pdnsd.in, AUTHORS, THANKS: + Fix a rc script bug spotted by Frank Elsner, and add him to AUTHORS and + THANKS. + +2001-05-01 Thomas Moestl + + * version: Bump version to 1.1.4p2. + + * src/pdnsd-ctl/pdnsd-ctl.c, src/status.c: + Fix some bogons and remove some unneeded code in the pdnsd-ctl + interface. + Fix spelling and line length bugs. + +2001-04-30 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl.c, src/conf-parse.y, src/status.c: + Some corrections for the authrec config file and the pdnsd-ctl noauth + support. + + * src/pdnsd-ctl/pdnsd-ctl.c: + Fix wrong argv index (using getopt changed the indices). + + * src/pdnsd-ctl/pdnsd-ctl.c, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns.c, src/dns.h, src/dns_query.c, src/status.c, THANKS, version, AUTHORS: + Accumulated changes that should go in before 1.1.4: + - merge Andrew M. Bishop's patch that adds a server label option + - make local records authoritative for the domain by default, and add + the authrec option to change this + - add the auth keyword to the pdnsd-ctl source option to support that + - fix a bug in the conf-parse.y grammar causing a shift/reduce conflict + - sync up AUTHORS and THANKS: add Andrew M. Bishop, Kevin A. Burton and + Michael Steinl + - bump version to 1.1.4p1 + + * src/conff.c, src/main.c: + Fix two small bugs: the wrong element of argv was used for the pidfile + option, which could cause pdnsd to segfault, and C_INCLUDED was always + used in slist_add, regardless of the tp parameter. + + * src/helpers.c: + Fix a bogon discovered by Michael Steiner: the fread() return value + was tested against bytes, not the number of items. + + * src/hash.c, src/hash.h, src/cache.c: + purge_cache used to walk over the cache quite inefficiently when it was + called from add_cache. Add a lazy mode for purge_cache which uses the + rrset_l to be efficient in this special case. + Add some #ifdef'ed-out-by-default code to debug the hash function. + +2001-04-12 Thomas Moestl + + * NEWS: Add NEWS entry for 1.1.3. + + * src/dns.c, src/helpers.c, src/icmp.c, contrib/Makefile.am, contrib/README, version: + IPv6, ICMP and build fixes. It's 1.1.3 now! + + * src/debug.c, src/debug.h: Add the new debug support files. + + * src/test/clnt-test.sh, src/cache.c, src/cache.h, src/error.h, src/list.c, src/list.h, src/main.c, src/status.c, src/status.h, src/Makefile.am, src/conf-parse.y, src/conff.h, src/dns.c, src/dns_answer.c, src/dns_query.c: + Add allocation debug support. Some small cleanups before the upcoming + 1.1.3 release. + + * src/dns_query.h, src/helpers.c, src/list.c, src/conff.c, src/dns.c, src/dns_answer.c, src/dns_query.c: + Lots of small bugfixes, cleanups, style and spelling fixes. + + * src/test/clnt-test.sh: Fix nc arguments. + + * src/test/clnt-test.sh, src/test/srv-test.sh, src/test/test.sh: + Add regression test scripts. + +2001-04-11 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl.c, src/cache.c, src/servers.c, src/dns_answer.c, src/helpers.c, src/helpers.h, src/icmp.c, src/main.c: + Further cleanups and bug, style and spelling fixes. + + * configure.in: Use -g again in the CFLAGS for a while. + + * version: Beta version bump. + + * src/rc/SuSE/pdnsd.in: + killproc does not seem to take the full path, but only the process name + (which is what one would expect). + + * src/hash.c, src/netdev.c, src/rr_types.c, src/status.c, src/conf-parse.y, src/conff.c, src/helpers.c: + Misc. smaller fixes, and fixes on the new features. Also clean up style + and spelling in some places. + + * src/dns_answer.c: + Bring the glibc pthread_cleanup_push/pthread_cleanup_pop return bug + workaround into the main tree. + Without this, a return between those two macros would cause pdnsd + to crash on system using a glibc between 2.1.2 and 2.2.2 (and possibly + others). This could e.g. be cause by a TCP connect() port scan. + +2001-04-10 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl.c: + Minor fixes, direct error messages to stderr. + + * src/list.c, src/list.h: Add the new list implementations. + + * src/cache.c, src/cache.h, src/conf-parse.y, src/dns.c, src/dns_answer.c, src/dns_query.c, src/helpers.c, src/helpers.h, src/conf-lex.l.in: + Introduce rhnlen and rhncpy and make use of it instead of kluged-up + strcpy/strlen in the appropriate places. + Check that incoming names contain only legal characters in + decompress_name, return RC_FORMAT otherwise (this would result in + wrong handling only, but not in a security hole). + Reorganzie compose_answer and make it more correct for multiple + questions. Get rid of the algorithm that tries to add a higher + level name server; this might be readded in another place somewhen. + Use some more da_* instead of hand-built lists. + Some style cleanups. + + * src/rc/RedHat/Makefile.am: + Add K45pdnsd links for rc6.d (reboot) and rc0.d (halt) following a + suggestion by Stas Sergeev. + +2001-04-06 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl.c, src/cache.h, src/error.h, src/helpers.c, src/helpers.h, src/main.c, src/servers.c, src/status.c, src/conf-parse.y, src/conff.c, src/conff.h, src/dns.c, src/dns.h, src/dns_answer.c, src/dns_query.c, src/Makefile.am, version: + Bump alpha version; introduce a generic dynamic array type and make use + of it to ged rid of some ugly casts and redundant code. + Minor fixes. + + * src/icmp.h, src/ipvers.h, src/conff.h, src/consts.h, src/dns.h, src/dns_answer.h, src/dns_query.h, src/helpers.h: + Use macros without an underscore as first character to protect the + headers. Underscores are reserved and should not be used in the + application name space. + + * src/error.h: Add PDNSD_ASSERT, change style a little. + +2001-04-03 Thomas Moestl + + * src/hash.c, src/netdev.c, src/servers.c, src/helpers.c, src/icmp.c, src/main.c: + Another slew of small bugfixes, minor updates and small fixes. + + * src/rr_types.c, src/consts.c: + Update rr_types.c copyright date, consts.c should have a rcsid string. + + * src/rr_types.c: cvs add rr_types.c. + + * src/dns.h, src/helpers.h, src/ipvers.h, src/rr_types.h, src/status.h, src/conf-parse.y, src/conff.h: + cvs add rr_types.h that got missed before, update copyright dates, + remove some old config cruft, some minor fixups. + + * src/conff.c, src/consts.c, src/dns_answer.c, src/error.c, src/conf-lex.l.in, src/conf-parse.y: + Update copyright dates, fix some minor bugs. Update copyright dates. + cvs add missed consts.c. + +2001-03-28 Thomas Moestl + + * src/cache.c, src/hash.c, src/error.c, src/servers.c, src/dns_answer.c, version: + Bump version to 1.1.3p4 + Fix some non-critical locking issues (none of them could be fatal). + Adjust copyright dates. + + * src/hash.c: Make the hash compare case insensitive. + +2001-03-25 Thomas Moestl + + * contrib/Makefile.am: Add Id tag to Makefile.am + + * src/cache.c, src/dns_answer.c, src/icmp.c: + Some more type fixes overlooked in last commit. + + * src/conf-parse.y, src/conff.h, src/dns.h, src/dns_answer.c, src/dns_query.c, src/icmp.c: + More type cleanups. Use time_t for time specifications throughout, and + make lengths singed longs. Cast cleanup in icmp.c to fix alpha + unalinged access faults. + + * contrib/dhcp2pdnsd, contrib/pdnsd_dhcp.pl, contrib/save_ram.pl, contrib/Makefile.am, contrib/README, configure.in, version, Makefile.am: + It's 1.1.3p3 now. + Change the contrib infrastructure: there is a Makfile.am in contrib/ + now. Rename Marko Stolle's pdnsd_update.pl to pdnsd_dhcp.pl and bring + it up to date (adding the rc script and save_ram.pl). + + * src/helpers.c, src/dns.c, src/dns_query.c, AUTHORS, THANKS: + Bring in Bjoern Fischer's changes to make pdnsd conserve the case of + cached names, and add him to AUTHORS and THANKS. + + * configure.in: The gdbm backend is discontinued. + + * src/cache.c, src/hash.c: + Cleanup and small bugfixes of the cache code (esp. locking). + + * AUTHORS, THANKS, file-list.base.in, pdnsd.spec.in: + SuSE fixes by Christian Engstler. + Add him to AUTHORS, THANKS. + +2001-03-14 Thomas Moestl + + * src/dns_query.c: + Fix a bug that could cause servers that were not used in the first + parallel query not to be used at all (failure would be returned + instead). + +2001-03-13 Thomas Moestl + + * src/icmp.c: Add define for ip_p equivalent on Linux. + + * src/pdnsd-ctl/pdnsd-ctl.c, src/cache.c, src/dns_query.c, src/icmp.c, src/status.c, src/conf-parse.y, src/dns_answer.c, version: + Bump alpha version, more alignment fixes. All casts should be correct + now. + +2001-03-12 Thomas Moestl + + * src/dns_answer.c, src/dns_query.c, AUTHORS, THANKS: + Add the alpha fixes by P.J. Bostley, and add him to THANKS and AUTHORS. + +2001-03-10 Thomas Moestl + + * src/dns.h, src/helpers.h: + Remove prototype for removed function strtolower. + Use unit16_t and uint32_t instead of unsinged short/long for dns + protocol structures. + +2001-02-25 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl.c, src/status.c, src/conf-lex.l.in, src/conf-parse.y, AUTHORS, Makefile.am, version: + Add MX and CNAME for rr sections in the config file and MX setting + for pdnsd-ctl. + Typo fixes. + + * src/netdev.c: Two more fixes. + + * src/pdnsd-ctl/pdnsd-ctl.c, src/cache.c, src/dns.c, src/main.c: + More small robustness fixes. + + * src/pdnsd-ctl/pdnsd-ctl.c, src/netdev.c, src/status.c, src/status.h, src/conf-parse.y, src/helpers.c, src/main.c, configure.in, version, Makefile.am, NEWS: + A batch of robustness fixes. Move the status socket to the cache + directory. Various cleanups. + It's 1.3 now (hopefully to be released soon). + +2001-02-21 Thomas Moestl + + * src/main.c, src/conf-lex.l.in: + Fix breakage of the -mtu option and the query_method option (the parser + would not recognize constants that contained underscores). + +2001-02-20 Thomas Moestl + + * contrib/README, contrib/pdnsd_dhcp.pl, AUTHORS, Makefile.am, THANKS, file-list.base.in: + Add Marko Stolle's pdnsd_update.pl DHCP update script, add him to THANKS, + and bring a contrib/ directory in place. + +2001-02-15 Thomas Moestl + + * src/dns_answer.c, configure.in, version: + Some minor build & misc fixes. Bump version to 1.1.2a and release a + version with the spec file fixes to get proper Red Hat RPM's. + +2001-02-09 Thomas Moestl + + * NEWS: Bring NEWS up to date. + + * src/icmp.c: Do not close the socket on error. + + * pdnsd.spec.in: Add spec file fixes for man pages by Sourav K. Mandal + +2001-02-07 Thomas Moestl + + * version: It is now 1.1.2. + + * src/dns_query.c, src/main.c, Makefile.am, THANKS: + Fix a too strict length checking that could cause SERVFAIL to be returned + when the server returned NXDOMAIN. Add Markus Storm to THANKS (he has + reported this bug and supplied helpful information). + Minor tweaking in main.c. + Remove emptying of GZIP_ENV in Makefile.am (this normally contains --best). + +2001-01-27 Thomas Moestl + + * AUTHORS, THANKS: + Add Michael Wiedmann to AUTHORS and THANKS for his pdnsd-ctl.8 man page. + + * doc/Makefile.am, doc/pdnsd-ctl.8, configure.in, Makefile.am: + Add the pdnsd-ctl man page contributed by Michael Wiedmann. For this to + build in a correct way, add doc/Makefile.am and move all doc and + pdnsd.conf.sample related stuff in there. + +2001-01-25 Thomas Moestl + + * src/main.c: Removed unneeded for the non-O_NOFOLLOW case. + +2001-01-24 Thomas Moestl + + * src/main.c: + Add a fchown and a fchmod to the new non-O_NOFOLLOW case (not yet used). + + * src/conf-parse.y, src/main.c, src/status.c: Misc small fixups. + + * version: It's called 1.1.1 now. + + * src/pdnsd-ctl/pdnsd-ctl.c, src/status.c, src/main.c: + Fix command line parsing. Add code to securely create pid files under + OSs that do not support the O_NOFOLLOW flag (those OSs are not supported + yet, though). + Fix a possible race condition in socket creation/chmod. We now create + a directory in /tmp (or whatever TEMPDIR was set) to hold the socket. + + * src/dns.c, src/dns_answer.c, src/icmp.c, src/main.c, src/status.c: + Another slew of copyright notice upgrades. + + * version, configure.in: + Bump beta revision, fix typo (missing $) in configure.in + + * src/dns.c, src/dns_answer.c, src/status.c: + Silence BSD compile time warnings. + + * configure.in: + Cleanup, add autoconf code for building pdnsd on FreeBSD-CURRENT with the + new additionally-linked libc_r. + +2001-01-16 Thomas Moestl + + * src/dns_answer.c, src/icmp.c, version: + Bump beta revision, fix a comment. Also, generate ping id's using pdnsd's + random wrappers instead of using rand() for paranoia. + +2001-01-15 Thomas Moestl + + * src/helpers.c, configure.in: Improve wording. + + * src/helpers.c: Update copyright year (forgotten in last commit). + + * src/dns_answer.c, src/helpers.c, src/main.c, acconfig.h, configure.in, version: + Bump versions. Small fixes (move socket intitializations from + udp_server_thread to init_udp_sockets to prevent warning when startup + takes long. + Make arc4random an option for a query id RNG and make it the default + on FreeBSD. + +2000-12-07 Thomas Moestl + + * src/conf-parse.y, src/main.c, version: + We are at 1.1.1p1. Removed the exec-uptest security warning printef if no + explicit user is given in the strict_setuid case (it is not needed there, + and confuses users). + +2000-11-28 Thomas Moestl + + * src/cache.c, src/helpers.c: + Converted cache locks to use condition vars and have lock contention + prevention. Added comments where not converted. + +2000-11-25 Thomas Moestl + + * AUTHORS, THANKS, pdnsd.spec.in: + Added spec file patches by Bernd Leibing and added him to AUTHORS and + THANKS. + +2000-11-21 Thomas Moestl + + * src/rc/SuSE/Makefile.am: Fixed a hopefully last SuSE rpm build bug. + + * src/rc/SuSE/Makefile.am: + Another one: allow rc.conf manipulation to fail for a clean + rpm build (SuSE only). + + * file-list.base.in: + Last-minute fix: correct filelist for rpm build to reflect the new name + for the sample configuration. + + * version: It's 1.1.0 now. + +2000-11-18 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl.c, src/cache.c, src/dns_query.c, version: + Fixed a condition where the cache code did not give up a lock. + Made the udp code use connect(). + Some small changes. + +2000-11-16 Thomas Moestl + + * version: Calling it 1.1.0b3. + +2000-11-15 Thomas Moestl + + * src/test/Makefile.am, src/pdnsd-ctl/Makefile.am, src/cache.c, src/Makefile.am, src/dns_answer.c, src/error.h, src/icmp.c, src/icmp.h, src/main.c, src/netdev.c, src/servers.c, src/thread.c, Makefile.am, configure.in, version: + Enabled new rr support by default (some resolvers don't seem to like not + supported answers - not our bug, but well). + Made some globals volatile to avoid being bitten by optimisations. + +2000-11-12 Thomas Moestl + + * TODO, version: Called it the first beta. + +2000-11-11 Thomas Moestl + + * src/cache.c, src/conf-lex.l.in, src/conf-parse.y, doc/pdnsd.conf.in: + renanmed rrneg to neg in the config file. + Misc small fixes. + pdnsd-ctl record xxx inval will now also invalidate local records. + + * src/conf-lex.l.in, src/conf-parse.y, src/dns_answer.c, src/status.c, pdnsd.spec.in: + Added --sysconfdir=/etc as argument to configure in the spec file. + Implemented the new rrneg config file section. + + * src/test/Makefile.am, src/pdnsd-ctl/Makefile.am, src/pdnsd-ctl/pdnsd-ctl.c, src/cache.c, src/cache.h, src/status.c, src/status.h, TODO: + Added the neg option to pdnsd-ctl. + + * src/cache.c, src/Makefile.am, src/conf-lex.l.in, src/consts.h, src/dns.c, src/dns.h, src/dns_answer.c, src/dns_query.c, src/helpers.c, src/main.c, configure.in: + Assorted fixes. The new features should be stabilized by now, will + integrate the missing few features now. + Also actived the tcp server by default. + +2000-11-07 Thomas Moestl + + * src/dns_answer.c, src/dns_query.c, src/icmp.c, src/ipvers.h, THANKS, TODO: + Fixed a possible memory and socket leak reported by Erich Reitz. + Implemented udp source address discovery for FreeBSD. + + * src/dns_query.c: Part 2 of yesterdays fix. + +2000-11-06 Thomas Moestl + + * src/dns_query.c, version: + Fixed a bug reported by Erich Reitz: pdnsd could leak fd's and memory if + queries timed out. + + * src/cache.c, src/cache.h, src/Makefile.am, src/dns_answer.c, src/dns_query.c, TODO, configure.in: + Sorted out some bugs for the new neg cacheing. + +2000-11-05 Thomas Moestl + + * src/cache.c, src/dns_query.c, TODO: + Negative cacheing support is now present, but largely untested. + + * src/conff.c, TODO: + The output of pdnsd-ctl status is now complete with all currently + supported options. + + * src/conf-parse.y, src/conff.c, src/conff.h, src/consts.h, src/conf-lex.l.in: + Added the config file options for the nefative cacheing support. + +2000-11-04 Thomas Moestl + + * src/cache.c, src/cache.h, src/conf-parse.y, src/dns.c, src/dns_query.c, src/status.c, version: + The new cache infrastructure for negative cacheing is in place. + Using and testing it remains. + + * src/cache.c, src/cache.h: + First changes to support negative cacheing. This should not break + anything, but the cache file format will be incompatible. + + * src/main.c, src/dns_answer.c: + init_udp_socket() and init_tcp_socket() are now called after + daemonizing on FreeBSD, as bind wants to lock the fd which + can cause later calls to fail after an exit. + +2000-11-03 Thomas Moestl + + * src/dns_query.c, src/icmp.c, src/servers.c: + Minor bugfixes and repository cleanup. + +2000-11-02 Thomas Moestl + + * src/icmp.c, TODO, version: + Called it 1.0.16p4. Fixed some compatability problems with the new code; + the ipv4 implementation seems to be fairly stable, the ipv6 one needs + some testing with dest unreach messages. + + * src/icmp.c, src/main.c: + Rewrote large parts of the ping implementation to be more portable. + +2000-11-01 Thomas Moestl + + * acconfig.h, configure.in, version: + Some config fixes, version to 1.0.16p3. SOCKET_LOCKING should be + off by default, as sendmsg can block. + + * src/pdnsd-ctl/pdnsd-ctl.c, src/error.h, configure.in: + Removed -W* arguments from CFLAGS that were implied by -Wall. + + * src/thread.c, configure.in: + Added some more safety tests to configure.in, and made it give + an error on some conditions. Also made configure do poll and usleep + detectione. + + * src/cache.h, src/test/Makefile.am, src/dns_answer.c, src/error.c, src/error.h, src/helpers.c, src/main.c, src/servers.c, src/status.c, src/thread.c, src/thread.h, src/Makefile.am: + Code cleanup. Beautified some macros, and moved the thread + specific things from error.[ch] over to the new thread.[ch]. + Also introduced usleep_r which tries to be thread safe for + different Unices. + +2000-10-31 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl, src/pdnsd-ctl/pdnsd-ctl.c: + The pdnsd-ctl binary got into cvs. Fixed that. + + * src/pdnsd-ctl/pdnsd-ctl, src/cache.c, src/cache.h, src/error.c, src/helpers.c, src/main.c, version: + Another set of FreeBSD compatability patches. This seems to catch + most of the problems, and pdnsd should be useable with libc_r now. + +2000-10-30 Thomas Moestl + + * src/pdnsd-ctl/pdnsd-ctl, src/conff.c, src/dns_answer.c, src/dns_query.c, src/helpers.c, src/icmp.c, src/main.c, AUTHORS, Makefile.am, THANKS, configure.in, version: + FreeBSD fixes, mostly contributed by Roman Shterenzon. + +2000-10-25 Thomas Moestl + + * src/pdnsd-ctl/Makefile.am, src/pdnsd-ctl/pdnsd-ctl: + pdnsd-ctl was not in cvs. + + * src/dns_query.c, src/error.h, configure.in: Some fixups for 1.0.15. + +2000-10-23 Thomas Moestl + + * src/dns_answer.c, src/dns_query.c, configure.in: + Several fixes for pdnsd to work better when it receives error replys. + + * src/dns.c, src/dns_answer.c: + Fixed another memory leak on an error path in dns_answer.c and did + a pointer signedness fixup in dns.c + +2000-10-21 Thomas Moestl + + * src/dns_answer.c, AUTHORS: + Applied a patch by Paul Wagland that fixes some spelling mistakes + and some memory leaks on error paths. + + * src/dns_query.c, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns_answer.c, NEWS, version: + Bug fixes. Added the randomize_recs option and turned it on + by default. + +2000-10-20 Thomas Moestl + + * src/helpers.c, src/dns.c, src/dns_query.c: + Fixes for the paranoid option to work with root servers + properly. + + * src/dns_query.c, src/dns.h, src/dns_answer.c, AUTHORS, THANKS: + Applied a patch by Paul Wagland for bind9-compatability and added + him to AUTHORS and THANKS. + +2000-10-19 Thomas Moestl + + * src/dns_answer.c, NEWS, version: + Another POLL_* fix. It is now called 1.0.14. + + * src/dns_answer.c, src/dns_query.c, src/icmp.c: BSD build fixes. + + * src/dns_query.c: + Made p_recurdive_query return immediately if a query returns + NXDOMAIN. + + * src/dns_query.c, Makefile.am: + Some bugifixes. It is now called 1.0.13. Releasing. + + * src/cache.c, src/dns_query.c, AUTHORS, NEWS: + Updated AUTHORS and NEWS. Made destroy_cache() lock the cache so + that no thread can access the cache afterwards (could lead to + crashes). + + * src/helpers.c, NEWS, THANKS: + Integrated a security fix contributed by Olaf Kirch: when + changing user IDs, pdnsd did not reinitialize the supplementary + group list, meaning that the process still had the privileges + of the supplementary groups the original user was member of. + + * src/conf-lex.l.in, src/conf-parse.y, Makefile.am, TODO, version: + Introduced the par_queries option. + + * src/dns_answer.c, src/dns_query.c, TODO: + Updated TODO, did some fixups for string handling. + + * HACKING: Added HACKING with some comments about coding style. + +2000-10-18 Thomas Moestl + + * src/dns_answer.c, src/dns_query.c, src/error.h, src/main.c, TODO: + Revieved and fixed the new dns_query.c-poll/select loops. + + * src/test/tping.c, src/dns_query.c, src/icmp.c: + Fixed the new poll/select ping support. + +2000-10-17 Thomas Moestl + + * src/dns_query.c, src/icmp.c, TODO: + Got rid of the O_NONBLOCK loop in the icmp.c ping implementation. + Beta tesing pending. + + * src/rc/Debian/Makefile.am, src/conff.c, src/conff.h, src/dns_query.c, src/dns_query.h, THANKS, TODO, acconfig.h, configure.in: + Corrected the Debian rc script (bug reported by Michael Müller). + Got rid of the nonblocking socket things in dns_query.c, and + using poll/select now. + Testing (esp. --no-poll) remains. + + * src/dns_answer.c: + Got rid of O_NONBLOCK read loops in dns_answer.c, using poll/select + now instead (after one issue about boundaries was cleared up). + +2000-10-16 Thomas Moestl + + * src/rc/SuSE/Makefile.am, src/rc/RedHat/Makefile.am, src/rc/Debian/Makefile.am: + The generated rc scripts do not need to be in the distribution. + + * src/conff.c, src/main.c: + Fixed a server structure members in conff.c. Only delete the socket + if we are in status pipe mode now. + + * src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns_answer.c, src/dns_query.c, acconfig.h, configure.in: + Added the --enable-tcp-subseq and --with-tcp-qtimeout configure + options, added the tcp_qtimeout conf file option, tested things. + 1.0.12 is ready for release. + +2000-10-15 Thomas Moestl + + * src/dns_answer.c, TODO, acconfig.h: + Added TCP timeouts to the answer code. Still need an option in the + conf file and documentation for that (besides beta testing). + + * src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/consts.h, src/dns_query.c, src/helpers.c, src/helpers.h, NEWS, TODO: + Introduced domain inclusion/exclusion lists in the server section + (new options include=, exclude=, policy=). + +2000-10-14 Thomas Moestl + + * src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns_answer.c, src/main.c, NEWS, TODO, version: + Upped version, updated NEWS and TODO and implemented a process + count limit. + +2000-10-13 Thomas Moestl + + * src/rc/Debian/pdnsd.in, src/main.c: + Added the --pdnsd-user option, and made the Debian rc script + use it rather than trying to parse the config file itself. + +2000-10-11 Thomas Moestl + + * src/rc/SuSE/pdnsd, src/rc/SuSE/pdnsd.in, src/rc/RedHat/pdnsd, src/rc/RedHat/pdnsd.in, src/rc/Debian/pdnsd, src/rc/Debian/pdnsd.in, AUTHORS, THANKS, configure.in: + Added the 'configure'-able rc scripts contributed by Carsten Block + and added him to THANKS and AUTHORS. + + * src/main.c: + Added O_NOFOLLOW to the pidfile open() call (if it is defined) + to prevent users creating files as the pdnsd user (using links) + if the admin put the pidfile in a world-writeable directory + against all good advice. + This is not a bug fix! Admins were not, and are still not supposed + to put the pidfile in a directory that is writeable for untrusted + users! + +2000-10-10 Thomas Moestl + + * THANKS: Added Milan P. Stanic to THANKS. + + * src/main.c: + Fixed a missing O_WRONLY in the open() call for pidfile operation. + +2000-10-08 Thomas Moestl + + * src/Makefile.am, src/dns.c, src/dns_answer.c, configure.in, version, acconfig.h: + Released 1.0.11. + Two security fixes in dns.c and dns_answer.c, and misc. smaller issues. + + * src/Makefile.am, src/conf-parse.y, src/dns_answer.c, src/dns_query.c, src/icmp.c, src/servers.c, AUTHORS, THANKS, TODO, acconfig.h, configure.in, version: + 1.0.10 was released some time ago ;-) + This had some IPv6 fixes. + Also fixed minor bug when using SOCKET_LOCKING. + +2000-08-28 Thomas Moestl + + * src/dns_answer.c: Fixed a parameter mismatch in getsockopt() + + * Makefile.am: + Applied Sourav K. Mandal's rpm build patch to the toplevel + Makefile.am + +2000-08-27 Thomas Moestl + + * src/conf-lex.l.in, src/conf-parse.y, src/consts.h, src/servers.c, version: + Added diald support. It's now called 1.0.9. + + * src/conf-parse.y, src/conff.c, src/netdev.c, pdnsd.spec.in: + Fixed some ugly typos in conf-parse.y and netdev.c. + Since I have no further bug reports and these bugs make some + things inconvenient, I will release 1.0.9 immediately. + +2000-08-26 Thomas Moestl + + * pdnsd.spec.in: small spec fix. + + * NEWS, configure.in: Last fixups for 1.0.8. Released it. + + * Makefile.am: Set mode and owner for cache file. + + * src/conf-parse.y, src/dns_answer.c, src/netdev.c, acconfig.h, configure.in, version: + Misc fixes. Hopefully fixed the UDP socket problems under Linux SMP. + +2000-08-20 Thomas Moestl + + * src/cache.c, src/dns_answer.c, AUTHORS, THANKS, configure.in, pdnsd.spec.in, version: + Build fixes by Alexandre Nunes, spec fixes (does now set distro for + configure), first attempt at an "error in udp send"-fix, and fix + for a problem with having records for the root domain in the disk + cache file. + +2000-08-13 Thomas Moestl + + * src/netdev.h, src/servers.c, src/status.c, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/consts.h, src/dns.c, src/dns.h, src/main.c, src/netdev.c, AUTHORS, THANKS: + Some minor fixes. Integrated the ppp device patch by Ron Yorston. + +2000-08-12 Thomas Moestl + + * configure.in: + configure.in was missing in repository. Also removed debugging + flag for build. + + * src/main.c: Made the pid file handling safe for directories. + + * src/dns.c: Part II of the last fix. + + * src/dns.c: + Fixed a nasty bug in decompress_name which would produce errors very + rarely. That was a off-by-one bug, but on the safe side (no overflow, + stopping one by too early). + + * src/main.c: + Fixed several possible problems with strncat(). None of these was + critical or involved remote data. + +2000-08-08 Thomas Moestl + + * src/main.c: Changed FreeBSD signal latency to 250 ms. + + * src/main.c, acconfig.h: + A set of last-minute FreeBSD fixes. pdnsd does now NEED linuxthreads on + BSD. + +2000-08-07 Thomas Moestl + + * version: It's now called 1.0.7. + + * src/main.c, doc/pdnsd.conf.in, Makefile.am: Misc build&BSD fixes. + + * src/conff.c, src/conf-parse.y, version: + Version set to the hopefully last beta. Fixed the proxy_only option. + +2000-08-05 Thomas Moestl + + * src/rc/SuSE/Makefile.am, src/rc/RedHat/Makefile.am, src/rc/Debian/Makefile.am, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns_query.c, src/status.c, doc/pdnsd.conf.in, Makefile.am, TODO: + Added the proxy_only options. Some build fixups. + +2000-07-30 Thomas Moestl + + * src/rc/SuSE/Makefile.am, src/rc/RedHat/Makefile.am, src/rc/Debian/Makefile.am, src/rc/Makefile.am, src/main.c, src/status.h, AUTHORS, INSTALL, Makefile.am, TODO, version: + Many small fixups for 1.0.7. + +2000-07-29 Thomas Moestl + + * src/rc/SuSE/Makefile.am, src/rc/RedHat/Makefile.am, src/rc/Debian/Makefile.am, src/rc/README, src/status.c, src/servers.c, Makefile.am, TODO, acconfig.h: + Assorted fixes. + + * src/cache.c, src/hash.c, src/dns.h, src/dns_answer.c, src/dns_query.c, src/icmp.c, src/ipvers.h, src/servers.c, src/servers.h, src/status.c, src/status.h, src/Makefile.am, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns.c, AUTHORS, Makefile.am, THANKS: + Big heap of updates and fixes. Incorporated build changes from Sourav + K. Mandal and pcmcia SCHEME support by Stephan Boettcher. + +2000-07-22 Thomas Moestl + + * src/rc/Debian/pdnsd: + Applied a patch by Markus Mohr to his debian rc script, which I had + broken in some way. + +2000-07-21 Thomas Moestl + + * src/cache.c, src/main.c, src/status.c, src/status.h: + Worked on the new status socket (pdnsd-ctl) option. + + * src/Makefile.am, version: Upped version, fixed Makefile.am + + * src/cache.c, src/hash.c, src/hash.h, src/cache.h, src/Makefile.am, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/dns.c, src/dns.h, src/dns_answer.c, src/dns_query.c, src/dns_query.h, src/helpers.c, src/helpers.h, src/ipvers.h, src/main.c, src/status.c, src/status.h, AUTHORS, Makefile.am, THANKS, acconfig.h: + Updated AUTHORS and THANKS. Merged in patches by Sourav K. Mandal + and Lyonel Vincent. + +2000-07-20 Thomas Moestl + + * doc/pdnsd.conf: Added pdnsd.conf. Well... + + * src/dns_query.c, src/dns_query.h, doc/pdnsd.conf: + Added some ommited files. + + * src/test/Makefile.am, src/test/if_up.c, src/test/is_local_addr.c, src/test/random.c, src/test/tping.c, src/rc/SuSE/Makefile.am, src/rc/SuSE/pdnsd, src/rc/RedHat/Makefile.am, src/rc/RedHat/pdnsd, src/rc/Debian/pdnsd, src/rc/Makefile.am, src/rc/README, src/Makefile.am, src/conf-lex.l.in, src/conf-parse.y, src/conff.c, src/conff.h, src/consts.h, src/dns.c, src/dns.h, src/dns_answer.c, src/dns_answer.h, src/error.c, src/error.h, src/helpers.c, src/helpers.h, src/icmp.c, src/icmp.h, src/ipvers.h, src/main.c, src/netdev.c, src/netdev.h, src/servers.c, src/servers.h, src/status.c, src/status.h, doc/pdnsd.conf.in, Makefile.am, acconfig.h, file-list.base.in, pdnsd.spec.in: + Checked in the pdnsd files at their new locations. + + * doc/pdnsd.conf, Makefile, a-conf.sh, cache.c, cache.h, conf.l.templ, conf.y, conff.c, conff.h, config.h.templ, consts.h, dns.c, dns.h, dns_answer.c, dns_answer.h, dns_query.c, dns_query.h, error.c, error.h, exec-flex.sh, hash.c, hash.h, helpers.c, helpers.h, icmp.c, icmp.h, ipvers.h, main.c, netdev.c, netdev.h, pdnsd-redhat.spec.templ, pdnsd-suse.spec.templ, servers.c, servers.h, status.c, status.h, version: + Removed the moved files. Will add the new ones soon. + +2000-07-16 Thomas Moestl + + * TODO: New tasks in TODO. + +2000-07-15 Thomas Moestl + + * TODO: + Updated TODO: Autoconf support was contributed by Sourav K. Mandal + + * conff.h, dns_query.c, ipvers.h, cache.c: + Fixed some minor bugs and a showstopper in cache.c that caused + crashes in some situations. + +2000-07-12 Thomas Moestl + + * dns_query.c, error.c, error.h, main.c: + Made pdnsd ignore SIGPIPE, which seemed to be responsible for some + crashes. + Accept (grudgingly) SOA rr's where NS ones would be The Right Thing. + +2000-07-10 Thomas Moestl + + * AUTHORS, THANKS, conff.c: + Updated AUTHORS, THANKS, and the fprintfs for the status pipe in + conff.c + + * TODO, config.h.templ, dns.h, dns_answer.c, dns_query.c, dns_query.h, main.c, version: + Added UDP queries and gave the user the choice between TCP and UDP + queries (UDP is the default now). Made the TCP server optional. + Fixed a authoritative record handling bug. Added pidfile support. + +2000-07-07 Thomas Moestl + + * doc/pdnsd.conf: + Inserted run_as="nobody"; again, it is The Right Thing and people + should use it. + + * Makefile: + The pdnsd cache directory is now created as nobody, since the + default run_as in the example pdnsd.conf is also nobody. + + * doc/pdnsd.conf: + Commented the run_as option out (people may run into permission + problems). + + * version: Upped version to 1.0.5 + + * AUTHORS, THANKS, conf.l.templ, conf.y, conff.c, conff.h, dns_answer.c, icmp.c, icmp.h, main.c, version: + Folded in the server_ip option code as contributed by Wolfgang Ocker + and extended it to IPv6. Fixed a bug in IPv4 ping in IPv6 mode. + +2000-07-06 Thomas Moestl + + * cache.c, dns_query.c: + Killed a bug which could cause crashes with more than 2 servers. + + * cache.c: Fixed a bug reported by Bert Frederiks that would break the + serve_aliases option when only one character was between official + name and alias in the /etc/hosts-style file. + +2000-07-04 Thomas Moestl + + * pdnsd-suse.spec.templ: The SuSE spec now uses the new makefile rule. + + * Makefile, THANKS, dns_query.c, helpers.c, version: + Added people to THANKS, fixed a bug that caused uppercase hosts/ + rr-section entries to be ignored in the cache, fixed the SuSE + makefile for pdnsd to run_as nobody, and other small fixups. + +2000-07-03 Thomas Moestl + + * dns_answer.c: + First change after release of 1.0.4: The questions received + are now properly written into the debug file when starting + with -g -d. + + * config.h.templ, dns_query.c: + Fixed a possible way to get around paranoid restrictions. + + * version: Set version to 1.0.4 + + * doc/pdnsd.conf: Added an entry for the paranoid option. + + * cache.c, config.h.templ, dns_answer.c, dns_query.c, ipvers.h: + Revisions and fixups. The complete code revision is now complete. + +2000-06-29 Thomas Moestl + + * dns_query.c: Overhaul. + + * dns_answer.c, dns_query.c, config.h.templ: + Code overhault continued. dns_answer.c is finished. + +2000-06-27 Thomas Moestl + + * conff.c, dns_answer.c, icmp.c, netdev.c, servers.c, status.c: + Continued code overhaul. Fixed several bugs, and simplified some + code. + + * conf.l.templ, conf.y, conff.c, ipvers.h, version: Fixups. + +2000-06-26 Thomas Moestl + + * hash.c: Revised; fixed a minor bug. + + * cache.c: Overhauled. + + * dns_query.c, error.c, helpers.c, helpers.h, ipvers.h, main.c, version, dns.c: + Manual code overhaul. Numerous small patches, greatly simplified + decompress_name(). + +2000-06-25 Thomas Moestl + + * config.h.templ: + Made the C random() RNG the default (using /dev/urandom, we suck up + too much randomness on high load). + + * error.c, error.h, icmp.c, icmp.h, main.c: + Small cleanups. Makes the testsuite compilation easier. + + * Makefile, config.h.templ: Preparing for release of 1.0.4. + +2000-06-24 Thomas Moestl + + * Makefile, THANKS, a-conf.sh, dns_answer.c, dns_query.c, error.c, version: + Fixed bugs with the paranoid option, connect() timeout handling, and + a incompatability in response handling that caused the glibc + resolver to misunderstand error messages pdnsd generated on unknown + query types. This bug, that was reported by James MacLean, could + for example cause ssh to hang some time. + + * Makefile, NEWS, conf.l.templ, conf.y, conff.c, conff.h, config.h.templ, dns.c, dns_query.c, dns_query.h, helpers.c, helpers.h, icmp.c, icmp.h, main.c: + Added the paranoid option, and modified the ping uptest so that it + works with strict_setuid. Also made strict_setuid=on the default. + 1.0.4 should be out soon. + +2000-06-23 Thomas Moestl + + * doc/pdnsd.conf: Added a run_as= line, which is sensible normally. + + * Makefile, conf.l.templ, conf.y, conff.c, conff.h, dns_answer.c, dns_answer.h, helpers.c, helpers.h, main.c, servers.c, status.c, version: + Some fixups, added the run_as and strict_setuid security options. + + * THANKS: Updated. + + * AUTHORS, ipvers.h, main.c, netdev.c, version: + Fixed some definitions for glibc2.0-users. Repaced the return at the + end of main() with _exit(). Should not build and run OK on glibc 2.0 + boxen. + Fixed a typo in netdev.c + + * ipvers.h: + Fixed a typo in ipvers.h to fix compile problems on systems without + an IPv6-supporting C library, and possible IPv6 problems using the + status pipe. + + * error.c, version: + Fixed a bug that could cause signals to be delivered to the wrong + process. + +2000-06-22 Thomas Moestl + + * version: Set version to 1.0.1. + + * cache.c, dns_answer.c, error.c, error.h, main.c, pdnsd-suse.spec.templ: + Fixed misc issues reported by Jonathan Hudson and Joachim Dorner, one + of them a real showstopper in cache.c. + + * Makefile, NEWS, README, cache.h, config.h.templ, version: + Updated things for 1.0.0 and released it finally. + + * AUTHORS, THANKS: Updated THANKS and AUTHORS + + * NEWS, a-conf.sh, cache.c, conf.l.templ, conf.y, conff.c, conff.h, dns_answer.c, dns_query.c, error.c, error.h, main.c, servers.c, status.c: + Fixed a-conf.sh and cleaned up signal handling as far as it can be + done ;-). Added the max_ttl option. + +2000-06-21 Thomas Moestl + + * dns_answer.c, error.c, error.h, main.c, servers.c, status.c: + More signal fixes. This is a real pain with LinuxThreads. + + * NEWS, cache.c, dns_answer.c, error.c, error.h, helpers.c, helpers.h, main.c, servers.c, status.c, version: + Fixups for signal handling. This is more than only a little tricky + using the linuxthreads library. This hopefully fixes the deadlocks + we had on signals. + +2000-06-13 Thomas Moestl + + * AUTHORS, THANKS: Updated credits. + + * a-conf.sh: + A primitive configure-like script intended as drop-in replacement + until autoconf support finally comes. + + * .cvsignore, Makefile, cache.c, dns_query.c, ipvers.h, servers.c, version: + Added a primitive configuration script as drop-in. Killed some bugs + and changed the recently added linkdown_kluge option following + suggestions from Daniel Smolik. + +2000-06-12 Thomas Moestl + + * dns_query.h, exec-flex.sh, Makefile, cache.c, conf.l.templ, conf.y, conff.c, conff.h, config.h.templ, dns_query.c: + Numerous cleanups and fixes. Implemented the linkdown_kluge option + as proposed by Daniel Smolik. Hope to get ready for 1.0.0 know. + +2000-06-10 Thomas Moestl + + * Makefile, NEWS, TODO, dns_answer.c: + Modified some stuff in dns_answer.c (if no nameserver for a knot in + the dns namespace is found now, its predecessors are tried now in + order to return accurate authority results). This will be paid with a + little more beta time, so the Makefile has developer switches again. + Corrected NEWS and TODO. + + * Makefile, config.h.templ, dns_answer.c, dns_query.c, dns_query.h, hash.h, helpers.c, version: + Removed some dead code, fixed some really minor bugs. Version is up + to 1.0.0p7, which is hopefully the last beta. + + * Makefile, config.h.templ: + Fixed things up for the 1.0.0 distribution version + +2000-06-06 Thomas Moestl + + * Makefile, config.h.templ, icmp.c, netdev.c: + Some minor comment fixes. + + * Makefile, TODO, main.c, version: + BSD fix in Makefile and help update. It is now called 1.0.0p6. TODO + was updated to reflect the project status. + + * dns_answer.c: + BSD & misc fixes. pdnsd runs now nicely on my FreeBSD 4.0 box. + + * dns_answer.c, ipvers.h: + Fixed IPv6 UDP dest address recovery. Also fixed a real stupid bug in + ipvers.h. + + * cache.h, dns_query.c, error.h: + Added DEBUG_MSG6 macros. Cleaned up requery handling. + + * dns.c, dns_answer.c, dns_query.c, dns_query.h: + Fixed another heap of bugs, introduced some sanity checks, no requery + on answers that have ra not set now. + +2000-06-05 Thomas Moestl + + * cache.c: + Fixed write_disk_cache. + + * cache.c, cache.h: + Fixes for rr handling. + +2000-06-04 Thomas Moestl + + * cache.c, dns_answer.c, dns_query.c: + Fixes again: some missing checks for rrset existence added. + + * cache.c, dns_answer.c, helpers.c, icmp.c: + Fixes for the new/modified code and its side effects on old code ;-) + + * ChangeLog.old, NEWS, cache.c, conf.l.templ, conf.y, conff.c, config.h.templ, dns.c, dns_answer.c, dns_query.c, error.c, hash.c, helpers.c, icmp.c, main.c, netdev.c, servers.c, status.c: + Folded the ChangeLog and NEWS of the 0.9.x tree back in and added NEWS for the + upcoming 1.0.0 release. Some compile fixes. Reorganized config.h.templ. Made + the inclusion of the rcsid strings into the executable optional. + + * cache.c, dns_answer.c: + Pile of fixes on recently added/modified code. + +2000-06-03 Thomas Moestl + + * .cvsignore, Makefile, lex.inc.h: + lex.inc.h should not be in CVS (it is automatically generated by + exec-flex.sh). It should also be deleted by 'make mclean'. + + * TODO, cache.c, dns_answer.c, dns_query.c, lex.inc.h: + rfc2181 conformance should be reached by now. Updated TODO. Bugfixing + remains. + + * doc/html/.cvsignore, doc/html/dl.html, doc/html/doc.html, doc/html/faq.html, doc/html/index.html: + Removed the html documentation from CVS. It is maintained separately. + + * doc/pdnsd.conf: + Added CVS/RCS $Id$ tag. + + * cache.h, conf.l.templ, conf.y, conff.c, conff.h, config.h.templ, consts.h, dns.c, dns.h, dns_answer.c, dns_answer.h, dns_query.c, dns_query.h, error.c, error.h, exec-flex.sh, hash.c, hash.h, helpers.c, helpers.h, icmp.c, icmp.h, ipvers.h, main.c, netdev.c, netdev.h, pdnsd-redhat.spec.templ, pdnsd-suse.spec.templ, servers.c, servers.h, status.c, status.h, version, AUTHORS, INSTALL, Makefile, NEWS, README, THANKS, TODO, cache.c: + Added CVS/RCS $Id$ tags to most files, did some cleanups, introduced + the new rrset granularity caching. The new code is still much of beta, + use with care. + +2000-06-01 Thomas Moestl + + * Makefile, cache.c, hash.c, helpers.c, icmp.c, netdev.c: + Yet another set of BSD fixes (test programs do now work for me + under FreeBSD). Some other minor fixes. + + * Makefile, error.c, error.h, helpers.c, helpers.h: + Transplanted kill_pdnsd from error.c to helpers.c in order to get the + tests compiled without the thread library. + +2000-05-31 Thomas Moestl + + * pdnsd: + Ooops, executable got in. + + * Makefile, pdnsd: + Added test suite programs. + + * icmp.c, netdev.c: + All basic BSD patches have been folded in. pdnsd will now compile on + FreeBSD with (hopefully) all features. + + * dns_answer.c, Makefile: + Disabled udp targed address discovery for BSD builds (this sadly ist + OS specific at least for IPv4. Must be rewritten under BSD as it is + an RFC compatability issue under some circumstances) + + * cache.c, cache.h, conf.y, conff.c, conff.h, config.h.templ, dns_answer.c, helpers.c, icmp.c, ipvers.h, netdev.c, Makefile: + BSD include & misc build fixes. More to follow... + + * Makefile, cache.h: + BSD Fixes: Makefile should work with BSD make, sed command line, + sorted out naming clash in cache.h + + * .cvsignore: + Added ChangeLog to .cvsignore + + * THANKS, conff.c: + Fixed a bug reported by Jonathan Hudson and added him to THANKS + + * ChangeLog.old: + Added the pre-CVS ChangeLog. + + * .cvsignore, AUTHORS, COPYING, INSTALL, Makefile, NEWS, README, THANKS, TODO, cache.c, cache.h, conf.l.templ, conf.y, conff.c, conff.h, config.h.templ, consts.h, dns.c, dns.h, dns_answer.c, dns_answer.h, dns_query.c, dns_query.h, doc/.cvsignore, doc/html/dl.html, doc/html/doc.html, doc/html/faq.html, doc/html/index.html, doc/pdnsd.conf, doc/txt/.cvsignore, error.c, error.h, exec-flex.sh, hash.c, hash.h, helpers.c, helpers.h, icmp.c, icmp.h, ipvers.h, lex.inc.h, main.c, netdev.c, netdev.h, pdnsd-redhat.spec.templ, pdnsd-suse.spec.templ, servers.c, servers.h, status.c, status.h, version: + Initial import of pdnsd-1.0.0p3 source tree into CVS. + + + * .cvsignore, AUTHORS, COPYING, INSTALL, Makefile, NEWS, README, THANKS, TODO, cache.c, cache.h, conf.l.templ, conf.y, conff.c, conff.h, config.h.templ, consts.h, dns.c, dns.h, dns_answer.c, dns_answer.h, dns_query.c, dns_query.h, doc/.cvsignore, doc/html/dl.html, doc/html/doc.html, doc/html/faq.html, doc/html/index.html, doc/pdnsd.conf, doc/txt/.cvsignore, error.c, error.h, exec-flex.sh, hash.c, hash.h, helpers.c, helpers.h, icmp.c, icmp.h, ipvers.h, lex.inc.h, main.c, netdev.c, netdev.h, pdnsd-redhat.spec.templ, pdnsd-suse.spec.templ, servers.c, servers.h, status.c, status.h, version: + New file. + diff --git a/src/main/jni/pdnsd/ChangeLog.old b/src/main/jni/pdnsd/ChangeLog.old new file mode 100644 index 00000000..0b3553e2 --- /dev/null +++ b/src/main/jni/pdnsd/ChangeLog.old @@ -0,0 +1,161 @@ +2000-02-15 + Version 0.2. First working alpha with the extended feature set. + +2000-02-16 + Version 0.3 with many bugfixes, better standard conformity and + some new features. + +2000-02-17 + Did a lint on the code, implemented soft timeouts, again bugfixes, + drastically reduced cache memory requirements, implemented local + records. + Version 0.4 released. + +2000-02-19 + Recursive query finally implemented. Version 0.5 out. + +2000-02-20 + Various bugfixes. The server now always tries to get an AA answer + if possible; this implies recursion. This is to deal better with + caching servers that may return incomplete results on * queries. + This may be a little sub-optimal since it may not take the full + effect of caching, but it is the only real possibility of getting + complete records. + Redid the deps in the makefile for now. + Version is now 0.6. + +2000-02-21 + Another set of bugfixes. Version is 0.6.1. + +2000-02-22 + Another set of bugfixes. It should stabilize by now. Answer compression + is there finally. Version is therefore up again, 0.7 by now. + +2000-02-23 + Minor bugfixes, isdn interface uptest added. The new record types as of + rfc1700 are implemented, but as a compile-time option, since normally + there is no need to waste space for them. + Version is 0.7.1. + +2000-02-24 + Version 0.7.2 with all rrs up to KX (36). #define DNS_NEW_RRS in + config.h and (re)compile if you want to use them. Delete the cache + file before using a version with this option changed! + NSAP-PTR does NOT WORK (any incoming answer containing it may cause + a format error) because it is ill-designed (see TODO). Never mind, it + is officially deprecated anyway. + The secure DNS extension record types defined in RFC 2065 (KEY, SIG, + NXT) are cached only and therefore useless. + +2000-02-26 + Version 0.8 with parallel query (and probably new bugs) introduced. + +2000-02-27 + Version 0.8.1 with minor bugfixes on the new features. + +2000-02-27 + Version 0.8.5 with authority support and the usual bugifxes. Some issues + with standard conformity were also fixed (wow, two versions a day). + +2000-02-28 + Implemented caching of non-authoritative records. This allows better + usage of other caching name servers. This may return non-authoritative + records to any non-wildcard query. If a wildcard query arrives, we + always look for authoritative records, so we do if the non-authoritative + answer does not contain at least one answering record to the query. + This fixes the sub-optimal behaviour since 0.6. + Version is therefore up to 0.8.7 (0.8.6 was also released today + containing bugfixes) + +2000-02-29 + Better thread support, avoiding deadlocks in signal handling. The cost + is unfortunately one more thread. + New option server_port in config file. + Version is 0.8.8. + +2000-03-01 + Nailed a renitent memory leak bug to the wall (shame, what a trivial + mistake). Also improved handling of error conditions slightly. + Version is 0.8.9. + +2000-03-01 + Cache code cleanup. The development of the non-parallel query code + is discontinued, although it still works. If you want serial query, + just set PAR_QUERIES to 1. + Additional information finally implemented. + We are up to 0.9. + +2000-03-02 + Fixed a DoS possibility. + More rfc compatability fixups and a smarter resolver logic. + Version 0.9.1 + +2000-03-02 + Added the source section to the config file handling. This allows to + source your /etc/hosts file. Version 0.9.2. + +2000-03-02 + Avoiding double additional records now. Version 0.9.3. + +2000-03-09 + Fixed some REALLY STUPID bugs. Uuummph, thought it was finished. + However, the number of bugs remaining is always n+1... + Anyway, we are up to 0.9.4. Hope that there are no mean bugs left. + +2000-03-14 + Added another uptest, exec. See README for details. Also grained the + cache size finer (it's now specified in kB). Version 0.9.5 + +2000-04-07 + Fixed some really stupid bugs, what else? Version is 0.9.6 + To be more exact: fixed misc bugs, cleaned up hash.c and cache.c + +2000-04-20 + Again fixed some bugs, version is now 0.9.7. + +2000-04-29 + Fixed a build problem caused by some missing #defines in glibc2.0 and a + minor bug. + Version is up to 0.9.8 + +2000-04-30 + Fixed some unclean C code and did a general C lint. Thanks to Byrial + Jensen for pointing out some issues. Now using stricter compiler flags. + Also replaced the daemon() call in main.c for improved portability. + Pre-Released 0.9.9p1 + +2000-05-03 + Released 0.9.9p2 with the changes of 0.9.9p1, Documentation updates, + bugfixes, and the Red Hat rc scripts contributed by Torben Janssen. + Also, the meaning of the command line option -v has changed. + There is a new config file option "lean_query" that is on by + default. It is an optimization, so please look in the docs when + updating whether you want it switched on or not. + Removed the long-dead serial query code from the distribution tree. + Some resolvers seem to be broken somehow in a respect that it cares + about order in which the records appear. In particular, it wants + cname to appear before other records. Ok, so it be... + + +2000-05-04 + Save all names in lower case in the rrs. + Tidying up the source tree. + The long-awaited cache structure changes have been started. Please + delete you cache files before using this new release. + +2000-05-05 + Fixed several bugs in the old and in the new source tree. + Use time_t instead of long for internal time storage for compatibility. + + +2000-05-06 + Version 0.9.10. + This fixes a bug in uptest=if. Red Hat and configuration fixes + suggested by Soeren J. Peters were included. + +2000-05-08 + Version 0.9.11 + This fixes a locally exploitable security problem (pdnsd.cache was + world-writeable). This is actually a one-line fix; for a description of + possible dangers, please refer to the html documentation. + Thanks to Alan Swanson for reporting. diff --git a/src/main/jni/pdnsd/INSTALL b/src/main/jni/pdnsd/INSTALL new file mode 100644 index 00000000..03991892 --- /dev/null +++ b/src/main/jni/pdnsd/INSTALL @@ -0,0 +1,190 @@ +The installation instructions are in doc/html/doc.html and doc/txt/manual.txt. +The system requirements are listed in doc/html/index.html and doc/txt/intro.txt. +I recommend using the html version. +Following are generic installation instructions for autoconf programs. +I strongly recommend to read the Installation section in the docs! + + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, a file +`config.cache' that saves the results of its tests to speed up +reconfiguring, and a file `config.log' containing compiler output +(useful mainly for debugging `configure'). + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If at some point `config.cache' +contains results you don't want to keep, you may remove or edit it. + + The file `configure.in' is used to create `configure' by a program +called `autoconf'. You only need `configure.in' if you want to change +it or regenerate `configure' using a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. You can give `configure' +initial values for variables by setting them in the environment. Using +a Bourne-compatible shell, you can do that on the command line like +this: + CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure + +Or on systems that have the `env' program, you can do it like this: + env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not supports the `VPATH' +variable, you have to compile the package for one architecture at a time +in the source code directory. After you have installed the package for +one architecture, use `make distclean' before reconfiguring for another +architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' can not figure out +automatically, but needs to determine by the type of host the package +will run on. Usually `configure' can figure that out, but if it prints +a message saying it can not guess the host type, give it the +`--host=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name with three fields: + CPU-COMPANY-SYSTEM + +See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the host type. + + If you are building compiler tools for cross-compiling, you can also +use the `--target=TYPE' option to select the type of system they will +produce code for and the `--build=TYPE' option to select the type of +system on which you are compiling the package. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Operation Controls +================== + + `configure' recognizes the following options to control how it +operates. + +`--cache-file=FILE' + Use and save the results of the tests in FILE instead of + `./config.cache'. Set FILE to `/dev/null' to disable caching, for + debugging `configure'. + +`--help' + Print a summary of the options to `configure', and exit. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`--version' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`configure' also accepts some other, not widely useful, options. + diff --git a/src/main/jni/pdnsd/NEWS b/src/main/jni/pdnsd/NEWS new file mode 100644 index 00000000..9a83bba1 --- /dev/null +++ b/src/main/jni/pdnsd/NEWS @@ -0,0 +1,324 @@ +Version 1.2.9a fixes a bug in the 1.2.9 release that causes a build failure when +pdnsd is configured with --enable-strict-rfc2181. Unless you use this option to +compile pdnsd, there is no need to upgrade from 1.2.9 to 1.2.9a. + +Version 1.2.9 has support for many additional RR types, in particular those +needed for DNSSEC (though no support for the DNSSEC protocol itself yet in +pdnsd). Caching data structures are now more efficient when they only store the +most commonly used RR types. Fine-grained configurability over which RR-types +are cache-able. Pdnsd now has support for EDNS (Extension mechanisms for DNS), +although its usefulness is currently limited to enabling UDP messages larger +than 512 bytes. Defining local TXT records in the configuration file is now +supported. A new configuration option provides a fix in case the query uptest +fails due to remote servers ignoring empty queries. Several bugs have been fixed +including a UDP socket descriptor leak that affected the FreeBSD platform, and +an IPv6 port binding bug. + +Version 1.2.8 implements support for automatic discovery of root servers. +There are also some improvements in the resolver and a new default setting for +the neg_rrs_pol configuration option. + +Version 1.2.7-par fixes some security problems. It contains a fix for a +"dangling pointer" bug that could cause pdnsd to crash when it received a long +reply. It also addresses some of the issues raised in the CERT vulnerability +note VU#800113 by making the default of query_port_start equal to 1024, thereby +ensuring that source ports are randomly selected by the pdnsd resolver in the +range 1024-65535. This release also fixes problems with compiling pdnsd for the +ARM architecture and for the Darwin platform (Max OS X). There are a number of +(minor) new features. pdnsd now supports "include" files, essentially +configuration files that only contain definitions for local records. It is now +possible to define interactively, using pdnsd-ctl, any local record that can be +defined in a configuration file. + +Version 1.2.6-par has an upgraded license: GPL version 3. +A bug has been fixed which which caused pdnsd to handle NXDOMAIN replies +inefficiently when configured with neg_domain_pol=on. Also the code for the +ping test has been fixed, which was broken for 64-bit systems. A new option +randomize_servers can be used to give each server in a section of the +configuration file an equal chance of being queried. The new options reject, +reject_policy and reject_recursively make it possible to check for the presence +of certain IP addresses in the replies of name servers and to correct some types +of unwanted replies or to censor these IP addresses. +The pdnsd-ctl 'add a' and 'add aaaa' commands now allow multiple IP addresses to +be specified for the same name. There are some further improvements to pdnsd's +recursive resolver. + +Version 1.2.5-par introduces a new query method: udp_tcp. With this method a UDP +query is tried first and, if the UDP answer is truncated, the query is repeated +using TCP, which is the behaviour that seems to be recommended by the DNS +standards. There is a new configuration option use_nss, which can be turned off +to prevent lengthy timeouts and stalls in certain situations. A bug has been +fixed which could cause pdnsd to crash if debug output was generated before the +debug output stream was properly initialized. + +In version 1.2.4-par a memory leak and a minor buffer-overflow problem have been +fixed. There is now a fix for some situations that would previously cause pdnsd +to exit prematurely (such as ACPI S3 sleep or trying to attach strace to pdnsd). +Time intervals specified in the configuration file can now be expressed in +minutes, hours, days and weeks as well as seconds. Support for Apple Mac OS X +v10.4 Tiger has been improved. The "pdnsd-ctl status" command now also provides +some information about the status of the running threads. There are some further +improvements in the debugging information provided by pdnsd. +TCP-query support is now compiled in by default (but can still be disabled using +the configure option --disable-tcp-queries). + +In version 1.2.3-par the "pdnsd-ctl empty-cache" command can be provided with an +include/exclude list, allowing the user to specify a selection of names to be +removed, instead of emptying the cache completely. +Additional improvements: pdnsd should now remain responsive while executing the +"pdnsd-ctl empty-cache" command. With the query_method=tcp_udp option pdnsd will +now also try a UDP query after a TCP connection times out, which should allow +pdnsd to resolve the same names with query_method=tcp_udp as with +query_method=udp_only, although perhaps with an occasional delay. +"pdnsd-ctl config" or "pdnsd-ctl server" commands should now run without delays, +even if pdnsd is performing ping or query uptests at the time. A problem with +resolving certain names using root servers has been fixed. + +Version 1.2.2-par has a number of important portability improvements. A bug has +been fixed that prevented pdnsd from compiling successfully on some 64 bit +architectures. The code for determining endianness (most significant or least +significant byte first) should now be more portable. This release has +(experimental) support for the Darwin (Apple Mac OS X) platform. On Linux +systems, the configure script will now try to detect automatically whether the +system implements the Native POSIX Thread Library, but the method used may not +necessarily be foolproof. In addition, the debug features have been improved and +should make it easier to find out why pdnsd considers some queries or replies +malformed. + +Version 1.2.1-par has improved support for non-Linux platforms. This release has +(experimental) support for the Cygwin platform, and should also fix some +compilation glitches that have been reported by FreeBSD users. + +Version 1.2-par is a new and improved version of pdnsd! Most of the changes +effect the internal workings of pdnsd, but there are also a number of +interesting new features (well, I think they are interesting). Among the bugs +fixed are two rather nasty ones which involve the handling of NXT and NAPTR +records and which can cause pdnsd to crash or abort. The new features include a +new server availability test which can be specified with uptest=query, support +for reading the DNS configuration from resolv.conf files, a new option for +optimizing the use of root servers, a new option that makes defining local +records for reverse resolving easier, support for defining wildcard records, a +new pdnsd-ctl command for reloading the config file without restarting pdnsd, +and a new pdnsd-ctl command for dumping information about the names stored in +the cache. +The documentation has also been updated: there is now a pdnsd.conf man page. For +a more complete list of the changes I'll have to refer you to README.par and the +ChangeLog. + +Version 1.1.11a-par contains a fix for FreeBSD users that bypasses a problem +with the macro ENONET, which can cause a compilation failure when it is +undefined. Linux users will notice no difference between 1.1.11a-par and +1.1.11-par. + +Version 1.1.11-par has a rather large number of small changes, which are rather +difficult to summarize. Among the bugs fixed are a race condition in the cache +lookup code, a flaw in the code that caused a busy spin when a remote server +answered with "Not Implemented", and problems with the -4 and -6 command-line +options. Among the improvements are an alternative sorting algorithm which +should allow pdnsd to start up faster when reading a large cache file from disk, +automatic mapping of IPv4 to IPv6 addresses when running in IPv6 mode, somewhat +more efficient memory use, better compression of the replies and changes in the +parallel querying algorithm that should improve the chances of catching a reply +from a remote server. For a more complete list of the changes I'll have to +refer you to README.par and the ChangeLog. + +Version 1.1.10-par has a new parser for configuration files, completely +rewritten from scratch in C. The main advantages are: (f)lex and yacc/bison are +no longer needed to build pdnsd, more informative error messages instead of +merely "parse error", and string literals no longer need to be enclosed in +quotes in most cases. Furthermore, a bug has been fixed that caused incorrect +IPV6-type PTR records to be generated when sourcing /etc/hosts like files. +There have been other small changes, more details can be found in the ChangeLog. + +Version 1.1.9-par adds some missing pieces to the documentation (the pdnsd +manual and the man page for pdnsd-ctl). The changes to the code consist mostly +of optimizations, removal of some size limits due to fixed-size buffers, and +some cleaning up. I've also tried to make the error responses of pdnsd-ctl more +helpful. More details can be found in the ChangeLog. + +Version 1.1.8b1-par8 introduces a "delegation-only" feature that may be useful +for blocking Verisign's Sitefinder. The parser for the configuration file now +tolerates domain names missing a dot at the end. I have provided alternative +implementations for some GNU extensions that I used in an effort to make the +code more portable. In particular, the code should build on FreeBSD again. More +details can be found in the README.par file. + +Version 1.1.8b1-par7 fixing a number of bugs. I have also reworked some of the +code for adding and removing entries in the cache in an effort to improve +efficiency and stability. More details can be found in the ChangeLog. + +Version 1.1.8b1-par6 introduces some further code cleanup. In addition the +documentation has been revised. + +Version 1.1.8b1-par5 fixes a troublesome allocation size error that has been +discovered in Thomas Moestl's code. In practice this bug only wastes memory but +it could also potentially lead to memory corruption. Upgrading is +recommended. More details can be found in the ChangeLog. + +Version 1.1.8b1-par4 has been released. Due to incompatibilities between +various implementations of the pthread library on Linux systems, problems can +occur with signal handling in pdnsd. The usual symptom is failure by pdnsd to +save the cache to disk, and /var/cache/pdnsd/pdnsd.cache remaining empty. If you +experience this kind of trouble, try reconfiguring with different values for the +new --with-thread-lib option. The allowable values are described in the +documentation. + +pdnsd is no longer maintained by Thomas Moestl: I have not had time to maintain +pdnsd for quite a while now, and have been very slow to respond to issues, or +did not respond at all. It is time that I officially announce that pdnsd is no +longer actively maintained; I apologize to all those who reported bugs or asked +questions without receiving any reply. However, Paul A. Rombouts has published a +patch set against the last released version at +http://www.phys.uu.nl/~rombouts/pdnsd.html, which cleans up a lot of code fixes +many bugs. + +Version 1.1.7a fixes a reversed assertion that would cause pdnsd to terminate +if used with the ping uptest. No other changes were made. + +Version 1.1.7 fixes some problems that might be remotely exploitable to +gain access as the user pdnsd runs as (an unprivileged user by default). To do +this, an attacker needs to control a name server that is queried by pdnsd, and +send a malicious reply to such a query. Upgrading is strongly recommended! +There are also minor bug fixes and stability improvements. + +Version 1.1.6 adds the query_port_start and query_port_end options (contributed +by Andreas Steinmetz), that allow confining the ports pdnsd uses for outgoing +queries to a certain range. It also fixes numerous bugs, one of which could +cause pdnsd to hang; update is therefore recommended. + +Version 1.1.5 contains a fix for a security bug that would allow local users +that are allowed to use pdnsd-ctl on a running pdnsd server to execute +arbitrary code as the user that pdnsd runs as (or on Linux, when strict_setuid +is not enabled, as the user that started pdnsd). The danger of this is usually +quite limited; the status socket is not enabled by default, it's default +permissions do only allow the user pdnsd runs as to use the socket, +strict_setuid is enabled by default and pdnsd runs as an unprivileged user. +There is also a new configure option, --enable-underscores, that will make +pdnsd allow underscores in domain names. Furthermore, the SRV record handling +has been fixed to allow underscores in any case (this was not allowed +previously, but is required by the RFC). SOA records are not put in the +answer section any more if no answers are found (this violates the RFC's). +It may be put in the authority section in a later version. +There are also various bugfixes in this release. +Upgrade is recommended. + +Version 1.1.4 fixes various smaller bugs, and should also improve the cache +write performance especially for larger caches. There are also two new +features: servers can now be given a label (using the label server option) +which can be used to identify them for the pdnsd-ctl server command +(contributed by Andrew M. Bishop), and local records can be marked to make +the domain record authoritative in pdnsd's cache (which means that pdnsd will +assume that records that are not present in the cache for that domain are +non-existent); this is on by default now, and can be controlled using the new +authrec server option). + +Version 1.1.3 added contrib/ and had a lot of robustness fixes. +This release addresses a security hole that affects only Linux systems. Due to +a bug in glibc, pdnsd could crash during a port scan. This release contains +a workaround for this, as well as a fix for a deadlock under heavy load +conditions. It also fixes a possible problem that could be triggered by +malicious servers, and contains numerous bug fixes. +A script, contributed by Marko Stolle, makes pdnsd useful in a DHCP setup. +pdnsd also preservers the case of names in the cache, and should work much +better on alpha machines (thanks for the contributions by Bjoern Fischer +and P.J. Bostley that made this possible). New types were dded for rr +sections and pdnsd-ctl. +Upgrade is recommended. + +Version 1.1.2 has a fix for a bug that could cause SERVFAIL to be +returned when NXDOMAIN would be appropriate. The bug surfaced only when +pdnsd queried name servers with a behaviour different from BIND's in the +NXDOMAIN case, e.g. pdnsd querying another pdnsd or e.g. djbdns. + +Version 1.1.1 fixes a possible race condition in status socket creation. +This race might be used by a local attacker to change the access +permissions of a certain file in /tmp. The risk of this is probably +negligible. The default setup uses a non-privileged user, default mode +0600, and the status socket is disabled normally, so this should be +relatively safe. I don't see any possibility to exploit this, it is +more of a paranoia fix. +There are also some other minor fixes and documentation improvements. +Upgrade is recommended. + +Version 1.1.0 introduces negative cacheing, pdnsd-ctl enhancements and +a much improved FreeBSD support. The cache file format has changed from +prior releases. Some configuration defaults have changed, too. + +Version 1.0.15 is mostly a bugfix release. It also has a new option: +randomize_recs in the global section. + +Version 1.0.14 has a fix in icmp.c that will make it build properly +on FreeBSD and older Linux systems. + +Version 1.0.13 has some code cleanup, a fix for the Debian rc install, +and a security fix (contributed by Olaf Kirch): when changing +user and group id, pdnsd did not drop supplementary group IDs that +the original user was member of. + +Version 1.0.12 is a bugfix release and contains some security +enhancements. There are also inclusion/exclusion lists for servers +(new options include=, exclude=, policy= in the server +section). + +Version 1.0.11 fixes two bugs that might be used for denial-of-service +attacks, upgrading is recommended. + +Versions 1.0.9 and 1.0.10 are bugfix releases. + +Version 1.0.8 introduces special linux ppp device support contributed +by Ron Yorston, and has some bugfixes. + +Version 1.0.7 introduces autoconf support, many new config file options and +the new pdnsd-ctl run-time configuration program. + +Version 1.0.6 has another set of bugfixes, in addition to higher compile- +time configurability and UDP query support. It also contains Debian rc +scripts contributed by Markus Mohr. + +Version 1.0.5 has some bugfixes and the new "server_ip" option +contributed by Wolfgang Ocker. + +Version 1.0.4 introduces the new options run_as, strict_setuid and +paranoid. These new options are optional security enhancements. + +Versions 1.0.1, 1.0.2 and 1.0.3 are bugfix releases. + +Version 1.0.0 has a lot of changes compared to the 0.9.x tree, but much of +them "under the hood": +- IPv6 support (experimental; compile- and run-time configurable) +- FreeBSD (and such hopefully *BSD) support +- better rfc2181 compatability +- new options: + - serve_aliases in source section + - linkdown_kluge in global section + - max_ttl in global section +- cache-code reorganization, only one unified hash (of variable depth) +- Optimizations & cleanups +- Automatic deps (only interesting for developers ;-) + +Version 0.9.11 fixes a locally exploitable security hole (the cache file was +world writeable by default). Please see ChangeLog.old for details. + +Version 0.9.10 fixes some bugs and improves build on Red Hat. + +Version 0.9.9 contains the rc scripts for Red Hat Linux contributed by Torben +Janssen, in addition to code cleanups and bugfixes. +The meaning of the option -v has changed in this release. +There is also a new config file option "lean_query" that is on by default. It +is an optimization, so please look in the docs when updating whether you want +it switched on or not. + +When compiling versions after 0.9.8, you will probably get more +compiler warningsthan before. This is because the C compiler settings +have been made stricter. + +Version 0.9.8 fixes a minor bug some build problems with glibc2.0 systems. + +The versions 0.9.6 and 0.9.7 are bugfix releases. + +Version 0.9.5 introduces uptest=exec, and a modified config file syntax (cache +sizes are now specified in kB). + +Version 0.9.4 was the first to be released to the public. For information on +changes, see ChangeLog. + diff --git a/src/main/jni/pdnsd/README b/src/main/jni/pdnsd/README new file mode 100644 index 00000000..7042e934 --- /dev/null +++ b/src/main/jni/pdnsd/README @@ -0,0 +1,22 @@ +You can find the documentation for pdnsd in the doc/ directory. The html +documentation (which I recommend) is in the doc/html/ subdirectory. +The pure text documentation (which is generated automatically from the +html documentation) is in doc/txt/. +The following documents are available: + +index.html / intro.txt Overview, system requirements +doc.html / manual.txt Building, installation and usage instructions +faq.html / faq.txt The FAQ + +Share and enjoy! + Thomas + + +For news about recent changes in pdnsd the following files may be of +interest to you: + + README.par + ChangeLog + NEWS + +Last revised: 08 July 2007 by Paul Rombouts diff --git a/src/main/jni/pdnsd/README.par b/src/main/jni/pdnsd/README.par new file mode 100644 index 00000000..ea181bc6 --- /dev/null +++ b/src/main/jni/pdnsd/README.par @@ -0,0 +1,216 @@ + pdnsd version 1.2.9a by Paul Rombouts + ===================================== + +This file describes the version of pdnsd that I maintain personally and am +making available so other people can enjoy the latest features and fixes. Thomas +Moestl no longer maintains pdnsd himself, so I am effectively the new +maintainer. This README describes the new features in version 1.2. This version +has a rather large number of internal changes and also some new features, which +I am rather pleased with, even if I say so myself. I think the changes are +significant enough to warrant increasing the minor version number from 1.1 to +1.2. The differences between my previous "official" release 1.1.11 and Thomas' +last release 1.1.7a are described in my previous README, which I have renamed +REAME.par.old. In this README I restrict myself to describing changes between +1.1.11 and 1.2. +The main difference between versions 1.2 and 1.2.1, aside from some minor +changes, is that 1.2.1 has (experimental) support for the Cygwin platform. +Version 1.2.2 has further improvements in portability and should in +particular now also compile on the Darwin (Apple Mac OS X) platform. +Version 1.2.4 has some important fixes for a memory leak, a minor buffer- +overflow problem and some situations which could cause pdnsd to exit +prematurely. Note that TCP-query support is now compiled in by default, but can +still be disabled using a configure option. +The main new feature of version 1.2.5 is the new query method "udp_tcp". +Version 1.2.6 has an updated license: GPL version 3. The main new feature of +version 1.2.6 is the "reject" option, which makes it possible to censor or +correct for unwanted IP addresses in replies. +Version 1.2.7 contains an important fix for a "dangling pointer" bug and +attempts to make pdnsd less vulnerable to the issues raised in CERT +vulnerability note VU#800113. It also contains some improvements for defining +local records interactively using the pdnsd-ctl utility. +The main new feature of version 1.2.8 is automatic discovery of root servers, +as well as some minor improvements in the resolver. +Version 1.2.9 among other things supports many addtional RR types, uses data +structures that should be more slightly more memory efficient and has support +for EDNS, which allows DNS UDP messages to be larger than 512 bytes. +Version 1.2.9a is a simple bugfix release that fixes a problem with compiling +1.2.9 after configuring with --enable-strict-rfc2181. Unless you use this option +to compile pdnsd, there is no need to upgrade from 1.2.9 to 1.2.9a. + +For instructions how to compile and install pdnsd see doc/html/doc.html or +doc/txt/manual.txt. Note that I am no longer distributing a patch w.r.t. Thomas' +version because the (compressed) patch file is barely smaller than the +(compressed) tar archive. + +Here follows a list of some of changes in version 1.2 from a user's perspective. +For a more technical description of some of the changes in the code see the ChangeLog. +For a short history about recent releases have a look at NEWS or doc/html/index.html. + +- First of all, two potentially rather nasty bugs have been fixed in the code + for the handling of NXT and NAPTR records. A response from a remote server + containing NXT records (even well-formed ones) will very likely cause pdnsd to + crash. The code for handling NAPTR records contained incorrect ASSERT + statements, which could cause pdnsd to abort in a controlled fashion, but + completely unnecessarily. + +- Sampo Lehtinen has remarked that pdnsd sometimes failed to resolve classless + reversed-delegated IP addresses, and that this has something to do with the + fact that pdnsd didn't accept '/' characters in domain names. After reading + some of the relevant RFCs I decided to remove all restrictions on the types + of characters that pdnsd accepts in domain names. Of course for most + applications, there are many characters which don't make sense in domain + names, but I feel that it is the responsibility of the client application to + reject these, not the proxy server. + +- At the suggestion of Dan Tihelka, I have expanded to the server_ip= option to + allow the name of an interface to be specified instead of an IP address. + Presently this has been tested on Linux only. Can someone running pdnsd on + *BSD tell me if the code for getting the address of an interface is different + for Linux and BSD-type systems? + +- At the suggestion of Juliusz Chroboczek I've added an new server availability + test which can be specified with uptest=query. This can be useful as an + alternative to "uptest=ping" in case the remote server does not respond to + ICMP_ECHO requests at all, which unfortunately is quite common these days. + "uptest=query" causes pdnsd to send an empty query to remote name servers. Any + well-formed response (apart from SERVFAIL) within the timeout period will be + interpreted as a sign that the server is "up". + +- Instead of specifying the IP addresses of the name servers that pdnsd should + query in a server section of the config file, you may also specify a + resolv.conf-style file. Preferably this should not be /etc/resolv.conf. If the + contents of the resolv.conf type file changes while pdnsd is running, you can + make pdnsd aware of the changes with the "pdnsd-ctl config" command, see + below. Example: + + server { + label=myisp; + file=/etc/ppp/resolv.conf; + timeout=10; + } + +- There is a new option for "server" sections in the config file: + root_server=on/off. + In case a server section contains only addresses of root servers, which + usually only give the name servers of top level domains in their reply, + setting root_server=on will enable certain optimizations. This involves using + cached information to reduce queries to the root servers, thus speeding up the + resolving of new names. + +- New option for "rr" sections in the config file: reverse=on/off. + If you want a locally defined name to resolve to a numeric address and vice + versa, you can now achieve this by setting reverse=on before defining the A + record, making it unnecessary to define a separate PTR record for the reverse + resolving. + Example: + + rr { + name = localhost; + reverse = on; + a = 127.0.0.1; + } + + has the same effect as: + + rr { + name = localhost; + a = 127.0.0.1; + } + rr { + name = 1.0.0.127.in-addr.arpa; + ptr = localhost; + } + +- In rr sections it is now possible to specify a wildcard name, i.e. a name + starting with the label *. The * in a wildcard can match one or more labels in + a queried name, but only whole labels. For example, *.mydomain will match + a.mydomain or www.a.mydomain, but not mydomain. Before you can specify an rr + section with name=*.mydomain you must define some records for mydomain, + typically NS and/or SOA records. + Example: + + rr { + name = mydomain; + ns = localhost; + soa = localhost, root.localhost, 42, 86400, 900, 86400, 86400; + } + rr { + name = *.mydomain; + a = 192.168.1.10; + } + +- There is a slight backwards compatibility problem which involves the name= and + owner= options in rr sections. The new version does not allow you to place + owner= before name=. On the other hand, you may now freely mix the owner + option with the a,ptr,cname,mx and soa options and define as many records of + this type as you like (including zero). + +- pdnsd-ctl has three new commands: + + config: Reloads pdnsd's configuration file. This is more efficient than + restarting pdnsd, and should not cause only noticeable interruption in DNS + service. However, some types of configuration changes cannot be put into + effect this way, and you will be prompted to restart pdnsd instead. + + empty-cache: Empties the cache completely, freeing all existing entries. + In version 1.2.3 you can specify a selection of entries to delete by providing + a list of include/exclude patterns. + + dump: Prints information about all the names stored in the cached. This is + mainly useful for diagnostic purposes. + +- There is now a pdnsd.conf(5) man page, describing pdnsd's configuration file. + The man page has been generated from the html documentation using a customized + Perl script. + +- New in version 1.2.4: Time intervals in the configuration files can now be + expressed in seconds, minutes, hours, days and weeks, using the suffixes + s,m,h,d,and w. + Example: 2h30m is interpreted as 2*60*60 + 30*60 = 9000 seconds. + +- Version 1.2.5 introduces a new configuration option, contributed by Jan-Marek + Glogowski, called "use_nss" which can be turned off to prevent nasty delays in + certain situations. + Besides the query methods "udp_only", "tcp_only" and "tcp_udp" you can now + also specify "udp_tcp", which more closely adheres to the behaviour + recommended by DNS standards. + +- Version 1.2.6 introduces the "randomize_servers" and "reject" options. By + setting "randomize_servers" on you can give each server in a server section an + equal chance of being queried, which is useful when resolving from root + servers, for instance. The "reject" option can be used to censor certain IP + addresses or correct for unwanted replies from servers you don't completely + trust. + +- Version 1.2.7 contains support for "include" files which can be referenced + from configuration files or read interactively using pdnsd-ctl. These files + can be used to add local definitions to the cache without reconfiguring pdnsd. + The new "pdnsd-ctl eval" command can be used to interactively define local + records that could previously only be defined in configuration files but not + with the "pdnsd-ctl add" command. + +- Version 1.2.8 contains support for automatic discovery of root servers. + Instead of supplying a complete list of IP addresses of root servers in a + server section of the configuration file, you need only enter one or two + addresses of name servers which know the names and addresses of the root + servers and set "root_server=discover". + The "neg_rrs_pol" option has a new default setting, which should allow + sensible negative caching of RRs in most situations, even if "proxy_only=on". + +- Version 1.2.9 contains support for EDNS (Extension mechanisms for DNS), which + allows UDP messages to be larger than 512 bytes. Whether pdnsd uses EDNS in + outgoing queries is determined by the configuration option "edns_query". If + pdnsd receives a query using EDNS, it will reply using EDNS regardless of the + configuration settings. + Local TXT records can now be defined in the configuration file. + If the query uptest fails due to remote servers ignoring empty queries, this + can now be remedied using the new "query_test_name" config option. + +The new features are described in greater detail in the manual doc/html/doc.html +or doc/txt/manual.txt. + +Enjoy! + +If you have any questions about my version of pdnsd, you can send these +to . Questions about the original (unmaintained) pdnsd +version should be sent to or . diff --git a/src/main/jni/pdnsd/README.par.old b/src/main/jni/pdnsd/README.par.old new file mode 100644 index 00000000..4bf0edaf --- /dev/null +++ b/src/main/jni/pdnsd/README.par.old @@ -0,0 +1,249 @@ + pdnsd maintenance version 1.1.11-par by Paul Rombouts + ======================================================= + +This file describes the version of pdnsd that I maintain personally and am +making available so other people can enjoy the latest features and fixes. +Thomas Moestl no longer maintains pdnsd himself, so I am effectively the new +maintainer. The current version is 1.1.11-par, which has a rather large number +of small changes. Among the bugs fixed are a race condition in the cache lookup +code, a flaw in the code that caused a busy spin when a remote server answered +with "Not Implemented", and problems with the -4 and -6 command-line options. +Among the improvements are an alternative sorting algorithm which should allow +pdnsd to start up faster when reading a large cache file from disk, automatic +mapping of IPv4 to IPv6 addresses when running in IPv6 mode, somewhat more +efficient memory use, and better compression of the replies. Some of the new +features are described in the second half of this file (look for "new in version +1.1.11"). For the rest of the changes I will have to refer you to the ChangeLog. +For a short history about recent releases have a look at doc/html/index.html. + +Since version 1.1.9 I've added some missing pieces to the documentation (the +manual doc/html/doc.html,doc/txt/manual.txt and the man page doc/pdnsd-ctl.8). +Version 1.1.11 finally has a man page doc/pdnsd.8, thanks to a contribution by +Mahesh T. Pai. + +The first part of this file describes how to patch, compile, install and run +pdnsd. The second part describes some of the changes I've made to Thomas +Moestl's code. + +Unless you're using the pre-patched source archive pdnsd-1.1.11-par.tar.gz you +must first apply my patch file pdnsd-1.1.11-par.diff.gz before compiling and +installing pdnsd according to Thomas Moestl's instructions described in the the +documentation. Use a freshly untarred copy of Thomas Moestl's original version +1.1.7a source, cd into the source directory pdnsd-1.1.7a and apply the command: + +gzip -cd /pdnsd-1.1.11-par.diff.gz | patch -p2 -N -Z + +Note: I have used GNU extensions so there may be some portability issues. I have +supplied alternatives for some of the less portable functions. There should be no +problem with most Linux distributions. + +That's it! You should now be able to compile, install and run pdnsd. See the +documentation in doc/html/doc.html or doc/txt/manual.txt for more detailed +instructions. + +Some people may want change the compiler optimization flag. I use the -O2 flag, +but it might be safer to use a lower level of optimization or no optimization at +all. In that case prefix the configure command with the desired compiler flags +like this (assuming you're using a bash shell): + + CFLAGS="-O1 -g -Wall" ./configure ... + +I have added a new configuration option "--with-thread-lib=", which you +should use if you experience problems with signal handling under Linux. The +usual symptom is failure by pdnsd to save the cache to disk, and +/var/cache/pdnsd/pdnsd.cache remaining empty. If you experience this kind of +trouble, try reconfiguring with different values for the --with-thread-lib +option. The allowable values are "linuxthreads" (the default), "linuxthreads2" +(or "lt2" for short), and "nptl". I recommend that you first configure and +compile without the --with-thread-lib option, then if you experience trouble try +again with --with-thread-lib=lt2 and recompile. +If your Linux system has an implementation of the Native POSIX Thread Library, +which is the case with Red Hat 9 for instance, you should use +--with-thread-lib=nptl . +Ideally, I would like to write a configure script which automatically detects +which kind of thread library is being used on a Linux system, but I don't have a +clue yet how to do this. If you can help me with this please write to me at the +email address listed at the end of this file. + +The rest of this file describes some of the modifications I've made, but you +don't have to read it if you simply want to run pdnsd as you're used to. + + +- The main new feature I've added enables you to change the server addresses + that pdnsd uses at run-time using pdnsd-ctl. I've done this because the ISPs I + use do not specify fixed DNS server addresses, but expect their clients to use + dynamic DNS configuration (DHCP in the case of the cable connection, RFC1877 + in case of isdn). I've extended the options that can be given with the + "server" command to pdnsd-ctl, to allow IP addresses to be specified as an + additional argument after "up|down|retest". This allows me to put something + like this in my ifup-local script: + + pdnsd-ctl server isp-label up "$DNS1 $DNS2" + + For more details how to use pdnsd-ctl read the updated documentation in + the doc/html directory. There is also a manpage for pdnsd-ctl. + This was quite tricky to implement because there might be pending queries + while the addresses are being changed. It certainly was an interesting + exercise in writing multi-threaded code for me. + + +- I've implemented a feature which allowed me to specify multiple IP addresses + per server section in the configuration file. This allowed for a much more + compact configuration file (3 server sections instead of 7 in my case), + because most configuration options are identical for servers belonging to the + same ISP. It also made the output of "pdnsd-ctl status" more compact. And it + was necessary to enable a satisfactory implementation of the previous feature. + Example of the new syntax: + + ip = 123.456.789.001, 123.456.789.002, 123.456.789.003; + + At the suggestion of Greg Norris server sections no longer have to specify IP + addresses. A server section without IP addresses will remain inactive until it + is assigned one more addresses at run-time with pdnsd-ctl. + +- I've changed the implementation of dynamic arrays to make it slightly more + efficient, and improve type safety. I also got rid of several arrays of fixed + size in favor of dynamically allocated arrays. In particular, I got rid of + all occurrences of MAXPATH. I also made several static variables "automatic". + +- The output of the "status" command of pdnsd-ctl now gives more meaningful + constant names "ping|none|if|exec" instead of numbers for the "uptest" option. + I've also added some information that was previously missing. + +- I've fixed I a problem that caused pdnsd to use up a lot of CPU time and slow + down my system considerably when it received a query that took a long time to + resolve. It turned out that pdnsd can get into a "busy spin" when one of the + DNS servers pdnsd is querying refuses the connection. Apart from fixing this + bug, to speed things up additionally, I thought it would be a good idea to + mark a server down (without retesting it) after detecting errno==ECONNREFUSED. + This gives me very satisfactory performance, with the problematic server being + tried only once during every testing interval. + + New in version 1.1.11: An additional busy spin condition, triggered when a + remote server answers with "Not Implemented", has been discovered and fixed. + In case there are remaining bugs in the multiplexing code, I've added a test + that checks if the number of events reported by poll/select matches the number + of events handled by pdnsd. If not, pdnsd will log an error message and give + up. Although the bugs still need to be reported and fixed, at least this + should prevent pdnsd from wasting CPU cycles. + +- Due to a bug in Thomas' code, pdnsd tries, but fails, to remove the control + socket "pdnsd.status" before exiting. This has also been fixed. In version + 1.1.8b1-par6 I have cleaned this up some more so that pdnsd will handle + situations where it can't open or bind the control socket more gracefully. + +- I've rewritten some of the code that saves the contents of the cache to the + file "pdnsd.cache" just before pdnsd exits. This is because I noticed in my + logfiles that pdnsd occasionally had problems reading this file back at + startup. I eliminated the use of fseek() in Thomas' code. I could not find + anything that was demonstrably incorrect about his use of fseek(), but it + seemed better to me to do without it and write the file in a strictly + sequential order. Anyway, it turned out my hunch paid off: no more error + messages about "pdnsd.cache" in my logfile. + + New in version 1.1.11: I've added some new code for sorting the queue used for + purging stale cache entries. This should allow pdnsd to start up faster when + reading large cache files from disk. + +- I've extended the configuration options for policies of inclusion/exclusion + lists in server sections. The new policies options are "simple_only" and + "fqdn_only". Setting policy=simple_only will cause the server to used only for + simple hostnames if no other rule matches. On the other hand, setting + policy=fqdn_only will cause the server to be used only for fully qualified + domain names (i.e. the name has at least one dot in-between). I find these + options useful for controlling which name servers (if any) will be used by + pdnsd for simple host names. + +- I've added a new "delegation_only" option that can be used to undo the + unwanted effects of DNS "wildcards". It works roughly as the feature by the + same name in BIND. It is turned off by default. To block Verisign's + Sitefinder, add the following line to the global section of the configuration + file: + + delegation_only= com, net; + + If you find that this feature blocks some legitimate domain names, you will + probably need to add the address of a nameserver that provides good authority + information. More information can be found at + http://www.phys.uu.nl/~rombouts/pdnsd/delegationonly.html + +- It is no longer mandatory that domain names in the configuration file end in a + dot. + +- The parser for configuration files has been rewritten purely in C, so (f)lex + and yacc/bison are no longer needed to build pdnsd. + It is no longer necessary to place strings between quotes in the configuration + file, unless a string contains a special character such as whitespace, a token + that normally starts a comment, or one of the characters ",;{}". Note that + these special characters are illegal in domain names anyway. + +- New in version 1.1.11: Negating whole domains with a neg section in the + config file will result in all the subdomains being negated as well. + For example, adding the lines + + neg {name=doubleclick.com; types=domain;} + neg {name=doubleclick.net; types=domain;} + + will also negate ad.doubleclick.com, ad.fr.doubleclick.net, etc. + +- New in version 1.1.11: When running in IPv6 mode, pdnsd will now automatically + map any IPv4 addresses it reads in the config file to IPv6 addresses. + When pdnsd has been compiled with IPv6 support and runs in IPv4 mode, it will + skip IPv6 addresses with a warning message. This may result in certain server + sections becoming inactive, though. + + The -4 and -6 options should now work as advertised. + I've added two new command-line options, "-a" and "-i ". + With the -a flag pdnsd will try to detect automatically if IPv6 support is + available on a system, and fall back to IPv4 if not. The -a flag can be used + instead of -4 or -6. + The -i option can be used to specify a prefix for mapping IPv4 to IPv6 + address. The default is ::ffff.0.0.0.0. There is also a corresponding + ipv4_6_prefix= option for the config file. + +- New in version 1.1.11: I've slightly changed the way pdnsd does parallel + queries. Active queries or not canceled until we have received a useful + response from a remote name server, or all the queries have failed or timed + out. Thus the par_queries parameter is no longer the maximum number of + parallel queries, but rather the increment with which the number of parallel + queries is increased when the previous set has timed out. In the worst case + there will be pending queries to all the servers in the list of available + servers simultaneously. We may be wasting more system resources this way, but + the advantage is that we have a greater chance of catching a reply. After all, + if we wait longer anyway, why not for more servers. + I've also introduced a global timeout parameter. This is the minimum period of + time pdnsd will wait after sending the first query to a remote server before + giving up without having received a reply. The timeout options in the + configuration file are now only minimum timeout intervals. Setting the global + timeout option makes it possible to specify quite short timeout intervals in + the server sections. This will have the effect that pdnsd will start querying + additional servers fairly quickly if the first servers are slow to respond + (but will still continue to listen for responses from the first ones). This + may allow pdnsd to get an answer more quickly in certain situations. + + After receiving a reply from a remote server the server is marked up and its + time stamp is updated. This will have the effect that pdnsd doesn't bother + testing this server for availability for a period of time, and thus the + overhead caused by testing is reduced. After server timeouts, uptests are + performed by the separate server status thread, not by threads that have to + answer queries. Unresponsive servers with uptest=ping will not be marked down + immediately any more, but only after the ping test has definitely failed. + +I've also included a number of bug-fixes contained in a patch file supplied to +me by Thomas Moestl. In addition to the things I had already fixed, the +following issues are addressed: some memory leaks, dropping of root privileges +before calling uptest scripts in case pdnsd was started setuid root (which is a +bad idea anyway), passing on open fd's to uptests, integer overruns in the +status reporting code, fixing string passing from the lexer, more consistent +treatment of underscores in domain names. + +In addition to the things I've listed above, I've made various little changes to +fix minor bugs, improve efficiency or elegance, or simply to suit my my own +coding style. These changes are too numerous to list here, but some of them are +listed in the ChangeLog. Of course if you are really interested in the +nitty-gritty you can always compare the source of my version with Thomas' +original code. + +If you have any questions about the modifications I've made, you can send these +to . Questions about the original pdnsd version should +be sent to or . diff --git a/src/main/jni/pdnsd/THANKS b/src/main/jni/pdnsd/THANKS new file mode 100644 index 00000000..9c7e3bbc --- /dev/null +++ b/src/main/jni/pdnsd/THANKS @@ -0,0 +1,66 @@ +This is a (hopefully complete) list of people I have to thank for helping me +develop and improve pdnsd: + +David G. Andersen +Andrew M. Bishop +Daniel Black +Carsten Block +Stephan Boettcher +P.J. Bostley +Rodney Brown +Kevin A. Burton +Juliusz Chroboczek +Joachim Dorner +Frank Elsner +Christian Engstler +Stefan Erhardt +Bjoern Fischer +Stefan Förster +Bert Frederiks +Mike Hammer +Jonathan Hudson +Torben Janssen +Byrial Jensen +Olaf Kirch +Nikola Kotur +Kiyo Kelvin Lee +Bernd Leibing +Patrick Loschmidt +James MacLean +Sourav K. Mandal +Fraser McCrossan +Markus Mohr +Michael Müller +Gustavo Niemeyer +Alexandre Nunes +Wolfgang Ocker +Mahesh T. Pai +Bernhard Pelz +Soenke J. Peters +Erich Reitz +Paul A. Rombouts +Brian Schroeder +Roman Shterenzon +Daniel Smolik +Milan P. Stanic +Michael Steiner +Norbert Steinl +Andreas Steinmetz +Marko Stolle +Markus Storm +Michael Ströder +Thomas Stromberg +Alan Swanson +Lyonel Vincent +Eelco Vriezekolk +Paul Wagland +Sverker Wiberg +Michael Wiedmann +Ron Yorston +Nikita V. Youshchenko +Jan-Marek Glogowski +Thomas Cort +Pierre Habouzit +Dirk Armbrust +Georg Schwarz +Ashish Shukla diff --git a/src/main/jni/pdnsd/TODO b/src/main/jni/pdnsd/TODO new file mode 100644 index 00000000..9dd1e479 --- /dev/null +++ b/src/main/jni/pdnsd/TODO @@ -0,0 +1,13 @@ +- Implement a reference counter to ensure that newly entered records are not + purged immediately (really needed?) +- Perhaps do a two-step form of recursive query: first query those servers we + have got cached, then (if unsuccessful) look the others up and query again. + The impact of this optimisation may not be very big, because all sane servers + give A records for NS records if possible. +- Test for compatibility on other Unix-like Systems other than the BSDs and + Linux; rewrite the functions in netdev.c and icmp.c for those OSs if + necessary. Also try to get compatibility for other compilers than gcc. +- Write an install rule for the Slackware start-up script. +- Update the FAQ. +- Implement DNSSEC support. Since version 1.2.9, pdnsd is able to cache the RR + types necessary for DNSSEC, but the resolver is not yet security aware. diff --git a/src/main/jni/pdnsd/version b/src/main/jni/pdnsd/version new file mode 100644 index 00000000..abbf2bc8 --- /dev/null +++ b/src/main/jni/pdnsd/version @@ -0,0 +1 @@ +1.2.9a-par diff --git a/src/main/jni/redsocks/README b/src/main/jni/redsocks/README new file mode 100755 index 00000000..237c88f3 --- /dev/null +++ b/src/main/jni/redsocks/README @@ -0,0 +1,200 @@ +This tool allows you to redirect any TCP connection to SOCKS or HTTPS +proxy using your firewall, so redirection is system-wide. + +Why is that useful? I can suggest following reasons: +* you use tor[1] and don't want any TCP connection to leak. +* you use DVB ISP and this ISP provides internet connectivity with some + special daemon that may be also called "Internet accelerator" and this + accelerator acts as proxy. Globax[2] is example of such an accelerator. + +Linux/iptables, OpenBSD/pf and FreeBSD/ipfw are supported. +Linux/iptables is well-tested, other implementations may have bugs, +your bugreports are welcome. + +Transocks[3] is alike project but it has noticable performance penality. + +Transsocks_ev[4] is alike project too, but it has no HTTPS-proxy support +and does not support authentication. + +Several Android apps also use redsocks under-the-hood: ProxyDroid[5][6] and +sshtunnel[7][8]. And that's over 100'000 downloads! Wow! + +[1] http://www.torproject.org +[2] http://www.globax.biz +[3] http://transocks.sourceforge.net/ +[4] http://oss.tiggerswelt.net/transocks_ev/ +[5] http://code.google.com/p/proxydroid/ +[6] https://market.android.com/details?id=org.proxydroid +[7] http://code.google.com/p/sshtunnel/ +[8] https://market.android.com/details?id=org.sshtunnel + + +Another related issue is DNS over TCP. Redsocks includes `dnstc' that is fake +and really dumb DNS server that returns "truncated answer" to every query via +UDP. RFC-compliant resolver should repeat same query via TCP in this case - so +the request can be redirected using usual redsocks facilities. + +Known compliant resolvers are: + * bind9 (server) + * dig, nslookup (tools based on bind9 code) +Known non-compliant resolvers are: + * eglibc resolver fails without any attempt to send request via TCP + * powerdns-recursor can't properly startup without UDP connectivity as it + can't load root hints + +On the other hand, DNS via TCP using bind9 may be painfully slow. If your bind9 +setup is really slow, you have at least two options: pdnsd[9] caching server +can run in TCP-only mode, ttdnsd[10][11] has no cache but can be useful for same +purpose. + +[9] http://www.phys.uu.nl/~rombouts/pdnsd.html +[10] http://www.mulliner.org/collin/ttdnsd.php +[11] https://gitweb.torproject.org/ioerror/ttdnsd.git + + +Features +======== + +Redirect any TCP connection to SOCKS4, SOCKS5 or HTTPS (HTTP/CONNECT) +proxy server. + +Login/password authentication is supported for SOCKS5/HTTPS connections. +SOCKS4 supports only username, password is ignored. for HTTPS, currently +only Basic and Digest scheme is supported. + +Redirect UDP packets via SOCKS5 proxy server. NB: UDP still goes via UDP, so +you can't relay UDP via OpenSSH. + +Sends "truncated reply" as an answer to UDP DNS queries. + +Redirect any HTTP connection to proxy that does not support transparent +proxying (e.g. old SQUID had broken `acl myport' for such connections). + + +License +======= + +All source code is licensed under Apache 2.0 license. +You can get a copy at http://www.apache.org/licenses/LICENSE-2.0.html + + +Packages +======== + * Archlinux: https://aur.archlinux.org/packages.php?ID=41765 + * Debian: http://packages.debian.org/search?searchon=names&keywords=redsocks + * Gentoo (pentoo overlay): https://code.google.com/p/pentoo/source/browse/portage/trunk/net-proxy/redsocks + * Gentoo (theebuilds overlay): http://code.google.com/p/theebuilds/source/browse/trunk/net-misc/redsocks + * Gentoo (zugaina overlay): http://gpo.zugaina.org/net-proxy/redsocks + * Ubuntu: http://packages.ubuntu.com/search?searchon=names&keywords=redsocks + + +Compilation +=========== + +libevent[5] is required. + +gcc and clang are supported right now, other compilers can be used +but may require some code changes. + +Compilation is as easy as running `make', there is no `./configure' magic. + +GNU Make works, other implementations of make were not tested. + +[5] http://libevent.org/ || http://www.monkey.org/~provos/libevent/ + + +Running +======= + +Program has following command-line options: + -c sets proper path to config file ("./redsocks.conf" is default one) + -t tests config file syntax + -p set a file to write the getpid() into + +Following signals are understood: +SIGUSR1 dumps list of connected clients to log +SIGTERM and SIGINT terminates daemon, all active connections are closed + +You can see configuration file example in redsocks.conf.example + + +iptables example +================ + +You have to build iptables with connection tracking and REDIRECT target. + +# Create new chain +root# iptables -t nat -N REDSOCKS + +# Ignore LANs and some other reserved addresses. +# See http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses +# and http://tools.ietf.org/html/rfc5735 for full list of reserved networks. +root# iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN +root# iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN +root# iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN +root# iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN +root# iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN +root# iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN +root# iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN +root# iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN + +# Anything else should be redirected to port 12345 +root# iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345 + +# Any tcp connection made by `luser' should be redirected. +root# iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner luser -j REDSOCKS + +# You can also control that in more precise way using `gid-owner` from +# iptables. +root# groupadd socksified +root# usermod --append --groups socksified luser +root# iptables -t nat -A OUTPUT -p tcp -m owner --gid-owner socksified -j REDSOCKS + +# Now you can launch your specific application with GID `socksified` and it +# will be... socksified. See following commands (numbers may vary). +# Note: you may have to relogin to apply `usermod` changes. +luser$ id +uid=1000(luser) gid=1000(luser) groups=1000(luser),1001(socksified) +luser$ sg socksified -c id +uid=1000(luser) gid=1001(socksified) groups=1000(luser),1001(socksified) +luser$ sg socksified -c "firefox" + +# If you want to configure socksifying router, you should look at +# doc/iptables-packet-flow.png and doc/iptables-packet-flow-ng.png +# Note, you should have proper `local_ip' value to get external packets with +# redsocks, default 127.0.0.1 will not go. See iptables(8) manpage regarding +# REDIRECT target for details. +# Depending on your network configuration iptables conf. may be as easy as: +root# iptables -t nat -A PREROUTING --in-interface eth_int -p tcp -j REDSOCKS + +Note about GID-based redirection +======== +Keep in mind, that changed GID affects filesystem permissions, so if your +application creates some files, the files will be created with luser:socksified +owner/group. So, if you're not the only user in the group `socksified` and your +umask allows to create group-readable files and your directory permissions, and +so on, blah-blah, etc. THEN you may expose your files to another user. +Ok, you have been warned. + +Homepage +======== + +http://darkk.net.ru/redsocks/ + +Mailing list: redsocks@librelist.com + +Mailing list also has archives[1]. + +[1] http://librelist.com/browser/redsocks/ + + +TODO +==== + +Test OpenBSD (pf) and FreeBSD (ipfw) and write setup examples for those +firewall types. + + +Author +====== +This program was written by Leonid Evdokimov diff --git a/src/main/jni/redsocks/README.html b/src/main/jni/redsocks/README.html new file mode 100755 index 00000000..974d9074 --- /dev/null +++ b/src/main/jni/redsocks/README.html @@ -0,0 +1,237 @@ + + + + + +redsocks - transparent socks redirector + + + +

redsocks - transparent socks redirector

+ + +
+ +

This tool allows you to redirect any TCP connection to SOCKS or HTTPS +proxy using your firewall, so redirection is system-wide.

+ +

Why is that useful? I can suggest following reasons:

+
    +
  • you use tor and don't want any TCP connection to leak
  • +
  • you use DVB ISP and this ISP provides internet connectivity with some + special daemon that may be also called "Internet accelerator" and this + accelerator acts as proxy. Globax is example of such an accelerator
  • +
+ +

Linux/iptables, OpenBSD/pf and FreeBSD/ipfw are supported. +Linux/iptables is well-tested, other implementations may have bugs, +your bugreports are welcome.

+ +

Transocks is alike project but it has noticable performance penality.

+ +

Transsocks_ev is alike project too, but it has no HTTPS-proxy support +and does not support authentication.

+ +

Several Andoird apps also use redsocks under-the-hood: ProxyDroid (@AndroidMarket) and +sshtunnel (@AndroidMarket). And that's over 100'000 downloads! Wow!

+ +

Another related issue is DNS over TCP. Redsocks includes `dnstc' that is fake +and really dumb DNS server that returns "truncated answer" to every query via +UDP. RFC-compliant resolver should repeat same query via TCP in this case - so +the request can be redirected using usual redsocks facilities.

+ +

Known compliant resolvers are:

+
    +
  • bind9 (server)
  • +
  • dig, nslookup (tools based on bind9 code)
  • +
+

Known non-compliant resolvers are:

+
    +
  • eglibc resolver fails without any attempt to send request via TCP
  • +
  • powerdns-recursor can't properly startup without UDP connectivity as it + can't load root hints
  • +
+ +

On the other hand, DNS via TCP using bind9 may be painfully slow. If your bind9 +setup is really slow, you have at least two options: pdnsd caching server +can run in TCP-only mode, ttdnsd (git repo) has no cache but can be useful for same +purpose.

+ +

Features

+ +

Redirect any TCP connection to SOCKS4, SOCKS5 or HTTPS (HTTP/CONNECT) +proxy server.

+ +

Login/password authentication is supported for SOCKS5/HTTPS connections. +SOCKS4 supports only username, password is ignored. for HTTPS, currently +only Basic and Digest scheme is supported.

+ +

Redirect UDP packets via SOCKS5 proxy server. NB: UDP still goes via UDP, so +you can't relay UDP via OpenSSH.

+ +

Sends "truncated reply" as an answer to UDP DNS queries.

+ +

Redirect any HTTP connection to proxy that does not support transparent +proxying (e.g. old SQUID had broken `acl myport' for such connections).

+ + +

License

+ +

All source code is licensed under Apache 2.0 license.

+

You can get a copy at http://www.apache.org/licenses/LICENSE-2.0.html

+ + +

Packages

+ + + +

Compilation

+ +

libevent is required.

+ +

gcc is only supported compiler right now, other compilers can be used +but may require some code changes.

+ +

Compilation is as easy as running `make', there is no `./configure' magic.

+ +

GNU Make works, other implementations of make were not tested.

+ + +

Running

+ +

Program has following command-line options:
+-c sets proper path to config file ("./redsocks.conf" is default one)
+-t tests config file syntax
+-p set a file to write the getpid() into

+ +

Following signals are understood:
+SIGUSR1 dumps list of connected clients to log
+SIGTERM and SIGINT terminates daemon, all active connections are closed

+ +

You can see configuration file example in redsocks.conf.example

+ + +

iptables example

+ +

You have to build iptables with connection tracking and REDIRECT target.

+ +
+# Create new chain
+root# iptables -t nat -N REDSOCKS
+
+# Ignore LANs and some other reserved addresses.
+# See Wikipedia and RFC5735 for full list of reserved networks.
+root# iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
+root# iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
+root# iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
+root# iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
+root# iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
+root# iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
+root# iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
+root# iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
+
+# Anything else should be redirected to port 12345
+root# iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
+
+# Any tcp connection made by `luser' should be redirected.
+root# iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner luser -j REDSOCKS
+
+# You can also control that in more precise way using `gid-owner` from
+# iptables.
+root# groupadd socksified
+root# usermod --append --groups socksified luser
+root# iptables -t nat -A OUTPUT -p tcp -m owner --gid-owner socksified -j REDSOCKS
+
+# Now you can launch your specific application with GID `socksified` and it
+# will be... socksified. See following commands (numbers may vary).
+# Note: you may have to relogin to apply `usermod` changes.
+luser$ id
+uid=1000(luser) gid=1000(luser) groups=1000(luser),1001(socksified)
+luser$ sg socksified -c id
+uid=1000(luser) gid=1001(socksified) groups=1000(luser),1001(socksified)
+luser$ sg socksified -c "firefox"
+
+# If you want to configure socksifying router, you should look at
+# doc/iptables-packet-flow.png and doc/iptables-packet-flow-ng.png
+# Note, you should have proper `local_ip' value to get external packets with
+# redsocks, default 127.0.0.1 will not go. See iptables(8) manpage regarding
+# REDIRECT target for details.
+# Depending on your network configuration iptables conf. may be as easy as:
+root# iptables -t nat -A PREROUTING --in-interface eth_int -p tcp -j REDSOCKS
+
+ +

Note about GID-based redirection

+

+Keep in mind, that changed GID affects filesystem permissions, so if your +application creates some files, the files will be created with luser:socksified +owner/group. So, if you're not the only user in the group `socksified` and your +umask allows to create group-readable files and your directory permissions, and +so on, blah-blah, etc. THEN you may expose your files to another user. +

+

+Ok, you have been warned. +

+ +

Homepage

+ +

Homepage: http://darkk.net.ru/redsocks/

+ +

Mailing list: redsocks@librelist.com

+ +

Mailing list also has archives.

+ + +

TODO

+ +
    +
  • Test OpenBSD (pf) and FreeBSD (ipfw) and write setup examples for those + firewall types.
  • +
+ + +

Author

+This program was written by Leonid Evdokimov. + + + + +
+ (~~~~~~~~~~\   __
+ | jabber:  )  /  \
+ | mailto: (  /|oo \
+  \_________\(_|  /_)
+              _ @/_ \
+             |     | \   \\
+      leon   | (*) |  \   ))  darkk.net.ru
+             |__U__| /  \//
+              _//|| _\   /
+             (_/(_|(____/
+                         Valid CSS!
+                         Valid XHTML 1.0 Transitional
+
+ + + +