From 3c4ae50abe6f53071e07adeda75b84f8ae63e843 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 11 Jun 2022 05:48:35 +0900 Subject: [PATCH] dns-domain: reduce indentation in dns_service_split() --- src/shared/dns-domain.c | 79 ++++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c index 20abb84f0f..d202fe5d86 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,50 +1056,44 @@ 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)) { - - if (dns_service_name_label_is_valid(a, an)) { - /* OK, got . . . */ - - name = strndup(a, an); - if (!name) - return -ENOMEM; - - type = strjoin(b, ".", c); - if (!type) - return -ENOMEM; - - d = p; - goto finish; - } - - } else if (srv_type_label_is_valid(a, an)) { - - /* OK, got . . */ - - name = NULL; - - type = strjoin(a, ".", b); - if (!type) - return -ENOMEM; - - d = q; - goto finish; } } - name = NULL; - type = NULL; - d = joined; + switch (x) { + case 2: + if (!srv_type_label_is_valid(a, an)) + break; + + /* OK, got . . */ + + name = NULL; + + type = strjoin(a, ".", b); + if (!type) + return -ENOMEM; + + d = q; + break; + + case 3: + if (!dns_service_name_label_is_valid(a, an)) + break; + + /* OK, got . . . */ + + name = strndup(a, an); + if (!name) + return -ENOMEM; + + type = strjoin(b, ".", c); + if (!type) + return -ENOMEM; + + d = p; + break; + } finish: r = dns_name_normalize(d, 0, &domain);