From: Volker Lendecke Date: Sat, 13 Jun 2026 08:51:04 +0000 (+0200) Subject: addns: Move dns_domain_name_from_string() into its only calling file X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c61e93bd9b7b3cdd4b67a682f13094bc85ff0ba7;p=thirdparty%2Fsamba.git addns: Move dns_domain_name_from_string() into its only calling file Signed-off-by: Volker Lendecke Reviewed-by: Stefan Metzmacher --- diff --git a/lib/addns/dns.h b/lib/addns/dns.h index bc61b3b9d10..bff10db800b 100644 --- a/lib/addns/dns.h +++ b/lib/addns/dns.h @@ -143,12 +143,6 @@ struct dns_buffer { DNS_ERROR error; }; -/* from dnsutils.c */ - -DNS_ERROR dns_domain_name_from_string( TALLOC_CTX *mem_ctx, - const char *pszDomainName, - struct dns_domain_name **presult ); - /* from dnsrecord.c */ DNS_ERROR dns_create_query( TALLOC_CTX *mem_ctx, const char *name, diff --git a/lib/addns/dnsrecord.c b/lib/addns/dnsrecord.c index e5fe0715841..8b9793b4829 100644 --- a/lib/addns/dnsrecord.c +++ b/lib/addns/dnsrecord.c @@ -24,6 +24,106 @@ #include "dns.h" #include "lib/util/genrand.h" +static DNS_ERROR LabelList( TALLOC_CTX *mem_ctx, + const char *name, + struct dns_domain_label **presult ) +{ + struct dns_domain_label *result; + const char *dot; + + for (dot = name; *dot != '\0'; dot += 1) { + char c = *dot; + + if (c == '.') + break; + + if (c == '-') continue; + if ((c >= 'a') && (c <= 'z')) continue; + if ((c >= 'A') && (c <= 'Z')) continue; + if ((c >= '0') && (c <= '9')) continue; + + return ERROR_DNS_INVALID_NAME; + } + + if ((dot - name) > 63) { + /* + * DNS labels can only be 63 chars long + */ + return ERROR_DNS_INVALID_NAME; + } + + if (!(result = talloc_zero(mem_ctx, struct dns_domain_label))) { + return ERROR_DNS_NO_MEMORY; + } + + if (*dot == '\0') { + /* + * No dot around, so this is the last component + */ + + if (!(result->label = talloc_strdup(result, name))) { + TALLOC_FREE(result); + return ERROR_DNS_NO_MEMORY; + } + result->len = strlen(result->label); + *presult = result; + return ERROR_DNS_SUCCESS; + } + + if (dot[1] == '.') { + /* + * Two dots in a row, reject + */ + + TALLOC_FREE(result); + return ERROR_DNS_INVALID_NAME; + } + + if (dot[1] != '\0') { + /* + * Something follows, get the rest + */ + + DNS_ERROR err = LabelList(result, dot+1, &result->next); + + if (!ERR_DNS_IS_OK(err)) { + TALLOC_FREE(result); + return err; + } + } + + result->len = (dot - name); + + if (!(result->label = talloc_strndup(result, name, result->len))) { + TALLOC_FREE(result); + return ERROR_DNS_NO_MEMORY; + } + + *presult = result; + return ERROR_DNS_SUCCESS; +} + +static DNS_ERROR dns_domain_name_from_string( TALLOC_CTX *mem_ctx, + const char *pszDomainName, + struct dns_domain_name **presult ) +{ + struct dns_domain_name *result; + DNS_ERROR err; + + if (!(result = talloc(mem_ctx, struct dns_domain_name))) { + return ERROR_DNS_NO_MEMORY; + } + + err = LabelList( result, pszDomainName, &result->pLabelList ); + if (!ERR_DNS_IS_OK(err)) { + TALLOC_FREE(result); + return err; + } + + *presult = result; + return ERROR_DNS_SUCCESS; +} + DNS_ERROR dns_create_query( TALLOC_CTX *mem_ctx, const char *name, uint16_t q_type, uint16_t q_class, struct dns_request **preq ) diff --git a/lib/addns/dnsutils.c b/lib/addns/dnsutils.c deleted file mode 100644 index 53401ebedb6..00000000000 --- a/lib/addns/dnsutils.c +++ /dev/null @@ -1,131 +0,0 @@ -/* - Linux DNS client library implementation - - Copyright (C) 2006 Krishna Ganugapati - Copyright (C) 2006 Gerald Carter - - ** NOTE! The following LGPL license applies to the libaddns - ** library. This does NOT imply that all of Samba is released - ** under the LGPL - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, see . -*/ - -#include "includes.h" -#include "librpc/ndr/libndr.h" -#include "librpc/gen_ndr/ndr_misc.h" - -#include "dns.h" -#include - - -static DNS_ERROR LabelList( TALLOC_CTX *mem_ctx, - const char *name, - struct dns_domain_label **presult ) -{ - struct dns_domain_label *result; - const char *dot; - - for (dot = name; *dot != '\0'; dot += 1) { - char c = *dot; - - if (c == '.') - break; - - if (c == '-') continue; - if ((c >= 'a') && (c <= 'z')) continue; - if ((c >= 'A') && (c <= 'Z')) continue; - if ((c >= '0') && (c <= '9')) continue; - - return ERROR_DNS_INVALID_NAME; - } - - if ((dot - name) > 63) { - /* - * DNS labels can only be 63 chars long - */ - return ERROR_DNS_INVALID_NAME; - } - - if (!(result = talloc_zero(mem_ctx, struct dns_domain_label))) { - return ERROR_DNS_NO_MEMORY; - } - - if (*dot == '\0') { - /* - * No dot around, so this is the last component - */ - - if (!(result->label = talloc_strdup(result, name))) { - TALLOC_FREE(result); - return ERROR_DNS_NO_MEMORY; - } - result->len = strlen(result->label); - *presult = result; - return ERROR_DNS_SUCCESS; - } - - if (dot[1] == '.') { - /* - * Two dots in a row, reject - */ - - TALLOC_FREE(result); - return ERROR_DNS_INVALID_NAME; - } - - if (dot[1] != '\0') { - /* - * Something follows, get the rest - */ - - DNS_ERROR err = LabelList(result, dot+1, &result->next); - - if (!ERR_DNS_IS_OK(err)) { - TALLOC_FREE(result); - return err; - } - } - - result->len = (dot - name); - - if (!(result->label = talloc_strndup(result, name, result->len))) { - TALLOC_FREE(result); - return ERROR_DNS_NO_MEMORY; - } - - *presult = result; - return ERROR_DNS_SUCCESS; -} - -DNS_ERROR dns_domain_name_from_string( TALLOC_CTX *mem_ctx, - const char *pszDomainName, - struct dns_domain_name **presult ) -{ - struct dns_domain_name *result; - DNS_ERROR err; - - if (!(result = talloc(mem_ctx, struct dns_domain_name))) { - return ERROR_DNS_NO_MEMORY; - } - - err = LabelList( result, pszDomainName, &result->pLabelList ); - if (!ERR_DNS_IS_OK(err)) { - TALLOC_FREE(result); - return err; - } - - *presult = result; - return ERROR_DNS_SUCCESS; -} diff --git a/lib/addns/wscript_build b/lib/addns/wscript_build index 694d71b732e..d6ad5952c2b 100644 --- a/lib/addns/wscript_build +++ b/lib/addns/wscript_build @@ -4,7 +4,6 @@ bld.SAMBA_LIBRARY('addns', source=''' dnsquery.c dnsrecord.c - dnsutils.c dnssock.c dnsgss.c dnsmarshall.c