diff --git a/src/dns/mod.mk b/src/dns/mod.mk index 13f8d93..8aefd4c 100644 --- a/src/dns/mod.mk +++ b/src/dns/mod.mk @@ -13,8 +13,12 @@ SRCS += dns/rr.c SRCS += dns/rrlist.c ifneq ($(HAVE_LIBRESOLV),) +ifeq ($(OS),netbsd) +SRCS += dns/netbsd/srv.c +else SRCS += dns/res.c endif +endif ifeq ($(OS),win32) SRCS += dns/win32/srv.c diff --git a/src/dns/netbsd/srv.c b/src/dns/netbsd/srv.c new file mode 100644 index 0000000..564febe --- /dev/null +++ b/src/dns/netbsd/srv.c @@ -0,0 +1,56 @@ +/** + * @file netbsd/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