|
Network.DNS.ADNS | Portability | Haskell 2-pre | Stability | provisional | Maintainer | simons@cryp.to |
|
|
|
|
|
Description |
This module provides bindings to GNU ADNS, a domain name
resolver library written in C. Its source code, among
other things, is available at
http://www.gnu.org/software/adns/.
You will most likely not need this module directly;
Network.DNS provides a much nicer interface from the
Haskell world; this module contains mostly marshaling
code.
|
|
Synopsis |
|
|
|
|
Marshaled ADNS Data Types
|
|
|
|
|
|
|
|
|
|
|
Constructors | NoEnv | do not look at environment
| NoErrPrint | never print output to stderr (Debug overrides)
| NoServerWarn | do not warn to stderr about duff nameservers etc
| Debug | enable all output to stderr plus Debug msgs
| LogPid | include process id in diagnostic output
| NoAutoSys | do not make syscalls at every opportunity
| Eintr | allow adnsSynch to return eINTR
| NoSigPipe | application has SIGPIPE set to SIG_IGN, do not protect
| CheckC_EntEx | do consistency checks on entry/exit to adns functions
| CheckC_Freq | do consistency checks very frequently (slow!)
|
| Instances | |
|
|
|
Constructors | Search | use the searchlist
| UseVC | use a virtual circuit (TCP connection)
| Owner | fill in the owner field in the answer
| QuoteOk_Query | allow special chars in query domain
| QuoteOk_CName | allow special chars in CNAME we go via (default)
| QuoteOk_AnsHost | allow special chars in things supposed to be hostnames
| QuoteFail_CName | refuse if quote-req chars in CNAME we go via
| CName_Loose | allow refs to CNAMEs - without, get _s_cname
| CName_Forbid | don't follow CNAMEs, instead give _s_cname
|
| Instances | |
|
|
|
The record types we support.
| Constructors | | Instances | |
|
|
|
The status codes recognized by ADNS vary in different
versions of the library. So instead of providing an
Enum, the Status type contains the numeric value as
returned by ADNS itself. For common status codes, helper
functions like sOK or sNXDOMAIN are provided. The
functions adnsErrTypeAbbrev, adnsErrAbbrev, and
adnsStrerror can also be used to map these codes into
human readable strings.
| Constructors | | Instances | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Original definition:
typedef struct {
int len;
union {
struct sockaddr sa;
struct sockaddr_in inet;
} addr;
} adns_rr_addr;
Note: Anything but sockaddr_in will cause peek to call fail,
when marshaling this structure. poke is not defined.
|
|
|
|
|
|
|
|
|
|
|
|
|
Constructors | | Instances | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Original definition:
typedef struct {
char *host;
adns_status astatus;
int naddrs; /* temp fail => -1, perm fail => 0, s_ok => >0
adns_rr_addr *addrs;
} adns_rr_hostaddr;
The naddrs field is not available in RRHostAddr
because I couldn't see how that information wouldn't be
available in the astatus field too. If I missed
anything, please let me know.
Note: The data type should probably contain
HostAddress rather than RRAddr. I'm using the former
only because it has nicer output with show. poke is
not defined.
| Constructors | | Instances | |
|
|
|
Original definition:
typedef struct {
int i;
adns_rr_hostaddr ha;
} adns_rr_inthostaddr;
| Constructors | | Instances | |
|
|
|
Constructors | | Instances | |
|
|
|
Constructors | | Instances | |
|
|
|
This function parses the Response union found in
Answer. It cannot be defined via Storable because it
needs to know the type of the record to expect. This is,
by the way, the function to look at, if you want to add
support for additional RRType records.
|
|
ADNS Library Functions
|
|
|
Run the given IO computation with an initialized
resolver. As of now, the diagnose stream is always set to
System.IO.stderr. Initialize the library with NoErrPrint if you
don't wont to see any error output. All resources are
freed when adnsInit returns.
|
|
|
Similar to adnsInit, but reads the resolver
configuration from a string rather than from
/etc/resolv.conf. Supported are the usual commands:
nameserver, search, domain, sortlist, and
options.
Additionally, these non-standard commands may be used:
- clearnameservers: Clears the list of nameservers.
- include filename: The specified file will be read.
|
|
|
Perform a synchronous query for a record. In case of an
I/O error, an System.IO.Error.IOException is thrown.
If the query fails for other reasons, the Status code
in the Answer will signify that.
|
|
|
Submit an asynchronous query. The returned Query can
be tested for completion with adnsCheck.
|
|
|
Check the status of an asynchronous query. If the query
is complete, the Answer will be returned. The Query
becomes invalid after that.
|
|
|
Cancel an open Query.
|
|
|
Return the list of all currently open queries.
|
|
|
Find out which file descriptors ADNS is interested in
and when it would like to be able to time things out.
This is in a form suitable for use with poll.
On entry, fds should point to at least *nfds_io
structs. ADNS will fill up to that many structs with
information for poll, and record in *nfds_io how many
entries it actually used. If the array is too small,
*nfds_io will be set to the number required and
adnsBeforePoll will return eRANGE.
You may call adnsBeforePoll with fds==nullPtr and
*nfds_io==0, in which case ADNS will fill in the number
of fds that it might be interested in into *nfds_io and
return either 0 (if it is not interested in any fds) or
eRANGE (if it is).
Note that (unless now is 0) ADNS may acquire additional
fds from one call to the next, so you must put
adns_beforepoll in a loop, rather than assuming that the
second call (with the buffer size requested by the first)
will not return eRANGE.
ADNS only ever sets PollIn, PollOut and PollPri in
its Pollfd structs, and only ever looks at those bits.
PollPri is required to detect TCP Urgent Data (which
should not be used by a DNS server) so that ADNS can know
that the TCP stream is now useless.
In any case, *timeout_io should be a timeout value as
for poll, which ADNS will modify downwards as required.
If the caller does not plan to block, then *timeout_io
should be 0 on entry. Alternatively, timeout_io may be
0.
adnsBeforePoll will return 0 on success, and will not
fail for any reason other than the fds buffer being too
small (ERANGE).
This call will never actually do any I/O. If you supply
the current time it will not change the fds that ADNS is
using or the timeouts it wants.
In any case this call won't block.
|
|
|
Gives ADNS flow-of-control for a bit; intended for use
after poll. fds and nfds should be the results from
poll. Pollfd structs mentioning fds not belonging to
adns will be ignored.
|
|
|
Map a Status code to a human-readable error
description. For example:
*ADNS> adnsStrerror sNXDOMAIN >>= print
"No such domain"
Use this function with great care: It will crash the
process when called with a status code that ADNS doesn't
know about. So use it only to print values you got from
the resolver!
|
|
|
Map a Status code to a short error name. Don't use
this function to print a status code unless you've
obtained it from the resolver!
|
|
|
Map a Status code to a short description of the type
of error. Don't use this function to print a status code
unless you've obtained it from the resolver!
|
|
Unmarshaled Low-Level C Functions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Helper Functions
|
|
|
Internel helper function to handle result passing from
ADNS via Ptr (Ptr a), and to generate human-readable IO
exceptions in case of an error.
|
|
|
Map a list of flags (Enum types) into a CInt
suitable for adns calls.
|
|
Produced by Haddock version 2.4.2 |