From patchwork Fri Jul 2 18:47:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 44100 X-Patchwork-Delegate: carlos@redhat.com 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 525FE3984004 for ; Fri, 2 Jul 2021 18:49:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 525FE3984004 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1625251795; bh=6x0VzpM1DfNSc0pa1NzfcytaL9osUhDwQawF6PEfqRo=; 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=kSHKrrQb/VP5r/Diqd2JTj7Kk4LvZsMuyF+erzfUxnwqW4i3mSEoQztm02yE3mZ42 qF7G47Nyif3WGp2MSZUEKgzk9VehRuVH6QjnMQyHrd2QosnnzYyJHz9TUmSo+gQ2kR ZtuGiST1/X3waJyZgBUhHqwazeV02UEueXpCIqfs= 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 3B0163983C2C for ; Fri, 2 Jul 2021 18:47:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3B0163983C2C 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-176-Xfnf_BoONF2oNdsVsSvWNg-1; Fri, 02 Jul 2021 14:47:49 -0400 X-MC-Unique: Xfnf_BoONF2oNdsVsSvWNg-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 22A078042A8 for ; Fri, 2 Jul 2021 18:47:49 +0000 (UTC) Received: from oldenburg.str.redhat.com (ovpn-115-5.ams2.redhat.com [10.36.115.5]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 489DA60C04 for ; Fri, 2 Jul 2021 18:47:48 +0000 (UTC) To: libc-alpha@sourceware.org Subject: [PATCH 02/30] resolv: Deprecate legacy interfaces in In-Reply-To: References: X-From-Line: dce060b86df5cbd151a0887209773c5d7d956743 Mon Sep 17 00:00:00 2001 Message-Id: Date: Fri, 02 Jul 2021 20:47:46 +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.12 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.7 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. 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 60933bd975..7f59b1ba96 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. + * 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 + /* * 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..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,