diff options
Diffstat (limited to 'usr.sbin/mailwrapper')
| -rw-r--r-- | usr.sbin/mailwrapper/Makefile | 48 | ||||
| -rw-r--r-- | usr.sbin/mailwrapper/Makefile.depend | 16 | ||||
| -rw-r--r-- | usr.sbin/mailwrapper/mailwrapper.8 | 191 | ||||
| -rw-r--r-- | usr.sbin/mailwrapper/mailwrapper.c | 184 | ||||
| -rw-r--r-- | usr.sbin/mailwrapper/pathnames.h | 36 |
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" |
