## Name

lwres_getrrsetbyname, lwres_freerrset — retrieve DNS records

## Synopsis

    #include <lwres/netdb.h>

`int lwres_getrrsetbyname(` | const char * | hostname,
| unsigned int | rdclass,
| unsigned int | rdtype,
| unsigned int | flags,
| struct rrsetinfo ** | res`)`;

`void lwres_freerrset(` | struct rrsetinfo * | rrset`)`;

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 */
    };

## DESCRIPTION

`lwres_getrrsetbyname()` gets a set of resource records associated with a `hostname`, `class`, and `type`. `hostname` is a pointer a to null-terminated string. The `flags` field is currently unused and must be zero.

After a successful call to `lwres_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.

All of the information returned by `lwres_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 `lwres_getrrsetbyname()` is released by `lwres_freerrset()`. `rrset` is a pointer to a struct rrset created by a call to `lwres_getrrsetbyname()`.

## RETURN VALUES

`lwres_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

``

## SEE ALSO

lwres(3).