Closed Bug 356104 Opened 18 years ago Closed 14 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: IDN
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: 14 years ago
Resolution: --- → DUPLICATE
No longer blocks: 14328, 342242
No longer blocks: IDN
You need to log in before you can comment on or make changes to this bug.