1From 01974865e4d331eeaf25248bee1bb96539c450d9 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Mon, 6 Apr 2015 23:02:21 -0700
4Subject: [PATCH] resolve: musl does not implement res_ninit
5
6ported from
7http://git.alpinelinux.org/cgit/aports/plain/testing/connman/libresolv.patch
8
9Upstream-Status: Pending
10
11Signed-off-by: Khem Raj <raj.khem@gmail.com>
12
13---
14 gweb/gresolv.c | 34 +++++++++++++---------------------
15 1 file changed, 13 insertions(+), 21 deletions(-)
16
17diff --git a/gweb/gresolv.c b/gweb/gresolv.c
18index 954e7cf..2a9bc51 100644
19--- a/gweb/gresolv.c
20+++ b/gweb/gresolv.c
21@@ -36,6 +36,7 @@
22 #include <arpa/inet.h>
23 #include <arpa/nameser.h>
24 #include <net/if.h>
25+#include <ctype.h>
26
27 #include "gresolv.h"
28
29@@ -878,8 +879,6 @@ GResolv *g_resolv_new(int index)
30 	resolv->index = index;
31 	resolv->nameserver_list = NULL;
32
33-	res_ninit(&resolv->res);
34-
35 	return resolv;
36 }
37
38@@ -919,8 +918,6 @@ void g_resolv_unref(GResolv *resolv)
39
40 	flush_nameservers(resolv);
41
42-	res_nclose(&resolv->res);
43-
44 	g_free(resolv);
45 }
46
47@@ -1023,24 +1020,19 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname,
48 	debug(resolv, "hostname %s", hostname);
49
50 	if (!resolv->nameserver_list) {
51-		int i;
52-
53-		for (i = 0; i < resolv->res.nscount; i++) {
54-			char buf[100];
55-			int family = resolv->res.nsaddr_list[i].sin_family;
56-			void *sa_addr = &resolv->res.nsaddr_list[i].sin_addr;
57-
58-			if (family != AF_INET &&
59-					resolv->res._u._ext.nsaddrs[i]) {
60-				family = AF_INET6;
61-				sa_addr = &resolv->res._u._ext.nsaddrs[i]->sin6_addr;
62+		FILE *f = fopen("/etc/resolv.conf", "r");
63+		if (f) {
64+			char line[256], *s;
65+			int i;
66+			while (fgets(line, sizeof(line), f)) {
67+				if (strncmp(line, "nameserver", 10) || !isspace(line[10]))
68+					continue;
69+				for (s = &line[11]; isspace(s[0]); s++);
70+				for (i = 0; s[i] && !isspace(s[i]); i++);
71+				s[i] = 0;
72+				g_resolv_add_nameserver(resolv, s, 53, 0);
73 			}
74-
75-			if (family != AF_INET && family != AF_INET6)
76-				continue;
77-
78-			if (inet_ntop(family, sa_addr, buf, sizeof(buf)))
79-				g_resolv_add_nameserver(resolv, buf, 53, 0);
80+			fclose(f);
81 		}
82
83 		if (!resolv->nameserver_list)
84