[SCM] Samba Shared Repository - branch master updated

Andreas Schneider asn at samba.org
Tue May 31 18:14:04 UTC 2016


The branch, master has been updated
       via  af6bd05 rwrap: Update resolve_wrapper to version 1.1.4
      from  3b5e3ef lib: tevent: Use struct sockaddr_storage to cope with IPv6.

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit af6bd055d463750625035a397b7d961e0503b620
Author: Andreas Schneider <asn at samba.org>
Date:   Tue May 31 08:36:01 2016 +0200

    rwrap: Update resolve_wrapper to version 1.1.4
    
    Signed-off-by: Andreas Schneider <asn at samba.org>
    Reviewed-by: Ralph Boehme <slow at samba.org>
    
    Autobuild-User(master): Andreas Schneider <asn at cryptomilk.org>
    Autobuild-Date(master): Tue May 31 20:13:43 CEST 2016 on sn-devel-144

-----------------------------------------------------------------------

Summary of changes:
 lib/resolv_wrapper/resolv_wrapper.c | 75 ++++++++++++++++++++++++++++++++++---
 lib/resolv_wrapper/wscript          |  2 +-
 2 files changed, 70 insertions(+), 7 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/resolv_wrapper/resolv_wrapper.c b/lib/resolv_wrapper/resolv_wrapper.c
index d36d080..48018be 100644
--- a/lib/resolv_wrapper/resolv_wrapper.c
+++ b/lib/resolv_wrapper/resolv_wrapper.c
@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2014      Andreas Schneider <asn at samba.org>
- * Copyright (c) 2014      Jakub Hrozek <jakub.hrozek at gmail.com>
+ * Copyright (c) 2014      Jakub Hrozek <jakub.hrozek at posteo.se>
  *
  * All rights reserved.
  *
@@ -36,7 +36,11 @@
 
 #include <errno.h>
 #include <arpa/inet.h>
+#ifdef HAVE_ARPA_NAMESER_H
+#include <arpa/nameser.h>
+#endif /* HAVE_ARPA_NAMESER_H */
 #include <netinet/in.h>
+#include <sys/socket.h>
 #include <sys/types.h>
 #include <stdarg.h>
 #include <stdlib.h>
@@ -227,6 +231,15 @@ static int rwrap_create_fake_aaaa_rr(const char *key,
 	rr->type = ns_t_aaaa;
 	return 0;
 }
