diff --git a/srcpkgs/opensmtpd/patches/musl-inet_net_pton.patch b/srcpkgs/opensmtpd/patches/musl-inet_net_pton.patch new file mode 100644 index 00000000000..1b5c948530b --- /dev/null +++ b/srcpkgs/opensmtpd/patches/musl-inet_net_pton.patch @@ -0,0 +1,195 @@ +Inline implementation of inet_net_pton taken from OpenBSD. + +--- smtpd/to.c 2015-10-02 01:46:21.000000000 +0200 ++++ smtpd/to.c 2015-10-02 09:53:55.349046955 +0200 +@@ -63,6 +63,190 @@ + + static int temp_inet_net_pton_ipv6(const char *, void *, size_t); + ++#if !defined(__GLIBC__) ++/* $OpenBSD: inet_net_pton.c,v 1.5 2005/08/06 20:30:03 espie 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. ++ */ ++ ++#include ++ ++static int inet_net_pton_ipv4(const char *, u_char *, size_t); ++ ++/* ++ * 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(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(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); ++} ++#endif ++ + const char * + sockaddr_to_text(struct sockaddr *sa) + { diff --git a/srcpkgs/opensmtpd/patches/musl-mode_values.patch b/srcpkgs/opensmtpd/patches/musl-mode_values.patch new file mode 100644 index 00000000000..717df5ca75c --- /dev/null +++ b/srcpkgs/opensmtpd/patches/musl-mode_values.patch @@ -0,0 +1,23 @@ +Despit these macros being defined in sys/stat.h, they are undefined +when used in the source strmode.c, perhaps due to the shielding macro +S_IRUSR being defined before. + +--- openbsd-compat/strmode.c 2015-10-02 01:46:21.000000000 +0200 ++++ openbsd-compat/strmode.c 2015-10-02 08:38:43.954398930 +0200 +@@ -37,6 +37,16 @@ + #include + #include + ++#if !defined(S_ISUID) ++#define S_ISUID 04000 ++#endif ++#if !defined(S_ISGID) ++#define S_ISGID 02000 ++#endif ++#if !defined(S_ISVTX) ++#define S_ISVTX 01000 ++#endif ++ + /* XXX mode should be mode_t */ + + void diff --git a/srcpkgs/opensmtpd/patches/musl-scope_delimiter.patch b/srcpkgs/opensmtpd/patches/musl-scope_delimiter.patch new file mode 100644 index 00000000000..8d33ee86177 --- /dev/null +++ b/srcpkgs/opensmtpd/patches/musl-scope_delimiter.patch @@ -0,0 +1,26 @@ +--- smtpd/table.c 2015-10-02 01:46:21.000000000 +0200 ++++ smtpd/table.c 2015-10-02 08:48:34.971352820 +0200 +@@ -44,6 +44,10 @@ + #include "smtpd.h" + #include "log.h" + ++#if !defined(SCOPE_DELIMITER) ++#define SCOPE_DELIMITER '%' ++#endif ++ + struct table_backend *table_backend_lookup(const char *); + + extern struct table_backend table_backend_static; +--- smtpd/parser.c 2015-10-02 01:46:21.000000000 +0200 ++++ smtpd/parser.c 2015-10-02 10:07:39.515982655 +0200 +@@ -36,6 +36,10 @@ + + #include "parser.h" + ++#if !defined(SCOPE_DELIMITER) ++#define SCOPE_DELIMITER '%' ++#endif ++ + uint64_t text_to_evpid(const char *); + uint32_t text_to_msgid(const char *); + diff --git a/srcpkgs/opensmtpd/patches/musl-wait_mypgrp.patch b/srcpkgs/opensmtpd/patches/musl-wait_mypgrp.patch new file mode 100644 index 00000000000..5c9e4f85504 --- /dev/null +++ b/srcpkgs/opensmtpd/patches/musl-wait_mypgrp.patch @@ -0,0 +1,17 @@ +--- smtpd/smtpd.c 2015-10-02 01:46:21.000000000 +0200 ++++ smtpd/smtpd.c 2015-10-02 08:55:09.020322076 +0200 +@@ -79,6 +79,14 @@ + #include "log.h" + #include "ssl.h" + ++#if !defined(WAIT_MYPGRP) ++#define WAIT_MYPGRP 0 ++#endif ++ ++#if !defined(S_ISVTX) ++#define S_ISVTX 01000 ++#endif ++ + extern char *__progname; + + static void parent_imsg(struct mproc *, struct imsg *); diff --git a/srcpkgs/opensmtpd/template b/srcpkgs/opensmtpd/template index 995bb85ac58..c7e03d5ca2f 100644 --- a/srcpkgs/opensmtpd/template +++ b/srcpkgs/opensmtpd/template @@ -1,7 +1,7 @@ # Template file for 'opensmtpd' pkgname=opensmtpd version=5.7.2p1 -revision=1 +revision=2 build_style=gnu-configure configure_args="--sysconfdir=/etc/smtpd --sbindir=/usr/bin --with-maildir=/var/spool/mail --with-privsep-path=/var/empty @@ -25,6 +25,12 @@ system_accounts="smtpd smtpq" smtpd_descr="SMTPD daemon" smtpq_descr="SMTPD queue" +case "$XBPS_TARGET_MACHINE" in + *-musl) makedepends+=" musl-fts" + CFLAGS="-L${XBPS_CROSS_BASE}/usr/lib -lfts" + ;; +esac + pre_configure() { touch README AUTHORS NEWS ChangeLog autoreconf -fi