
                                 nss-mdns 0.10

   Copyright 2004-2007 Lennart Poettering <mzaffzqaf (at) 0pointer (dot)
   de>
     * [1]License
     * [2]News
     * [3]Overview
     * [4]Current Status
     * [5]Documentation
     * [6]Requirements
     * [7]Installation
     * [8]Acknowledgements
     * [9]Download

License

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as
   published by the Free Software Foundation; either version 2 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
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with this program; if not, write to the Free Software
   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

News

   Sat May 12 2007:

   [10]Version 0.10 released. Changes include: Ported to FreeBSD;
   alignment fixes for SPARC.

   Mon Jan 1 2007:

   [11]Version 0.9 released. Changes include: Make most shared library
   symbols private to not conflict with any symbols of the program we're
   loaded into. Fix a potential endless loop in the mDNS packet parsing
   code.

   Please note that due to security reasons from this release on the
   minimal mDNS stack included in nss-mdns (dubbed "legacy") is no longer
   built by default. Thus, nss-mdns will not work unless [12]Avahi is
   running! That makes Avahi essentially a hard dependency of nss-mdns.
   Pass --enable-legacy to reenable the mini mDNS stack again. Please
   note as well that this release does not honour /etc/resolv.conf domain
   search lists by default anymore. It created a lot of problems and was
   never recommended anyway. You may reenable this functionality by
   passing --enable-search-domains.

   Sat Apr 29 2006:

   [13]Version 0.8 released. Changes include: Build time option to
   disable "legacy unicast" mDNS requests, i.e. resolve exclusively with
   Avahi; build a special _minimal flavour of the shared objects to
   minimize unnecessary name lookup timeouts; fix IPv6 resolving when
   using Avahi.

   Please note that starting with nss-mdns 0.8 we encourage you to use a
   different /etc/nsswitch.conf configuration line. See below for more
   information!

   Sat Nov 19 2005:

   [14]Version 0.7 released. Changes include: Portability patch for ARM
   from Philipp Zabel; make sure not to print any messages to STDERR;
   deal with OOM situations properly; if multiple addresses are assigned
   to the same interface make sure to send a query packet only once;
   other cleanups

   Sun Aug 21 2005:

   [15]Version 0.6 released. Changes include: honour search list in
   /etc/resolv.conf; try to contact [16]Avahi for resolving.

   Sat Jun 4 2005:

   [17]Version 0.5 released. Changes include: only lookup hostnames
   ending in .local; add support for a configuration file
   (/etc/mdns.allow) to allow lookups for other names.

   Sun May 15 2005:

   [18]Version 0.4 released. Changes include: small portability fix for
   big endian architectures; send "legacy unicast" packets instead of
   normal mDNS packets (this should reduce traffic and improve response
   time)

   Jan Sun 16 2005:

   [19]Version 0.3 released. Changes include: add Debianization; use
   ip6.arpa instead of ip6.int for reverse IPv6 lookups.

   Fri Dec 17 2004:

   [20]Version 0.2 released. Changes include: send mDNS queries on every
   interface that supports multicasts, instead of only the one with the
   default route, making nss-mdns more robust on multi-homed hosts; gcc
   2.95 compatiblity.

   Mon Dec 6 2004:

   [21]Version 0.1 released

Overview

   nss-mdns is a plugin for the GNU Name Service Switch (NSS)
   functionality of the GNU C Library (glibc) providing host name
   resolution via [22]Multicast DNS (aka Zeroconf, aka Apple Rendezvous,
   aka Apple Bonjour), effectively allowing name resolution by common
   Unix/Linux programs in the ad-hoc mDNS domain .local.

   nss-mdns provides client functionality only, which means that you have
   to run a mDNS responder daemon seperately from nss-mdns if you want to
   register the local host name via mDNS. I recommend [23]Avahi.

   nss-mdns is very lightweight (9 KByte stripped binary .so compiled
   with -DNDEBUG=1 -Os on i386, gcc 4.0), has no dependencies besides the
   glibc and requires only minimal configuration.

   By default nss-mdns tries to contact a running [24]avahi-daemon for
   resolving host names and addresses and making use of its superior
   record cacheing. Optionally nss-mdns can be compiled with a mini mDNS
   stack that can be used to resolve host names without a local Avahi
   installation. Both Avahi support and this mini mDNS stack are
   optional, however at least one of them needs to be enabled. If both
   are enabled a connection to Avahi is tried first, and if that fails
   the mini mDNS stack is used.

Current Status

   It works!

   If the mini MDNS stack is used, nss-mdns supports resolving IPv6
   addresses but does so via IPv4 multicasts only. If Avahi is used for
   resolving IPv6 is supported properly.

Documentation

   After compiling and installing nss-mdns you'll find six new NSS
   modules in /lib:
     * libnss_mdns.so.2
     * libnss_mdns4.so.2
     * libnss_mdns6.so.2
     * libnss_mdns_minimal.so.2
     * libnss_mdns4_minimal.so.2
     * libnss_mdns6_minimal.so.2

   libnss_mdns.so.2 resolves both IPv6 and IPv4 addresses,
   libnss_mdns4.so.2 only IPv4 addresses and libnss_mdns6.so.2 only IPv6
   addresses. Due to the fact that most mDNS responders only register
   local IPv4 addresses via mDNS, most people will want to use
   libnss_mdns4.so.2 exclusively. Using libnss_mdns.so.2 or
   libnss_mdns6.so.2 in such a situation causes long timeouts when
   resolving hosts since most modern Unix/Linux applications check for
   IPv6 addresses first, followed by a lookup for IPv4.

   libnss_mdns{4,6,}_minimal.so (new in version 0.8) is mostly identical
   to the versions without _minimal. However, they differ in one way. The
   minimal versions will always deny to resolve host names that don't end
   in .local or addresses that aren't in the range 169.254.x.x (the range
   used by [25]IPV4LL/APIPA/RFC3927.) Combining the _minimal and the
   normal NSS modules allows us to make mDNS authoritative for Zeroconf
   host names and addresses (and thus creating no extra burden on DNS
   servers with always failing requests) and use it as fallback for
   everything else.

   To activate one of the NSS modules you have to edit /etc/nsswitch.conf
   and add mdns4 and mdns4_minimal (resp. mdns, mdns6) to the line
   starting with "hosts:". On Debian this looks like this:
