There is a bug in Alpine whereby out of the box it is unable to send email on
an OpenBSD box, even locally. By default, sending a message in unconfigured
Alpine will fork out to sendmail(8) which hangs for some unknown reason and
the sendmail wrapper process needs to be killed. Receiving mail works fine.

Running /usr/sbin/sendmail -t < ~/dead.letter against the abandoned message
works fine, so the interface between Alpine and the sendmail wrapper is
broken.

I ran a ktrace but couldn't find anything substantiative. Rather than debug
this further, there is a much simpler patch to get Alpine working in the
default install. The below change sets the value of smtp-server to localhost
in the file which gets copied to /etc/pine.conf on installation. With this
variable set, Alpine connects to the local smtpd over TCP rather than using
the sendmail(8) utility, if the user has no smtp server defined.

/etc/pine.conf is overridden by the user's ~/.pinerc so this should be a
non-destructive change that will not impact anything but an unconfigured
installation which falls back to using sendmail(8), which does not work.

If it *did* work, then I believe --with-smtp-msa-flags=-t should be set in
the Makefile as well since the hard-coded defaults pass bogus flags to
sendmail(8). This didn't work either so it really doesn't matter, I believe
the issue lies somewhere in the threading mechanism and how it forks out
to sendmail. It's possible a prior security-related change broke something.

This issue dates back to at least OpenBSD 6.8:

https://marc.info/?l=openbsd-misc&m=161141614219034&w=2

Index: Makefile
===================================================================
RCS file: /cvs/ports/mail/alpine/Makefile,v
retrieving revision 1.63
diff -u -p -u -p -r1.63 Makefile
--- Makefile    28 Jan 2025 20:09:20 -0000      1.63
+++ Makefile    29 Apr 2025 01:00:09 -0000
@@ -99,7 +99,8 @@ post-install:
                ${WRKSRC}/doc/mailcap.unx \
                ${WRKSRC}/doc/mime.types \
                ${PREFIX}/share/doc/alpine
-       ${WRKBUILD}/alpine/alpine -conf > \
+       ${WRKBUILD}/alpine/alpine -conf | sed \
+               's/smtp-server=/smtp-server=localhost/' > \
                ${PREFIX}/share/examples/alpine/pine.conf
        # c-client
        # the relevant os_*.h is copied to osdep.h in build; others not needed

Reply via email to