From a3a44da128b0cd95c5edf7790bcf2e188b59d17d Mon Sep 17 00:00:00 2001 From: Richard Aas Date: Fri, 28 Oct 2016 10:03:15 +0200 Subject: [PATCH] dns/resolv cleanup (#11) * dns/resolv: res_ninit()/res_nclose() * dns/resolv: mac os x fixes * resolv: added fix for OpenBSD * Add support for DragonFly BSD * Solris needs libresolv (patch by Dmitrij D. Czarkoff) --- mk/re.mk | 25 +++++++++++++-------- src/dns/bsd/srv.c | 56 ---------------------------------------------- src/dns/dns.h | 2 +- src/dns/mod.mk | 6 +---- src/dns/ns.c | 2 +- src/dns/res.c | 42 +++++++++++++++++----------------- src/main/openssl.c | 2 +- 7 files changed, 40 insertions(+), 95 deletions(-) delete mode 100644 src/dns/bsd/srv.c diff --git a/mk/re.mk b/mk/re.mk index 32263a7..187dd1f 100644 --- a/mk/re.mk +++ b/mk/re.mk @@ -221,7 +221,7 @@ BIN_SUFFIX := ifeq ($(OS),solaris) CFLAGS += -fPIC -DSOLARIS - LIBS += -ldl -lsocket -lnsl + LIBS += -ldl -lresolv -lsocket -lnsl LFLAGS += -fPIC SH_LFLAGS += -G MOD_LFLAGS += @@ -245,6 +245,7 @@ ifneq (,$(findstring Apple, $(CC_LONGVER))) CFLAGS += -Wshorten-64-to-32 endif DFLAGS := -MD + LIBS += -lresolv LFLAGS += -fPIC SH_LFLAGS += -dynamiclib ifeq ($(CC_NAME),gcc) @@ -281,6 +282,16 @@ ifeq ($(OS),freebsd) AFLAGS := cru HAVE_KQUEUE := 1 endif +ifeq ($(OS),dragonfly) + CFLAGS += -fPIC -DDRAGONFLY + LFLAGS += -fPIC + SH_LFLAGS += -shared + MOD_LFLAGS += + APP_LFLAGS += -rdynamic + AR := ar + AFLAGS := cru + HAVE_KQUEUE := 1 +endif ifeq ($(OS),openbsd) CFLAGS += -fPIC -DOPENBSD LFLAGS += -fPIC @@ -535,15 +546,11 @@ HAVE_EPOLL := $(shell [ -f $(SYSROOT)/include/sys/epoll.h ] || \ [ -f $(SYSROOT)/include/$(MACHINE)/sys/epoll.h ] \ && echo "1") endif -ifneq ($(OS),openbsd) -HAVE_LIBRESOLV := $(shell [ -f $(SYSROOT)/include/resolv.h ] && echo "1") -endif -ifneq ($(HAVE_LIBRESOLV),) -CFLAGS += -DHAVE_LIBRESOLV -ifneq ($(OS),freebsd) -LIBS += -lresolv -endif +HAVE_RESOLV := $(shell [ -f $(SYSROOT)/include/resolv.h ] && echo "1") + +ifneq ($(HAVE_RESOLV),) +CFLAGS += -DHAVE_RESOLV endif ifneq ($(HAVE_SYSLOG),) CFLAGS += -DHAVE_SYSLOG diff --git a/src/dns/bsd/srv.c b/src/dns/bsd/srv.c deleted file mode 100644 index d9fcb6b..0000000 --- a/src/dns/bsd/srv.c +++ /dev/null @@ -1,56 +0,0 @@ -/** - * @file bsd/srv.c Get DNS Server IP using libresolv - * - * Copyright (C) 2010 Creytiv.com - */ -#define _BSD_SOURCE 1 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "../dns.h" - - -int get_resolv_dns(char *domain, size_t dsize, struct sa *nsv, uint32_t *n) -{ - struct __res_state state; - uint32_t i; - int ret, err; - - memset(&state, 0, sizeof(state)); - ret = res_ninit(&state); - if (0 != ret) - return ENOENT; - - if (state.dnsrch[0]) - str_ncpy(domain, state.dnsrch[0], dsize); - else if (state.defdname) - str_ncpy(domain, state.defdname, dsize); - - if (!state.nscount) { - err = ENOENT; - goto out; - } - - err = 0; - for (i=0; i #include #include +#include #include #include #include @@ -18,41 +19,35 @@ #include "dns.h" -/** - * Generic way of fetching Nameserver IP-addresses, using libresolv - * - * @param domain Returned domain name - * @param dsize Size of domain name buffer - * @param nsv Returned nameservers - * @param n Nameservers capacity, actual on return - * - * @note we could use res_getservers() but it is not available on Linux - * @note only IPv4 is supported - * - * @return 0 if success, otherwise errorcode - */ int get_resolv_dns(char *domain, size_t dsize, struct sa *nsv, uint32_t *n) { + struct __res_state state; uint32_t i; int ret, err; +#ifdef OPENBSD ret = res_init(); + state = _res; +#else + memset(&state, 0, sizeof(state)); + ret = res_ninit(&state); +#endif if (0 != ret) return ENOENT; - if (_res.dnsrch[0]) - str_ncpy(domain, _res.dnsrch[0], dsize); - else if ((char *)_res.defdname) - str_ncpy(domain, _res.defdname, dsize); + if (state.dnsrch[0]) + str_ncpy(domain, state.dnsrch[0], dsize); + else if ((char *)state.defdname) + str_ncpy(domain, state.defdname, dsize); - if (!_res.nscount) { + if (!state.nscount) { err = ENOENT; goto out; } err = 0; - for (i=0; i