static isc_result_t set_nextqname(struct probe_trans *trans) { isc_result_t result; size_t domainlen; isc_buffer_t b; char buf[4096]; /* XXX ad-hoc constant, but should be enough */ if (*trans->qlabel == NULL) return (ISC_R_NOMORE); result = isc_string_copy(buf, sizeof(buf), *trans->qlabel); if (result != ISC_R_SUCCESS) return (result); result = isc_string_append(buf, sizeof(buf), trans->domain); if (result != ISC_R_SUCCESS) return (result); domainlen = strlen(buf); isc_buffer_init(&b, buf, domainlen); isc_buffer_add(&b, domainlen); dns_fixedname_init(&trans->fixedname); trans->qname = dns_fixedname_name(&trans->fixedname); result = dns_name_fromtext(trans->qname, &b, dns_rootname, 0, NULL); trans->qlabel++; return (result); }
/** * Convert DNS rdata type to LDAP attribute name. * * @param[in] rdtype * @param[out] target Output buffer with \0 terminated attribute name. * @param[in] size Target size. * @param[in] unknown ISC_TRUE = use generic syntax "UnknownRecord;TYPE65333", * ISC_FALSE = use type-specific mnemonic like "ARecord" */ isc_result_t rdatatype_to_ldap_attribute(dns_rdatatype_t rdtype, char *target, unsigned int size, isc_boolean_t unknown) { isc_result_t result; char rdtype_str[DNS_RDATATYPE_FORMATSIZE]; if (unknown) { /* "UnknownRecord;TYPE65333" */ CHECK(isc_string_copy(target, size, LDAP_RDATATYPE_UNKNOWN_PREFIX)); snprintf(rdtype_str, sizeof(rdtype_str), "TYPE%u", rdtype); CHECK(isc_string_append(target, size, rdtype_str)); } else { /* "ARecord" */ dns_rdatatype_format(rdtype, rdtype_str, DNS_RDATATYPE_FORMATSIZE); CHECK(isc_string_copy(target, size, rdtype_str)); CHECK(isc_string_append(target, size, LDAP_RDATATYPE_SUFFIX)); } cleanup: return result; }