diff options
69 files changed, 309 insertions, 153 deletions
diff --git a/include/resolv.h b/include/resolv.h index 378b36d612..0c8db600d6 100644 --- a/include/resolv.h +++ b/include/resolv.h @@ -44,8 +44,6 @@ libresolv_hidden_proto (_sethtent) libresolv_hidden_proto (_gethtent) libresolv_hidden_proto (_gethtbyaddr) libresolv_hidden_proto (_gethtbyname2) -libresolv_hidden_proto (__res_hnok) -libresolv_hidden_proto (__res_dnok) libresolv_hidden_proto (__putlong) libresolv_hidden_proto (__putshort) libresolv_hidden_proto (__p_cdnname) @@ -67,6 +65,10 @@ extern __typeof (dn_expand) __libc_dn_expand; libc_hidden_proto (__libc_dn_expand) extern __typeof (dn_skipname) __libc_dn_skipname; libc_hidden_proto (__libc_dn_skipname) +extern __typeof (res_dnok) __libc_res_dnok; +libc_hidden_proto (__libc_res_dnok) +extern __typeof (res_hnok) __libc_res_hnok; +libc_hidden_proto (__libc_res_hnok) # endif /* _RESOLV_H_ && !_ISOMAC */ #endif diff --git a/resolv/Makefile b/resolv/Makefile index e1a608f4ac..7e142b9a14 100644 --- a/resolv/Makefile +++ b/resolv/Makefile @@ -44,6 +44,7 @@ routines := \ ns_name_unpack \ nsap_addr \ res-close \ + res-name-checking \ res-state \ res_hconf \ res_init \ @@ -142,7 +143,6 @@ libresolv-routines := \ ns_samedomain \ ns_ttl \ res-putget \ - res_comp \ res_data \ res_debug \ res_enable_icmp \ diff --git a/resolv/Versions b/resolv/Versions index 634c7833a8..3e3b89a0b2 100644 --- a/resolv/Versions +++ b/resolv/Versions @@ -3,6 +3,10 @@ libc { __dn_comp; __dn_skipname; __h_errno_location; + __res_dnok; + __res_hnok; + __res_mailok; + __res_ownok; __res_randomid; _res; dn_expand; @@ -54,6 +58,10 @@ libc { ns_name_skip; ns_name_uncompress; ns_name_unpack; + res_dnok; + res_hnok; + res_mailok; + res_ownok; } GLIBC_PRIVATE { %if !PTHREAD_IN_LIBC @@ -64,6 +72,8 @@ libc { __inet_pton_length; __libc_dn_expand; __libc_dn_skipname; + __libc_res_dnok; + __libc_res_hnok; __ns_name_compress; __ns_name_ntop; __ns_name_pack; @@ -107,12 +117,8 @@ libresolv { __putlong; __putshort; __res_close; - __res_dnok; - __res_hnok; __res_isourserver; - __res_mailok; __res_nameinquery; - __res_ownok; __res_queriesmatch; __res_send; __sym_ntop; diff --git a/resolv/res_comp.c b/resolv/res-name-checking.c index 16f7e02111..2c603494fa 100644 --- a/resolv/res_comp.c +++ b/resolv/res-name-checking.c @@ -1,4 +1,4 @@ -/* Domain name processing functions. +/* Syntax checking for DNS domain names. Copyright (C) 1995-2021 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -82,15 +82,9 @@ * SOFTWARE. */ -#include <sys/types.h> -#include <sys/param.h> -#include <netinet/in.h> #include <arpa/nameser.h> -#include <ctype.h> #include <resolv.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> +#include <shlib-compat.h> /* Return true if the string consists of printable ASCII characters only. */ @@ -148,25 +142,30 @@ binary_leading_dash (const unsigned char *dn) contain [0-9a-zA-Z_-] characters, and the name must not start with a '-'. The latter is to avoid confusion with program options. */ int -res_hnok (const char *dn) +___res_hnok (const char *dn) { unsigned char buf[NS_MAXCDNAME]; if (!printable_string (dn) - || ns_name_pton (dn, buf, sizeof (buf)) < 0 + || __ns_name_pton (dn, buf, sizeof (buf)) < 0 || binary_leading_dash (buf)) return 0; return binary_hnok (buf); } -libresolv_hidden_def (res_hnok) +versioned_symbol (libc, ___res_hnok, res_hnok, GLIBC_2_34); +versioned_symbol (libc, ___res_hnok, __libc_res_hnok, GLIBC_PRIVATE); +libc_hidden_ver (___res_hnok, __libc_res_hnok) +#if OTHER_SHLIB_COMPAT (libresolv, GLIBC_2_0, GLIBC_2_34) +compat_symbol (libresolv, ___res_hnok, __res_hnok, GLIBC_2_0); +#endif /* Hostname-like (A, MX, WKS) owners can have "*" as their first label but must otherwise be as a host name. */ int -res_ownok (const char *dn) +___res_ownok (const char *dn) { unsigned char buf[NS_MAXCDNAME]; if (!printable_string (dn) - || ns_name_pton (dn, buf, sizeof (buf)) < 0 + || __ns_name_pton (dn, buf, sizeof (buf)) < 0 || binary_leading_dash (buf)) return 0; if (buf[0] == 1 && buf [1] == '*') @@ -175,15 +174,19 @@ res_ownok (const char *dn) else return binary_hnok (buf); } +versioned_symbol (libc, ___res_ownok, res_ownok, GLIBC_2_34); +#if OTHER_SHLIB_COMPAT (libresolv, GLIBC_2_0, GLIBC_2_34) +compat_symbol (libresolv, ___res_ownok, __res_ownok, GLIBC_2_0); +#endif /* SOA RNAMEs and RP RNAMEs can have any byte in their first label, but the rest of the name has to look like a host name. */ int -res_mailok (const char *dn) +___res_mailok (const char *dn) { unsigned char buf[NS_MAXCDNAME]; if (!printable_string (dn) - || ns_name_pton (dn, buf, sizeof (buf)) < 0) + || __ns_name_pton (dn, buf, sizeof (buf)) < 0) return 0; unsigned char label_length = buf[0]; /* "." is a valid missing representation */ @@ -196,13 +199,22 @@ res_mailok (const char *dn) return 0; return binary_hnok (tail); } +versioned_symbol (libc, ___res_mailok, res_mailok, GLIBC_2_34); +#if OTHER_SHLIB_COMPAT (libresolv, GLIBC_2_0, GLIBC_2_34) +compat_symbol (libresol |
