mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 10:18:25 +00:00
More server cleanup.
This commit is contained in:
@@ -1360,82 +1360,77 @@ void add_update_server(int flags,
|
|||||||
void check_servers(void)
|
void check_servers(void)
|
||||||
{
|
{
|
||||||
struct irec *iface;
|
struct irec *iface;
|
||||||
struct server *new, *tmp, **up;
|
struct server *serv;
|
||||||
int port = 0;
|
int port = 0;
|
||||||
|
|
||||||
/* interface may be new since startup */
|
/* interface may be new since startup */
|
||||||
if (!option_bool(OPT_NOWILD))
|
if (!option_bool(OPT_NOWILD))
|
||||||
enumerate_interfaces(0);
|
enumerate_interfaces(0);
|
||||||
|
|
||||||
for (up = &daemon->servers, new = daemon->servers; new; new = tmp)
|
for (serv = daemon->servers; serv; serv = serv->next)
|
||||||
{
|
{
|
||||||
tmp = new->next;
|
if (!(serv->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND)))
|
||||||
|
|
||||||
if (!(new->flags & (SERV_LITERAL_ADDRESS | SERV_NO_ADDR | SERV_USE_RESOLV | SERV_NO_REBIND)))
|
|
||||||
{
|
{
|
||||||
port = prettyprint_addr(&new->addr, daemon->namebuff);
|
port = prettyprint_addr(&serv->addr, daemon->namebuff);
|
||||||
|
|
||||||
/* 0.0.0.0 is nothing, the stack treats it like 127.0.0.1 */
|
/* 0.0.0.0 is nothing, the stack treats it like 127.0.0.1 */
|
||||||
if (new->addr.sa.sa_family == AF_INET &&
|
if (serv->addr.sa.sa_family == AF_INET &&
|
||||||
new->addr.in.sin_addr.s_addr == 0)
|
serv->addr.in.sin_addr.s_addr == 0)
|
||||||
{
|
{
|
||||||
*up = tmp;
|
serv->flags |= SERV_MARK;
|
||||||
free(new);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (iface = daemon->interfaces; iface; iface = iface->next)
|
for (iface = daemon->interfaces; iface; iface = iface->next)
|
||||||
if (sockaddr_isequal(&new->addr, &iface->addr))
|
if (sockaddr_isequal(&serv->addr, &iface->addr))
|
||||||
break;
|
break;
|
||||||
if (iface)
|
if (iface)
|
||||||
{
|
{
|
||||||
my_syslog(LOG_WARNING, _("ignoring nameserver %s - local interface"), daemon->namebuff);
|
my_syslog(LOG_WARNING, _("ignoring nameserver %s - local interface"), daemon->namebuff);
|
||||||
*up = tmp;
|
serv->flags |= SERV_MARK;
|
||||||
free(new);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do we need a socket set? */
|
/* Do we need a socket set? */
|
||||||
if (!new->sfd &&
|
if (!serv->sfd &&
|
||||||
!(new->sfd = allocate_sfd(&new->source_addr, new->interface)) &&
|
!(serv->sfd = allocate_sfd(&serv->source_addr, serv->interface)) &&
|
||||||
errno != 0)
|
errno != 0)
|
||||||
{
|
{
|
||||||
my_syslog(LOG_WARNING,
|
my_syslog(LOG_WARNING,
|
||||||
_("ignoring nameserver %s - cannot make/bind socket: %s"),
|
_("ignoring nameserver %s - cannot make/bind socket: %s"),
|
||||||
daemon->namebuff, strerror(errno));
|
daemon->namebuff, strerror(errno));
|
||||||
*up = tmp;
|
serv->flags |= SERV_MARK;
|
||||||
free(new);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(new->flags & SERV_NO_REBIND))
|
if (!(serv->flags & SERV_NO_REBIND))
|
||||||
{
|
{
|
||||||
if (new->flags & (SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_USE_RESOLV))
|
if (serv->flags & (SERV_HAS_DOMAIN | SERV_FOR_NODOTS | SERV_USE_RESOLV))
|
||||||
{
|
{
|
||||||
char *s1, *s2;
|
char *s1, *s2;
|
||||||
if (!(new->flags & SERV_HAS_DOMAIN))
|
if (!(serv->flags & SERV_HAS_DOMAIN))
|
||||||
s1 = _("unqualified"), s2 = _("names");
|
s1 = _("unqualified"), s2 = _("names");
|
||||||
else if (strlen(new->domain) == 0)
|
else if (strlen(serv->domain) == 0)
|
||||||
s1 = _("default"), s2 = "";
|
s1 = _("default"), s2 = "";
|
||||||
else
|
else
|
||||||
s1 = _("domain"), s2 = new->domain;
|
s1 = _("domain"), s2 = serv->domain;
|
||||||
|
|
||||||
if (new->flags & SERV_NO_ADDR)
|
if (serv->flags & SERV_NO_ADDR)
|
||||||
my_syslog(LOG_INFO, _("using local addresses only for %s %s"), s1, s2);
|
my_syslog(LOG_INFO, _("using local addresses only for %s %s"), s1, s2);
|
||||||
else if (new->flags & SERV_USE_RESOLV)
|
else if (serv->flags & SERV_USE_RESOLV)
|
||||||
my_syslog(LOG_INFO, _("using standard nameservers for %s %s"), s1, s2);
|
my_syslog(LOG_INFO, _("using standard nameservers for %s %s"), s1, s2);
|
||||||
else if (!(new->flags & SERV_LITERAL_ADDRESS))
|
else if (!(serv->flags & SERV_LITERAL_ADDRESS))
|
||||||
my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
|
my_syslog(LOG_INFO, _("using nameserver %s#%d for %s %s"), daemon->namebuff, port, s1, s2);
|
||||||
}
|
}
|
||||||
else if (new->interface[0] != 0)
|
else if (serv->interface[0] != 0)
|
||||||
my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, new->interface);
|
my_syslog(LOG_INFO, _("using nameserver %s#%d(via %s)"), daemon->namebuff, port, serv->interface);
|
||||||
else
|
else
|
||||||
my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port);
|
my_syslog(LOG_INFO, _("using nameserver %s#%d"), daemon->namebuff, port);
|
||||||
}
|
}
|
||||||
|
|
||||||
up = &new->next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cleanup_servers();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return zero if no servers found, in that case we keep polling.
|
/* Return zero if no servers found, in that case we keep polling.
|
||||||
|
|||||||
Reference in New Issue
Block a user