[PATCH 09/31] rwrap: CNAME record can recurse into A, AAAA or CNAME
Andreas Schneider
asn at samba.org
Wed Dec 3 07:45:05 MST 2014
From: Jakub Hrozek <jakub.hrozek at gmail.com>
Signed-off-by: Jakub Hrozek <jakub.hrozek at gmail.com>
Reviewed-by: Andreas Schneider <asn at samba.org>
Reviewed-by: Guenther Deschner <gd at samba.org>
Signed-off-by: Andreas Schneider <asn at samba.org>
---
lib/resolv_wrapper/resolv_wrapper.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/lib/resolv_wrapper/resolv_wrapper.c b/lib/resolv_wrapper/resolv_wrapper.c
index 99c091d..75439fa 100644
--- a/lib/resolv_wrapper/resolv_wrapper.c
+++ b/lib/resolv_wrapper/resolv_wrapper.c
@@ -677,6 +677,23 @@ static int rwrap_srv_recurse(const char *hostfile, unsigned recursion,
return rc;
}
+static int rwrap_cname_recurse(const char *hostfile, unsigned recursion,
+ const char *query, struct rwrap_fake_rr *rr)
+{
+ int rc;
+
+ rc = rwrap_get_record(hostfile, recursion, query, ns_t_a, rr);
+ if (rc == 0) return 0;
+
+ rc = rwrap_get_record(hostfile, recursion, query, ns_t_aaaa, rr);
+ if (rc == 0) return 0;
+
+ rc = rwrap_get_record(hostfile, recursion, query, ns_t_cname, rr);
+ if (rc == ENOENT) rc = 0;
+
+ return rc;
+}
+
static int rwrap_get_record(const char *hostfile, unsigned recursion,
const char *query, int type,
struct rwrap_fake_rr *rr)
@@ -749,6 +766,10 @@ static int rwrap_get_record(const char *hostfile, unsigned recursion,
} else if (TYPE_MATCH(type, ns_t_cname,
rec_type, "CNAME", key, query)) {
rc = rwrap_create_fake_cname_rr(key, value, rr);
+ if (rc == 0) {
+ rc = rwrap_cname_recurse(hostfile, recursion+1,
+ value, rr + 1);
+ }
break;
}
}
--
2.1.3
More information about the samba-technical
mailing list