aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/arpa/nameser.h3
-rw-r--r--resolv/Makefile2
-rw-r--r--resolv/Versions1
-rw-r--r--resolv/ns_makecanon.c50
-rw-r--r--resolv/ns_samedomain.c38
-rw-r--r--resolv/resolv-deprecated.c35
6 files changed, 92 insertions, 37 deletions
diff --git a/include/arpa/nameser.h b/include/arpa/nameser.h
index eff2517..a529cc8 100644
--- a/include/arpa/nameser.h
+++ b/include/arpa/nameser.h
@@ -69,9 +69,10 @@ libresolv_hidden_proto (ns_sprintrr)
libresolv_hidden_proto (ns_sprintrrf)
libresolv_hidden_proto (ns_samedomain)
libresolv_hidden_proto (ns_samename)
-libresolv_hidden_proto (ns_makecanon)
libresolv_hidden_proto (ns_format_ttl)
+extern __typeof (ns_makecanon) __libc_ns_makecanon;
+libc_hidden_proto (__libc_ns_makecanon)
extern __typeof (ns_name_compress) __ns_name_compress;
libc_hidden_proto (__ns_name_compress)
extern __typeof (ns_name_ntop) __ns_name_ntop;
diff --git a/resolv/Makefile b/resolv/Makefile
index 221bdc1..d1ad5e4 100644
--- a/resolv/Makefile
+++ b/resolv/Makefile
@@ -35,6 +35,7 @@ routines := \
inet_addr \
inet_ntop \
inet_pton \
+ ns_makecanon \
ns_name_compress \
ns_name_ntop \
ns_name_pack \
@@ -151,6 +152,7 @@ libresolv-routines := \
res_mkquery \
res_query \
res_send \
+ resolv-deprecated \
# libresolv-routines
$(libanl-routines-var) += \
diff --git a/resolv/Versions b/resolv/Versions
index fc14cdb..93078de 100644
--- a/resolv/Versions
+++ b/resolv/Versions
@@ -72,6 +72,7 @@ libc {
__inet_pton_length;
__libc_dn_expand;
__libc_dn_skipname;
+ __libc_ns_makecanon;
__libc_res_dnok;
__libc_res_hnok;
__ns_name_compress;
diff --git a/resolv/ns_makecanon.c b/resolv/ns_makecanon.c
new file mode 100644
index 0000000..a6c3c27
--- /dev/null
+++ b/resolv/ns_makecanon.c
@@ -0,0 +1,50 @@
+/* Add missing "." to domain names.
+ * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 1995,1999 by Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ */
+
+#include <arpa/nameser.h>
+#include <errno.h>
+#include <string.h>
+
+/* Make a canonical copy of domain name SRC in DST. Behavior:
+ foo -> foo.
+ foo. -> foo.
+ foo.. -> foo.
+ foo\. -> foo\..
+ foo\\. -> foo\\. */
+int
+__libc_ns_makecanon (const char *src, char *dst, size_t dstsize)
+{
+ size_t n = strlen (src);
+
+ if (n + sizeof "." > dstsize) /* sizeof == 2. */
+ {
+ __set_errno (EMSGSIZE);
+ return -1;
+ }
+ strcpy (dst, src);
+ while (n >= 1U && dst[n - 1] == '.') /* Ends in ".". */
+ if (n >= 2U && dst[n - 2] == '\\' && /* Ends in "\.". */
+ (n < 3U || dst[n - 3] != '\\')) /* But not "\\.". */
+ break;
+ else
+ dst[--n] = '\0';
+ dst[n++] = '.';
+ dst[n] = '\0';
+ return 0;
+}
+libc_hidden_def (__libc_ns_makecanon)
diff --git a/resolv/ns_samedomain.c b/resolv/ns_samedomain.c
index 5d1bf39..cfff251 100644
--- a/resolv/ns_samedomain.c
+++ b/resolv/ns_samedomain.c
@@ -144,40 +144,6 @@ ns_subdomain(const char *a, const char *b) {
}
/*%
- * make a canonical copy of domain name "src"
- *
- * notes:
- * \code
- * foo -> foo.
- * foo. -> foo.
- * foo.. -> foo.
- * foo\. -> foo\..
- * foo\\. -> foo\\.
- * \endcode
- */
-
-int
-ns_makecanon(const char *src, char *dst, size_t dstsize) {
- size_t n = strlen(src);
-
- if (n + sizeof "." > dstsize) { /*%< Note: sizeof == 2 */
- __set_errno (EMSGSIZE);
- return (-1);
- }
- strcpy(dst, src);
- while (n >= 1U && dst[n - 1] == '.') /*%< Ends in "." */
- if (n >= 2U && dst[n - 2] == '\\' && /*%< Ends in "\." */
- (n < 3U || dst[n - 3] != '\\')) /*%< But not "\\." */
- break;
- else
- dst[--n] = '\0';
- dst[n++] = '.';
- dst[n] = '\0';
- return (0);
-}
-libresolv_hidden_def (ns_makecanon)
-
-/*%
* determine whether domain name "a" is the same as domain name "b"
*
* return:
@@ -190,8 +156,8 @@ int
ns_samename(const char *a, const char *b) {
char ta[NS_MAXDNAME], tb[NS_MAXDNAME];
- if (ns_makecanon(a, ta, sizeof ta) < 0 ||
- ns_makecanon(b, tb, sizeof tb) < 0)
+ if (__libc_ns_makecanon(a, ta, sizeof ta) < 0 ||
+ __libc_ns_makecanon(b, tb, sizeof tb) < 0)
return (-1);
if (strcasecmp(ta, tb) == 0)
return (1);
diff --git a/resolv/resolv-deprecated.c b/resolv/resolv-deprecated.c
new file mode 100644
index 0000000..cbd1078
--- /dev/null
+++ b/resolv/resolv-deprecated.c
@@ -0,0 +1,35 @@
+/* Forwarders for deprecated libresolv functions which are implemented in libc.
+ Copyright (C) 2021 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+/* Some functions are used by the stub resolver implementation
+ internally and thus have to be located in libc. They have been
+ historially exported for application use as well. However, the
+ stub resolver dependency on those functions is not intrinsic to
+ what the stub resolver does, and it is possible that a future
+ version of the stub resolver will not need them anymore. The
+ public symbols for these functions remain in libresolv, and are not
+ moved to libc, to avoid adding new symbol versions for legacy
+ functions. */
+
+#include <arpa/nameser.h>
+
+int
+ns_makecanon (const char *src, char *dst, size_t dstsize)
+{
+ return __libc_ns_makecanon (src, dst, dstsize);
+}