add missing license files
This commit is contained in:
@@ -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 <io.h> 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 <ev.h>.
|
||||
- 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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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 <provos@citi.umich.edu>
|
||||
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 <dugsong@monkey.org>
|
||||
Copyright (c) 1993 The Regents of the University of California.
|
||||
|
||||
strlcpy.c:
|
||||
Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
|
||||
win32select.c:
|
||||
Copyright (c) 2003 Michael A. Davis <mike@datanerds.net>
|
||||
|
||||
evport.c:
|
||||
Copyright (c) 2007 Sun Microsystems
|
||||
|
||||
ht-internal.h:
|
||||
Copyright (c) 2002 Christopher Clark
|
||||
|
||||
minheap-internal.h:
|
||||
Copyright (c) 2006 Maxim Yegorushkin <maxim.yegorushkin@gmail.com>
|
||||
|
||||
==============================
|
||||
|
||||
The arc4module is available under the following, sometimes called the
|
||||
"OpenBSD" license:
|
||||
|
||||
Copyright (c) 1996, David Mazieres <dm@uun.org>
|
||||
Copyright (c) 2008, Damien Miller <djm@openbsd.org>
|
||||
|
||||
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.
|
||||
|
||||
@@ -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.
|
||||
@@ -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!
|
||||
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
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.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
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:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
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
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
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
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
@@ -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.
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 <tmoestl@gmx.net>
|
||||
|
||||
|
||||
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
|
||||
@@ -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 <p.a.rombouts@home.nl>. Questions about the original (unmaintained) pdnsd
|
||||
version should be sent to <tmoestl@gmx.net> or <t.moestl@tu-bs.de>.
|
||||
@@ -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 <path_to_patch>/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=<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 <prefix>".
|
||||
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 <p.a.rombouts@home.nl>. Questions about the original pdnsd version should
|
||||
be sent to <tmoestl@gmx.net> or <t.moestl@tu-bs.de>.
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -0,0 +1 @@
|
||||
1.2.9a-par
|
||||
Executable
+200
@@ -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 <leon@darkk.net.ru>
|
||||
Executable
+237
@@ -0,0 +1,237 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||
<link rel="stylesheet" type="text/css" href="../site.css" />
|
||||
<title>redsocks - transparent socks redirector</title>
|
||||
</head>
|
||||
<body>
|
||||
<!-- Intro -->
|
||||
<h1>redsocks - transparent socks redirector</h1>
|
||||
<div class="navi">
|
||||
<a href="../">darkk's homepage</a>
|
||||
<a href="http://github.com/darkk/redsocks/tree/master">download source code</a>
|
||||
</div>
|
||||
|
||||
<hr/>
|
||||
|
||||
<p>This tool allows you to redirect any TCP connection to SOCKS or HTTPS
|
||||
proxy using your firewall, so redirection is system-wide.</p>
|
||||
|
||||
<p>Why is that useful? I can suggest following reasons:</p>
|
||||
<ul>
|
||||
<li>you use <a href="http://www.torproject.org">tor</a> and don't want any TCP connection to leak</li>
|
||||
<li>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. <a href="http://www.globax.biz">Globax</a> is example of such an accelerator</li>
|
||||
</ul>
|
||||
|
||||
<p>Linux/iptables, OpenBSD/pf and FreeBSD/ipfw are supported.
|
||||
Linux/iptables is well-tested, other implementations may have bugs,
|
||||
your bugreports are welcome.</p>
|
||||
|
||||
<p><a href="http://transocks.sourceforge.net/">Transocks</a> is alike project but it has noticable performance penality.</p>
|
||||
|
||||
<p><a href="http://oss.tiggerswelt.net/transocks_ev/">Transsocks_ev</a> is alike project too, but it has no HTTPS-proxy support
|
||||
and does not support authentication.</p>
|
||||
|
||||
<p>Several Andoird apps also use redsocks under-the-hood: <a href="http://code.google.com/p/proxydroid/">ProxyDroid</a> (<a href="https://market.android.com/details?id=org.proxydroid">@AndroidMarket</a>) and
|
||||
<a href="http://code.google.com/p/sshtunnel/">sshtunnel</a> (<a href="https://market.android.com/details?id=org.sshtunnel">@AndroidMarket</a>). And that's over 100'000 downloads! Wow!</p>
|
||||
|
||||
<p>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.</p>
|
||||
|
||||
<p>Known compliant resolvers are:</p>
|
||||
<ul>
|
||||
<li>bind9 (server)</li>
|
||||
<li>dig, nslookup (tools based on bind9 code)</li>
|
||||
</ul>
|
||||
<p>Known non-compliant resolvers are:</p>
|
||||
<ul>
|
||||
<li>eglibc resolver fails without any attempt to send request via TCP</li>
|
||||
<li>powerdns-recursor can't properly startup without UDP connectivity as it
|
||||
can't load root hints</li>
|
||||
</ul>
|
||||
|
||||
<p>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: <a href="http://www.phys.uu.nl/~rombouts/pdnsd.html">pdnsd</a> caching server
|
||||
can run in TCP-only mode, <a href="http://www.mulliner.org/collin/ttdnsd.php">ttdnsd</a> (<a href="https://gitweb.torproject.org/ioerror/ttdnsd.git">git repo</a>) has no cache but can be useful for same
|
||||
purpose.</p>
|
||||
|
||||
<h2>Features</h2>
|
||||
|
||||
<p>Redirect any TCP connection to SOCKS4, SOCKS5 or HTTPS (HTTP/CONNECT)
|
||||
proxy server.</p>
|
||||
|
||||
<p>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.</p>
|
||||
|
||||
<p>Redirect UDP packets via SOCKS5 proxy server. NB: UDP still goes via UDP, so
|
||||
you can't relay UDP via OpenSSH.</p>
|
||||
|
||||
<p>Sends "truncated reply" as an answer to UDP DNS queries.</p>
|
||||
|
||||
<p>Redirect any HTTP connection to proxy that does not support transparent
|
||||
proxying (e.g. old SQUID had broken `acl myport' for such connections).</p>
|
||||
|
||||
|
||||
<h2>License</h2>
|
||||
|
||||
<p>All source code is licensed under Apache 2.0 license.</p>
|
||||
<p>You can get a copy at <a href="http://www.apache.org/licenses/LICENSE-2.0.html">http://www.apache.org/licenses/LICENSE-2.0.html</a></p>
|
||||
|
||||
|
||||
<h2>Packages</h2>
|
||||
<ul>
|
||||
<li><img src="http://www.archlinux.org/favicon.ico" alt="" />
|
||||
<a href="https://aur.archlinux.org/packages.php?ID=41765">Archlinux AUR</a></li>
|
||||
|
||||
<li><img src="http://www.debian.org/favicon.ico" alt="" />
|
||||
<a href="http://packages.debian.org/search?searchon=names&keywords=redsocks">Debian</a></li>
|
||||
|
||||
<li><img src="http://www.gentoo.org/favicon.ico" alt="" />
|
||||
<a href="https://code.google.com/p/pentoo/source/browse/portage/trunk/net-proxy/redsocks">Gentoo (pentoo overlay)</a></li>
|
||||
|
||||
<li><img src="http://www.gentoo.org/favicon.ico" alt="" />
|
||||
<a href="http://code.google.com/p/theebuilds/source/browse/trunk/net-misc/redsocks">Gentoo (theebuilds overlay)</a></li>
|
||||
|
||||
<li><img src="http://www.gentoo.org/favicon.ico" alt="" />
|
||||
<a href="http://gpo.zugaina.org/net-proxy/redsocks">Gentoo (zugaina overlay)</a></li>
|
||||
|
||||
<li><img src="http://www.ubuntu.com/sites/all/themes/ubuntu10/favicon.ico" alt="" />
|
||||
<a href="http://packages.ubuntu.com/search?searchon=names&keywords=redsocks">Ubuntu</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Compilation</h2>
|
||||
|
||||
<p><a href="http://libevent.org/">libevent</a> is required.</p>
|
||||
|
||||
<p>gcc is only supported compiler right now, other compilers can be used
|
||||
but may require some code changes.</p>
|
||||
|
||||
<p>Compilation is as easy as running `make', there is no `./configure' magic.</p>
|
||||
|
||||
<p>GNU Make works, other implementations of make were not tested.</p>
|
||||
|
||||
|
||||
<h2>Running</h2>
|
||||
|
||||
<p>Program has following command-line options:<br/>
|
||||
-c sets proper path to config file ("./redsocks.conf" is default one)<br/>
|
||||
-t tests config file syntax<br/>
|
||||
-p set a file to write the getpid() into</p>
|
||||
|
||||
<p>Following signals are understood:<br/>
|
||||
SIGUSR1 dumps list of connected clients to log<br/>
|
||||
SIGTERM and SIGINT terminates daemon, all active connections are closed</p>
|
||||
|
||||
<p>You can see configuration file example in redsocks.conf.example</p>
|
||||
|
||||
|
||||
<h2>iptables example</h2>
|
||||
|
||||
<p>You have to build iptables with connection tracking and REDIRECT target.</p>
|
||||
|
||||
<pre>
|
||||
# Create new chain
|
||||
<strong>root#</strong> <code>iptables -t nat -N REDSOCKS</code>
|
||||
|
||||
# Ignore LANs and some other reserved addresses.
|
||||
# See <a href="http://en.wikipedia.org/wiki/Reserved_IP_addresses#Reserved_IPv4_addresses">Wikipedia</a> and <a href="http://tools.ietf.org/html/rfc5735">RFC5735</a> for full list of reserved networks.
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN</code>
|
||||
|
||||
# Anything else should be redirected to port 12345
|
||||
<strong>root#</strong> <code>iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345</code>
|
||||
|
||||
# Any tcp connection made by `luser' should be redirected.
|
||||
<strong>root#</strong> <code>iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner luser -j REDSOCKS</code>
|
||||
|
||||
# You can also control that in more precise way using `gid-owner` from
|
||||
# iptables.
|
||||
<strong>root#</strong> <code>groupadd socksified</code>
|
||||
<strong>root#</strong> <code>usermod --append --groups socksified luser</code>
|
||||
<strong>root#</strong> <code>iptables -t nat -A OUTPUT -p tcp -m owner --gid-owner socksified -j REDSOCKS</code>
|
||||
|
||||
# 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.
|
||||
<strong>luser$</strong> <code>id</code>
|
||||
uid=1000(luser) gid=1000(luser) groups=1000(luser),1001(socksified)
|
||||
<strong>luser$</strong> <code>sg socksified -c id</code>
|
||||
uid=1000(luser) gid=1001(socksified) groups=1000(luser),1001(socksified)
|
||||
<strong>luser$</strong> <code>sg socksified -c "firefox"</code>
|
||||
|
||||
# If you want to configure socksifying router, you should look at
|
||||
# <a href="doc/iptables-packet-flow.png">doc/iptables-packet-flow.png</a> and <a href="doc/iptables-packet-flow-ng.png">doc/iptables-packet-flow-ng.png</a>
|
||||
# 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
|
||||
# <a href="http://dev.medozas.de/files/xtables/iptables.html#76">REDIRECT target</a> for details.
|
||||
# Depending on your network configuration iptables conf. may be as easy as:
|
||||
<strong>root#</strong> <code>iptables -t nat -A PREROUTING --in-interface eth_int -p tcp -j REDSOCKS</code>
|
||||
</pre>
|
||||
|
||||
<h3>Note about GID-based redirection</h3>
|
||||
<p>
|
||||
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.
|
||||
</p>
|
||||
<p>
|
||||
Ok, you have been warned.
|
||||
</p>
|
||||
|
||||
<h2>Homepage</h2>
|
||||
|
||||
<p>Homepage: <a href="http://darkk.net.ru/redsocks/">http://darkk.net.ru/redsocks/</a></p>
|
||||
|
||||
<p>Mailing list: <a href="mailto:redsocks@librelist.com">redsocks@librelist.com</a></p>
|
||||
|
||||
<p>Mailing list also has <a href="http://librelist.com/browser/redsocks/">archives</a>.</p>
|
||||
|
||||
|
||||
<h2>TODO</h2>
|
||||
|
||||
<ul>
|
||||
<li>Test OpenBSD (pf) and FreeBSD (ipfw) and write setup examples for those
|
||||
firewall types.</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Author</h2>
|
||||
This program was written by Leonid Evdokimov.
|
||||
|
||||
|
||||
<!-- Outro -->
|
||||
<a name="address"></a>
|
||||
<pre>
|
||||
(~~~~~~~~~~\ __
|
||||
| jabber: ) / \
|
||||
| mailto: ( /|oo \
|
||||
\_________\(_| /_)
|
||||
_ @/_ \
|
||||
| | \ \\
|
||||
leon | (*) | \ )) darkk.net.ru
|
||||
|__U__| / \//
|
||||
_//|| _\ /
|
||||
(_/(_|(____/
|
||||
<a href="http://jigsaw.w3.org/css-validator/check/referer">Valid CSS!</a>
|
||||
<a href="http://validator.w3.org/check?uri=referer">Valid XHTML 1.0 Transitional</a>
|
||||
</pre>
|
||||
<!-- /Outro -->
|
||||
<!-- vim:set tabstop=2 softtabstop=2 shiftwidth=2: -->
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user