blob: 9dca21a02f1e6b76c733e2338294542cd1d1769e [file] [log] [blame]
Andrew Geissler09036742021-06-25 14:25:14 -05001From 01974865e4d331eeaf25248bee1bb96539c450d9 Mon Sep 17 00:00:00 2001
Patrick Williamsf1e5d692016-03-30 15:21:19 -05002From: Khem Raj <raj.khem@gmail.com>
3Date: Mon, 6 Apr 2015 23:02:21 -0700
Andrew Geissler4b740dc2020-05-05 08:54:39 -05004Subject: [PATCH] resolve: musl does not implement res_ninit
Patrick Williamsf1e5d692016-03-30 15:21:19 -05005
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>
Andrew Geissler4b740dc2020-05-05 08:54:39 -050012
Patrick Williamsf1e5d692016-03-30 15:21:19 -050013---
Andrew Geissler4b740dc2020-05-05 08:54:39 -050014 gweb/gresolv.c | 34 +++++++++++++---------------------
15 1 file changed, 13 insertions(+), 21 deletions(-)
Patrick Williamsf1e5d692016-03-30 15:21:19 -050016
17diff --git a/gweb/gresolv.c b/gweb/gresolv.c
Andrew Geissler09036742021-06-25 14:25:14 -050018index 954e7cf..2a9bc51 100644
Patrick Williamsf1e5d692016-03-30 15:21:19 -050019--- a/gweb/gresolv.c
20+++ b/gweb/gresolv.c
Brad Bishop1a4b7ee2018-12-16 17:11:34 -080021@@ -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
Andrew Geissler09036742021-06-25 14:25:14 -050029@@ -878,8 +879,6 @@ GResolv *g_resolv_new(int index)
Patrick Williamsf1e5d692016-03-30 15:21:19 -050030 resolv->index = index;
31 resolv->nameserver_list = NULL;
32
33- res_ninit(&resolv->res);
34-
35 return resolv;
36 }
37
Andrew Geissler09036742021-06-25 14:25:14 -050038@@ -919,8 +918,6 @@ void g_resolv_unref(GResolv *resolv)
Patrick Williamsf1e5d692016-03-30 15:21:19 -050039
40 flush_nameservers(resolv);
41
42- res_nclose(&resolv->res);
43-
44 g_free(resolv);
45 }
46
Andrew Geissler09036742021-06-25 14:25:14 -050047@@ -1023,24 +1020,19 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname,
Patrick Williamsf1e5d692016-03-30 15:21:19 -050048 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)