| Portability | ForeignFunctionInterface |
|---|---|
| Stability | provisional |
| Maintainer | simons@cryp.to |
ADNS.Base
Contents
Description
This module provides bindings to GNU ADNS, a domain name resolver library written in C. ADNS is available from http://www.gnu.org/software/adns/.
You will most likely not need this module directly: ADNS provides a simpler API for the Haskell world; this module contains mostly marshaling code.
- data OpaqueState
- type AdnsState = Ptr OpaqueState
- data OpaqueQuery
- type Query = Ptr OpaqueQuery
- data InitFlag
- = NoEnv
- | NoErrPrint
- | NoServerWarn
- | Debug
- | LogPid
- | NoAutoSys
- | Eintr
- | NoSigPipe
- | CheckC_EntEx
- | CheckC_Freq
- data QueryFlag
- = Search
- | UseVC
- | Owner
- | QuoteOk_Query
- | QuoteOk_CName
- | QuoteOk_AnsHost
- | QuoteFail_CName
- | CName_Loose
- | CName_Forbid
- data RRType
- newtype Status = StatusCode Int
- sOK :: Status
- sNOMEMORY :: Status
- sUNKNOWNRRTYPE :: Status
- sSYSTEMFAIL :: Status
- sMAX_LOCALFAIL :: Status
- sTIMEOUT :: Status
- sALLSERVFAIL :: Status
- sNORECURSE :: Status
- sINVALIDRESPONSE :: Status
- sUNKNOWNFORMAT :: Status
- sMAX_REMOTEFAIL :: Status
- sRCODESERVFAIL :: Status
- sRCODEFORMATERROR :: Status
- sRCODENOTIMPLEMENTED :: Status
- sRCODEREFUSED :: Status
- sRCODEUNKNOWN :: Status
- sMAX_TEMPFAIL :: Status
- sINCONSISTENT :: Status
- sPROHIBITEDCNAME :: Status
- sANSWERDOMAININVALID :: Status
- sANSWERDOMAINTOOLONG :: Status
- sINVALIDDATA :: Status
- sMAX_MISCONFIG :: Status
- newtype RRAddr = RRAddr HostAddress
- sQUERYDOMAINWRONG :: Status
- sQUERYDOMAININVALID :: Status
- sQUERYDOMAINTOOLONG :: Status
- sMAX_MISQUERY :: Status
- sNXDOMAIN :: Status
- sNODATA :: Status
- sMAX_PERMFAIL :: Status
- data RRHostAddr = RRHostAddr HostName Status [RRAddr]
- data RRIntHostAddr = RRIntHostAddr Int RRHostAddr
- data RRByteblock = RRByteblock Int (Ptr CChar)
- data RRSrvRaw = RRSrvRaw Int Int Int (Ptr CChar)
- data Answer = Answer {}
- data Response
- peekResp :: RRType -> Ptr b -> Int -> Int -> IO [Response]
- peekFQDNAndAdvance :: Ptr a -> Int -> IO (String, Ptr a)
- adnsInit :: [InitFlag] -> (AdnsState -> IO a) -> IO a
- adnsInitCfg :: [InitFlag] -> String -> (AdnsState -> IO a) -> IO a
- adnsSynch :: AdnsState -> String -> RRType -> [QueryFlag] -> IO Answer
- adnsSubmit :: AdnsState -> String -> RRType -> [QueryFlag] -> IO Query
- adnsCheck :: AdnsState -> Query -> IO (Maybe Answer)
- adnsWait :: AdnsState -> IO (Maybe (Query, Answer))
- adnsCancel :: Query -> IO ()
- adns_wait :: AdnsState -> Ptr Query -> Ptr (Ptr Answer) -> Ptr (Ptr a) -> IO CInt
- adnsQueries :: AdnsState -> IO [Query]
- adnsStrerror :: Status -> IO String
- adnsErrAbbrev :: Status -> IO String
- adnsErrTypeAbbrev :: Status -> IO String
- adns_init :: Ptr AdnsState -> CInt -> Ptr CFile -> IO CInt
- adns_init_strcfg :: Ptr AdnsState -> CInt -> Ptr CFile -> CString -> IO CInt
- adns_finish :: AdnsState -> IO ()
- adns_submit :: AdnsState -> CString -> CInt -> CInt -> Ptr a -> Ptr Query -> IO CInt
- adns_check :: AdnsState -> Ptr Query -> Ptr (Ptr Answer) -> Ptr (Ptr a) -> IO CInt
- adns_synchronous :: AdnsState -> CString -> CInt -> CInt -> Ptr (Ptr Answer) -> IO CInt
- adns_forallqueries_begin :: AdnsState -> IO ()
- adns_forallqueries_next :: AdnsState -> Ptr (Ptr a) -> IO Query
- adns_strerror :: CInt -> IO CString
- adns_errabbrev :: CInt -> IO CString
- adns_errtypeabbrev :: CInt -> IO CString
- wrapAdns :: (Ptr (Ptr b) -> IO CInt) -> (Ptr (Ptr b) -> IO a) -> IO a
- mkFlags :: Enum a => [a] -> CInt
Marshaled ADNS Data Types
data OpaqueState Source
type AdnsState = Ptr OpaqueStateSource
data OpaqueQuery Source
type Query = Ptr OpaqueQuerySource
Constructors
| NoEnv | do not look at environment |
| NoErrPrint | never print output to stderr ( |
| NoServerWarn | do not warn to stderr about duff nameservers etc |
| Debug | enable all output to stderr plus |
| LogPid | include process id in diagnostic output |
| NoAutoSys | do not make syscalls at every opportunity |
| 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!) |
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 |
The record types we support.
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
| StatusCode Int |
data RRHostAddr Source
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
| RRHostAddr HostName Status [RRAddr] |
Instances
data RRIntHostAddr Source
Original definition:
typedef struct {
int i;
adns_rr_hostaddr ha;
} adns_rr_inthostaddr;
Constructors
| RRIntHostAddr Int RRHostAddr |
Instances
data RRByteblock Source
Original definition:
typedef struct {
int len;
unsigned char *data;
} adns_rr_byteblock;
Constructors
| RRByteblock Int (Ptr CChar) |
Instances
Original definition:
typedef struct {
int priority, weight, port;
char *host;
} adns_rr_srvraw;
Constructors
| Answer | |
peekFQDNAndAdvance :: Ptr a -> Int -> IO (String, Ptr a)Source
This function parses a FQDN in uncompressed wire format and advances the pointer to the next byte after the parsed name.
ADNS Library Functions
adnsInit :: [InitFlag] -> (AdnsState -> IO a) -> IO aSource
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.
adnsInitCfg :: [InitFlag] -> String -> (AdnsState -> IO a) -> IO aSource
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.
adns_wait :: AdnsState -> Ptr Query -> Ptr (Ptr Answer) -> Ptr (Ptr a) -> IO CIntSource
Wait for the next Query to become available.
adnsQueries :: AdnsState -> IO [Query]Source
Return the list of all currently open queries.
adnsStrerror :: Status -> IO StringSource
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!
adnsErrAbbrev :: Status -> IO StringSource
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!
adnsErrTypeAbbrev :: Status -> IO StringSource
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
adns_finish :: AdnsState -> IO ()Source
adns_strerror :: CInt -> IO CStringSource
adns_errabbrev :: CInt -> IO CStringSource