[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