This aport provides the portable version of OpenSMTPD patched to work
with musl.
Parts of the patch will be submitted upstream soon.
https://opensmtpd.org
---
testing/opensmtpd/00-opensmtpd.patch | 498 +++++++++++++++++++++++++++++++testing/opensmtpd/APKBUILD | 73 +++++testing/opensmtpd/aliases | 63 ++++testing/opensmtpd/opensmtpd.post-install | 5 +testing/opensmtpd/opensmtpd.pre-install | 11 +testing/opensmtpd/smtpd.initd | 24 ++
6 files changed, 674 insertions(+)
create mode 100644 testing/opensmtpd/00-opensmtpd.patch
create mode 100644 testing/opensmtpd/APKBUILD
create mode 100644 testing/opensmtpd/aliases
create mode 100644 testing/opensmtpd/opensmtpd.post-install
create mode 100644 testing/opensmtpd/opensmtpd.pre-install
create mode 100644 testing/opensmtpd/smtpd.initd
diff --git a/testing/opensmtpd/00-opensmtpd.patch b/testing/opensmtpd/00-opensmtpd.patch
new file mode 100644
index 0000000..243b0a4
--- /dev/null+++ b/testing/opensmtpd/00-opensmtpd.patch
@@ -0,0 +1,498 @@
+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>
diff --git a/testing/opensmtpd/APKBUILD b/testing/opensmtpd/APKBUILD
new file mode 100644
index 0000000..4b6793a
--- /dev/null+++ b/testing/opensmtpd/APKBUILD
@@ -0,0 +1,73 @@
+# Contributor: Jonathan Curran <jonathan@curran.in>+# Maintainer: Jonathan Curran <jonathan@curran.in>+pkgname=opensmtpd+pkgver=5.7.1p1+pkgrel=0+pkgdesc="secure, reliable, lean, and easy-to configure SMTP server"+url="http://www.opensmtpd.org"+arch="all"+license="ISC"+depends=""+depends_dev=""+makedepends="automake autoconf libtool mdocml db-dev libasr libevent-dev openssl-dev"+install="$pkgname.pre-install $pkgname.post-install"+subpackages="$pkgname-doc"+source="https://www.opensmtpd.org/archives/opensmtpd-${pkgver}.tar.gz+ 00-opensmtpd.patch+ smtpd.initd+ aliases"++_builddir=${srcdir}/${pkgname}-${pkgver}+prepare() {+ local i+ cd "$_builddir"+ for i in $source; do+ case $i in+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;+ esac+ done+}++build() {+ cd "$_builddir"+ aclocal -I m4+ autoconf+ autoheader+ automake --foreign --add-missing --copy+ ./configure --build=$CBUILD \+ --host=$CHOST \+ --prefix=/usr \+ --sysconfdir=/etc/smtpd \+ --enable-table-db \+ --with-privsep-user=smtpd \+ --with-queue-user=smtpq \+ --with-maildir=/var/spool/mail \+ --with-sock-dir=/run \+ --with-libs="-lfts" \+ --with-pie \+ --with-Werror \+ --mandir=/usr/share/man \+ --with-mantype=man || return 1+ make || return 1+}++package() {+ cd "$_builddir"+ make DESTDIR=${pkgdir} install || return 1+ sed -i 's#/etc/mail#/etc/smtpd#g' "$pkgdir"/etc/smtpd/smtpd.conf+ install -Dm755 "$srcdir"/smtpd.initd "$pkgdir"/etc/init.d/smtpd+ install -Dm644 "$srcdir"/aliases "$pkgdir"/etc/smtpd/aliases+}++md5sums="bf81fdc691808efa6acd7bdde5df757f opensmtpd-5.7.1p1.tar.gz+e90e077ee170c7806a4657f0fd5778b1 00-opensmtpd.patch+f2043d24cfd3b70821f9f62270d8d092 smtpd.initd+561d2aead043a64a4ce5d66b4f78223e aliases"+sha256sums="67e9dd9682ca8c181e84e66c76245a4a8f6205834f915a2c021cdfeb22049e3a opensmtpd-5.7.1p1.tar.gz+1daa9b94e598db9b34e9a1fc717c834519824bdf7e87f1d6729c815ea5ca6acf 00-opensmtpd.patch+aa58a27872044462b3551b2ed21ef27acffc9e9d1b1cceb1ceae07f03bdcce78 smtpd.initd+7bef80f8d86aa5463c864681482a4908d22ff8b6f3e47d2a410ef2d59b316b53 aliases"+sha512sums="df09c980b25a6e91a62f6de83b18e376f6c81a5bf0039fa91da90b2fe4d67bf4bc2dc6787b2d9aca0eb859cc149f980dd9c342516af5262231c97b133f804c1a opensmtpd-5.7.1p1.tar.gz+c3a60ec3785903b3118feebde6021e20f1eb26a8d6e8b8c72ae19c6f9d6a9a2ceaee32c45a0ac3ff29d24018d169273f931378c1269eec32d7e36e5d98dd475d 00-opensmtpd.patch+1b471dd4b6b18d0e1ee7af269567b0e3772c8a8e5bc9521125261a38b018fce4ee02458fb14dfb94a75ef73b979884aa81a9316917b31742db1a0140294aa248 smtpd.initd+929ba0b8befca6cad558602f9793a9c653923924ee524902916b8ef4952d1ea8a391895e7450ed9768eb82a07bd307b49561f5d49ea4711bd87a1a73eb8d7dad aliases"
diff --git a/testing/opensmtpd/aliases b/testing/opensmtpd/aliases
new file mode 100644
index 0000000..766dc3e
--- /dev/null+++ b/testing/opensmtpd/aliases
@@ -0,0 +1,63 @@
+# Aliases in this file will NOT be expanded in the header from+# Mail, but WILL be visible over networks or from /usr/libexec/mail.local.+#+# >>>>>>>>>> The program "newaliases" must be run after+# >> NOTE >> this file is updated for any changes to+# >>>>>>>>>> show through to smtpd.+#++# Well-known aliases -- this should be filled in!+# root: your-every-day-user++# Basic system aliases -- these MUST be present+MAILER-DAEMON: postmaster+postmaster: root+operator: root++# General redirections for important pseudo accounts+daemon: root+uucp: root++# Redirections for pseudo accounts that should not receive mail+bin: /dev/null+adm: /dev/null+lp: /dev/null+sync: /dev/null+shutdown: /dev/null+halt: /dev/null+mail: /dev/null+news: /dev/null+man: /dev/null+cron: /dev/null+ftp: /dev/null+sshd: /dev/null+at: /dev/null+squid: /dev/null+gdm: /dev/null+xfs: /dev/null+games: /dev/null+named: /dev/null+mysql: /dev/null+postgres: /dev/null+apache: /dev/null+nut: /dev/null+cyrus: /dev/null+vpopmail: /dev/null+ntp: /dev/null+postfix: /dev/null+smmsp: /dev/null+distcc: /dev/null+guest: /dev/null+nobody: /dev/null++# RFC 2142: NETWORK OPERATIONS MAILBOX NAMES+abuse: root+# noc: root+security: root++# RFC 2142: SUPPORT MAILBOX NAMES FOR SPECIFIC INTERNET SERVICES+# hostmaster: root+# usenet: root+# news: usenet+# webmaster: root+# ftp: root
\ No newline at end of file
diff --git a/testing/opensmtpd/opensmtpd.post-install b/testing/opensmtpd/opensmtpd.post-install
new file mode 100644
index 0000000..f7acfaf
--- /dev/null+++ b/testing/opensmtpd/opensmtpd.post-install
@@ -0,0 +1,5 @@
+#!/bin/sh++/usr/sbin/newaliases++exit 0
diff --git a/testing/opensmtpd/opensmtpd.pre-install b/testing/opensmtpd/opensmtpd.pre-install
new file mode 100644
index 0000000..af0620e
--- /dev/null+++ b/testing/opensmtpd/opensmtpd.pre-install
@@ -0,0 +1,11 @@
+#!/bin/sh++addgroup -S smtpd 2>/dev/null+addgroup -S smtpq 2>/dev/null++adduser -S -H -D -s /sbin/nologin -h /dev/null -g 'SMTP Daemon' -G smtpd smtpd 2>/dev/null+adduser -S -H -D -s /sbin/nologin -h /dev/null -g 'SMTPD Queue' -G smtpq smtpq 2>/dev/null++mkdir -p /var/spool/mail++exit 0
diff --git a/testing/opensmtpd/smtpd.initd b/testing/opensmtpd/smtpd.initd
new file mode 100644
index 0000000..b88f5ba
--- /dev/null+++ b/testing/opensmtpd/smtpd.initd
@@ -0,0 +1,24 @@
+#!/sbin/openrc-run++name="busybox $SVCNAME"+command="/usr/sbin/$SVCNAME"+command_args="$SMTPD_OPTS"++depend() {+ need net localmount+ after bootmisc firewall+ use logger dns+ provide mta+}++start() {+ ebegin "Starting smtpd ${CONF_MESSAGE}"+ /usr/sbin/smtpd+ eend $?+}++stop() {+ ebegin "Stopping smtpd ${CONF_MESSAGE}"+ /usr/sbin/smtpctl stop &> /dev/null+ eend $?+}
\ No newline at end of file
--
2.4.1
---
Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org
Help: alpine-aports+help@lists.alpinelinux.org
---
[alpine-aports] [PATCH v2] testing/opensmtpd: new aport
This aport provides the portable version of OpenSMTPD patched to work
with musl.
Parts of the patch will be submitted upstream soon.
https://opensmtpd.org
---
Changes v1 -> v2:
- updated smtpd.initd
testing/opensmtpd/00-opensmtpd.patch | 498 +++++++++++++++++++++++++++++++testing/opensmtpd/APKBUILD | 73 +++++testing/opensmtpd/aliases | 63 ++++testing/opensmtpd/opensmtpd.post-install | 5 +testing/opensmtpd/opensmtpd.pre-install | 11 +testing/opensmtpd/smtpd.initd | 24 ++
6 files changed, 674 insertions(+)
create mode 100644 testing/opensmtpd/00-opensmtpd.patch
create mode 100644 testing/opensmtpd/APKBUILD
create mode 100644 testing/opensmtpd/aliases
create mode 100644 testing/opensmtpd/opensmtpd.post-install
create mode 100644 testing/opensmtpd/opensmtpd.pre-install
create mode 100644 testing/opensmtpd/smtpd.initd
diff --git a/testing/opensmtpd/00-opensmtpd.patch b/testing/opensmtpd/00-opensmtpd.patch
new file mode 100644
index 0000000..243b0a4
--- /dev/null+++ b/testing/opensmtpd/00-opensmtpd.patch
@@ -0,0 +1,498 @@
+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>
diff --git a/testing/opensmtpd/APKBUILD b/testing/opensmtpd/APKBUILD
new file mode 100644
index 0000000..555e043
--- /dev/null+++ b/testing/opensmtpd/APKBUILD
@@ -0,0 +1,73 @@
+# Contributor: Jonathan Curran <jonathan@curran.in>+# Maintainer: Jonathan Curran <jonathan@curran.in>+pkgname=opensmtpd+pkgver=5.7.1p1+pkgrel=0+pkgdesc="secure, reliable, lean, and easy-to configure SMTP server"+url="http://www.opensmtpd.org"+arch="all"+license="ISC"+depends=""+depends_dev=""+makedepends="automake autoconf libtool mdocml db-dev libasr libevent-dev openssl-dev"+install="$pkgname.pre-install $pkgname.post-install"+subpackages="$pkgname-doc"+source="https://www.opensmtpd.org/archives/opensmtpd-${pkgver}.tar.gz+ 00-opensmtpd.patch+ smtpd.initd+ aliases"++_builddir=${srcdir}/${pkgname}-${pkgver}+prepare() {+ local i+ cd "$_builddir"+ for i in $source; do+ case $i in+ *.patch) msg $i; patch -p1 -i "$srcdir"/$i || return 1;;+ esac+ done+}++build() {+ cd "$_builddir"+ aclocal -I m4+ autoconf+ autoheader+ automake --foreign --add-missing --copy+ ./configure --build=$CBUILD \+ --host=$CHOST \+ --prefix=/usr \+ --sysconfdir=/etc/smtpd \+ --enable-table-db \+ --with-privsep-user=smtpd \+ --with-queue-user=smtpq \+ --with-maildir=/var/spool/mail \+ --with-sock-dir=/run \+ --with-libs="-lfts" \+ --with-pie \+ --with-Werror \+ --mandir=/usr/share/man \+ --with-mantype=man || return 1+ make || return 1+}++package() {+ cd "$_builddir"+ make DESTDIR=${pkgdir} install || return 1+ sed -i 's#/etc/mail#/etc/smtpd#g' "$pkgdir"/etc/smtpd/smtpd.conf+ install -Dm755 "$srcdir"/smtpd.initd "$pkgdir"/etc/init.d/smtpd+ install -Dm644 "$srcdir"/aliases "$pkgdir"/etc/smtpd/aliases+}++md5sums="bf81fdc691808efa6acd7bdde5df757f opensmtpd-5.7.1p1.tar.gz+e90e077ee170c7806a4657f0fd5778b1 00-opensmtpd.patch+a2f311a82c9a85f5c52975c4dbbdbd53 smtpd.initd+561d2aead043a64a4ce5d66b4f78223e aliases"+sha256sums="67e9dd9682ca8c181e84e66c76245a4a8f6205834f915a2c021cdfeb22049e3a opensmtpd-5.7.1p1.tar.gz+1daa9b94e598db9b34e9a1fc717c834519824bdf7e87f1d6729c815ea5ca6acf 00-opensmtpd.patch+ab4b7f066a38dadd7a2dc6d7c3a06c3a8ac2367340d97e2a8b54f571ea0f8cf8 smtpd.initd+7bef80f8d86aa5463c864681482a4908d22ff8b6f3e47d2a410ef2d59b316b53 aliases"+sha512sums="df09c980b25a6e91a62f6de83b18e376f6c81a5bf0039fa91da90b2fe4d67bf4bc2dc6787b2d9aca0eb859cc149f980dd9c342516af5262231c97b133f804c1a opensmtpd-5.7.1p1.tar.gz+c3a60ec3785903b3118feebde6021e20f1eb26a8d6e8b8c72ae19c6f9d6a9a2ceaee32c45a0ac3ff29d24018d169273f931378c1269eec32d7e36e5d98dd475d 00-opensmtpd.patch+8152fecadeb1d818b7865eae040123f855e81fafbb4b40d12a64336e09dc486c10e6828809182c8172bfd9f54dc7d050a154b61d5e6049df6ffd8a7b6e5e1277 smtpd.initd+929ba0b8befca6cad558602f9793a9c653923924ee524902916b8ef4952d1ea8a391895e7450ed9768eb82a07bd307b49561f5d49ea4711bd87a1a73eb8d7dad aliases"
diff --git a/testing/opensmtpd/aliases b/testing/opensmtpd/aliases
new file mode 100644
index 0000000..766dc3e
--- /dev/null+++ b/testing/opensmtpd/aliases
@@ -0,0 +1,63 @@
+# Aliases in this file will NOT be expanded in the header from+# Mail, but WILL be visible over networks or from /usr/libexec/mail.local.+#+# >>>>>>>>>> The program "newaliases" must be run after+# >> NOTE >> this file is updated for any changes to+# >>>>>>>>>> show through to smtpd.+#++# Well-known aliases -- this should be filled in!+# root: your-every-day-user++# Basic system aliases -- these MUST be present+MAILER-DAEMON: postmaster+postmaster: root+operator: root++# General redirections for important pseudo accounts+daemon: root+uucp: root++# Redirections for pseudo accounts that should not receive mail+bin: /dev/null+adm: /dev/null+lp: /dev/null+sync: /dev/null+shutdown: /dev/null+halt: /dev/null+mail: /dev/null+news: /dev/null+man: /dev/null+cron: /dev/null+ftp: /dev/null+sshd: /dev/null+at: /dev/null+squid: /dev/null+gdm: /dev/null+xfs: /dev/null+games: /dev/null+named: /dev/null+mysql: /dev/null+postgres: /dev/null+apache: /dev/null+nut: /dev/null+cyrus: /dev/null+vpopmail: /dev/null+ntp: /dev/null+postfix: /dev/null+smmsp: /dev/null+distcc: /dev/null+guest: /dev/null+nobody: /dev/null++# RFC 2142: NETWORK OPERATIONS MAILBOX NAMES+abuse: root+# noc: root+security: root++# RFC 2142: SUPPORT MAILBOX NAMES FOR SPECIFIC INTERNET SERVICES+# hostmaster: root+# usenet: root+# news: usenet+# webmaster: root+# ftp: root
\ No newline at end of file
diff --git a/testing/opensmtpd/opensmtpd.post-install b/testing/opensmtpd/opensmtpd.post-install
new file mode 100644
index 0000000..f7acfaf
--- /dev/null+++ b/testing/opensmtpd/opensmtpd.post-install
@@ -0,0 +1,5 @@
+#!/bin/sh++/usr/sbin/newaliases++exit 0
diff --git a/testing/opensmtpd/opensmtpd.pre-install b/testing/opensmtpd/opensmtpd.pre-install
new file mode 100644
index 0000000..af0620e
--- /dev/null+++ b/testing/opensmtpd/opensmtpd.pre-install
@@ -0,0 +1,11 @@
+#!/bin/sh++addgroup -S smtpd 2>/dev/null+addgroup -S smtpq 2>/dev/null++adduser -S -H -D -s /sbin/nologin -h /dev/null -g 'SMTP Daemon' -G smtpd smtpd 2>/dev/null+adduser -S -H -D -s /sbin/nologin -h /dev/null -g 'SMTPD Queue' -G smtpq smtpq 2>/dev/null++mkdir -p /var/spool/mail++exit 0
diff --git a/testing/opensmtpd/smtpd.initd b/testing/opensmtpd/smtpd.initd
new file mode 100644
index 0000000..52ffd99
--- /dev/null+++ b/testing/opensmtpd/smtpd.initd
@@ -0,0 +1,24 @@
+#!/sbin/openrc-run++name="$SVCNAME"+command="/usr/sbin/$SVCNAME"+command_args="$SMTPD_OPTS"++depend() {+ need net localmount+ after bootmisc firewall+ use logger dns+ provide mta+}++start() {+ ebegin "Starting smtpd ${CONF_MESSAGE}"+ /usr/sbin/smtpd+ eend $?+}++stop() {+ ebegin "Stopping smtpd ${CONF_MESSAGE}"+ /usr/sbin/smtpctl stop &> /dev/null+ eend $?+}
\ No newline at end of file
--
2.4.1
---
Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org
Help: alpine-aports+help@lists.alpinelinux.org
---
On Wed, 9 Sep 2015 20:31:03 +0000
Jonathan Curran <jonathan@curran.in> wrote:
> This aport provides the portable version of OpenSMTPD patched to work> with musl.> > Parts of the patch will be submitted upstream soon.> > https://opensmtpd.org> ---> testing/opensmtpd/00-opensmtpd.patch | 498 +++++++++++++++++++++++++++++++> testing/opensmtpd/APKBUILD | 73 +++++> testing/opensmtpd/aliases | 63 ++++> testing/opensmtpd/opensmtpd.post-install | 5 +> testing/opensmtpd/opensmtpd.pre-install | 11 +> testing/opensmtpd/smtpd.initd | 24 ++> 6 files changed, 674 insertions(+)> create mode 100644 testing/opensmtpd/00-opensmtpd.patch> create mode 100644 testing/opensmtpd/APKBUILD> create mode 100644 testing/opensmtpd/aliases> create mode 100644 testing/opensmtpd/opensmtpd.post-install> create mode 100644 testing/opensmtpd/opensmtpd.pre-install> create mode 100644 testing/opensmtpd/smtpd.initd
It seems like we already have a opensmtpd implementation in aports.
Can you please test it and rebase your patch if needed?
-nc
---
Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org
Help: alpine-aports+help@lists.alpinelinux.org
---
On Tue, 15 Sep 2015 09:48:12 +0200
Natanael Copa <ncopa@alpinelinux.org> wrote:
> On Wed, 9 Sep 2015 20:31:03 +0000> Jonathan Curran <jonathan@curran.in> wrote:> > > This aport provides the portable version of OpenSMTPD patched to work> > with musl.> > > > Parts of the patch will be submitted upstream soon.> > > > https://opensmtpd.org> > ---> > testing/opensmtpd/00-opensmtpd.patch | 498 +++++++++++++++++++++++++++++++> > testing/opensmtpd/APKBUILD | 73 +++++> > testing/opensmtpd/aliases | 63 ++++> > testing/opensmtpd/opensmtpd.post-install | 5 +> > testing/opensmtpd/opensmtpd.pre-install | 11 +> > testing/opensmtpd/smtpd.initd | 24 ++> > 6 files changed, 674 insertions(+)> > create mode 100644 testing/opensmtpd/00-opensmtpd.patch> > create mode 100644 testing/opensmtpd/APKBUILD> > create mode 100644 testing/opensmtpd/aliases> > create mode 100644 testing/opensmtpd/opensmtpd.post-install> > create mode 100644 testing/opensmtpd/opensmtpd.pre-install> > create mode 100644 testing/opensmtpd/smtpd.initd> > It seems like we already have a opensmtpd implementation in aports.
Sorry. it was something i had locally only. It does apply.
But I get a checksum error on smtpd.initd.
> diff --git a/testing/opensmtpd/smtpd.initd b/testing/opensmtpd/smtpd.initd> new file mode 100644> index 0000000..b88f5ba> --- /dev/null> +++ b/testing/opensmtpd/smtpd.initd> @@ -0,0 +1,24 @@> +#!/sbin/openrc-run> +> +name="busybox $SVCNAME"
opensmtpd is not a busybox applet so busybox should not be in the
service name.
Care to fix the init.d script and send a v2 patch?
see
http://wiki.alpinelinux.org/wiki/Creating_patches#Resend_an_updated_patch
-nc
---
Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org
Help: alpine-aports+help@lists.alpinelinux.org
---
Re: [alpine-aports] [PATCH v2] testing/opensmtpd: new aport
On Thu, 10 Sep 2015 21:01:14 +0000
Jonathan Curran <jonathan@curran.in> wrote:
> This aport provides the portable version of OpenSMTPD patched to work> with musl.> > Parts of the patch will be submitted upstream soon.> > https://opensmtpd.org> ---> Changes v1 -> v2:> - updated smtpd.initd
I let it only build on x86_64 for now because it failed on 32bit:
gcc -DHAVE_CONFIG_H -I. -I../.. -I../../smtpd -I../../openbsd-compat -I. -I/usr/include -Os -fomit-frame-pointer -DSMTPD_CONFDIR=\"/etc/smtpd\" -DPATH_CHROOT=\"/var/empty\" -DPATH_SMTPCTL=\"/usr/sbin/smtpctl\" -DPATH_MAILLOCAL=\"/usr/libexec/opensmtpd/mail.local\" -DPATH_LIBEXEC=\"/usr/libexec/opensmtpd\" -DHAVE_CONFIG_H -DNO_IO -DPATH_GZCAT=\"/bin/zcat\" -DPATH_ENCRYPT=\"/usr/libexec/opensmtpd/encrypt\" -Os -fomit-frame-pointer -fPIC -DPIC -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -fno-builtin-memset -fPIE -Werror -D_GNU_SOURCE -c -o ../../smtpd/smtpctl-crypto.o `test -f '../../smtpd/crypto.c' || echo './'`../../smtpd/crypto.c
../../smtpd/smtpctl.c: In function 'do_show_sizes':
../../smtpd/smtpctl.c:726:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct userinfo=%ld\n", sizeof (struct userinfo));
^
../../smtpd/smtpctl.c:727:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct netaddr=%ld\n", sizeof (struct netaddr));
^
../../smtpd/smtpctl.c:728:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct relayhost=%ld\n", sizeof (struct relayhost));
^
../../smtpd/smtpctl.c:729:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct credentials=%ld\n", sizeof (struct credentials));
^
../../smtpd/smtpctl.c:730:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct destination=%ld\n", sizeof (struct destination));
^
../../smtpd/smtpctl.c:731:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct source=%ld\n", sizeof (struct source));
^
../../smtpd/smtpctl.c:732:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct addrname=%ld\n", sizeof (struct addrname));
^
../../smtpd/smtpctl.c:733:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("union lookup=%ld\n", sizeof (union lookup));
^
../../smtpd/smtpctl.c:734:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct delivery_mda=%ld\n", sizeof (struct delivery_mda));
^
../../smtpd/smtpctl.c:735:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct delivery_mta=%ld\n", sizeof (struct delivery_mta));
^
../../smtpd/smtpctl.c:736:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct envelope=%ld\n", sizeof (struct envelope));
^
../../smtpd/smtpctl.c:737:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct forward_req=%ld\n", sizeof (struct forward_req));
^
../../smtpd/smtpctl.c:738:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct deliver=%ld\n", sizeof (struct deliver));
^
../../smtpd/smtpctl.c:739:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct bounce_req_msg=%ld\n", sizeof (struct bounce_req_msg));
^
../../smtpd/smtpctl.c:740:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct ca_cert_req_msg=%ld\n", sizeof (struct ca_cert_req_msg));
^
../../smtpd/smtpctl.c:741:9: error: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Werror=format=]
printf("struct ca_vrfy_req_msg=%ld\n", sizeof (struct ca_vrfy_req_msg));
^
cc1: all warnings being treated as errors
---
Unsubscribe: alpine-aports+unsubscribe@lists.alpinelinux.org
Help: alpine-aports+help@lists.alpinelinux.org
---