From 60783f0d885c9a0db8b6f1d528786321e53f1512 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 6 Apr 2015 23:02:21 -0700 Subject: [PATCH] gweb/gresolv.c: make use of res_ninit optional and subject to __RES Not all libc implementation have those functions, and the way to determine if they do is to check __RES which is explained in resolv.h thusly: /* * Revision information. This is the release date in YYYYMMDD format. * It can change every day so the right thing to do with it is use it * in preprocessor commands such as "#if (__RES > 19931104)". Do not * compare for equality; rather, use it to determine whether your resolver * is new enough to contain a certain feature. */ Indeed, it needs to be at least 19991006. The portion of the patch that implements a fallback is ported from Alpine Linux: http://git.alpinelinux.org/cgit/aports/plain/testing/connman/libresolv.patch Upstream-Status: Submitted [to connman@lists.linux.dev,marcel@holtmann.org] Signed-off-by: Khem Raj --- gweb/gresolv.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gweb/gresolv.c b/gweb/gresolv.c index 8101d71..9f1477c 100644 --- a/gweb/gresolv.c +++ b/gweb/gresolv.c @@ -879,7 +879,9 @@ GResolv *g_resolv_new(int index) resolv->index = index; resolv->nameserver_list = NULL; +#if (__RES >= 19991006) res_ninit(&resolv->res); +#endif return resolv; } @@ -920,7 +922,9 @@ void g_resolv_unref(GResolv *resolv) flush_nameservers(resolv); +#if (__RES >= 19991006) res_nclose(&resolv->res); +#endif g_free(resolv); } @@ -1024,6 +1028,7 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname, debug(resolv, "hostname %s", hostname); if (!resolv->nameserver_list) { +#if (__RES >= 19991006) int i; for (i = 0; i < resolv->res.nscount; i++) { @@ -1043,6 +1048,22 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname, if (inet_ntop(family, sa_addr, buf, sizeof(buf))) g_resolv_add_nameserver(resolv, buf, 53, 0); } +#else + FILE *f = fopen("/etc/resolv.conf", "r"); + if (f) { + char line[256], *s; + int i; + while (fgets(line, sizeof(line), f)) { + if (strncmp(line, "nameserver", 10) || !isspace(line[10])) + continue; + for (s = &line[11]; isspace(s[0]); s++); + for (i = 0; s[i] && !isspace(s[i]); i++); + s[i] = 0; + g_resolv_add_nameserver(resolv, s, 53, 0); + } + fclose(f); + } +#endif if (!resolv->nameserver_list) g_resolv_add_nameserver(resolv, "127.0.0.1", 53, 0); -- 2.39.2