Closed Bug 356104 Opened 19 years ago Closed 15 years ago

Necko resolver code should support more DNS record types

Categories

(Core :: Networking, enhancement)

enhancement
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 545866

People

(Reporter: usenet, Unassigned)

Details

At the moment, the Necko code only seems to support looking up A and AAAA records: more advanced DNS functionality needs the ability to look up other DNS record types, such as TXT, NAPTR and SRV records. However, this requires a full DNS resolver implementation, which is a non-trivial exercise to implement, since it will need probably to support things like EDNS, DNS-over-TCP, and so on. Rather than write a DNS library from scratch, it is probably best to try to find a capable, modern, well-debugged portable DNS resolver library that is under a licence that is compatible with the Mozilla licencing policy, preferably with built-in support for asynchrony.
Blocks: 237820
Product: Firefox → Core
QA Contact: general → general
Component: General → Networking
QA Contact: general → networking
Here's a start on listing possible candidates for a more-capable DNS resolver; of these, only ARES and skadns have very permissive (MIT/X, BSD) licenses: GPL'd libraries would need permission of the original authors for multi-licensing. Name What Language Author URL Licence Notes/possible drawbacks adns asynchronous resolver library C Ian Jackson http://www.chiark.greenend.org.uk/~ian/adns/ GPLv2 or later No IPv6... Ares asynchronous resolver library C Greg Hudson ftp://athena-dist.mit.edu/pub/ATHENA/ares/ MIT/X licence ? Poslib resolver libarary and authoritative-server C++ Meilof Veeningen http://posadis.sourceforge.net/poslib/ GNU GPLv2 or later ? RULI Resolver User Layer Interface -- includes asynch stub resolver C Everton da Silva Marques GPL http://www.nongnu.org/ruli/ mainly designed to support SRV records.. skadns asynchronous stub resolver C Laurent G. Bercot http://www.skarnet.org/software/skadns/ Original BSD licence "uses separate process" for asynch stuff -- ie non-threaded?
Blocks: 356150
is there a point in keeping this bug in addition to bug 14328? (note also bug 14328 comment 41)
Blocks: 14328
No longer blocks: 356150
Yes: SRV records are just one extra record type that is needed: there are also NAPTR records, TXT records, MX records, and so on... implementing any of these will require a new general-purpose DNS resolver framework.
In my company, we're using C-Ares, a fork from Ares. We're using it for SRV and NAPTR lookups, and as a base for a DNS-cache. I highly recommend it. http://daniel.haxx.se/projects/c-ares/ It has the same MIT-license, and is better maintained. It also has IPv6 and 64bit support.
Jo, that's good to know; I'll take a look. Here are another two: Librascal Asynch I/O framework with DNS lookups, does SRV and IPv6 lookups C++, with a C API available The Faerion Team http://faerion.sourceforge.net/doc/librascal/ GNU LGPL Libsrv "Easy netconnect library w/ DNS SRV RR" C (but also Python[?] if so, it's no use for Moz projects) http://libsrv.sourceforge.net/ BSD License
And, in addition: Libbind Resolver library from ISC BIND C Internet Software Consortium http://www.isc.org/index.pl?/sw/bind/ BSD-like Seems to work on Windows, Mac OS X, Linux and other POSIX-like systems Is it asynchronous? Does its license contain an advertising clause?
libdjbdns Replacement for libbind C DJ Bernstein http://cr.yp.to/djbdns.html Public domain DJB has a good record for producing secure software, and PD status means no licensing problems I like this: I will take a closer look at it...
Judging by the proposed patch for bug 14328, the plan there is to use the built-in support for the res_query() interface in glibc for POSIX systems, and the DnsQuery_A interface in Win32. My impression from Googling around is that the glibc code is based on the BIND stub resolver libraries, and that the glibc 2.2 version is now thread-safe, although other previous versions were not.
I've added a note to bug 14328 suggesting that if the SRV support proposed there should be implemented in a generic way at its lowest level, effectively closing this bug at the same time, whilst avoiding code duplication.
Blocks: 342242
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → DUPLICATE
No longer blocks: 14328, 342242
No longer blocks: 237820
You need to log in before you can comment on or make changes to this bug.