[PATCH 2/6] resolver: support IPv4 address literals

Ian Jackson ijackson at chiark.greenend.org.uk
Sun Jul 10 23:55:26 BST 2011


Signed-off-by: Ian Jackson <ijackson at chiark.greenend.org.uk>

IP ADDR LIT size_t strlen
---
 resolver.c |   16 ++++++++++++++++
 1 files changed, 16 insertions(+), 0 deletions(-)

diff --git a/resolver.c b/resolver.c
index f60b112..033ddc1 100644
--- a/resolver.c
+++ b/resolver.c
@@ -6,6 +6,8 @@
 #error secnet requires ADNS version 1.0 or above
 #endif
 #include <adns.h>
+#include <arpa/inet.h>
+#include <string.h>
 
 
 struct adns {
@@ -28,6 +30,20 @@ static bool_t resolve_request(void *sst, cstring_t name,
     struct adns *st=sst;
     struct query *q;
     int rv;
+    const int maxlitlen=50;
+
+    ssize_t l=strlen(name);
+    if (name[0]=='[' && l<maxlitlen && l>2 && name[l-1]==']') {
+	char trimmed[maxlitlen+1];
+	memcpy(trimmed,name+1,l-2);
+	trimmed[l-2]=0;
+	struct in_addr ia;
+	if (inet_aton(trimmed,&ia))
+	    cb(cst,&ia);
+	else
+	    cb(cst,0);
+	return True;
+    }
 
     q=safe_malloc(sizeof *q,"resolve_request");
     q->cst=cst;
-- 
1.5.6.5




More information about the sgo-software-discuss mailing list