[Freeipa-devel] [PATCH 0115] Add support for DNAME substitution
Adam Tkac
atkac at redhat.com
Mon Mar 4 14:14:24 UTC 2013
On Thu, Feb 21, 2013 at 04:27:03PM +0100, Petr Spacek wrote:
> On 21.2.2013 16:21, Petr Spacek wrote:
> >Hello,
> >
> > Add support for DNAME substitution.
> >
> > https://fedorahosted.org/bind-dyndb-ldap/ticket/63
> >
>
> And now the patch :-)
Ack
> From dc1215e8a82d3993f69436b4de9ff91ea16f4369 Mon Sep 17 00:00:00 2001
> From: Petr Spacek <pspacek at redhat.com>
> Date: Thu, 21 Feb 2013 13:34:52 +0100
> Subject: [PATCH] Add support for DNAME substitution.
>
> https://fedorahosted.org/bind-dyndb-ldap/ticket/63
>
> Signed-off-by: Petr Spacek <pspacek at redhat.com>
> ---
> src/ldap_driver.c | 22 +++++++++++++++++++---
> 1 file changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/src/ldap_driver.c b/src/ldap_driver.c
> index cde09ee8aa3c9332f3766a031030a95b0cff3229..9cae66b3950323221d3319649fc7b86ef25a5d68 100644
> --- a/src/ldap_driver.c
> +++ b/src/ldap_driver.c
> @@ -457,7 +457,6 @@ cleanup:
> return result;
> }
>
> -/* XXX add support for DNAME redirection */
> static isc_result_t
> find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
> dns_rdatatype_t type, unsigned int options, isc_stdtime_t now,
> @@ -469,6 +468,7 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
> ldapdb_node_t *node = NULL;
> dns_rdatalist_t *rdlist = NULL;
> isc_boolean_t is_cname = ISC_FALSE;
> + isc_boolean_t is_dname = ISC_FALSE;
> isc_boolean_t is_delegation = ISC_FALSE;
> ldapdb_rdatalist_t rdatalist;
> unsigned int labels, qlabels;
> @@ -515,7 +515,20 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
> continue;
> }
>
> - /* TODO: We should check for DNAME records right here */
> + /* RFC 6672 section 2.3.:
> + Unlike a CNAME RR, a DNAME RR redirects DNS names
> + subordinate to its owner name; the owner name of a DNAME
> + is not redirected itself. */
> + if (qlabels > dns_name_countlabels(traversename)) {
> + rdlist = NULL;
> + result = ldapdb_rdatalist_findrdatatype(&rdatalist,
> + dns_rdatatype_dname,
> + &rdlist);
> + if (result == ISC_R_SUCCESS) {
> + is_dname = ISC_TRUE;
> + goto skipfind;
> + }
> + }
>
> /*
> * Check if there is at least one NS RR. If yes and this is not NS
> @@ -527,6 +540,7 @@ find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version,
> if (dns_name_countlabels(&db->origin) <
> dns_name_countlabels(traversename) &&
> (options & DNS_DBFIND_GLUEOK) == 0) {
> + rdlist = NULL;
> result = ldapdb_rdatalist_findrdatatype(&rdatalist,
> dns_rdatatype_ns,
> &rdlist);
> @@ -582,7 +596,7 @@ found:
> skipfind:
> CHECK(dns_name_copy(traversename, foundname, NULL));
>
> - if (rdataset != NULL && type != dns_rdatatype_any) {
> + if (rdataset != NULL && (type != dns_rdatatype_any || is_dname)) {
> /* dns_rdatalist_tordataset returns success only */
> CHECK(clone_rdatalist_to_rdataset(ldapdb->common.mctx, rdlist,
> rdataset));
> @@ -600,6 +614,8 @@ skipfind:
> return DNS_R_DELEGATION;
> else if (is_cname)
> return DNS_R_CNAME;
> + else if (is_dname)
> + return DNS_R_DNAME;
> else
> return ISC_R_SUCCESS;
>
> --
> 1.7.11.7
>
> _______________________________________________
> Freeipa-devel mailing list
> Freeipa-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/freeipa-devel
--
Adam Tkac, Red Hat, Inc.
More information about the Freeipa-devel
mailing list