File nxlog-ce-2.10.2150_inet_pton.patch of Package nxlog-ce

Index: src/contrib/inet_pton.c
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ src/contrib/inet_pton.c	2019-05-29 10:13:28.434075844 +0200
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 1996-2001  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>
+
+/* Specification.  */
+#include <arpa/inet.h>
+
+#include <string.h>
+#include <errno.h>
+
+#ifndef EAFNOSUPPORT
+# define EAFNOSUPPORT EINVAL
+#endif
+
+#define NS_INT16SZ	 2
+#define NS_INADDRSZ	 4
+#define NS_IN6ADDRSZ	16
+
+/*
+ * 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, unsigned char *dst);
+#ifdef AF_INET6
+static int inet_pton6(const char *src, unsigned char *dst);
+#endif
+
+/* 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
+nxlog_inet_pton(int af,
+	  const char *src,
+	  void *dst)
+{
+	switch (af) {
+	case AF_INET:
+		return (inet_pton4(src, dst));
+#ifdef AF_INET6
+	case AF_INET6:
+		return (inet_pton6(src, dst));
+#endif
+	default:
+		errno = EAFNOSUPPORT;
+		return (-1);
+	}
+	/* NOTREACHED */
+}
+
+/* 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;
+	unsigned char *dst;
+{
+	static const char digits[] = "0123456789";
+	int saw_digit, octets, ch;
+	unsigned 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) {
+			unsigned int new = *tp * 10 + (pch - digits);
+
+			if (new > 255)
+				return (0);
+			*tp = 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.
+ */
+#ifdef AF_INET6
+static int
+inet_pton6(src, dst)
+	const char *src;
+	unsigned char *dst;
+{
+	static const char xdigits_l[] = "0123456789abcdef",
+			  xdigits_u[] = "0123456789ABCDEF";
+	unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
+	const char *xdigits, *curtok;
+	int ch, saw_xdigit;
+	unsigned 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;
+			}
+			if (tp + NS_INT16SZ > endp)
+				return (0);
+			*tp++ = (unsigned char) (val >> 8) & 0xff;
+			*tp++ = (unsigned 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++ = (unsigned char) (val >> 8) & 0xff;
+		*tp++ = (unsigned 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 = tp - colonp;
+		int i;
+
+		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
Index: src/Makefile.am
===================================================================
--- src/Makefile.am.orig	2019-05-29 10:13:26.014080224 +0200
+++ src/Makefile.am	2019-05-29 10:13:28.434075844 +0200
@@ -1,2 +1,2 @@
-SUBDIRS = common core modules utils
+SUBDIRS = contrib common core modules utils
 
Index: src/common/value.c
===================================================================
--- src/common/value.c.orig	2019-05-29 10:13:26.014080224 +0200
+++ src/common/value.c	2019-05-29 10:13:28.434075844 +0200
@@ -13,6 +13,7 @@
 #include "date.h"
 #include "exception.h"
 #include "../core/nxlog.h"
+#include "../contrib/inet_pton.h"
 
 #define NX_LOGMODULE NX_LOGMODULE_CORE
 
@@ -680,8 +681,6 @@ nx_value_t *nx_value_parse_ip4addr(nx_va
 
 
 #if APR_HAVE_IPV6
-// This is a hack because apr does not define this function in the headers, though available
-int apr_inet_pton(int af, const char *src, void *dst);
 
 nx_value_t *nx_value_parse_ip6addr(const char *string)
 {
@@ -690,7 +689,7 @@ nx_value_t *nx_value_parse_ip6addr(const
     int i;
 
     memset(&in6addr, 0, sizeof(struct in6_addr));
-    if ( apr_inet_pton(AF_INET6, string, &in6addr) != 1 )
+    if ( nxlog_inet_pton(AF_INET6, string, &in6addr) != 1 )
     {
 	CHECKERR_MSG(APR_FROM_OS_ERROR(errno),"couldn't parse IPv6 address: %s", string);
     }
Index: src/contrib/Makefile.am
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ src/contrib/Makefile.am	2019-05-29 10:13:28.434075844 +0200
@@ -0,0 +1,3 @@
+noinst_LTLIBRARIES	= libcontrib.la
+libcontrib_la_SOURCES	= inet_pton.c inet_pton.h
+AM_CFLAGS		= -DNX_MODULEDIR=\"$(NX_MODULEDIR)\" -DNX_CACHEDIR=\"$(NX_CACHEDIR)\" -DNX_CONFIGFILE=\"$(NX_CONFIGFILE)\"
Index: src/contrib/inet_pton.h
===================================================================
--- /dev/null	1970-01-01 00:00:00.000000000 +0000
+++ src/contrib/inet_pton.h	2019-05-29 10:13:28.434075844 +0200
@@ -0,0 +1 @@
+int nxlog_inet_pton(int af, const char *src, void *dst);
Index: configure.in
===================================================================
--- configure.in.orig	2019-05-29 10:13:26.014080224 +0200
+++ configure.in	2019-05-29 10:14:16.217989249 +0200
@@ -16,6 +16,7 @@ CFLAGS=${CFLAGS=}
 
 AC_LANG(C)
 AC_PROG_CC
+AM_PROG_CC_C_O
 
 # APR
 AC_ARG_VAR([APRCONFIG], [apr-1-config tool with path])
@@ -34,7 +35,7 @@ LIBS="$LIBS $APR_LIBS"
 APR_LDFLAGS=`$apr_config --ldflags`
 LDFLAGS="$LDFLAGS $APR_LDFLAGS"
 APR_INCLUDES=`$apr_config --includes`
-INCLUDES="$INCLUDES $APR_INCLUDES"
+AM_CPPFLAGS="$AM_CPPFLAGS $APR_INCLUDES"
 
 AC_PROG_INSTALL
 AC_PROG_LN_S
@@ -342,7 +343,7 @@ fi
 NXLOG_VERSION_STRING="${PACKAGE_VERSION}"
 AC_DEFINE_UNQUOTED(VERSION_STRING, "$NXLOG_VERSION_STRING", [version string])
 AC_SUBST(VERSION)
-AC_SUBST(INCLUDES)
+AC_SUBST(AM_CPPFLAGS)
 AC_SUBST(DEFS)
 
 CLEANFILES='*~'
@@ -385,6 +386,7 @@ AC_OUTPUT(Makefile
 	src/Makefile
 	   src/common/Makefile
 	   src/core/Makefile
+	   src/contrib/Makefile
 	   src/modules/Makefile
 	      src/modules/input/Makefile
 	        src/modules/input/file/Makefile
Index: src/core/Makefile.am
===================================================================
--- src/core/Makefile.am.orig	2019-05-29 10:13:28.434075844 +0200
+++ src/core/Makefile.am	2019-05-29 10:16:19.945796385 +0200
@@ -1,10 +1,10 @@
 noinst_LTLIBRARIES	= libnxcore.la libnxlog.la
 libnxcore_la_SOURCES	= ctx.c ctx.h core.c core.h
 libnxlog_la_SOURCES	= nxlog.c nxlog.h router.c router.h modules.c modules.h job.h
-libnxlog_la_LIBADD	= $(top_builddir)/src/common/libnx.la
+libnxlog_la_LIBADD	= $(top_builddir)/src/common/libnx.la  $(top_builddir)/src/contrib/libcontrib.la
 bin_PROGRAMS		= nxlog
 nxlog_SOURCES		= main-unix.c
 CFLAGS			+= -DNX_PIDFILE=\"$(NX_PIDFILE)\" -DNX_MODULEDIR=\"$(NX_MODULEDIR)\" -DNX_CACHEDIR=\"$(NX_CACHEDIR)\" -DNX_CONFIGFILE=\"$(NX_CONFIGFILE)\"
 #LDFLAGS			= -rdynamic
-nxlog_LDADD		= $(top_builddir)/src/common/libnx.la libnxcore.la libnxlog.la $(LIBCAP)
-libnxcore_la_LIBADD	= $(top_builddir)/src/common/libnx.la
+nxlog_LDADD		= $(top_builddir)/src/common/libnx.la $(top_builddir)/src/contrib/libcontrib.la libnxcore.la libnxlog.la $(LIBCAP)
+libnxcore_la_LIBADD	= $(top_builddir)/src/common/libnx.la $(top_builddir)/src/contrib/libcontrib.la
openSUSE Build Service is sponsored by