Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
/**
 * 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;
}