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_MED,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 B32021F8C6 for ; Thu, 8 Jul 2021 18:32:47 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BA58939450EC for ; Thu, 8 Jul 2021 18:32:46 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BA58939450EC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1625769166; bh=LWA4nQT+VnFRoLz4y1EVE4dYAwAXMFhWL8qYOvja1AQ=; 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=OiYp7hJoW1PGU/WfhHpWOQUiTZAPvEr3uU+AINav0GxGcNmQS2NWtRSrexfPy/pdc jmI2abCImlFo+yXfqwWI16aVpihNkcflVgfTFDCD5Iv69r4xw07XzoeSPvDKQQqhLN RupWIJ98kHTJRNrbMJRHgMmRfPbo/XR9tWT3z4Xo= Received: from mail-pg1-x535.google.com (mail-pg1-x535.google.com [IPv6:2607:f8b0:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id 5A6BA383B404 for ; Thu, 8 Jul 2021 18:32:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5A6BA383B404 Received: by mail-pg1-x535.google.com with SMTP id k20so144341pgg.7 for ; Thu, 08 Jul 2021 11:32:25 -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:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=LWA4nQT+VnFRoLz4y1EVE4dYAwAXMFhWL8qYOvja1AQ=; b=aZnbqtSfZzPnIOGoE18d6ccD6aeHGhQXJVwpmuq3CwT3TUBx6X/hnoXAZ/BgIwVp0f hRHRhT6tWTPI5kooVRUeQTh2mtF3bHP+r7LWFxy+wbPtnYg0qtGOwaeCywK8hb5SN/nL bX7SfHxgqXQ2taG1kcRRpZ7WZzB2LCU+asX4zWliLJgpkvhnvwG3GPf87I0kzJqG1znm cUry0znWilpyV/ptO/dpq8PUScjWs8ZRKGNadqOMXkGsF4vqTwweN7GLh/kqix/doxSM 72qf+U4Stw2MkuXaLmpQPYD4I5ONLcLW+SblW+XmJSDIZx/OZDsZrb7MczU6KBC0CI7U usOA== X-Gm-Message-State: AOAM533ylfxdGKehxtdaAzFgpWZSGbGuaMVXRW4GEPt29+2W+wji6ORM SwCRAt1ulP0EFYGOqHI6/xpT1g== X-Google-Smtp-Source: ABdhPJx8js4N0EfqcYGjsUl1D5yK/krSUWd9kRYFhvdfkgB87srEI2GeASVXrTkYZTi79mENmIR2+A== X-Received: by 2002:a65:5343:: with SMTP id w3mr33495814pgr.51.1625769144315; Thu, 08 Jul 2021 11:32:24 -0700 (PDT) Received: from [192.168.1.108] ([177.194.59.218]) by smtp.gmail.com with ESMTPSA id h18sm4167185pgl.87.2021.07.08.11.32.22 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 08 Jul 2021 11:32:23 -0700 (PDT) Subject: Re: [PATCH 02/30] resolv: Deprecate legacy interfaces in To: libc-alpha@sourceware.org, Florian Weimer References: Message-ID: <274d8859-b2d7-02e6-0020-8dd71ab1b419@linaro.org> Date: Thu, 8 Jul 2021 15:32:21 -0300 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: 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: Adhemerval Zanella via Libc-alpha Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" On 08/07/2021 11:59, Florian Weimer via Libc-alpha wrote: > Debugging interfaces: p_*, fp_*, and sym_* could conceivably be > used to produce debug out, but these functions have not been > updated to parse more resource records, so they are not very useful > today. Likewise for ns_sprintrr and ns_sprintrrf. ns_format_ttl and > ns_parse_ttl are related to these. > > Internal implementation details: res_isourserver is probably only > useful in the implementation of a stub resolver, and so is > res_nameinquery. > > Unclear semantics and bad performance: ns_samedomain, ns_subdomain, > ns_makecanon, ns_samename do textual converions & copies instead of > checking equivalence of the wire format. > > res_hostalias has been superseded by getaddrinfo with AI_CANONNAME. > hostalias is not thread-safe. > > Some functions have int as size arguments instead of size_t, so they > do not follow current coding practices. However, dn_expand and > b64_ntop are somewhat widely used (to name just two examples), so > deprecating them seems problematic. > --- > NEWS | 4 +++ > resolv/arpa/nameser.h | 33 ++++++++++++----- > resolv/resolv.h | 84 +++++++++++++++++++++++++++---------------- > 3 files changed, 82 insertions(+), 39 deletions(-) > > diff --git a/NEWS b/NEWS > index 8e72946c3f..23ff7fd104 100644 > --- a/NEWS > +++ b/NEWS > @@ -77,6 +77,10 @@ Deprecated and removed features, and other changes affecting compatibility: > * The function pthread_yield has been deprecated; programs should use > the equivalent standard function sched_yield instead. > > +* Various rarely-used functions declared in and > + have been deprecated. Applications are encouraged to > + use dedicated DNS processing libraries if applicable. > + I think we should explicitly list all the deprecated functions here. > * The pthread cancellation handler is now installed with SA_RESTART and > pthread_cancel will always send the internal SIGCANCEL on a cancellation > request. It should not be visible to application since the cancellation > diff --git a/resolv/arpa/nameser.h b/resolv/arpa/nameser.h > index a99d5ec508..017d7b194a 100644 > --- a/resolv/arpa/nameser.h > +++ b/resolv/arpa/nameser.h > @@ -52,6 +52,12 @@ > #include > #include > > +#ifdef _LIBC > +# define __NAMESER_DEPRECATED > +#else > +# define __NAMESER_DEPRECATED __attribute_deprecated__ > +#endif > + Is this correct for installed headers to expose the deprecated to users as well? Afaik it is only defined by include/libc-symbols.h. > /* > * Define constants based on RFC 883, RFC 1034, RFC 1035 > */ > @@ -401,14 +407,18 @@ int ns_skiprr (const unsigned char *, const unsigned char *, > int ns_parserr (ns_msg *, ns_sect, int, ns_rr *) __THROW; > int ns_sprintrr (const ns_msg *, const ns_rr *, > const char *, const char *, char *, size_t) > - __THROW; > + __THROW __NAMESER_DEPRECATED; > int ns_sprintrrf (const unsigned char *, size_t, const char *, > ns_class, ns_type, unsigned long, > const unsigned char *, size_t, const char *, > - const char *, char *, size_t) __THROW; > -int ns_format_ttl (unsigned long, char *, size_t) __THROW; > -int ns_parse_ttl (const char *, unsigned long *) __THROW; > -uint32_t ns_datetosecs (const char *, int *) __THROW; > + const char *, char *, size_t) > + __THROW __NAMESER_DEPRECATED; > +int ns_format_ttl (unsigned long, char *, size_t) > + __THROW __NAMESER_DEPRECATED; > +int ns_parse_ttl (const char *, unsigned long *) > + __THROW __NAMESER_DEPRECATED; > +uint32_t ns_datetosecs (const char *, int *) > + __THROW __NAMESER_DEPRECATED; > int ns_name_ntol (const unsigned char *, unsigned char *, size_t) > __THROW; > int ns_name_ntop (const unsigned char *, char *, size_t) __THROW; Ok. > @@ -431,10 +441,15 @@ int ns_name_skip (const unsigned char **, const unsigned char *) > void ns_name_rollback (const unsigned char *, > const unsigned char **, > const unsigned char **) __THROW; > -int ns_samedomain (const char *, const char *) __THROW; > -int ns_subdomain (const char *, const char *) __THROW; > -int ns_makecanon (const char *, char *, size_t) __THROW; > -int ns_samename (const char *, const char *) __THROW; > + > +int ns_samedomain (const char *, const char *) __THROW > + __NAMESER_DEPRECATED; > +int ns_subdomain (const char *, const char *) __THROW > + __NAMESER_DEPRECATED; > +int ns_makecanon (const char *, char *, size_t) __THROW > + __NAMESER_DEPRECATED; > +int ns_samename (const char *, const char *) __THROW > + __NAMESER_DEPRECATED; > __END_DECLS > > #include Ok. > diff --git a/resolv/resolv.h b/resolv/resolv.h > index a039a9e636..d55942a6b6 100644 > --- a/resolv/resolv.h > +++ b/resolv/resolv.h > @@ -174,14 +174,27 @@ __END_DECLS > #define res_search __res_search > #define res_send __res_send > > +#ifdef _LIBC > +# define __RESOLV_DEPRECATED > +# define __RESOLV_DEPRECATED_MSG(msg) > +#else > +# define __RESOLV_DEPRECATED __attribute_deprecated__ > +# define __RESOLV_DEPRECATED_MSG(msg) __attribute_deprecated_msg__ (msg) > +#endif > + > __BEGIN_DECLS > -void fp_nquery (const unsigned char *, int, FILE *) __THROW; > -void fp_query (const unsigned char *, FILE *) __THROW; > -const char * hostalias (const char *) __THROW; > -void p_query (const unsigned char *) __THROW; > +void fp_nquery (const unsigned char *, int, FILE *) __THROW > + __RESOLV_DEPRECATED; > +void fp_query (const unsigned char *, FILE *) __THROW > + __RESOLV_DEPRECATED; > +const char * hostalias (const char *) __THROW > + __RESOLV_DEPRECATED_MSG ("use getaddrinfo instead"); > +void p_query (const unsigned char *) __THROW > + __RESOLV_DEPRECATED; > void res_close (void) __THROW; > int res_init (void) __THROW; > -int res_isourserver (const struct sockaddr_in *) __THROW; > +int res_isourserver (const struct sockaddr_in *) __THROW > + __RESOLV_DEPRECATED; > int res_mkquery (int, const char *, int, int, > const unsigned char *, int, const unsigned char *, > unsigned char *, int) __THROW; > @@ -238,50 +251,61 @@ int res_hnok (const char *) __THROW; > int res_ownok (const char *) __THROW; > int res_mailok (const char *) __THROW; > int res_dnok (const char *) __THROW; > -int sym_ston (const struct res_sym *, const char *, int *) __THROW; > -const char * sym_ntos (const struct res_sym *, int, int *) __THROW; > -const char * sym_ntop (const struct res_sym *, int, int *) __THROW; > +int sym_ston (const struct res_sym *, const char *, int *) __THROW > + __RESOLV_DEPRECATED; > +const char * sym_ntos (const struct res_sym *, int, int *) __THROW > + __RESOLV_DEPRECATED; > +const char * sym_ntop (const struct res_sym *, int, int *) __THROW > + __RESOLV_DEPRECATED; > int b64_ntop (const unsigned char *, size_t, char *, size_t) > - __THROW; > + __THROW; > int b64_pton (char const *, unsigned char *, size_t) __THROW; > -int loc_aton (const char *__ascii, unsigned char *__binary) __THROW; > -const char * loc_ntoa (const unsigned char *__binary, char *__ascii) __THROW; > +int loc_aton (const char *__ascii, unsigned char *__binary) __THROW > + __RESOLV_DEPRECATED; > +const char * loc_ntoa (const unsigned char *__binary, char *__ascii) __THROW > + __RESOLV_DEPRECATED; > int dn_skipname (const unsigned char *, const unsigned char *) > - __THROW; > -void putlong (uint32_t, unsigned char *) __THROW; > -void putshort (uint16_t, unsigned char *) __THROW; > -const char * p_class (int) __THROW; > -const char * p_time (uint32_t) __THROW; > -const char * p_type (int) __THROW; > -const char * p_rcode (int) __THROW; > -const unsigned char * p_cdnname (const unsigned char *, > - const unsigned char *, int, FILE *) __THROW; > + __THROW; > +void putlong (uint32_t, unsigned char *) __THROW > + __RESOLV_DEPRECATED_MSG ("use NS_PUT16 instead"); > +void putshort (uint16_t, unsigned char *) __THROW > + __RESOLV_DEPRECATED_MSG ("use NS_PUT32 instead"); > +const char * p_class (int) __THROW __RESOLV_DEPRECATED; > +const char * p_time (uint32_t) __THROW __RESOLV_DEPRECATED; > +const char * p_type (int) __THROW __RESOLV_DEPRECATED; > +const char * p_rcode (int) __THROW __RESOLV_DEPRECATED; > +const unsigned char * p_cdnname (const unsigned char *, const unsigned char *, > + int, FILE *) __THROW __RESOLV_DEPRECATED; > const unsigned char * p_cdname (const unsigned char *, const unsigned char *, > - FILE *) __THROW; > + FILE *) __THROW __RESOLV_DEPRECATED; > const unsigned char * p_fqnname (const unsigned char *__cp, > const unsigned char *__msg, > - int, char *, int) __THROW; > -const unsigned char * p_fqname (const unsigned char *, > - const unsigned char *, FILE *) __THROW; > -const char * p_option (unsigned long __option) __THROW; > + int, char *, int) __THROW __RESOLV_DEPRECATED; > +const unsigned char * p_fqname (const unsigned char *, const unsigned char *, > + FILE *) __THROW __RESOLV_DEPRECATED; > +const char * p_option (unsigned long __option) __THROW __RESOLV_DEPRECATED; > int dn_count_labels (const char *) __THROW; > int dn_comp (const char *, unsigned char *, int, unsigned char **, > unsigned char **) __THROW; > int dn_expand (const unsigned char *, const unsigned char *, > const unsigned char *, char *, int) __THROW; > -unsigned int res_randomid (void) __THROW; > +unsigned int res_randomid (void) __THROW > + __RESOLV_DEPRECATED_MSG ("use getentropy instead"); > int res_nameinquery (const char *, int, int, > const unsigned char *, > - const unsigned char *) __THROW; > + const unsigned char *) __THROW > + __RESOLV_DEPRECATED; > int res_queriesmatch (const unsigned char *, > const unsigned char *, > const unsigned char *, > - const unsigned char *) __THROW; > + const unsigned char *) __THROW > + __RESOLV_DEPRECATED; > /* Things involving a resolver context. */ > int res_ninit (res_state) __THROW; > -void fp_resstat (const res_state, FILE *) __THROW; > +void fp_resstat (const res_state, FILE *) __THROW > + __RESOLV_DEPRECATED; > const char * res_hostalias (const res_state, const char *, char *, size_t) > - __THROW; > + __THROW __RESOLV_DEPRECATED_MSG ("use getaddrinfo instead"); > int res_nquery (res_state, const char *, int, int, > unsigned char *, int) __THROW; > int res_nsearch (res_state, const char *, int, int, >