From 262dadf50ed3688c6168680d22a6abf92a9e3ffa Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Mon, 7 Nov 2022 23:14:30 +0000 Subject: Fix --server with multiple domains. --- src/option.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/option.c b/src/option.c index d067a16..4263dd6 100644 --- a/src/option.c +++ b/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 'A': /* --address */ { - char *lastdomain = NULL, *domain = ""; + char *lastdomain = NULL, *domain = "", *cur_domain; u16 flags = 0; char *err; union all_addr addr; @@ -3008,9 +3008,12 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma if (servers_only && option == 'S') flags |= SERV_FROM_FILE; - + + cur_domain = domain; while ((flags & SERV_LITERAL_ADDRESS) || parse_server_next(&sdetails)) { + cur_domain = domain; + if (!(flags & SERV_LITERAL_ADDRESS) && (err = parse_server_addr(&sdetails))) 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. */ if (lastdomain) - { - if (strlen(domain) == 0) - flags |= SERV_FOR_NODOTS; - else - flags &= ~SERV_FOR_NODOTS; - - /* address=/#/ matches the same as without domain */ - if (option == 'A' && domain[0] == '#' && domain[1] == 0) - domain[0] = 0; - } - - if (!add_update_server(flags, sdetails.addr, sdetails.source_addr, sdetails.interface, domain, &addr)) + { + if (strlen(cur_domain) == 0) + flags |= SERV_FOR_NODOTS; + else + flags &= ~SERV_FOR_NODOTS; + + /* address=/#/ matches the same as without domain */ + if (option == 'A' && cur_domain[0] == '#' && cur_domain[1] == 0) + cur_domain[0] = 0; + } + + if (!add_update_server(flags, sdetails.addr, sdetails.source_addr, sdetails.interface, cur_domain, &addr)) ret_err(gen_err); - - if (!lastdomain || domain == lastdomain) + + if (!lastdomain || cur_domain == lastdomain) break; - domain += strlen(domain) + 1; + cur_domain += strlen(cur_domain) + 1; } if (flags & SERV_LITERAL_ADDRESS) -- cgit v1.2.1