From: Yu Watanabe Date: Fri, 10 Jun 2022 20:48:35 +0000 (+0900) Subject: dns-domain: reduce indentation in dns_service_split() X-Git-Tag: v252-rc1~815^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F23707%2Fhead;p=thirdparty%2Fsystemd.git dns-domain: reduce indentation in dns_service_split() --- diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c index 20abb84f0fb..d202fe5d867 100644 --- a/src/shared/dns-domain.c +++ b/src/shared/dns-domain.c @@ -1024,7 +1024,7 @@ static bool dns_service_name_label_is_valid(const char *label, size_t n) { int dns_service_split(const char *joined, char **ret_name, char **ret_type, char **ret_domain) { _cleanup_free_ char *name = NULL, *type = NULL, *domain = NULL; - const char *p = joined, *q = NULL, *d = NULL; + const char *p = joined, *q = NULL, *d = joined; char a[DNS_LABEL_MAX+1], b[DNS_LABEL_MAX+1], c[DNS_LABEL_MAX+1]; int an, bn, cn, r; unsigned x = 0; @@ -1045,6 +1045,9 @@ int dns_service_split(const char *joined, char **ret_name, char **ret_type, char return bn; if (bn > 0) { + if (!srv_type_label_is_valid(b, bn)) + goto finish; + x++; /* If there was a second label, try to get the third one */ @@ -1053,51 +1056,45 @@ int dns_service_split(const char *joined, char **ret_name, char **ret_type, char if (cn < 0) return cn; - if (cn > 0) + if (cn > 0 && srv_type_label_is_valid(c, cn)) x++; - } else - cn = 0; - } else - an = 0; - - if (x >= 2 && srv_type_label_is_valid(b, bn)) { + } + } - if (x >= 3 && srv_type_label_is_valid(c, cn)) { + switch (x) { + case 2: + if (!srv_type_label_is_valid(a, an)) + break; - if (dns_service_name_label_is_valid(a, an)) { - /* OK, got . . . */ + /* OK, got . . */ - name = strndup(a, an); - if (!name) - return -ENOMEM; + name = NULL; - type = strjoin(b, ".", c); - if (!type) - return -ENOMEM; + type = strjoin(a, ".", b); + if (!type) + return -ENOMEM; - d = p; - goto finish; - } + d = q; + break; - } else if (srv_type_label_is_valid(a, an)) { + case 3: + if (!dns_service_name_label_is_valid(a, an)) + break; - /* OK, got . . */ + /* OK, got . . . */ - name = NULL; + name = strndup(a, an); + if (!name) + return -ENOMEM; - type = strjoin(a, ".", b); - if (!type) - return -ENOMEM; + type = strjoin(b, ".", c); + if (!type) + return -ENOMEM; - d = q; - goto finish; - } + d = p; + break; } - name = NULL; - type = NULL; - d = joined; - finish: r = dns_name_normalize(d, 0, &domain); if (r < 0)