From: Stefan Metzmacher Date: Tue, 10 Mar 2020 12:07:25 +0000 (+0100) Subject: rwrap: split out a rwrap_reset_nameservers() function X-Git-Tag: resolv_wrapper-1.1.6~10 X-Git-Url: http://git.samba.org/?p=resolv_wrapper.git;a=commitdiff_plain;h=be1a2940aff74edc7b6063b1772558f63eb82544 rwrap: split out a rwrap_reset_nameservers() function This will make it easier to add support for ipv6 nameservers on FreeBSD in the following commits. Signed-off-by: Stefan Metzmacher Reviewed-by: Andreas Schneider --- diff --git a/src/resolv_wrapper.c b/src/resolv_wrapper.c index 0ee9fee..7c5bf81 100644 --- a/src/resolv_wrapper.c +++ b/src/resolv_wrapper.c @@ -1606,6 +1606,29 @@ static int libc_res_nsearch(struct __res_state *state, * RES_HELPER ***************************************************************************/ +static void rwrap_reset_nameservers(struct __res_state *state) +{ +#ifdef HAVE_RES_STATE_U_EXT_NSADDRS + size_t i; + + for (i = 0; i < (size_t)state->nscount; i++) { + if (state->_u._ext.nssocks[i] != -1) { + close(state->_u._ext.nssocks[i]); + state->_u._ext.nssocks[i] = -1; + } + SAFE_FREE(state->_u._ext.nsaddrs[i]); + } + memset(&state->_u._ext, 0, sizeof(state->_u._ext)); + for (i = 0; i < MAXNS; i++) { + state->_u._ext.nssocks[i] = -1; + state->_u._ext.nsmap[i] = MAXNS + 1; + } + state->ipv6_unavail = false; +#endif + memset(state->nsaddr_list, 0, sizeof(state->nsaddr_list)); + state->nscount = 0; +} + static int rwrap_parse_resolv_conf(struct __res_state *state, const char *resolv_conf) { @@ -1613,6 +1636,8 @@ static int rwrap_parse_resolv_conf(struct __res_state *state, char buf[BUFSIZ]; int nserv = 0; + rwrap_reset_nameservers(state); + fp = fopen(resolv_conf, "r"); if (fp == NULL) { RWRAP_LOG(RWRAP_LOG_ERROR, @@ -1735,36 +1760,6 @@ static int rwrap_res_ninit(struct __res_state *state) const char *resolv_conf = getenv("RESOLV_WRAPPER_CONF"); if (resolv_conf != NULL) { - /* Delete name servers */ -#ifdef HAVE_RESOLV_IPV6_NSADDRS - uint16_t i; - - for (i = 0; i < state->nscount; i++) { - if (state->_u._ext.nssocks[i] != -1) { - close(state->_u._ext.nssocks[i]); - state->_u._ext.nssocks[i] = -1; - } - - SAFE_FREE(state->_u._ext.nsaddrs[i]); - } -#endif - - state->nscount = 0; - memset(state->nsaddr_list, 0, sizeof(state->nsaddr_list)); - -#ifdef HAVE_RESOLV_IPV6_NSADDRS - state->ipv6_unavail = false; - state->_u._ext.nsinit = 0; - state->_u._ext.nscount = 0; - state->_u._ext.nscount6 = 0; - for (i = 0; i < MAXNS; i++) { - state->_u._ext.nsaddrs[i] = NULL; - state->_u._ext.nssocks[i] = -1; - state->_u._ext.nsmap[i] = MAXNS; - } -#endif - - /* And parse the new name servers */ rc = rwrap_parse_resolv_conf(state, resolv_conf); } } @@ -1811,6 +1806,7 @@ int __res_init(void) static void rwrap_res_nclose(struct __res_state *state) { + rwrap_reset_nameservers(state); libc_res_nclose(state); }