mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Fix --server with multiple domains.
This commit is contained in:
29
src/option.c
29
src/option.c
@@ -2957,7 +2957,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|||||||
case LOPT_LOCAL: /* --local */
|
case LOPT_LOCAL: /* --local */
|
||||||
case 'A': /* --address */
|
case 'A': /* --address */
|
||||||
{
|
{
|
||||||
char *lastdomain = NULL, *domain = "";
|
char *lastdomain = NULL, *domain = "", *cur_domain;
|
||||||
u16 flags = 0;
|
u16 flags = 0;
|
||||||
char *err;
|
char *err;
|
||||||
union all_addr addr;
|
union all_addr addr;
|
||||||
@@ -3009,8 +3009,11 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|||||||
if (servers_only && option == 'S')
|
if (servers_only && option == 'S')
|
||||||
flags |= SERV_FROM_FILE;
|
flags |= SERV_FROM_FILE;
|
||||||
|
|
||||||
|
cur_domain = domain;
|
||||||
while ((flags & SERV_LITERAL_ADDRESS) || parse_server_next(&sdetails))
|
while ((flags & SERV_LITERAL_ADDRESS) || parse_server_next(&sdetails))
|
||||||
{
|
{
|
||||||
|
cur_domain = domain;
|
||||||
|
|
||||||
if (!(flags & SERV_LITERAL_ADDRESS) && (err = parse_server_addr(&sdetails)))
|
if (!(flags & SERV_LITERAL_ADDRESS) && (err = parse_server_addr(&sdetails)))
|
||||||
ret_err(err);
|
ret_err(err);
|
||||||
|
|
||||||
@@ -3022,24 +3025,24 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma
|
|||||||
{
|
{
|
||||||
/* server=//1.2.3.4 is special. */
|
/* server=//1.2.3.4 is special. */
|
||||||
if (lastdomain)
|
if (lastdomain)
|
||||||
{
|
{
|
||||||
if (strlen(domain) == 0)
|
if (strlen(cur_domain) == 0)
|
||||||
flags |= SERV_FOR_NODOTS;
|
flags |= SERV_FOR_NODOTS;
|
||||||
else
|
else
|
||||||
flags &= ~SERV_FOR_NODOTS;
|
flags &= ~SERV_FOR_NODOTS;
|
||||||
|
|
||||||
/* address=/#/ matches the same as without domain */
|
/* address=/#/ matches the same as without domain */
|
||||||
if (option == 'A' && domain[0] == '#' && domain[1] == 0)
|
if (option == 'A' && cur_domain[0] == '#' && cur_domain[1] == 0)
|
||||||
domain[0] = 0;
|
cur_domain[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!add_update_server(flags, sdetails.addr, sdetails.source_addr, sdetails.interface, domain, &addr))
|
if (!add_update_server(flags, sdetails.addr, sdetails.source_addr, sdetails.interface, cur_domain, &addr))
|
||||||
ret_err(gen_err);
|
ret_err(gen_err);
|
||||||
|
|
||||||
if (!lastdomain || domain == lastdomain)
|
if (!lastdomain || cur_domain == lastdomain)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
domain += strlen(domain) + 1;
|
cur_domain += strlen(cur_domain) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (flags & SERV_LITERAL_ADDRESS)
|
if (flags & SERV_LITERAL_ADDRESS)
|
||||||
|
|||||||
Reference in New Issue
Block a user