From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS17314 8.43.84.0/22 X-Spam-Status: No, score=-4.2 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,NICE_REPLY_A, RCVD_IN_DNSWL_HI,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 2C73A1F8C6 for ; Thu, 15 Jul 2021 05:16:00 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5B65E39DC4F3 for ; Thu, 15 Jul 2021 05:15:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5B65E39DC4F3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1626326159; bh=C5wHcb+N/uNELCgSzo6LpHyGa7QHw9KR0jGRU0p9QQU=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=puGAjXmvj7++cfrE5RYQ6DiFYa/Mq5nqcrPPjTZWKrd1SJuepW3U4hrenDUpfTk4T juRz7TLW60uD2o51zmUm6hSJIys0gOgSKSwcXbFpBayyezFMcXlJ6/nufCTMZB3nIP 0PgV9wIOs4c05URYXpya9MtXjwIYOFaJ/G1El8sI= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by sourceware.org (Postfix) with ESMTP id 5BF9A39A28C8 for ; Thu, 15 Jul 2021 05:01:49 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5BF9A39A28C8 Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-383-onrqBYy2MHmxZbQWwjp0_A-1; Thu, 15 Jul 2021 01:01:48 -0400 X-MC-Unique: onrqBYy2MHmxZbQWwjp0_A-1 Received: by mail-qk1-f197.google.com with SMTP id u14-20020a05620a120eb02903b8bd5c7d95so2328842qkj.12 for ; Wed, 14 Jul 2021 22:01:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=C5wHcb+N/uNELCgSzo6LpHyGa7QHw9KR0jGRU0p9QQU=; b=kNiEu0bUE4ryZyP4ZbZrchpkxqMMiOqFYwDBP9BneWtQtoyv2s2NMOpNTvjwXfWIOe gYcHOzHEDBtrei1nKTffqBIuiwdVVC8hXBjPQYJqI44BnpBkxja70S+2fUI5JTe7WiBb FtrPL+oMQ5dRCFedT0kQHuRyCIF49BkFWclnWBUxb/8laNzs6+/vCD5OG/RdhDiRNUvd 9U9SY8FioUNeO6YuF4HITH+m7N43L2mGcYNFa+SZpcyOdflCBM6EofPrZ5NMqkUUAnKR 4IK681I8REwAwe67du4bK2VFDV7dNmNKGf4FM11ELneQfuf3JaLsirixsDEUpoXSTyin DM4A== X-Gm-Message-State: AOAM533V5ON+JNo3qgX3ZQ7JgwbOKgd/HbqQp/Zrur702cPmNbDq+j61 6YkKhLxJVfuBCVsKESRpg5Vlfs9hlvuu9vKWWCy4kZwQRDSW5E5yWehLmCr4Hx75PQM0GNPtR/l KkZeGdVNVQBcIPN2OBr3qSvhZrrWgwaMIYINAzQiQscBdBQwNHoEmskaokD/gzZKDdZlfmQ== X-Received: by 2002:ad4:47c2:: with SMTP id p2mr2278888qvw.42.1626325307332; Wed, 14 Jul 2021 22:01:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyZhp6Jm9WKmG3lx1NKiM9askDuvN7rvuDO9ej/x49UXZaAGtyB5/U7pvq2uXFLk5GLkJtcrw== X-Received: by 2002:ad4:47c2:: with SMTP id p2mr2278861qvw.42.1626325307097; Wed, 14 Jul 2021 22:01:47 -0700 (PDT) Received: from [192.168.1.16] (198-84-214-74.cpe.teksavvy.com. [198.84.214.74]) by smtp.gmail.com with ESMTPSA id w2sm1994281qkf.88.2021.07.14.22.01.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Jul 2021 22:01:46 -0700 (PDT) Subject: Re: [PATCH 20/30] resolv: Move ns_makecanon into its own file, and into libc To: Florian Weimer , libc-alpha@sourceware.org References: <363804ea0b68d8f90d9be5e7e9fbf0757188d176.1625755446.git.fweimer@redhat.com> Organization: Red Hat Message-ID: <305a7154-8bbd-7868-ecce-c6d3bd015759@redhat.com> Date: Thu, 15 Jul 2021 01:01:45 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <363804ea0b68d8f90d9be5e7e9fbf0757188d176.1625755446.git.fweimer@redhat.com> X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Carlos O'Donell via Libc-alpha Reply-To: Carlos O'Donell Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" On 7/8/21 11:05 AM, Florian Weimer via Libc-alpha wrote: > But only as an internal symbol, __libc_ns_makecanon. The libresolv > ABI is preserved. This is because the function is deprecated, and > it does not make sense to add new symbol versions for deprecated > functions. OK for glibc 2.34. Tested without regression on x86_64 and i686. Reviewed-by: Carlos O'Donell Tested-by: Carlos O'Donell > Also reformat the implementation to GNU style. > --- > include/arpa/nameser.h | 3 ++- > resolv/Makefile | 2 ++ > resolv/Versions | 1 + > resolv/ns_makecanon.c | 50 ++++++++++++++++++++++++++++++++++++++ > resolv/ns_samedomain.c | 38 ++--------------------------- > resolv/resolv-deprecated.c | 35 ++++++++++++++++++++++++++ > 6 files changed, 92 insertions(+), 37 deletions(-) > create mode 100644 resolv/ns_makecanon.c > create mode 100644 resolv/resolv-deprecated.c > > diff --git a/include/arpa/nameser.h b/include/arpa/nameser.h > index eff25178c8..a529cc86d3 100644 > --- a/include/arpa/nameser.h > +++ b/include/arpa/nameser.h > @@ -69,9 +69,10 @@ libresolv_hidden_proto (ns_sprintrr) > libresolv_hidden_proto (ns_sprintrrf) > libresolv_hidden_proto (ns_samedomain) > libresolv_hidden_proto (ns_samename) > -libresolv_hidden_proto (ns_makecanon) OK. > libresolv_hidden_proto (ns_format_ttl) > > +extern __typeof (ns_makecanon) __libc_ns_makecanon; > +libc_hidden_proto (__libc_ns_makecanon) OK. > extern __typeof (ns_name_compress) __ns_name_compress; > libc_hidden_proto (__ns_name_compress) > extern __typeof (ns_name_ntop) __ns_name_ntop; > diff --git a/resolv/Makefile b/resolv/Makefile > index 221bdc153d..d1ad5e4cba 100644 > --- a/resolv/Makefile > +++ b/resolv/Makefile > @@ -35,6 +35,7 @@ routines := \ > inet_addr \ > inet_ntop \ > inet_pton \ > + ns_makecanon \ OK. > ns_name_compress \ > ns_name_ntop \ > ns_name_pack \ > @@ -151,6 +152,7 @@ libresolv-routines := \ > res_mkquery \ > res_query \ > res_send \ > + resolv-deprecated \ OK. > # libresolv-routines > > $(libanl-routines-var) += \ > diff --git a/resolv/Versions b/resolv/Versions > index fc14cdb701..93078de25c 100644 > --- a/resolv/Versions > +++ b/resolv/Versions > @@ -72,6 +72,7 @@ libc { > __inet_pton_length; > __libc_dn_expand; > __libc_dn_skipname; > + __libc_ns_makecanon; OK. > __libc_res_dnok; > __libc_res_hnok; > __ns_name_compress; > diff --git a/resolv/ns_makecanon.c b/resolv/ns_makecanon.c > new file mode 100644 > index 0000000000..a6c3c2737d > --- /dev/null > +++ b/resolv/ns_makecanon.c > @@ -0,0 +1,50 @@ > +/* Add missing "." to domain names. OK. > + * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC") > + * Copyright (c) 1995,1999 by Internet Software Consortium. > + * > + * Permission to use, copy, modify, and distribute this software for any > + * purpose with or without fee is hereby granted, provided that the above > + * copyright notice and this permission notice appear in all copies. > + * > + * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS > + * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES > + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE > + * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL > + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR > + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS > + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS > + * SOFTWARE. > + */ > + > +#include > +#include > +#include > + > +/* Make a canonical copy of domain name SRC in DST. Behavior: > + foo -> foo. > + foo. -> foo. > + foo.. -> foo. > + foo\. -> foo\.. > + foo\\. -> foo\\. */ OK. > +int > +__libc_ns_makecanon (const char *src, char *dst, size_t dstsize) > +{ > + size_t n = strlen (src); > + > + if (n + sizeof "." > dstsize) /* sizeof == 2. */ > + { > + __set_errno (EMSGSIZE); > + return -1; > + } > + strcpy (dst, src); > + while (n >= 1U && dst[n - 1] == '.') /* Ends in ".". */ > + if (n >= 2U && dst[n - 2] == '\\' && /* Ends in "\.". */ > + (n < 3U || dst[n - 3] != '\\')) /* But not "\\.". */ > + break; > + else > + dst[--n] = '\0'; OK. > + dst[n++] = '.'; > + dst[n] = '\0'; > + return 0; OK. > +} > +libc_hidden_def (__libc_ns_makecanon) > diff --git a/resolv/ns_samedomain.c b/resolv/ns_samedomain.c > index 5d1bf39fc7..cfff2516b0 100644 > --- a/resolv/ns_samedomain.c > +++ b/resolv/ns_samedomain.c > @@ -143,40 +143,6 @@ ns_subdomain(const char *a, const char *b) { > return (ns_samename(a, b) != 1 && ns_samedomain(a, b)); > } > > -/*% > - * make a canonical copy of domain name "src" > - * > - * notes: > - * \code > - * foo -> foo. > - * foo. -> foo. > - * foo.. -> foo. > - * foo\. -> foo\.. > - * foo\\. -> foo\\. > - * \endcode > - */ > - > -int > -ns_makecanon(const char *src, char *dst, size_t dstsize) { > - size_t n = strlen(src); > - > - if (n + sizeof "." > dstsize) { /*%< Note: sizeof == 2 */ > - __set_errno (EMSGSIZE); > - return (-1); > - } > - strcpy(dst, src); > - while (n >= 1U && dst[n - 1] == '.') /*%< Ends in "." */ > - if (n >= 2U && dst[n - 2] == '\\' && /*%< Ends in "\." */ > - (n < 3U || dst[n - 3] != '\\')) /*%< But not "\\." */ > - break; > - else > - dst[--n] = '\0'; > - dst[n++] = '.'; > - dst[n] = '\0'; > - return (0); > -} > -libresolv_hidden_def (ns_makecanon) > - OK. Remove. > /*% > * determine whether domain name "a" is the same as domain name "b" > * > @@ -190,8 +156,8 @@ int > ns_samename(const char *a, const char *b) { > char ta[NS_MAXDNAME], tb[NS_MAXDNAME]; > > - if (ns_makecanon(a, ta, sizeof ta) < 0 || > - ns_makecanon(b, tb, sizeof tb) < 0) > + if (__libc_ns_makecanon(a, ta, sizeof ta) < 0 || > + __libc_ns_makecanon(b, tb, sizeof tb) < 0) OK. > return (-1); > if (strcasecmp(ta, tb) == 0) > return (1); > diff --git a/resolv/resolv-deprecated.c b/resolv/resolv-deprecated.c > new file mode 100644 > index 0000000000..cbd1078dc2 > --- /dev/null > +++ b/resolv/resolv-deprecated.c > @@ -0,0 +1,35 @@ > +/* Forwarders for deprecated libresolv functions which are implemented in libc. > + Copyright (C) 2021 Free Software Foundation, Inc. > + This file is part of the GNU C Library. > + > + The GNU C 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. > + > + The GNU C 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 the GNU C Library; if not, see > + . */ > + > +/* Some functions are used by the stub resolver implementation > + internally and thus have to be located in libc. They have been > + historially exported for application use as well. However, the > + stub resolver dependency on those functions is not intrinsic to > + what the stub resolver does, and it is possible that a future > + version of the stub resolver will not need them anymore. The > + public symbols for these functions remain in libresolv, and are not > + moved to libc, to avoid adding new symbol versions for legacy > + functions. */ > + > +#include > + > +int > +ns_makecanon (const char *src, char *dst, size_t dstsize) > +{ > + return __libc_ns_makecanon (src, dst, dstsize); > +} OK. > -- Cheers, Carlos.