Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
security:logging
nxlog-ce
nxlog-ce-2.10.2150_inet_pton.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
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
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor