From patchwork Thu Jul 15 09:09:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 44347 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B22133AA9915 for ; Thu, 15 Jul 2021 09:10:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B22133AA9915 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1626340212; bh=ggBfm2JATdxpvEdubmQqWMAR1ijktzmQMZAguPpgrtQ=; h=To:Subject:In-Reply-To:References:Date:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=gcASn21KjlZOinxC3whBlwKdt08bw0oRXiPkyef7+EAL5hYm04GFTcVTWZE3yb3M1 Zk/irLY/c8JTsTndYz1Y5/6v89ukQiLy0LvImjVyHrI74kZeZMQ93aZ/6++YF6ZWMt lVLBviIdfTnT9wuZW6aAChgU2bYir6OY5XDUJCEk= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id F06A13858D29 for ; Thu, 15 Jul 2021 09:09:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F06A13858D29 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-136-mxkOZTT3OIyPAD2a8BtQCg-1; Thu, 15 Jul 2021 05:09:04 -0400 X-MC-Unique: mxkOZTT3OIyPAD2a8BtQCg-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 78B97362FD for ; Thu, 15 Jul 2021 09:09:03 +0000 (UTC) Received: from oldenburg.str.redhat.com (ovpn-112-73.phx2.redhat.com [10.3.112.73]) by smtp.corp.redhat.com (Postfix) with ESMTPS id A32275DA61 for ; Thu, 15 Jul 2021 09:09:02 +0000 (UTC) To: libc-alpha@sourceware.org Subject: [PATCH 01/24] resolv: Deprecate legacy interfaces in libresolv In-Reply-To: References: X-From-Line: 89c2ab7035b90ef5fb3f7b66ad0174ffcaf2bdc1 Mon Sep 17 00:00:00 2001 Message-Id: <89c2ab7035b90ef5fb3f7b66ad0174ffcaf2bdc1.1626339931.git.fweimer@redhat.com> Date: Thu, 15 Jul 2021 11:09:00 +0200 User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.9 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org 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: , X-Patchwork-Original-From: Florian Weimer via Libc-alpha From: Florian Weimer Reply-To: Florian Weimer Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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. inet_ntoa cannot handle IPv6 addresses. 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. Reviewed-by: Carlos O'Donell --- NEWS | 14 +++++++ inet/arpa/inet.h | 3 +- resolv/arpa/nameser.h | 33 ++++++++++++----- resolv/resolv.h | 86 +++++++++++++++++++++++++++---------------- 4 files changed, 95 insertions(+), 41 deletions(-) diff --git a/NEWS b/NEWS index 13ffe627da..4df348cce5 100644 --- a/NEWS +++ b/NEWS @@ -93,6 +93,20 @@ 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. +* The function inet_neta declared in has been deprecated. + +* Various rarely-used functions declared in and + have been deprecated. Applications are encouraged to + use dedicated DNS processing libraries if applicable. For , + this affects the functions dn_count_labels, fp_nquery, fp_query, + fp_resstat, hostalias, loc_aton, loc_ntoa, p_cdname, p_cdnname, + p_class, p_fqname, p_fqnname, p_option, p_query, p_rcode, p_time, + p_type, putlong, putshort, res_hostalias, res_isourserver, + res_nameinquery, res_queriesmatch, res_randomid, sym_ntop, sym_ntos, + sym_ston. For , the functions ns_datetosecs, + ns_format_ttl, ns_makecanon, ns_parse_ttl, ns_samedomain, ns_samename, + ns_sprintrr, ns_sprintrrf, ns_subdomain have been deprecated. + * 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/inet/arpa/inet.h b/inet/arpa/inet.h index 3a99dbfa5a..54c9c6d468 100644 --- a/inet/arpa/inet.h +++ b/inet/arpa/inet.h @@ -74,7 +74,8 @@ extern int inet_aton (const char *__cp, struct in_addr *__inp) __THROW; /* Format a network number NET into presentation format and place result in buffer starting at BUF with length of LEN bytes. */ -extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW; +extern char *inet_neta (in_addr_t __net, char *__buf, size_t __len) __THROW + __attribute_deprecated_msg__ ("Use inet_ntop instead"); /* Convert network number for interface type AF in buffer starting at CP to presentation format. The result will specifiy BITS bits of 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 + /* * 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; @@ -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 diff --git a/resolv/resolv.h b/resolv/resolv.h index a039a9e636..02a35173e9 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 dn_count_labels (const char *) __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 __RESOLV_DEPRECATED; 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,