From 27828774c3633389b5ce5397d8e25fab2e278624 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Wed, 3 Dec 2014 15:45:05 +0100 Subject: [PATCH] rwrap: CNAME record can recurse into A, AAAA or CNAME Signed-off-by: Jakub Hrozek Reviewed-by: Andreas Schneider Reviewed-by: Guenther Deschner Signed-off-by: Andreas Schneider Reviewed-by: Andrew Bartlett --- 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 99c091d0de0..75439fac6cb 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.11.4.GIT