public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Carlos O'Donell <carlos@redhat.com>
To: Florian Weimer <fweimer@redhat.com>, libc-alpha@sourceware.org
Subject: Re: [PATCH 01/24] resolv: Deprecate legacy interfaces in libresolv
Date: Sun, 18 Jul 2021 21:48:58 -0400	[thread overview]
Message-ID: <3adaee6f-df99-697a-6315-972ae0eff1aa@redhat.com> (raw)
In-Reply-To: <89c2ab7035b90ef5fb3f7b66ad0174ffcaf2bdc1.1626339931.git.fweimer@redhat.com>

On 7/15/21 5:09 AM, 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.
> 
> 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.

OK for 2.34.

Reviewed-by: Carlos O'Donell <carlos@systemhalted.org>

> ---
>  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 <arpa/inet.h> has been deprecated.
> +
> +* Various rarely-used functions declared in <resolv.h> and
> +  <arpa/nameser.h> have been deprecated.  Applications are encouraged to
> +  use dedicated DNS processing libraries if applicable.  For <resolv.h>,
> +  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 <arpa/nameser.h>, 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.

OK.

> +
>  * 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");

OK.

>  
>  /* 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 <sys/types.h>
>  #include <stdint.h>
>  
> +#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 <arpa/nameser_compat.h>
> 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,
> 

OK.

-- 
Cheers,
Carlos.


  parent reply	other threads:[~2021-07-19  1:49 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-15  9:08 [PATCH v3 00/24] Move nss_dns and parts of libresolv into libc Florian Weimer
2021-07-15  9:09 ` [PATCH 01/24] resolv: Deprecate legacy interfaces in libresolv Florian Weimer
2021-07-15  9:30   ` Andreas Schwab
2021-07-15  9:32     ` Florian Weimer
2021-07-19  1:48   ` Carlos O'Donell [this message]
2021-07-15  9:09 ` [PATCH 02/24] resolv: Move ns_name_skip to its own file and into libc (bug 28091) Florian Weimer
2021-07-19  1:52   ` Carlos O'Donell
2021-07-15  9:09 ` [PATCH 03/24] resolv: Move ns_name_uncompress into its own file and into libc Florian Weimer
2021-07-15  9:09 ` [PATCH 04/24] resolv: Move ns_name_pton " Florian Weimer
2021-07-15  9:09 ` [PATCH 05/24] resolv: Move ns_name_pack " Florian Weimer
2021-07-15  9:09 ` [PATCH 06/24] resolv: Move ns_name_compress " Florian Weimer
2021-07-15  9:09 ` [PATCH 07/24] resolv: Move dn_expand to " Florian Weimer
2021-07-15  9:09 ` [PATCH 08/24] resolv: Move _getlong, _getshort, __putlong, __putshort to res-putget Florian Weimer
2021-07-15  9:09 ` [PATCH 09/24] resolv: Move dn_comp to its own file and into libc Florian Weimer
2021-07-15  9:09 ` [PATCH 10/24] resolv: Move dn_skipname " Florian Weimer
2021-07-15  9:09 ` [PATCH 11/24] resolv: Rename res_comp.c to res-name-checking.c and move " Florian Weimer
2021-07-15  9:10 ` [PATCH 12/24] resolv: Move __res_get_nsaddr to its own file and " Florian Weimer
2021-07-15  9:10 ` [PATCH 13/24] resolv: Move res_isourserver to its own file and reformat to GNU style Florian Weimer
2021-07-15  9:10 ` [PATCH 14/24] resolv: Move ns_makecanon into its own file, and into libc Florian Weimer
2021-07-15  9:10 ` [PATCH 15/24] resolv: Move ns_samename " Florian Weimer
2021-07-15  9:10 ` [PATCH 16/24] resolv: Move res_nameinquery to its own file " Florian Weimer
2021-07-15  9:10 ` [PATCH 17/24] resolv: Move res_queriesmatch " Florian Weimer
2021-07-15  9:10 ` [PATCH 18/24] resolv: Move __res_context_hostalias into " Florian Weimer
2021-07-15  9:10 ` [PATCH 19/24] resolv: Move res_hostalias into its own file, along with hostalias Florian Weimer
2021-07-15  9:10 ` [PATCH 20/24] resolv: Move res_send, res_nsend into libc Florian Weimer
2021-07-19  1:54   ` Carlos O'Donell
2021-07-15  9:10 ` [PATCH 21/24] resolv: Move res_mkquery, res_nmkquery " Florian Weimer
2021-07-15  9:10 ` [PATCH 22/24] resolv: Move res_query functions " Florian Weimer
2021-07-21  9:54   ` Andreas Schwab
2021-07-21 10:16     ` Florian Weimer
2021-07-15  9:10 ` [PATCH 23/24] resolv: Move nss_dns " Florian Weimer
2021-07-15  9:11 ` [PATCH 24/24] nss: Directly load nss_dns, without going through dlsym/dlopen Florian Weimer
2021-07-20  9:17 ` [PATCH v3 00/24] Move nss_dns and parts of libresolv into libc Andreas Schwab
2021-07-20 10:26   ` Florian Weimer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3adaee6f-df99-697a-6315-972ae0eff1aa@redhat.com \
    --to=carlos@redhat.com \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).