.\" Copyright (C) 2023 The c-ares project and its contributors. .\" SPDX-License-Identifier: MIT .\" .TH ARES_DNS_RR 3 "12 November 2023" .SH NAME DNS Resource record creating, reading, and writing functions. .SH SYNOPSIS .nf #include size_t ares_dns_record_rr_cnt(const ares_dns_record_t *dnsrec, ares_dns_section_t sect); ares_status_t ares_dns_record_rr_add(ares_dns_rr_t **rr_out, ares_dns_record_t *dnsrec, ares_dns_section_t sect, const char *name, ares_dns_rec_type_t type, ares_dns_class_t rclass, unsigned int ttl); ares_dns_rr_t *ares_dns_record_rr_get(ares_dns_record_t *dnsrec, ares_dns_section_t sect, size_t idx); ares_status_t ares_dns_record_rr_del(ares_dns_record_t *dnsrec, ares_dns_section_t sect, size_t idx); const char *ares_dns_rr_get_name(const ares_dns_rr_t *rr); ares_dns_rec_type_t ares_dns_rr_get_type(const ares_dns_rr_t *rr); ares_dns_class_t ares_dns_rr_get_class(const ares_dns_rr_t *rr); unsigned int ares_dns_rr_get_ttl(const ares_dns_rr_t *rr); ares_status_t ares_dns_rr_set_addr(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, const struct in_addr *addr); ares_status_t ares_dns_rr_set_addr6(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, const struct ares_in6_addr *addr); ares_status_t ares_dns_rr_set_str(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, const char *val); ares_status_t ares_dns_rr_set_u8(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned char val); ares_status_t ares_dns_rr_set_u16(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short val); ares_status_t ares_dns_rr_set_u32(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned int val); ares_status_t ares_dns_rr_set_bin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, const unsigned char *val, size_t len); ares_status_t ares_dns_rr_set_opt(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short opt, const unsigned char *val, size_t val_len); const struct in_addr *ares_dns_rr_get_addr(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key); const struct ares_in6_addr *ares_dns_rr_get_addr6(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key); const char *ares_dns_rr_get_str(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key); unsigned char ares_dns_rr_get_u8(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key); unsigned short ares_dns_rr_get_u16(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key); unsigned int ares_dns_rr_get_u32(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key); const unsigned char *ares_dns_rr_get_bin(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, size_t *len); size_t ares_dns_rr_get_opt_cnt(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key); unsigned short ares_dns_rr_get_opt(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, size_t idx, const unsigned char **val, size_t *val_len); ares_bool_t ares_dns_rr_get_opt_byid(const ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key, unsigned short opt, const unsigned char **val, size_t *val_len); .fi .SH ENUMERATIONS .B ares_dns_section_t - DNS RR section types: .RS 4 .B ARES_SECTION_ANSWER - Answer section .br .B ARES_SECTION_AUTHORITY - Authority section .br .B ARES_SECTION_ADDITIONAL - Additional Information section .br .RE .B ares_dns_rr_key_t - Keys used for handling RR record parameters: .RS 4 .B ARES_RR_A_ADDR - A Record. Address. Datatype: \fIARES_DATATYPE_INADDR\fP .br .B ARES_RR_NS_NSDNAME - NS Record. Name. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_CNAME_CNAME - CNAME Record. CName. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_SOA_MNAME - SOA Record. MNAME, Primary Source of Data. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_SOA_RNAME - SOA Record. RNAME, Mailbox of person responsible. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_SOA_SERIAL - SOA Record. Serial, version. Datatype: \fIARES_DATATYPE_U32\fP .br .B ARES_RR_SOA_REFRESH - SOA Record. Refresh, zone refersh interval. Datatype: \fIARES_DATATYPE_U32\fP .br .B ARES_RR_SOA_RETRY - SOA Record. Retry, failed refresh retry interval. Datatype: \fIARES_DATATYPE_U32\fP .br .B ARES_RR_SOA_EXPIRE - SOA Record. Expire, upper limit on authority. Datatype: \fIARES_DATATYPE_U32\fP .br .B ARES_RR_SOA_MINIMUM - SOA Record. Minimum, RR TTL. Datatype: \fIARES_DATATYPE_U32\fP .br .B ARES_RR_PTR_DNAME - PTR Record. DNAME, pointer domain. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_HINFO_CPU - HINFO Record. CPU. Datatype: \fIARES_DATATYPE_STR\fP .br .B ARES_RR_HINFO_OS - HINFO Record. OS. Datatype: \fIARES_DATATYPE_STR\fP .br .B ARES_RR_MX_PREFERENCE - MX Record. Preference. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_MX_EXCHANGE - MX Record. Exchange, domain. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_TXT_DATA - TXT Record. Data. Datatype: \fIARES_DATATYPE_BINP\fP .br .B ARES_RR_AAAA_ADDR - AAAA Record. Address. Datatype: \fIARES_DATATYPE_INADDR6\fP .br .B ARES_RR_SRV_PRIORITY - SRV Record. Priority. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_SRV_WEIGHT - SRV Record. Weight. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_SRV_PORT - SRV Record. Port. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_SRV_TARGET - SRV Record. Target domain. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_NAPTR_ORDER - NAPTR Record. Order. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_NAPTR_PREFERENCE - NAPTR Record. Preference. Datatype: \fIARES_DATATYPE_U16\fp .br .B ARES_RR_NAPTR_FLAGS - NAPTR Record. Flags. Datatype: \fIARES_DATATYPE_STR\fP .br .B ARES_RR_NAPTR_SERVICES - NAPTR Record. Services. Datatype: \fIARES_DATATYPE_STR\fP .br .B ARES_RR_NAPTR_REGEXP - NAPTR Record. Regexp. Datatype: \fIARES_DATATYPE_STR\fP .br .B ARES_RR_NAPTR_REPLACEMENT - NAPTR Record. Replacement. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_OPT_UDP_SIZE - OPT Record. UDP Size. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_OPT_VERSION - OPT Record. Version. Datatype: \fIARES_DATATYPE_U8\fP .br .B ARES_RR_OPT_FLAGS - OPT Record. Flags. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_OPT_OPTIONS - OPT Record. Options. See \fIares_opt_param_t\fP. Datatype: \fIARES_DATATYPE_OPT\fP .br .B ARES_RR_TLSA_CERT_USAGE - TLSA Record. Certificate Usage. See \fIares_tlsa_usage_t\fP. Datatype: \fIARES_DATATYPE_U8\fP .br .B ARES_RR_TLSA_SELECTOR - TLSA Record. Selector. See \fIares_tlsa_selector_t\fP. Datatype: \fIARES_DATATYPE_U8\fP .br .B ARES_RR_TLSA_MATCH - TLSA Record. Matching Type. See \fIares_tlsa_match_t\fP. Datatype: \fIARES_DATATYPE_U8\fP .br .B ARES_RR_TLSA_DATA - TLSA Record. Certificate Association Data. Datatype: \fIARES_DATATYPE_BIN\fP .br .B ARES_RR_SVCB_PRIORITY - SVCB Record. SvcPriority. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_SVCB_TARGET - SVCB Record. TargetName. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_SVCB_PARAMS - SVCB Record. SvcParams. See \fIares_svcb_param_t\fP. Datatype: \fIARES_DATATYPE_OPT\fP .br .B ARES_RR_HTTPS_PRIORITY - HTTPS Record. SvcPriority. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_HTTPS_TARGET - HTTPS Record. TargetName. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_HTTPS_PARAMS - HTTPS Record. SvcParams. See \fIares_svcb_param_t\fP. Datatype: \fIARES_DATATYPE_OPT\fP .br .B ARES_RR_URI_PRIORITY - URI Record. Priority. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_URI_WEIGHT - URI Record. Weight. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_URI_TARGET - URI Record. Target domain. Datatype: \fIARES_DATATYPE_NAME\fP .br .B ARES_RR_CAA_CRITICAL - CAA Record. Critical flag. Datatype: \fIARES_DATATYPE_U8\fP .br .B ARES_RR_CAA_TAG - CAA Record. Tag/Property. Datatype: \fIARES_DATATYPE_STR\fP .br .B ARES_RR_CAA_VALUE - CAA Record. Value. Datatype: \fIARES_DATATYPE_BINP\fP .br .B ARES_RR_RAW_RR_TYPE - RAW Record. RR Type. Datatype: \fIARES_DATATYPE_U16\fP .br .B ARES_RR_RAW_RR_DATA - RAW Record. RR Data. Datatype: \fIARES_DATATYPE_BIN\fP .br .RE .B ares_tlsa_usage_t - TLSA Record \fIARES_RR_TLSA_CERT_USAGE\fP known values .RS 4 .B ARES_TLSA_USAGE_CA - Certificate Usage 0. CA Constraint .br .B ARES_TLSA_USAGE_SERVICE - Certificate Usage 1. Service Certificate Constraint .br .B ARES_TLSA_USAGE_TRUSTANCHOR - Certificate Usage 2. Trust Anchor Assertation .br .B ARES_TLSA_USAGE_DOMAIN - Certificate Usage 3. Domain-issued certificate .br .RE .B ares_tlsa_selector_t - TLSA Record \fIARES_RR_TLSA_SELECTOR\fP known values: .RS 4 .B ARES_TLSA_SELECTOR_FULL - Full Certificate .br .B ARES_TLSA_SELECTOR_SUBJPUBKEYINFO - DER-encoded SubjectPublicKeyInfo .br .RE .B ares_tlsa_match_t - TLSA Record \fIARES_RR_TLSA_MATCH\fP known values: .RS 4 .B ARES_TLSA_MATCH_EXACT - Exact match .br .B ARES_TLSA_MATCH_SHA256 - Sha256 match .br .B ARES_TLSA_MATCH_SHA512 - Sha512 match .br .RE .SH DESCRIPTION The \fIares_dns_record_rr_cnt(3)\fP function returns the number of resource records in the DNS record provided by the .IR dnsrec parameter for the section provided in the .IR sect parameter. The \fIares_dns_record_rr_add(3)\fP function adds a new resource record entry the the DNS record provided by the .IR dnsrec parameter. The resulting resource record is stored into the variable pointed to by .IR rr_out. The DNS section the resource record belongs to is specified by the .IR sect parameter. The domain name associated with the resource record is specified by the .IR name parameter, which can not be NULL but may be an empty string, or ".". The resource record type is specified in the .IR type parameter, along withe the DNS record class in the .IR rclass parameter, and the Time To Live (TTL) in the .IR ttl parameter. The \fIares_dns_record_rr_get(3)\fP function is used to retrieve the resource record pointer from the DNS record provided in the .IR dnsrec parameter, for the resource record section provided in the .IR sect parameter, for the specified index in the .IR idx parameter. The index must be less than \fIares_dns_record_rr_cnt(3)\fP. The \fIares_dns_record_rr_del(3)\fP is used to delete a resource record from the DNS record specified in the .IR dnsrec parameter. Its primary use is to remove a \fIARES_REC_TYPE_OPT\fP record when needing to retry a query without EDNS support. The DNS RR section is specified via the .IR sect parameter, and the index to remove is specified in the .IR idx parameter. The index must be less than \fIares_dns_record_rr_cnt(3)\fP. The \fIares_dns_rr_get_name(3)\fP function is used to retrieve the resource record domain name from the Resource Record pointer provided in the .IR rr parameter. The \fIares_dns_rr_get_type(3)\fP function is used to retrieve the resource record type from the Resource Record pointer provided in the .IR rr parameter. The \fIares_dns_rr_get_class(3)\fP function is used to retrieve the resource record class from the Resource Record pointer provided in the .IR rr parameter. The \fIares_dns_rr_get_ttl(3)\fP function is used to retrieve the resource record class Time to Live (TTL) from the Resource Record pointer provided in the .IR rr parameter. The \fIares_dns_rr_set_addr(3)\fP function is used to set an IPv4 address for the associated resource record key/parameter when the datatype is \fIARES_DATATYPE_INADDR\fP. The resource record to be modified is provided in the .IR dns_rr parameter, the key/parameter is provided in the .IR key parameter, and the value is provided in the .IR addr parameter. The \fIares_dns_rr_set_addr6(3)\fP function is used to set an IPv6 address for the associated resource record key/parameter when the datatype is \fIARES_DATATYPE_INADDR6\fP. The resource record to be modified is provided in the .IR dns_rr parameter, the key/parameter is provided in the .IR key parameter, and the value is provided in the .IR addr parameter. The \fIares_dns_rr_set_str(3)\fP function is used to set a string for the associated resource record key/parameter when the datatype is \fIARES_DATATYPE_STR\fP or \fIARES_DATATYPE_NAME\fP. Most strings are limited to 255 bytes, however some records, such as a TXT record may allow longer as they are output as multiple strings. The resource record to be modified is provided in the .IR dns_rr parameter, the key/parameter is provided in the .IR key parameter, and the value is provided in the .IR val parameter. The \fIares_dns_rr_set_u8(3)\fP function is used to set an 8bit unsigned value for the associated resource record key/parameter when the datatype is \fIARES_DATATYPE_U8\fP. The resource record to be modified is provided in the .IR dns_rr parameter, the key/parameter is provided in the .IR key parameter, and the value is provided in the .IR val parameter. The \fIares_dns_rr_set_u16(3)\fP function is used to set an 16bit unsigned value for the associated resource record key/parameter when the datatype is \fIARES_DATATYPE_U16\fP. The resource record to be modified is provided in the .IR dns_rr parameter, the key/parameter is provided in the .IR key parameter, and the value is provided in the .IR val parameter. The \fIares_dns_rr_set_u32(3)\fP function is used to set an 32bit unsigned value for the associated resource record key/parameter when the datatype is \fIARES_DATATYPE_U32\fP. The resource record to be modified is provided in the .IR dns_rr parameter, the key/parameter is provided in the .IR key parameter, and the value is provided in the .IR val parameter. The \fIares_dns_rr_set_bin(3)\fP function is used to set an binary value for the associated resource record key/parameter when the datatype is \fIARES_DATATYPE_BIN\fP or \fIARES_DATATYPE_BINP\fP. The resource record to be modified is provided in the .IR dns_rr parameter, the key/parameter is provided in the .IR key parameter, and the value is provided in the .IR val parameter. And the associated value length is provided in the .IR len parameter. The \fIares_dns_rr_set_opt(3)\fP function is used to set option/parameter keys and values for the resource record when the datatype if \fIARES_DATATYPE_OPT\fP. The resource record to be modified is provided in the .IR dns_rr parameter. They key/parameter is provided in the .IR key parameter. The option/parameter value specific to the resource record is provided in the .IR opt parameter, and this is left to the user to determine the appropriate value to use. Some known values may be provided by \fIares_svcb_param_t\fP and \fIares_opt_param_t\fP enumerations. The value for the option is always provided in binary form in .IR val with length provided in .IR val_len. The \fIares_dns_rr_get_addr(3)\fP function is used to retrieve the IPv4 address from the resource record when the datatype is \fIARES_DATATYPE_INADDR\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter. The \fIares_dns_rr_get_addr6(3)\fP function is used to retrieve the IPv6 address from the resource record when the datatype is \fIARES_DATATYPE_INADDR6\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter. The \fIares_dns_rr_get_str(3)\fP function is used to retrieve a string from the resource record when the datatype is \fIARES_DATATYPE_STR\fP or \fIARES_DATATYPE_NAME\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter. The \fIares_dns_rr_get_u8(3)\fP function is used to retrieve an 8bit integer from the resource record when the datatype is \fIARES_DATATYPE_U8\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter. The \fIares_dns_rr_get_u16(3)\fP function is used to retrieve a 16bit integer from the resource record when the datatype is \fIARES_DATATYPE_U16\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter. The \fIares_dns_rr_get_u32(3)\fP function is used to retrieve a 32bit integer from the resource record when the datatype is \fIARES_DATATYPE_U32\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter. The \fIares_dns_rr_get_bin(3)\fP function is used to retrieve binary data from the resource record when the datatype is \fIARES_DATATYPE_BIN\fP or \fIARES_DATATYPE_BINP\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter, and length is stored into the variable pointed to by .IR len. The \fIares_dns_rr_get_opt_cnt(3)\fP function is used to retrieve the count of options/parameters associated with the resource record when the datatype is \fIARES_DATATYPE_OPT\fP. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key. The \fIares_dns_rr_get_opt(3)\fP function is used to retrieve binary option data from the resource record when the datatype is \fIARES_DATATYPE_OPT\fP for the specified index. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter, the index to retrieve the option data from is provided in the .IR idx parameter. The value is stored into the variable pointed to by .IR val and length is stored into the variable pointed to by .IR val_len. The \fIares_dns_rr_get_opt_byid(3)\fP function is used to retrieve binary option data from the resource record when the datatype is \fIARES_DATATYPE_OPT\fP for the specified option identifier, if it exists. The resource record is provided in the .IR dns_rr parameter and the key/parameter to retrieve is provided in the .IR key parameter, the identifier to retrieve the option data from is provided in the .IR opt parameter. The value is stored into the variable pointed to by .IR val and length is stored into the variable pointed to by .IR val_len. .SH RETURN VALUES \fIares_dns_record_rr_cnt(3)\fP and \fIares_dns_rr_get_opt_cnt(3)\fP return the respective counts. \fIares_dns_record_rr_add(3)\fP, \fIares_dns_record_rr_del(3)\fP, \fIares_dns_rr_set_addr(3)\fP, \fIares_dns_rr_set_addr6(3)\fP, \fIares_dns_rr_set_str(3)\fP, \fIares_dns_rr_set_u8(3)\fP, \fIares_dns_rr_set_u16(3)\fP, \fIares_dns_rr_set_u32(3)\fP, \fIares_dns_rr_set_bin(3)\fP, and \fIares_dns_rr_set_opt(3)\fP all return an \fIares_status_t\fP error code. .B ARES_SUCCESS is returned on success, .B ARES_ENOMEM is returned on out of memory, .B ARES_EFORMERR is returned on misuse. \fIares_dns_rr_get_name(3)\fP, \fIares_dns_rr_get_type(3)\fP, \fIares_dns_rr_get_class(3)\fP, \fIares_dns_rr_get_ttl(3)\fP, \fIares_dns_rr_get_addr(3)\fP, \fIares_dns_rr_get_addr6(3)\fP, \fIares_dns_rr_get_str(3)\fP, \fIares_dns_rr_get_u8(3)\fP, \fIares_dns_rr_get_u16(3)\fP, \fIares_dns_rr_get_u32(3)\fP, \fIares_dns_rr_get_bin(3)\fP, \fIares_dns_rr_get_opt(3)\fP all return their prescribed datatype values and in general can't fail except for misuse cases, in which a 0 (or NULL) may be returned, however 0 can also be a valid return value for most of these functions. \fIares_dns_record_rr_get(3)\fP will return the requested resource record pointer or NULL on failure (misuse). \fIares_dns_rr_get_opt_by_id(3)\fP will return ARES_TRUE if the option was found, otherwise ARES_FALSE if not found (or misuse). .SH AVAILABILITY These functions were first introduced in c-ares version 1.22.0. .SH SEE ALSO .BR ares_dns_mapping (3), .BR ares_dns_record (3), .BR ares_free_string (3) .SH AUTHOR Copyright (C) 2023 The c-ares project and its members.