# /etc/nsswitch.conf

passwd:         compat
group:          compat
shadow:         compat

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

   That's it. You should now be able to resolve hosts from the .local
   domain with all your applications. For a quick check use glibc's
   getent tool:
$ getent hosts foo.local
192.168.50.4    foo.local

   Replace foo whith a host name that has been registered with an mDNS
   responder. (Don't try to use the tools host or nslookup for these
   tests! They bypass the NSS and thus nss-mdns and issue their DNS
   queries directly.)

   If you run a firewall, don't forget to allow UDP traffic to the the
   mDNS multicast address 224.0.0.251 on port 5353.

   Please note: The line above makes nss-mdns authoritative for the
   .local domain. If you have a unicast DNS domain with the same name you
   will no longer be able to resolve hosts from it. mDNS and a unicast
   DNS domain named .local are inherently incompatible. Please contact
   your local admistrator and ask him to move to a different domain name
   since .local is to be used exclusively for Zeroconf technology.
   [26]Further information.

   Starting with version 0.5, nss-mdns has a simple configuration file
   /etc/mdns.allow for enabling name lookups via mDNS in other domains
   than .local. The file contains valid domain suffixes, seperated by
   newlines. Empty lines are ignored as are comments starting with #. To
   enable mDNS lookups of all names, regardless of the domain suffix add
   a line consisting of * only (similar to nss-mdns mode of operation of
   versions <= 0.4):
# /etc/mdns.allow
*

   If the configuration file is absent or unreadable nss-mdns behaves as
   if a configuration file with the following contents is read:
# /etc/mdns.allow
.local.
.local

   i.e. only hostnames ending with .local are resolved via mDNS.

   If the configuration file is existent but empty, mDNS name lookups are
   disabled completely. Please note that usually mDNS is not used for
   anything but .local, hence you usually don't want to touch this file.

Requirements

   Currently, nss-mdns is tested on Linux only. A fairly modern glibc
   installation with development headers (2.0 or newer) is required. Not
   suprisingly nss-mdns requires a kernel compiled with IPv4 multicasting
   support enabled. [27]Avahi is recommended for its superior cacheing
   capabilities and for security reasons. Unless you compile nss-mdns
   with --enable-legacy Avahi is a hard dependency when nss-mdns is used,
   however not a build-time requirement.

   nss-mdns was developed and tested on Debian GNU/Linux "testing" from
   December 2004, it should work on most other Linux distributions (and
   maybe Unix versions) since it uses GNU autoconf and GNU libtool for
   source code configuration and shared library management.

Installation

   As this package is made with the GNU autotools you should run
   ./configure inside the distribution directory for configuring the
   source tree. After that you should run make for compilation and make
   install (as root) for installation of nss-mdns.

Acknowledgements

   SHIROYAMA Takayuki, Anand Kumria and Bastien Nocera, Sjoerd Simons for
   patches.

   Sean Meiners for search list support.

   Philipp Zabel for ARM support.

   Bruce M Simpson for porting it to FreeBSD.

Download

   The newest release is always available from
   [28]http://0pointer.de/lennart/projects/nss-mdns/

   The current release is [29]0.10

   Get nss-mdns's development sources from the [30]Subversion
   [31]repository ([32]viewcvs):
svn checkout svn://svn.0pointer.de/nss-mdns/trunk nss-mdns

   You may find an up to date Debian package of nss-mdns on the
   [33]Debian package repository. Many other distributions ship it, too.

   If you want to be notified whenever I release a new version of this
   software use the subscription feature of [34]Freshmeat.
     _________________________________________________________________


    Lennart Poettering <mzaffzqaf (at) 0pointer (dot) de>, May 2007

   $Id: README.html.in 116 2007-05-12 14:54:24Z lennart $

References

   1. README#license
   2. README#news
   3. README#overview
   4. README#status
   5. README#documentation
   6. README#requirements
   7. README#installation
   8. README#acks
   9. README#download
  10. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.10.tar.gz
  11. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.9.tar.gz
  12. http://avahi.org/
  13. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.8.tar.gz
  14. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.7.tar.gz
  15. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.6.tar.gz
  16. http://avahi.org/
  17. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.5.tar.gz
  18. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.4.tar.gz
  19. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.3.tar.gz
  20. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.2.tar.gz
  21. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.1.tar.gz
  22. http://www.multicastdns.org/
  23. http://avahi.org/
  24. http://avahi.org/
  25. http://files.zeroconf.org/rfc3927.txt
  26. http://avahi.org/wiki/AvahiAndUnicastDotLocal
  27. http://avahi.org/
  28. http://0pointer.de/lennart/projects/nss-mdns/
  29. http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-0.10.tar.gz
  30. http://subversion.tigris.org/
  31. svn://svn.0pointer.de/nss-mdns
  32. http://0pointer.de/cgi-bin/viewcvs.cgi/?root=nss-mdns
  33. http://packages.debian.org/libnss-mdns
  34. http://freshmeat.net/projects/nss-mdns/
