about summary refs log tree commit diff
path: root/resolv
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2021-07-19 07:55:27 +0200
committerFlorian Weimer <fweimer@redhat.com>2021-07-19 07:56:21 +0200
commit2fbe5860d33ca2318b35ea6d31beefa381b4ac8a (patch)
treebf8baa77f1b3565eaf5a872331d8bd2a01943221 /resolv
parent391e02236b931132c0e8b5ba4c3b087c2aaa1044 (diff)
downloadglibc-2fbe5860d33ca2318b35ea6d31beefa381b4ac8a.tar.gz
glibc-2fbe5860d33ca2318b35ea6d31beefa381b4ac8a.tar.xz
glibc-2fbe5860d33ca2318b35ea6d31beefa381b4ac8a.zip
resolv: Rename res_comp.c to res-name-checking.c and move into libc
This reflects what the remaining functions in the file do.

The __res_dnok, __res_hnok, __res_mailok, __res_ownok were moved
with the script, using --no-new-version, and turned into compat
symbols.  __libc_res_dnok@@GLIBC_PRIVATE and
__libc_res_hnok@@GLIBC_PRIVATE are added for internal use, to avoid
accidentally binding to compatibility symbols.  The new public
symbols res_dnok, res_hnok, res_mailok, res_ownok were added using
make update-all-abi.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'resolv')
-rw-r--r--resolv/Makefile2
-rw-r--r--resolv/Versions14
-rw-r--r--resolv/res-name-checking.c (renamed from resolv/res_comp.c)48
-rw-r--r--resolv/resolv.h4
4 files changed, 41 insertions, 27 deletions
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 (libresolv, ___res_mailok, __res_mailok, GLIBC_2_0);
+#endif
 
 /* Return 1 if DN is a syntactically valid domain name.  Empty names
    are accepted.  */
 int
-res_dnok (const char *dn)
+___res_dnok (const char *dn)
 {
   unsigned char buf[NS_MAXCDNAME];
-  return printable_string (dn) && ns_name_pton (dn, buf, sizeof (buf)) >= 0;
+  return printable_string (dn) && __ns_name_pton (dn, buf, sizeof (buf)) >= 0;
 }
-libresolv_hidden_def (res_dnok)
+versioned_symbol (libc, ___res_dnok, res_dnok, GLIBC_2_34);
+versioned_symbol (libc, ___res_dnok, __libc_res_dnok, GLIBC_PRIVATE);
+libc_hidden_ver (___res_dnok, __libc_res_dnok)
+#if OTHER_SHLIB_COMPAT (libresolv, GLIBC_2_0, GLIBC_2_34)
+compat_symbol (libresolv, ___res_dnok, __res_dnok, GLIBC_2_0);
+#endif
diff --git a/resolv/resolv.h b/resolv/resolv.h
index a10ad99a16..9cce53f67b 100644
--- a/resolv/resolv.h
+++ b/resolv/resolv.h
@@ -225,10 +225,7 @@ __END_DECLS
 #define p_rcode			__p_rcode
 #define putlong			__putlong
 #define putshort		__putshort
-#define res_dnok		__res_dnok
-#define res_hnok		__res_hnok
 #define res_hostalias		__res_hostalias
-#define res_mailok		__res_mailok
 #define res_nameinquery		__res_nameinquery
 #define res_nclose		__res_nclose
 #define res_ninit		__res_ninit
@@ -237,7 +234,6 @@ __END_DECLS
 #define res_nquerydomain	__res_nquerydomain
 #define res_nsearch		__res_nsearch
 #define res_nsend		__res_nsend
-#define res_ownok		__res_ownok
 #define res_queriesmatch	__res_queriesmatch
 #define res_randomid		__res_randomid
 #define sym_ntop		__sym_ntop