+static int rwrap_create_fake_ns_rr(const char *key,
+				   const char *value,
+				   struct rwrap_fake_rr *rr)
+{
+	memcpy(rr->rrdata.srv_rec.hostname, value, strlen(value) + 1);
+	memcpy(rr->key, key, strlen(key) + 1);
+	rr->type = ns_t_ns;
+	return 0;
+}
 
 static int rwrap_create_fake_srv_rr(const char *key,
 				    const char *value,
@@ -340,7 +353,7 @@ static ssize_t rwrap_fake_header(uint8_t **header_blob, size_t remaining,
 	h->id = res_randomid();		/* random query ID */
 	h->qr = 1;			/* response flag */
 	h->rd = 1;			/* recursion desired */
-	h->ra = 1;			/* resursion available */
+	h->ra = 1;			/* recursion available */
 
 	h->qdcount = htons(1);		/* no. of questions */
 	h->ancount = htons(ancount);	/* no. of answers */
@@ -469,6 +482,47 @@ static ssize_t rwrap_fake_aaaa(struct rwrap_fake_rr *rr,
 	return resp_size;
 }
 
+static ssize_t rwrap_fake_ns(struct rwrap_fake_rr *rr,
+			     uint8_t *answer,
+			    size_t anslen)
+{
+	uint8_t *a = answer;
+	ssize_t resp_size = 0;
+	size_t rdata_size;
+	unsigned char hostname_compressed[MAXDNAME];
+	ssize_t compressed_len;
+
+	if (rr == NULL || rr->type != ns_t_ns) {
+		RWRAP_LOG(RWRAP_LOG_ERROR,
+			  "Malformed record, no or wrong value!\n");
+		return -1;
+	}
+	RWRAP_LOG(RWRAP_LOG_TRACE, "Adding NS RR");
+
+	/* Prepare the data to write */
+	compressed_len = ns_name_compress(rr->rrdata.srv_rec.hostname,
+					  hostname_compressed,
+					  MAXDNAME,
+					  NULL,
+					  NULL);
+	if (compressed_len < 0) {
+		return -1;
+	}
+
+	/* Is this enough? */
+	rdata_size = compressed_len;
+
+	resp_size = rwrap_fake_rdata_common(ns_t_ns, rdata_size,
+					    rr->key, anslen, &a);
+	if (resp_size < 0) {
+		return -1;
+	}
+
+	memcpy(a, hostname_compressed, compressed_len);
+
+	return resp_size;
+}
+
 static ssize_t rwrap_fake_srv(struct rwrap_fake_rr *rr,
 			      uint8_t *answer,
 			      size_t anslen)
@@ -662,7 +716,8 @@ static int rwrap_get_record(const char *hostfile, unsigned recursion,
 	}
 
 	RWRAP_LOG(RWRAP_LOG_TRACE,
-		  "Searching in fake hosts file %s\n", hostfile);
+		  "Searching in fake hosts file %s for %s:%d\n", hostfile,
+		  query, type);
 
 	fp = fopen(hostfile, "r");
 	if (fp == NULL) {
@@ -702,6 +757,10 @@ static int rwrap_get_record(const char *hostfile, unsigned recursion,
 				      rec_type, "AAAA", key, query)) {
 			rc = rwrap_create_fake_aaaa_rr(key, value, rr);
 			break;
+		} else if (TYPE_MATCH(type, ns_t_ns,
+				      rec_type, "NS", key, query)) {
+			rc = rwrap_create_fake_ns_rr(key, value, rr);
+			break;
 		} else if (TYPE_MATCH(type, ns_t_srv,
 				      rec_type, "SRV", key, query)) {
 			rc = rwrap_create_fake_srv_rr(key, value, rr);
@@ -776,6 +835,7 @@ static inline bool rwrap_known_type(int type)
 	switch (type) {
 	case ns_t_a:
 	case ns_t_aaaa:
+	case ns_t_ns:
 	case ns_t_srv:
 	case ns_t_soa:
 	case ns_t_cname:
@@ -835,6 +895,9 @@ static ssize_t rwrap_add_rr(struct rwrap_fake_rr *rr,
 	case ns_t_aaaa:
 		resp_data = rwrap_fake_aaaa(rr, answer, anslen);
 		break;
+	case ns_t_ns:
+		resp_data = rwrap_fake_ns(rr, answer, anslen);
+		break;
 	case ns_t_srv:
 		resp_data = rwrap_fake_srv(rr, answer, anslen);
 		break;
@@ -911,7 +974,7 @@ static ssize_t rwrap_fake_answer(struct rwrap_fake_rr *rrs,
 /* Reads in a file in the following format:
  * TYPE RDATA
  *
- * Malformed entried are silently skipped.
+ * Malformed entries are silently skipped.
  * Allocates answer buffer of size anslen that has to be freed after use.
  */
 static int rwrap_res_fake_hosts(const char *hostfile,
@@ -1421,8 +1484,8 @@ static int rwrap_res_ninit(struct __res_state *state)
 			state->nscount = 0;
 			memset(state->nsaddr_list, 0, sizeof(state->nsaddr_list));
 
-			state->_u._ext.nscount = 0;
 #ifdef HAVE_RESOLV_IPV6_NSADDRS
+			state->_u._ext.nscount = 0;
 			for (i = 0; i < state->_u._ext.nscount; i++) {
 				SAFE_FREE(state->_u._ext.nsaddrs[i]);
 			}
@@ -1690,7 +1753,7 @@ int __res_nsearch(struct __res_state *state,
 }
 
 /****************************************************************************
- *   RES_QUERY
+ *   RES_SEARCH
  ***************************************************************************/
 
 static int rwrap_res_search(const char *dname,
diff --git a/lib/resolv_wrapper/wscript b/lib/resolv_wrapper/wscript
index 34c00d2..5596ec9 100644
--- a/lib/resolv_wrapper/wscript
+++ b/lib/resolv_wrapper/wscript
@@ -2,7 +2,7 @@
 
 import os
 
-VERSION="1.1.3"
+VERSION="1.1.4"
 
 def configure(conf):
     if conf.CHECK_BUNDLED_SYSTEM('resolv_wrapper', minversion=VERSION, set_target=False):


-- 
Samba Shared Repository



More information about the samba-cvs mailing list