diff options
author | Jakub Hrozek <jakub.hrozek@gmail.com> | 2014-12-03 15:45:05 +0100 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2014-12-05 23:32:06 +0100 |
commit | 27828774c3633389b5ce5397d8e25fab2e278624 (patch) | |
tree | e5a543313e4e22a44fcbdd1f992def0723de1a84 /lib | |
parent | 917c3f08440c302511bdf06b5ac11b42630bdd28 (diff) | |
download | samba-27828774c3633389b5ce5397d8e25fab2e278624.tar.gz samba-27828774c3633389b5ce5397d8e25fab2e278624.tar.xz samba-27828774c3633389b5ce5397d8e25fab2e278624.zip |
rwrap: CNAME record can recurse into A, AAAA or CNAME
Signed-off-by: Jakub Hrozek <jakub.hrozek@gmail.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/resolv_wrapper/resolv_wrapper.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/resolv_wrapper/resolv_wrapper.c b/lib/resolv_wrapper/resolv_wrapper.c index 99c091d0de..75439fac6c 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; } } |