summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Rühsen <tim.ruehsen@gmx.de>2019-02-06 20:54:45 +0100
committerTim Rühsen <tim.ruehsen@gmx.de>2019-02-10 11:34:55 +0100
commitc908a3ab8094a9d09248e9aedd9a977ed610330c (patch)
tree5ff04007eaab5308a82fce7791b55dffed58a53b
parentaa33d738ec96f86671c2d4bb254d8e30a57213cc (diff)
downloadgnutls-tmp-gnulib-pton.tar.gz
Use inet_pton() from gnulibtmp-gnulib-pton
Signed-off-by: Tim Rühsen <tim.ruehsen@gmx.de>
-rw-r--r--bootstrap.conf2
-rw-r--r--cfg.mk1
-rw-r--r--configure.ac6
-rw-r--r--lib/Makefile.am2
-rw-r--r--lib/gnutls.pc.in2
-rw-r--r--lib/system.h17
-rw-r--r--lib/system/fastopen.c1
-rw-r--r--lib/system/inet_pton.c266
-rw-r--r--lib/x509/hostname-verify.c4
-rw-r--r--src/socket.c12
-rw-r--r--tests/Makefile.am5
-rw-r--r--tests/ip-utils.c2
12 files changed, 20 insertions, 300 deletions
diff --git a/bootstrap.conf b/bootstrap.conf
index 31f054bc0e..d4a5ca1d2c 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -29,7 +29,7 @@ required_submodules="tests/suite/tls-fuzzer/python-ecdsa tests/suite/tls-fuzzer/
# Reproduce by: gnulib-tool --import --local-dir=gl/override --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=gl/tests --aux-dir=build-aux --with-tests --avoid=alignof-tests --avoid=lock-tests --avoid=lseek-tests --lgpl=2 --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files alloca byteswap c-ctype extensions func gendocs getline gettext-h gettimeofday hash-pjw-bare havelib intprops lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings memmem-simple minmax netdb netinet_in pmccabe2html read-file secure_getenv snprintf stdint strcase strndup strtok_r strverscmp sys_socket sys_stat time_r unistd vasprintf vsnprintf warnings
gnulib_modules="
-alloca byteswap c-ctype c-strcase extensions func gendocs getline gettext-h gettimeofday hash-pjw-bare havelib inet_ntop intprops lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings memmem-simple minmax netdb netinet_in pmccabe2html read-file secure_getenv snprintf stdint strcase strdup-posix strndup strtok_r strverscmp sys_socket sys_stat sys_types time_r unistd valgrind-tests vasprintf vsnprintf warnings
+alloca byteswap c-ctype c-strcase extensions func gendocs getline gettext-h gettimeofday hash-pjw-bare havelib inet_ntop inet_pton intprops lib-msvc-compat lib-symbol-versions maintainer-makefile manywarnings memmem-simple minmax netdb netinet_in pmccabe2html read-file secure_getenv setsockopt snprintf stdint strcase strdup-posix strndup strtok_r strverscmp sys_socket sys_stat sys_types time_r unistd valgrind-tests vasprintf vsnprintf warnings
"
unistring_modules="
diff --git a/cfg.mk b/cfg.mk
index 8f1470c992..200f421659 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -56,7 +56,6 @@ exclude_file_name_regexp--sc_m4_quote_check='lib/unistring/m4/absolute-header.m4
exclude_file_name_regexp--sc_makefile_at_at_check='lib/unistring/Makefile.am'
exclude_file_name_regexp--sc_prohibit_stddef_without_use='u*-normalize.c'
exclude_file_name_regexp--sc_prohibit_strncpy='unistr.in.h'
-exclude_file_name_regexp--sc_prohibit_always-defined_macros='lib/system/inet_pton.c'
gl_public_submodule_commit =
autoreconf:
diff --git a/configure.ac b/configure.ac
index f0d18635cf..88580c0604 100644
--- a/configure.ac
+++ b/configure.ac
@@ -301,7 +301,7 @@ AC_C_BIGENDIAN
dnl No fork on MinGW, disable some self-tests until we fix them.
dnl Check clock_gettime and pthread_mutex_lock in libc (avoid linking to other libs)
-AC_CHECK_FUNCS([fork setitimer inet_pton getrusage getpwuid_r nanosleep daemon getpid localtime mmap explicit_bzero],,)
+AC_CHECK_FUNCS([fork setitimer getrusage getpwuid_r nanosleep daemon getpid localtime mmap explicit_bzero],,)
dnl Manually check some functions by including headers first. On macOS, you
dnl normally only have the latest SDK available, containing all existing
dnl functions, but having them restricted according to target version in
@@ -356,10 +356,6 @@ if test "$ac_cv_func_nanosleep" != "yes";then
gnutls_needs_librt=yes
fi
-if test "$ac_cv_func_inet_pton" != "yes";then
- AC_LIB_HAVE_LINKFLAGS(nsl,, [#include <arpa/inet.h>], [inet_pton(0,0,0);])
-fi
-
if test "$ac_cv_func_clock_gettime" != "yes";then
AC_LIB_HAVE_LINKFLAGS(rt,, [#include <time.h>], [clock_gettime (0, 0);])
gnutls_needs_librt=yes
diff --git a/lib/Makefile.am b/lib/Makefile.am
index d29e415720..a34f175f5f 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -76,7 +76,7 @@ COBJECTS = range.c record.c compress.c debug.c cipher.c gthreads.h handshake-tls
str.c str-unicode.c str-idna.c state.c cert-cred-x509.c file.c supplemental.c \
random.c crypto-api.c crypto-api.h privkey.c pcert.c pubkey.c locks.c dtls.c \
system_override.c crypto-backend.c verify-tofu.c pin.c tpm.c fips.c \
- safe-memfuncs.c system/inet_pton.c atfork.c atfork.h randomart.c \
+ safe-memfuncs.c atfork.c atfork.h randomart.c \
system-keys.h urls.c urls.h prf.c auto-verify.c dh-session.c \
cert-session.c handshake-checks.c dtls-sw.c dh-primes.c openpgp_compat.c \
crypto-selftests.c crypto-selftests-pk.c secrets.c extv.c extv.h \
diff --git a/lib/gnutls.pc.in b/lib/gnutls.pc.in
index 68be2d1101..d7cd4619da 100644
--- a/lib/gnutls.pc.in
+++ b/lib/gnutls.pc.in
@@ -19,6 +19,6 @@ Description: Transport Security Layer implementation for the GNU system
URL: http://www.gnutls.org/
Version: @VERSION@
Libs: -L${libdir} -lgnutls
-Libs.private: @LIBINTL@ @LIBSOCKET@ @LIBNSL@ @LIBPTHREAD@ @LIB_SELECT@ @TSS_LIBS@ @GMP_LIBS@ @LIBUNISTRING@ @LIBIDN2_LIBS@ @LIBATOMIC_LIBS@
+Libs.private: @LIBINTL@ @LIBSOCKET@ @INET_PTON_LIB@ @LIBPTHREAD@ @LIB_SELECT@ @TSS_LIBS@ @GMP_LIBS@ @LIBUNISTRING@ @LIBIDN2_LIBS@ @LIBATOMIC_LIBS@
@GNUTLS_REQUIRES_PRIVATE@
Cflags: -I${includedir}
diff --git a/lib/system.h b/lib/system.h
index 18c2603bec..2e77322e1d 100644
--- a/lib/system.h
+++ b/lib/system.h
@@ -107,21 +107,4 @@ void _gnutls_global_set_gettime_function(gnutls_gettime_func gettime_func);
int gnutls_system_global_init(void);
void gnutls_system_global_deinit(void);
-#ifndef _WIN32
-# if defined(HAVE_NETINET_IN_H)
-# include <netinet/in.h>
-# endif
-# include <arpa/inet.h>
-#else
-# undef inet_aton
-# define inet_aton _gnutls_inet_aton
-int inet_aton(const char *cp, struct in_addr *inp);
-#endif
-
-#ifndef HAVE_INET_PTON
-# undef inet_pton
-# define inet_pton _gnutls_inet_pton
-int inet_pton(int af, const char *src, void *dst);
-#endif
-
#endif /* SYSTEM_H */
diff --git a/lib/system/fastopen.c b/lib/system/fastopen.c
index 0f673b7c49..1fd234e5f7 100644
--- a/lib/system/fastopen.c
+++ b/lib/system/fastopen.c
@@ -26,6 +26,7 @@
#include "errors.h"
#include <sys/socket.h>
+#include <netinet/in.h> /* IPPROTO_TCP */
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
diff --git a/lib/system/inet_pton.c b/lib/system/inet_pton.c
deleted file mode 100644
index cc9254fd4c..0000000000
--- a/lib/system/inet_pton.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright (c) 1996,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 <config.h>
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
-#endif
-
-#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h> /* needed to define AF_ values on UNIX */
-#endif
-
-#ifdef HAVE_WINSOCK2_H
-#include <winsock2.h> /* needed to define AF_ values on Windows */
-#if _MSC_VER < 1600 /* errno.h defines EAFNOSUPPORT in Windows VC10 (and presumably eventually in VC11 ...) */
-#define EAFNOSUPPORT WSAEAFNOSUPPORT
-#endif
-#endif
-
-#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
-#endif
-
-#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
-#endif
-
-#ifdef HAVE_ARPA_NAMESER_H
-#include <arpa/nameser.h>
-#endif
-
-#include <string.h>
-#include <errno.h>
-
-#include <system.h>
-
-#ifndef HAVE_INET_PTON
-
-#ifndef NS_INADDRSZ
-#define NS_INADDRSZ 4
-#endif
-#ifndef NS_IN6ADDRSZ
-#define NS_IN6ADDRSZ 16
-#endif
-#ifndef NS_INT16SZ
-#define NS_INT16SZ 2
-#endif
-
-/*
- * WARNING: Don't even consider trying to compile this on a system where
- * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.
- */
-
-static int inet_pton4 (const char *src, u_char *dst);
-static int inet_pton6 (const char *src, u_char *dst);
-
-/* int
- * inet_pton(af, src, dst)
- * convert from presentation format (which usually means ASCII printable)
- * to network format (which is usually some kind of binary format).
- * return:
- * 1 if the address was valid for the specified address family
- * 0 if the address wasn't valid (`dst' is untouched in this case)
- * -1 if some other error occurred (`dst' is untouched in this case, too)
- * author:
- * Paul Vixie, 1996.
- */
-int
-inet_pton(af, src, dst)
- int af;
- const char *src;
- void *dst;
-{
- switch (af) {
- case AF_INET:
- return (inet_pton4(src, dst));
- case AF_INET6:
- return (inet_pton6(src, dst));
- default:
- errno = EAFNOSUPPORT;
- return (-1);
- }
- /* NOTREACHED */
-}
-#endif
-
-#ifdef _WIN32
-int inet_aton(const char *cp, struct in_addr *inp)
-{
- return inet_pton(AF_INET, cp, inp);
-}
-#endif
-
-#ifndef HAVE_INET_PTON
-/* int
- * inet_pton4(src, dst)
- * like inet_aton() but without all the hexadecimal and shorthand.
- * return:
- * 1 if `src' is a valid dotted quad, else 0.
- * notice:
- * does not touch `dst' unless it's returning 1.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton4(src, dst)
- const char *src;
- u_char *dst;
-{
- static const char digits[] = "0123456789";
- int saw_digit, octets, ch;
- u_char tmp[NS_INADDRSZ], *tp;
-
- saw_digit = 0;
- octets = 0;
- *(tp = tmp) = 0;
- while ((ch = *src++) != '\0') {
- const char *pch;
-
- if ((pch = strchr(digits, ch)) != NULL) {
- size_t new = *tp * 10 + (pch - digits);
-
- if (new > 255)
- return (0);
- *tp = (u_char) new;
- if (! saw_digit) {
- if (++octets > 4)
- return (0);
- saw_digit = 1;
- }
- } else if (ch == '.' && saw_digit) {
- if (octets == 4)
- return (0);
- *++tp = 0;
- saw_digit = 0;
- } else
- return (0);
- }
- if (octets < 4)
- return (0);
- memcpy(dst, tmp, NS_INADDRSZ);
- return (1);
-}
-
-/* int
- * inet_pton6(src, dst)
- * convert presentation level address to network order binary form.
- * return:
- * 1 if `src' is a valid [RFC1884 2.2] address, else 0.
- * notice:
- * (1) does not touch `dst' unless it's returning 1.
- * (2) :: in a full address is silently ignored.
- * credit:
- * inspired by Mark Andrews.
- * author:
- * Paul Vixie, 1996.
- */
-static int
-inet_pton6(src, dst)
- const char *src;
- u_char *dst;
-{
- static const char xdigits_l[] = "0123456789abcdef",
- xdigits_u[] = "0123456789ABCDEF";
- u_char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
- const char *xdigits, *curtok;
- int ch, saw_xdigit;
- u_int val;
-
- memset((tp = tmp), '\0', NS_IN6ADDRSZ);
- endp = tp + NS_IN6ADDRSZ;
- colonp = NULL;
- /* Leading :: requires some special handling. */
- if (*src == ':')
- if (*++src != ':')
- return (0);
- curtok = src;
- saw_xdigit = 0;
- val = 0;
- while ((ch = *src++) != '\0') {
- const char *pch;
-
- if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
- pch = strchr((xdigits = xdigits_u), ch);
- if (pch != NULL) {
- val <<= 4;
- val |= (pch - xdigits);
- if (val > 0xffff)
- return (0);
- saw_xdigit = 1;
- continue;
- }
- if (ch == ':') {
- curtok = src;
- if (!saw_xdigit) {
- if (colonp)
- return (0);
- colonp = tp;
- continue;
- } else if (*src == '\0') {
- return (0);
- }
- if (tp + NS_INT16SZ > endp)
- return (0);
- *tp++ = (u_char) (val >> 8) & 0xff;
- *tp++ = (u_char) val & 0xff;
- saw_xdigit = 0;
- val = 0;
- continue;
- }
- if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
- inet_pton4(curtok, tp) > 0) {
- tp += NS_INADDRSZ;
- saw_xdigit = 0;
- break; /* '\0' was seen by inet_pton4(). */
- }
- return (0);
- }
- if (saw_xdigit) {
- if (tp + NS_INT16SZ > endp)
- return (0);
- *tp++ = (u_char) (val >> 8) & 0xff;
- *tp++ = (u_char) val & 0xff;
- }
- if (colonp != NULL) {
- /*
- * Since some memmove()'s erroneously fail to handle
- * overlapping regions, we'll do the shift by hand.
- */
- const int n = (int) (tp - colonp);
- int i;
-
- if (tp == endp)
- return (0);
- for (i = 1; i <= n; i++) {
- endp[- i] = colonp[n - i];
- colonp[n - i] = 0;
- }
- tp = endp;
- }
- if (tp != endp)
- return (0);
- memcpy(dst, tmp, NS_IN6ADDRSZ);
- return (1);
-}
-
-#endif /* HAVE_INET_PTON */
diff --git a/lib/x509/hostname-verify.c b/lib/x509/hostname-verify.c
index c043ff5bff..e3a4ababa4 100644
--- a/lib/x509/hostname-verify.c
+++ b/lib/x509/hostname-verify.c
@@ -26,6 +26,8 @@
#include <common.h>
#include "errors.h"
#include <system.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
/**
* gnutls_x509_crt_check_hostname:
@@ -170,7 +172,7 @@ gnutls_x509_crt_check_hostname2(gnutls_x509_crt_t cert,
/* check whether @hostname is an ip address */
if (!(flags & GNUTLS_VERIFY_DO_NOT_ALLOW_IP_MATCHES) &&
- ((p=strchr(hostname, ':')) != NULL || inet_aton(hostname, &ipv4) != 0)) {
+ ((p=strchr(hostname, ':')) != NULL || inet_pton(AF_INET, hostname, &ipv4) != 0)) {
if (p != NULL) {
struct in6_addr ipv6;
diff --git a/src/socket.c b/src/socket.c
index be60f9458c..dcffe6bc9c 100644
--- a/src/socket.c
+++ b/src/socket.c
@@ -33,16 +33,16 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#ifndef _WIN32
-# include <arpa/inet.h>
-#else
-# undef endservent
-# define endservent()
-#endif
+#include <arpa/inet.h>
#include <socket.h>
#include <c-ctype.h>
#include "sockets.h"
+#ifdef _WIN32
+# undef endservent
+# define endservent()
+#endif
+
#define MAX_BUF 4096
/* Functions to manipulate sockets
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 148f09fa4e..0c433b0370 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -238,6 +238,11 @@ gnutls_record_overhead_CPPFLAGS = $(AM_CPPFLAGS) \
-I$(top_builddir)/gl \
$(NETTLE_CFLAGS)
+ip_utils_CPPFLAGS = $(AM_CPPFLAGS) \
+ -I$(top_srcdir)/gl \
+ -I$(top_builddir)/gl \
+ $(NETTLE_CFLAGS)
+
endif
fips_mode_pthread_LDADD = $(LDADD) -lpthread
diff --git a/tests/ip-utils.c b/tests/ip-utils.c
index b88b94de28..59977dfb9d 100644
--- a/tests/ip-utils.c
+++ b/tests/ip-utils.c
@@ -28,13 +28,13 @@
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
+#include <arpa/inet.h>
#include <gnutls/gnutls.h>
#include <gnutls/x509.h>
#ifndef _WIN32
# include <cmocka.h>
# include <sys/socket.h>
-# include <arpa/inet.h>
#define BUILD_IN_TESTS
#include "../lib/x509/ip-in-cidr.h"