diff --git a/mail/fdm/Makefile b/mail/fdm/Makefile index 10396db2a0..25330a3b14 100644 --- a/mail/fdm/Makefile +++ b/mail/fdm/Makefile @@ -8,16 +8,17 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fdm -PKG_VERSION:=1.9 -PKG_RELEASE:=4 -PKG_LICENSE:=BSD-2-Clause +PKG_VERSION:=2.0 +PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/nicm/fdm/releases/download/$(PKG_VERSION) -PKG_HASH:=16416c38a9a7e32d187220cc5ae61a51463d5e4e47419c5c513f422523d39914 +PKG_HASH:=06b28cb6b792570bc61d7e29b13d2af46b92fea77e058b2b17e11e8f7ed0cea4 + +PKG_MAINTAINER:=Dmitry V. Zimin +PKG_LICENSE:=BSD-2-Clause PKG_FIXUP:=autoreconf - PKG_BUILD_PARALLEL:=1 PKG_INSTALL:=1 @@ -28,7 +29,6 @@ define Package/fdm CATEGORY:=Mail TITLE:=fetch mail and deliver URL:=https://github.com/nicm/fdm - MAINTAINER:=Dmitry V. Zimin MENU:=1 DEPENDS:=+tdb +zlib +libopenssl +FDM_WITH_PCRE:libpcre USERID:=_fdm=99:_fdm=99 @@ -42,14 +42,9 @@ define Package/fdm/description endef ifdef CONFIG_FDM_WITH_PCRE - EXTRA_CFLAGS := -DPCRE - EXTRA_LDFLAGS += -lpcre + CONFIGURE_ARGS += --enable-pcre endif -MAKE_FLAGS += \ - PREFIX="/usr" \ - $(if $(CONFIG_FDM_WITH_PCRE),PCRE=1) - define Package/fdm/config source "$(SOURCE)/Config.in" endef diff --git a/mail/fdm/patches/010-Compat-fixes-from-Rosen-Penev.patch b/mail/fdm/patches/010-Compat-fixes-from-Rosen-Penev.patch deleted file mode 100644 index 4a9272510f..0000000000 --- a/mail/fdm/patches/010-Compat-fixes-from-Rosen-Penev.patch +++ /dev/null @@ -1,388 +0,0 @@ -From eb7461e4ceab14020b3a129d826e4ee86f9da8c6 Mon Sep 17 00:00:00 2001 -From: Nicholas Marriott -Date: Tue, 26 Jun 2018 12:19:25 +0100 -Subject: [PATCH] Compat fixes from Rosen Penev. - ---- - Makefile.am | 6 + - compat/base64.c | 317 ++++++++++++++++++++++++++++++++++++++++++++++++ - fdm.h | 18 +++ - 3 files changed, 343 insertions(+), 2 deletions(-) - create mode 100644 compat/base64.c - -diff --git a/Makefile.am b/Makefile.am -index a4ebbf3..fb25d33 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -110,6 +110,9 @@ dist_fdm_SOURCES = \ - lex.c - - nodist_fdm_SOURCES = -+if NO_B64_NTOP -+nodist_fdm_SOURCES += compat/base64.c -+endif - if NO_STRLCAT - nodist_fdm_SOURCES += compat/strlcat.c - endif -diff --git a/compat/base64.c b/compat/base64.c -new file mode 100644 -index 0000000..4e44d6a ---- /dev/null -+++ b/compat/base64.c -@@ -0,0 +1,317 @@ -+/* $OpenBSD: base64.c,v 1.8 2015/01/16 16:48:51 deraadt Exp $ */ -+ -+/* -+ * 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. -+ */ -+ -+/* -+ * Portions Copyright (c) 1995 by International Business Machines, Inc. -+ * -+ * International Business Machines, Inc. (hereinafter called IBM) grants -+ * permission under its copyrights to use, copy, modify, and distribute this -+ * Software with or without fee, provided that the above copyright notice and -+ * all paragraphs of this notice appear in all copies, and that the name of IBM -+ * not be used in connection with the marketing of any product incorporating -+ * the Software or modifications thereof, without specific, written prior -+ * permission. -+ * -+ * To the extent it has a right to do so, IBM grants an immunity from suit -+ * under its patents, if any, for the use, sale or manufacture of products to -+ * the extent that such products are used for performing Domain Name System -+ * dynamic updates in TCP/IP networks by means of the Software. No immunity is -+ * granted for any product per se or for any other function of any product. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", AND IBM DISCLAIMS ALL WARRANTIES, -+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -+ * PARTICULAR PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, -+ * DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ARISING -+ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE, EVEN -+ * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include "fdm.h" -+ -+static const char Base64[] = -+ "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -+static const char Pad64 = '='; -+ -+/* (From RFC1521 and draft-ietf-dnssec-secext-03.txt) -+ The following encoding technique is taken from RFC 1521 by Borenstein -+ and Freed. It is reproduced here in a slightly edited form for -+ convenience. -+ -+ A 65-character subset of US-ASCII is used, enabling 6 bits to be -+ represented per printable character. (The extra 65th character, "=", -+ is used to signify a special processing function.) -+ -+ The encoding process represents 24-bit groups of input bits as output -+ strings of 4 encoded characters. Proceeding from left to right, a -+ 24-bit input group is formed by concatenating 3 8-bit input groups. -+ These 24 bits are then treated as 4 concatenated 6-bit groups, each -+ of which is translated into a single digit in the base64 alphabet. -+ -+ Each 6-bit group is used as an index into an array of 64 printable -+ characters. The character referenced by the index is placed in the -+ output string. -+ -+ Table 1: The Base64 Alphabet -+ -+ Value Encoding Value Encoding Value Encoding Value Encoding -+ 0 A 17 R 34 i 51 z -+ 1 B 18 S 35 j 52 0 -+ 2 C 19 T 36 k 53 1 -+ 3 D 20 U 37 l 54 2 -+ 4 E 21 V 38 m 55 3 -+ 5 F 22 W 39 n 56 4 -+ 6 G 23 X 40 o 57 5 -+ 7 H 24 Y 41 p 58 6 -+ 8 I 25 Z 42 q 59 7 -+ 9 J 26 a 43 r 60 8 -+ 10 K 27 b 44 s 61 9 -+ 11 L 28 c 45 t 62 + -+ 12 M 29 d 46 u 63 / -+ 13 N 30 e 47 v -+ 14 O 31 f 48 w (pad) = -+ 15 P 32 g 49 x -+ 16 Q 33 h 50 y -+ -+ Special processing is performed if fewer than 24 bits are available -+ at the end of the data being encoded. A full encoding quantum is -+ always completed at the end of a quantity. When fewer than 24 input -+ bits are available in an input group, zero bits are added (on the -+ right) to form an integral number of 6-bit groups. Padding at the -+ end of the data is performed using the '=' character. -+ -+ Since all base64 input is an integral number of octets, only the -+ ------------------------------------------------- -+ following cases can arise: -+ -+ (1) the final quantum of encoding input is an integral -+ multiple of 24 bits; here, the final unit of encoded -+ output will be an integral multiple of 4 characters -+ with no "=" padding, -+ (2) the final quantum of encoding input is exactly 8 bits; -+ here, the final unit of encoded output will be two -+ characters followed by two "=" padding characters, or -+ (3) the final quantum of encoding input is exactly 16 bits; -+ here, the final unit of encoded output will be three -+ characters followed by one "=" padding character. -+ */ -+ -+int -+b64_ntop(src, srclength, target, targsize) -+ u_char const *src; -+ size_t srclength; -+ char *target; -+ size_t targsize; -+{ -+ size_t datalength = 0; -+ u_char input[3]; -+ u_char output[4]; -+ int i; -+ -+ while (2 < srclength) { -+ input[0] = *src++; -+ input[1] = *src++; -+ input[2] = *src++; -+ srclength -= 3; -+ -+ output[0] = input[0] >> 2; -+ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); -+ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); -+ output[3] = input[2] & 0x3f; -+ -+ if (datalength + 4 > targsize) -+ return (-1); -+ target[datalength++] = Base64[output[0]]; -+ target[datalength++] = Base64[output[1]]; -+ target[datalength++] = Base64[output[2]]; -+ target[datalength++] = Base64[output[3]]; -+ } -+ -+ /* Now we worry about padding. */ -+ if (0 != srclength) { -+ /* Get what's left. */ -+ input[0] = input[1] = input[2] = '\0'; -+ for (i = 0; i < srclength; i++) -+ input[i] = *src++; -+ -+ output[0] = input[0] >> 2; -+ output[1] = ((input[0] & 0x03) << 4) + (input[1] >> 4); -+ output[2] = ((input[1] & 0x0f) << 2) + (input[2] >> 6); -+ -+ if (datalength + 4 > targsize) -+ return (-1); -+ target[datalength++] = Base64[output[0]]; -+ target[datalength++] = Base64[output[1]]; -+ if (srclength == 1) -+ target[datalength++] = Pad64; -+ else -+ target[datalength++] = Base64[output[2]]; -+ target[datalength++] = Pad64; -+ } -+ if (datalength >= targsize) -+ return (-1); -+ target[datalength] = '\0'; /* Returned value doesn't count \0. */ -+ return (datalength); -+} -+ -+/* skips all whitespace anywhere. -+ converts characters, four at a time, starting at (or after) -+ src from base - 64 numbers into three 8 bit bytes in the target area. -+ it returns the number of data bytes stored at the target, or -1 on error. -+ */ -+ -+int -+b64_pton(src, target, targsize) -+ char const *src; -+ u_char *target; -+ size_t targsize; -+{ -+ int tarindex, state, ch; -+ u_char nextbyte; -+ char *pos; -+ -+ state = 0; -+ tarindex = 0; -+ -+ while ((ch = (unsigned char)*src++) != '\0') { -+ if (isspace(ch)) /* Skip whitespace anywhere. */ -+ continue; -+ -+ if (ch == Pad64) -+ break; -+ -+ pos = strchr(Base64, ch); -+ if (pos == 0) /* A non-base64 character. */ -+ return (-1); -+ -+ switch (state) { -+ case 0: -+ if (target) { -+ if (tarindex >= targsize) -+ return (-1); -+ target[tarindex] = (pos - Base64) << 2; -+ } -+ state = 1; -+ break; -+ case 1: -+ if (target) { -+ if (tarindex >= targsize) -+ return (-1); -+ target[tarindex] |= (pos - Base64) >> 4; -+ nextbyte = ((pos - Base64) & 0x0f) << 4; -+ if (tarindex + 1 < targsize) -+ target[tarindex+1] = nextbyte; -+ else if (nextbyte) -+ return (-1); -+ } -+ tarindex++; -+ state = 2; -+ break; -+ case 2: -+ if (target) { -+ if (tarindex >= targsize) -+ return (-1); -+ target[tarindex] |= (pos - Base64) >> 2; -+ nextbyte = ((pos - Base64) & 0x03) << 6; -+ if (tarindex + 1 < targsize) -+ target[tarindex+1] = nextbyte; -+ else if (nextbyte) -+ return (-1); -+ } -+ tarindex++; -+ state = 3; -+ break; -+ case 3: -+ if (target) { -+ if (tarindex >= targsize) -+ return (-1); -+ target[tarindex] |= (pos - Base64); -+ } -+ tarindex++; -+ state = 0; -+ break; -+ } -+ } -+ -+ /* -+ * We are done decoding Base-64 chars. Let's see if we ended -+ * on a byte boundary, and/or with erroneous trailing characters. -+ */ -+ -+ if (ch == Pad64) { /* We got a pad char. */ -+ ch = (unsigned char)*src++; /* Skip it, get next. */ -+ switch (state) { -+ case 0: /* Invalid = in first position */ -+ case 1: /* Invalid = in second position */ -+ return (-1); -+ -+ case 2: /* Valid, means one byte of info */ -+ /* Skip any number of spaces. */ -+ for (; ch != '\0'; ch = (unsigned char)*src++) -+ if (!isspace(ch)) -+ break; -+ /* Make sure there is another trailing = sign. */ -+ if (ch != Pad64) -+ return (-1); -+ ch = (unsigned char)*src++; /* Skip the = */ -+ /* Fall through to "single trailing =" case. */ -+ /* FALLTHROUGH */ -+ -+ case 3: /* Valid, means two bytes of info */ -+ /* -+ * We know this char is an =. Is there anything but -+ * whitespace after it? -+ */ -+ for (; ch != '\0'; ch = (unsigned char)*src++) -+ if (!isspace(ch)) -+ return (-1); -+ -+ /* -+ * Now make sure for cases 2 and 3 that the "extra" -+ * bits that slopped past the last full byte were -+ * zeros. If we don't check them, they become a -+ * subliminal channel. -+ */ -+ if (target && tarindex < targsize && -+ target[tarindex] != 0) -+ return (-1); -+ } -+ } else { -+ /* -+ * We ended by seeing the end of the string. Make sure we -+ * have no partial bytes lying around. -+ */ -+ if (state != 0) -+ return (-1); -+ } -+ -+ return (tarindex); -+} -diff --git a/fdm.h b/fdm.h -index 5de799c..abc52e0 100644 ---- a/fdm.h -+++ b/fdm.h -@@ -84,6 +84,18 @@ extern char *__progname; - #define INFTIM -1 - #endif - -+#ifndef WAIT_ANY -+#define WAIT_ANY -1 -+#endif -+ -+#ifndef GLOB_BRACE -+#define GLOB_BRACE 0 -+#endif -+ -+#ifndef ACCESSPERMS -+#define ACCESSPERMS (S_IRWXU|S_IRWXG|S_IRWXO) -+#endif -+ - #ifndef __dead - #define __dead __attribute__ ((__noreturn__)) - #endif -@@ -707,6 +719,12 @@ size_t strlcpy(char *, const char *, size_t); - size_t strlcat(char *, const char *, size_t); - #endif - -+#ifndef HAVE_B64_NTOP -+/* base64.c */ -+int b64_ntop(src, srclength, target, targsize); -+int b64_pton(src, target, targsize); -+#endif -+ - /* shm.c */ - char *shm_path(struct shm *); - void *shm_create(struct shm *, size_t); --- -2.17.1 - diff --git a/mail/fdm/patches/010-ntop-fix.patch b/mail/fdm/patches/010-ntop-fix.patch new file mode 100644 index 0000000000..e32479571a --- /dev/null +++ b/mail/fdm/patches/010-ntop-fix.patch @@ -0,0 +1,9 @@ +--- a/Makefile.am ++++ b/Makefile.am +@@ -123,6 +123,3 @@ endif + if NO_STRTONUM + nodist_fdm_SOURCES += compat/strtonum.c + endif +-if NO_B64_NTOP +-nodist_fdm_SOURCES += compat/base64.c +-endif diff --git a/mail/fdm/patches/020-Fix-compile-with-OpenSSL-1.1.0.patch b/mail/fdm/patches/020-Fix-compile-with-OpenSSL-1.1.0.patch index 9ce23642af..be914733c1 100644 --- a/mail/fdm/patches/020-Fix-compile-with-OpenSSL-1.1.0.patch +++ b/mail/fdm/patches/020-Fix-compile-with-OpenSSL-1.1.0.patch @@ -1,4 +1,4 @@ -From f6c656c5c0368b2fb4284af0484c3bedfc7ae42c Mon Sep 17 00:00:00 2001 +From 3aa079c4885d89257c5033b4992011511b603150 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Tue, 26 Jun 2018 14:14:34 -0700 Subject: [PATCH] Fix compile with OpenSSL 1.1.0 @@ -6,23 +6,20 @@ Subject: [PATCH] Fix compile with OpenSSL 1.1.0 OpenSSL 1.1.0 deprecared SSL_library_init and SSL_load_error_strings. They're part of OPENSSL_init_ssl now. --- - fdm.c | 5 +++++ - 1 file changed, 5 insertions(+) + fdm.c | 2 ++ + 1 file changed, 2 insertions(+) diff --git a/fdm.c b/fdm.c -index cdf8383..9355b91 100644 +index cdf8383..6721bbd 100644 --- a/fdm.c +++ b/fdm.c -@@ -717,8 +717,13 @@ retry: +@@ -717,8 +717,10 @@ retry: } conf.lock_file = lock; -+ +#if OPENSSL_VERSION_NUMBER < 0x10100000L SSL_library_init(); SSL_load_error_strings(); -+#else -+ OPENSSL_init_ssl(0, NULL); +#endif /* Filter account list. */ diff --git a/mail/fdm/patches/040-openssl-1.1.patch b/mail/fdm/patches/040-openssl-1.1.patch deleted file mode 100644 index 5df8b285d9..0000000000 --- a/mail/fdm/patches/040-openssl-1.1.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 070cee8d1efba1ca260777a204fba7cdfe676ca5 Mon Sep 17 00:00:00 2001 -From: Nicholas Marriott -Date: Tue, 17 Jan 2017 23:14:03 +0000 -Subject: [PATCH] Look for OPENSSL_init_ssl, from Tomasz Miasko. - ---- - configure.ac | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/configure.ac b/configure.ac -index 5793c2d..161040c 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -93,11 +93,16 @@ if test "x$found_libcrypto" = xno; then - AC_MSG_ERROR("libcrypto not found") - fi - AC_SEARCH_LIBS( -- SSL_library_init, -+ OPENSSL_init_ssl, - [ssl], - found_libssl=yes, - found_libssl=no - ) -+AC_SEARCH_LIBS( -+ SSL_library_init, -+ [ssl], -+ found_libssl=yes -+) - if test "x$found_libssl" = xno; then - AC_MSG_ERROR("libssl not found") - fi