diff options
Diffstat (limited to 'main/opensmtpd/00-opensmtpd.patch')
-rw-r--r-- | main/opensmtpd/00-opensmtpd.patch | 498 |
1 files changed, 0 insertions, 498 deletions
diff --git a/main/opensmtpd/00-opensmtpd.patch b/main/opensmtpd/00-opensmtpd.patch deleted file mode 100644 index 243b0a4d97..0000000000 --- a/main/opensmtpd/00-opensmtpd.patch +++ /dev/null @@ -1,498 +0,0 @@ -diff --git a/configure.ac b/configure.ac -index a93a08f..55f41c1 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -685,6 +685,7 @@ AC_CHECK_FUNCS([ \ - getpeereid \ - getspnam \ - inet_aton \ -+ inet_net_pton \ - inet_ntoa \ - inet_ntop \ - isblank \ -@@ -693,6 +694,7 @@ AC_CHECK_FUNCS([ \ - pidfile \ - pw_dup \ - reallocarray \ -+ res_hnok \ - setenv \ - setlinebuf \ - setproctitle \ -diff --git a/openbsd-compat/Makefile.am b/openbsd-compat/Makefile.am -index 5c55faa..fdee88e 100644 ---- a/openbsd-compat/Makefile.am -+++ b/openbsd-compat/Makefile.am -@@ -5,9 +5,9 @@ libopenbsd_compat_a_SOURCES = \ - bsd-getpeereid.c bsd-misc.c bsd-waitpid.c clock_gettime.c \ - daemon.c dirname.c entropy.c errc.c event_asr_run.c explicit_bzero.c \ - fgetln.c fmt_scaled.c fparseln.c getopt.c imsg.c imsg-buffer.c \ -- libressl.c mktemp.c pidfile.c pw_dup.c reallocarray.c setresguid.c \ -- setproctitle.c strlcat.c strlcpy.c strmode.c strtonum.c \ -- strsep.c vis.c xmalloc.c -+ inet_net_pton.c libressl.c mktemp.c pidfile.c pw_dup.c reallocarray.c \ -+ res_hnok.c setresguid.c setproctitle.c strlcat.c strlcpy.c strmode.c \ -+ strtonum.c strsep.c vis.c xmalloc.c - - EXTRA_DIST = base64.h bsd-misc.h bsd-waitpid.h chacha_private.h defines.h \ - entropy.h imsg.h includes.h log.h openbsd-compat.h sys/queue.h \ -diff --git a/openbsd-compat/defines.h b/openbsd-compat/defines.h -index e1abee6..f0f5f59 100644 ---- a/openbsd-compat/defines.h -+++ b/openbsd-compat/defines.h -@@ -857,4 +857,12 @@ struct winsize { - #define FPARSELN_UNESCALL 0x0f - #endif - -+#ifndef SCOPE_DELIMITER -+#define SCOPE_DELIMITER '%' -+#endif -+ -+#ifndef WAIT_MYPGRP -+#define WAIT_MYPGRP 0 -+#endif -+ - #endif /* _DEFINES_H */ -diff --git a/openbsd-compat/inet_net_pton.c b/openbsd-compat/inet_net_pton.c -new file mode 100644 -index 0000000..0831e25 ---- /dev/null -+++ b/openbsd-compat/inet_net_pton.c -@@ -0,0 +1,214 @@ -+/* -+ * Copyright (c) 1996 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. -+ */ -+ -+#if defined(LIBC_SCCS) && !defined(lint) -+static const char orig_rcsid[] = "From Id: inet_net_pton.c,v 1.8 1996/11/21 10:28:12 vixie Exp $"; -+#endif -+//#include <sys/cdefs.h> -+//__FBSDID("$FreeBSD: src/lib/libc/net/inet_net_pton.c,v 1.9 2003/09/15 23:38:06 fenner Exp $"); -+ -+#include <sys/types.h> -+#include <sys/socket.h> -+#include <netinet/in.h> -+#include <arpa/inet.h> -+ -+#include <assert.h> -+#include <ctype.h> -+#include <errno.h> -+#include <stdio.h> -+#include <string.h> -+#include <stdlib.h> -+ -+#ifdef SPRINTF_CHAR -+# define SPRINTF(x) strlen(sprintf/**/x) -+#else -+# define SPRINTF(x) ((size_t)sprintf x) -+#endif -+ -+static int inet_net_pton_ipv4(const char *src, u_char *dst, size_t size); -+ -+/* -+ * static int -+ * inet_net_pton(af, src, dst, size) -+ * convert network number from presentation to network format. -+ * accepts hex octets, hex strings, decimal octets, and /CIDR. -+ * "size" is in bytes and describes "dst". -+ * return: -+ * number of bits, either imputed classfully or specified with /CIDR, -+ * or -1 if some failure occurred (check errno). ENOENT means it was -+ * not a valid network specification. -+ * author: -+ * Paul Vixie (ISC), June 1996 -+ */ -+int -+inet_net_pton(af, src, dst, size) -+ int af; -+ const char *src; -+ void *dst; -+ size_t size; -+{ -+ switch (af) { -+ case AF_INET: -+ return (inet_net_pton_ipv4(src, dst, size)); -+ default: -+ errno = EAFNOSUPPORT; -+ return (-1); -+ } -+} -+ -+/* -+ * static int -+ * inet_net_pton_ipv4(src, dst, size) -+ * convert IPv4 network number from presentation to network format. -+ * accepts hex octets, hex strings, decimal octets, and /CIDR. -+ * "size" is in bytes and describes "dst". -+ * return: -+ * number of bits, either imputed classfully or specified with /CIDR, -+ * or -1 if some failure occurred (check errno). ENOENT means it was -+ * not an IPv4 network specification. -+ * note: -+ * network byte order assumed. this means 192.5.5.240/28 has -+ * 0x11110000 in its fourth octet. -+ * author: -+ * Paul Vixie (ISC), June 1996 -+ */ -+static int -+inet_net_pton_ipv4(src, dst, size) -+ const char *src; -+ u_char *dst; -+ size_t size; -+{ -+ static const char -+ xdigits[] = "0123456789abcdef", -+ digits[] = "0123456789"; -+ int n, ch, tmp, dirty, bits; -+ const u_char *odst = dst; -+ -+ ch = *src++; -+ if (ch == '0' && (src[0] == 'x' || src[0] == 'X') -+ && isascii(src[1]) && isxdigit(src[1])) { -+ /* Hexadecimal: Eat nybble string. */ -+ if (size <= 0) -+ goto emsgsize; -+ *dst = 0, dirty = 0; -+ src++; /* skip x or X. */ -+ while ((ch = *src++) != '\0' && -+ isascii(ch) && isxdigit(ch)) { -+ if (isupper(ch)) -+ ch = tolower(ch); -+ n = strchr(xdigits, ch) - xdigits; -+ assert(n >= 0 && n <= 15); -+ *dst |= n; -+ if (!dirty++) -+ *dst <<= 4; -+ else if (size-- > 0) -+ *++dst = 0, dirty = 0; -+ else -+ goto emsgsize; -+ } -+ if (dirty) -+ size--; -+ } else if (isascii(ch) && isdigit(ch)) { -+ /* Decimal: eat dotted digit string. */ -+ for (;;) { -+ tmp = 0; -+ do { -+ n = strchr(digits, ch) - digits; -+ assert(n >= 0 && n <= 9); -+ tmp *= 10; -+ tmp += n; -+ if (tmp > 255) -+ goto enoent; -+ } while ((ch = *src++) != '\0' && -+ isascii(ch) && isdigit(ch)); -+ if (size-- <= 0) -+ goto emsgsize; -+ *dst++ = (u_char) tmp; -+ if (ch == '\0' || ch == '/') -+ break; -+ if (ch != '.') -+ goto enoent; -+ ch = *src++; -+ if (!isascii(ch) || !isdigit(ch)) -+ goto enoent; -+ } -+ } else -+ goto enoent; -+ -+ bits = -1; -+ if (ch == '/' && isascii(src[0]) && isdigit(src[0]) && dst > odst) { -+ /* CIDR width specifier. Nothing can follow it. */ -+ ch = *src++; /* Skip over the /. */ -+ bits = 0; -+ do { -+ n = strchr(digits, ch) - digits; -+ assert(n >= 0 && n <= 9); -+ bits *= 10; -+ bits += n; -+ } while ((ch = *src++) != '\0' && isascii(ch) && isdigit(ch)); -+ if (ch != '\0') -+ goto enoent; -+ if (bits > 32) -+ goto emsgsize; -+ } -+ -+ /* Firey death and destruction unless we prefetched EOS. */ -+ if (ch != '\0') -+ goto enoent; -+ -+ /* If nothing was written to the destination, we found no address. */ -+ if (dst == odst) -+ goto enoent; -+ /* If no CIDR spec was given, infer width from net class. */ -+ if (bits == -1) { -+ if (*odst >= 240) /* Class E */ -+ bits = 32; -+ else if (*odst >= 224) /* Class D */ -+ bits = 4; -+ else if (*odst >= 192) /* Class C */ -+ bits = 24; -+ else if (*odst >= 128) /* Class B */ -+ bits = 16; -+ else /* Class A */ -+ bits = 8; -+ /* If imputed mask is narrower than specified octets, widen. */ -+ if (bits < ((dst - odst) * 8)) -+ bits = (dst - odst) * 8; -+ } -+ /* Extend network to cover the actual mask. */ -+ while (bits > ((dst - odst) * 8)) { -+ if (size-- <= 0) -+ goto emsgsize; -+ *dst++ = '\0'; -+ } -+ return (bits); -+ -+ enoent: -+ errno = ENOENT; -+ return (-1); -+ -+ emsgsize: -+ errno = EMSGSIZE; -+ return (-1); -+} -+ -+/* -+ * Weak aliases for applications that use certain private entry points, -+ * and fail to include <arpa/inet.h>. -+ */ -+#undef inet_net_pton -+/* __weak_reference(__inet_net_pton, inet_net_pton); */ -diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h -index e345a9d..a3fa80c 100644 ---- a/openbsd-compat/openbsd-compat.h -+++ b/openbsd-compat/openbsd-compat.h -@@ -184,8 +184,20 @@ int vsnprintf(char *, size_t, const char *, va_list); - void explicit_bzero(void *p, size_t n); - #endif - -+#ifndef HAVE_INET_NET_PTON -+int inet_net_pton(int, const char *, void *, size_t); -+#endif -+ -+#ifndef HAVE_RES_HNOK -+int res_hnok(const char *); -+#endif -+ - /* OpenSMTPD-portable specific entries */ - -+#ifndef FILE -+#include <stdio.h> -+#endif -+ - #ifndef HAVE_FGETLN - #include <stdio.h> - #include <string.h> -diff --git a/openbsd-compat/res_hnok.c b/openbsd-compat/res_hnok.c -new file mode 100644 -index 0000000..06a3e8a ---- /dev/null -+++ b/openbsd-compat/res_hnok.c -@@ -0,0 +1,168 @@ -+/* $OpenBSD: res_comp.c,v 1.14 2008/04/16 22:35:23 deraadt Exp $ */ -+ -+/* -+ * ++Copyright++ 1985, 1993 -+ * - -+ * Copyright (c) 1985, 1993 -+ * The Regents of the University of California. All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions and the following disclaimer. -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in the -+ * documentation and/or other materials provided with the distribution. -+ * 3. Neither the name of the University nor the names of its contributors -+ * may be used to endorse or promote products derived from this software -+ * without specific prior written permission. -+ * -+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND -+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE -+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -+ * SUCH DAMAGE. -+ * - -+ * Portions Copyright (c) 1993 by Digital Equipment Corporation. -+ * -+ * 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, and that -+ * the name of Digital Equipment Corporation not be used in advertising or -+ * publicity pertaining to distribution of the document or software without -+ * specific, written prior permission. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL -+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES -+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT -+ * CORPORATION 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. -+ * - -+ * --Copyright-- -+ */ -+ -+/* OPENBSD ORIGINAL: lib/libc/net/res_comp.c */ -+ -+#include "includes.h" -+#ifndef HAVE_RES_HNOK -+ -+/* -+ * Verify that a domain name uses an acceptable character set. -+ */ -+ -+/* -+ * Note the conspicuous absence of ctype macros in these definitions. On -+ * non-ASCII hosts, we can't depend on string literals or ctype macros to -+ * tell us anything about network-format data. The rest of the BIND system -+ * is not careful about this, but for some reason, we're doing it right here. -+ */ -+#define PERIOD 0x2e -+#define hyphenchar(c) ((c) == 0x2d) -+#define bslashchar(c) ((c) == 0x5c) -+#define underscorechar(c) ((c) == 0x5f) -+#define periodchar(c) ((c) == PERIOD) -+#define asterchar(c) ((c) == 0x2a) -+#define alphachar(c) (((c) >= 0x41 && (c) <= 0x5a) \ -+ || ((c) >= 0x61 && (c) <= 0x7a)) -+#define digitchar(c) ((c) >= 0x30 && (c) <= 0x39) -+ -+#define borderchar(c) (alphachar(c) || digitchar(c)) -+#define middlechar(c) (borderchar(c) || hyphenchar(c) || underscorechar(c)) -+#define domainchar(c) ((c) > 0x20 && (c) < 0x7f) -+ -+int -+res_hnok(const char *dn) -+{ -+ int pch = PERIOD, ch = *dn++; -+ -+ while (ch != '\0') { -+ int nch = *dn++; -+ -+ if (periodchar(ch)) { -+ ; -+ } else if (periodchar(pch)) { -+ if (!borderchar(ch)) -+ return (0); -+ } else if (periodchar(nch) || nch == '\0') { -+ if (!borderchar(ch)) -+ return (0); -+ } else { -+ if (!middlechar(ch)) -+ return (0); -+ } -+ pch = ch, ch = nch; -+ } -+ return (1); -+} -+ -+/* -+ * 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) -+{ -+ if (asterchar(dn[0])) { -+ if (periodchar(dn[1])) -+ return (res_hnok(dn+2)); -+ if (dn[1] == '\0') -+ return (1); -+ } -+ return (res_hnok(dn)); -+} -+ -+/* -+ * SOA RNAMEs and RP RNAMEs can have any printable character in their first -+ * label, but the rest of the name has to look like a host name. -+ */ -+int -+res_mailok(const char *dn) -+{ -+ int ch, escaped = 0; -+ -+ /* "." is a valid missing representation */ -+ if (*dn == '\0') -+ return(1); -+ -+ /* otherwise <label>.<hostname> */ -+ while ((ch = *dn++) != '\0') { -+ if (!domainchar(ch)) -+ return (0); -+ if (!escaped && periodchar(ch)) -+ break; -+ if (escaped) -+ escaped = 0; -+ else if (bslashchar(ch)) -+ escaped = 1; -+ } -+ if (periodchar(ch)) -+ return (res_hnok(dn)); -+ return(0); -+} -+ -+/* -+ * This function is quite liberal, since RFC 1034's character sets are only -+ * recommendations. -+ */ -+int -+res_dnok(const char *dn) -+{ -+ int ch; -+ -+ while ((ch = *dn++) != '\0') -+ if (!domainchar(ch)) -+ return (0); -+ return (1); -+} -+ -+#endif /* !HAVE_RES_HNOK */ -diff --git a/openbsd-compat/strmode.c b/openbsd-compat/strmode.c -index 4a81614..535edfb 100644 ---- a/openbsd-compat/strmode.c -+++ b/openbsd-compat/strmode.c -@@ -33,6 +33,8 @@ - #include "includes.h" - #ifndef HAVE_STRMODE - -+#undef S_IRUSR -+ - #include <sys/types.h> - #include <sys/stat.h> - #include <string.h> -diff --git a/smtpd/smtpd.c b/smtpd/smtpd.c -index 763a62d..dfab650 100644 ---- a/smtpd/smtpd.c -+++ b/smtpd/smtpd.c -@@ -26,6 +26,7 @@ - #include <sys/tree.h> - #include <sys/socket.h> - #include <sys/wait.h> -+#undef S_IRUSR - #include <sys/stat.h> - #include <sys/uio.h> - #include <sys/mman.h> |