mirror of
https://github.com/apache/nuttx.git
synced 2025-01-13 10:58:49 +08:00
netdb: Make NETDB_DNSSERVER_NAMESERVERS effective for NETDB_RESOLVCONF
prevent the server list in resolv.conf from increasing indefinitely the one that is overwritten is always the one configured first. Signed-off-by: zhanghongyu <zhanghongyu@xiaomi.com>
This commit is contained in:
parent
4e24eec7b6
commit
7ba125f7cd
3 changed files with 37 additions and 5 deletions
|
@ -194,7 +194,6 @@ endif # NETDB_RESOLVCONF
|
|||
config NETDB_DNSSERVER_NAMESERVERS
|
||||
int "Max number of configured nameservers"
|
||||
default 1
|
||||
depends on !NETDB_RESOLVCONF
|
||||
---help---
|
||||
This setting determines how many nameservers there can be
|
||||
in use concurrently.
|
||||
|
|
|
@ -122,6 +122,11 @@ int dns_add_nameserver(FAR const struct sockaddr *addr, socklen_t addrlen)
|
|||
union dns_addr_u dns_addr;
|
||||
FAR uint16_t *pport;
|
||||
size_t copylen;
|
||||
#if CONFIG_NETDB_DNSSERVER_NAMESERVERS > 1
|
||||
char prev_addr[CONFIG_NETDB_DNSSERVER_NAMESERVERS - 1][DNS_MAX_LINE];
|
||||
int prev_cnt;
|
||||
int i;
|
||||
#endif
|
||||
int ret;
|
||||
|
||||
stream = fopen(CONFIG_NETDB_RESOLVCONF_PATH, "a+");
|
||||
|
@ -223,7 +228,22 @@ int dns_add_nameserver(FAR const struct sockaddr *addr, socklen_t addrlen)
|
|||
goto errout;
|
||||
}
|
||||
|
||||
/* Write the new record to the end of the resolv.conf file. */
|
||||
#if CONFIG_NETDB_DNSSERVER_NAMESERVERS > 1
|
||||
fseek(stream, 0, SEEK_SET);
|
||||
for (prev_cnt = 0; prev_cnt < CONFIG_NETDB_DNSSERVER_NAMESERVERS - 1;
|
||||
prev_cnt++)
|
||||
{
|
||||
if (fgets(prev_addr[prev_cnt], DNS_MAX_LINE, stream) == NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
fclose(stream);
|
||||
stream = fopen(CONFIG_NETDB_RESOLVCONF_PATH, "w");
|
||||
|
||||
/* Write the new record to the head of the resolv.conf file. */
|
||||
|
||||
#ifdef CONFIG_NETDB_RESOLVCONF_NONSTDPORT
|
||||
/* The OpenBSD version supports a [host]:port syntax. When a non-standard
|
||||
|
@ -237,8 +257,7 @@ int dns_add_nameserver(FAR const struct sockaddr *addr, socklen_t addrlen)
|
|||
ret = fprintf(stream, "%s [%s]:%u\n",
|
||||
NETDB_DNS_KEYWORD, addrstr, NTOHS(*pport));
|
||||
#else
|
||||
ret = fprintf(stream, "%s %s\n",
|
||||
NETDB_DNS_KEYWORD, addrstr);
|
||||
ret = fprintf(stream, "%s %s\n", NETDB_DNS_KEYWORD, addrstr);
|
||||
#endif
|
||||
|
||||
if (ret < 0)
|
||||
|
@ -249,6 +268,20 @@ int dns_add_nameserver(FAR const struct sockaddr *addr, socklen_t addrlen)
|
|||
goto errout;
|
||||
}
|
||||
|
||||
#if CONFIG_NETDB_DNSSERVER_NAMESERVERS > 1
|
||||
for (i = 0; i < prev_cnt; i++)
|
||||
{
|
||||
ret = fputs(prev_addr[i], stream);
|
||||
if (ret < 0)
|
||||
{
|
||||
ret = -get_errno();
|
||||
nerr("ERROR: fprintf failed: %d\n", ret);
|
||||
DEBUGASSERT(ret < 0);
|
||||
goto errout;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = OK;
|
||||
|
||||
errout:
|
||||
|
|
|
@ -83,7 +83,7 @@ int dns_foreach_nameserver(dns_callback_t callback, FAR void *arg)
|
|||
unsigned int count;
|
||||
uint16_t port;
|
||||
int keylen;
|
||||
int ret;
|
||||
int ret = OK;
|
||||
|
||||
/* Open the resolver configuration file */
|
||||
|
||||
|
|
Loading…
Reference in a new issue