aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/mailwrapper
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/mailwrapper')
-rw-r--r--usr.sbin/mailwrapper/Makefile48
-rw-r--r--usr.sbin/mailwrapper/Makefile.depend16
-rw-r--r--usr.sbin/mailwrapper/mailwrapper.8191
-rw-r--r--usr.sbin/mailwrapper/mailwrapper.c184
-rw-r--r--usr.sbin/mailwrapper/pathnames.h36
5 files changed, 475 insertions, 0 deletions
diff --git a/usr.sbin/mailwrapper/Makefile b/usr.sbin/mailwrapper/Makefile
new file mode 100644
index 000000000000..c1b395c81e4e
--- /dev/null
+++ b/usr.sbin/mailwrapper/Makefile
@@ -0,0 +1,48 @@
+.include <src.opts.mk>
+
+.if ${MK_MAILWRAPPER} != "no"
+PROG= mailwrapper
+MAN= mailwrapper.8
+
+LIBADD= util
+.endif
+
+.if ${MK_MAILWRAPPER} != "no" || ${MK_SENDMAIL} != "no" || ${MK_DMAGENT} != "no"
+SYMLINKS= ../sbin/mailwrapper /usr/bin/mailq \
+ ../sbin/mailwrapper /usr/bin/newaliases \
+ mailwrapper /usr/sbin/hoststat \
+ mailwrapper /usr/sbin/purgestat \
+ mailwrapper /usr/sbin/sendmail
+
+.if ${MK_MAILWRAPPER} == "no" && ${MK_DMAGENT} != "no"
+SYMLINKS+= ../libexec/dma ${BINDIR}/mailwrapper
+.elif ${MK_MAILWRAPPER} == "no" && ${MK_DMAGENT} == "no" && ${MK_SENDMAIL} != "no"
+SYMLINKS+= ../libexec/sendmail/sendmail ${BINDIR}/mailwrapper
+.endif
+.endif
+
+.if ${MK_MAILWRAPPER} != "no" && ${MK_SENDMAIL} == "no"
+SYMLINKS+= ..${BINDIR}/mailwrapper /bin/rmail
+.endif
+
+.if ${MK_SENDMAIL} != "no"
+FILES= ${SRCTOP}/etc/mail/mailer.conf
+FILESDIR= ${SHAREDIR}/examples/sendmail
+FILESPACKAGE= sendmail
+.endif
+
+.if ${MK_MAILWRAPPER} != "no"
+# We install here if either dma(8) is enabled, or sendmail(8) isn't. In the
+# latter scenario, we take care of the possibility that neither sendmail(8) nor
+# dma(8) are installed and simply provide a default that can be changed for an
+# alternative in ports.
+.if ${MK_DMAGENT} != "no" || ${MK_SENDMAIL} == "no"
+CONFS= ${SRCTOP}/libexec/dma/dmagent/mailer.conf
+.else
+CONFS= ${SRCTOP}/etc/mail/mailer.conf
+.endif
+CONFSDIR= /etc/mail
+CONFSMODE= 644
+.endif
+
+.include <bsd.prog.mk>
diff --git a/usr.sbin/mailwrapper/Makefile.depend b/usr.sbin/mailwrapper/Makefile.depend
new file mode 100644
index 000000000000..678747db6f2c
--- /dev/null
+++ b/usr.sbin/mailwrapper/Makefile.depend
@@ -0,0 +1,16 @@
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ include \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ lib/libutil \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/usr.sbin/mailwrapper/mailwrapper.8 b/usr.sbin/mailwrapper/mailwrapper.8
new file mode 100644
index 000000000000..c0f201318f53
--- /dev/null
+++ b/usr.sbin/mailwrapper/mailwrapper.8
@@ -0,0 +1,191 @@
+.\" $OpenBSD: mailwrapper.8,v 1.12 2014/03/27 22:34:42 jmc Exp $
+.\" $NetBSD: mailwrapper.8,v 1.16 2014/09/19 16:05:55 wiz Exp $
+.\"
+.\" Copyright (c) 1998
+.\" Perry E. Metzger. 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. All advertising materials mentioning features or use of this software
+.\" must display the following acknowledgment:
+.\" This product includes software developed for the NetBSD Project
+.\" by Perry E. Metzger.
+.\" 4. The name of the author may not be used to endorse or promote products
+.\" derived from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+.\"
+.Dd October 29, 2014
+.Dt MAILWRAPPER 8
+.Os
+.Sh NAME
+.Nm mailwrapper
+.Nd invoke appropriate
+.Tn MTA
+software based on configuration file
+.Sh SYNOPSIS
+Special.
+See below.
+.Sh DESCRIPTION
+Once upon time, the only Mail Transfer Agent
+.Pq Tn MTA
+software easily available was
+.Dq sendmail .
+This famous
+.Tn MTA
+was written by
+.An Eric Allman
+and first appeared in
+.Bx 4.1 .
+The legacy of this
+.Tn MTA
+affected most Mail User Agents
+.Pq Tn MUAs
+such as
+.Xr mail 1 ;
+the path and calling conventions expected by
+.Dq sendmail
+were compiled in.
+.Pp
+But times changed.
+On a modern
+.Fx
+system, the administrator may wish to use one of several available
+.Tn MTAs .
+.Pp
+It would be difficult to modify all
+.Tn MUA
+software typically available on a system,
+so most of the authors of alternative
+.Tn MTAs
+have written their front end message submission programs
+that may appear in the place of
+.Pa /usr/sbin/sendmail ,
+but still follow the same calling conventions as
+.Dq sendmail .
+.Pp
+The
+.Dq sendmail
+.Tn MTA
+also typically has aliases named
+.Xr mailq 1
+and
+.Xr newaliases 1
+linked to it.
+The program knows to behave differently when its
+.Va argv[0]
+is
+.Dq mailq
+or
+.Dq newaliases
+and behaves appropriately.
+Typically, replacement
+.Tn MTAs
+provide similar functionality, either through a program that also
+switches behavior based on calling name, or through a set of programs
+that provide similar functionality.
+.Pp
+Although having replacement programs that plug replace
+.Dq sendmail
+helps in installing alternative
+.Tn MTAs ,
+it essentially makes the configuration of the system depend
+on hand installing new programs in
+.Pa /usr .
+This leads to configuration problems for many administrators, since
+they may wish to install a new
+.Tn MTA
+without altering the system provided
+.Pa /usr .
+(This may be, for example, to avoid having upgrade problems when a new
+version of the system is installed over the old.)
+They may also have a shared
+.Pa /usr
+among several machines, and may wish to avoid placing
+implicit configuration information in a read-only
+.Pa /usr .
+.Pp
+The
+.Nm
+program is designed to replace
+.Pa /usr/sbin/sendmail
+and to invoke an appropriate
+.Tn MTA
+based on configuration information placed in
+.Pa ${LOCALBASE}/etc/mail/mailer.conf
+falling back on
+.Pa /etc/mail/mailer.conf .
+This permits the administrator to configure which
+.Tn MTA
+is to be invoked on
+the system at run time.
+.Pp
+Other configuration files may need to be altered when replacing
+.Xr sendmail 8 .
+For example, if the replacement
+.Tn MTA
+does not support the
+.Fl A
+option with
+.Xr mailq 1 ,
+.Va daily_status_include_submit_mailq
+should be turned off in
+.Pa /etc/periodic.conf .
+.Sh FILES
+Configuration for
+.Nm
+is kept in
+.Pa ${LOCALBASE}/etc/mail/mailer.conf
+or
+.Pa /etc/mail/mailer.conf .
+.Pa /usr/sbin/sendmail
+is typically set up as a symbolic link to
+.Nm
+which is not usually invoked on its own.
+.Sh EXIT STATUS
+.Ex -std
+.Sh DIAGNOSTICS
+The
+.Nm
+will print a diagnostic if its configuration file is missing or malformed,
+or does not contain a mapping for the name under which it was invoked.
+.Sh SEE ALSO
+.Xr mail 1 ,
+.Xr mailq 1 ,
+.Xr newaliases 1 ,
+.Xr mailer.conf 5 ,
+.Xr periodic.conf 5 ,
+.Xr dma 8 ,
+.Xr sendmail 8
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Nx 1.4
+and then
+.Fx 4.0 .
+.Sh AUTHORS
+.An Perry E. Metzger Aq Mt perry@piermont.com
+.Sh BUGS
+The entire reason this program exists is a crock.
+Instead, a command
+for how to submit mail should be standardized, and all the
+.Dq behave differently if invoked with a different name
+behavior of things like
+.Xr mailq 1
+should go away.
diff --git a/usr.sbin/mailwrapper/mailwrapper.c b/usr.sbin/mailwrapper/mailwrapper.c
new file mode 100644
index 000000000000..b060ff970045
--- /dev/null
+++ b/usr.sbin/mailwrapper/mailwrapper.c
@@ -0,0 +1,184 @@
+/* $OpenBSD: mailwrapper.c,v 1.18 2007/11/06 14:39:19 otto Exp $ */
+/* $NetBSD: mailwrapper.c,v 1.9 2003/03/09 08:10:43 mjl Exp $ */
+
+/*-
+ * SPDX-License-Identifier: BSD-4-Clause
+ *
+ * Copyright (c) 1998
+ * Perry E. Metzger. 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgment:
+ * This product includes software developed for the NetBSD Project
+ * by Perry E. Metzger.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+#include <sys/param.h>
+
+#include <err.h>
+#include <paths.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <libutil.h>
+#include <sysexits.h>
+#include <syslog.h>
+
+#include "pathnames.h"
+
+struct arglist {
+ size_t argc, maxc;
+ char **argv;
+};
+
+int main(int, char *[], char *[]);
+
+static void initarg(struct arglist *);
+static void addarg(struct arglist *, const char *);
+
+static void
+initarg(struct arglist *al)
+{
+ al->argc = 0;
+ al->maxc = 10;
+ if ((al->argv = calloc(al->maxc, sizeof(char *))) == NULL)
+ err(EX_TEMPFAIL, "calloc");
+}
+
+static void
+addarg(struct arglist *al, const char *arg)
+{
+
+ if (al->argc == al->maxc) {
+ al->maxc <<= 1;
+ al->argv = realloc(al->argv, al->maxc * sizeof(char *));
+ if (al->argv == NULL)
+ err(EX_TEMPFAIL, "realloc");
+ }
+ if (arg == NULL)
+ al->argv[al->argc++] = NULL;
+ else if ((al->argv[al->argc++] = strdup(arg)) == NULL)
+ err(EX_TEMPFAIL, "strdup");
+}
+
+int
+main(int argc, char *argv[], char *envp[])
+{
+ FILE *config;
+ char *line, *cp, *from, *to, *ap;
+ const char *progname;
+ char localmailerconf[MAXPATHLEN];
+ const char *mailerconf;
+ size_t len, lineno = 0;
+ int i;
+ struct arglist al;
+
+ /* change __progname to mailwrapper so we get sensible error messages */
+ progname = getprogname();
+ setprogname("mailwrapper");
+
+ initarg(&al);
+ addarg(&al, argv[0]);
+
+ snprintf(localmailerconf, MAXPATHLEN, "%s/etc/mail/mailer.conf",
+ getlocalbase());
+
+ mailerconf = localmailerconf;
+ if ((config = fopen(localmailerconf, "r")) == NULL)
+ mailerconf = _PATH_MAILERCONF;
+
+ if (config == NULL && ((config = fopen(mailerconf, "r")) == NULL)) {
+ int serrno = errno;
+ openlog(getprogname(), LOG_PID, LOG_MAIL);
+
+ if (serrno == ENOENT) {
+ addarg(&al, NULL);
+ syslog(LOG_INFO, "%s does not exist, using %s as default MTA",
+ mailerconf, _PATH_DEFAULTMTA);
+ closelog();
+ execve(_PATH_DEFAULTMTA, al.argv, envp);
+ err(EX_OSERR, "cannot exec %s", _PATH_DEFAULTMTA);
+ } else {
+ syslog(LOG_INFO, "cannot open %s: %s",
+ mailerconf, strerror(serrno));
+ closelog();
+ errno = serrno;
+ err(EX_OSERR, "cannot open %s", mailerconf);
+ }
+ /*NOTREACHED*/
+ }
+
+ for (;;) {
+ if ((line = fparseln(config, &len, &lineno, NULL, 0)) == NULL) {
+ if (feof(config))
+ errx(EX_CONFIG, "no mapping in %s", mailerconf);
+ err(EX_CONFIG, "cannot parse line %lu", (u_long)lineno);
+ }
+
+#define WS " \t\n"
+ cp = line;
+
+ cp += strspn(cp, WS);
+ if (cp[0] == '\0') {
+ /* empty line */
+ free(line);
+ continue;
+ }
+
+ if ((from = strsep(&cp, WS)) == NULL || cp == NULL)
+ goto parse_error;
+
+ cp += strspn(cp, WS);
+
+ if ((to = strsep(&cp, WS)) == NULL)
+ goto parse_error;
+
+ if (strcmp(from, progname) == 0) {
+ for (ap = strsep(&cp, WS); ap != NULL;
+ ap = strsep(&cp, WS)) {
+ if (*ap)
+ addarg(&al, ap);
+ }
+ break;
+ }
+
+ free(line);
+ }
+
+ (void)fclose(config);
+
+ for (i = 1; i < argc; i++)
+ addarg(&al, argv[i]);
+
+ addarg(&al, NULL);
+ execve(to, al.argv, envp);
+ err(EX_OSERR, "cannot exec %s", to);
+ /*NOTREACHED*/
+parse_error:
+ errx(EX_CONFIG, "parse error in %s at line %lu",
+ mailerconf, (u_long)lineno);
+ /*NOTREACHED*/
+}
diff --git a/usr.sbin/mailwrapper/pathnames.h b/usr.sbin/mailwrapper/pathnames.h
new file mode 100644
index 000000000000..442503af8dd4
--- /dev/null
+++ b/usr.sbin/mailwrapper/pathnames.h
@@ -0,0 +1,36 @@
+
+/*-
+ * SPDX-License-Identifier: BSD-4-Clause
+ *
+ * Copyright (c) 1998
+ * Perry E. Metzger. 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. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgment:
+ * This product includes software developed for the NetBSD Project
+ * by Perry E. Metzger.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
+ */
+
+#define _PATH_MAILERCONF "/etc/mail/mailer.conf"
+#define _PATH_DEFAULTMTA "/usr/libexec/dma"