From a92c6d77dcd475579c39bdff141f5eb128e2a048 Mon Sep 17 00:00:00 2001 From: Simon Kelley Date: Sat, 3 Jul 2021 12:56:50 +0100 Subject: [PATCH] Tidy domain parsing, make --server=/*/1.2.3.4 equivalent to --server=1.2.3.4 --- src/domain-match.c | 25 +++++++++++++++---------- src/option.c | 6 +----- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/domain-match.c b/src/domain-match.c index b3280b8..f82bbdb 100644 --- a/src/domain-match.c +++ b/src/domain-match.c @@ -582,19 +582,24 @@ int add_update_server(int flags, struct server *serv = NULL; char *alloc_domain; - if (!domain || strlen(domain) == 0) - alloc_domain = whine_malloc(1); - else + if (!domain) + domain = ""; + + /* .domain == domain, for historical reasons. */ + if (*domain == '.') + while (*domain == '.') domain++; + else if (*domain == '*') { - if (*domain == '*') - { - domain++; - flags |= SERV_WILDCARD; - } - if (!(alloc_domain = canonicalise((char *)domain, NULL))) - return 0; + domain++; + if (domain != 0) + flags |= SERV_WILDCARD; } + if (*domain == 0) + alloc_domain = whine_malloc(1); + else if (!(alloc_domain = canonicalise((char *)domain, NULL))) + return 0; + /* See if there is a suitable candidate, and unmark only do this for forwarding servers, not address or local, to avoid delays on large numbers. */ diff --git a/src/option.c b/src/option.c index 97d49be..fba5fd9 100644 --- a/src/option.c +++ b/src/option.c @@ -2636,11 +2636,7 @@ static int one_opt(int option, char *arg, char *errstr, char *gen_err, int comma { char *last; - arg++; - /* elide leading dots - they are implied in the search algorithm */ - while (*arg == '.') arg++; - - domain = lastdomain = arg; + domain = lastdomain = ++arg; while ((last = split_chr(arg, '/'))) {