|
GETRRSETBYNAME(3)
Contents
|
getrrsetbyname - retrieve DNS records
#include <netdb.h>
int
getrrsetbyname(const char *hostname, unsigned int rdclass,
unsigned int rdtype, unsigned int flags, struct
rrsetinfo **res);
void
freerrset(struct rrsetinfo *rrset);
getrrsetbyname() gets a set of resource records associated
with a
hostname, rdclass and rdtype. hostname is a pointer a to
null-terminated
string. The flags field is currently unused and must be zero.
After a successful call to getrrsetbyname(), *res is a
pointer to an
rrsetinfo structure, containing a list of one or more
rdatainfo structures
containing resource records and potentially another
list of
rdatainfo structures containing SIG resource records associated with
those records. The members rri_rdclass and rri_rdtype are
copied from
the parameters. rri_ttl and rri_name are properties of the
obtained
rrset. The resource records contained in rri_rdatas and
rri_sigs are in
uncompressed DNS wire format. Properties of the rdataset
are represented
in the rri_flags bitfield. If the RRSET_VALIDATED bit is
set, the data
has been DNSSEC validated and the signatures verified.
The following structures are used:
struct rdatainfo {
unsigned int rdi_length; /* length of
data */
unsigned char *rdi_data; /* record
data */
};
struct rrsetinfo {
unsigned int rri_flags; /*
RRSET_VALIDATED ... */
unsigned int rri_rdclass; /* class
number */
unsigned int rri_rdtype; /* RR type
number */
unsigned int rri_ttl; /* time to
live */
unsigned int rri_nrdatas; /* size of
rdatas array */
unsigned int rri_nsigs; /* size of
sigs array */
char *rri_name; /* canonical
name */
struct rdatainfo *rri_rdatas; /* individual records */
struct rdatainfo *rri_sigs; /* individual signatures */
};
All of the information returned by getrrsetbyname() is dynamically allocated:
the rrsetinfo and rdatainfo structures, and the
canonical host
name strings pointed to by the rrsetinfo structure. Memory
allocated for
the dynamically allocated structures created by a successful
call to
getrrsetbyname() is released by freerrset(). rrset is a
pointer to a
struct rrset created by a call to getrrsetbyname().
If the EDNS0 option is activated in resolv.conf(5),
getrrsetbyname() will
request DNSSEC authentication using the EDNS0 DNSSEC OK (DO)
bit.
getrrsetbyname() returns zero on success, and one of the
following error
codes if an error occurred:
ERRSET_NONAME the name does not exist
ERRSET_NODATA the name exists, but does not have data of
the desired
type
ERRSET_NOMEMORY memory could not be allocated
ERRSET_INVAL a parameter is invalid
ERRSET_FAIL other failure
resolver(3), resolv.conf(5), named(8)
getrrsetbyname() first appeared in OpenBSD 3.0. The API
first appeared
in ISC BIND version 9.
Jakob Schlyter <[email protected]>
The RRSET_VALIDATED flag in rri_flags is set if the AD (authenticated data)
bit in the DNS answer is set. This flag should not be
trusted unless
the transport between the nameserver and the resolver is secure (e.g.
IPsec, trusted network, loopback communication).
The data in *rdi_data should be returned in uncompressed
wire format.
Currently, the data is in compressed format and the caller
can't uncompress
since it doesn't have the full message.
OpenBSD 3.6 October 18, 2000
[ Back ] |